hammer-ai 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +105 -1
- package/dist/index.js +38 -38
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tiktoken-estimator.ts","../src/configure.ts","../src/llm-client.ts","../src/agent-machine.ts","../src/tool-usage-examples.ts","../src/tool-call-prompts.ts","../src/unix-tooling.ts","../src/shell-escape-normalization.ts","../src/run-command-registry.ts","../src/command-response-utils.ts","../src/prompt-helpers.ts","../src/tool-helpers.ts","../src/schemas.ts","../src/agent-response-parser.ts","../src/tool-call-recovery.ts","../src/agent-loop.ts","../src/tool-loop-agent-runtime.ts","../src/memory-layer.ts","../src/memory-compaction-prompts.ts","../src/memory-compaction-utils.ts","../src/agent-memory-layer.ts","../src/agent-memory-factory.ts","../src/streaming-tool-parser.ts","../src/validation-enforcer.ts","../src/web-runtime-tooling.ts","../src/web-validation-enforcer.ts","../src/web-agent-types.ts","../src/web-tool-loop-agent-runtime.ts","../src/runtime-store.ts","../src/agent-thread.ts","../src/web-search-tool-actions.ts","../src/Tool.ts","../src/registry.ts","../src/ProxyTool.ts","../src/tool-loop-step-executor.ts"],"names":["derivePassthroughParam","derivePositionalParams","toFlagName","isStringType","flagName","parameterEntry","isBooleanType","firstTranscriptArtifactLineIndex","target","detail","setup","entry","TiktokenEstimator"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Precise token estimator using tiktoken (cl100k_base encoding).\n *\n * Separated into its own module so environments can opt into the tiktoken WASM\n * dependency explicitly. Browser runtimes should reach it through async\n * estimator helpers instead of importing it from hot paths.\n */\n\nimport { encoding_for_model, type Tiktoken } from \"tiktoken\"\nimport type { TokenEstimator } from \"./memory-layer\"\n\nexport class TiktokenEstimator implements TokenEstimator {\n private encoder: Tiktoken | null\n\n constructor() {\n try {\n this.encoder = encoding_for_model(\"gpt-4\")\n } catch (err) {\n throw new Error(\n `Failed to initialize tiktoken encoder (WASM may not be available in this environment): ${err instanceof Error ? err.message : err}`,\n )\n }\n }\n\n estimateTokens(text: string): number {\n if (!this.encoder) throw new Error(\"TiktokenEstimator has been disposed\")\n return this.encoder.encode(text).length\n }\n\n dispose(): void {\n if (this.encoder) {\n this.encoder.free()\n this.encoder = null\n }\n }\n}\n","/**\r\n * configure.ts — global configuration store for hammer-agent.\r\n *\r\n * Call `configure(options)` once at app startup to register provider configs\r\n * and optional overrides (timeouts, memory limits, etc.).\r\n *\r\n * Provider configs are looked up by name via `getProviderConfig(name)`.\r\n * Any name not explicitly configured falls back to a runtime error explaining\r\n * what to register — no hardcoded API keys ship in this library.\r\n */\r\n\r\nimport type { LLMProviderConfig, ProviderName } from \"./types\"\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface HammerAgentProviderPreset {\r\n apiKey: string\r\n baseUrl: string\r\n model: string\r\n /** Extra headers merged into every request (e.g. HTTP-Referer for OpenRouter). */\r\n extraHeaders?: Record<string, string>\r\n}\r\n\r\n/**\r\n * Options accepted by `configure()`.\r\n *\r\n * `providers` is a map from provider name to provider config. You only need\r\n * to register the providers your agent actually uses.\r\n *\r\n * All other fields have sensible defaults and are optional.\r\n */\r\nexport interface HammerAgentConfig {\r\n /**\r\n * Named provider presets. Keys are `ProviderName` strings, values are\r\n * provider configs. Pass at minimum the provider(s) your agent uses.\r\n *\r\n * @example\r\n * configure({\r\n * providers: {\r\n * openrouter: { apiKey: process.env.OPENROUTER_KEY!, baseUrl: '...', model: '...' },\r\n * minimax: { apiKey: process.env.MINIMAX_KEY!, baseUrl: '...', model: '...' },\r\n * },\r\n * compactionProvider: 'minimax',\r\n * })\r\n */\r\n providers?: Partial<Record<ProviderName, HammerAgentProviderPreset>>\r\n\r\n /**\r\n * Which provider to use for memory compaction LLM calls.\r\n * Must be a key in `providers`.\r\n * @default first key in `providers`, or throws if not configured\r\n */\r\n compactionProvider?: ProviderName\r\n\r\n // ---- Stream timeout overrides ----------------------------------------\r\n\r\n /**\r\n * Milliseconds without any SSE data before treating the stream as frozen.\r\n * @default 60_000\r\n */\r\n streamInactivityTimeout?: number\r\n\r\n /**\r\n * Maximum milliseconds to wait for the very first SSE chunk.\r\n * @default 120_000\r\n */\r\n firstChunkTimeout?: number\r\n\r\n // ---- Memory layer hard caps ------------------------------------------\r\n\r\n /** @default 100 */\r\n maxRetainedNotes?: number\r\n /** @default 50 */\r\n maxFailedAttempts?: number\r\n /** @default 100 */\r\n maxCodebaseEvidence?: number\r\n /** @default 50 */\r\n maxResearchEvidence?: number\r\n /** @default 50 */\r\n maxConstraints?: number\r\n /** @default 50 */\r\n maxOpenTasks?: number\r\n /** @default 50 */\r\n maxResolvedTasks?: number\r\n\r\n // ---- Compaction LLM defaults ----------------------------------------\r\n\r\n /** @default 0.1 */\r\n compactionLlmTemperature?: number\r\n /** @default 4096 */\r\n compactionLlmMaxTokens?: number\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal config store (module-level singleton)\r\n// ---------------------------------------------------------------------------\r\n\r\ninterface ResolvedConfig {\r\n providers: Map<string, LLMProviderConfig>\r\n compactionProvider: ProviderName | null\r\n streamInactivityTimeout: number\r\n firstChunkTimeout: number\r\n maxRetainedNotes: number\r\n maxFailedAttempts: number\r\n maxCodebaseEvidence: number\r\n maxResearchEvidence: number\r\n maxConstraints: number\r\n maxOpenTasks: number\r\n maxResolvedTasks: number\r\n compactionLlmTemperature: number\r\n compactionLlmMaxTokens: number\r\n}\r\n\r\nconst _config: ResolvedConfig = {\r\n providers: new Map(),\r\n compactionProvider: null,\r\n streamInactivityTimeout: 60_000,\r\n firstChunkTimeout: 120_000,\r\n maxRetainedNotes: 100,\r\n maxFailedAttempts: 50,\r\n maxCodebaseEvidence: 100,\r\n maxResearchEvidence: 50,\r\n maxConstraints: 50,\r\n maxOpenTasks: 50,\r\n maxResolvedTasks: 50,\r\n compactionLlmTemperature: 0.1,\r\n compactionLlmMaxTokens: 4096,\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Configure hammer-agent at startup.\r\n *\r\n * This function is safe to call multiple times — later calls merge over\r\n * earlier ones, so you can split configuration across modules.\r\n *\r\n * @example\r\n * import { configure } from 'hammer-agent'\r\n *\r\n * configure({\r\n * providers: {\r\n * minimax: {\r\n * apiKey: process.env.MINIMAX_KEY!,\r\n * baseUrl: 'https://api.minimaxi.com/v1',\r\n * model: 'MiniMax-M2.7-highspeed',\r\n * },\r\n * },\r\n * compactionProvider: 'minimax',\r\n * })\r\n */\r\nexport function configure(options: HammerAgentConfig): void {\r\n if (options.providers) {\r\n for (const [name, preset] of Object.entries(options.providers)) {\r\n if (preset) {\r\n _config.providers.set(name, preset as LLMProviderConfig)\r\n }\r\n }\r\n }\r\n\r\n if (options.compactionProvider !== undefined) {\r\n _config.compactionProvider = options.compactionProvider\r\n }\r\n\r\n if (options.streamInactivityTimeout !== undefined) {\r\n _config.streamInactivityTimeout = options.streamInactivityTimeout\r\n }\r\n\r\n if (options.firstChunkTimeout !== undefined) {\r\n _config.firstChunkTimeout = options.firstChunkTimeout\r\n }\r\n\r\n if (options.maxRetainedNotes !== undefined) _config.maxRetainedNotes = options.maxRetainedNotes\r\n if (options.maxFailedAttempts !== undefined) _config.maxFailedAttempts = options.maxFailedAttempts\r\n if (options.maxCodebaseEvidence !== undefined) _config.maxCodebaseEvidence = options.maxCodebaseEvidence\r\n if (options.maxResearchEvidence !== undefined) _config.maxResearchEvidence = options.maxResearchEvidence\r\n if (options.maxConstraints !== undefined) _config.maxConstraints = options.maxConstraints\r\n if (options.maxOpenTasks !== undefined) _config.maxOpenTasks = options.maxOpenTasks\r\n if (options.maxResolvedTasks !== undefined) _config.maxResolvedTasks = options.maxResolvedTasks\r\n if (options.compactionLlmTemperature !== undefined) _config.compactionLlmTemperature = options.compactionLlmTemperature\r\n if (options.compactionLlmMaxTokens !== undefined) _config.compactionLlmMaxTokens = options.compactionLlmMaxTokens\r\n}\r\n\r\n/**\r\n * Return the `LLMProviderConfig` registered for `name`.\r\n * Throws a descriptive error if the provider has not been configured.\r\n */\r\nexport function getProviderConfig(name: ProviderName): LLMProviderConfig {\r\n const config = _config.providers.get(name)\r\n if (!config) {\r\n throw new Error(\r\n `hammer-agent: provider \"${name}\" is not configured. ` +\r\n `Call configure({ providers: { \"${name}\": { apiKey, baseUrl, model } } }) before using this provider.`\r\n )\r\n }\r\n\r\n return config\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal accessors (used by lib internals — not re-exported from index)\r\n// ---------------------------------------------------------------------------\r\n\r\nexport function getStreamInactivityTimeout(): number {\r\n return _config.streamInactivityTimeout\r\n}\r\n\r\nexport function getFirstChunkTimeout(): number {\r\n return _config.firstChunkTimeout\r\n}\r\n\r\nexport function getCompactionProvider(): ProviderName | null {\r\n return _config.compactionProvider\r\n}\r\n\r\nexport function getMaxRetainedNotes(): number { return _config.maxRetainedNotes }\r\nexport function getMaxFailedAttempts(): number { return _config.maxFailedAttempts }\r\nexport function getMaxCodebaseEvidence(): number { return _config.maxCodebaseEvidence }\r\nexport function getMaxResearchEvidence(): number { return _config.maxResearchEvidence }\r\nexport function getMaxConstraints(): number { return _config.maxConstraints }\r\nexport function getMaxOpenTasks(): number { return _config.maxOpenTasks }\r\nexport function getMaxResolvedTasks(): number { return _config.maxResolvedTasks }\r\nexport function getCompactionLlmTemperature(): number { return _config.compactionLlmTemperature }\r\nexport function getCompactionLlmMaxTokens(): number { return _config.compactionLlmMaxTokens }\r\n","/**\n * LLMClient – generic, browser-compatible streaming client for\n * OpenAI-compatible chat completion endpoints.\n *\n * This is the heart of the shared library. It handles:\n * • Building the request payload\n * • SSE streaming with inactivity / first-chunk timeouts\n * • Retry with exponential back-off on network and transient HTTP errors\n * • Pluggable callbacks so the consumer decides how to render output\n *\n * No Node.js-only APIs (chalk, process, fs) are used here – it works in\n * both Node 22+ and modern browsers.\n */\n\nimport type {\n FetchResponseLike,\n LLMProviderConfig,\n LLMRequestOptions,\n LLMClientResponse,\n StreamCallbacks\n} from \"./types\"\nimport { getStreamInactivityTimeout, getFirstChunkTimeout } from \"./configure\"\n\nfunction shouldOmitTemperature(config: LLMProviderConfig): boolean {\n return config.model === \"kimi-k2.5\"\n}\n\nfunction buildChatPayload(\n config: LLMProviderConfig,\n basePayload: {\n model: string\n messages: LLMRequestOptions[\"messages\"]\n temperature: number\n max_tokens: number\n frequency_penalty: number\n presence_penalty: number\n stream: boolean\n },\n): Record<string, unknown> {\n const payload: Record<string, unknown> = { ...basePayload }\n\n // Moonshot's kimi-k2.5 rejects caller-specified temperature values.\n // Omitting the field lets the API apply its own fixed mode-specific value.\n if (shouldOmitTemperature(config)) {\n delete payload.temperature\n }\n\n return payload\n}\n\n// ---------------------------------------------------------------------------\n// LLMClient\n// ---------------------------------------------------------------------------\n\nexport class LLMClient {\n private config: LLMProviderConfig\n\n constructor(config: LLMProviderConfig) {\n this.config = config\n }\n\n /** Swap the underlying provider at runtime. */\n setConfig(config: LLMProviderConfig): void {\n this.config = config\n }\n\n /** Read-only access to the current provider config. */\n getConfig(): LLMProviderConfig {\n return this.config\n }\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n /**\n * Send a chat completion request.\n *\n * When `options.stream` is true (the default) the response is streamed\n * token-by-token through the supplied `callbacks`.\n */\n async chat(\n options: LLMRequestOptions,\n callbacks?: StreamCallbacks\n ): Promise<LLMClientResponse> {\n const {\n messages,\n temperature = 0.2,\n maxTokens = 16384 * 2,\n stream = true,\n frequencyPenalty = 0,\n presencePenalty = 0,\n signal\n } = options\n\n const payload = buildChatPayload(this.config, {\n model: this.config.model,\n messages,\n temperature,\n max_tokens: maxTokens,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n stream\n })\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.config.apiKey}`,\n ...(this.config.extraHeaders ?? {})\n }\n\n const url = `${this.config.baseUrl}/chat/completions`\n const log = callbacks?.onLog ?? (() => {})\n\n let lastError: unknown\n const maxRetries = 3\n\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n try {\n if (signal?.aborted) {\n throw createAbortError(signal.reason)\n }\n\n if (attempt > 1) {\n log(`Retry attempt ${attempt}/${maxRetries}…`, \"warn\")\n await sleep(1000 * attempt)\n }\n\n const controller = new AbortController()\n const abortFetch = () => {\n controller.abort(signal?.reason)\n }\n signal?.addEventListener(\"abort\", abortFetch, { once: true })\n const doFetch = this.config.fetchImpl ?? globalThis.fetch\n try {\n const response = await doFetch(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n signal: controller.signal\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n const err = new ApiError(response.status, errorText)\n // Retry on transient HTTP errors (502, 503, 429, etc.)\n if (isRetryableStatus(response.status) && attempt < maxRetries) {\n log(`Transient HTTP ${response.status}. Retrying…`, \"warn\")\n lastError = err\n continue\n }\n throw err\n }\n\n if (stream) {\n return await this.handleStream(\n response,\n controller,\n callbacks,\n signal\n )\n }\n\n if (signal?.aborted) {\n throw createAbortError(signal.reason)\n }\n\n // Non-streaming path\n const data = (await response.json()) as any\n const content =\n data.choices?.[0]?.message?.content ?? \"\"\n return {\n content,\n finishReason:\n data.choices?.[0]?.finish_reason ?? \"stop\",\n usage: data.usage\n ? {\n promptTokens:\n data.usage.prompt_tokens ?? 0,\n completionTokens:\n data.usage.completion_tokens ?? 0\n }\n : undefined\n }\n } finally {\n signal?.removeEventListener(\"abort\", abortFetch)\n }\n } catch (err: any) {\n lastError = err\n if (isAbortError(err) && signal?.aborted) {\n throw createAbortError(signal.reason)\n }\n // Retry on network-level failures (ECONNREFUSED, ETIMEDOUT, etc.)\n if (isNetworkError(err) && attempt < maxRetries) {\n log(\n `Network error: ${err.code ?? err.message}. Retrying…`,\n \"warn\"\n )\n continue\n }\n throw err\n }\n }\n\n throw lastError ?? new Error(\"All retry attempts failed\")\n }\n\n // -----------------------------------------------------------------------\n // Streaming\n // -----------------------------------------------------------------------\n\n private async handleStream(\n response: FetchResponseLike,\n fetchController: AbortController,\n callbacks?: StreamCallbacks,\n signal?: AbortSignal\n ): Promise<LLMClientResponse> {\n let fullContent = \"\"\n let finishReason = \"\"\n let streamFrozen = false\n\n const log = callbacks?.onLog ?? (() => {})\n\n const body = response.body as ReadableStream<Uint8Array> | null | undefined\n if (!body) {\n throw new Error(\n \"Response body is null – streaming not supported\"\n )\n }\n\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = \"\"\n let streamAborted = false\n let firstChunkReceived = false\n\n // Timer handles (stored as number for browser compat)\n let inactivityTimer: ReturnType<typeof setTimeout> | null = null\n let firstChunkTimer: ReturnType<typeof setTimeout> | null = null\n\n const abortStream = () => {\n streamAborted = true\n cleanup()\n fetchController.abort(signal?.reason)\n }\n\n if (signal?.aborted) {\n throw createAbortError(signal.reason)\n }\n\n signal?.addEventListener(\"abort\", abortStream, { once: true })\n\n const cleanup = () => {\n if (inactivityTimer) {\n clearTimeout(inactivityTimer)\n inactivityTimer = null\n }\n if (firstChunkTimer) {\n clearTimeout(firstChunkTimer)\n firstChunkTimer = null\n }\n }\n\n const streamPromise = new Promise<void>((resolve, reject) => {\n // --- first-chunk timeout ---\n firstChunkTimer = setTimeout(() => {\n if (!firstChunkReceived && !streamAborted) {\n streamAborted = true\n cleanup()\n reject(\n new Error(\n `getFirstChunkTimeout(): No response received after ${getFirstChunkTimeout() / 1000}s`\n )\n )\n fetchController.abort()\n }\n }, getFirstChunkTimeout())\n\n // --- inactivity timeout (reset on every chunk) ---\n const resetInactivityTimer = () => {\n if (inactivityTimer) clearTimeout(inactivityTimer)\n inactivityTimer = setTimeout(() => {\n if (!streamAborted) {\n streamAborted = true\n streamFrozen = true\n cleanup()\n log(\n `Stream frozen: no data for ${getStreamInactivityTimeout() / 1000}s – treating as truncation`,\n \"warn\"\n )\n callbacks?.onError?.(\n new Error(\n \"Stream frozen – treating as truncation\"\n )\n )\n fetchController.abort()\n resolve()\n }\n }, getStreamInactivityTimeout())\n }\n\n // --- read loop ---\n const pump = async () => {\n try {\n while (true) {\n if (streamAborted) break\n\n const { done, value } = await reader.read()\n if (done) break\n\n if (!firstChunkReceived) {\n firstChunkReceived = true\n if (firstChunkTimer) {\n clearTimeout(firstChunkTimer)\n firstChunkTimer = null\n }\n resetInactivityTimer()\n callbacks?.onStreamStart?.()\n }\n\n resetInactivityTimer()\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split(\"\\n\")\n buffer = lines.pop() || \"\"\n\n for (const line of lines) {\n if (\n !line.trim() ||\n !line.startsWith(\"data: \")\n )\n continue\n if (line.includes(\"[DONE]\")) {\n streamAborted = true\n cleanup()\n break\n }\n\n try {\n const parsed = JSON.parse(line.slice(6))\n const delta = parsed.choices?.[0]?.delta\n const token = delta?.content\n if (!token && delta) {\n log(`SSE delta (no content): ${JSON.stringify(delta).slice(0, 200)}`, \"warn\")\n }\n if (token) {\n fullContent += token\n const stopEarly = callbacks?.onToken?.(token)\n if (stopEarly === true) {\n streamAborted = true\n cleanup()\n fetchController.abort()\n break\n }\n }\n if (\n parsed.choices?.[0]?.finish_reason\n ) {\n finishReason =\n parsed.choices[0].finish_reason\n }\n } catch {\n log(`SSE parse error: ${line.slice(0, 200)}`, \"warn\")\n }\n }\n\n if (streamAborted) break\n }\n resolve()\n } catch (err: any) {\n cleanup()\n if (isAbortError(err) && signal?.aborted) {\n resolve()\n return\n }\n if (!streamAborted) {\n streamFrozen = true\n callbacks?.onError?.(err)\n }\n resolve()\n }\n }\n\n pump()\n })\n\n try {\n await streamPromise\n } catch (err: any) {\n if (err.message?.includes(\"getFirstChunkTimeout()\")) throw err\n throw err\n } finally {\n cleanup()\n signal?.removeEventListener(\"abort\", abortStream)\n }\n\n if (signal?.aborted) {\n throw createAbortError(signal.reason)\n }\n\n await callbacks?.onComplete?.(\n fullContent,\n finishReason || (streamFrozen ? \"length\" : \"stop\")\n )\n\n return {\n content: fullContent,\n finishReason: finishReason || (streamFrozen ? \"length\" : \"stop\")\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Custom error class for HTTP-level API errors (preserves status code). */\nexport class ApiError extends Error {\n constructor(public readonly status: number, body: string) {\n super(`API error ${status}: ${body}`)\n this.name = \"ApiError\"\n }\n}\n\n/** HTTP status codes that indicate a transient/retryable server error. */\nfunction isRetryableStatus(status: number): boolean {\n return status === 429 || status === 500 || status === 502 || status === 503 || status === 408\n}\n\nexport function isNetworkError(err: any): boolean {\n const code = err.code ?? err.cause?.code ?? \"\"\n return (\n code === \"ENOTFOUND\" ||\n code === \"ETIMEDOUT\" ||\n code === \"ECONNREFUSED\" ||\n code === \"UND_ERR_CONNECT_TIMEOUT\" ||\n (typeof err.message === \"string\" &&\n err.message.includes(\"fetch failed\"))\n )\n}\n\nfunction isAbortError(err: unknown): boolean {\n if (!err || typeof err !== \"object\") {\n return false\n }\n\n const name = \"name\" in err ? err.name : undefined\n const code = \"code\" in err ? err.code : undefined\n const message = \"message\" in err ? err.message : undefined\n\n return name === \"AbortError\"\n || code === \"ABORT_ERR\"\n || (typeof message === \"string\" && message.toLowerCase().includes(\"aborted\"))\n}\n\nfunction createAbortError(reason?: unknown): Error {\n const error = reason instanceof Error\n ? reason\n : new Error(\n typeof reason === \"string\" && reason.trim().length > 0\n ? reason\n : \"Request aborted\",\n )\n\n error.name = \"AbortError\"\n return error\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((r) => setTimeout(r, ms))\n}\n","/**\n * Shared Agent State Machine — XState v5 formalisation of the agentic loop.\n *\n * Used by both the Hammer CLI agent and the Magic webapp agent.\n * The machine is a pure state enforcer — all async side effects (LLM\n * calls, tool execution, persistence) happen in the consuming code,\n * which sends events to drive transitions.\n *\n * State graph:\n *\n * ┌────────┐ START ┌──────────────┐\n * │ idle │ ───────▸ │ prompting │\n * └────────┘ └──────┬───────┘\n * │\n * ▾\n * ┌──────────────┐\n * │ analyzing │\n * └──────┬───────┘\n * │\n * ┌─────────────────────────────────────┤\n * LLM error LLM_SUCCESS\n * │ │\n * ▾ ▾\n * ┌──────────────┐ ┌──────────────┐\n * │ prompting │◂────────── │ executing │\n * └──────────────┘ tools done └──────────────┘\n * │\n * TOOLS_EXECUTED\n * │\n * ┌──────────────┐ ▾\n * │ updating │◂────────────────── executing\n * └──────┬───────┘\n * │ UPDATE_COMPLETE\n * ▾\n * ┌──────────────┐\n * │ prompting │ (next iteration)\n * └──────────────┘\n *\n * OUTCOME_SUCCESS ──▸ done (final)\n * OUTCOME_FAILURE ──▸ failed (final)\n *\n * @module\n */\nimport { setup, assign } from \"xstate\"\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** All possible states the agent can be in. */\nexport type AgentMachineState =\n | \"idle\"\n | \"prompting\"\n | \"analyzing\"\n | \"executing\"\n | \"updating\"\n | \"done\"\n | \"failed\"\n\nexport const AGENT_MACHINE_STATES: readonly AgentMachineState[] = [\n \"idle\",\n \"prompting\",\n \"analyzing\",\n \"executing\",\n \"updating\",\n \"done\",\n \"failed\",\n] as const\n\n/** Truncated-tool metadata carried across iterations (Hammer-specific). */\nexport interface TruncatedToolInfo {\n name: string\n filePath?: string\n executionSucceeded: boolean\n}\n\n/** Machine context — all mutable state for the agent loop. */\nexport interface AgentMachineContext {\n /** The user's task. */\n task: string\n /** Current action counter (resumes from persisted state). */\n actionCount: number\n /** Truncated-tool metadata for continuation guidance. */\n truncatedToolInfo: TruncatedToolInfo | undefined\n /** Last tool result JSON string (for resume persistence). */\n lastToolResult: string | undefined\n /** Error message when in failed state. */\n error: string | undefined\n /** Final outcome that caused loop exit. */\n finalOutcome: string\n\n /** Whether ListSkills has been called this session. */\n hasCalledListSkills: boolean\n}\n\n/** Events the machine accepts. */\nexport type AgentMachineEvent =\n | { type: \"START\"; task: string; actionCount?: number }\n | { type: \"PROMPT_COMPLETE\" }\n | { type: \"LLM_SUCCESS\" }\n | { type: \"LLM_VALIDATION_ERROR\"; error: string }\n | { type: \"LLM_API_ERROR\"; error: string }\n | { type: \"OUTCOME_SUCCESS\" }\n | { type: \"OUTCOME_FAILURE\"; error?: string }\n | { type: \"TOOLS_EXECUTED\"; lastToolResult?: string }\n | { type: \"ENFORCEMENT_BREAK\"; lastToolResult: string }\n | { type: \"NO_TOOLS\" }\n | { type: \"UPDATE_COMPLETE\" }\n | { type: \"SET_TRUNCATION\"; info: TruncatedToolInfo | undefined }\n | { type: \"RESTORE_CONTEXT\"; context: Partial<AgentMachineContext> }\n\n// ---------------------------------------------------------------------------\n// Machine definition\n// ---------------------------------------------------------------------------\n\nexport const agentMachine = setup({\n types: {\n context: {} as AgentMachineContext,\n events: {} as AgentMachineEvent,\n },\n guards: {},\n actions: {\n assignTask: assign(({ context }, params: { task: string; actionCount?: number }) => ({\n ...context,\n task: params.task,\n actionCount: params.actionCount ?? 0,\n error: undefined,\n finalOutcome: \"running\",\n })),\n assignLlmError: assign({\n error: (_, params: { error: string }) => params.error,\n }),\n assignOutcomeFailure: assign(({ context }, params: { error?: string }) => ({\n ...context,\n finalOutcome: \"failure\",\n error: params.error,\n })),\n assignOutcomeSuccess: assign({\n finalOutcome: () => \"success\",\n }),\n assignToolsExecuted: assign(({ context }, params: { lastToolResult?: string }) => ({\n ...context,\n lastToolResult: params.lastToolResult,\n })),\n assignEnforcementBreak: assign({\n lastToolResult: (_, params: { lastToolResult: string }) =>\n params.lastToolResult,\n }),\n incrementAction: assign({\n actionCount: ({ context }) => context.actionCount + 1,\n }),\n setTruncation: assign({\n truncatedToolInfo: (_, params: { info: TruncatedToolInfo | undefined }) =>\n params.info,\n }),\n restoreContext: assign(\n ({ context }, params: { context: Partial<AgentMachineContext> }) => ({\n ...context,\n ...params.context,\n }),\n ),\n },\n}).createMachine({\n id: \"agent\",\n initial: \"idle\",\n context: {\n task: \"\",\n actionCount: 0,\n truncatedToolInfo: undefined,\n lastToolResult: undefined,\n error: undefined,\n finalOutcome: \"running\",\n hasCalledListSkills: false,\n },\n\n // Global events that can be sent from any state\n on: {\n SET_TRUNCATION: {\n actions: {\n type: \"setTruncation\",\n params: ({ event }) => ({ info: event.info }),\n },\n },\n RESTORE_CONTEXT: {\n actions: {\n type: \"restoreContext\",\n params: ({ event }) => ({ context: event.context }),\n },\n },\n },\n\n states: {\n idle: {\n on: {\n START: {\n target: \"prompting\",\n actions: {\n type: \"assignTask\",\n params: ({ event }) => ({\n task: event.task,\n actionCount: event.actionCount,\n }),\n },\n },\n OUTCOME_FAILURE: {\n target: \"failed\",\n actions: {\n type: \"assignOutcomeFailure\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n },\n },\n\n prompting: {\n on: {\n PROMPT_COMPLETE: {\n target: \"analyzing\",\n actions: { type: \"incrementAction\" },\n },\n OUTCOME_FAILURE: {\n target: \"failed\",\n actions: {\n type: \"assignOutcomeFailure\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n },\n },\n\n analyzing: {\n on: {\n LLM_SUCCESS: {\n target: \"executing\",\n },\n LLM_VALIDATION_ERROR: {\n target: \"prompting\",\n actions: {\n type: \"assignLlmError\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n LLM_API_ERROR: {\n target: \"prompting\",\n actions: {\n type: \"assignLlmError\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n OUTCOME_SUCCESS: {\n target: \"done\",\n actions: { type: \"assignOutcomeSuccess\" },\n },\n OUTCOME_FAILURE: {\n target: \"failed\",\n actions: {\n type: \"assignOutcomeFailure\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n },\n },\n\n executing: {\n on: {\n TOOLS_EXECUTED: {\n target: \"updating\",\n actions: {\n type: \"assignToolsExecuted\",\n params: ({ event }) => ({\n lastToolResult: event.lastToolResult,\n }),\n },\n },\n ENFORCEMENT_BREAK: {\n target: \"prompting\",\n actions: {\n type: \"assignEnforcementBreak\",\n params: ({ event }) => ({\n lastToolResult: event.lastToolResult,\n }),\n },\n },\n NO_TOOLS: {\n target: \"prompting\",\n },\n OUTCOME_SUCCESS: {\n target: \"done\",\n actions: { type: \"assignOutcomeSuccess\" },\n },\n OUTCOME_FAILURE: {\n target: \"failed\",\n actions: {\n type: \"assignOutcomeFailure\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n },\n },\n\n updating: {\n on: {\n UPDATE_COMPLETE: \"prompting\",\n OUTCOME_FAILURE: {\n target: \"failed\",\n actions: {\n type: \"assignOutcomeFailure\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n OUTCOME_SUCCESS: {\n target: \"done\",\n actions: { type: \"assignOutcomeSuccess\" },\n },\n },\n },\n\n done: {\n type: \"final\",\n },\n\n failed: {\n type: \"final\",\n },\n },\n})\n","import type {\n ToolDefinition,\n ToolDefinitionMetadata,\n ToolParameterDefinition,\n} from \"./types\"\n\nfunction isBooleanType(type: string | string[]): boolean {\n return (Array.isArray(type) ? type : [type]).includes(\"boolean\")\n}\n\nfunction isNumberType(type: string | string[]): boolean {\n return (Array.isArray(type) ? type : [type]).some((entry) =>\n entry === \"number\" || entry === \"integer\",\n )\n}\n\nfunction isStringType(type: string | string[]): boolean {\n return (Array.isArray(type) ? type : [type]).includes(\"string\")\n}\n\nfunction toFlagName(name: string): string {\n return name.replace(/_/g, \"-\")\n}\n\nfunction derivePositionalParams(\n parameters: Record<string, ToolParameterDefinition>,\n): string[] {\n return Object.entries(parameters)\n .filter(([, definition]) => definition.required && !isBooleanType(definition.type) && definition.positional !== false)\n .map(([name]) => name)\n}\n\nfunction derivePassthroughParam(\n metadata: ToolDefinitionMetadata | undefined,\n parameters: Record<string, ToolParameterDefinition>,\n): string | undefined {\n if (!metadata?.capabilities?.includes(\"raw_command_args\")) {\n return undefined\n }\n\n const entries = Object.entries(parameters)\n if (entries.length !== 1) {\n return undefined\n }\n\n const [parameterName, definition] = entries[0]\n if (!definition.required || !isStringType(definition.type)) {\n return undefined\n }\n\n return parameterName\n}\n\nfunction quoteIfNeeded(value: string): string {\n if (/^[A-Za-z0-9_./:@?&=%+-]+$/.test(value)) {\n return value\n }\n\n return JSON.stringify(value)\n}\n\nfunction buildStringSample(parameterName: string): string {\n const normalized = parameterName.toLowerCase()\n\n if (normalized.includes(\"query\")) return \"bitcoin price today\"\n if (normalized.includes(\"url\")) return \"https://example.com\"\n if (normalized === \"path\" || normalized.endsWith(\"_path\") || normalized.includes(\"file\")) return \"README.md\"\n if (normalized.includes(\"skill\")) return \"frontend-design\"\n if (normalized.includes(\"command\") || normalized === \"args\") return \"cat README.md\"\n if (normalized.includes(\"action\")) return \"start\"\n if (normalized.includes(\"filename\")) return \"session-note\"\n if (normalized.includes(\"board\")) return \"board-1\"\n if (normalized.includes(\"element\")) return \"element-1\"\n if (normalized.includes(\"id\")) return \"item-1\"\n if (normalized.includes(\"prompt\")) return \"Generate a hero image\"\n if (normalized.includes(\"text\") || normalized.includes(\"message\")) return \"example text\"\n\n return \"example\"\n}\n\nfunction buildSampleValue(\n parameterName: string,\n definition: ToolParameterDefinition,\n): string {\n if (definition.enum && definition.enum.length > 0) {\n const first = definition.enum[0]\n return typeof first === \"string\" ? quoteIfNeeded(first) : JSON.stringify(first)\n }\n\n if (isBooleanType(definition.type)) {\n return \"true\"\n }\n\n if (isNumberType(definition.type)) {\n return \"1\"\n }\n\n const normalizedTypes = Array.isArray(definition.type) ? definition.type : [definition.type]\n if (normalizedTypes.includes(\"array\")) {\n return '[\"example\"]'\n }\n if (normalizedTypes.includes(\"object\")) {\n return '{\"key\":\"value\"}'\n }\n if (normalizedTypes.includes(\"null\")) {\n return \"null\"\n }\n\n return quoteIfNeeded(buildStringSample(parameterName))\n}\n\nexport function buildToolUsageExample(\n tool: Pick<ToolDefinition, \"name\" | \"parameters\" | \"metadata\">,\n): string {\n const passthroughParam = derivePassthroughParam(tool.metadata, tool.parameters)\n if (passthroughParam) {\n return `${tool.name} ${buildSampleValue(passthroughParam, tool.parameters[passthroughParam])}`\n }\n\n const parts = [tool.name]\n const positionalParams = derivePositionalParams(tool.parameters)\n\n for (const parameterName of positionalParams) {\n parts.push(buildSampleValue(parameterName, tool.parameters[parameterName]))\n }\n\n const requiredFlags = Object.entries(tool.parameters)\n .filter(([name, definition]) => !positionalParams.includes(name) && definition.required)\n\n for (const [parameterName, definition] of requiredFlags) {\n const flag = `--${toFlagName(parameterName)}`\n if (isBooleanType(definition.type)) {\n parts.push(flag)\n continue\n }\n\n parts.push(flag, buildSampleValue(parameterName, definition))\n }\n\n return parts.join(\" \")\n}","/**\n * Shared structured control-segment prompt fragments used across agent loops.\n *\n * These helpers centralize the plain header-block response contract while\n * letting each agent layer domain-specific constraints on top.\n */\n\nconst TOOL_CALL_RUN_LINE_RULE =\n 'End every response with exactly one final executable control block. Put prose on its own line(s), put the standalone slug header on its own line, then put the executable payload on the next line(s). Never place prose, the slug header, or the payload on the same line.'\n\nconst TOOL_CALL_SHELL_LINE_RULE =\n 'Use plain prose for analysis and reserve the structured control block for the final executable block only.'\n\nconst TOOL_CALL_SINGLE_LINE_RULE =\n 'Never emit multiple structured control blocks in a single response. The final control block is always the final thing in the response and nothing may follow it.'\n\nexport const TOOL_CALL_SEPARATOR_RULE =\n 'The slug header is a hard separator between prose/thought and command/action. Put all prose before the slug, put the standalone slug header on its own line, and put only the executable payload on the following line(s). There must be a newline before the slug header and a newline after the slug header.'\n\nexport function formatStructuredControlSegment(\n target: \"tool\" | \"bash\" | \"background_bash\",\n payload: string,\n): string {\n return [`---${target}---`, payload].join(\"\\n\")\n}\n\nexport const CORRECT_SINGLE_SLUG_SEGMENT_EXAMPLE =\n formatStructuredControlSegment(\"bash\", \"ls -la\")\n\nexport const CORRECT_NEWLINE_FINISH_EXAMPLE = [\n 'Task complete.',\n formatStructuredControlSegment(\"bash\", \"exit 0\"),\n].join(\"\\n\")\n\nexport const CORRECT_NEWLINE_TOOL_EXAMPLE = [\n 'I\\'ll read the create-app skill first.',\n formatStructuredControlSegment(\"tool\", 'ReadSkill --skill_name \"create-app\"'),\n].join(\"\\n\")\n\nexport const INCORRECT_REPEATED_SLUG_EXAMPLE =\n '---bash--- ls -la ---bash---'\n\nexport const INCORRECT_MIXED_SLUG_EXAMPLE =\n '---bash--- ls -la ---tool--- BraveWebSearch \"hello world\"'\n\nexport const INCORRECT_INLINE_PROSE_AND_SLUG_EXAMPLE =\n 'Task complete. ---bash--- exit 0'\n\nexport const INCORRECT_INLINE_PROSE_AND_TOOL_SLUG_EXAMPLE =\n 'I\\'ll build a landing page for Monako Glass smart glasses. Let me first read the create-app skill to ensure I scaffold this project correctly. ---tool--- ReadSkill --skill_name \"create-app\"'\n\nexport const INCORRECT_INLINE_HEADER_AND_PAYLOAD_EXAMPLE =\n '---tool--- ReadSkill --skill_name \"create-app\"'\n\nexport const SLUG_FORMAT_EXAMPLE_RULE_LINES = [\n 'Correct example: prose first, then one slug header, then one executable payload block.',\n `Correct example:\\n${CORRECT_SINGLE_SLUG_SEGMENT_EXAMPLE}`,\n 'Correct finish example: keep the prose, slug header, and payload on separate lines.',\n `Correct finish example:\\n${CORRECT_NEWLINE_FINISH_EXAMPLE}`,\n 'Correct tool example: keep prose, the ---tool--- header, and the tool payload on separate lines.',\n `Correct tool example:\\n${CORRECT_NEWLINE_TOOL_EXAMPLE}`,\n 'Incorrect example: do not repeat the same slug in one response.',\n `Incorrect example:\\n${INCORRECT_REPEATED_SLUG_EXAMPLE}`,\n 'Incorrect example: do not mix different slug headers in one response.',\n `Incorrect example:\\n${INCORRECT_MIXED_SLUG_EXAMPLE}`,\n 'Incorrect example: do not keep prose, the slug header, and the payload on one line.',\n `Incorrect example:\\n${INCORRECT_INLINE_PROSE_AND_SLUG_EXAMPLE}`,\n 'Incorrect example: do not keep prose and a ---tool--- invocation on one line.',\n `Incorrect example:\\n${INCORRECT_INLINE_PROSE_AND_TOOL_SLUG_EXAMPLE}`,\n 'Incorrect example: do not put a slug header and its payload on the same line.',\n `Incorrect example:\\n${INCORRECT_INLINE_HEADER_AND_PAYLOAD_EXAMPLE}`,\n]\n\nexport const CORRECT_SEPARATOR_RESPONSE_EXAMPLE = [\n 'I analyzed the current state.',\n CORRECT_SINGLE_SLUG_SEGMENT_EXAMPLE,\n].join(\"\\n\")\n\nexport const SLUG_SEPARATOR_EXAMPLE_BLOCK = [\n 'Correct separator example:',\n CORRECT_SEPARATOR_RESPONSE_EXAMPLE,\n '',\n 'Correct finish example:',\n CORRECT_NEWLINE_FINISH_EXAMPLE,\n '',\n 'Correct tool example:',\n CORRECT_NEWLINE_TOOL_EXAMPLE,\n '',\n 'Incorrect multi-slug examples:',\n INCORRECT_REPEATED_SLUG_EXAMPLE,\n INCORRECT_MIXED_SLUG_EXAMPLE,\n '',\n 'Incorrect inline prose-plus-slug example:',\n INCORRECT_INLINE_PROSE_AND_SLUG_EXAMPLE,\n '',\n 'Incorrect inline prose-plus-tool example:',\n INCORRECT_INLINE_PROSE_AND_TOOL_SLUG_EXAMPLE,\n '',\n 'Incorrect inline slug-plus-payload example:',\n INCORRECT_INLINE_HEADER_AND_PAYLOAD_EXAMPLE,\n].join(\"\\n\")\n\nexport const SHARED_TOOL_USAGE_RULE =\n \"Use only the tools that are actually listed in the tool section. Do not invent tools, parameters, wrapper flags, bare assignment-style arguments, or capabilities that are not explicitly listed. Follow each tool's description, usage surface, and parameter schema exactly.\"\n\nexport const FOLLOW_TOOL_USAGE_SURFACE_RULE =\n \"For registered tools, follow the exact CLI usage shown in the tool section.\"\n\nexport const POSITIONAL_ARGUMENT_USAGE_RULE =\n \"Use positional arguments only when the usage shows <param>; otherwise use --flag value.\"\n\nexport const BARE_ASSIGNMENT_STYLE_ARGUMENT_RULE =\n \"Never write bare assignment-style arguments like skill_name=..., query=..., or path=... after a tool name unless that exact syntax is explicitly shown in the tool section.\"\n\nexport const PASSTHROUGH_TOOL_ARGUMENT_RULE =\n \"Passthrough tools take their raw arguments directly after the tool name; do not invent wrapper flags unless the tool description explicitly documents them.\"\n\nexport const UNIX_TOOL_USAGE_GUIDANCE_LINE =\n 'Use the exact registered tool name and usage shown: <param> is positional, otherwise use --flag value. Never switch to bare assignment-style arguments unless the tool explicitly shows them.'\n\nexport const UNIX_PASSTHROUGH_TOOL_GUIDANCE_LINE =\n 'For passthrough tools, pass raw arguments directly after the tool name; do not invent wrapper flags unless the tool explicitly documents them.'\n\nexport const WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES =\n \"rg, sed, find, ls, grep, cat\"\n\nexport const SHALLOW_WORKSPACE_DISCOVERY_RULE_LINE =\n 'When exploring the workspace, avoid recursive whole-tree listings such as `ls -R` or `find . -type f` at the repo root. Prefer `rg --files`, shallow `find`/`ls`, or targeted directory inspection, and exclude heavy directories such as `node_modules`, `.git`, `.next`, `dist`, `build`, and coverage outputs unless the task specifically requires them.'\n\nexport interface ShellNativeWorkflowCommandExamplesOptions {\n includeGit?: boolean\n includeBun?: boolean\n includeCurl?: boolean\n}\n\nexport function buildShellNativeWorkflowCommandExamples(\n options?: ShellNativeWorkflowCommandExamplesOptions,\n): string {\n const commands = [WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES]\n\n if (options?.includeGit ?? true) {\n commands.push(\"git\")\n }\n\n if (options?.includeBun ?? true) {\n commands.push(\"bun\")\n }\n\n if (options?.includeCurl ?? true) {\n commands.push(\"curl\")\n }\n\n return commands.join(\", \")\n}\n\nexport const SHELL_NATIVE_WORKFLOW_COMMAND_EXAMPLES =\n buildShellNativeWorkflowCommandExamples()\n\nexport const JUST_BASH_SHELL_NATIVE_WORKFLOW_COMMAND_EXAMPLES =\n buildShellNativeWorkflowCommandExamples({\n includeGit: false,\n includeBun: false,\n includeCurl: false,\n })\n\nexport const JUST_BASH_SCRIPT_EXECUTION_RESTRICTION_LINES = [\n 'Never try to run scripts with `python`, `python3`, `node`, `nodejs`, `bun`, or similar runtimes unless a listed tool explicitly provides that capability.',\n]\n\nexport interface BashCommandsSectionOptions {\n shellNativeWorkflowCommandExamples?: string\n additionalGuidanceLines?: string[]\n}\n\nfunction buildBashCommandsSectionLines(options?: BashCommandsSectionOptions): string[] {\n const shellNativeWorkflowCommandExamples =\n options?.shellNativeWorkflowCommandExamples\n ?? SHELL_NATIVE_WORKFLOW_COMMAND_EXAMPLES\n const additionalGuidanceLines = (options?.additionalGuidanceLines ?? [])\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n\n return [\n '## Bash Commands',\n '',\n '- Invoke them with a standalone `---bash---` header followed by the bash payload on the next line(s).',\n `- Use bash for shell-native workflows such as ${shellNativeWorkflowCommandExamples}.`,\n `- ${SHALLOW_WORKSPACE_DISCOVERY_RULE_LINE}`,\n '- Prefer registered tools when a listed tool already covers the task. Use bash for shell-native workflows or when no listed tool matches.',\n '- When fixing or updating an existing file, always use targeted in-place edits with `sed` or another scoped search-and-replace command.',\n '- Use `cat > file <<\\'EOF\\'` only for creating a new file that does not already exist. Never use it to repair, revise, or overwrite an existing file.',\n `- ${BASH_NOT_REGISTERED_TOOL_RULE}`,\n ...additionalGuidanceLines.map((line) => `- ${line}`),\n `- Example:\\n${formatStructuredControlSegment(\"bash\", \"sed -n '1,120p' README.md\")}`,\n ]\n}\n\nconst REGISTERED_TOOLS_VS_BASH_RULE =\n 'Use ---tool--- for listed tools, ---bash--- for one-shot shell-native workflows, and ---background_bash--- only when a Background bash commands section is present for detached long-running shell commands.'\n\nconst BASH_NOT_REGISTERED_TOOL_RULE =\n 'Bash is not a registered tool name. Never start a tool payload with Bash --command ...; use the ---bash--- header instead.'\n\nconst BACKGROUND_BASH_NOT_REGISTERED_TOOL_RULE =\n 'BackgroundBash is not a registered tool name. Never start a tool payload with BackgroundBash ...; use the ---background_bash--- header instead.'\n\nconst REGISTERED_TOOL_USAGE_SURFACE_RULE =\n `Tool payloads must start with the exact registered tool name after the ---tool--- header. ${FOLLOW_TOOL_USAGE_SURFACE_RULE} ${POSITIONAL_ARGUMENT_USAGE_RULE} ${BARE_ASSIGNMENT_STYLE_ARGUMENT_RULE}`\n\nconst BASH_WORKFLOW_SELECTION_RULE =\n `Use bash for shell-native workflows such as ${SHELL_NATIVE_WORKFLOW_COMMAND_EXAMPLES} when bash is listed. Prefer the appropriate listed tool over bash when a listed tool already covers the task. For edits to existing files, always use targeted search-and-replace commands and never use full-file cat rewrites. If no listed tool covers a direct HTTP request and bash is available, use bash curl.`\n\nconst BACKGROUND_BASH_WORKFLOW_SELECTION_RULE =\n 'Use background_bash only when a background bash section is listed. It starts or manages detached shell commands for blocking operations such as starting servers, preview apps, and long-running watchers. Prefer plain ---bash--- for short synchronous commands.'\n\nconst SINGLE_WELL_COMPOSED_ACTION_RULE =\n 'Prefer one well-composed action over multiple unrelated tool calls.'\n\nconst TOOL_RESULT_FEEDBACK_RULE =\n 'Tool results include stderr and an [exit:N | duration] footer. Use that feedback instead of guessing.'\n\nconst TOOL_AND_BASH_ROUTING_RULE =\n `${REGISTERED_TOOLS_VS_BASH_RULE} ${BASH_NOT_REGISTERED_TOOL_RULE} ${BACKGROUND_BASH_NOT_REGISTERED_TOOL_RULE} ${BASH_WORKFLOW_SELECTION_RULE} ${BACKGROUND_BASH_WORKFLOW_SELECTION_RULE}`\n\nconst TOOL_EXECUTION_STRATEGY_RULE =\n `${SINGLE_WELL_COMPOSED_ACTION_RULE} ${TOOL_RESULT_FEEDBACK_RULE}`\n\nexport const STANDARD_TOOL_CALL_FORMAT_RULES = [\n TOOL_CALL_RUN_LINE_RULE,\n TOOL_CALL_SHELL_LINE_RULE,\n TOOL_CALL_SINGLE_LINE_RULE,\n TOOL_CALL_SEPARATOR_RULE,\n]\n\nconst VALIDATION_FIX_REFERENCE_REQUIRED_FORMAT =\n 'Write normal prose and end with exactly one final executable control block. Put prose on its own line(s), put the standalone slug header on its own line, and put the payload on the following line(s). Do not mention the control headers anywhere else.'\n\nconst VALIDATION_FIX_REFERENCE_RULE_LINES = [\n 'If continuing, end with exactly one real action block.',\n 'If finishing, end with exactly one final ---bash--- control block whose payload is either exit 0 or exit 1.',\n 'Do not mix finish lines with tool commands.',\n 'Do not mention, quote, or explain the control headers in analysis or summaries.',\n ...STANDARD_TOOL_CALL_FORMAT_RULES,\n ...SLUG_FORMAT_EXAMPLE_RULE_LINES,\n]\n\nexport const VALIDATION_FIX_REFERENCE = buildValidationFixReference(\n VALIDATION_FIX_REFERENCE_REQUIRED_FORMAT,\n VALIDATION_FIX_REFERENCE_RULE_LINES,\n)\n\nexport function buildStructuredControlValidationError(details: string): string {\n return `VALIDATION_ERROR: ${details}\\n\\n${VALIDATION_FIX_REFERENCE}`\n}\n\nexport function buildMultipleStructuredControlSegmentsValidationError(\n segmentCount: number,\n): string {\n return buildStructuredControlValidationError(\n `You emitted ${segmentCount} structured control blocks in one response. Emit exactly one standalone slug header per response. The slug header is the separator between prose/thought and command/action.`,\n )\n}\n\nexport const VOICE_TOOL_USAGE_RULE_LINES = [\n TOOL_AND_BASH_ROUTING_RULE,\n REGISTERED_TOOL_USAGE_SURFACE_RULE,\n TOOL_EXECUTION_STRATEGY_RULE,\n]\n\nexport const VOICE_TOOL_FORMAT_RULE_LINES = [\n 'The final executable control block must use one standalone header: ---tool---, ---bash---, or ---background_bash---. Put prose first, then a newline, then the standalone header on its own line, then a newline, then the payload. The header and payload must be the LAST thing in your message - never put speech after them.',\n ...STANDARD_TOOL_CALL_FORMAT_RULES,\n ...SLUG_FORMAT_EXAMPLE_RULE_LINES,\n 'Only call tools that are explicitly listed below. If no tools are listed and bash is unavailable, do not emit a control block.',\n]\n\nexport const VOICE_WORKSPACE_VERIFICATION_RULE_LINES = [\n \"You have ZERO knowledge of the user's workspace. The ONLY way to know what files exist or contain is to use tools.\",\n `If the user asks about ANY file, document, or workspace content: you MUST inspect it with a listed tool or with bash commands like ${WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES} BEFORE saying anything about it. NEVER summarize, describe, or reference file contents without actually checking them first.`,\n `If the user asks you to read, open, summarize, or explain a file: inspect it with a real tool call such as:\\n${formatStructuredControlSegment(\"bash\", \"cat path/to/file\")}\\nor with a listed reading tool. Do NOT make up what the file says.`,\n `If the user mentions a file vaguely (e.g. \"read the analysis\", \"open the summary\") and you don't know the exact filename: use bash with ${WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES} first to locate likely candidates, then inspect the best match. NEVER ask the user to clarify the filename — just look it up yourself.`,\n SHALLOW_WORKSPACE_DISCOVERY_RULE_LINE,\n 'If the user asks about facts, current events, or anything you are uncertain about: verify with an appropriate listed tool, or use bash with a trusted source when bash is available. Do NOT guess.',\n 'If you cannot verify something with tools, say \"let me check\" and use a tool — or honestly say you do not know.',\n 'Violating this rule causes real harm. The user trusts your answers. Never fabricate.',\n]\n\nexport const BASH_COMMANDS_SECTION_LINES = buildBashCommandsSectionLines()\n\nexport const BACKGROUND_BASH_START_EXAMPLE_LINE =\n `- Start:\\n${formatStructuredControlSegment(\"background_bash\", 'start <name> --command \"<long-running server command>\"')}`\n\nfunction buildBackgroundBashCommandsSectionLines(): string[] {\n return [\n '## Background Bash Commands',\n '',\n '- Invoke them with a standalone `---background_bash---` header followed by the payload on the next line(s).',\n '- Use background_bash to start or manage detached shell commands without blocking the agent loop.',\n '- Use it for blocking operations such as starting servers, preview apps, or long-running watchers. Prefer `---bash---` for short synchronous commands.',\n `- ${BACKGROUND_BASH_NOT_REGISTERED_TOOL_RULE}`,\n BACKGROUND_BASH_START_EXAMPLE_LINE,\n `- Status:\\n${formatStructuredControlSegment(\"background_bash\", \"status <name>\")}`,\n `- Logs:\\n${formatStructuredControlSegment(\"background_bash\", \"logs <name> [--tail-bytes 4000]\")}`,\n `- Stop:\\n${formatStructuredControlSegment(\"background_bash\", \"stop <name>\")}`,\n ]\n}\n\nexport const BACKGROUND_BASH_COMMANDS_SECTION_LINES = buildBackgroundBashCommandsSectionLines()\n\nexport const SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE =\n formatStructuredControlSegment(\"tool\", 'ExactToolName --required-flag \"value\"')\n\nexport const INVALID_TOOL_NAME_RUN_LINE_EXAMPLE =\n formatStructuredControlSegment(\"tool\", 'exacttoolname required-arg')\n\nexport const INVALID_ASSIGNMENT_STYLE_RUN_LINE_EXAMPLE =\n formatStructuredControlSegment(\"tool\", 'ExactToolName required_flag=\"value\"')\n\nexport const STANDARD_AGENT_RESPONSE_EXAMPLE = [\n \"This is some useful information.\",\n SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE,\n].join(\"\\n\")\n\nexport const SHARED_TOOL_CALL_EXAMPLE_LINES = [\n ` ✓ ${SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE}`,\n ` ✗ ${INVALID_TOOL_NAME_RUN_LINE_EXAMPLE}`,\n ` ✗ ${INVALID_ASSIGNMENT_STYLE_RUN_LINE_EXAMPLE}`,\n ` ✓ ${STANDARD_AGENT_RESPONSE_EXAMPLE}`,\n ` ✓ ${CORRECT_NEWLINE_TOOL_EXAMPLE}`,\n ` ✗ ${INCORRECT_REPEATED_SLUG_EXAMPLE}`,\n ` ✗ ${INCORRECT_MIXED_SLUG_EXAMPLE}`,\n ` ✗ ${INCORRECT_INLINE_PROSE_AND_TOOL_SLUG_EXAMPLE}`,\n ` ✗ ${INCORRECT_INLINE_HEADER_AND_PAYLOAD_EXAMPLE}`,\n]\n\nexport const CONTINUE_TOOL_CALL_RESPONSE_EXAMPLE = [\n \"I need to inspect the file first.\",\n SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE,\n].join(\"\\n\")\n\nexport const EXIT_SUCCESS_RESPONSE_EXAMPLE = [\n \"Everything is verified.\",\n formatStructuredControlSegment(\"bash\", \"exit 0\"),\n].join(\"\\n\")\n\nexport const EXIT_FAILURE_RESPONSE_EXAMPLE = [\n \"This cannot be completed with the available tools.\",\n formatStructuredControlSegment(\"bash\", \"exit 1\"),\n].join(\"\\n\")\n\nexport const VOICE_TOOL_CALL_RESPONSE_EXAMPLE = [\n \"Let me check that.\",\n SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE,\n].join(\"\\n\")\n\nexport function buildBashCommandsSection(options?: BashCommandsSectionOptions): string {\n return buildBashCommandsSectionLines(options).join(\"\\n\")\n}\n\nexport function buildBackgroundBashCommandsSection(\n): string {\n return buildBackgroundBashCommandsSectionLines().join(\"\\n\")\n}\n\nexport function buildVoiceToolUsagePrompt(): string {\n return [\n \"When you do need a tool, first speak your reasoning or acknowledgement naturally, then insert a newline and end your message with exactly one structured control block whose header is on its own line and whose payload is on the following line(s):\",\n VOICE_TOOL_CALL_RESPONSE_EXAMPLE,\n \"\",\n formatPromptRules(VOICE_TOOL_USAGE_RULE_LINES),\n ].join(\"\\n\")\n}\n\nexport function buildValidationFixReference(\n requiredFormat: string,\n rules: string[],\n): string {\n return `Fix your response and retry.\\n${requiredFormat}\\n${formatPromptRules(rules)}`\n}\n\nexport function formatPromptRules(rules: string[]): string {\n return rules.map((rule) => `- ${rule}`).join(\"\\n\")\n}","import type {\n ToolCall,\n ToolDefinition,\n ToolParameterDefinition,\n ToolResult,\n} from \"./types\"\nimport { buildToolUsageExample } from \"./tool-usage-examples\"\nimport {\n UNIX_PASSTHROUGH_TOOL_GUIDANCE_LINE,\n UNIX_TOOL_USAGE_GUIDANCE_LINE,\n} from \"./tool-call-prompts\"\n\ntype ChainOperator = \"|\" | \"&&\" | \"||\" | \";\"\n\nexport interface CommandRuntime {\n getToolDefinitions(): ToolDefinition[]\n executeTool(name: string, parameters: Record<string, any>): Promise<ToolResult>\n executeBash?(command: string): Promise<ToolResult>\n executeBackgroundBash?(command: string): Promise<ToolResult>\n}\n\nexport interface CommandTargetInfo {\n name: string\n path?: string\n command?: string\n}\n\ninterface CommandDescriptor {\n command: string\n summary: string\n details?: string\n usage: string\n example: string\n toolName: string\n parameters: Record<string, ToolParameterDefinition>\n positionalParams: string[]\n passthroughParam?: string\n}\n\ninterface ParsedCommandArgs {\n positional: string[]\n flags: Record<string, unknown>\n unknownFlags: string[]\n error?: string\n}\n\nexport function isBashToolCall(toolCall: Pick<ToolCall, \"name\" | \"kind\">): boolean {\n return toolCall.kind === \"bash\"\n}\n\nexport function isBackgroundBashToolCall(toolCall: Pick<ToolCall, \"name\" | \"kind\">): boolean {\n return toolCall.kind === \"background_bash\"\n}\n\nexport function resolveToolDefinitionForInvocation(\n tools: ToolDefinition[],\n invocationName: string,\n): ToolDefinition | undefined {\n return tools.find((tool) => tool.name === invocationName)\n}\n\nexport function formatUnixToolSurface(tools: ToolDefinition[]): string {\n if (tools.length === 0) {\n return \"\"\n }\n\n const descriptors = tools\n .map((tool) => buildToolDescriptor(tool))\n .sort((left, right) => left.command.localeCompare(right.command))\n\n return [\n '## Registered Tools',\n '',\n '- Invoke them with a standalone `---tool---` header followed by the tool payload on the next line.',\n `- ${UNIX_TOOL_USAGE_GUIDANCE_LINE}`,\n `- ${UNIX_PASSTHROUGH_TOOL_GUIDANCE_LINE}`,\n ...descriptors.flatMap((descriptor) => {\n const line = `### \\`${descriptor.usage}\\``\n const details: string[] = []\n\n details.push(`- ${descriptor.summary}`)\n\n if (descriptor.details) {\n details.push(\n descriptor.details\n .split(\"\\n\")\n .map((l) => `- ${l}`)\n .join(\"\\n\"),\n )\n }\n\n details.push(`- Example: \\`${descriptor.example}\\``)\n\n return [line, ...details, \"\"]\n }),\n ].join(\"\\n\").trim()\n}\n\nexport function formatToolCallAsUnixCommand(\n toolCall: Pick<ToolCall, \"name\" | \"kind\" | \"parameters\" | \"rawInvocation\">,\n toolDefinitions: ToolDefinition[] = [],\n): string | undefined {\n if (isBashToolCall(toolCall) || isBackgroundBashToolCall(toolCall)) {\n const command = typeof toolCall.parameters?.command === \"string\"\n ? toolCall.parameters.command.trim()\n : \"\"\n return command || undefined\n }\n\n if (typeof toolCall.rawInvocation === \"string\" && toolCall.rawInvocation.trim().length > 0) {\n return toolCall.rawInvocation.trim()\n }\n\n const toolDefinition = resolveToolDefinitionForInvocation(toolDefinitions, toolCall.name)\n const parameters = toolCall.parameters ?? {}\n const passthroughParam = toolDefinition\n ? derivePassthroughParam(toolDefinition)\n : undefined\n\n if (passthroughParam) {\n const passthroughValue = readToolCallParameter(parameters, passthroughParam)\n if (typeof passthroughValue === \"string\" && passthroughValue.trim().length > 0) {\n return `${toolDefinition?.name ?? toolCall.name} ${passthroughValue.trim()}`\n }\n\n return toolDefinition?.name ?? toolCall.name\n }\n\n const parts = [toolDefinition?.name ?? toolCall.name]\n const positionalParams = toolDefinition\n ? derivePositionalParams(toolDefinition.parameters)\n : []\n const consumed = new Set<string>()\n\n for (const parameterName of positionalParams) {\n const value = readToolCallParameter(parameters, parameterName)\n consumed.add(parameterName)\n\n if (value === undefined || value === null) {\n continue\n }\n\n parts.push(formatCliArgument(value))\n }\n\n for (const [parameterName, value] of Object.entries(parameters)) {\n if (\n parameterName === \"command\" ||\n consumed.has(parameterName) ||\n value === undefined ||\n value === null\n ) {\n continue\n }\n\n const flagName = toFlagName(parameterName)\n if (typeof value === \"boolean\") {\n parts.push(value ? `--${flagName}` : `--no-${flagName}`)\n continue\n }\n\n parts.push(`--${flagName}`, formatCliArgument(value))\n }\n\n return parts.join(\" \")\n}\n\nexport function enrichToolResultWithUnixMetadata(\n toolCall: Pick<ToolCall, \"name\" | \"kind\" | \"parameters\" | \"rawInvocation\">,\n result: ToolResult,\n toolDefinitions: ToolDefinition[] = [],\n): ToolResult {\n const command = formatToolCallAsUnixCommand(toolCall, toolDefinitions)\n if (!command) {\n return result\n }\n\n if (isBashToolCall(toolCall) || isBackgroundBashToolCall(toolCall)) {\n const primary = extractPrimaryCommandMetadata(command)\n return {\n ...result,\n command: typeof result.command === \"string\" && result.command.length > 0\n ? result.command\n : command,\n command_name:\n typeof result.command_name === \"string\" && result.command_name.length > 0\n ? result.command_name\n : primary.name ?? \"bash\",\n route:\n typeof result.route === \"string\" && result.route.length > 0\n ? result.route\n : toolCall.kind === \"background_bash\"\n ? \"background_bash\"\n : \"bash\",\n }\n }\n\n return {\n ...result,\n command: typeof result.command === \"string\" && result.command.length > 0\n ? result.command\n : command,\n command_name:\n typeof result.command_name === \"string\" && result.command_name.length > 0\n ? result.command_name\n : toolCall.name,\n route:\n typeof result.route === \"string\" && result.route.length > 0\n ? result.route\n : toolCall.name,\n }\n}\n\nexport function extractCommandTargets(command: string): string[] {\n const chain = parseCommandChain(command)\n if (!chain) {\n return []\n }\n\n return chain.commands\n .map((tokens) => normalizeCommandName(tokens[0] ?? \"\"))\n .filter((value) => value.length > 0)\n}\n\nexport function extractPrimaryCommandMetadata(\n command: string,\n): { name?: string; path?: string; command?: string } {\n const chain = parseCommandChain(command)\n if (!chain || chain.commands.length === 0) {\n return { command }\n }\n\n const [firstCommand] = chain.commands\n const name = normalizeCommandName(firstCommand[0] ?? \"\")\n const args = firstCommand.slice(1)\n const firstPositional = args.find((token) => !token.startsWith(\"-\"))\n\n return {\n name: name || undefined,\n path: firstPositional,\n command,\n }\n}\n\nexport function tokenizeUnixCommand(\n command: string,\n options?: { allowTruncated?: boolean },\n): string[] | null {\n return tokenizeCommand(command, options)\n}\n\nexport function parseUnixToolCommand(\n tool: ToolDefinition,\n command: string,\n options?: {\n allowTruncated?: boolean\n },\n): { ok: true; parameters: Record<string, unknown> } | { ok: false; error: string } {\n const descriptor = buildToolDescriptor(tool)\n\n if (descriptor.passthroughParam) {\n return parsePassthroughToolCommand(descriptor, command)\n }\n\n const tokens = tokenizeCommand(command, options)\n\n if (!tokens || tokens.length === 0) {\n return {\n ok: false,\n error: `${descriptor.command}: empty invocation. Usage: ${descriptor.usage}`,\n }\n }\n\n if (tokens[0] !== descriptor.command) {\n return {\n ok: false,\n error: `${descriptor.command}: invocation must start with ${descriptor.command}. Usage: ${descriptor.usage}`,\n }\n }\n\n const result = parseToolCommandArguments(descriptor, tokens.slice(1), options)\n\n // Fallback: when standard parsing fails, try extracting bracket-\n // balanced JSON values directly from the raw command string. This\n // recovers from edge-case tokenisation failures (e.g. unquoted JSON\n // with special characters the tokenizer may split incorrectly).\n if (!result.ok) {\n const recovered = tryRecoverFlagParamsFromRawCommand(descriptor, command)\n if (recovered) {\n return recovered\n }\n }\n\n return result\n}\n\nexport async function executeToolCallWithUnixSupport(\n runtime: CommandRuntime,\n toolCall: ToolCall,\n): Promise<ToolResult> {\n const toolDefinitions = runtime.getToolDefinitions()\n\n if (isBashToolCall(toolCall)) {\n return executeUnixCommandString(\n typeof toolCall.parameters?.command === \"string\" ? toolCall.parameters.command : \"\",\n runtime,\n )\n }\n\n if (isBackgroundBashToolCall(toolCall)) {\n return executeBackgroundUnixCommandString(\n typeof toolCall.parameters?.command === \"string\" ? toolCall.parameters.command : \"\",\n runtime,\n )\n }\n\n let effectiveParameters = toolCall.parameters\n const definition = resolveToolDefinitionForInvocation(toolDefinitions, toolCall.name)\n\n if (\n definition &&\n typeof toolCall.rawInvocation === \"string\" &&\n toolCall.rawInvocation.trim().length > 0\n ) {\n const parsed = parseUnixToolCommand(definition, toolCall.rawInvocation, {\n allowTruncated: toolCall.truncated === true,\n })\n\n if (parsed.ok) {\n effectiveParameters = parsed.parameters as Record<string, any>\n } else {\n return enrichToolResultWithUnixMetadata(\n toolCall,\n {\n success: false,\n error: parsed.error,\n stderr: parsed.error,\n exit_code: 1,\n },\n toolDefinitions,\n )\n }\n }\n\n const result = await runtime.executeTool(toolCall.name, effectiveParameters)\n return enrichToolResultWithUnixMetadata(toolCall, result, toolDefinitions)\n}\n\nexport async function executeUnixCommandString(\n command: string,\n runtime: CommandRuntime,\n): Promise<ToolResult> {\n const trimmedCommand = command.trim()\n if (!trimmedCommand) {\n return {\n success: false,\n error: \"Bash command is required\",\n stderr: \"Bash command is required\",\n exit_code: 1,\n command: trimmedCommand,\n command_name: \"bash\",\n route: \"bash\",\n }\n }\n\n if (!runtime.executeBash) {\n return {\n success: false,\n error: \"Bash execution is not available in this environment\",\n stderr: \"Bash execution is not available in this environment\",\n exit_code: 1,\n command: trimmedCommand,\n command_name: \"bash\",\n route: \"bash\",\n }\n }\n\n const result = await runtime.executeBash(trimmedCommand)\n return enrichToolResultWithUnixMetadata(\n {\n name: \"Bash\",\n kind: \"bash\",\n parameters: { command: trimmedCommand },\n },\n result,\n )\n}\n\nexport async function executeBackgroundUnixCommandString(\n command: string,\n runtime: CommandRuntime,\n): Promise<ToolResult> {\n const trimmedCommand = command.trim()\n if (!trimmedCommand) {\n return {\n success: false,\n error: \"Background bash command is required\",\n stderr: \"Background bash command is required\",\n exit_code: 1,\n command: trimmedCommand,\n command_name: \"background_bash\",\n route: \"background_bash\",\n }\n }\n\n if (!runtime.executeBackgroundBash) {\n return {\n success: false,\n error: \"Background bash execution is not available in this environment\",\n stderr: \"Background bash execution is not available in this environment\",\n exit_code: 1,\n command: trimmedCommand,\n command_name: \"background_bash\",\n route: \"background_bash\",\n }\n }\n\n const result = await runtime.executeBackgroundBash(trimmedCommand)\n return enrichToolResultWithUnixMetadata(\n {\n name: \"BackgroundBash\",\n kind: \"background_bash\",\n parameters: { command: trimmedCommand },\n },\n result,\n )\n}\n\nexport function deriveCommandName(name: string): string {\n if (name.includes(\"_\")) {\n return name.toLowerCase()\n }\n\n return name\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replace(/\\s+/g, \"-\")\n .toLowerCase()\n}\n\nfunction buildToolDescriptor(tool: ToolDefinition): CommandDescriptor {\n const passthroughParam = derivePassthroughParam(tool)\n const { summary, details } = splitDescription(tool.description)\n\n return {\n command: tool.name,\n summary,\n details,\n usage: buildUsage(tool.name, tool.parameters, passthroughParam),\n example: tool.usageExample ?? buildToolUsageExample(tool),\n toolName: tool.name,\n parameters: tool.parameters,\n positionalParams: derivePositionalParams(tool.parameters),\n passthroughParam,\n }\n}\n\nfunction splitDescription(description: string): { summary: string; details?: string } {\n const match = description.match(/^(.+?[.!?])\\s+([\\s\\S]+)$/)\n if (!match) {\n return { summary: description.trim() }\n }\n\n const summary = match[1].trim()\n const rest = match[2].trim()\n return rest.length > 0 ? { summary, details: rest } : { summary }\n}\n\nfunction parseToolCommandArguments(\n descriptor: CommandDescriptor,\n args: string[],\n _options?: {\n allowTruncated?: boolean\n },\n): { ok: true; parameters: Record<string, unknown> } | { ok: false; error: string } {\n if (descriptor.passthroughParam) {\n const passthroughArgs = args.join(\" \").trim()\n if (!passthroughArgs) {\n return {\n ok: false,\n error: `${descriptor.command}: missing required ${descriptor.passthroughParam}. Usage: ${descriptor.usage}`,\n }\n }\n\n return {\n ok: true,\n parameters: {\n [descriptor.passthroughParam]: passthroughArgs,\n },\n }\n }\n\n const parameters = descriptor.parameters\n const paramEntries = Object.entries(parameters)\n const parsed = parseCommandArgs(descriptor, args)\n\n if (parsed.error) {\n return {\n ok: false,\n error: parsed.error,\n }\n }\n\n if (parsed.unknownFlags.length > 0) {\n const firstUnknownFlag = parsed.unknownFlags[0]\n const positionalFlagHint = buildPositionalFlagError(descriptor, firstUnknownFlag)\n return {\n ok: false,\n error: positionalFlagHint\n ?? `${descriptor.command}: unknown flag ${firstUnknownFlag}. Usage: ${descriptor.usage}`,\n }\n }\n\n const params: Record<string, unknown> = { ...parsed.flags }\n const positional = parsed.positional\n const positionalParams = descriptor.positionalParams\n\n const assignmentStyleParameterError = positional\n .map((token) => buildAssignmentStyleParameterError(descriptor, token))\n .find((error): error is string => typeof error === \"string\")\n\n if (assignmentStyleParameterError) {\n return {\n ok: false,\n error: assignmentStyleParameterError,\n }\n }\n\n if (positional.length > 0) {\n if (positionalParams.length === 0) {\n return {\n ok: false,\n error: `${descriptor.command}: unexpected positional arguments. Usage: ${descriptor.usage}`,\n }\n }\n\n const lastPositionalName = positionalParams[positionalParams.length - 1]\n const lastPositionalDefinition = parameters[lastPositionalName]\n const joinRemainder =\n positional.length > positionalParams.length &&\n lastPositionalDefinition &&\n isStringType(lastPositionalDefinition.type)\n\n for (let index = 0; index < positionalParams.length; index++) {\n const paramName = positionalParams[index]\n const definition = parameters[paramName]\n if (!definition || params[paramName] !== undefined) {\n continue\n }\n\n if (joinRemainder && index === positionalParams.length - 1) {\n params[paramName] = coerceCliValue(positional.slice(index).join(\" \"), definition)\n break\n }\n\n const value = positional[index]\n if (value !== undefined) {\n params[paramName] = coerceCliValue(value, definition)\n }\n }\n\n if (!joinRemainder && positional.length > positionalParams.length) {\n return {\n ok: false,\n error: `${descriptor.command}: too many positional arguments. Usage: ${descriptor.usage}`,\n }\n }\n }\n\n const missingRequired = paramEntries.filter(\n ([name, definition]) => definition.required && params[name] === undefined,\n )\n\n if (missingRequired.length > 0) {\n return {\n ok: false,\n error: `${descriptor.command}: missing required ${missingRequired.map(([name]) => name).join(\", \")}. Usage: ${descriptor.usage}`,\n }\n }\n\n return { ok: true, parameters: params }\n}\n\nfunction parseCommandArgs(\n descriptor: CommandDescriptor,\n args: string[],\n): ParsedCommandArgs {\n const parameterDefinitions = descriptor.parameters\n const flags: Record<string, unknown> = {}\n const positional: string[] = []\n const unknownFlags: string[] = []\n const flagParameters = new Map<string, [string, ToolParameterDefinition]>()\n\n for (const [parameterName, definition] of Object.entries(parameterDefinitions)) {\n flagParameters.set(toFlagName(parameterName), [parameterName, definition])\n }\n\n for (let index = 0; index < args.length; index++) {\n const token = args[index]\n\n if (token === \"--\") {\n positional.push(...args.slice(index + 1))\n break\n }\n\n if (token === \"-\" || !token.startsWith(\"-\")) {\n positional.push(token)\n continue\n }\n\n if (!token.startsWith(\"--\")) {\n unknownFlags.push(token)\n continue\n }\n\n if (token.startsWith(\"--no-\")) {\n const flagName = token.slice(5)\n const parameterEntry = flagParameters.get(flagName)\n if (!parameterEntry || !isBooleanType(parameterEntry[1].type)) {\n unknownFlags.push(token)\n continue\n }\n\n flags[parameterEntry[0]] = false\n continue\n }\n\n const equalsIndex = token.indexOf(\"=\")\n const flagToken = equalsIndex >= 0 ? token.slice(0, equalsIndex) : token\n const flagName = flagToken.slice(2)\n const parameterEntry = flagParameters.get(flagName)\n\n if (!parameterEntry) {\n unknownFlags.push(flagToken)\n continue\n }\n\n if (equalsIndex >= 0) {\n return {\n positional,\n flags,\n unknownFlags,\n error: `${descriptor.command}: ${token} is not valid. Use ${flagToken} <value> with a space-separated value. Usage: ${descriptor.usage}`,\n }\n }\n\n const [parameterName, definition] = parameterEntry\n if (descriptor.positionalParams.includes(parameterName)) {\n return {\n positional,\n flags,\n unknownFlags,\n error: buildRequiredPositionalParameterFlagError(\n descriptor,\n flagToken,\n parameterName,\n ),\n }\n }\n\n if (isBooleanType(definition.type)) {\n flags[parameterName] = true\n continue\n }\n\n const rawValue = args[index + 1]\n\n if (rawValue === undefined || rawValue.length === 0) {\n return {\n positional,\n flags,\n unknownFlags,\n error: `${descriptor.command}: ${flagToken} requires a value. Usage: ${descriptor.usage}`,\n }\n }\n\n // For array/object types, if the value starts with [ or { but\n // isn't bracket-balanced (tokenizer split the JSON), greedily\n // consume subsequent tokens until brackets close.\n const expectedTypes = Array.isArray(definition.type)\n ? definition.type\n : [definition.type]\n if (\n (expectedTypes.includes(\"array\") || expectedTypes.includes(\"object\"))\n && /^[\\[{]/.test(rawValue)\n && !isBracketBalanced(rawValue)\n ) {\n let aggregated = rawValue\n let endIdx = index + 1\n while (!isBracketBalanced(aggregated) && endIdx + 1 < args.length) {\n endIdx++\n aggregated += \" \" + args[endIdx]\n }\n flags[parameterName] = coerceCliValue(aggregated, definition)\n index = endIdx\n continue\n }\n\n flags[parameterName] = coerceCliValue(rawValue, definition)\n index += 1\n }\n\n return {\n positional,\n flags,\n unknownFlags,\n }\n}\n\nfunction buildUsage(\n command: string,\n parameters: Record<string, ToolParameterDefinition>,\n passthroughParam?: string,\n): string {\n if (passthroughParam) {\n return `${command} <${passthroughParam}...>`\n }\n\n const parts = [command]\n const positional = derivePositionalParams(parameters)\n\n for (const name of positional) {\n const definition = parameters[name]\n if (definition?.required) {\n parts.push(`<${name}>`)\n } else {\n parts.push(`[${name}]`)\n }\n }\n\n for (const [name, definition] of Object.entries(parameters)) {\n if (positional.includes(name)) {\n continue\n }\n\n const flag = `--${toFlagName(name)}`\n if (definition.required) {\n parts.push(isBooleanType(definition.type) ? flag : `${flag} <${formatType(definition.type)}>`)\n } else {\n parts.push(isBooleanType(definition.type) ? `[${flag}]` : `[${flag} <${formatType(definition.type)}>]`)\n }\n }\n\n return parts.join(\" \")\n}\n\nfunction derivePositionalParams(\n parameters: Record<string, ToolParameterDefinition>,\n): string[] {\n return Object.entries(parameters)\n .filter(([, definition]) => isPositionalParameterDefinition(definition))\n .map(([name]) => name)\n}\n\nfunction isPositionalParameterDefinition(\n definition: ToolParameterDefinition,\n): boolean {\n if (!definition.required || isBooleanType(definition.type)) {\n return false\n }\n\n return definition.positional !== false\n}\n\nfunction derivePassthroughParam(tool: ToolDefinition): string | undefined {\n if (!tool.metadata?.capabilities?.includes(\"raw_command_args\")) {\n return undefined\n }\n\n const parameterEntries = Object.entries(tool.parameters)\n if (parameterEntries.length !== 1) {\n return undefined\n }\n\n const [parameterName, definition] = parameterEntries[0]\n if (!definition.required || !isStringType(definition.type)) {\n return undefined\n }\n\n return parameterName\n}\n\nfunction parsePassthroughToolCommand(\n descriptor: CommandDescriptor,\n command: string,\n): { ok: true; parameters: Record<string, unknown> } | { ok: false; error: string } {\n const passthroughParam = descriptor.passthroughParam\n if (!passthroughParam) {\n return {\n ok: false,\n error: `${descriptor.command}: internal passthrough parsing error. Usage: ${descriptor.usage}`,\n }\n }\n\n const trimmed = command.trim()\n if (!trimmed.startsWith(descriptor.command)) {\n return {\n ok: false,\n error: `${descriptor.command}: invocation must start with ${descriptor.command}. Usage: ${descriptor.usage}`,\n }\n }\n\n const nextCharacter = trimmed[descriptor.command.length]\n if (nextCharacter && !/\\s/.test(nextCharacter)) {\n return {\n ok: false,\n error: `${descriptor.command}: invocation must start with ${descriptor.command}. Usage: ${descriptor.usage}`,\n }\n }\n\n const rawArguments = trimmed.slice(descriptor.command.length).trim()\n if (!rawArguments) {\n return {\n ok: false,\n error: `${descriptor.command}: missing required ${passthroughParam}. Usage: ${descriptor.usage}`,\n }\n }\n\n const passthroughWrapperMatch = rawArguments.match(/^--([a-zA-Z][\\w-]*)(?:\\s|=)/)\n if (passthroughWrapperMatch) {\n const wrapperFlag = `--${passthroughWrapperMatch[1]}`\n const acceptedWrapperFlags = new Set([`--${toFlagName(passthroughParam)}`])\n\n if (acceptedWrapperFlags.has(wrapperFlag)) {\n const afterFlag = rawArguments.slice(passthroughWrapperMatch[0].length).trim()\n if (afterFlag) {\n return { ok: true, parameters: { [passthroughParam]: afterFlag } }\n }\n return {\n ok: false,\n error: `${descriptor.command}: missing required ${passthroughParam} after ${wrapperFlag}. Usage: ${descriptor.usage}`,\n }\n }\n if (wrapperFlag === \"--options\") {\n return {\n ok: false,\n error: `${descriptor.command}: ${wrapperFlag} is not valid for this passthrough tool. Provide the raw argument string positionally after the tool name. Usage: ${descriptor.usage}`,\n }\n }\n }\n\n return {\n ok: true,\n parameters: {\n [passthroughParam]: rawArguments,\n },\n }\n}\n\nfunction buildPositionalFlagError(\n descriptor: CommandDescriptor,\n flagToken: string,\n): string | undefined {\n if (!flagToken.startsWith(\"--\")) {\n return undefined\n }\n\n const normalizedFlagName = flagToken.startsWith(\"--no-\")\n ? flagToken.slice(5)\n : flagToken.slice(2)\n\n for (const positionalName of descriptor.positionalParams) {\n if (toFlagName(positionalName) === normalizedFlagName) {\n return buildRequiredPositionalParameterFlagError(\n descriptor,\n flagToken,\n positionalName,\n )\n }\n }\n\n return undefined\n}\n\nfunction buildRequiredPositionalParameterFlagError(\n descriptor: CommandDescriptor,\n flagToken: string,\n parameterName: string,\n): string {\n return `${descriptor.command}: ${flagToken} is not valid for required positional parameter ${parameterName}. Provide that value positionally. Usage: ${descriptor.usage}`\n}\n\nfunction buildAssignmentStyleParameterError(\n descriptor: CommandDescriptor,\n token: string,\n): string | undefined {\n const parameterMatch = matchAssignmentStyleParameter(descriptor, token)\n if (!parameterMatch) {\n return undefined\n }\n\n const { parameterName, definition, rawName } = parameterMatch\n if (descriptor.positionalParams.includes(parameterName)) {\n return `${descriptor.command}: ${token} is not valid for required positional parameter ${parameterName}. Provide that value positionally without ${rawName}=. Usage: ${descriptor.usage}`\n }\n\n const flagName = `--${toFlagName(parameterName)}`\n if (isBooleanType(definition.type)) {\n return `${descriptor.command}: ${token} is not valid for parameter ${parameterName}. Use ${flagName} or --no-${toFlagName(parameterName)}. Usage: ${descriptor.usage}`\n }\n\n return `${descriptor.command}: ${token} is not valid for parameter ${parameterName}. Use ${flagName} <${formatType(definition.type)}>. Usage: ${descriptor.usage}`\n}\n\nfunction matchAssignmentStyleParameter(\n descriptor: CommandDescriptor,\n token: string,\n): {\n parameterName: string\n definition: ToolParameterDefinition\n rawName: string\n rawValue: string\n} | null {\n const match = token.match(/^([A-Za-z_][\\w-]*)=(.+)$/)\n if (!match) {\n return null\n }\n\n const [, rawName, rawValue] = match\n const parameterEntry = Object.entries(descriptor.parameters).find(([name]) => (\n name === rawName || toFlagName(name) === rawName\n ))\n\n if (!parameterEntry) {\n return null\n }\n\n const [parameterName, definition] = parameterEntry\n\n return {\n parameterName,\n definition,\n rawName,\n rawValue,\n }\n}\n\nfunction parseCommandChain(\n command: string,\n): { commands: string[][]; operators: ChainOperator[] } | null {\n const tokens = tokenizeCommand(command)\n if (!tokens) {\n return null\n }\n if (tokens.length === 0) {\n return { commands: [], operators: [] }\n }\n\n const commands: string[][] = []\n const operators: ChainOperator[] = []\n let current: string[] = []\n\n for (const token of tokens) {\n if (isOperatorToken(token)) {\n if (current.length === 0) {\n return null\n }\n commands.push(current)\n operators.push(token)\n current = []\n continue\n }\n current.push(token)\n }\n\n if (current.length === 0) {\n return null\n }\n\n commands.push(current)\n return { commands, operators }\n}\n\nfunction tokenizeCommand(\n command: string,\n options?: { allowTruncated?: boolean },\n): string[] | null {\n const tokens: string[] = []\n let current = \"\"\n let quote: '\"' | \"'\" | null = null\n let escaping = false\n let bracketDepth = 0\n const allowTruncated = options?.allowTruncated === true\n\n const flush = () => {\n if (current.length > 0) {\n tokens.push(current)\n current = \"\"\n }\n }\n\n for (let index = 0; index < command.length; index++) {\n const char = command[index]\n const next = command[index + 1]\n\n if (escaping) {\n current += shouldConsumeEscape(char, quote)\n ? char\n : `\\\\${char}`\n escaping = false\n continue\n }\n\n if (char === \"\\\\\") {\n escaping = true\n continue\n }\n\n if (quote) {\n if (char === quote) {\n quote = null\n // Inside a bracket literal, preserve the quotes so the\n // resulting token is valid JSON.\n if (bracketDepth > 0) {\n current += char\n }\n } else {\n current += char\n }\n continue\n }\n\n if (char === '\"' || char === \"'\") {\n // Inside a bracket literal, preserve opening quotes.\n if (bracketDepth > 0) {\n current += char\n }\n quote = char\n continue\n }\n\n // Bracket-balanced JSON literal: [ ... ] or { ... }\n if (bracketDepth > 0) {\n if (char === \"[\" || char === \"{\") {\n bracketDepth++\n } else if (char === \"]\" || char === \"}\") {\n bracketDepth--\n }\n current += char\n continue\n }\n\n if (char === \"[\" || char === \"{\") {\n bracketDepth = 1\n current += char\n continue\n }\n\n if (char === \"&\" && next === \"&\") {\n flush()\n tokens.push(\"&&\")\n index++\n continue\n }\n\n if (char === \"|\" && next === \"|\") {\n flush()\n tokens.push(\"||\")\n index++\n continue\n }\n\n if (char === \"|\" || char === \";\") {\n flush()\n tokens.push(char)\n continue\n }\n\n if (/\\s/.test(char)) {\n flush()\n continue\n }\n\n current += char\n }\n\n if (escaping || quote || (bracketDepth > 0 && !allowTruncated)) {\n if (!allowTruncated) {\n return null\n }\n\n if (escaping) {\n current += \"\\\\\"\n }\n\n flush()\n return tokens\n }\n\n flush()\n return tokens\n}\n\nfunction shouldConsumeEscape(\n char: string,\n quote: '\"' | \"'\" | null,\n): boolean {\n if (quote === \"'\") {\n return char === \"'\" || char === \"\\\\\"\n }\n\n if (quote === '\"') {\n return char === '\"' || char === \"\\\\\"\n }\n\n return /\\s/.test(char) || char === '\"' || char === \"'\" || char === \"\\\\\" || char === \"|\" || char === \"&\" || char === \";\"\n}\n\n/**\n * Returns true when every `[` / `{` in the string has a matching `]` / `}`.\n * Respects double-quoted JSON strings (escaped quotes are handled).\n */\nfunction isBracketBalanced(value: string): boolean {\n let depth = 0\n let inString = false\n let escaping = false\n for (const char of value) {\n if (escaping) {\n escaping = false\n continue\n }\n if (char === \"\\\\\") {\n escaping = true\n continue\n }\n if (char === '\"') {\n inString = !inString\n continue\n }\n if (inString) continue\n if (char === \"[\" || char === \"{\") depth++\n else if (char === \"]\" || char === \"}\") depth--\n }\n return depth === 0\n}\n\n/**\n * Last-resort recovery: scan the raw command string for `--flag`\n * followed by a bracket-balanced JSON value. This bypasses the\n * tokenizer entirely and handles cases where the tokenizer splits\n * or corrupts inline JSON.\n */\nfunction tryRecoverFlagParamsFromRawCommand(\n descriptor: CommandDescriptor,\n command: string,\n): { ok: true; parameters: Record<string, unknown> } | null {\n const params: Record<string, unknown> = {}\n let recovered = false\n\n for (const [paramName, definition] of Object.entries(descriptor.parameters)) {\n const expectedTypes = Array.isArray(definition.type) ? definition.type : [definition.type]\n if (!expectedTypes.includes(\"array\") && !expectedTypes.includes(\"object\")) {\n continue\n }\n\n const flagName = `--${toFlagName(paramName)}`\n const flagIdx = command.indexOf(flagName)\n if (flagIdx < 0) continue\n\n // Find the start of the JSON value after the flag\n let start = flagIdx + flagName.length\n // Skip whitespace between flag and value\n while (start < command.length && /\\s/.test(command[start])) start++\n if (start >= command.length) continue\n\n const opener = command[start]\n if (opener !== \"[\" && opener !== \"{\") continue\n\n // Extract bracket-balanced substring\n const jsonStr = extractBracketBalanced(command, start)\n if (!jsonStr) continue\n\n try {\n params[paramName] = JSON.parse(jsonStr)\n recovered = true\n } catch {\n // Not valid JSON, skip\n }\n }\n\n if (!recovered) return null\n\n // Check required params that weren't recovered\n for (const [name, definition] of Object.entries(descriptor.parameters)) {\n if (definition.required && params[name] === undefined) {\n return null\n }\n }\n\n return { ok: true, parameters: params }\n}\n\n/**\n * Extract a bracket-balanced substring starting at `start`.\n * Respects double-quoted strings inside the JSON.\n */\nfunction extractBracketBalanced(str: string, start: number): string | null {\n let depth = 0\n let inString = false\n let escaping = false\n\n for (let i = start; i < str.length; i++) {\n const char = str[i]\n if (escaping) {\n escaping = false\n continue\n }\n if (char === \"\\\\\") {\n escaping = true\n continue\n }\n if (char === '\"') {\n inString = !inString\n continue\n }\n if (inString) continue\n if (char === \"[\" || char === \"{\") depth++\n else if (char === \"]\" || char === \"}\") {\n depth--\n if (depth === 0) {\n return str.slice(start, i + 1)\n }\n }\n }\n return null\n}\n\nfunction normalizeCommandName(name: string): string {\n return name.trim().toLowerCase()\n}\n\nfunction isOperatorToken(token: string): token is ChainOperator {\n return token === \"|\" || token === \"&&\" || token === \"||\" || token === \";\"\n}\n\nfunction readToolCallParameter(\n parameters: Record<string, any>,\n parameterName: string,\n): unknown {\n if (parameters[parameterName] !== undefined) {\n return parameters[parameterName]\n }\n\n if (parameterName === \"path\" && parameters.file_path !== undefined) {\n return parameters.file_path\n }\n\n if (parameterName === \"taskId\" && parameters.task_id !== undefined) {\n return parameters.task_id\n }\n\n return undefined\n}\n\nfunction formatCliArgument(value: unknown): string {\n if (typeof value === \"string\") {\n return quoteCliArgument(value)\n }\n\n if (typeof value === \"number\" || typeof value === \"bigint\") {\n return String(value)\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"true\" : \"false\"\n }\n\n return quoteCliArgument(JSON.stringify(value))\n}\n\nfunction quoteCliArgument(value: string): string {\n if (value.length === 0) {\n return '\"\"'\n }\n\n if (/^[^\\s\"'|&;]+$/.test(value)) {\n return value\n }\n\n return `\"${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`\n}\n\nfunction toFlagName(name: string): string {\n return name.replace(/_/g, \"-\").toLowerCase()\n}\n\nfunction formatType(type: string | string[]): string {\n return Array.isArray(type) ? type.join(\"|\") : type\n}\n\nfunction isBooleanType(type: string | string[]): boolean {\n return (Array.isArray(type) ? type : [type]).includes(\"boolean\")\n}\n\nfunction isStringType(type: string | string[]): boolean {\n return (Array.isArray(type) ? type : [type]).includes(\"string\")\n}\n\nfunction coerceCliValue(\n value: string,\n definition: ToolParameterDefinition,\n): string | number | boolean | Record<string, unknown> | unknown[] {\n const expectedTypes = Array.isArray(definition.type)\n ? definition.type\n : [definition.type]\n\n if (expectedTypes.includes(\"boolean\")) {\n if (value === \"true\") return true\n if (value === \"false\") return false\n }\n\n if (expectedTypes.includes(\"integer\")) {\n const parsed = Number(value)\n if (Number.isInteger(parsed)) return parsed\n }\n\n if (expectedTypes.includes(\"number\")) {\n const parsed = Number(value)\n if (!Number.isNaN(parsed)) return parsed\n }\n\n if (expectedTypes.includes(\"array\") || expectedTypes.includes(\"object\")) {\n try {\n return JSON.parse(value) as Record<string, unknown> | unknown[]\n } catch {\n if (expectedTypes.includes(\"array\")) {\n const bracketArray = parseBracketArrayLiteral(value, definition)\n if (bracketArray) {\n return bracketArray\n }\n\n return value.split(\",\").map((entry) => entry.trim()).filter(Boolean)\n }\n }\n }\n\n return value\n}\n\nfunction parseBracketArrayLiteral(\n value: string,\n definition: ToolParameterDefinition,\n): unknown[] | null {\n if (!value.startsWith(\"[\") || !value.endsWith(\"]\")) {\n return null\n }\n\n const inner = value.slice(1, -1).trim()\n if (inner.length === 0) {\n return []\n }\n\n return inner\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean)\n .map((entry) => coerceArrayItemValue(stripWrappingQuotes(entry), definition))\n}\n\nfunction coerceArrayItemValue(\n value: string,\n definition: ToolParameterDefinition,\n): unknown {\n const itemType = definition.items?.type\n if (!itemType) {\n return value\n }\n\n const itemDefinition: ToolParameterDefinition = {\n type: itemType,\n description: definition.items?.description ?? definition.description,\n items: definition.items?.items,\n properties: definition.items?.properties,\n additionalProperties: definition.items?.additionalProperties,\n default: definition.items?.default,\n }\n\n return coerceCliValue(value, itemDefinition)\n}\n\nfunction stripWrappingQuotes(value: string): string {\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n return value.slice(1, -1)\n }\n\n return value\n}\n","export function decodeEscapedShellText(value: string): string {\n if (!/\\\\(?:[nrt'\"\\\\]|u[0-9a-fA-F]{4})/.test(value)) {\n return value\n }\n\n let decoded = \"\"\n let escaping = false\n let unicodeEscape = \"\"\n\n for (const char of value) {\n if (unicodeEscape.length > 0) {\n unicodeEscape += char\n\n if (unicodeEscape.length === 5) {\n if (/^u[0-9a-fA-F]{4}$/.test(unicodeEscape)) {\n decoded += String.fromCharCode(Number.parseInt(unicodeEscape.slice(1), 16))\n } else {\n decoded += `\\\\${unicodeEscape}`\n }\n unicodeEscape = \"\"\n }\n continue\n }\n\n if (!escaping) {\n if (char === \"\\\\\") {\n escaping = true\n } else {\n decoded += char\n }\n continue\n }\n\n escaping = false\n\n switch (char) {\n case \"n\":\n decoded += \"\\n\"\n break\n case \"r\":\n decoded += \"\\r\"\n break\n case \"t\":\n decoded += \"\\t\"\n break\n case '\"':\n decoded += '\"'\n break\n case \"'\":\n decoded += \"'\"\n break\n case \"\\\\\":\n decoded += \"\\\\\"\n break\n case \"u\":\n unicodeEscape = \"u\"\n break\n default:\n decoded += `\\\\${char}`\n break\n }\n }\n\n if (unicodeEscape.length > 0) {\n decoded += `\\\\${unicodeEscape}`\n }\n\n if (escaping) {\n decoded += \"\\\\\"\n }\n\n return decoded\n}","import type {\n LoopOutcome,\n ToolCall,\n ToolDefinition,\n ToolResult,\n} from \"./types\"\nimport {\n enrichToolResultWithUnixMetadata,\n executeBackgroundUnixCommandString,\n executeUnixCommandString,\n parseUnixToolCommand,\n tokenizeUnixCommand,\n type CommandRuntime,\n} from \"./unix-tooling\"\nimport { decodeEscapedShellText } from \"./shell-escape-normalization\"\n\nexport type RunInvocationTarget = \"tool\" | \"bash\" | \"background_bash\"\n\nexport interface ExtractedRunInvocationLike {\n target: RunInvocationTarget\n command: string\n truncated: boolean\n}\n\nexport interface RunCommandParseResult {\n outcome?: LoopOutcome\n selectedToolCall?: ToolCall\n selectedToolCallCount?: number\n}\n\nexport interface RunCommandPromptAvailability {\n bashAvailable: boolean\n backgroundBashAvailable: boolean\n}\n\nconst RUN_TOOL_ALIAS_VALIDATION_ERROR_PREFIX = \"VALIDATION_ERROR:\"\n\nfunction normalizeRunToolName(name: string): string {\n return name.replace(/[_\\-\\s]+/g, \"\").toLowerCase()\n}\n\nfunction buildMisroutedRunToolValidationError(toolName: string): Error | null {\n const normalizedToolName = normalizeRunToolName(toolName)\n\n if (normalizedToolName === \"bash\") {\n return new Error(\n `${RUN_TOOL_ALIAS_VALIDATION_ERROR_PREFIX} Bash is not a registered tool name. You wrote a tool payload with a bash command. Use the ---bash--- header instead.`,\n )\n }\n\n if (normalizedToolName === \"backgroundbash\") {\n return new Error(\n `${RUN_TOOL_ALIAS_VALIDATION_ERROR_PREFIX} BackgroundBash is not a registered tool name. Use the ---background_bash--- header instead of a tool payload.`,\n )\n }\n\n return null\n}\n\nexport type BackgroundBashAction = \"start\" | \"status\" | \"logs\" | \"stop\"\n\nexport interface ParsedBackgroundBashCommand {\n action: BackgroundBashAction\n name: string\n rawCommand: string\n startCommand?: string\n port?: number\n tailBytes?: number\n}\n\nexport const DEFAULT_ALLOWED_RUN_TARGETS: readonly RunInvocationTarget[] = [\n \"tool\",\n \"bash\",\n]\n\nexport const SUPPORTED_RUN_TARGETS: readonly RunInvocationTarget[] = [\n \"tool\",\n \"bash\",\n \"background_bash\",\n]\n\nfunction normalizeShellPromptCommand(command: string): string {\n const trimmedCommand = decodeEscapedMultilineCommand(command.trim())\n if (!/^\\$\\s+/.test(trimmedCommand)) {\n return stripTranscriptArtifactsAfterHeredoc(trimmedCommand)\n }\n\n const lines = trimmedCommand.split(/\\r?\\n/)\n const normalizedLines = [...lines]\n normalizedLines[0] = normalizedLines[0]!.replace(/^\\$\\s+/, \"\")\n\n const continuationLines = normalizedLines.slice(1)\n if (\n continuationLines.length > 0\n && continuationLines.every((line) => line.trim().length === 0 || /^>\\s?/.test(line))\n ) {\n for (let index = 1; index < normalizedLines.length; index += 1) {\n normalizedLines[index] = normalizedLines[index]!.replace(/^>\\s?/, \"\")\n }\n }\n\n return stripTranscriptArtifactsAfterHeredoc(normalizedLines.join(\"\\n\").trim())\n}\n\nfunction decodeEscapedMultilineCommand(command: string): string {\n if (command.includes(\"\\n\") || command.includes(\"\\r\")) {\n return command\n }\n\n return decodeEscapedShellText(command)\n}\n\nfunction stripTranscriptArtifactsAfterHeredoc(command: string): string {\n const lines = command.split(/\\r?\\n/)\n const heredocInfo = findFirstHeredoc(lines)\n if (!heredocInfo) {\n return command\n }\n\n const { terminator, startLineIndex, terminatorLineIndex } = heredocInfo\n\n if (terminatorLineIndex === -1) {\n const firstTranscriptArtifactLineIndex = lines.findIndex(\n (line, index) =>\n index > startLineIndex\n && isTranscriptArtifactLine(line?.trim() ?? \"\"),\n )\n\n if (firstTranscriptArtifactLineIndex !== -1) {\n return [\n ...lines.slice(0, firstTranscriptArtifactLineIndex),\n terminator,\n ].join(\"\\n\").trim()\n }\n\n return [...lines, terminator].join(\"\\n\").trim()\n }\n\n const normalizedLines = collapseDuplicateHeredocTerminators(\n lines,\n terminator,\n terminatorLineIndex,\n )\n const normalizedTerminatorLineIndex = findTerminatorLineIndex(\n normalizedLines,\n terminator,\n startLineIndex,\n )\n\n const firstTranscriptArtifactLineIndex = normalizedLines.findIndex(\n (line, index) =>\n index > normalizedTerminatorLineIndex\n && isTranscriptArtifactLine(line?.trim() ?? \"\"),\n )\n\n if (firstTranscriptArtifactLineIndex !== -1) {\n return normalizedLines.slice(0, normalizedTerminatorLineIndex + 1).join(\"\\n\").trim()\n }\n\n return normalizedLines.join(\"\\n\").trim()\n}\n\nfunction findFirstHeredoc(lines: string[]): {\n terminator: string\n startLineIndex: number\n terminatorLineIndex: number\n} | null {\n for (let index = 0; index < lines.length; index += 1) {\n const match = lines[index]?.match(/<<-?\\s*(['\"]?)([A-Za-z_][A-Za-z0-9_]*)\\1/)\n if (!match?.[2]) {\n continue\n }\n\n const terminator = match[2]\n let terminatorLineIndex = -1\n\n for (let lineIndex = index + 1; lineIndex < lines.length; lineIndex += 1) {\n if (lines[lineIndex]?.trim() === terminator) {\n terminatorLineIndex = lineIndex\n break\n }\n }\n\n return {\n terminator,\n startLineIndex: index,\n terminatorLineIndex,\n }\n }\n\n return null\n}\n\nfunction findTerminatorLineIndex(\n lines: string[],\n terminator: string,\n startLineIndex: number,\n): number {\n for (let lineIndex = startLineIndex + 1; lineIndex < lines.length; lineIndex += 1) {\n if (lines[lineIndex]?.trim() === terminator) {\n return lineIndex\n }\n }\n\n return -1\n}\n\nfunction collapseDuplicateHeredocTerminators(\n lines: string[],\n terminator: string,\n terminatorLineIndex: number,\n): string[] {\n const normalizedLines = [...lines]\n let duplicateLineIndex = terminatorLineIndex + 1\n\n while (normalizedLines[duplicateLineIndex]?.trim() === terminator) {\n normalizedLines.splice(duplicateLineIndex, 1)\n }\n\n return normalizedLines\n}\n\nfunction isTranscriptArtifactLine(line: string): boolean {\n return /^\\[(?:stderr|meta|exit)\\]$/i.test(line)\n || /^\\[[A-Z_]+(?::[^\\]]+)?\\]$/.test(line)\n || /^\\$(?:\\s|$)/.test(line)\n || /^[^\\s@]+@.+[$#>]$/.test(line)\n}\n\nexport function createBackgroundBashDefinition({\n description,\n portDescription,\n}: {\n description: string\n portDescription: string\n}): ToolDefinition {\n return {\n name: \"BackgroundBash\",\n description,\n usageExample: 'BackgroundBash start hello --command \"bun server.js\" --port 3000',\n parameters: {\n action: {\n type: \"string\",\n description: \"Background process action: start, status, stop, or logs.\",\n required: true,\n positional: true,\n enum: [\"start\", \"status\", \"stop\", \"logs\"] as const,\n },\n name: {\n type: \"string\",\n description: \"Stable process name, such as hello or dev-server.\",\n required: true,\n positional: true,\n },\n command: {\n type: \"string\",\n description: \"Shell command to start the process. Required only for start.\",\n },\n port: {\n type: \"number\",\n description: portDescription,\n },\n tail_bytes: {\n type: \"number\",\n description: \"Optional number of trailing log bytes to return for status or logs.\",\n },\n },\n }\n}\n\nexport abstract class RunCommand {\n readonly target: RunInvocationTarget\n\n protected constructor(target: RunInvocationTarget) {\n this.target = target\n }\n\n abstract isAvailable(runtime: CommandRuntime): boolean\n\n abstract parseInvocation(\n invocation: ExtractedRunInvocationLike,\n options?: { allowTruncated?: boolean },\n ): RunCommandParseResult | null\n\n abstract execute(\n toolCall: ToolCall,\n runtime: CommandRuntime,\n ): Promise<ToolResult>\n\n matchesToolCall(toolCall: ToolCall): boolean {\n if (toolCall.kind) {\n return toolCall.kind === this.target\n }\n\n return this.target === \"tool\"\n }\n}\n\nexport class ToolRunCommand extends RunCommand {\n constructor() {\n super(\"tool\")\n }\n\n isAvailable(runtime: CommandRuntime): boolean {\n return runtime.getToolDefinitions().length > 0\n }\n\n parseInvocation(\n invocation: ExtractedRunInvocationLike,\n options?: { allowTruncated?: boolean },\n ): RunCommandParseResult | null {\n const tokens = tokenizeUnixCommand(invocation.command, {\n allowTruncated: options?.allowTruncated === true && invocation.truncated,\n })\n const toolName = tokens?.[0]?.trim()\n if (!toolName) {\n return null\n }\n\n const aliasError = buildMisroutedRunToolValidationError(toolName)\n if (aliasError) {\n throw aliasError\n }\n\n return {\n outcome: \"continue\",\n selectedToolCall: {\n kind: \"tool\",\n name: toolName,\n parameters: {},\n rawInvocation: invocation.command,\n ...(invocation.truncated ? { truncated: true } : {}),\n },\n selectedToolCallCount: 1,\n }\n }\n\n async execute(\n toolCall: ToolCall,\n runtime: CommandRuntime,\n ): Promise<ToolResult> {\n const toolDefinitions = runtime.getToolDefinitions()\n const definition = toolDefinitions.find((tool) => tool.name === toolCall.name)\n let effectiveParameters = toolCall.parameters\n\n if (\n definition\n && typeof toolCall.rawInvocation === \"string\"\n && toolCall.rawInvocation.trim().length > 0\n ) {\n const parsed = parseUnixToolCommand(definition, toolCall.rawInvocation, {\n allowTruncated: toolCall.truncated === true,\n })\n\n if (parsed.ok) {\n effectiveParameters = parsed.parameters as Record<string, any>\n } else {\n return enrichToolResultWithUnixMetadata(\n toolCall,\n {\n success: false,\n error: parsed.error,\n stderr: parsed.error,\n exit_code: 1,\n },\n toolDefinitions,\n )\n }\n }\n\n const result = await runtime.executeTool(toolCall.name, effectiveParameters)\n return enrichToolResultWithUnixMetadata(toolCall, result, toolDefinitions)\n }\n}\n\nexport class BashRunCommand extends RunCommand {\n constructor() {\n super(\"bash\")\n }\n\n protected getCommand(toolCall: ToolCall): string {\n return typeof toolCall.parameters?.command === \"string\"\n ? toolCall.parameters.command\n : \"\"\n }\n\n isAvailable(runtime: CommandRuntime): boolean {\n return typeof runtime.executeBash === \"function\"\n }\n\n parseInvocation(invocation: ExtractedRunInvocationLike): RunCommandParseResult | null {\n const normalizedCommand = normalizeShellPromptCommand(invocation.command)\n const tokens = tokenizeUnixCommand(normalizedCommand, {\n allowTruncated: invocation.truncated,\n })\n if (!tokens || tokens.length === 0) {\n return null\n }\n\n if (tokens[0] === \"exit\") {\n if (tokens.length === 2 && tokens[1] === \"0\") {\n return { outcome: \"success\" }\n }\n\n if (tokens.length === 2 && tokens[1] === \"1\") {\n return { outcome: \"failure\" }\n }\n\n return null\n }\n\n return {\n outcome: \"continue\",\n selectedToolCall: {\n kind: \"bash\",\n name: \"Bash\",\n parameters: { command: normalizedCommand },\n ...(invocation.truncated ? { truncated: true } : {}),\n },\n selectedToolCallCount: 1,\n }\n }\n\n protected async executeCommand(\n command: string,\n runtime?: CommandRuntime,\n ): Promise<ToolResult> {\n if (!runtime) {\n throw new Error(\"Bash runtime is required\")\n }\n\n return executeUnixCommandString(command, runtime)\n }\n\n executeRaw(\n command: string,\n runtime?: CommandRuntime,\n ): Promise<ToolResult> {\n return this.executeCommand(command, runtime)\n }\n\n async execute(\n toolCall: ToolCall,\n runtime: CommandRuntime,\n ): Promise<ToolResult> {\n return enrichToolResultWithUnixMetadata(\n toolCall,\n await this.executeRaw(this.getCommand(toolCall), runtime),\n )\n }\n}\n\nexport class BackgroundBashRunCommand extends RunCommand {\n constructor() {\n super(\"background_bash\")\n }\n\n protected getCommand(toolCall: ToolCall): string {\n return typeof toolCall.parameters?.command === \"string\"\n ? toolCall.parameters.command\n : \"\"\n }\n\n isAvailable(runtime: CommandRuntime): boolean {\n return typeof runtime.executeBackgroundBash === \"function\"\n }\n\n parseInvocation(invocation: ExtractedRunInvocationLike): RunCommandParseResult | null {\n const normalizedCommand = normalizeShellPromptCommand(invocation.command)\n\n if (!normalizedCommand) {\n return null\n }\n\n return {\n outcome: \"continue\",\n selectedToolCall: {\n kind: \"background_bash\",\n name: \"BackgroundBash\",\n parameters: { command: normalizedCommand },\n rawInvocation: normalizedCommand,\n ...(invocation.truncated ? { truncated: true } : {}),\n },\n selectedToolCallCount: 1,\n }\n }\n\n protected async executeCommand(\n command: string,\n runtime?: CommandRuntime,\n ): Promise<ToolResult> {\n if (!runtime) {\n throw new Error(\"Background bash runtime is required\")\n }\n\n return executeBackgroundUnixCommandString(command, runtime)\n }\n\n executeRaw(\n command: string,\n runtime?: CommandRuntime,\n ): Promise<ToolResult> {\n return this.executeCommand(command, runtime)\n }\n\n protected buildBackgroundBashErrorResult(command: string, error: string): ToolResult {\n return {\n success: false,\n command,\n error,\n stderr: error,\n exit_code: 1,\n route: \"background_bash\",\n }\n }\n\n protected parseBackgroundBashCommand(\n definition: ToolDefinition,\n command: string,\n ):\n | { ok: true; value: ParsedBackgroundBashCommand }\n | { ok: false; result: ToolResult } {\n const parsed = parseUnixToolCommand(definition, `BackgroundBash ${command}`)\n if (!parsed.ok) {\n return {\n ok: false,\n result: this.buildBackgroundBashErrorResult(command, parsed.error),\n }\n }\n\n const parameters = parsed.parameters as Record<string, unknown>\n const action = String(parameters.action || \"\") as BackgroundBashAction\n const name = String(parameters.name || \"\").trim()\n const startCommand = typeof parameters.command === \"string\"\n ? parameters.command.trim()\n : \"\"\n const port = typeof parameters.port === \"number\" ? parameters.port : undefined\n const tailBytes = typeof parameters.tail_bytes === \"number\"\n ? parameters.tail_bytes\n : undefined\n\n if (!name) {\n return {\n ok: false,\n result: this.buildBackgroundBashErrorResult(\n command,\n \"BackgroundBash: name is required\",\n ),\n }\n }\n\n if (action === \"start\" && !startCommand) {\n return {\n ok: false,\n result: this.buildBackgroundBashErrorResult(\n command,\n \"BackgroundBash: command is required for start. Usage: BackgroundBash start <name> --command <string> [--port <number>]\",\n ),\n }\n }\n\n return {\n ok: true,\n value: {\n action,\n name,\n rawCommand: command,\n ...(startCommand ? { startCommand } : {}),\n ...(typeof port === \"number\" ? { port } : {}),\n ...(typeof tailBytes === \"number\" ? { tailBytes } : {}),\n },\n }\n }\n\n async execute(\n toolCall: ToolCall,\n runtime: CommandRuntime,\n ): Promise<ToolResult> {\n return enrichToolResultWithUnixMetadata(\n toolCall,\n await this.executeRaw(this.getCommand(toolCall), runtime),\n )\n }\n}\n\nexport class RunCommandRegistry {\n private readonly commands: readonly RunCommand[]\n\n constructor(commands: readonly RunCommand[]) {\n this.commands = commands\n }\n\n getCommand(target: RunInvocationTarget): RunCommand | undefined {\n return this.commands.find((command) => command.target === target)\n }\n\n getSupportedTargets(): readonly RunInvocationTarget[] {\n return this.commands.map((command) => command.target)\n }\n\n getAllowedTargets(runtime: CommandRuntime): readonly RunInvocationTarget[] {\n return this.commands\n .filter((command) => command.isAvailable(runtime))\n .map((command) => command.target)\n }\n\n getPromptAvailability(\n allowedTargets: readonly RunInvocationTarget[],\n ): RunCommandPromptAvailability {\n const normalizedTargets = new Set(allowedTargets)\n\n return {\n bashAvailable: normalizedTargets.has(\"bash\"),\n backgroundBashAvailable: normalizedTargets.has(\"background_bash\"),\n }\n }\n\n parseInvocation(\n invocation: ExtractedRunInvocationLike,\n options?: { allowTruncated?: boolean },\n ): RunCommandParseResult | null {\n return this.getCommand(invocation.target)?.parseInvocation(invocation, options) ?? null\n }\n\n async executeToolCall(\n runtime: CommandRuntime,\n toolCall: ToolCall,\n ): Promise<ToolResult> {\n const command = this.resolveCommandForToolCall(toolCall)\n return command.execute(toolCall, runtime)\n }\n\n private resolveCommandForToolCall(toolCall: ToolCall): RunCommand {\n for (const command of this.commands) {\n if (command.matchesToolCall(toolCall)) {\n return command\n }\n }\n\n const toolCommand = this.getCommand(\"tool\")\n if (!toolCommand) {\n throw new Error(\"Tool run command is not registered\")\n }\n\n return toolCommand\n }\n}\n\nexport const DEFAULT_RUN_COMMAND_REGISTRY = new RunCommandRegistry([\n new ToolRunCommand(),\n new BashRunCommand(),\n new BackgroundBashRunCommand(),\n])\n\nexport function createCustomRunCommandRegistry(\n bashCommand: BashRunCommand,\n backgroundBashCommand: BackgroundBashRunCommand,\n): RunCommandRegistry {\n return new RunCommandRegistry([\n new ToolRunCommand(),\n bashCommand,\n backgroundBashCommand,\n ])\n}\n\nexport function createRunCommandRuntimeBindings(\n bashCommand: BashRunCommand,\n backgroundBashCommand: BackgroundBashRunCommand,\n): {\n executeBash: (command: string) => Promise<ToolResult>\n executeBackgroundBash: (command: string) => Promise<ToolResult>\n runCommandRegistry: RunCommandRegistry\n} {\n return {\n executeBash: (command: string) => bashCommand.executeRaw(command),\n executeBackgroundBash: (command: string) => backgroundBashCommand.executeRaw(command),\n runCommandRegistry: createCustomRunCommandRegistry(bashCommand, backgroundBashCommand),\n }\n}\n\nexport function getRunCommandPromptAvailability(\n allowedTargets: readonly RunInvocationTarget[],\n): RunCommandPromptAvailability {\n return DEFAULT_RUN_COMMAND_REGISTRY.getPromptAvailability(allowedTargets)\n}\n\nexport async function executeToolCallWithRunCommands(\n runtime: CommandRuntime,\n toolCall: ToolCall,\n commandRegistry: RunCommandRegistry = DEFAULT_RUN_COMMAND_REGISTRY,\n): Promise<ToolResult> {\n return commandRegistry.executeToolCall(runtime, toolCall)\n}","import type {\n LoopOutcome,\n ToolCall,\n ToolDefinition,\n ToolParameterDefinition,\n} from \"./types\"\nimport {\n DEFAULT_ALLOWED_RUN_TARGETS,\n DEFAULT_RUN_COMMAND_REGISTRY,\n SUPPORTED_RUN_TARGETS,\n type RunCommandParseResult,\n type RunCommandRegistry,\n type RunInvocationTarget,\n} from \"./run-command-registry\"\nimport { buildMultipleStructuredControlSegmentsValidationError } from \"./tool-call-prompts\"\nimport {\n formatUnixToolSurface,\n parseUnixToolCommand,\n} from \"./unix-tooling\"\n\nexport {\n DEFAULT_ALLOWED_RUN_TARGETS,\n}\nexport type {\n RunInvocationTarget,\n}\n\nfunction formatParameterType(type: string | string[]): string {\n if (Array.isArray(type)) {\n return type.join(\"|\")\n }\n return type\n}\n\nexport function formatToolDefinitions(\n tools: ToolDefinition[],\n style: \"compact\" | \"verbose\" | \"unix\" = \"compact\",\n): string {\n if (style === \"unix\") {\n return formatUnixToolSurface(tools)\n }\n\n if (style === \"verbose\") {\n return tools\n .map((tool) => {\n const params = Object.entries(tool.parameters)\n .map(\n ([name, definition]) =>\n ` ${name} (${formatParameterType(definition.type)}${definition.required ? \", required\" : \"\"}): ${definition.description}`,\n )\n .join(\"\\n\")\n return `- ${tool.name}: ${tool.description}\\n Parameters:\\n${params}`\n })\n .join(\"\\n\\n\")\n }\n\n return tools\n .map((tool) => {\n const params = Object.entries(tool.parameters)\n .map(([name, schema]) => {\n const required = schema.required ? \"*\" : \"\"\n return `${name}${required}: ${formatParameterType(schema.type)}`\n })\n .join(\", \")\n return `• ${tool.name}(${params}) - ${tool.description}`\n })\n .join(\"\\n\")\n}\n\nfunction normalizeExpectedTypes(type: string | string[]): string[] {\n return (Array.isArray(type) ? type : [type]).map((entry) =>\n entry.toLowerCase(),\n )\n}\n\nfunction parseStructuredLiteral(rawValue: string): unknown {\n try {\n return JSON.parse(rawValue)\n } catch {\n return undefined\n }\n}\n\nfunction coerceArrayFallbackItem(\n rawValue: string,\n definition: ToolParameterDefinition,\n): unknown {\n if (!definition.items?.type) {\n return rawValue\n }\n\n return coerceStringParameterValue(rawValue, {\n type: definition.items.type,\n description: definition.items.description ?? \"\",\n items: definition.items.items,\n properties: definition.items.properties,\n additionalProperties: definition.items.additionalProperties,\n default: definition.items.default,\n })\n}\n\nfunction coerceStringParameterValue(\n rawValue: string,\n definition: ToolParameterDefinition,\n): unknown {\n const trimmed = rawValue.trim()\n if (trimmed.length === 0) return rawValue\n\n for (const expectedType of normalizeExpectedTypes(definition.type)) {\n switch (expectedType) {\n case \"array\": {\n const parsed = parseStructuredLiteral(trimmed)\n if (Array.isArray(parsed)) return parsed\n\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n const itemTypes = definition.items?.type\n ? normalizeExpectedTypes(definition.items.type)\n : []\n if (itemTypes.includes(\"object\")) {\n return [parsed]\n }\n }\n\n if (!/[{}\\[\\]]/.test(trimmed)) {\n const parts = trimmed\n .split(/[\\r\\n,]+/)\n .map((part) => part.trim())\n .filter(Boolean)\n if (parts.length > 0) {\n return parts.map((part) =>\n coerceArrayFallbackItem(part, definition),\n )\n }\n }\n break\n }\n\n case \"object\": {\n const parsed = parseStructuredLiteral(trimmed)\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n return parsed\n }\n break\n }\n\n case \"boolean\": {\n if (trimmed === \"true\") return true\n if (trimmed === \"false\") return false\n break\n }\n\n case \"integer\": {\n if (/^-?(?:0|[1-9]\\d*)$/.test(trimmed)) {\n return Number(trimmed)\n }\n break\n }\n\n case \"number\": {\n if (/^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/.test(trimmed)) {\n return Number(trimmed)\n }\n break\n }\n\n case \"null\": {\n if (trimmed === \"null\") return null\n break\n }\n }\n }\n\n return rawValue\n}\n\nexport function coerceToolCallToDefinition(\n call: ToolCall | undefined,\n tools: ToolDefinition[] = [],\n): ToolCall | undefined {\n if (!call || tools.length === 0) return call\n\n const definitionsByName = new Map(tools.map((tool) => [tool.name, tool]))\n const definition = definitionsByName.get(call.name)\n\n if (\n definition &&\n call.kind !== \"bash\" &&\n typeof call.rawInvocation === \"string\" &&\n call.rawInvocation.trim().length > 0\n ) {\n const parsed = parseUnixToolCommand(definition, call.rawInvocation, {\n allowTruncated: call.truncated === true,\n })\n if (parsed.ok) {\n return {\n ...call,\n parameters: parsed.parameters as Record<string, any>,\n }\n }\n }\n\n if (!definition) return call\n\n let didCoerce = false\n const parameters = { ...call.parameters }\n\n for (const [paramName, paramValue] of Object.entries(call.parameters)) {\n const paramDefinition = definition.parameters[paramName]\n if (!paramDefinition || typeof paramValue !== \"string\") continue\n\n const coercedValue = coerceStringParameterValue(\n paramValue,\n paramDefinition,\n )\n if (coercedValue !== paramValue) {\n parameters[paramName] = coercedValue\n didCoerce = true\n }\n }\n\n return didCoerce\n ? {\n ...call,\n parameters,\n }\n : call\n}\n\nexport interface ExtractedRunInvocation {\n target: \"tool\" | \"bash\" | \"background_bash\"\n command: string\n raw: string\n start: number\n end: number\n truncated: boolean\n}\n\ninterface ExtractedRunInvocationPayload {\n command: string\n end: number\n truncated: boolean\n quoted: boolean\n}\n\nexport interface ParsedStructuredAgentText {\n prose: string\n outcome?: LoopOutcome\n selectedToolCall?: ToolCall\n selectedToolCallCount: number\n}\n\nfunction buildStructuredInvocationHeaderPattern(\n allowedTargets: readonly RunInvocationTarget[],\n): RegExp {\n const normalizedTargets = Array.from(new Set(allowedTargets)).filter(\n (target): target is RunInvocationTarget => SUPPORTED_RUN_TARGETS.includes(target),\n )\n if (normalizedTargets.length === 0) {\n return /$^/\n }\n\n return new RegExp(\n `(^|\\\\n)([ \\t]*)---(${normalizedTargets.join(\"|\")})---(?:[ \\t]*\\\\r?\\\\n[ \\t]*|[ \\t]+|$)`,\n \"gi\",\n )\n}\n\nfunction extractInlineTrailingCompatibilityInvocation(\n content: string,\n options?: {\n allowTruncated?: boolean\n allowedTargets?: readonly RunInvocationTarget[]\n },\n): ExtractedRunInvocation | null {\n const allowTruncated = options?.allowTruncated === true\n const allowedTargets = options?.allowedTargets ?? DEFAULT_ALLOWED_RUN_TARGETS\n const normalizedTargets = Array.from(new Set(allowedTargets)).filter(\n (target): target is RunInvocationTarget => SUPPORTED_RUN_TARGETS.includes(target),\n )\n\n if (normalizedTargets.length === 0) {\n return null\n }\n\n let lastHeaderMatch: RegExpExecArray | null = null\n const headerMatcher = new RegExp(`---(${normalizedTargets.join(\"|\")})---`, \"gi\")\n let match: RegExpExecArray | null\n\n while ((match = headerMatcher.exec(content)) !== null) {\n lastHeaderMatch = match\n }\n\n const matchedTarget = lastHeaderMatch?.[1]?.toLowerCase()\n if (!lastHeaderMatch?.[0] || !matchedTarget) {\n return null\n }\n\n const prefix = content.slice(0, lastHeaderMatch.index).trimEnd()\n if (!/[.!?]$/.test(prefix)) {\n return null\n }\n\n const payloadSource = content.slice(lastHeaderMatch.index + lastHeaderMatch[0].length)\n const payloadMatch = payloadSource.match(/^[ \\t]+([^\\r\\n][^\\r\\n]*?)\\s*$/)\n const normalizedCommand = payloadMatch?.[1]?.trim()\n\n if (!normalizedCommand) {\n return null\n }\n\n const target = matchedTarget === \"tool\"\n ? \"tool\"\n : matchedTarget === \"background_bash\"\n ? \"background_bash\"\n : \"bash\"\n\n return {\n target,\n command: normalizedCommand,\n raw: content.slice(lastHeaderMatch.index).trimEnd(),\n start: lastHeaderMatch.index,\n end: content.length,\n truncated: allowTruncated\n && isLikelyTruncatedShellLikePayload(normalizedCommand),\n }\n}\n\nexport function containsStandaloneStructuredInvocationStart(\n content: string,\n allowedTargets: readonly RunInvocationTarget[] = DEFAULT_ALLOWED_RUN_TARGETS,\n): boolean {\n const matcher = buildStructuredInvocationHeaderPattern(allowedTargets)\n return matcher.test(content)\n}\n\nexport function extractRunInvocations(\n content: string,\n options?: {\n allowTruncated?: boolean\n allowedTargets?: readonly RunInvocationTarget[]\n },\n): ExtractedRunInvocation[] {\n const invocations: ExtractedRunInvocation[] = []\n const allowTruncated = options?.allowTruncated === true\n const allowedTargets = options?.allowedTargets ?? DEFAULT_ALLOWED_RUN_TARGETS\n const matcher = buildStructuredInvocationHeaderPattern(allowedTargets)\n const headers: Array<{\n target: ExtractedRunInvocation[\"target\"]\n start: number\n payloadStart: number\n }> = []\n let match: RegExpExecArray | null\n\n while ((match = matcher.exec(content)) !== null) {\n const matchedTarget = match[3]?.toLowerCase()\n const target = matchedTarget === \"tool\"\n ? \"tool\"\n : matchedTarget === \"background_bash\"\n ? \"background_bash\"\n : \"bash\"\n const prefixLength = (match[1] ?? \"\").length\n const start = match.index + prefixLength\n const payloadStart = match.index + match[0].length\n\n headers.push({\n target,\n start,\n payloadStart,\n })\n }\n\n if (headers.length === 0) {\n const inlineCompatibilityInvocation = extractInlineTrailingCompatibilityInvocation(\n content,\n options,\n )\n\n if (inlineCompatibilityInvocation) {\n return [inlineCompatibilityInvocation]\n }\n }\n\n for (const [index, header] of headers.entries()) {\n const end = headers[index + 1]?.start ?? content.length\n const raw = content.slice(header.start, end).trimEnd()\n const command = content.slice(header.payloadStart, end).trimEnd()\n const normalizedCommand = command.trim()\n\n if (!normalizedCommand) {\n continue\n }\n\n invocations.push({\n target: header.target,\n command: normalizedCommand,\n raw,\n start: header.start,\n end,\n truncated: allowTruncated\n && end === content.length\n && isLikelyTruncatedShellLikePayload(normalizedCommand),\n })\n }\n\n return invocations\n}\n\nexport function parseStructuredAgentText(\n content: string,\n options?: {\n allowTruncated?: boolean\n allowedTargets?: readonly RunInvocationTarget[]\n commandRegistry?: RunCommandRegistry\n },\n): ParsedStructuredAgentText | null {\n const invocations = extractRunInvocations(content, options)\n if (invocations.length === 0) {\n return null\n }\n\n if (invocations.length > 1) {\n throw new Error(\n buildMultipleStructuredControlSegmentsValidationError(invocations.length),\n )\n }\n\n let selectedToolCall: ToolCall | undefined\n let selectedToolCallCount = 0\n let outcome: ParsedStructuredAgentText[\"outcome\"]\n let latestSuccessfulInvocationIndex = -1\n let latestInvocationError: unknown\n let latestInvocationErrorIndex = -1\n const commandRegistry = options?.commandRegistry ?? DEFAULT_RUN_COMMAND_REGISTRY\n\n for (const [index, invocation] of invocations.entries()) {\n let parsedInvocation: RunCommandParseResult | null\n try {\n parsedInvocation = commandRegistry.parseInvocation(invocation, {\n allowTruncated: options?.allowTruncated === true,\n })\n } catch (error: unknown) {\n latestInvocationError = error\n latestInvocationErrorIndex = index\n continue\n }\n\n if (!parsedInvocation) {\n continue\n }\n\n latestSuccessfulInvocationIndex = index\n\n if (parsedInvocation.selectedToolCall) {\n selectedToolCall = parsedInvocation.selectedToolCall\n }\n\n if (\n parsedInvocation.outcome\n && parsedInvocation.outcome !== \"continue\"\n && !parsedInvocation.selectedToolCall\n ) {\n selectedToolCall = undefined\n }\n\n selectedToolCallCount += parsedInvocation.selectedToolCallCount ?? 0\n\n if (parsedInvocation.outcome) {\n outcome = parsedInvocation.outcome\n }\n }\n\n if (latestInvocationErrorIndex > latestSuccessfulInvocationIndex) {\n throw latestInvocationError\n }\n\n if (!outcome && !selectedToolCall) {\n if (latestInvocationError !== undefined) {\n throw latestInvocationError\n }\n\n return null\n }\n\n return {\n prose: stripInvocations(content, invocations),\n outcome,\n ...(selectedToolCall ? { selectedToolCall } : {}),\n selectedToolCallCount,\n }\n}\n\nfunction isLikelyTruncatedShellLikePayload(command: string): boolean {\n let quote: '\"' | \"'\" | \"`\" | null = null\n let escaping = false\n\n for (const char of command) {\n if (quote) {\n if (escaping) {\n escaping = false\n continue\n }\n\n if (quote !== \"'\" && char === \"\\\\\") {\n escaping = true\n continue\n }\n\n if (char === quote) {\n quote = null\n }\n\n continue\n }\n\n if (escaping) {\n escaping = false\n continue\n }\n\n if (char === \"\\\\\") {\n escaping = true\n continue\n }\n\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char\n }\n }\n\n if (quote || escaping) {\n return true\n }\n\n const heredocMatches = Array.from(command.matchAll(/<<-?\\s*(['\"]?)([A-Za-z_][A-Za-z0-9_]*)\\1/g))\n if (heredocMatches.length === 0) {\n return false\n }\n\n const lines = command.split(/\\r?\\n/)\n\n return heredocMatches.some((match) => {\n const terminator = match[2]\n if (!terminator) {\n return false\n }\n\n return !lines.some((line) => line.trim() === terminator)\n })\n}\n\nfunction stripInvocations(\n content: string,\n invocations: ExtractedRunInvocation[],\n): string {\n if (invocations.length === 0) {\n return content.trim()\n }\n\n let cursor = 0\n let prose = \"\"\n\n for (const invocation of invocations) {\n prose += content.slice(cursor, invocation.start)\n cursor = invocation.end\n }\n\n prose += content.slice(cursor)\n return prose\n .split(/\\r?\\n/)\n .map((line) => line.trimEnd())\n .join(\"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim()\n}\n\n","/**\n * Shared prompt building utilities for agentic loops.\n *\n * Used by Hammer CLI agent, Magic webapp agent, Monoslides, and Monospace to format\n * tool surfaces and construct core prompt templates.\n */\n\nimport type { ToolDefinition } from \"./types\"\nimport type { TruncatedToolInfo } from \"./agent-machine\"\nimport { formatToolDefinitions } from \"./command-response-utils\"\nimport {\n getRunCommandPromptAvailability,\n type RunInvocationTarget,\n} from \"./run-command-registry\"\nimport {\n SHALLOW_WORKSPACE_DISCOVERY_RULE_LINE,\n SLUG_FORMAT_EXAMPLE_RULE_LINES,\n SLUG_SEPARATOR_EXAMPLE_BLOCK,\n SHARED_TOOL_USAGE_RULE,\n TOOL_CALL_SEPARATOR_RULE,\n type BashCommandsSectionOptions,\n buildBackgroundBashCommandsSection,\n buildBashCommandsSection,\n SHARED_TOOL_CALL_EXAMPLE_LINES,\n SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE,\n WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES,\n} from \"./tool-call-prompts\"\n\nexport const DEFAULT_AGENT_FALLBACK_SYSTEM_PROMPT = \"You are an AI agent.\"\nexport const ERROR_RECOVERY_RULE_LINE =\n \"**ERROR RECOVERY**: If a tool returns `success=false`, inspect the error, fix the cause, and retry.\"\nexport const ROOT_CAUSES_RULE_LINE =\n \"**ROOT CAUSES**: Fix root causes rather than suppressing symptoms.\"\nexport const VALIDATE_AFTER_CHANGES_RULE_LINE =\n \"**VALIDATE AFTER CHANGES**: Check syntax, imports, and obvious integration errors after editing.\"\nexport const INCREMENTAL_TESTING_RULE_LINE =\n \"**INCREMENTAL TESTING**: Write → test → fix before moving on. Verify deliverables actually work before finishing successfully.\"\nexport const CODE_QUALITY_RULE_LINE =\n \"**CODE QUALITY**: For TypeScript, prefer `tsc --noEmit` or the repo's build/test command after meaningful edits.\"\nexport const SKILL_INVOKE_READ_RULE_LINE =\n \"If the user says invoke /skill-name, treat that as asking you to read the skill-name skill with ReadSkill before proceeding.\"\nexport const TODO_LIST_FIRST_RESPONSE_RULE_LINE =\n \"You MUST call the manage_todo_list tool in your very first response to plan your work before executing any other tool. Break the task into specific, actionable steps. On subsequent responses, update the todo list to reflect progress.\"\n\nexport interface FormatToolsSectionOptions {\n bashAvailable?: boolean\n backgroundBashAvailable?: boolean\n allowedRunTargets?: readonly RunInvocationTarget[]\n bashCommandsSectionOptions?: BashCommandsSectionOptions\n}\n\nexport interface SystemPromptSections {\n basePrompt: string\n toolsHeading?: string\n toolsSection: string\n supplementalRules?: string\n}\n\nexport interface SystemPromptBuildContext {\n tools: ToolDefinition[]\n toolsSectionOptions: FormatToolsSectionOptions\n}\n\nexport type SystemPromptCustomizer = (\n sections: Readonly<SystemPromptSections>,\n context: Readonly<SystemPromptBuildContext>,\n) => Partial<SystemPromptSections> | void\n\nexport function createAppendToolsSectionCustomizer(\n block: string,\n): SystemPromptCustomizer {\n return (sections) => {\n const trimmedBlock = block.trim()\n if (!trimmedBlock) {\n return\n }\n\n return {\n toolsSection: [sections.toolsSection, trimmedBlock]\n .filter((section) => section.trim().length > 0)\n .join(\"\\n\\n\"),\n }\n }\n}\n\nexport function createToolsSectionOverrideCustomizer(\n buildToolsSection: (context: Readonly<SystemPromptBuildContext>) => string,\n): SystemPromptCustomizer {\n return (_sections, context) => ({\n toolsSection: buildToolsSection(context),\n })\n}\n\nfunction applySystemPromptCustomizers(\n sections: SystemPromptSections,\n context: SystemPromptBuildContext,\n customizers?: readonly SystemPromptCustomizer[],\n): SystemPromptSections {\n if (!customizers || customizers.length === 0) {\n return sections\n }\n\n return customizers.reduce<SystemPromptSections>((current, customizer) => ({\n ...current,\n ...(customizer(current, context) ?? {}),\n }), sections)\n}\n\nexport function buildValidationRecoveryRuleLines(options?: {\n includeVerifiedCompletionRule?: boolean\n reservedControlHeadersRule?: string\n}): string[] {\n const includeVerifiedCompletionRule =\n options?.includeVerifiedCompletionRule ?? false\n const reservedControlHeadersRule =\n options?.reservedControlHeadersRule\n ?? \"Treat the structured control headers as reserved control syntax and use them only in the final executable segment.\"\n\n return [\n \"If the previous response was rejected for format, do not explain the response protocol back to the system.\",\n \"Recover by choosing one concrete next action.\",\n reservedControlHeadersRule,\n TOOL_CALL_SEPARATOR_RULE,\n ...SLUG_FORMAT_EXAMPLE_RULE_LINES,\n ...(includeVerifiedCompletionRule\n ? [\n \"Do not claim success until your latest tool results or observed state show the task is complete.\",\n ]\n : []),\n ]\n}\n\n// ---------------------------------------------------------------------------\n// Tool descriptions\n// ---------------------------------------------------------------------------\n\n/**\n * Format tool definitions for injection into a system prompt.\n * Thin wrapper over `formatToolDefinitions` with configurable bash guidance.\n */\nexport function formatToolsSection(\n tools: ToolDefinition[],\n options?: FormatToolsSectionOptions,\n): string {\n const commandPromptAvailability = options?.allowedRunTargets\n ? getRunCommandPromptAvailability(options.allowedRunTargets)\n : undefined\n let desc = formatToolDefinitions(tools, \"unix\")\n if (options?.bashAvailable ?? commandPromptAvailability?.bashAvailable) {\n const bashSection = buildBashCommandsSection(options?.bashCommandsSectionOptions)\n\n desc = [desc, bashSection].filter(Boolean).join(\"\\n\\n\")\n }\n\n if (options?.backgroundBashAvailable ?? commandPromptAvailability?.backgroundBashAvailable) {\n const backgroundBashSection = buildBackgroundBashCommandsSection()\n\n desc = [desc, backgroundBashSection].filter(Boolean).join(\"\\n\\n\")\n }\n\n return desc\n}\n\nexport interface SkillSummaryLike {\n metadata: {\n name: string\n description: string\n }\n}\n\nexport function buildSkillsSection(allSkills: SkillSummaryLike[]): string {\n if (allSkills.length === 0) {\n return \"\"\n }\n\n const skillSummaries = [...allSkills]\n .sort((left, right) =>\n left.metadata.name.localeCompare(right.metadata.name),\n )\n .map((skill) => ` • **${skill.metadata.name}**: ${skill.metadata.description}`)\n .join(\"\\n\")\n\n return `\\n\\n# AVAILABLE SKILLS\\n\\nSpecialized skills provide expert workflows and domain knowledge. Each skill contains detailed instructions, examples, and best practices.\\n\\n${skillSummaries}\\n\\nThese skill summaries are loaded into context automatically at the start of the run. If a skill is relevant, call ReadSkill to load the full instructions before implementing that workflow.\\n\\n**Skills guidance**:\\n1. Review the skills above before starting implementation-heavy work\\n2. If a listed skill clearly matches the task, prefer reading that skill before planning or implementing a generic approach\\n3. Prefer the most specific relevant skill over a broader fallback skill when multiple skills could apply\\n4. ${SKILL_INVOKE_READ_RULE_LINE}\\n5. Use ReadSkill for the specific skill whose workflow you want to follow in detail before making substantive changes\\n6. If a skill you read instructs you to consult another foundational skill, follow that dependency before implementation\\n7. Skills are instructions, not replacements for the registered tools\\n\\n---\\n\\n`\n}\n\nexport function buildSkillAwareStaticContext(options: {\n allSkills: SkillSummaryLike[]\n staticRules: string\n}): string {\n return [\n buildSkillsSection(options.allSkills).trim(),\n options.staticRules.trim(),\n ].filter((section) => section.length > 0).join(\"\\n\\n\")\n}\n\nexport interface WorkspaceCodingStaticRulesOptions {\n rulesHeading?: string\n skillsDirectory?: string\n additionalRuleSections?: readonly WorkspaceCodingStaticRuleSection[]\n}\n\nexport type WorkspaceCodingStaticBuiltInSection =\n | \"workspace-safety\"\n | \"editing-strategy\"\n | \"verification\"\n | \"efficiency\"\n\nexport type WorkspaceCodingStaticRuleSection =\n | {\n section: WorkspaceCodingStaticBuiltInSection\n ruleLines?: readonly string[]\n omitRuleLines?: readonly string[]\n heading?: never\n }\n | {\n heading: string\n ruleLines: readonly string[]\n section?: never\n omitRuleLines?: never\n }\n\nfunction formatRuleLines(ruleLines: readonly string[]): string {\n return ruleLines\n .map((rule) => rule.trim())\n .filter((rule) => rule.length > 0)\n .map((rule) => `- ${rule}`)\n .join(\"\\n\")\n}\n\ninterface WorkspaceCodingResolvedRuleSection {\n id: string\n heading: string\n ruleLines: string[]\n}\n\nexport const PORT_CONFLICT_RULE_LINE =\n \"**PORT CONFLICTS**: If a server fails with `EADDRINUSE` and `FreePort` is available, use it before retrying.\"\n\nfunction buildDefaultWorkspaceCodingSections(skillsDirectory: string): WorkspaceCodingResolvedRuleSection[] {\n return [\n {\n id: \"workspace-safety\",\n heading: \"Workspace Safety\",\n ruleLines: [\n \"**RELATIVE PATHS**: Use workspace-relative paths for file operations unless a tool explicitly requires an absolute path.\",\n `**SKILLS DIRECTORY**: Skills live in \\`${skillsDirectory}/\\`.`,\n `If a skill references \\`scripts/file.py\\`, use \\`${skillsDirectory}/{skill-name}/scripts/file.py\\`.`,\n `If a skill references \\`guide.md\\`, inspect \\`${skillsDirectory}/{skill-name}/guide.md\\` with bash or another focused tool.`,\n \"**READ BEFORE WRITE**: Inspect an existing file and nearby related files before modifying it unless you are creating a clearly new file in an empty target location.\",\n \"**CREATE PARENTS BEFORE CAT**: When creating a new file with shell redirection such as `cat > path/to/file <<'EOF'`, always run `mkdir -p path/to` first because `cat` and shell redirection do not create missing parent directories.\",\n ],\n },\n {\n id: \"editing-strategy\",\n heading: \"Editing Strategy\",\n ruleLines: [\n \"**SKILL-FIRST WORKFLOWS**: When the current task clearly matches an available skill, read that skill before making substantive edits, implementation plans, or design decisions.\",\n \"**FILE CHANGES VIA BASH**: Use a final \\`---bash---\\` control segment for creating, editing, appending, renaming, and normalizing files. Prefer scoped edits over blind overwrites.\",\n \"**TARGETED EDITS**: When modifying an existing file, always use narrow search-and-replace or patch-style edits that touch only the necessary lines. Preserve surrounding code, formatting, and structure.\",\n \"**SEARCH/REPLACE REQUIRED**: For existing files, use in-place search-and-replace commands such as `sed` or another scoped patching approach. Do not rewrite an existing file wholesale to make a fix.\",\n \"**NO EXISTING-FILE CAT REWRITES**: Never regenerate or overwrite an existing file with `cat > file <<'EOF'`. Reserve `cat > file <<'EOF'` for creating a new file that does not already exist.\",\n \"**ERROR FIXES SHOULD BE LOCAL**: When a compiler, linter, or runtime error points to part of an existing file, patch that local region instead of rewriting the file.\",\n \"**EXPLORE, PLAN, THEN IMPLEMENT**: For ambiguous, multi-file, or unfamiliar work: explore first, form a plan, then implement.\",\n \"**KEEP SCRIPTS SHORT**: Keep one-off scripts around 100 lines or less. Split larger scripts into verified steps.\",\n `**CONTEXT GATHERING**: Use bash with ${WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES} to discover structure, inspect related files, and understand patterns before changing code.`,\n `**SHALLOW DISCOVERY**: ${SHALLOW_WORKSPACE_DISCOVERY_RULE_LINE}`,\n \"**BASH SAFETY**: Avoid destructive broad-scope commands. Keep file operations tightly scoped.\",\n ],\n },\n {\n id: \"verification\",\n heading: \"Verification\",\n ruleLines: [\n ERROR_RECOVERY_RULE_LINE,\n ROOT_CAUSES_RULE_LINE,\n VALIDATE_AFTER_CHANGES_RULE_LINE,\n INCREMENTAL_TESTING_RULE_LINE,\n CODE_QUALITY_RULE_LINE,\n ],\n },\n {\n id: \"efficiency\",\n heading: \"Efficiency\",\n ruleLines: [\n `**EFFICIENT FILE SEARCH**: Use bash with ${WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES} to locate files and inspect focused ranges instead of repeatedly dumping whole files.`,\n \"**OUTPUT SIZE & TRUNCATION**: Keep each control-segment payload reasonably small. For large file generation, prefer a complete validated file or a sequence of coherent patch-sized edits. Use incremental append steps only when tooling or truncation constraints make that necessary.\",\n \"**MINIMIZE FILE CHURN**: Avoid rewriting entire existing files when a scoped replacement will do. Smaller in-place edits reduce regressions, token waste, and repeated repair loops.\",\n \"**PREFER SED-SHAPED FIXES**: When using bash to repair existing files, use `sed`-style or other search-and-replace edits instead of `cat`-based full-file regeneration.\",\n \"**EFFICIENCY**: Prefer one well-composed control-segment action per response instead of fragmented follow-up steps when a single bash command or tool invocation will do. Do not re-read files already in context without a reason.\",\n PORT_CONFLICT_RULE_LINE,\n ],\n },\n ]\n}\n\nfunction applyWorkspaceCodingSectionOverrides(\n baseSections: WorkspaceCodingResolvedRuleSection[],\n additionalRuleSections: readonly WorkspaceCodingStaticRuleSection[],\n): WorkspaceCodingResolvedRuleSection[] {\n const resolvedSections = baseSections.map((section) => ({\n ...section,\n ruleLines: [...section.ruleLines],\n }))\n\n for (const override of additionalRuleSections) {\n const trimmedRuleLines = (override.ruleLines ?? [])\n .map((rule) => rule.trim())\n .filter((rule) => rule.length > 0)\n const omittedRuleLines = new Set(\n (override.omitRuleLines ?? [])\n .map((rule) => rule.trim())\n .filter((rule) => rule.length > 0),\n )\n\n if (override.section) {\n const targetSection = resolvedSections.find((section) => section.id === override.section)\n\n if (!targetSection) {\n continue\n }\n\n if (omittedRuleLines.size > 0) {\n targetSection.ruleLines = targetSection.ruleLines.filter(\n (rule) => !omittedRuleLines.has(rule),\n )\n }\n\n targetSection.ruleLines.push(...trimmedRuleLines)\n continue\n }\n\n const heading = override.heading?.trim() ?? \"\"\n\n if (!heading || trimmedRuleLines.length === 0) {\n continue\n }\n\n resolvedSections.push({\n id: `custom:${heading}`,\n heading,\n ruleLines: trimmedRuleLines,\n })\n }\n\n return resolvedSections\n}\n\nexport function buildWorkspaceCodingStaticRules(\n options?: WorkspaceCodingStaticRulesOptions,\n): string {\n const skillsDirectory = options?.skillsDirectory ?? \".claude/skills\"\n const rulesHeading = options?.rulesHeading ?? \"WORKSPACE CODING AGENT RULES\"\n const additionalRuleSections = options?.additionalRuleSections ?? []\n const normalizedSections = applyWorkspaceCodingSectionOverrides(\n buildDefaultWorkspaceCodingSections(skillsDirectory),\n additionalRuleSections,\n )\n .map((section) => {\n if (section.ruleLines.length === 0) {\n return \"\"\n }\n\n return `## ${section.heading}\\n\\n${formatRuleLines(section.ruleLines)}`\n })\n .filter((section) => section.length > 0)\n .join(\"\\n\\n\")\n\n const codingAgentRules = `\n\n# ${rulesHeading}\n\n${normalizedSections}`\n\n return buildCoreStaticRules() + codingAgentRules\n}\n\nexport function buildToolAwareSystemPrompt(\n basePrompt: string,\n tools: ToolDefinition[],\n options?: {\n bashAvailable?: boolean\n backgroundBashAvailable?: boolean\n allowedRunTargets?: readonly RunInvocationTarget[]\n toolsSectionOptions?: Omit<FormatToolsSectionOptions, \"bashAvailable\" | \"backgroundBashAvailable\" | \"allowedRunTargets\">\n toolsHeading?: string\n systemPromptCustomizers?: readonly SystemPromptCustomizer[]\n },\n): string {\n const commandPromptAvailability = options?.allowedRunTargets\n ? getRunCommandPromptAvailability(options.allowedRunTargets)\n : undefined\n const bashAvailable = options?.bashAvailable ?? commandPromptAvailability?.bashAvailable ?? false\n const backgroundBashAvailable = options?.backgroundBashAvailable ?? commandPromptAvailability?.backgroundBashAvailable ?? false\n const toolsSectionOptions: FormatToolsSectionOptions = {\n bashAvailable,\n backgroundBashAvailable,\n allowedRunTargets: options?.allowedRunTargets,\n ...options?.toolsSectionOptions,\n }\n const sections = applySystemPromptCustomizers({\n basePrompt,\n toolsHeading: options?.toolsHeading ?? \"## Available Tools\",\n toolsSection: formatToolsSection(tools, toolsSectionOptions),\n }, {\n tools,\n toolsSectionOptions,\n }, options?.systemPromptCustomizers)\n\n if (!sections.toolsSection.trim() && !bashAvailable && !backgroundBashAvailable) {\n return sections.basePrompt\n }\n\n const promptSections = [sections.basePrompt]\n\n if (sections.toolsSection.trim()) {\n if (tools.length > 0) {\n promptSections.push(`${sections.toolsHeading ?? \"Available tools:\"}\\n${sections.toolsSection}`)\n } else {\n promptSections.push(sections.toolsSection)\n }\n }\n\n if (sections.supplementalRules?.trim()) {\n promptSections.push(sections.supplementalRules)\n }\n\n return promptSections.join(\"\\n\\n\")\n}\n\nexport function buildAgentIdentityLine(options: {\n identity?: string\n agentName?: string\n roleDescription?: string\n}): string {\n const {\n identity,\n agentName,\n roleDescription,\n } = options\n\n const identityLine = identity\n ?? (agentName && roleDescription\n ? `You are ${agentName}, a ${roleDescription} agent.`\n : null)\n\n if (!identityLine) {\n throw new Error(\"buildAgentIdentityLine requires either identity or both agentName and roleDescription\")\n }\n\n return identityLine\n}\n\nexport function buildWebRuntimeRules(options?: {\n additionalRules?: string[]\n includeVerifiedCompletionRule?: boolean\n}): string {\n const additionalRules = options?.additionalRules ?? []\n\n return [\n ...buildValidationRecoveryRuleLines({\n includeVerifiedCompletionRule: options?.includeVerifiedCompletionRule ?? false,\n reservedControlHeadersRule:\n \"Treat the structured control headers as reserved control syntax. Use them only in the final executable segment, never inside analysis or summaries.\",\n }),\n ...additionalRules,\n ].join(\"\\n\")\n}\n\nexport function buildAgentSystemPrompt(options: {\n identityLine?: string\n tools: ToolDefinition[]\n supplementalRules?: string\n bashAvailable?: boolean\n backgroundBashAvailable?: boolean\n allowedRunTargets?: readonly RunInvocationTarget[]\n toolsSectionOptions?: Omit<FormatToolsSectionOptions, \"bashAvailable\" | \"backgroundBashAvailable\" | \"allowedRunTargets\">\n systemPromptCustomizers?: readonly SystemPromptCustomizer[]\n}): string {\n const commandPromptAvailability = options.allowedRunTargets\n ? getRunCommandPromptAvailability(options.allowedRunTargets)\n : undefined\n const toolsSectionOptions: FormatToolsSectionOptions = {\n bashAvailable: options.bashAvailable ?? commandPromptAvailability?.bashAvailable ?? false,\n backgroundBashAvailable:\n options.backgroundBashAvailable\n ?? commandPromptAvailability?.backgroundBashAvailable\n ?? false,\n allowedRunTargets: options.allowedRunTargets,\n ...options.toolsSectionOptions,\n }\n const sections = applySystemPromptCustomizers({\n basePrompt: options.identityLine ?? DEFAULT_AGENT_FALLBACK_SYSTEM_PROMPT,\n toolsHeading: \"# TOOLS\",\n toolsSection: formatToolsSection(options.tools, toolsSectionOptions),\n supplementalRules: options.supplementalRules,\n }, {\n tools: options.tools,\n toolsSectionOptions,\n }, options.systemPromptCustomizers)\n\n return [\n sections.basePrompt,\n sections.toolsHeading,\n sections.toolsSection,\n sections.supplementalRules,\n ].filter((section): section is string => Boolean(section && section.trim().length > 0)).join(\"\\n\\n\")\n}\n\n// ---------------------------------------------------------------------------\n// Shared static rules\n// ---------------------------------------------------------------------------\n\n/**\n * Core static rules shared by all agent loops (Hammer, Magic, Monoslides, Monospace).\n *\n * Covers:\n * - Shell-style output format specification\n * - Terminal exit requirements\n * - Tool call formatting\n * - Scratchpad usage\n *\n * Hammer extends this with file-path rules, skills-first policy,\n * incremental testing, etc. Magic uses this as-is or with lighter extensions.\n *\n * Designed to be injected once via `memoryLayer.setStaticContext()`,\n * saving ~1500 tokens per action vs repeating in every system prompt.\n */\nexport function buildCoreStaticRules(): string {\n return `# AGENT RULES (Persistent — do not repeat)\n\n## Output Format\n\nRespond with normal prose first, then end every response with exactly one structured control block whose standalone slug header is on its own line and whose payload is on the following line(s):\n\nI analyzed the current state.\n${SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE}\n\n## Control Segment Contract\n\n- Treat the structured control headers as reserved control syntax — do not express tool instructions as braces, field blocks, arrays, XML tags, or bracket tags\n- ${SHARED_TOOL_USAGE_RULE}\n- Use the final control block only as the final executable block of the response\n- ${TOOL_CALL_SEPARATOR_RULE}\n- Never mention, quote, or explain the control headers in your analysis, summaries, or self-corrections\n- Use a final ---bash--- control block whose payload is exit 0 only when finishing successfully, and a final ---bash--- control block whose payload is exit 1 only when finishing unsuccessfully. Those exit payloads are intercepted as control signals and are not executed as real shell commands.\n- Prefer raw payloads over wrapping the entire command in outer quotes; use shell quotes only inside the payload when needed\n\n## Control Segment Examples\n\n${SHARED_TOOL_CALL_EXAMPLE_LINES.join(\"\\n\")}\n\n${SLUG_SEPARATOR_EXAMPLE_BLOCK}\n\n## Required Endings\n\n- Include prose analysis before the final control block\n- If continuing, include exactly one real action block as the final control block\n- If finishing successfully, include exactly one final ---bash--- control block with payload exit 0 and no tool commands\n- If finishing unsuccessfully, include exactly one final ---bash--- control block with payload exit 1 and no tool commands\n- The final control block is ALWAYS the very last thing in the response. Nothing may follow it — no prose, no second header block, no commentary.\n\nContinue is implicit when you omit an exit line. Never loop after the task is already complete.`\n}\n\n// ---------------------------------------------------------------------------\n// Step user message builder (shared by Hammer, Magic, Monoslides, and Monospace)\n// ---------------------------------------------------------------------------\n\nexport interface StepUserMessageOptions {\n /** Current action number. */\n actionCount: number\n /** Truncated tool info from the previous iteration (if any). */\n truncatedToolInfo?: TruncatedToolInfo\n}\n\n/**\n * Build the user message injected at the start of each agentic loop step.\n *\n * Handles truncation-specific continuation guidance (Write → \"Use Append\",\n * generic tool → \"continue from where you left off\") and the default\n * \"Continue working\" prompt.\n *\n * Shared by Hammer's UnifiedAgent, Magic's useAgent hook, and Monoslides/Monospace runtimes.\n */\nexport function buildStepUserMessage(opts: StepUserMessageOptions): string {\n const { truncatedToolInfo } = opts\n\n if (truncatedToolInfo) {\n if (truncatedToolInfo.name === \"Write\" && truncatedToolInfo.filePath) {\n if (truncatedToolInfo.executionSucceeded) {\n return `Your previous Write to \"${truncatedToolInfo.filePath}\" was truncated due to max_tokens limit. The partial content HAS been written successfully. You can see exactly where it ended in your previous message. Use Append to continue writing the remaining content from where you left off.`\n }\n return `Your previous Write to \"${truncatedToolInfo.filePath}\" was truncated due to max_tokens limit AND the tool execution failed. Check the error in the last tool result and retry with a valid path.`\n }\n return `Your previous ${truncatedToolInfo.name} was truncated due to max_tokens limit. Please continue from where you left off.`\n }\n\n return \"Continue working on the task. What is your next action?\"\n}\n\n/**\n * Check whether the last message in the conversation is a user error\n * message (prefixed with ⚠️), which means we should skip injecting\n * another user message to avoid double user messages.\n *\n * Shared by Hammer's UnifiedAgent, Magic's useAgent hook, and Monoslides/Monospace runtimes.\n */\nexport function shouldSkipStepUserMessage(\n lastRole: string | null,\n lastContent: string | null,\n): boolean {\n return lastRole === \"user\" && (lastContent?.startsWith(\"⚠️\") ?? false)\n}\n\n// ---------------------------------------------------------------------------\n// Truncated tool info extraction (shared by Hammer, Magic, Monoslides, and Monospace)\n// ---------------------------------------------------------------------------\n\nexport interface ToolCallLike {\n name: string\n parameters?: Record<string, unknown>\n}\n\n/**\n * Extract `TruncatedToolInfo` from the first tool call in a response\n * when the LLM response was truncated (finishReason === \"length\").\n *\n * Returns `undefined` if no tool calls are provided.\n */\nexport function extractTruncatedToolInfo(\n calls: ToolCallLike[],\n): TruncatedToolInfo | undefined {\n if (calls.length === 0) return undefined\n const first = calls[0]\n return {\n name: first.name,\n filePath:\n (first.parameters?.path as string) ||\n (first.parameters?.file_path as string) ||\n undefined,\n executionSucceeded: false,\n }\n}\n","/**\n * Shared tool execution utilities for agentic loops.\n *\n * Used by both Hammer CLI agent and Magic webapp agent for\n * consistent tool result truncation and safe execution wrapping.\n */\n\nimport type { ToolCall, ToolResult } from \"./types\"\nimport { formatToolCallAsUnixCommand } from \"./unix-tooling\"\n\n// ---------------------------------------------------------------------------\n// Tool result truncation\n// ---------------------------------------------------------------------------\n\n/** Default maximum characters for tool result strings. */\nexport const MAX_TOOL_RESULT_CHARS = 30_000\nconst MAX_PRESENTATION_LINES = 200\nconst MAX_PRESENTATION_CHARS = 50_000\n\nexport interface TruncateOptions {\n /** Maximum character length (default: 30,000). */\n maxChars?: number\n /**\n * Truncation strategy:\n * - `\"head-tail\"`: Keep first half + last half (preserves end of large outputs).\n * - `\"head-only\"`: Keep the first N characters.\n */\n strategy?: \"head-tail\" | \"head-only\"\n}\n\n/**\n * Truncate an oversized tool result string to stay within LLM context limits.\n *\n * @returns The original string if within limit, otherwise a truncated version.\n */\nexport function truncateToolResult(\n resultStr: string,\n options?: TruncateOptions,\n): string {\n const maxChars = options?.maxChars ?? MAX_TOOL_RESULT_CHARS\n const strategy = options?.strategy ?? \"head-tail\"\n\n if (resultStr.length <= maxChars) return resultStr\n\n if (strategy === \"head-only\") {\n return resultStr.substring(0, maxChars) + \"\\n...(truncated)\"\n }\n\n // head-tail: keep first half and last half\n const half = Math.floor(maxChars / 2)\n const head = resultStr.substring(0, half)\n const tail = resultStr.substring(resultStr.length - half)\n const omitted = resultStr.length - maxChars\n return `${head}\\n... [${omitted} chars truncated] ...\\n${tail}`\n}\n\n// ---------------------------------------------------------------------------\n// Tool result presentation\n// ---------------------------------------------------------------------------\n\nexport function formatToolResultMessage(\n toolCall: ToolCall,\n result: ToolResult,\n): string {\n const exitCode = typeof result.exit_code === \"number\"\n ? result.exit_code\n : result.success === true\n ? 0\n : 1\n const durationMs = typeof result.duration_ms === \"number\"\n ? result.duration_ms\n : 0\n const command = typeof result.command === \"string\" && result.command.length > 0\n ? result.command\n : formatPseudoCommand(toolCall)\n\n const stdout = truncatePresentationOutput(renderToolStdout(result))\n const stderr = renderToolStderr(result, exitCode)\n const metaLine = buildMetaLine(toolCall, result)\n const lines = [`$ ${command}`]\n\n if (stdout) {\n lines.push(stdout)\n }\n\n if (stderr) {\n if (!stdout && exitCode !== 0 && !stderr.includes(\"\\n\")) {\n lines.push(`[error] ${stderr}`)\n } else {\n lines.push(`[stderr]\\n${stderr}`)\n }\n }\n\n if (!stdout && !stderr && exitCode === 0) {\n lines.push(\"(no output)\")\n }\n\n if (metaLine) {\n lines.push(metaLine)\n }\n\n lines.push(`[exit:${exitCode} | ${formatDuration(durationMs)}]`)\n return lines.join(\"\\n\")\n}\n\nexport function parseToolResultMessage(content: string): {\n success: boolean\n toolName?: string\n error?: string\n parsed?: Record<string, any>\n} {\n try {\n const parsed = JSON.parse(content)\n const toolName = typeof parsed.command_name === \"string\"\n ? parsed.command_name\n : typeof parsed.route === \"string\"\n ? parsed.route\n : typeof parsed.tool_name === \"string\"\n ? parsed.tool_name\n : typeof parsed.toolName === \"string\"\n ? parsed.toolName\n : typeof parsed.tool === \"string\"\n ? parsed.tool\n : typeof parsed.name === \"string\"\n ? parsed.name\n : undefined\n return {\n success: parsed.success === true,\n toolName,\n error: parsed.error,\n parsed,\n }\n } catch {\n const lines = content.split(/\\r?\\n/)\n const commandLine = lines[0]?.startsWith(\"$ \") ? lines.shift()!.slice(2) : undefined\n\n const stdoutLines: string[] = []\n const stderrLines: string[] = []\n let errorLine: string | undefined\n let metaLine = \"\"\n let exitCode = 1\n let durationMs = 0\n let inStderr = false\n\n for (const line of lines) {\n if (line.startsWith(\"[stderr]\")) {\n inStderr = true\n const inline = line.slice(\"[stderr]\".length).trim()\n if (inline) {\n stderrLines.push(inline)\n }\n continue\n }\n\n if (line.startsWith(\"[error] \")) {\n errorLine = line.slice(\"[error] \".length)\n inStderr = false\n continue\n }\n\n if (line.startsWith(\"[meta] \")) {\n metaLine = line.slice(\"[meta] \".length)\n inStderr = false\n continue\n }\n\n const exitMatch = line.match(/^\\[exit:(-?\\d+)\\s*\\|\\s*([^\\]]+)\\]$/)\n if (exitMatch) {\n exitCode = Number(exitMatch[1])\n durationMs = parseDuration(exitMatch[2])\n inStderr = false\n continue\n }\n\n if (inStderr) {\n stderrLines.push(line)\n } else {\n stdoutLines.push(line)\n }\n }\n\n const metadata = parseMetadata(metaLine)\n const stdout = stdoutLines.join(\"\\n\").trim()\n const stderr = stderrLines.join(\"\\n\").trim()\n const error = errorLine ?? (exitCode === 0 ? undefined : stderr || undefined)\n const parsed = {\n success: exitCode === 0,\n command: commandLine,\n output: stdout,\n stderr,\n error,\n exit_code: exitCode,\n duration_ms: durationMs,\n ...metadata,\n }\n\n return {\n success: exitCode === 0,\n toolName:\n typeof metadata.tool === \"string\"\n ? metadata.tool\n : typeof metadata.route === \"string\"\n ? metadata.route\n : undefined,\n error,\n parsed,\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Safe tool execution\n// ---------------------------------------------------------------------------\n\n/**\n * Execute a tool call with standard error handling.\n * Catches any thrown error and returns `{ success: false, error: message }`.\n */\nexport async function executeToolSafe(\n fn: () => Promise<ToolResult>,\n): Promise<ToolResult> {\n try {\n return await fn()\n } catch (err: unknown) {\n return {\n success: false,\n error: err instanceof Error ? err.message : \"Tool execution failed\",\n }\n }\n}\n\nfunction renderToolStdout(result: ToolResult): string {\n if (typeof result.stdout === \"string\") {\n return result.stdout\n }\n\n if (typeof result.output === \"string\") {\n return result.output\n }\n\n if (typeof result.content === \"string\") {\n return result.content\n }\n\n if (typeof result.data === \"string\") {\n return result.data\n }\n\n const matchEntries = (result as ToolResult & { matches?: unknown[] }).matches\n if (Array.isArray(matchEntries)) {\n return matchEntries\n .map((match) => {\n if (typeof match === \"string\") return match\n if (!match || typeof match !== \"object\") return JSON.stringify(match)\n\n const typed = match as {\n file?: unknown\n line?: unknown\n content?: unknown\n }\n const file = typeof typed.file === \"string\" ? typed.file : \"\"\n const line = typeof typed.line === \"number\" ? typed.line : \"\"\n const content = typeof typed.content === \"string\"\n ? typed.content\n : JSON.stringify(match)\n return `${file}${line ? `:${line}` : \"\"}: ${content}`.trim()\n })\n .join(\"\\n\")\n }\n\n for (const candidate of [result.output, result.content, result.data]) {\n if (candidate && typeof candidate === \"object\") {\n return JSON.stringify(candidate, null, 2)\n }\n }\n\n const {\n success: _success,\n error: _error,\n stderr: _stderr,\n exit_code: _exitCode,\n duration_ms: _durationMs,\n command: _command,\n ...remainder\n } = result\n if (Object.keys(remainder).length === 0) {\n return \"\"\n }\n\n return JSON.stringify(remainder, null, 2)\n}\n\nfunction renderToolStderr(result: ToolResult, exitCode: number): string {\n if (typeof result.stderr === \"string\" && result.stderr.length > 0) {\n return result.stderr\n }\n\n if (exitCode !== 0 && typeof result.error === \"string\") {\n return result.error\n }\n\n return \"\"\n}\n\nfunction truncatePresentationOutput(output: string): string {\n if (!output) {\n return \"\"\n }\n\n const lines = output.split(/\\r?\\n/)\n if (lines.length <= MAX_PRESENTATION_LINES && output.length <= MAX_PRESENTATION_CHARS) {\n return output\n }\n\n const truncated = lines.slice(0, MAX_PRESENTATION_LINES).join(\"\\n\")\n return `${truncated}\\n--- output truncated (${lines.length} lines, ${output.length} chars) ---\\nUse more specific commands, filters, or line ranges to narrow the result.`\n}\n\nfunction formatPseudoCommand(toolCall: ToolCall): string {\n const unixCommand = formatToolCallAsUnixCommand(toolCall)\n if (unixCommand) {\n return unixCommand\n }\n\n const parts = [toolCall.name]\n\n for (const [name, value] of Object.entries(toolCall.parameters ?? {})) {\n if (value === undefined || value === null) {\n continue\n }\n\n if (typeof value === \"boolean\") {\n parts.push(value ? `--${name}` : `--no-${name}`)\n continue\n }\n\n if (typeof value === \"string\" && !value.includes(\"\\n\") && !/\\s/.test(value)) {\n parts.push(`--${name}`, value)\n continue\n }\n\n parts.push(`--${name}`, JSON.stringify(value))\n }\n\n return parts.join(\" \")\n}\n\nfunction buildMetaLine(toolCall: ToolCall, result: ToolResult): string {\n const commandName = (result as ToolResult & { command_name?: unknown }).command_name\n const route = (result as ToolResult & { route?: unknown }).route\n const metadata: Record<string, string | number | boolean> = {\n tool: typeof commandName === \"string\" ? commandName : toolCall.name,\n route: typeof route === \"string\" ? route : toolCall.name,\n }\n\n for (const source of [toolCall.parameters ?? {}, result as Record<string, unknown>]) {\n for (const key of [\"path\", \"url\", \"query\", \"taskId\", \"task_id\", \"pattern\"]) {\n const value = source[key]\n if (typeof value === \"string\" && value.length > 0) {\n metadata[key] = value\n }\n }\n }\n\n const pairs = Object.entries(metadata)\n if (pairs.length === 0) {\n return \"\"\n }\n\n return `[meta] ${pairs\n .map(([key, value]) => `${key}=${typeof value === \"string\" ? JSON.stringify(value) : String(value)}`)\n .join(\" \")}`\n}\n\nfunction parseMetadata(text: string): Record<string, any> {\n if (!text) {\n return {}\n }\n\n const values: Record<string, any> = {}\n const regex = /(\\w+)=((?:\"(?:[^\"\\\\]|\\\\.)*\")|\\S+)/g\n let match: RegExpExecArray | null\n while ((match = regex.exec(text)) !== null) {\n const key = match[1]\n const rawValue = match[2]\n if (rawValue.startsWith('\"')) {\n try {\n values[key] = JSON.parse(rawValue)\n } catch {\n values[key] = rawValue.slice(1, -1)\n }\n continue\n }\n\n if (rawValue === \"true\") {\n values[key] = true\n } else if (rawValue === \"false\") {\n values[key] = false\n } else if (!Number.isNaN(Number(rawValue))) {\n values[key] = Number(rawValue)\n } else {\n values[key] = rawValue\n }\n }\n\n return values\n}\n\nfunction formatDuration(durationMs: number): string {\n if (durationMs >= 1000) {\n return `${(durationMs / 1000).toFixed(1)}s`\n }\n return `${Math.max(0, Math.round(durationMs))}ms`\n}\n\nfunction parseDuration(raw: string): number {\n const trimmed = raw.trim().toLowerCase()\n if (trimmed.endsWith(\"ms\")) {\n return Number(trimmed.slice(0, -2)) || 0\n }\n if (trimmed.endsWith(\"s\")) {\n return Math.round((Number(trimmed.slice(0, -1)) || 0) * 1000)\n }\n return Number(trimmed) || 0\n}\n\n","/**\n * Zod schemas for LLM response validation and normalization.\n *\n * Handles common model mistakes such as garbled status strings.\n *\n * Shared across Hammer, Magic, Monoslides, Monospace, and any other agent consumer.\n */\n\nimport { z } from \"zod\"\n\nfunction normalizeToolCallName(name: string): string {\n return name.replace(/[\\s_-]+/g, \"\").toLowerCase()\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Schemas\n// ---------------------------------------------------------------------------\n\nexport const ToolCallSchema = z\n .object({\n kind: z.enum([\"tool\", \"bash\", \"background_bash\"]).optional(),\n name: z.string().min(1, \"Tool call name is required\"),\n parameters: z.record(z.string(), z.any()).default({}),\n rawInvocation: z.string().optional(),\n truncated: z.boolean().optional(),\n })\n .strict()\n .superRefine((value, ctx) => {\n const normalizedName = normalizeToolCallName(value.name)\n\n if (normalizedName === \"bash\" && value.kind !== \"bash\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"name\"],\n message: 'Bash is not a registered tool name. Use kind: \"bash\" instead.',\n })\n }\n\n if (normalizedName === \"backgroundbash\" && value.kind !== \"background_bash\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"name\"],\n message: 'BackgroundBash is not a registered tool name. Use kind: \"background_bash\" instead.',\n })\n }\n })\n\nexport const LLMResponseSchema = z\n .object({\n content: z.string().optional(),\n reasoning: z.string().default(\"No reasoning provided\"),\n scratchpad: z.string().optional(),\n selectedToolCall: ToolCallSchema.optional(),\n outcome: z.preprocess(\n (v) => (typeof v === \"string\" ? v.toLowerCase() : v),\n z.enum([\"continue\", \"success\", \"failure\"]),\n ),\n })\n .strict()\n","/**\n * Shared agent response parsing pipeline.\n *\n * Unifies the response parsing logic used by both Hammer CLI agent\n * (`BaseLLMProvider.parseAgentResponse`) and Magic webapp agent\n * (`useAgent.parseResponse`).\n *\n * Pipeline: raw content → structured control-segment\n * extraction → Zod validation\n */\n\nimport {\n DEFAULT_ALLOWED_RUN_TARGETS,\n parseStructuredAgentText,\n type RunInvocationTarget,\n} from \"./command-response-utils\"\nimport { LLMResponseSchema } from \"./schemas\"\nimport type { LoopOutcome, ToolCall } from \"./types\"\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ParsedAgentResponse {\n /** Zod-validated (or raw fallback) parsed response object. */\n parsed: Record<string, unknown>\n /** The single executable tool call selected for this turn, if any. */\n selectedToolCall?: ToolCall\n /** The outcome field (\"continue\", \"success\", \"failure\"). */\n outcome: LoopOutcome\n /** The reasoning string from the LLM. */\n reasoning: string\n /** Validation error message, if validation failed but raw data was usable. */\n validationError?: string\n /** Original raw content string. */\n raw: string\n}\n\nexport interface ParseAgentResponseOptions {\n /**\n * If `true`, throw on Zod validation failure (Hammer behavior).\n * If `false`, fall back to raw parsed data on Zod failure (Magic behavior).\n * Default: `false`.\n */\n throwOnValidationError?: boolean\n /** Allow truncated structured control segments during recovery paths. */\n allowTruncatedRuns?: boolean\n /**\n * Custom error formatter called when `throwOnValidationError` is `true`.\n * Receives the Zod error and raw content, should return an Error to throw.\n */\n formatValidationError?: (zodError: unknown, rawContent: string) => Error\n /** Allowed structured control targets for this agent. Defaults to tool/bash. */\n allowedRunTargets?: readonly RunInvocationTarget[]\n}\n\n// ---------------------------------------------------------------------------\n// Core parsing function\n// ---------------------------------------------------------------------------\n\n/**\n * Parse an LLM response string into a structured agent response.\n *\n * Shared pipeline:\n * 1. Extract prose + structured control segments\n * 2. Validate via `LLMResponseSchema` (Zod)\n * 3. Return structured result or null if extraction fails\n *\n * @returns Parsed response, or `null` if no structured control segments could be extracted.\n */\nexport function parseAgentResponse(\n content: string,\n options?: ParseAgentResponseOptions,\n): ParsedAgentResponse | null {\n const {\n throwOnValidationError = false,\n allowTruncatedRuns = false,\n formatValidationError,\n allowedRunTargets = DEFAULT_ALLOWED_RUN_TARGETS,\n } = options ?? {}\n\n const result = parseStructuredAgentText(content, {\n allowTruncated: allowTruncatedRuns,\n allowedTargets: allowedRunTargets,\n })\n if (!result) return null\n\n const parsed: Record<string, unknown> = {\n reasoning: result.prose,\n outcome: result.outcome,\n ...(result.selectedToolCall ? { selectedToolCall: result.selectedToolCall } : {}),\n }\n\n let validationError: string | undefined\n let validated: Record<string, unknown>\n\n try {\n validated = LLMResponseSchema.parse(parsed) as Record<string, unknown>\n } catch (err: unknown) {\n if (throwOnValidationError) {\n if (formatValidationError) {\n throw formatValidationError(err, content)\n }\n throw err\n }\n // Lenient mode: fall back to raw parsed data\n validationError = err instanceof Error ? err.message : String(err)\n validated = parsed\n }\n\n const outcome = (validated.outcome ?? parsed.outcome ?? \"continue\") as ParsedAgentResponse[\"outcome\"]\n const reasoning = String(validated.reasoning ?? parsed.reasoning ?? \"\")\n const selectedToolCall =\n (validated.selectedToolCall as ToolCall | undefined) ?? result.selectedToolCall\n\n return {\n parsed: validated,\n ...(selectedToolCall ? { selectedToolCall } : {}),\n outcome,\n reasoning,\n validationError,\n raw: content,\n }\n}\n","/**\n * Shared tool-call recovery utilities for the structured control-segment protocol.\n *\n * Extracts truncation recovery, validation error formatting, and error\n * message templates so Hammer, Magic, Monoslides, Monospace, and the voice agent share one\n * response contract.\n */\n\nimport { parseAgentResponse, type ParsedAgentResponse, type ParseAgentResponseOptions } from \"./agent-response-parser\"\nimport { decodeEscapedShellText } from \"./shell-escape-normalization\"\nimport {\n containsStandaloneStructuredInvocationStart,\n} from \"./command-response-utils\"\nimport {\n VALIDATION_FIX_REFERENCE,\n buildMultipleStructuredControlSegmentsValidationError,\n buildStructuredControlValidationError,\n} from \"./tool-call-prompts\"\nimport { DEFAULT_ALLOWED_RUN_TARGETS, type RunInvocationTarget } from \"./command-response-utils\"\n\n/** Error message sent to the LLM when its response was truncated mid-generation. */\nexport const ERROR_TRUNCATED_RESPONSE = `VALIDATION_ERROR: Your response was truncated before the final executable control block could be extracted.\n\nRetry with normal prose and one final executable control block only. Put the standalone slug header on its own line and put the payload on the following line(s). Do not discuss the control syntax.`\n\n// ---------------------------------------------------------------------------\n// Error formatting\n// ---------------------------------------------------------------------------\n\n/**\n * Format a Zod validation error (or generic Error) into a human-readable string.\n *\n * Returns per-field details showing which parts are missing or have wrong types,\n * suitable for feeding back to the LLM so it can self-correct.\n */\nexport function formatZodValidationError(zodError: unknown): string {\n // Zod errors have an `issues` array\n if (\n zodError &&\n typeof zodError === \"object\" &&\n \"issues\" in zodError &&\n Array.isArray((zodError as any).issues)\n ) {\n return (zodError as any).issues\n .map((err: any) => {\n const path = (err.path ?? []).join(\".\") || \"(root)\"\n if (path === \"outcome\") {\n let detail =\n ' - terminal state: continue responses do not include a finish control block; only final responses use a ---bash--- control block with payload exit 0 or exit 1'\n if (err.received !== undefined) {\n detail += ` (you sent: ${JSON.stringify(err.received)})`\n }\n return detail\n }\n let detail = ` - ${path}: ${err.message}`\n if (err.received === undefined && err.code === \"invalid_type\") {\n detail += \" (field is MISSING from your response)\"\n } else if (err.received !== undefined) {\n detail += ` (you sent: ${JSON.stringify(err.received)})`\n }\n if (err.expected && err.code === \"invalid_type\") {\n detail += ` — expected type: ${err.expected}`\n }\n return detail\n })\n .join(\"\\n\")\n }\n if (zodError instanceof Error) {\n return `Response parse error: ${zodError.message}`\n }\n return String(zodError)\n}\n\n/**\n * Build a complete VALIDATION_ERROR string with Zod details + fix reference.\n *\n * Suitable for throwing as an `Error.message` that gets sent back to the LLM.\n */\nexport function buildValidationErrorMessage(zodError: unknown): string {\n const details = formatZodValidationError(zodError)\n return buildStructuredControlValidationError(details)\n}\n\n/**\n * Build a \"no structured control segment found\" error message.\n *\n * Keep this message focused on the repair instruction instead of duplicating\n * the failed output inline.\n */\nexport function buildNoStructuredResponseFoundError(): string {\n return buildStructuredControlValidationError(\n 'Your response did not end with an executable control block. Reply with normal prose and, if you are acting, one final standalone header block such as ---tool---, ---bash---, or ---background_bash---. Put the header on its own line and put the payload on the following line(s). Use ---bash--- with exit 0 or exit 1 only when finishing. Do not discuss the control syntax.',\n )\n}\n\nexport {\n buildMultipleStructuredControlSegmentsValidationError,\n VALIDATION_FIX_REFERENCE,\n}\n\n// ---------------------------------------------------------------------------\n// Recovery strategies\n// ---------------------------------------------------------------------------\n\n/**\n * Attempt to recover a parseable agent response from truncated LLM output\n * (when `finishReason === \"length\"`).\n *\n * Strategy:\n * 1. Try `parseAgentResponse` in lenient mode with truncated control-segment support\n * 2. Infer \"continue\" for non-terminal responses when control segments exist\n *\n * @returns A `ParsedAgentResponse`, or `null` if nothing could be extracted.\n */\nexport function recoverTruncatedResponse(\n content: string,\n options?: Pick<ParseResponseWithRecoveryOptions, \"allowedRunTargets\">,\n): ParsedAgentResponse | null {\n const fullResult = parseAgentResponse(content, {\n throwOnValidationError: false,\n allowTruncatedRuns: true,\n allowedRunTargets: options?.allowedRunTargets,\n })\n const bashToolLogRecovery = recoverBashCommandFromToolLog(content, {\n allowedRunTargets: options?.allowedRunTargets,\n })\n\n if (fullResult) {\n if (shouldPreferBashToolLogRecovery(fullResult, bashToolLogRecovery)) {\n return bashToolLogRecovery\n }\n\n return fullResult\n }\n\n if (bashToolLogRecovery) return bashToolLogRecovery\n\n return null\n}\n\nfunction recoverBashCommandFromToolLog(\n content: string,\n options?: Pick<ParseResponseWithRecoveryOptions, \"allowedRunTargets\">,\n): ParsedAgentResponse | null {\n const toolLogCommand = extractBashCommandFromToolLog(content)\n if (!toolLogCommand) {\n return null\n }\n\n return parseAgentResponse(\n `Recover the last bash command from the tool log.\\n---bash---\\n${toolLogCommand}`,\n {\n throwOnValidationError: false,\n allowTruncatedRuns: true,\n allowedRunTargets: options?.allowedRunTargets,\n },\n )\n}\n\nfunction extractBashCommandFromToolLog(content: string): string | null {\n const match = content.match(/\\[TOOL_LOG:Bash:[^\\]]+\\]\\s*\\r?\\nOPEN\\s*\\r?\\n([\\s\\S]+?)(?=\\r?\\n\\[(?:stderr|meta|exit)\\])/i)\n if (!match?.[1]) {\n return null\n }\n\n const normalizedBlock = decodeEscapedShellText(match[1]).trim()\n const lines = normalizedBlock.split(/\\r?\\n/)\n if (lines.length === 0) {\n return null\n }\n\n lines[0] = lines[0]!.replace(/^\\$\\s+/, \"\")\n\n const command = lines.join(\"\\n\").trim()\n return command.length > 0 ? command : null\n}\n\nfunction shouldPreferBashToolLogRecovery(\n current: ParsedAgentResponse,\n recovered: ParsedAgentResponse | null,\n): recovered is ParsedAgentResponse {\n if (!recovered) {\n return false\n }\n\n const currentToolCall = current.selectedToolCall\n if (!currentToolCall || currentToolCall.kind !== \"bash\") {\n return true\n }\n\n const currentCommand = currentToolCall.parameters.command\n const recoveredCommand = recovered.selectedToolCall?.parameters.command\n\n if (typeof currentCommand !== \"string\" || typeof recoveredCommand !== \"string\") {\n return false\n }\n\n return currentCommand !== recoveredCommand && (\n currentToolCall.truncated === true\n || /\\n\\[(?:TOOL_LOG|stderr|meta|exit):?/i.test(currentCommand)\n || /\\n\\[(?:stderr|meta|exit)\\]/i.test(currentCommand)\n )\n}\n\n/**\n * Build a user-feedback message to send to the LLM when its response failed\n * to parse. Gives more actionable guidance than a generic \"parse failed\" message.\n *\n * @param content The raw LLM content that failed to parse\n * @param zodError Optional Zod validation error for field-specific feedback\n * @returns A feedback string to send as a user message\n */\nexport function buildParseFeedback(_content: string, zodError?: unknown): string {\n // Check if there's Zod field-level detail\n if (zodError) {\n return buildValidationErrorMessage(zodError)\n }\n\n return buildNoStructuredResponseFoundError()\n}\n\n// ---------------------------------------------------------------------------\n// Unified three-tier parsing cascade\n// ---------------------------------------------------------------------------\n\nexport interface ParseResponseWithRecoveryOptions extends ParseAgentResponseOptions {\n /**\n * The LLM's `finishReason` string. When `\"length\"`, Tier 2 truncation\n * recovery is attempted.\n */\n finishReason?: string\n}\n\nfunction looksLikeStandaloneControlSegment(\n content: string,\n allowedRunTargets: readonly RunInvocationTarget[],\n): boolean {\n return containsStandaloneStructuredInvocationStart(content, allowedRunTargets)\n}\n\nfunction getSelectedToolCallKey(result: ParsedAgentResponse): string | undefined {\n const selectedToolCall = result.selectedToolCall\n if (!selectedToolCall) {\n return undefined\n }\n\n if (\n selectedToolCall.kind === \"bash\"\n || selectedToolCall.kind === \"background_bash\"\n ) {\n const command = selectedToolCall.parameters.command\n return typeof command === \"string\" ? command : undefined\n }\n\n return selectedToolCall.rawInvocation ?? selectedToolCall.name\n}\n\n/**\n * Three-tier parsing cascade for LLM step responses.\n *\n * Shared by Magic (`use-agent.ts`) and Hammer (`BaseLLMProvider`).\n *\n * Tier 1: `parseAgentResponse` — control-segment extraction + Zod validation\n * Tier 2: `recoverTruncatedResponse` — if `finishReason === \"length\"`\n *\n * Tier 1 respects `throwOnValidationError`: if structured lines are found but\n * validation fails in strict mode, the error propagates immediately.\n *\n * @returns Parsed response, or `null` if nothing could be extracted.\n */\nexport function parseResponseWithRecovery(\n content: string,\n options?: ParseResponseWithRecoveryOptions,\n): ParsedAgentResponse | null {\n const {\n finishReason,\n throwOnValidationError,\n formatValidationError,\n allowedRunTargets,\n } = options ?? {}\n const effectiveAllowedRunTargets = allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS\n\n const result = parseAgentResponse(content, {\n throwOnValidationError,\n formatValidationError,\n allowedRunTargets: effectiveAllowedRunTargets,\n })\n if (result) {\n const bashToolLogRecovery = recoverBashCommandFromToolLog(content, {\n allowedRunTargets: effectiveAllowedRunTargets,\n })\n\n if (shouldPreferBashToolLogRecovery(result, bashToolLogRecovery)) {\n return bashToolLogRecovery\n }\n\n if (finishReason === \"length\") {\n const truncated = recoverTruncatedResponse(content, {\n allowedRunTargets: effectiveAllowedRunTargets,\n })\n const currentToolCallKey = getSelectedToolCallKey(result)\n\n if (\n truncated &&\n (\n getSelectedToolCallKey(truncated) !== currentToolCallKey\n )\n ) {\n return truncated\n }\n }\n\n return result\n }\n\n if (\n finishReason === \"length\"\n || looksLikeStandaloneControlSegment(content, effectiveAllowedRunTargets)\n ) {\n const truncated = recoverTruncatedResponse(content, {\n allowedRunTargets: effectiveAllowedRunTargets,\n })\n if (truncated) return truncated\n }\n\n return null\n}\n","/**\n * AgentLoop — Shared agentic loop engine.\n *\n * Encapsulates the duplicated orchestration logic from both Magic\n * (use-agent.ts) and Hammer (UnifiedAgent.ts) into a single class:\n *\n * - XState actor lifecycle (state machine transitions)\n * - Step user-message injection\n * - Post-LLM outcome handling (success / failure / continue)\n * - Tool execution with truncation tracking\n * - Validation / API error recovery via enforcer\n *\n * Consumers inject platform-specific behaviour through the\n * {@link AgentLoopDeps} interface:\n * - Magic: streaming LLM, React state updates\n * - Hammer: non-streaming LLM, disk persistence, CLI logging\n *\n * The caller is still responsible for:\n * 1. LLM calls + response parsing (fundamentally different per platform)\n * 2. UI updates (React setState / CLI logging)\n */\n\nimport { createActor, type Actor } from \"xstate\"\nimport {\n agentMachine,\n type AgentMachineState,\n type TruncatedToolInfo,\n} from \"./agent-machine\"\nimport {\n buildStepUserMessage,\n shouldSkipStepUserMessage,\n extractTruncatedToolInfo,\n} from \"./prompt-helpers\"\nimport {\n truncateToolResult,\n executeToolSafe,\n formatToolResultMessage,\n} from \"./tool-helpers\"\nimport {\n buildNoStructuredResponseFoundError,\n} from \"./tool-call-recovery\"\nimport type {\n BaseValidationEnforcer,\n EnforcerResult,\n} from \"./validation-enforcer\"\nimport type {\n LoopOutcome,\n ToolCall,\n ToolResult,\n} from \"./types\"\n\n// ---------------------------------------------------------------------------\n// Dependency interfaces\n// ---------------------------------------------------------------------------\n\n/** Abstraction over conversation storage (memory layer / conversation manager). */\nexport interface ConversationAdapter {\n appendMessage(role: \"user\" | \"assistant\" | \"tool\", content: string): Promise<void>\n /** Append a tool result with tool name for compaction tracking. Falls back to appendMessage(\"tool\",...) if not provided. */\n appendToolMessage?(content: string, toolCallId: string): Promise<void>\n getLastMessageRole(): string | undefined\n getLastMessageContent(): string | undefined\n triggerCompactionIfNeeded(): Promise<void>\n}\n\n/** Callbacks for platform-specific UI / logging. */\nexport interface AgentLoopCallbacks {\n onToolStart?(name: string, parameters: Record<string, unknown>, index: number, total: number): void\n onToolComplete?(name: string, result: ToolResult, truncatedResultStr: string): void\n onPhaseChange?(state: AgentMachineState): void\n /** Called when the agent reports success. */\n onComplete?(): void\n /** Called when the agent reports failure. */\n onFail?(): void\n}\n\n/** Everything the AgentLoop needs from its host environment. */\nexport interface AgentLoopDeps {\n /** Execute a single tool call. */\n executeTool: (call: ToolCall) => Promise<ToolResult>\n /** Validation / error enforcer. */\n enforcer: BaseValidationEnforcer\n /** Conversation storage adapter. */\n conversation: ConversationAdapter\n /** Optional: transform raw ToolResult before truncation (e.g. spinner cleanup). */\n formatToolResult?: (result: ToolResult, toolName: string) => ToolResult\n /**\n * Optional: pre-tool hook. Return non-null to **block** execution and\n * break out of the tool loop (e.g. Hammer's ListSkills-first enforcement).\n * The returned `lastToolResult` is stored and the machine transitions\n * to ENFORCEMENT_BREAK.\n */\n onBeforeToolExecution?: (\n name: string,\n params: Record<string, unknown>,\n ) => Promise<{ lastToolResult: string } | null>\n /** Platform-specific callbacks for UI/logging. */\n callbacks?: AgentLoopCallbacks\n}\n\n\n\n// ---------------------------------------------------------------------------\n// Input / output types for processStep\n// ---------------------------------------------------------------------------\n\n/** Parsed LLM step response — the caller parses, AgentLoop processes. */\nexport interface ParsedStepInput {\n outcome: LoopOutcome\n reasoning?: string\n selectedToolCall?: ToolCall\n wasTruncated: boolean\n /**\n * Raw LLM content string. When provided, `processStep` records it\n * as an assistant message in the conversation adapter before\n * processing, so callers don't need to do it themselves.\n */\n rawContent?: string\n}\n\n/** Result of a single tool execution (for the caller to build UI). */\nexport interface ToolExecutionResult {\n name: string\n result: ToolResult\n truncatedResultStr: string\n}\n\n/** What processStep returns — outcome is the loop-control signal. */\nexport interface StepResult {\n outcome: LoopOutcome\n toolResults: ToolExecutionResult[]\n}\n\n// ---------------------------------------------------------------------------\n// AgentLoop class\n// ---------------------------------------------------------------------------\n\nexport class AgentLoop {\n private deps: AgentLoopDeps\n private actor: Actor<typeof agentMachine>\n private _truncatedToolInfo?: TruncatedToolInfo\n private _lastToolResult?: string\n\n constructor(deps: AgentLoopDeps) {\n this.deps = deps\n\n // Create and start the XState actor\n this.actor = createActor(agentMachine)\n this.actor.start()\n }\n\n // ── Internal helpers ─────────────────────────────────────────────\n\n /**\n * Send an event to the actor, silently swallowing errors if the actor\n * was stopped concurrently (e.g. abort/destroy during an async gap).\n */\n private safeSend(event: Parameters<typeof this.actor.send>[0]): void {\n try {\n this.actor.send(event)\n } catch {\n // Actor may already be stopped — ignore\n }\n }\n\n // ── Read-only state ──────────────────────────────────────────────\n\n /** Current XState machine state. */\n get machineState(): AgentMachineState {\n return this.actor.getSnapshot().value as AgentMachineState\n }\n\n /** Current action count from the machine context. */\n get actionCount(): number {\n return this.actor.getSnapshot().context.actionCount\n }\n\n /** Last truncation info (for the caller to store / display). */\n get truncatedToolInfo(): TruncatedToolInfo | undefined {\n return this._truncatedToolInfo\n }\n\n /** Last tool result string (independent of machine state). */\n get lastToolResult(): string | undefined {\n return this._lastToolResult\n }\n\n // ── Lifecycle ───────────────────────────────────────────────────\n\n /** Transition: idle → prompting. */\n start(task: string): void {\n this.safeSend({ type: \"START\", task })\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n }\n\n // ── Lifecycle: step preparation ──────────────────────────────────\n\n /**\n * Inject the step user-message and transition to analyzing.\n *\n * @param actionCountOverride If provided, use this count instead of the\n * machine's internal count (useful when the caller tracks total count\n * across sessions).\n * @returns `true` if a user message was injected, `false` if skipped.\n */\n async prepareStep(actionCountOverride?: number): Promise<boolean> {\n const lastRole = this.deps.conversation.getLastMessageRole()\n const lastContent = this.deps.conversation.getLastMessageContent()\n\n let injected = false\n if (!shouldSkipStepUserMessage(lastRole ?? null, lastContent ?? null)) {\n const msg = buildStepUserMessage({\n actionCount: actionCountOverride ?? (this.actionCount + 1),\n truncatedToolInfo: this._truncatedToolInfo,\n })\n // Clear truncation info after using it\n if (this._truncatedToolInfo) this._truncatedToolInfo = undefined\n await this.deps.conversation.appendMessage(\"user\", msg)\n injected = true\n }\n\n // Machine: prompting → analyzing (increments actionCount)\n this.safeSend({ type: \"PROMPT_COMPLETE\" })\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n\n return injected\n }\n\n // ── Lifecycle: process a parsed step ─────────────────────────────\n\n /**\n * Process a fully-parsed LLM step response end-to-end.\n *\n * The caller is responsible for:\n * 1. The LLM call (streaming or not)\n * 2. Parsing the response into {@link ParsedStepInput}\n * 3. UI updates based on the returned {@link StepResult}\n *\n * This method handles:\n * 1. Recording the assistant message (when `rawContent` is provided)\n * 2. Terminal outcomes (success / failure)\n * 3. State machine transitions\n * 4. Tool execution (via deps.executeTool)\n * 5. Result formatting, truncation, and conversation storage\n * 6. Truncation tracking across iterations\n */\n async processStep(\n input: ParsedStepInput,\n signal?: AbortSignal,\n ): Promise<StepResult> {\n const {\n outcome,\n selectedToolCall,\n wasTruncated,\n rawContent,\n } = input\n let effectiveOutcome = outcome\n let effectiveSelectedToolCall = selectedToolCall\n // Circuit breaker removed: always allow the model to retry after failure\n\n // Record assistant message in conversation (when caller supplies raw content)\n if (rawContent && outcome !== \"failure\") {\n await this.deps.conversation.appendMessage(\"assistant\", rawContent)\n }\n\n if (selectedToolCall) {\n effectiveOutcome = \"continue\"\n effectiveSelectedToolCall = selectedToolCall\n }\n\n // ── Terminal outcomes ─────────────────────────────────────────\n\n if (effectiveOutcome === \"success\") {\n this.safeSend({ type: \"OUTCOME_SUCCESS\" })\n this.deps.callbacks?.onComplete?.()\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n return {\n outcome: effectiveOutcome,\n toolResults: [],\n }\n }\n\n if (effectiveOutcome === \"failure\") {\n this.safeSend({\n type: \"OUTCOME_FAILURE\",\n error: input.reasoning || \"Agent reported failure\",\n })\n this.deps.callbacks?.onFail?.()\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n return {\n outcome: effectiveOutcome,\n toolResults: [],\n }\n }\n\n // ── Continue: execute tools ──────────────────────────────────\n\n this.safeSend({ type: \"LLM_SUCCESS\" })\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n\n const effectiveToolCalls = effectiveSelectedToolCall\n ? [effectiveSelectedToolCall]\n : []\n\n // Truncation tracking\n if (wasTruncated) {\n this._truncatedToolInfo = extractTruncatedToolInfo(effectiveToolCalls)\n }\n\n let enforcementBroke = false\n const toolResults: ToolExecutionResult[] = []\n\n if (effectiveToolCalls.length > 0) {\n for (let i = 0; i < effectiveToolCalls.length; i++) {\n if (signal?.aborted) break\n\n const tc = effectiveToolCalls[i]\n\n this.deps.callbacks?.onToolStart?.(tc.name, tc.parameters, i, effectiveToolCalls.length)\n\n // Pre-execution hook (e.g. Hammer's ListSkills-first enforcement)\n if (this.deps.onBeforeToolExecution) {\n const blocked = await this.deps.onBeforeToolExecution(\n tc.name,\n tc.parameters,\n )\n if (blocked) {\n this._lastToolResult = blocked.lastToolResult\n this.safeSend({\n type: \"ENFORCEMENT_BREAK\",\n lastToolResult: blocked.lastToolResult,\n })\n enforcementBroke = true\n break\n }\n }\n\n // Execute\n const startedAt = Date.now()\n let result = await executeToolSafe(() =>\n this.deps.executeTool(tc),\n )\n\n if (typeof result.duration_ms !== \"number\") {\n result = {\n ...result,\n duration_ms: Date.now() - startedAt,\n }\n }\n\n // Optional formatting (e.g. spinner cleanup)\n if (this.deps.formatToolResult) {\n result = this.deps.formatToolResult(result, tc.name)\n }\n\n // Truncate\n let resultStr = formatToolResultMessage(tc, result)\n resultStr = truncateToolResult(resultStr, {\n strategy: \"head-tail\",\n })\n\n // Update truncation info on first tool\n if (wasTruncated && this._truncatedToolInfo && i === 0) {\n this._truncatedToolInfo.executionSucceeded =\n result.success === true\n }\n\n // Store in conversation\n if (this.deps.conversation.appendToolMessage) {\n await this.deps.conversation.appendToolMessage(\n resultStr,\n tc.name,\n )\n } else {\n await this.deps.conversation.appendMessage(\"tool\", resultStr)\n }\n\n toolResults.push({\n name: tc.name,\n result,\n truncatedResultStr: resultStr,\n })\n\n // Track last tool result (independent of machine state)\n this._lastToolResult = resultStr\n\n this.deps.callbacks?.onToolComplete?.(\n tc.name,\n result,\n resultStr,\n )\n\n // No circuit breaker: always allow the model to retry after failure\n }\n\n if (!enforcementBroke) {\n // Trigger compaction (non-fatal)\n try {\n await this.deps.conversation.triggerCompactionIfNeeded()\n } catch {\n // non-fatal\n }\n\n // Machine: executing → updating\n this.safeSend({\n type: \"TOOLS_EXECUTED\",\n lastToolResult: toolResults.at(-1)?.truncatedResultStr,\n })\n }\n } else {\n const validationError = new Error(\n buildNoStructuredResponseFoundError(),\n )\n\n await this.handleLLMValidationError(validationError)\n this.safeSend({ type: \"NO_TOOLS\" })\n }\n\n // ── Finalize step ────────────────────────────────────────────\n\n if (this.machineState === \"updating\") {\n this.safeSend({ type: \"UPDATE_COMPLETE\" })\n }\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n\n return { outcome: effectiveOutcome, toolResults }\n }\n\n // ── Error handling ───────────────────────────────────────────────\n\n /** Handle an LLM validation error (JSON parse, Zod, etc.). */\n async handleLLMValidationError(\n error: Error,\n ): Promise<EnforcerResult> {\n const result = await this.deps.enforcer.handleValidationError(error)\n this.safeSend({\n type: \"LLM_VALIDATION_ERROR\",\n error: error.message,\n })\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n return result\n }\n\n /** Handle an LLM API error (network, rate limit, 5xx). */\n async handleLLMApiError(error: Error): Promise<EnforcerResult> {\n const result = await this.deps.enforcer.handleApiError(error)\n this.safeSend({ type: \"LLM_API_ERROR\", error: error.message })\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n return result\n }\n\n /**\n * Classify a step LLM error as validation or API error and\n * delegate to the appropriate handler.\n */\n async classifyStepError(error: Error): Promise<void> {\n if (error.message?.startsWith(\"VALIDATION_ERROR:\")) {\n await this.handleLLMValidationError(error)\n } else {\n await this.handleLLMApiError(error)\n }\n }\n\n /**\n * Handle an unrecoverable error and transition the machine to a\n * terminal state.\n */\n async handleFatalError(errorMsg: string): Promise<void> {\n const result = await this.deps.enforcer.handleFatalError(errorMsg)\n this._lastToolResult = result.lastToolResult\n this.safeSend({ type: \"OUTCOME_FAILURE\", error: result.errorMessage })\n this.deps.callbacks?.onFail?.()\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n }\n\n // ── Machine context access ───────────────────────────────────────\n\n /** Send an arbitrary event to the machine (for platform-specific transitions). */\n sendEvent(event: Parameters<typeof this.actor.send>[0]): void {\n this.safeSend(event)\n }\n\n /** Get the raw machine context snapshot. */\n getContext() {\n return this.actor.getSnapshot().context\n }\n\n // ── Cleanup ──────────────────────────────────────────────────────\n\n /** Restore truncated tool info from a previous session. */\n restoreTruncatedToolInfo(info: TruncatedToolInfo | undefined): void {\n this._truncatedToolInfo = info\n }\n\n /** Stop the XState actor. Call during cleanup / unmount. */\n destroy(): void {\n this.actor.stop()\n }\n\n /**\n * Reset the AgentLoop by stopping the current actor and creating\n * a new one. Returns to idle state.\n */\n reset(): void {\n this.actor.stop()\n this.actor = createActor(agentMachine)\n this.actor.start()\n this._truncatedToolInfo = undefined\n this._lastToolResult = undefined\n }\n}\n","/**\n * Shared non-voice tool-loop runtime for Hammer, Magic, Monoslides, and Monospace.\n *\n * This base owns the common runtime seam across non-voice agents: memory\n * bootstrap, static context injection, AgentLoop setup, per-step LLM calls,\n * and parsed step execution.\n */\n\nimport {\n AgentLoop,\n type AgentLoopCallbacks,\n type AgentLoopDeps,\n type ConversationAdapter,\n type ParsedStepInput,\n type StepResult,\n} from \"./agent-loop\"\nimport type { AgentMemoryLayer } from \"./agent-memory-layer\"\nimport { LLMClient } from \"./llm-client\"\nimport type {\n ChatMessage,\n LLMClientResponse,\n ToolDefinition,\n} from \"./types\"\nimport type { BaseValidationEnforcer } from \"./validation-enforcer\"\n\nexport interface ToolLoopRuntimeStepContext<TStepInput = undefined> {\n task: string\n actionCount: number\n tools: ToolDefinition[]\n stepInput?: TStepInput\n}\n\nexport interface ToolLoopRuntimeRunStepOptions<TStepInput = undefined> {\n task: string\n actionCount: number\n signal?: AbortSignal\n stepInput?: TStepInput\n}\n\nexport interface ToolLoopRuntimeLLMRequest {\n messages: ChatMessage[]\n temperature?: number\n maxTokens?: number\n frequencyPenalty?: number\n presencePenalty?: number\n onToken?: (token: string) => void | boolean\n normalizeResponseContent?: (content: string) => string\n}\n\nexport interface ToolLoopRuntimeLLMResponse {\n content: string\n finishReason: string\n usage?: LLMClientResponse[\"usage\"]\n}\n\nexport interface ToolLoopRuntimeHooks<TStepInput = undefined> {\n onBeforeStep?(\n context: ToolLoopRuntimeStepContext<TStepInput>,\n ): Promise<void> | void\n onAfterStep?(\n context: ToolLoopRuntimeStepContext<TStepInput>,\n result: StepResult,\n ): Promise<void> | void\n onToken?(token: string): void | boolean\n}\n\nexport interface ToolLoopAgentRuntimeDeps<TStepInput = undefined> {\n llmClient?: LLMClient\n loopCallbacks?: AgentLoopCallbacks\n hooks?: ToolLoopRuntimeHooks<TStepInput>\n requireTodoListOnFirstResponse?: boolean\n}\n\nexport interface ToolLoopRuntimeSetup<\n TMemory extends AgentMemoryLayer,\n TEnforcer extends BaseValidationEnforcer,\n> {\n memory: TMemory\n enforcer: TEnforcer\n conversation: ConversationAdapter\n loopDeps: Omit<AgentLoopDeps, \"enforcer\" | \"conversation\" | \"callbacks\">\n}\n\nexport interface ToolLoopRuntimeInfrastructure<\n TMemory extends AgentMemoryLayer,\n TEnforcer extends BaseValidationEnforcer,\n> extends ToolLoopRuntimeSetup<TMemory, TEnforcer> {\n loop: AgentLoop\n}\n\nexport interface ToolLoopRuntimeRunStepResult<TStepInput = undefined> {\n context: ToolLoopRuntimeStepContext<TStepInput>\n response: ToolLoopRuntimeLLMResponse\n parsed: ParsedStepInput\n result: StepResult\n}\n\nexport interface ToolLoopRuntimeExecuteStepResult {\n response: ToolLoopRuntimeLLMResponse\n parsed: ParsedStepInput\n}\n\nexport abstract class ToolLoopAgentRuntime<\n TMemory extends AgentMemoryLayer = AgentMemoryLayer,\n TEnforcer extends BaseValidationEnforcer = BaseValidationEnforcer,\n TStepInput = undefined,\n> {\n protected readonly llmClient: LLMClient | null\n protected readonly loopCallbacks: AgentLoopCallbacks\n protected readonly hooks: ToolLoopRuntimeHooks<TStepInput>\n private readonly requireTodoListOnFirstResponse: boolean\n\n private infrastructure: ToolLoopRuntimeInfrastructure<TMemory, TEnforcer> | null = null\n private infrastructurePromise: Promise<\n ToolLoopRuntimeInfrastructure<TMemory, TEnforcer>\n > | null = null\n\n protected constructor(deps: ToolLoopAgentRuntimeDeps<TStepInput>) {\n this.llmClient = deps.llmClient ?? null\n this.loopCallbacks = deps.loopCallbacks ?? {}\n this.hooks = deps.hooks ?? {}\n this.requireTodoListOnFirstResponse = deps.requireTodoListOnFirstResponse ?? false\n }\n\n protected abstract createRuntimeSetup(): Promise<\n ToolLoopRuntimeSetup<TMemory, TEnforcer>\n >\n\n protected abstract getToolDefinitions(): ToolDefinition[]\n\n protected buildSystemPrompt(\n _context: ToolLoopRuntimeStepContext<TStepInput>,\n ): string {\n throw new Error(\n `buildSystemPrompt is not implemented for ${this.constructor.name}`,\n )\n }\n\n protected buildLLMRequest(\n _context: ToolLoopRuntimeStepContext<TStepInput>,\n _messages: ChatMessage[],\n ): ToolLoopRuntimeLLMRequest {\n throw new Error(\n `buildLLMRequest is not implemented for ${this.constructor.name}`,\n )\n }\n\n protected parseStepResponse(\n _response: ToolLoopRuntimeLLMResponse,\n _tools: ToolDefinition[],\n ): ParsedStepInput {\n throw new Error(\n `parseStepResponse is not implemented for ${this.constructor.name}`,\n )\n }\n\n protected get runtimeLoop(): AgentLoop | null {\n return this.infrastructure?.loop ?? null\n }\n\n protected get runtimeMemory(): TMemory | null {\n return this.infrastructure?.memory ?? null\n }\n\n protected get runtimeEnforcer(): TEnforcer | null {\n return this.infrastructure?.enforcer ?? null\n }\n\n protected createStepContext(\n options: ToolLoopRuntimeRunStepOptions<TStepInput>,\n tools: ToolDefinition[],\n ): ToolLoopRuntimeStepContext<TStepInput> {\n return {\n task: options.task,\n actionCount: options.actionCount,\n tools,\n stepInput: options.stepInput,\n }\n }\n\n protected async ensureStaticContext(_memory: TMemory): Promise<void> {}\n\n protected async prepareMemoryForRun(\n memory: TMemory,\n task: string,\n ): Promise<void> {\n await this.ensureStaticContext(memory)\n memory.appendMessage(\"user\", task)\n }\n\n protected async prepareMemoryForStep(memory: TMemory): Promise<void> {\n await this.ensureStaticContext(memory)\n }\n\n protected async buildStepMessages(\n memory: TMemory,\n context: ToolLoopRuntimeStepContext<TStepInput>,\n ): Promise<ChatMessage[]> {\n await this.prepareMemoryForStep(memory)\n const systemPrompt = this.buildSystemPrompt(context)\n return memory.buildMessages(systemPrompt)\n }\n\n protected async invokeLLM(\n request: ToolLoopRuntimeLLMRequest,\n ): Promise<ToolLoopRuntimeLLMResponse> {\n if (!this.llmClient) {\n throw new Error(\n `No llmClient is configured for ${this.constructor.name}. Override executeLLMStep() or provide llmClient in the constructor.`,\n )\n }\n\n const response = await this.llmClient.chat(\n {\n messages: request.messages,\n temperature: request.temperature,\n maxTokens: request.maxTokens,\n stream: Boolean(request.onToken ?? this.hooks.onToken),\n frequencyPenalty: request.frequencyPenalty,\n presencePenalty: request.presencePenalty,\n },\n request.onToken || this.hooks.onToken\n ? {\n onToken: request.onToken ?? this.hooks.onToken,\n }\n : undefined,\n )\n\n return {\n content: request.normalizeResponseContent\n ? request.normalizeResponseContent(response.content)\n : response.content,\n finishReason: response.finishReason,\n usage: response.usage,\n }\n }\n\n protected async executeLLMStep(\n context: ToolLoopRuntimeStepContext<TStepInput>,\n messages: ChatMessage[],\n ): Promise<ToolLoopRuntimeExecuteStepResult> {\n const response = await this.invokeLLM(\n this.buildLLMRequest(context, messages),\n )\n\n return {\n response,\n parsed: this.parseStepResponse(response, context.tools),\n }\n }\n\n protected async validateParsedStep(\n context: ToolLoopRuntimeStepContext<TStepInput>,\n parsed: ParsedStepInput,\n ): Promise<void> {\n if (\n this.requireTodoListOnFirstResponse\n && context.actionCount === 1\n && parsed.selectedToolCall?.name !== \"manage_todo_list\"\n ) {\n throw new Error(\n \"VALIDATION_ERROR: You MUST call the manage_todo_list tool as your very first action to plan your work before executing any other tool. Break the task into specific, actionable steps.\",\n )\n }\n }\n\n /**\n * Called after the LLM response is parsed but before the tool\n * executes. Web runtimes override this to flush streaming content\n * to the store and transition the UI to a \"tool running\" state.\n */\n protected async onBeforeToolDispatch(\n _context: ToolLoopRuntimeStepContext<TStepInput>,\n _parsed: ParsedStepInput,\n ): Promise<void> {}\n\n protected async ensureInfrastructure(): Promise<\n ToolLoopRuntimeInfrastructure<TMemory, TEnforcer>\n > {\n if (this.infrastructurePromise) {\n return this.infrastructurePromise\n }\n\n const promise = (async () => {\n const setup = await this.createRuntimeSetup()\n const infrastructure = {\n ...setup,\n loop: new AgentLoop({\n ...setup.loopDeps,\n enforcer: setup.enforcer,\n conversation: setup.conversation,\n callbacks: this.loopCallbacks,\n }),\n }\n\n this.infrastructure = infrastructure\n return infrastructure\n })()\n\n this.infrastructurePromise = promise.catch((error) => {\n this.infrastructure = null\n this.infrastructurePromise = null\n throw error\n })\n\n return this.infrastructurePromise\n }\n\n async beginRun(\n task: string,\n ): Promise<ToolLoopRuntimeInfrastructure<TMemory, TEnforcer>> {\n const infrastructure = await this.ensureInfrastructure()\n await this.prepareMemoryForRun(infrastructure.memory, task)\n infrastructure.loop.start(task)\n return infrastructure\n }\n\n async runStep(\n options: ToolLoopRuntimeRunStepOptions<TStepInput>,\n ): Promise<ToolLoopRuntimeRunStepResult<TStepInput>> {\n const infrastructure = await this.ensureInfrastructure()\n const tools = this.getToolDefinitions()\n const context = this.createStepContext(options, tools)\n\n await infrastructure.loop.prepareStep(options.actionCount)\n await this.hooks.onBeforeStep?.(context)\n\n const messages = await this.buildStepMessages(\n infrastructure.memory,\n context,\n )\n const { response, parsed } = await this.executeLLMStep(\n context,\n messages,\n )\n await this.validateParsedStep(context, parsed)\n await this.onBeforeToolDispatch(context, parsed)\n const result = await infrastructure.loop.processStep(\n parsed,\n options.signal,\n )\n\n await this.hooks.onAfterStep?.(context, result)\n\n return {\n context,\n response,\n parsed,\n result,\n }\n }\n\n protected async onDestroy(\n _infrastructure: ToolLoopRuntimeInfrastructure<TMemory, TEnforcer>,\n ): Promise<void> {}\n\n async destroy(): Promise<void> {\n const infrastructurePromise = this.infrastructurePromise\n this.infrastructurePromise = null\n this.infrastructure = null\n\n if (!infrastructurePromise) {\n return\n }\n\n const infrastructure = await infrastructurePromise\n await this.onDestroy(infrastructure)\n infrastructure.loop.destroy()\n infrastructure.memory.dispose?.()\n }\n}","/**\n * Base Memory Layer — shared infrastructure for memory compaction.\n *\n * Both workspace agents and the Voice Agent use episodic compaction with\n * structured state extraction. This module provides the shared skeleton:\n *\n * - Generic base class (`BaseMemoryLayer<TState, TMessage>`)\n * - Shared types: `MemoryMessage`, `CompactionCursor`, `MemoryStorage`, etc.\n * - Token estimation strategy (pluggable: tiktoken vs char-based)\n * - Shared algorithms: sliding-window, buildMessages, triggerCompaction\n *\n * Core Invariants (enforced by this base):\n * 1. Raw history is NEVER modified in-place; entries are pruned after compaction\n * 2. Compaction is a state transition, not a view transform\n * 3. Compressed state is NEVER recursively summarized\n * 4. State compaction removes obsolete structure but preserves meaning\n * 5. buildMessages is a PURE function (cache writes are benign memoization)\n */\n\nimport type { ChatMessage } from \"./types\"\n\n// ============================================================================\n// Compaction LLM Interface\n// ============================================================================\n\n/**\n * Minimal interface for an LLM client used during compaction.\n * Kept abstract so memory-layer has no hard dependency on LLMClient.\n * The shared `LLMClient` class satisfies this interface.\n */\nexport interface CompactionLLMClient {\n chat(\n options: {\n messages: ChatMessage[]\n temperature?: number\n maxTokens?: number\n stream?: boolean\n },\n ): Promise<{ content: string }>\n}\n\n// ============================================================================\n// Shared Types\n// ============================================================================\n\n/** Base message stored in raw history. */\nexport interface MemoryMessage {\n id: string\n role: \"system\" | \"user\" | \"assistant\" | \"tool\"\n content: string\n timestamp: number\n /** Monotonic message counter. */\n turn: number\n /** Cached token count for this message (computed once at creation). */\n tokenCount: number\n}\n\nexport interface MemoryProvenance {\n source: \"rule\" | \"llm\" | \"tool\" | \"assistant\" | \"user\"\n detail?: string\n}\n\n/** Tracks how far compaction has progressed. */\nexport interface CompactionCursor {\n lastCompactedTurn: number\n}\n\n// ============================================================================\n// Token Estimation\n// ============================================================================\n\n/**\n * Strategy for estimating token counts.\n *\n * - Workspace agents share the same estimator strategy by default\n * - CharTokenEstimator is the cross-platform baseline implementation\n */\nexport interface TokenEstimator {\n /** Estimate token count for a string. */\n estimateTokens(text: string): number\n /** Dispose any resources (e.g. tiktoken WASM). No-op by default. */\n dispose?(): void\n}\n\n/**\n * Character-based token estimator.\n * GPT/Claude average ~4 chars/token for English; 3.5 is conservative.\n */\nexport class CharTokenEstimator implements TokenEstimator {\n constructor(private charsPerToken = 3.5) {}\n\n estimateTokens(text: string): number {\n return Math.ceil(text.length / this.charsPerToken)\n }\n}\n\n// ============================================================================\n// Persistence\n// ============================================================================\n\n/**\n * Platform-agnostic persistence adapter (generic over data shape).\n *\n * Implementations: LocalStorageAdapter, HttpAdapter, ExpoFileAdapter,\n * and the Bun-server FileMemoryAdapter.\n */\nexport interface MemoryStorage<T = unknown> {\n load(): Promise<T | null>\n save(data: T): Promise<void>\n clear(): Promise<void>\n}\n\n/** Base shape of persisted memory data. Apps may extend with extra fields. */\nexport interface PersistedMemoryData<\n TState = unknown,\n TMessage extends MemoryMessage = MemoryMessage,\n> {\n rawHistory: TMessage[]\n compressedState: TState\n compactionCursor: CompactionCursor\n currentTurn: number\n compactionCount: number\n}\n\n// ============================================================================\n// Configuration\n// ============================================================================\n\nexport interface MemoryLayerConfig {\n /** Trigger compaction when estimated context exceeds this many tokens. */\n compactionTokenThreshold: number\n /** Keep at least this many tokens of recent messages uncompressed. */\n protectedContextTokens: number\n /** Maximum tokens for the rendered compressed state. */\n stateBudgetTokens: number\n /** Hard cap on raw history entries (safety net). */\n maxRawHistory: number\n /** Minimum turns between compaction attempts. */\n compactionDebounceTurns: number\n /** Baseline token overhead for system prompt (conservative estimate). */\n systemPromptOverhead: number\n /** Strategy for estimating token counts. */\n tokenEstimator: TokenEstimator\n /** Optional LLM client for enhanced compaction (e.g. MiniMax). */\n compactionClient?: CompactionLLMClient\n /** Temperature for compaction LLM calls (default 0.1). */\n compactionTemperature?: number\n /** Max tokens for compaction LLM output (default 4096). */\n compactionMaxTokens?: number\n}\n\n// ============================================================================\n// Base Memory Layer\n// ============================================================================\n\n/**\n * Abstract base class for memory layers with episodic compaction.\n *\n * Subclasses provide:\n * - Message creation (TMessage construction with app-specific fields)\n * - Compaction logic (extraction plus pruning obsolete state entries)\n * - State rendering (converting TState to human-readable text)\n *\n * The base class provides:\n * - Append-only raw history with hard cap enforcement\n * - Token-budgeted sliding window for recent messages\n * - buildMessages assembly (system → state → recent)\n * - Compaction triggering (debounce, threshold check, prune)\n * - Rendered state caching with invalidation\n * - Persistence lifecycle (save/load/clear)\n * - Accessors for metrics\n */\nexport abstract class BaseMemoryLayer<\n TState,\n TMessage extends MemoryMessage,\n> {\n protected rawHistory: TMessage[] = []\n protected compressedState: TState\n protected compactionCursor: CompactionCursor = { lastCompactedTurn: 0 }\n protected currentTurn = 0\n protected compactionCount = 0\n\n /** Rendered state cache (invalidated on mutation). */\n protected renderedStateCache: string | null = null\n protected stateTokenCountCache: number | null = null\n\n /** Debounce: turns since last compaction attempt. */\n protected lastCompactionAttempt = 0\n\n /**\n * Static context: rules/instructions injected once, always included in\n * buildMessages, never compressed or pruned.\n */\n protected staticContext: string | null = null\n\n constructor(\n protected readonly config: MemoryLayerConfig,\n initialState: TState,\n ) {\n this.compressedState = initialState\n }\n\n // -----------------------------------------------------------------------\n // Abstract Methods (subclass-specific)\n // -----------------------------------------------------------------------\n\n /**\n * Create a TMessage from the given parts.\n * Subclass should compute and cache the tokenCount (or use tokenEstimator).\n */\n protected abstract createMessage(\n id: string,\n role: \"system\" | \"user\" | \"assistant\" | \"tool\",\n content: string,\n turn: number,\n timestamp: number,\n ): TMessage\n\n /**\n * Extract structured facts from raw messages into compressedState and\n * enforce any dedupe, aging, and hard-cap rules for the durable state.\n * This is deterministic pattern matching, NOT LLM summarization.\n * Should mutate `this.compressedState` in place.\n */\n protected abstract performCompaction(messages: TMessage[]): void\n\n /**\n * Render compressedState as human-readable structured text for LLM context.\n * Result is cached — only called when cache is invalidated.\n */\n protected abstract renderState(): string\n\n /**\n * Create a fresh initial state (used by clear()).\n */\n protected abstract createInitialState(): TState\n\n // -----------------------------------------------------------------------\n // Optional Hooks\n // -----------------------------------------------------------------------\n\n /** Label for the compressed state section in buildMessages. */\n protected getStateLabel(): string {\n return \"Memory\"\n }\n\n /** Placeholder user message when no user message precedes the first assistant. */\n protected getResumePlaceholder(): string {\n return \"Continue.\"\n }\n\n /** Called after a message is appended (e.g. for failure tracking). */\n protected onMessageAppended(_msg: TMessage): void {}\n\n /** Called after compaction + prune (e.g. for extra persistence). */\n protected onCompactionComplete(): void {}\n\n /**\n * LLM-enhanced compaction. Override in subclass to provide LLM-based\n * summarization using `this.config.compactionClient`.\n *\n * When this returns `true`, the pattern-matching `performCompaction()`\n * is skipped. When it returns `false` (or throws), pattern matching\n * runs as a deterministic fallback.\n */\n protected async performLLMCompaction(_messages: TMessage[]): Promise<boolean> {\n return false\n }\n\n // -----------------------------------------------------------------------\n // Message Management\n // -----------------------------------------------------------------------\n\n /** Append a message to raw history. Returns the message ID. */\n appendMessage(\n role: \"system\" | \"user\" | \"assistant\" | \"tool\",\n content: string,\n ): string {\n this.currentTurn++\n const id = `msg_${this.currentTurn}_${Date.now()}`\n const timestamp = Date.now()\n const msg = this.createMessage(id, role, content, this.currentTurn, timestamp)\n this.rawHistory.push(msg)\n\n // Hard cap enforcement\n if (this.rawHistory.length > this.config.maxRawHistory) {\n const excess = this.rawHistory.length - this.config.maxRawHistory\n const lastPrunedTurn = this.rawHistory[excess - 1].turn\n this.rawHistory.splice(0, excess)\n if (this.compactionCursor.lastCompactedTurn < lastPrunedTurn) {\n this.compactionCursor.lastCompactedTurn = lastPrunedTurn\n }\n }\n\n this.onMessageAppended(msg)\n return id\n }\n\n // -----------------------------------------------------------------------\n // Build Messages (PURE — no state mutations except benign cache writes)\n // -----------------------------------------------------------------------\n\n /**\n * Build the message array for LLM context.\n *\n * Assembly order:\n * 1. System prompt\n * 2. Static context (if any)\n * 3. Compressed state\n * 4. Recent raw messages (token-budgeted sliding window)\n *\n * Post-processing:\n * - Tool messages converted to user role (\"Tool result: …\")\n * - Consecutive same-role messages merged\n * - Guard: user message inserted before first assistant if missing\n * - Leading system messages merged into one\n */\n buildMessages(systemPrompt: string): ChatMessage[] {\n const messages: ChatMessage[] = []\n\n // 1. System prompt\n messages.push({ role: \"system\", content: systemPrompt })\n\n // 2. Static context (rules/instructions — never compressed)\n if (this.staticContext) {\n messages.push({ role: \"system\", content: this.staticContext })\n }\n\n // 3. Compressed state\n const stateBlock = this.getCachedRenderedState()\n if (stateBlock) {\n messages.push({\n role: \"system\",\n content: `# ${this.getStateLabel()}\\n\\n${stateBlock}`,\n })\n }\n\n // 4. Recent messages (token-budget sliding window)\n const recent = this.getRecentMessages()\n for (const msg of recent) {\n if (msg.role === \"system\") continue\n\n const role = msg.role === \"tool\" ? \"user\" : msg.role\n const content =\n msg.role === \"tool\"\n ? `Tool result: ${msg.content}`\n : msg.content\n\n // Merge consecutive same-role messages (API alternation requirement)\n const last = messages[messages.length - 1]\n if (last && last.role === role) {\n last.content += \"\\n\\n\" + content\n } else {\n messages.push({ role, content })\n }\n }\n\n // Guard: ensure a user message before first assistant\n const firstNonSystem = messages.findIndex((m) => m.role !== \"system\")\n if (firstNonSystem !== -1 && messages[firstNonSystem].role === \"assistant\") {\n messages.splice(firstNonSystem, 0, {\n role: \"user\",\n content: this.getResumePlaceholder(),\n })\n }\n\n // Merge leading system messages into one\n const systemParts: string[] = []\n let sysCount = 0\n for (const msg of messages) {\n if (msg.role === \"system\") {\n systemParts.push(msg.content)\n sysCount++\n } else break\n }\n if (sysCount > 1) {\n messages.splice(0, sysCount, {\n role: \"system\",\n content: systemParts.join(\"\\n\\n---\\n\\n\"),\n })\n }\n\n return messages\n }\n\n // -----------------------------------------------------------------------\n // Compaction\n // -----------------------------------------------------------------------\n\n /** Trigger compaction if conversation context exceeds token threshold. */\n async triggerCompactionIfNeeded(): Promise<void> {\n // Debounce\n if (\n this.currentTurn - this.lastCompactionAttempt <\n this.config.compactionDebounceTurns\n ) {\n return\n }\n\n // Compute recent messages once (used for both threshold check and boundary)\n const recentMessages = this.getRecentMessages()\n const recentTokens = recentMessages.reduce(\n (sum, m) => sum + m.tokenCount,\n 0,\n )\n const stateContent = this.getCachedRenderedState()\n const stateTokens = stateContent\n ? this.config.tokenEstimator.estimateTokens(stateContent)\n : 0\n const staticTokens = this.staticContext\n ? this.config.tokenEstimator.estimateTokens(this.staticContext)\n : 0\n const estimated = recentTokens + stateTokens + staticTokens + this.config.systemPromptOverhead\n if (estimated < this.config.compactionTokenThreshold) return\n\n // Find protected window boundary\n const protectedTurnBoundary =\n recentMessages.length > 0\n ? recentMessages[0].turn\n : this.currentTurn + 1\n\n const compactionBoundary = Math.max(\n this.compactionCursor.lastCompactedTurn + 1,\n 1,\n )\n\n const toCompact = this.rawHistory.filter(\n (m) =>\n m.turn >= compactionBoundary &&\n m.turn < protectedTurnBoundary,\n )\n\n if (toCompact.length === 0) {\n this.lastCompactionAttempt = this.currentTurn\n return\n }\n\n // Perform compaction: try LLM first, fall back to pattern matching\n let llmSucceeded = false\n if (this.config.compactionClient) {\n try {\n llmSucceeded = await this.performLLMCompaction(toCompact)\n } catch {\n // LLM compaction failed — fall through to pattern matching\n }\n }\n if (!llmSucceeded) {\n this.performCompaction(toCompact)\n }\n\n // Advance cursor & bookkeeping\n this.compactionCursor.lastCompactedTurn = protectedTurnBoundary - 1\n this.lastCompactionAttempt = this.currentTurn\n this.compactionCount++\n this.invalidateStateCache()\n\n // Prune compacted messages from rawHistory\n this.rawHistory = this.rawHistory.filter(\n (m) => m.turn >= protectedTurnBoundary,\n )\n\n // Hook for subclass (e.g. persistence, extra logging)\n this.onCompactionComplete()\n }\n\n // -----------------------------------------------------------------------\n // Sliding Window\n // -----------------------------------------------------------------------\n\n /** Get recent messages that fit within the protected token budget. */\n protected getRecentMessages(): TMessage[] {\n const messages: TMessage[] = []\n let tokenCount = 0\n\n for (let i = this.rawHistory.length - 1; i >= 0; i--) {\n const msg = this.rawHistory[i]\n if (msg.role === \"system\") continue\n\n const msgTokens = msg.tokenCount\n if (\n tokenCount + msgTokens > this.config.protectedContextTokens &&\n messages.length > 0\n ) {\n break\n }\n\n messages.unshift(msg)\n tokenCount += msgTokens\n }\n\n return messages\n }\n\n // -----------------------------------------------------------------------\n // Token Estimation\n // -----------------------------------------------------------------------\n\n /** Estimate total context tokens (recent + state + system overhead). */\n estimateContextTokens(): number {\n const recentTokens = this.getRecentMessages().reduce(\n (sum, m) => sum + m.tokenCount,\n 0,\n )\n const stateContent = this.getCachedRenderedState()\n const stateTokens = stateContent\n ? this.config.tokenEstimator.estimateTokens(stateContent)\n : 0\n const staticTokens = this.staticContext\n ? this.config.tokenEstimator.estimateTokens(this.staticContext)\n : 0\n return recentTokens + stateTokens + staticTokens + this.config.systemPromptOverhead\n }\n\n /** Estimate compressed state tokens. Cached alongside rendered state. */\n estimateStateTokens(): number {\n if (this.stateTokenCountCache !== null) return this.stateTokenCountCache\n const stateContent = this.getCachedRenderedState()\n if (!stateContent) {\n this.stateTokenCountCache = 0\n return 0\n }\n this.stateTokenCountCache = this.config.tokenEstimator.estimateTokens(stateContent)\n return this.stateTokenCountCache\n }\n\n // -----------------------------------------------------------------------\n // State Rendering (cached)\n // -----------------------------------------------------------------------\n\n /** Get rendered state, using cache when valid. */\n protected getCachedRenderedState(): string {\n if (this.renderedStateCache !== null) return this.renderedStateCache\n this.renderedStateCache = this.renderState()\n return this.renderedStateCache\n }\n\n // -----------------------------------------------------------------------\n // Cache Invalidation\n // -----------------------------------------------------------------------\n\n /** Invalidate rendered state cache (call after any state mutation). */\n invalidateStateCache(): void {\n this.renderedStateCache = null\n this.stateTokenCountCache = null\n }\n\n // -----------------------------------------------------------------------\n // Static Context\n // -----------------------------------------------------------------------\n\n /**\n * Set static context (rules/instructions injected once into every\n * buildMessages call). Never compressed or pruned.\n */\n setStaticContext(content: string): void {\n this.staticContext = content\n }\n\n /** Check if static context has been set. */\n hasStaticContext(): boolean {\n return this.staticContext !== null\n }\n\n // -----------------------------------------------------------------------\n // Persistence\n // -----------------------------------------------------------------------\n\n /** Serialize base memory state. Subclasses can extend. */\n serializeBase(): PersistedMemoryData<TState, TMessage> {\n return {\n rawHistory: [...this.rawHistory],\n compressedState: structuredClone(this.compressedState),\n compactionCursor: { ...this.compactionCursor },\n currentTurn: this.currentTurn,\n compactionCount: this.compactionCount,\n }\n }\n\n /** Restore base memory state from persisted data. */\n loadBase(data: PersistedMemoryData<TState, TMessage>): void {\n if (!Array.isArray(data.rawHistory)) {\n throw new Error(\"Invalid rawHistory: must be an array\")\n }\n\n this.rawHistory = data.rawHistory\n this.compressedState = data.compressedState\n this.compactionCursor = {\n lastCompactedTurn:\n typeof data.compactionCursor?.lastCompactedTurn === \"number\"\n ? data.compactionCursor.lastCompactedTurn\n : 0,\n }\n\n const maxTurn = this.rawHistory.reduce(\n (max, m) => Math.max(max, m.turn ?? 0),\n 0,\n )\n this.currentTurn = Math.max(data.currentTurn ?? 0, maxTurn)\n this.compactionCount = data.compactionCount ?? 0\n this.invalidateStateCache()\n }\n\n /**\n * Sanitize raw history messages loaded from persistence.\n *\n * Guards against corrupted or older persisted data by providing safe defaults\n * for all base MemoryMessage fields. Subclasses can extend to handle\n * app-specific fields (e.g. charCount, toolCallId).\n */\n protected sanitizeHistory(\n rawHistory: Array<Partial<TMessage> & Record<string, any>>,\n ): TMessage[] {\n return rawHistory.map((msg, idx) => ({\n ...msg,\n id: msg.id || `recovered_${idx}`,\n role: msg.role || (\"user\" as const),\n content: msg.content ?? \"\",\n turn: typeof msg.turn === \"number\" ? msg.turn : idx,\n timestamp:\n typeof msg.timestamp === \"number\" ? msg.timestamp : Date.now(),\n tokenCount:\n typeof msg.tokenCount === \"number\"\n ? msg.tokenCount\n : this.config.tokenEstimator.estimateTokens(\n msg.content ?? \"\",\n ),\n })) as TMessage[]\n }\n\n /** Reset all state. */\n reset(): void {\n this.rawHistory = []\n this.compressedState = this.createInitialState()\n this.compactionCursor = { lastCompactedTurn: 0 }\n this.currentTurn = 0\n this.compactionCount = 0\n this.lastCompactionAttempt = 0\n this.staticContext = null\n this.invalidateStateCache()\n }\n\n // -----------------------------------------------------------------------\n // Accessors\n // -----------------------------------------------------------------------\n\n getCurrentTurn(): number {\n return this.currentTurn\n }\n\n getCompactionCount(): number {\n return this.compactionCount\n }\n\n getRawHistoryLength(): number {\n return this.rawHistory.length\n }\n\n getRawHistory(): TMessage[] {\n return [...this.rawHistory]\n }\n\n getCompressedState(): TState {\n return structuredClone(this.compressedState)\n }\n\n getCompactionCursor(): CompactionCursor {\n return { ...this.compactionCursor }\n }\n\n getLastMessageRole(): string | null {\n if (this.rawHistory.length === 0) return null\n return this.rawHistory[this.rawHistory.length - 1].role\n }\n\n getLastMessageContent(): string | null {\n if (this.rawHistory.length === 0) return null\n return this.rawHistory[this.rawHistory.length - 1].content\n }\n\n getLastCompactionAttempt(): number {\n return this.lastCompactionAttempt\n }\n\n // -----------------------------------------------------------------------\n // Mutation helpers (used by VoiceAgentService for cancel / merge)\n // -----------------------------------------------------------------------\n\n /**\n * Remove and return the last message from raw history.\n * Useful for cancelling a premature assistant response.\n */\n popLastMessage(): TMessage | undefined {\n return this.rawHistory.pop()\n }\n\n /**\n * Find the last message with the given role, scanning backward.\n */\n getLastMessageByRole(role: string): TMessage | undefined {\n for (let i = this.rawHistory.length - 1; i >= 0; i--) {\n if (this.rawHistory[i].role === role) return this.rawHistory[i]\n }\n return undefined\n }\n\n /**\n * Update the content of the last message matching `role`.\n * Re-estimates token count automatically. Returns `true` if\n * a matching message was found and updated.\n */\n updateLastMessageByRole(role: string, content: string): boolean {\n for (let i = this.rawHistory.length - 1; i >= 0; i--) {\n if (this.rawHistory[i].role === role) {\n this.rawHistory[i] = {\n ...this.rawHistory[i],\n content,\n tokenCount: this.config.tokenEstimator.estimateTokens(content),\n }\n return true\n }\n }\n return false\n }\n}\n","export interface BuildMemoryCompactionPromptOptions {\n persona: string\n currentState: string\n messageBlock: string\n schema: string\n rules: string[]\n}\n\nexport function buildMemoryCompactionPrompt(\n options: BuildMemoryCompactionPromptOptions,\n): string {\n const {\n persona,\n currentState,\n messageBlock,\n schema,\n rules,\n } = options\n\n return `${persona}\n\nCurrent compacted state:\n${currentState || \"(empty — first compaction)\"}\n\nMessages to compact:\n${messageBlock}\n\nReturn a JSON object with exactly these fields:\n${schema}\n\nRules:\n${rules.map((rule) => `- ${rule}`).join(\"\\n\")}`\n}\n","import type {\n CompactionLLMClient,\n MemoryMessage,\n MemoryProvenance,\n} from \"./memory-layer\"\nimport { buildMemoryCompactionPrompt } from \"./memory-compaction-prompts\"\n\nconst MEMORY_PROVENANCE_SOURCES = new Set<MemoryProvenance[\"source\"]>([\n \"rule\",\n \"llm\",\n \"tool\",\n \"assistant\",\n \"user\",\n])\n\nexport interface MemoryMetadataLike {\n provenance: MemoryProvenance\n}\n\nexport interface MemoryEntrySanitizerContext {\n turn: number\n provenance: MemoryProvenance\n}\n\nexport function createMemoryMetadata(provenance: MemoryProvenance): MemoryMetadataLike {\n return { provenance }\n}\n\nexport function buildCompactionEntry<T>(options: {\n text: string\n provenance: MemoryProvenance\n summarize: (text: string) => string\n canonicalize: (text: string) => string\n preprocess?: (text: string) => string\n canonicalizeSource?: (preprocessed: string, normalized: string) => string\n build: (normalized: string, canonical: string, metadata: MemoryMetadataLike) => T\n}): T | null {\n const preprocessed = options.preprocess ? options.preprocess(options.text) : options.text\n const normalized = options.summarize(preprocessed)\n const canonicalSource = options.canonicalizeSource\n ? options.canonicalizeSource(preprocessed, normalized)\n : normalized\n const canonical = options.canonicalize(canonicalSource)\n\n if (!normalized || canonical.length === 0) {\n return null\n }\n\n return options.build(\n normalized,\n canonical,\n createMemoryMetadata(options.provenance),\n )\n}\n\nexport function sanitizeMemoryProvenance(\n value: unknown,\n fallback: MemoryProvenance,\n): MemoryProvenance {\n if (!value || typeof value !== \"object\") {\n return fallback\n }\n\n const candidate = value as Record<string, unknown>\n const source = typeof candidate.source === \"string\" ? candidate.source : undefined\n if (!source || !MEMORY_PROVENANCE_SOURCES.has(source as MemoryProvenance[\"source\"])) {\n return fallback\n }\n\n return {\n source: source as MemoryProvenance[\"source\"],\n detail: typeof candidate.detail === \"string\" ? candidate.detail : fallback.detail,\n }\n}\n\nexport function cleanCompactionText(text: string): string {\n return text.trim().replace(/\\s+/g, \" \").replace(/[.?!:;]+$/, \"\")\n}\n\nexport function canonicalizeCompactionText(\n text: string,\n options?: {\n stopWords?: Iterable<string>\n stripQuotes?: boolean\n },\n): string {\n const stopWords = new Set(Array.from(options?.stopWords ?? [], (word) => word.toLowerCase()))\n const normalized = cleanCompactionText(text)\n .toLowerCase()\n\n const dequoted = options?.stripQuotes === false\n ? normalized\n : normalized.replace(/[\"'`“”‘’]/g, \"\")\n\n return dequoted\n .replace(/[^a-z0-9./:_-]+/g, \" \")\n .split(/\\s+/)\n .filter((token) => token.length > 0 && !stopWords.has(token))\n .join(\" \")\n .trim()\n}\n\nexport function summarizeCompactionText(text: string, max = 160): string {\n const normalized = cleanCompactionText(text)\n if (normalized.length <= max) {\n return normalized\n }\n return normalized.slice(0, max - 1) + \"…\"\n}\n\nexport function splitCompactionCandidates(\n text: string,\n options?: {\n minLength?: number\n },\n): string[] {\n const minLength = options?.minLength ?? 8\n return text\n .split(/\\r?\\n+/)\n .flatMap((line) => line.split(/(?<=[.?!])\\s+/))\n .map((candidate) => cleanCompactionText(candidate))\n .filter((candidate) => candidate.length >= minLength)\n}\n\nexport function selectLatestByKey<T>(\n entries: T[],\n keyOf: (entry: T) => string,\n recencyOf: (entry: T) => number,\n): T[] {\n const latest = new Map<string, T>()\n for (const entry of entries) {\n const key = keyOf(entry)\n const existing = latest.get(key)\n if (!existing || recencyOf(entry) > recencyOf(existing)) {\n latest.set(key, entry)\n }\n }\n\n return Array.from(latest.values()).sort((a, b) => recencyOf(a) - recencyOf(b))\n}\n\nexport function selectLatestMatchingByKey<T>(\n entries: T[],\n options: {\n keyOf: (entry: T) => string\n recencyOf: (entry: T) => number\n include: (entry: T) => boolean\n },\n): T[] {\n return selectLatestByKey(\n entries.filter((entry) => options.include(entry)),\n options.keyOf,\n options.recencyOf,\n )\n}\n\nexport function limitEntriesByRecency<T>(\n entries: T[],\n limit: number,\n recencyOf: (entry: T) => number,\n): T[] {\n if (entries.length <= limit) {\n return entries\n }\n\n return [...entries]\n .sort((a, b) => recencyOf(a) - recencyOf(b))\n .slice(-limit)\n}\n\nexport function formatMemoryMetadataTag(metadata: MemoryMetadataLike): string {\n const detail = metadata.provenance.detail ? `/${metadata.provenance.detail}` : \"\"\n return ` [${metadata.provenance.source}${detail}]`\n}\n\nexport function sanitizeCompactionEntries<T>(\n input: unknown,\n options: {\n fromString?: (value: string) => T | null\n fromObject?: (value: Record<string, unknown>) => T | null\n },\n): T[] {\n if (!Array.isArray(input)) {\n return []\n }\n\n return input.flatMap((value) => {\n if (typeof value === \"string\") {\n const entry = options.fromString?.(value)\n return entry ? [entry] : []\n }\n\n if (!value || typeof value !== \"object\") {\n return []\n }\n\n const entry = options.fromObject?.(value as Record<string, unknown>)\n return entry ? [entry] : []\n })\n}\n\nexport function createEntrySanitizer<T>(options: {\n defaultProvenance: MemoryProvenance\n fromString?: (value: string, context: MemoryEntrySanitizerContext) => T | null\n fromObject: (value: Record<string, unknown>, context: MemoryEntrySanitizerContext) => T | null\n getTurn?: (value: Record<string, unknown>, fallbackTurn: number) => number\n getProvenance?: (value: Record<string, unknown>) => unknown\n}): (input: unknown, fallbackTurn: number, fallbackProvenance?: MemoryProvenance) => T[] {\n return (input, fallbackTurn, fallbackProvenance = options.defaultProvenance) =>\n sanitizeCompactionEntries(input, {\n fromString: options.fromString\n ? (value) => options.fromString!(value, {\n turn: fallbackTurn,\n provenance: fallbackProvenance,\n })\n : undefined,\n fromObject: (value) => options.fromObject(value, {\n turn: options.getTurn?.(value, fallbackTurn)\n ?? (typeof value.turn === \"number\" && Number.isFinite(value.turn)\n ? value.turn\n : fallbackTurn),\n provenance: sanitizeMemoryProvenance(\n options.getProvenance?.(value) ?? value.provenance,\n fallbackProvenance,\n ),\n }),\n })\n}\n\nexport function parseCompactionJsonObject(raw: string): Record<string, unknown> | null {\n try {\n const cleaned = raw.replace(/```json\\n?|```\\n?/gi, \"\").trim()\n const parsed = JSON.parse(cleaned)\n return parsed && typeof parsed === \"object\"\n ? parsed as Record<string, unknown>\n : null\n } catch {\n return null\n }\n}\n\nexport async function runStructuredLLMCompaction<\n TMessage extends MemoryMessage,\n TState,\n>(options: {\n client?: CompactionLLMClient\n currentState: string\n messages: TMessage[]\n formatMessage: (message: TMessage) => string\n persona: string\n schema: string\n rules: string[]\n temperature?: number\n maxTokens?: number\n parseState: (obj: Record<string, unknown>) => TState | null\n}): Promise<TState | null> {\n if (!options.client) {\n return null\n }\n\n const messageBlock = options.messages\n .map((message) => options.formatMessage(message))\n .join(\"\\n\")\n\n const prompt = buildMemoryCompactionPrompt({\n persona: options.persona,\n currentState: options.currentState,\n messageBlock,\n schema: options.schema,\n rules: options.rules,\n })\n\n const result = await options.client.chat({\n messages: [{ role: \"user\", content: prompt }],\n temperature: options.temperature ?? 0.1,\n maxTokens: options.maxTokens ?? 4096,\n stream: false,\n })\n\n const parsed = parseCompactionJsonObject(result.content)\n return parsed ? options.parseState(parsed) : null\n}","/**\n * Shared Agent Memory Layer with Episodic Compaction\n *\n * Extends BaseMemoryLayer with agent-specific compressed state:\n * - Retained notes, constraints, structured evidence, failed attempts\n * - Compaction patterns (shell-line command parsing, tool/result extraction)\n * - Compaction rules (retained-note canonicalization, failure subsuming)\n * - LLM-based compaction with structured prompts\n *\n * Used by both Hammer CLI and Magic browser agents. Consumers configure\n * agent-specific behaviour via AgentMemoryLayerConfig (logger, tool names,\n * token budgets, etc.).\n */\n\nimport {\n BaseMemoryLayer,\n type CompactionLLMClient,\n type MemoryMessage,\n type MemoryProvenance,\n type PersistedMemoryData,\n type TokenEstimator,\n} from \"./memory-layer\"\nimport type { ConversationAdapter } from \"./agent-loop\"\nimport {\n coerceToolCallToDefinition,\n parseStructuredAgentText,\n} from \"./command-response-utils\"\nimport {\n resolveToolDefinitionForInvocation,\n extractPrimaryCommandMetadata,\n formatToolCallAsUnixCommand,\n isBackgroundBashToolCall,\n isBashToolCall,\n} from \"./unix-tooling\"\nimport { parseToolResultMessage } from \"./tool-helpers\"\nimport {\n buildCompactionEntry,\n canonicalizeCompactionText,\n createEntrySanitizer,\n createMemoryMetadata,\n formatMemoryMetadataTag,\n limitEntriesByRecency,\n runStructuredLLMCompaction,\n selectLatestByKey,\n selectLatestMatchingByKey,\n splitCompactionCandidates,\n summarizeCompactionText,\n} from \"./memory-compaction-utils\"\nimport type {\n ToolCall,\n ToolDefinition,\n ToolMemoryCitationKind,\n ToolMemoryEvidenceKind,\n ToolMemoryEvidencePolicy,\n ToolMemoryMetadata,\n ToolMemoryNoteKind,\n ToolMemoryNotePolicy,\n} from \"./types\"\nimport {\n getMaxRetainedNotes,\n getMaxFailedAttempts,\n getMaxCodebaseEvidence,\n getMaxResearchEvidence,\n getMaxConstraints,\n getMaxOpenTasks,\n getMaxResolvedTasks,\n getCompactionLlmTemperature,\n getCompactionLlmMaxTokens,\n} from \"./configure\"\n\n// ============================================================================\n// Data Models\n// ============================================================================\n\nexport interface RawMessage extends MemoryMessage {\n toolCallId?: string\n}\n\nexport interface AgentMemoryCitation {\n kind: ToolMemoryCitationKind\n value: string\n}\n\nexport interface AgentMemoryMetadata {\n provenance: MemoryProvenance\n}\n\nexport interface AgentMemoryNote extends AgentMemoryMetadata {\n summary: string\n category?: string // Stable semantic bucket for canonicalization\n rationale?: string\n kind?: ToolMemoryNoteKind\n citations?: AgentMemoryCitation[]\n turn: number\n}\n\nexport interface AgentMemoryEvidence extends AgentMemoryMetadata {\n summary: string\n kind: ToolMemoryEvidenceKind\n citations?: AgentMemoryCitation[]\n turn: number\n}\n\nexport interface AgentMemoryConstraint extends AgentMemoryMetadata {\n text: string\n canonical: string\n turn: number\n}\n\nexport interface AgentMemoryTask extends AgentMemoryMetadata {\n task: string\n canonical: string\n turn: number\n}\n\nexport interface AgentMemoryResolvedTask extends AgentMemoryMetadata {\n task: string\n canonical: string\n resolvedTurn: number\n}\n\nexport interface AgentMemoryFailedAttempt extends AgentMemoryMetadata {\n approach: string\n reason: string\n canonicalApproach: string\n turn: number\n}\n\nexport type CompressedAgentState = {\n scratchpad?: string // Agent working memory — persists across compactions\n\n retainedNotes: AgentMemoryNote[]\n\n constraints: AgentMemoryConstraint[]\n evidence: AgentMemoryEvidence[]\n\n failedAttempts: AgentMemoryFailedAttempt[]\n\n openTasks: AgentMemoryTask[]\n resolvedTasks: AgentMemoryResolvedTask[]\n\n lastUpdatedTurn: number\n}\n\nexport type MemoryMetrics = {\n totalTurns: number\n totalMessages: number\n compactedTurns: number\n compactionCount: number\n recentWindowSize: number\n protectedContextTokens: number\n compressedStateTokens: number\n estimatedContextTokens: number\n}\n\n// ============================================================================\n// Logger Interface\n// ============================================================================\n\n/** Optional structured logger — avoids coupling to Hammer's `log` import. */\nexport interface AgentMemoryLogger {\n warn(label: string, message: string): void\n}\n\n/** No-op logger used when none is provided. */\nconst nullLogger: AgentMemoryLogger = {\n warn() {},\n}\n\n// ============================================================================\n// Tool-specific Configuration\n// ============================================================================\n\nexport interface ToolMemoryExtractionContext {\n toolName: string\n parsed: Record<string, any>\n toolDefinition?: ToolDefinition\n turn: number\n}\n\n/**\n * Defines how successful tool results should be converted into structured\n * durable memory entries.\n */\nexport interface ToolMemoryExtractor {\n /** Add retained notes derived from successful tool results. */\n extractNotes?(\n context: ToolMemoryExtractionContext,\n ): AgentMemoryNote[]\n /** Add durable evidence entries derived from successful tool results. */\n extractEvidence?(\n context: ToolMemoryExtractionContext,\n ): AgentMemoryEvidence[]\n}\n\nfunction getToolMemoryMetadata(toolDefinition?: ToolDefinition): ToolMemoryMetadata {\n return toolDefinition?.metadata?.memory ?? {}\n}\n\nfunction getToolNotePolicy(\n toolDefinition?: ToolDefinition,\n): ToolMemoryNotePolicy | undefined {\n return getToolMemoryMetadata(toolDefinition).note\n}\n\nfunction getToolEvidencePolicies(\n toolDefinition?: ToolDefinition,\n): ToolMemoryEvidencePolicy[] {\n return getToolMemoryMetadata(toolDefinition).evidence ?? []\n}\n\nfunction isSignificantToolDefinition(toolDefinition?: ToolDefinition): boolean {\n const note = getToolNotePolicy(toolDefinition)\n return !!note && note.scope !== \"none\"\n}\n\nfunction resolveToolDefinition(\n toolName: string,\n toolDefinitions: ToolDefinition[],\n): ToolDefinition | undefined {\n return resolveToolDefinitionForInvocation(toolDefinitions, toolName)\n}\n\nconst MEMORY_NOTE_KIND_VALUES = new Set<ToolMemoryNoteKind>([\n \"workflow\",\n \"operation\",\n \"change\",\n])\nconst MEMORY_EVIDENCE_KIND_VALUES = new Set<ToolMemoryEvidenceKind>([\n \"codebase\",\n \"research\",\n])\nconst MEMORY_CITATION_KIND_VALUES = new Set<ToolMemoryCitationKind>([\n \"path\",\n \"query\",\n \"url\",\n \"command\",\n])\nconst CANONICAL_STOP_WORDS = new Set([\n \"a\",\n \"an\",\n \"the\",\n \"that\",\n \"this\",\n \"these\",\n \"those\",\n \"please\",\n \"kindly\",\n \"really\",\n \"very\",\n \"just\",\n \"to\",\n \"for\",\n \"our\",\n \"your\",\n \"my\",\n \"me\",\n \"we\",\n \"you\",\n \"and\",\n])\n\nfunction stripSentenceDecorators(text: string): string {\n return text\n .replace(/^[\\s\\-•*\\d.)]+/, \"\")\n .replace(/[.?!:;]+$/, \"\")\n .trim()\n}\n\nfunction canonicalizeText(text: string): string {\n return canonicalizeCompactionText(stripSentenceDecorators(text), {\n stopWords: CANONICAL_STOP_WORDS,\n })\n}\n\nfunction summarizeSentence(text: string, max = 160): string {\n return summarizeCompactionText(stripSentenceDecorators(text), max)\n}\n\nfunction splitTextIntoCandidates(text: string): string[] {\n return splitCompactionCandidates(text, { minLength: 12 })\n .map((part) => stripSentenceDecorators(part))\n .filter((part) => part.length >= 12)\n}\n\nfunction buildConstraintEntry(\n text: string,\n turn: number,\n provenance: MemoryProvenance,\n): AgentMemoryConstraint | null {\n return buildCompactionEntry({\n text,\n provenance,\n preprocess: (value) => value.replace(/^(?:constraint|constraints):\\s*/i, \"\"),\n summarize: summarizeSentence,\n canonicalize: canonicalizeText,\n canonicalizeSource: (preprocessed) => preprocessed.replace(\n /^(?:please\\s+)?(?:we\\s+|you\\s+)?(?:must|should|need(?:s)? to|required to|avoid|keep|do not|don't|never|without)\\s+/i,\n \"\",\n ),\n build: (displayText, canonical, metadata) => ({\n text: displayText,\n canonical,\n turn,\n ...metadata,\n }),\n })\n}\n\nfunction buildTaskEntry(\n text: string,\n turn: number,\n provenance: MemoryProvenance,\n): AgentMemoryTask | null {\n return buildCompactionEntry({\n text,\n provenance,\n preprocess: (value) => value\n .replace(/^(?:task|todo|next step|next|remaining):\\s*/i, \"\")\n .replace(/^(?:please\\s+)?(?:can you|could you|need to|we need to|let'?s)\\s+/i, \"\"),\n summarize: summarizeSentence,\n canonicalize: canonicalizeText,\n build: (normalized, canonical, metadata) => ({\n task: normalized,\n canonical,\n turn,\n ...metadata,\n }),\n })\n}\n\nfunction buildResolvedTaskEntry(\n text: string,\n resolvedTurn: number,\n provenance: MemoryProvenance,\n): AgentMemoryResolvedTask | null {\n return buildCompactionEntry({\n text,\n provenance,\n summarize: summarizeSentence,\n canonicalize: canonicalizeText,\n build: (task, canonical, metadata) => ({\n task,\n canonical,\n resolvedTurn,\n ...metadata,\n }),\n })\n}\n\nfunction buildFailedAttemptEntry(\n approach: string,\n reason: string,\n turn: number,\n provenance: MemoryProvenance,\n): AgentMemoryFailedAttempt | null {\n const normalizedApproach = summarizeSentence(approach, 120)\n const normalizedReason = summarizeSentence(reason, 200)\n const canonicalApproach = canonicalizeText(normalizedApproach)\n if (!normalizedApproach || !normalizedReason || canonicalApproach.length === 0) {\n return null\n }\n\n return {\n approach: normalizedApproach,\n reason: normalizedReason,\n canonicalApproach,\n turn,\n ...createMemoryMetadata(provenance),\n }\n}\n\nfunction extractConstraintCandidates(text: string): string[] {\n return splitTextIntoCandidates(text).filter((candidate) =>\n /\\b(?:must|should|need(?:s)? to|required to|avoid|keep|do not|don't|never|without)\\b/i.test(candidate),\n )\n}\n\nfunction extractOpenTaskCandidates(text: string, role: RawMessage[\"role\"]): string[] {\n const candidates = splitTextIntoCandidates(text)\n return candidates.filter((candidate) => {\n if (/^(?:todo|task|next step|next|remaining|follow-up):/i.test(candidate)) {\n return true\n }\n if (role === \"user\") {\n return /\\?$/.test(candidate) || /\\b(?:fix|build|add|update|implement|check|verify|investigate|review|compare|explain)\\b/i.test(candidate)\n }\n return /\\b(?:need(?:s)? to|let'?s|next|remaining)\\b/i.test(candidate)\n })\n}\n\nfunction extractResolvedTaskCandidates(text: string): string[] {\n return splitTextIntoCandidates(text).filter((candidate) =>\n /\\b(?:done|fixed|updated|implemented|completed|resolved|finished)\\b/i.test(candidate),\n )\n}\n\nfunction asNonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined\n}\n\nfunction truncateSummary(text: string, max = 200): string {\n const normalized = text.replace(/\\s+/g, \" \").trim()\n if (normalized.length <= max) {\n return normalized\n }\n return normalized.slice(0, max - 1) + \"…\"\n}\n\nfunction summarizeUnknown(value: unknown, max = 200): string | undefined {\n if (typeof value === \"string\") {\n const summary = truncateSummary(value, max)\n return summary.length > 0 ? summary : undefined\n }\n\n if (Array.isArray(value)) {\n const summary = truncateSummary(\n value\n .map((item) =>\n typeof item === \"string\"\n ? item\n : typeof item === \"object\" && item\n ? JSON.stringify(item)\n : String(item),\n )\n .join(\"; \"),\n max,\n )\n return summary.length > 0 ? summary : undefined\n }\n\n if (value && typeof value === \"object\") {\n const summary = truncateSummary(JSON.stringify(value), max)\n return summary.length > 0 ? summary : undefined\n }\n\n return undefined\n}\n\nfunction asRecord(value: unknown): Record<string, any> | undefined {\n return value && typeof value === \"object\"\n ? value as Record<string, any>\n : undefined\n}\n\nfunction parseJsonLikeString(value: unknown): unknown {\n if (typeof value !== \"string\") {\n return value\n }\n\n const trimmed = value.trim()\n if (!trimmed || (!trimmed.startsWith(\"{\") && !trimmed.startsWith(\"[\"))) {\n return value\n }\n\n try {\n return JSON.parse(trimmed)\n } catch {\n return value\n }\n}\n\nfunction extractWebSearchResults(parsed: Record<string, any>): Record<string, any>[] {\n const queue: unknown[] = [parsed, parsed.data, parsed.content, parsed.output]\n const seen = new Set<unknown>()\n\n while (queue.length > 0) {\n const current = parseJsonLikeString(queue.shift())\n if (!current || seen.has(current)) {\n continue\n }\n seen.add(current)\n\n const record = asRecord(current)\n if (!record) {\n continue\n }\n\n if (Array.isArray(record.results)) {\n return record.results.filter(\n (result): result is Record<string, any> => !!result && typeof result === \"object\",\n )\n }\n\n queue.push(record.web, record.data, record.content, record.output)\n }\n\n return []\n}\n\nfunction extractWebSummarySource(parsed: Record<string, any>): unknown {\n for (const candidate of [parsed.content, parsed.data, parsed.output]) {\n if (typeof candidate === \"string\") {\n if (candidate.trim().length > 0) {\n return candidate\n }\n continue\n }\n\n if (candidate !== undefined && candidate !== null) {\n return candidate\n }\n }\n\n for (const candidate of [parsed.output, parsed.content, parsed.data]) {\n const record = asRecord(parseJsonLikeString(candidate))\n if (!record) {\n continue\n }\n\n for (const nested of [record.content, record.data, record.output]) {\n if (typeof nested === \"string\") {\n if (nested.trim().length > 0) {\n return nested\n }\n continue\n }\n\n if (nested !== undefined && nested !== null) {\n return nested\n }\n }\n }\n\n return undefined\n}\n\nconst SHELL_SIGNAL_REGEX = /\\b(pass(?:ed)?|fail(?:ed|ure)?|error|test(?:s)?|assert(?:ion)?|warn(?:ing)?|build(?:ing)?|built|compile(?:d)?|create(?:d)?|update(?:d)?|delete(?:d)?|remove(?:d)?|install(?:ed)?|generate(?:d)?|save(?:d)?|wrote|written|rename(?:d)?|move(?:d)?|cop(?:y|ied)|chang(?:e|ed))\\b/i\nconst SHELL_STATUS_LINE_REGEX = /^(?:[?MADRCU!]{1,2}\\s+|On branch\\b|Changes?(?: not staged)?\\b|nothing to commit\\b|total \\d+\\b|[A-Za-z]:[\\\\/]|\\.{1,2}[\\\\/]|\\/)/\nconst SHELL_FILENAME_REGEX = /\\b(?:package\\.json|bunfig\\.toml|tsconfig(?:\\.[\\w-]+)?\\.json|README\\.md|Dockerfile(?:\\.\\w+)?|[A-Za-z0-9_.-]+\\.(?:ts|tsx|js|jsx|json|md|toml|yml|yaml|sh|py|rs|go|java|c|cpp|h|lock))\\b/i\nconst MAX_SHORT_SHELL_OUTPUT = 800\nconst MAX_MEDIUM_SHELL_OUTPUT = 2000\nconst MAX_COMPACT_SHELL_LINES = 6\n\nfunction hasStructuredShellSignal(text: string): boolean {\n const lines = text\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n\n if (lines.length === 0) {\n return false\n }\n\n if (lines.length <= MAX_COMPACT_SHELL_LINES && text.length <= MAX_MEDIUM_SHELL_OUTPUT) {\n return true\n }\n\n return lines.slice(0, 12).some((line) =>\n SHELL_STATUS_LINE_REGEX.test(line) || SHELL_FILENAME_REGEX.test(line),\n )\n}\n\nfunction summarizeShellStream(value: unknown, max = 220): string | undefined {\n const text = asNonEmptyString(value)\n if (!text) {\n return undefined\n }\n\n if (text.length > MAX_SHORT_SHELL_OUTPUT) {\n const keepLargeOutput = SHELL_SIGNAL_REGEX.test(text)\n || hasStructuredShellSignal(text)\n if (!keepLargeOutput) {\n return undefined\n }\n }\n\n return truncateSummary(text, max)\n}\n\nfunction buildCitation(\n kind: ToolMemoryCitationKind,\n value: string | undefined,\n): AgentMemoryCitation[] {\n return value ? [{ kind, value }] : []\n}\n\nfunction getCitationValue(\n parsed: Record<string, any>,\n kind?: ToolMemoryCitationKind,\n): string | undefined {\n switch (kind) {\n case \"path\":\n return asNonEmptyString(parsed.path)\n case \"query\":\n return asNonEmptyString(parsed.query)\n case \"url\":\n return asNonEmptyString(parsed.url)\n case \"command\":\n return asNonEmptyString(parsed.command)\n default:\n return undefined\n }\n}\n\nfunction formatWebSearchEvidence(parsed: Record<string, any>): string | undefined {\n const query = asNonEmptyString(parsed.query)\n\n const searchResults = extractWebSearchResults(parsed)\n if (searchResults.length > 0) {\n const titles = searchResults\n .map((result) => {\n return asNonEmptyString(result.title)\n ?? asNonEmptyString(result.snippet)\n ?? asNonEmptyString(result.url)\n })\n .filter((title): title is string => !!title)\n if (titles.length > 0) {\n const label = query ? `Search results for \"${query}\"` : \"Search results\"\n return `${label}: ${truncateSummary(titles.slice(0, 3).join(\"; \"))}`\n }\n }\n\n const fallback = summarizeUnknown(extractWebSummarySource(parsed), 220)\n if (!fallback) {\n return undefined\n }\n return query ? `Search results for \"${query}\": ${fallback}` : `Search results: ${fallback}`\n}\n\nfunction formatWebRequestEvidence(parsed: Record<string, any>): string | undefined {\n const url = asNonEmptyString(parsed.url)\n const summary = summarizeUnknown(extractWebSummarySource(parsed), 220)\n if (!summary) {\n return url ? `Fetched ${url}` : undefined\n }\n return url ? `Fetched ${url}: ${summary}` : `Fetched content: ${summary}`\n}\n\nfunction formatShellEvidence(parsed: Record<string, any>): string | undefined {\n const primarySummary = summarizeShellStream(parsed.stdout ?? parsed.output)\n const stderrSummary = summarizeShellStream(parsed.stderr, 140)\n\n if (!primarySummary && !stderrSummary) {\n return undefined\n }\n\n const command = asNonEmptyString(parsed.command)\n const summary = primarySummary && stderrSummary && primarySummary !== stderrSummary\n ? `${primarySummary} [stderr: ${stderrSummary}]`\n : primarySummary ?? `stderr: ${stderrSummary}`\n\n return command\n ? `Shell \"${truncateSummary(command, 80)}\": ${summary}`\n : `Shell output: ${summary}`\n}\n\nfunction buildDefaultEvidenceSummary(\n policy: ToolMemoryEvidencePolicy,\n parsed: Record<string, any>,\n): string | undefined {\n switch (policy.citation) {\n case \"query\":\n return formatWebSearchEvidence(parsed)\n case \"url\":\n return formatWebRequestEvidence(parsed)\n case \"command\":\n return formatShellEvidence(parsed)\n default:\n return undefined\n }\n}\n\nfunction buildEvidenceFromPolicies(\n parsed: Record<string, any>,\n toolDefinition: ToolDefinition | undefined,\n turn: number,\n): AgentMemoryEvidence[] {\n const entries: AgentMemoryEvidence[] = []\n\n for (const policy of getToolEvidencePolicies(toolDefinition)) {\n const summary = buildDefaultEvidenceSummary(policy, parsed)\n if (!summary) {\n continue\n }\n\n entries.push({\n summary,\n kind: policy.kind,\n citations: policy.citation\n ? buildCitation(policy.citation, getCitationValue(parsed, policy.citation))\n : undefined,\n turn,\n provenance: {\n source: \"tool\",\n detail: toolDefinition?.name,\n },\n })\n }\n\n return entries\n}\n\n/**\n * Default tool-memory extractor for Hammer-style tools. Tool definitions carry\n * the policy; this default implementation turns those policies into structured\n * evidence entries.\n */\nexport const DEFAULT_TOOL_MEMORY_EXTRACTOR: ToolMemoryExtractor = {\n extractNotes(): AgentMemoryNote[] {\n return []\n },\n extractEvidence(context: ToolMemoryExtractionContext): AgentMemoryEvidence[] {\n return buildEvidenceFromPolicies(\n context.parsed,\n context.toolDefinition,\n context.turn,\n )\n },\n}\n\nfunction getToolCallTargets(toolCall: {\n name: string\n kind?: ToolCall[\"kind\"]\n parameters?: Record<string, any>\n}, toolDefinitions: ToolDefinition[]): Array<{ name: string; path?: string; command?: string }> {\n const normalizedToolCall = {\n ...toolCall,\n parameters: toolCall.parameters ?? {},\n }\n const unixCommand = formatToolCallAsUnixCommand(normalizedToolCall, toolDefinitions)\n if (unixCommand && isBashToolCall(normalizedToolCall)) {\n const primary = extractPrimaryCommandMetadata(unixCommand)\n return [\n {\n name: \"Bash\",\n path:\n primary.path ??\n normalizedToolCall.parameters.path ??\n normalizedToolCall.parameters.file_path,\n command: primary.command,\n },\n ]\n }\n\n if (unixCommand && isBackgroundBashToolCall(normalizedToolCall)) {\n return [\n {\n name: \"BackgroundBash\",\n path:\n normalizedToolCall.parameters.path ||\n normalizedToolCall.parameters.file_path,\n command: unixCommand,\n },\n ]\n }\n\n return [\n {\n name: normalizedToolCall.name,\n path:\n normalizedToolCall.parameters.path ||\n normalizedToolCall.parameters.file_path,\n command: normalizedToolCall.parameters.command,\n },\n ]\n}\n\nfunction buildRetainedNoteFromToolCall(\n target: { name: string; path?: string; command?: string },\n toolDefinition: ToolDefinition | undefined,\n turn: number,\n): AgentMemoryNote | null {\n const notePolicy = getToolNotePolicy(toolDefinition)\n if (!notePolicy || notePolicy.scope === \"none\") {\n return null\n }\n\n const canonicalToolName = toolDefinition?.name ?? target.name\n const trimmedPath = asNonEmptyString(target.path)\n const trimmedCommand = asNonEmptyString(target.command)\n\n // Shell invocations are canonicalized by command because they do not have a\n // stable file path target the way file-oriented tools do.\n const summary = canonicalToolName === \"Bash\" || canonicalToolName === \"BackgroundBash\"\n ? `bash: ${truncateSummary(trimmedCommand ?? canonicalToolName, 80)}`\n : trimmedCommand\n ? `${canonicalToolName}: ${truncateSummary(trimmedCommand, 80)}`\n : trimmedPath\n ? `${canonicalToolName}: ${trimmedPath}`\n : canonicalToolName\n\n const citations = canonicalToolName === \"Bash\" || canonicalToolName === \"BackgroundBash\"\n ? buildCitation(\"command\", trimmedCommand)\n : trimmedPath\n ? buildCitation(\"path\", trimmedPath)\n : buildCitation(\"command\", trimmedCommand)\n\n return {\n summary,\n category: `tool_${canonicalToolName}`,\n kind: notePolicy.kind,\n citations: citations.length > 0 ? citations : undefined,\n turn,\n provenance: {\n source: \"assistant\",\n detail: canonicalToolName,\n },\n }\n}\n\nfunction createRetainedNoteKey(note: AgentMemoryNote): string {\n // Categories let compaction collapse superseded notes even when the summary\n // text changes, e.g. framework choices or repeated tool operations.\n return (\n note.category\n ?? note.summary\n .toLowerCase()\n .split(/\\s+/)\n .slice(0, 3)\n .join(\"_\")\n )\n}\n\nfunction createEvidenceKey(entry: AgentMemoryEvidence): string {\n const citationKey = entry.citations\n ?.map((citation) => `${citation.kind}:${citation.value}`)\n .sort()\n .join(\"|\")\n\n return [\n entry.kind,\n citationKey ?? entry.summary.toLowerCase(),\n ].join(\"::\")\n}\n\nfunction formatCitations(citations?: AgentMemoryCitation[]): string {\n if (!citations || citations.length === 0) {\n return \"\"\n }\n\n return ` [${citations.map((citation) => `${citation.kind}: ${truncateSummary(citation.value, 80)}`).join(\"; \")}]`\n}\n\nconst PERSISTED_RULE_PROVENANCE: MemoryProvenance = { source: \"rule\", detail: \"persisted\" }\nconst PERSISTED_TOOL_PROVENANCE: MemoryProvenance = { source: \"tool\", detail: \"persisted\" }\n\nconst sanitizeConstraintEntries = createEntrySanitizer<AgentMemoryConstraint>({\n defaultProvenance: PERSISTED_RULE_PROVENANCE,\n fromString: (value, context) => buildConstraintEntry(value, context.turn, context.provenance),\n fromObject: (constraint, context) => buildConstraintEntry(\n asNonEmptyString(constraint.text) ?? \"\",\n context.turn,\n context.provenance,\n ),\n})\n\nconst sanitizeTaskEntries = createEntrySanitizer<AgentMemoryTask>({\n defaultProvenance: PERSISTED_RULE_PROVENANCE,\n fromString: (value, context) => buildTaskEntry(value, context.turn, context.provenance),\n fromObject: (task, context) => buildTaskEntry(\n asNonEmptyString(task.task) ?? \"\",\n context.turn,\n context.provenance,\n ),\n})\n\nconst sanitizeResolvedTasks = createEntrySanitizer<AgentMemoryResolvedTask>({\n defaultProvenance: PERSISTED_RULE_PROVENANCE,\n fromObject: (entry, context) => buildResolvedTaskEntry(\n asNonEmptyString(entry.task) ?? \"\",\n context.turn,\n context.provenance,\n ),\n getTurn: (entry, fallbackTurn) =>\n typeof entry.resolvedTurn === \"number\" && Number.isFinite(entry.resolvedTurn)\n ? entry.resolvedTurn\n : fallbackTurn,\n})\n\nconst sanitizeRetainedNotes = createEntrySanitizer<AgentMemoryNote>({\n defaultProvenance: PERSISTED_RULE_PROVENANCE,\n fromObject: (note, context) => {\n const summary = asNonEmptyString(note.summary)\n if (!summary) {\n return null\n }\n\n const kind = asNonEmptyString(note.kind)\n return {\n summary,\n category: asNonEmptyString(note.category),\n rationale: asNonEmptyString(note.rationale),\n kind: kind && MEMORY_NOTE_KIND_VALUES.has(kind as ToolMemoryNoteKind)\n ? kind as ToolMemoryNoteKind\n : undefined,\n citations: sanitizeCitations(note.citations),\n turn: context.turn,\n provenance: context.provenance,\n }\n },\n})\n\nconst sanitizeEvidenceEntries = createEntrySanitizer<AgentMemoryEvidence>({\n defaultProvenance: PERSISTED_TOOL_PROVENANCE,\n fromObject: (entry, context) => {\n const summary = asNonEmptyString(entry.summary)\n const kind = asNonEmptyString(entry.kind)\n\n if (!summary || !kind) {\n return null\n }\n if (!MEMORY_EVIDENCE_KIND_VALUES.has(kind as ToolMemoryEvidenceKind)) {\n return null\n }\n\n return {\n summary,\n kind: kind as ToolMemoryEvidenceKind,\n citations: sanitizeCitations(entry.citations),\n turn: context.turn,\n provenance: context.provenance,\n }\n },\n})\n\nconst sanitizeFailedAttempts = createEntrySanitizer<AgentMemoryFailedAttempt>({\n defaultProvenance: PERSISTED_TOOL_PROVENANCE,\n fromObject: (entry, context) => {\n const approach = asNonEmptyString(entry.approach)\n const reason = asNonEmptyString(entry.reason)\n\n if (!approach || !reason) {\n return null\n }\n\n return buildFailedAttemptEntry(\n approach,\n reason,\n context.turn,\n context.provenance,\n )\n },\n getTurn: (entry) =>\n typeof entry.turn === \"number\" && Number.isFinite(entry.turn)\n ? entry.turn\n : 0,\n})\n\nfunction sanitizeCitations(input: unknown): AgentMemoryCitation[] {\n if (!Array.isArray(input)) {\n return []\n }\n\n return input.flatMap((value) => {\n if (!value || typeof value !== \"object\") {\n return []\n }\n\n const citation = value as Record<string, unknown>\n const kind = asNonEmptyString(citation.kind)\n const text = asNonEmptyString(citation.value)\n\n if (!kind || !text || !MEMORY_CITATION_KIND_VALUES.has(kind as ToolMemoryCitationKind)) {\n return []\n }\n\n return [{ kind: kind as ToolMemoryCitationKind, value: text }]\n })\n}\n\n// ============================================================================\n// Agent Memory Layer Config\n// ============================================================================\n\nexport interface AgentMemoryLayerConfig {\n /** Token threshold that triggers compaction. */\n compactionTokenThreshold: number\n /** Tokens reserved for recent uncompressed messages. */\n protectedContextTokens: number\n /** Token budget for the rendered compressed state block. */\n stateBudgetTokens: number\n /** Hard cap on raw history entries. */\n maxRawHistory: number\n /** Minimum turns between compaction attempts. */\n compactionDebounceTurns: number\n /** Token estimate for the system prompt. */\n systemPromptOverhead: number\n /** Token estimator implementation. */\n tokenEstimator: TokenEstimator\n /** Optional LLM client for LLM-based compaction. */\n compactionClient?: CompactionLLMClient\n /** Temperature for compaction LLM calls (default: 0.1). */\n compactionTemperature?: number\n /** Max tokens for compaction LLM output (default: 4096). */\n compactionMaxTokens?: number\n /** Registry-backed tool definitions used to classify tool calls during compaction. */\n getToolDefinitions?: () => ToolDefinition[]\n /** Optional tool-memory extractor for converting tool results to state entries. */\n toolMemoryExtractor?: ToolMemoryExtractor\n /** Optional structured logger. */\n logger?: AgentMemoryLogger\n}\n\n// ============================================================================\n// Initial State\n// ============================================================================\n\nfunction createInitialAgentState(): CompressedAgentState {\n return {\n retainedNotes: [],\n constraints: [],\n evidence: [],\n failedAttempts: [],\n openTasks: [],\n resolvedTasks: [],\n lastUpdatedTurn: 0,\n }\n}\n\n// ============================================================================\n// Agent Memory Layer\n// ============================================================================\n\nexport class AgentMemoryLayer extends BaseMemoryLayer<CompressedAgentState, RawMessage> {\n /** Temporary storage for toolCallId during appendMessage. */\n private pendingToolCallId?: string\n\n /** The agent-level config (superset of base MemoryLayerConfig). */\n private readonly agentConfig: Required<\n Pick<AgentMemoryLayerConfig, \"logger\">\n > & {\n getToolDefinitions: () => ToolDefinition[]\n toolMemoryExtractor: ToolMemoryExtractor\n }\n\n constructor(config: AgentMemoryLayerConfig) {\n super(\n {\n compactionTokenThreshold: config.compactionTokenThreshold,\n protectedContextTokens: config.protectedContextTokens,\n stateBudgetTokens: config.stateBudgetTokens,\n maxRawHistory: config.maxRawHistory,\n compactionDebounceTurns: config.compactionDebounceTurns,\n systemPromptOverhead: config.systemPromptOverhead,\n tokenEstimator: config.tokenEstimator,\n compactionClient: config.compactionClient,\n compactionTemperature: config.compactionTemperature ?? getCompactionLlmTemperature(),\n compactionMaxTokens: config.compactionMaxTokens ?? getCompactionLlmMaxTokens(),\n },\n createInitialAgentState(),\n )\n\n this.agentConfig = {\n getToolDefinitions: config.getToolDefinitions ?? (() => []),\n toolMemoryExtractor: config.toolMemoryExtractor ?? DEFAULT_TOOL_MEMORY_EXTRACTOR,\n logger: config.logger ?? nullLogger,\n }\n }\n\n // -----------------------------------------------------------------------\n // Override: appendMessage (preserves toolCallId support)\n // -----------------------------------------------------------------------\n\n /**\n * Append a message to raw history.\n * Extends the base signature with an optional toolCallId.\n */\n override appendMessage(\n role: \"system\" | \"user\" | \"assistant\" | \"tool\",\n content: string,\n ): string\n override appendMessage(\n role: \"system\" | \"user\" | \"assistant\" | \"tool\",\n content: string,\n toolCallId: string | undefined,\n ): string\n override appendMessage(message: {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\"\n content: string\n toolCallId?: string\n }): string\n override appendMessage(\n roleOrMessage:\n | \"system\"\n | \"user\"\n | \"assistant\"\n | \"tool\"\n | {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\"\n content: string\n toolCallId?: string\n },\n content?: string,\n toolCallId?: string,\n ): string {\n const message =\n typeof roleOrMessage === \"object\"\n ? roleOrMessage\n : {\n role: roleOrMessage,\n content: content!,\n toolCallId,\n }\n\n this.pendingToolCallId = message.toolCallId\n const id = super.appendMessage(message.role, message.content)\n this.pendingToolCallId = undefined\n return id\n }\n\n // -----------------------------------------------------------------------\n // Abstract Implementation\n // -----------------------------------------------------------------------\n\n protected createMessage(\n id: string,\n role: \"system\" | \"user\" | \"assistant\" | \"tool\",\n content: string,\n turn: number,\n timestamp: number,\n ): RawMessage {\n return {\n id,\n role,\n content,\n timestamp,\n turn,\n tokenCount: this.config.tokenEstimator.estimateTokens(content),\n ...(this.pendingToolCallId && { toolCallId: this.pendingToolCallId }),\n }\n }\n\n protected performCompaction(messages: RawMessage[]): void {\n const { getToolDefinitions, toolMemoryExtractor } = this.agentConfig\n const toolDefinitions = getToolDefinitions()\n\n for (const msg of messages) {\n if (msg.role === \"user\") {\n for (const candidate of extractConstraintCandidates(msg.content)) {\n const constraint = buildConstraintEntry(\n candidate,\n msg.turn,\n { source: \"user\", detail: \"message\" },\n )\n if (constraint) {\n this.compressedState.constraints.push(constraint)\n }\n }\n\n for (const candidate of extractOpenTaskCandidates(msg.content, msg.role)) {\n const task = buildTaskEntry(\n candidate,\n msg.turn,\n { source: \"user\", detail: \"message\" },\n )\n if (task) {\n this.compressedState.openTasks.push(task)\n }\n }\n }\n\n if (msg.role === \"assistant\") {\n const retainedNoteMatches = msg.content.matchAll(\n /\\[RETAINED_NOTE\\]\\s*([\\s\\S]+?)(?=\\n\\[|$)/g,\n )\n for (const retainedNoteMatch of retainedNoteMatches) {\n const summary = retainedNoteMatch[1]?.trim()\n if (!summary) {\n continue\n }\n\n this.compressedState.retainedNotes.push({\n summary,\n kind: \"workflow\",\n turn: msg.turn,\n provenance: { source: \"assistant\", detail: \"retained_note\" },\n })\n }\n\n const parsed = this.extractStructuredResponse(msg.content)\n if (parsed) {\n const selectedToolCall = coerceToolCallToDefinition(\n parsed.selectedToolCall,\n toolDefinitions,\n )\n\n if (parsed.reasoning && selectedToolCall) {\n for (const target of getToolCallTargets(selectedToolCall, toolDefinitions)) {\n const toolDefinition = resolveToolDefinition(\n target.name,\n toolDefinitions,\n )\n if (!isSignificantToolDefinition(toolDefinition)) {\n continue\n }\n\n const note = buildRetainedNoteFromToolCall(\n target,\n toolDefinition,\n msg.turn,\n )\n if (note) {\n this.compressedState.retainedNotes.push(note)\n }\n }\n }\n\n // Extract scratchpad (latest overwrites previous)\n if (parsed.scratchpad && typeof parsed.scratchpad === \"string\") {\n this.compressedState.scratchpad = parsed.scratchpad\n }\n\n const assistantContext = [parsed.reasoning, parsed.outcome, parsed.scratchpad]\n .filter((part): part is string => typeof part === \"string\" && part.trim().length > 0)\n .join(\"\\n\")\n\n for (const candidate of extractConstraintCandidates(assistantContext)) {\n const constraint = buildConstraintEntry(\n candidate,\n msg.turn,\n { source: \"assistant\", detail: \"structured_response\" },\n )\n if (constraint) {\n this.compressedState.constraints.push(constraint)\n }\n }\n\n for (const candidate of extractOpenTaskCandidates(assistantContext, msg.role)) {\n const task = buildTaskEntry(\n candidate,\n msg.turn,\n { source: \"assistant\", detail: \"structured_response\" },\n )\n if (task) {\n this.compressedState.openTasks.push(task)\n }\n }\n\n for (const candidate of extractResolvedTaskCandidates(assistantContext)) {\n const resolved = buildResolvedTaskEntry(\n candidate,\n msg.turn,\n { source: \"assistant\", detail: \"structured_response\" },\n )\n if (resolved) {\n this.compressedState.resolvedTasks.push(resolved)\n }\n }\n }\n }\n\n if (msg.role === \"tool\" && msg.toolCallId) {\n const toolInfo = this.parseToolResponse(msg.content)\n\n if (!toolInfo.success && toolInfo.toolName) {\n const failedAttempt = buildFailedAttemptEntry(\n toolInfo.toolName,\n (toolInfo.error || \"Unknown error\").substring(0, 200),\n msg.turn,\n { source: \"tool\", detail: toolInfo.toolName },\n )\n if (failedAttempt) {\n this.compressedState.failedAttempts.push(failedAttempt)\n }\n } else if (toolInfo.success && toolInfo.toolName) {\n if (toolInfo.parsed) {\n const toolDefinition = resolveToolDefinition(\n toolInfo.toolName,\n toolDefinitions,\n )\n const extractionContext: ToolMemoryExtractionContext = {\n toolName: toolInfo.toolName,\n parsed: toolInfo.parsed,\n toolDefinition,\n turn: msg.turn,\n }\n this.compressedState.retainedNotes.push(\n ...sanitizeRetainedNotes(\n toolMemoryExtractor.extractNotes?.(extractionContext) ?? [],\n msg.turn,\n ),\n )\n this.compressedState.evidence.push(\n ...sanitizeEvidenceEntries(\n toolMemoryExtractor.extractEvidence?.(extractionContext) ?? [],\n msg.turn,\n ),\n )\n }\n }\n }\n }\n\n this.compressedState.lastUpdatedTurn = this.currentTurn\n this.finalizeCompactedState()\n }\n\n protected override async performLLMCompaction(messages: RawMessage[]): Promise<boolean> {\n const parsed = await runStructuredLLMCompaction({\n client: this.config.compactionClient,\n currentState: this.renderState(),\n messages,\n formatMessage: (message) => {\n const prefix = message.toolCallId\n ? `[${message.role} tool=${message.toolCallId} turn=${message.turn}]`\n : `[${message.role} turn=${message.turn}]`\n const content = message.content.length > 2000\n ? message.content.slice(0, 1997) + \"…\"\n : message.content\n return `${prefix} ${content}`\n },\n persona: \"You are an agent memory compactor for a coding assistant. Given the conversation messages and current compacted state, produce an UPDATED compacted state as JSON.\",\n schema: '{\"scratchpad\":\"string or null — working memory notes\",\"retainedNotes\":[{\"summary\":\"string\",\"category\":\"string or null\",\"rationale\":\"string or null\",\"kind\":\"workflow|operation|change or null\",\"citations\":[{\"kind\":\"path|query|url|command\",\"value\":\"string\"}],\"turn\":number,\"provenance\":{\"source\":\"rule|llm|tool|assistant|user\",\"detail\":\"string or null\"}}],\"constraints\":[{\"text\":\"string\",\"canonical\":\"string\",\"turn\":number,\"provenance\":{\"source\":\"rule|llm|tool|assistant|user\",\"detail\":\"string or null\"}}],\"evidence\":[{\"summary\":\"string\",\"kind\":\"codebase|research\",\"citations\":[{\"kind\":\"path|query|url|command\",\"value\":\"string\"}],\"turn\":number,\"provenance\":{\"source\":\"rule|llm|tool|assistant|user\",\"detail\":\"string or null\"}}],\"failedAttempts\":[{\"approach\":\"string\",\"reason\":\"string\",\"canonicalApproach\":\"string\",\"turn\":number,\"provenance\":{\"source\":\"rule|llm|tool|assistant|user\",\"detail\":\"string or null\"}}],\"openTasks\":[{\"task\":\"string\",\"canonical\":\"string\",\"turn\":number,\"provenance\":{\"source\":\"rule|llm|tool|assistant|user\",\"detail\":\"string or null\"}}],\"resolvedTasks\":[{\"task\":\"string\",\"canonical\":\"string\",\"resolvedTurn\":number,\"provenance\":{\"source\":\"rule|llm|tool|assistant|user\",\"detail\":\"string or null\"}}]}',\n rules: [\n \"Merge new information with existing state — preserve existing entries unless superseded\",\n 'For retained notes, keep categories stable for repeated tool operations (e.g. \"tool_Bash\" or \"tool_WebSearch\")',\n \"Preserve citations when available\",\n \"Keep evidence specific and attributable; prefer one latest entry per evidence kind and citation, or per evidence kind and summary when uncited\",\n \"Keep failed attempts for learning — only drop if clearly superseded by a later success\",\n \"Normalize constraints and tasks into stable canonical strings so duplicates merge even when wording differs\",\n \"Preserve the scratchpad if present\",\n \"Return ONLY valid JSON — no markdown fences, no commentary\",\n ],\n temperature: this.config.compactionTemperature,\n maxTokens: this.config.compactionMaxTokens,\n parseState: (obj) => this.parseLLMCompactionObject(obj),\n })\n if (parsed) {\n this.compressedState = parsed\n this.finalizeCompactedState()\n return true\n }\n return false\n }\n\n private parseLLMCompactionObject(obj: Record<string, unknown>): CompressedAgentState | null {\n return {\n scratchpad: typeof obj.scratchpad === \"string\" ? obj.scratchpad : this.compressedState.scratchpad,\n retainedNotes: sanitizeRetainedNotes(obj.retainedNotes, this.currentTurn, { source: \"llm\", detail: \"compaction\" }),\n constraints: sanitizeConstraintEntries(obj.constraints, this.currentTurn, { source: \"llm\", detail: \"compaction\" }),\n evidence: sanitizeEvidenceEntries(obj.evidence, this.currentTurn, { source: \"llm\", detail: \"compaction\" }),\n failedAttempts: sanitizeFailedAttempts(obj.failedAttempts, this.currentTurn, { source: \"llm\", detail: \"compaction\" }),\n openTasks: sanitizeTaskEntries(obj.openTasks, this.currentTurn, { source: \"llm\", detail: \"compaction\" }),\n resolvedTasks: sanitizeResolvedTasks(obj.resolvedTasks, this.currentTurn, { source: \"llm\", detail: \"compaction\" }),\n lastUpdatedTurn: this.currentTurn,\n }\n }\n\n private finalizeCompactedState(): void {\n this.compressedState.retainedNotes = selectLatestByKey(\n this.compressedState.retainedNotes,\n createRetainedNoteKey,\n (retainedNote) => retainedNote.turn,\n )\n\n this.compressedState.evidence = selectLatestByKey(\n this.compressedState.evidence,\n createEvidenceKey,\n (entry) => entry.turn,\n )\n\n this.compressedState.resolvedTasks = selectLatestMatchingByKey(\n this.compressedState.resolvedTasks,\n {\n keyOf: (task) => task.canonical,\n recencyOf: (task) => task.resolvedTurn,\n include: (task) => this.currentTurn - task.resolvedTurn < 20,\n },\n )\n\n this.compressedState.failedAttempts =\n this.compressedState.failedAttempts.filter(\n (fa) => this.currentTurn - fa.turn < 30,\n )\n\n this.compressedState.constraints = selectLatestByKey(\n this.compressedState.constraints,\n (constraint) => constraint.canonical,\n (constraint) => constraint.turn,\n )\n\n this.compressedState.openTasks = selectLatestMatchingByKey(\n this.compressedState.openTasks,\n {\n keyOf: (task) => task.canonical,\n recencyOf: (task) => task.turn,\n include: (task) => !this.compressedState.resolvedTasks.some(\n (resolved) => resolved.canonical === task.canonical,\n ),\n },\n )\n\n const MIN_APPROACH_LENGTH_FOR_MATCH = 15\n const retainedNoteTexts = this.compressedState.retainedNotes.map((t) =>\n canonicalizeText(t.summary),\n )\n this.compressedState.failedAttempts =\n this.compressedState.failedAttempts.filter((attempt) => {\n const approach = attempt.canonicalApproach\n if (approach.length < MIN_APPROACH_LENGTH_FOR_MATCH) return true\n return !retainedNoteTexts.some((summary) => summary.includes(approach))\n })\n\n this.compressedState.retainedNotes = limitEntriesByRecency(\n this.compressedState.retainedNotes,\n getMaxRetainedNotes(),\n (retainedNote) => retainedNote.turn,\n )\n this.compressedState.failedAttempts = limitEntriesByRecency(\n this.compressedState.failedAttempts,\n getMaxFailedAttempts(),\n (failedAttempt) => failedAttempt.turn,\n )\n const codebaseEvidence = limitEntriesByRecency(\n this.compressedState.evidence.filter((entry) => entry.kind === \"codebase\"),\n getMaxCodebaseEvidence(),\n (entry) => entry.turn,\n )\n const researchEvidence = limitEntriesByRecency(\n this.compressedState.evidence.filter((entry) => entry.kind === \"research\"),\n getMaxResearchEvidence(),\n (entry) => entry.turn,\n )\n this.compressedState.evidence = [...codebaseEvidence, ...researchEvidence]\n .sort((a, b) => a.turn - b.turn)\n if (this.compressedState.constraints.length > getMaxConstraints()) {\n this.compressedState.constraints =\n this.compressedState.constraints.slice(-getMaxConstraints())\n }\n if (this.compressedState.openTasks.length > getMaxOpenTasks()) {\n this.compressedState.openTasks =\n this.compressedState.openTasks.slice(-getMaxOpenTasks())\n }\n if (this.compressedState.resolvedTasks.length > getMaxResolvedTasks()) {\n this.compressedState.resolvedTasks =\n this.compressedState.resolvedTasks.slice(-getMaxResolvedTasks())\n }\n }\n\n protected renderState(): string {\n const parts: string[] = []\n\n if (this.compressedState.scratchpad) {\n parts.push(\n `**Scratchpad (Working Memory)**:\\n${this.compressedState.scratchpad}`,\n )\n }\n\n if (this.compressedState.retainedNotes.length > 0) {\n const retainedNotes = this.compressedState.retainedNotes\n .map(\n (retainedNote) =>\n `- [Turn ${retainedNote.turn}] ${retainedNote.summary}${\n retainedNote.rationale ? ` (${retainedNote.rationale})` : \"\"\n }${formatCitations(retainedNote.citations)}${formatMemoryMetadataTag(retainedNote)}`,\n )\n .join(\"\\n\")\n parts.push(`**Retained Notes**:\\n${retainedNotes}`)\n }\n\n if (this.compressedState.constraints.length > 0) {\n parts.push(\n `**Constraints**:\\n${this.compressedState.constraints\n .map((constraint) => `- [Turn ${constraint.turn}] ${constraint.text}${formatMemoryMetadataTag(constraint)}`)\n .join(\"\\n\")}`,\n )\n }\n\n const codebaseEvidence = this.compressedState.evidence.filter(\n (entry) => entry.kind === \"codebase\",\n )\n if (codebaseEvidence.length > 0) {\n parts.push(\n `**Codebase Evidence**:\\n${codebaseEvidence\n .map(\n (entry) =>\n `- [Turn ${entry.turn}] ${entry.summary}${formatCitations(entry.citations)}${formatMemoryMetadataTag(entry)}`,\n )\n .join(\"\\n\")}`,\n )\n }\n\n const researchEvidence = this.compressedState.evidence.filter(\n (entry) => entry.kind === \"research\",\n )\n if (researchEvidence.length > 0) {\n parts.push(\n `**Research Evidence**:\\n${researchEvidence\n .map(\n (entry) =>\n `- [Turn ${entry.turn}] ${entry.summary}${formatCitations(entry.citations)}${formatMemoryMetadataTag(entry)}`,\n )\n .join(\"\\n\")}`,\n )\n }\n\n if (this.compressedState.failedAttempts.length > 0) {\n const failures = this.compressedState.failedAttempts\n .map((f) => `- [Turn ${f.turn}] ${f.approach}: ${f.reason}${formatMemoryMetadataTag(f)}`)\n .join(\"\\n\")\n parts.push(`**Failed Attempts**:\\n${failures}`)\n }\n\n if (this.compressedState.openTasks.length > 0) {\n parts.push(\n `**Open Tasks**:\\n${this.compressedState.openTasks\n .map((task) => `- [Turn ${task.turn}] ${task.task}${formatMemoryMetadataTag(task)}`)\n .join(\"\\n\")}`,\n )\n }\n\n if (this.compressedState.resolvedTasks.length > 0) {\n const resolved = this.compressedState.resolvedTasks\n .map((rt) => `${rt.task} (turn ${rt.resolvedTurn})${formatMemoryMetadataTag(rt)}`)\n .join(\", \")\n parts.push(`**Recently Resolved**: ${resolved}`)\n }\n\n return parts.join(\"\\n\\n\")\n }\n\n protected override createInitialState(): CompressedAgentState {\n return createInitialAgentState()\n }\n\n protected override getStateLabel(): string {\n return \"Agent State (Durable Beliefs)\"\n }\n\n protected override getResumePlaceholder(): string {\n return \"Continue working on the task.\"\n }\n\n override reset(): void {\n super.reset()\n this.pendingToolCallId = undefined\n }\n\n /**\n * Get comprehensive metrics for monitoring and observability\n */\n getMetrics(): MemoryMetrics {\n const recentMessages = this.getRecentMessages()\n const protectedTokens = recentMessages.reduce(\n (sum, msg) => sum + msg.tokenCount,\n 0,\n )\n\n return {\n totalTurns: this.currentTurn,\n totalMessages: this.rawHistory.length,\n compactedTurns: this.compactionCursor.lastCompactedTurn,\n compactionCount: this.compactionCount,\n recentWindowSize: recentMessages.length,\n protectedContextTokens: protectedTokens,\n compressedStateTokens: this.estimateStateTokens(),\n estimatedContextTokens: this.estimateContextTokens(),\n }\n }\n\n /**\n * Create a ConversationAdapter backed by this memory layer.\n *\n * Eliminates boilerplate glue code that both Magic and Hammer\n * previously duplicated when wiring AgentLoop.\n */\n toConversationAdapter(): ConversationAdapter {\n return {\n appendMessage: async (role, content) => {\n this.appendMessage(role, content)\n },\n appendToolMessage: async (content, toolCallId) => {\n this.appendMessage(\"tool\", content, toolCallId)\n },\n getLastMessageRole: () => this.getLastMessageRole() ?? undefined,\n getLastMessageContent: () => this.getLastMessageContent() ?? undefined,\n triggerCompactionIfNeeded: () => this.triggerCompactionIfNeeded(),\n }\n }\n\n /**\n * Free token estimator resources.\n * Call when the memory layer is no longer needed to prevent memory leaks.\n */\n dispose(): void {\n this.config.tokenEstimator.dispose?.()\n }\n\n /**\n * Serialize full agent memory state for persistence.\n * Combines base fields with agent-specific state.\n */\n serialize(): PersistedMemoryData<CompressedAgentState, RawMessage> & {\n lastCompactionAttempt: number\n } {\n return {\n ...this.serializeBase(),\n lastCompactionAttempt: this.lastCompactionAttempt,\n }\n }\n\n /**\n * Load from persisted data with comprehensive validation.\n * Ensures all fields have valid structure and reasonable defaults.\n */\n loadFromPersisted(data: {\n rawHistory: RawMessage[]\n compressedState: any\n compactionCursor: { lastCompactedTurn: number }\n currentTurn: number\n lastCompactionAttempt?: number\n compactionCount?: number\n }): void {\n if (!Array.isArray(data.rawHistory)) {\n throw new Error(\"Invalid rawHistory: must be an array\")\n }\n\n // Sanitize base fields via shared sanitizeHistory\n const sanitizedHistory = this.sanitizeHistory(data.rawHistory)\n\n // Validate and sanitize compressedState\n const cs = data.compressedState\n const sanitizedState: CompressedAgentState = {\n scratchpad: cs?.scratchpad,\n retainedNotes: sanitizeRetainedNotes(cs?.retainedNotes, 0),\n constraints: sanitizeConstraintEntries(cs?.constraints, 0),\n evidence: sanitizeEvidenceEntries(cs?.evidence, 0),\n failedAttempts: sanitizeFailedAttempts(cs?.failedAttempts, 0),\n openTasks: sanitizeTaskEntries(cs?.openTasks, 0),\n resolvedTasks: sanitizeResolvedTasks(cs?.resolvedTasks, 0),\n lastUpdatedTurn:\n typeof cs?.lastUpdatedTurn === \"number\" ? cs.lastUpdatedTurn : 0,\n }\n const sanitizedLastCompactionAttempt =\n typeof data.lastCompactionAttempt === \"number\" &&\n Number.isFinite(data.lastCompactionAttempt)\n ? data.lastCompactionAttempt\n : 0\n\n this.loadBase({\n rawHistory: sanitizedHistory,\n compressedState: sanitizedState,\n compactionCursor: data.compactionCursor,\n currentTurn: data.currentTurn,\n compactionCount: data.compactionCount ?? 0,\n })\n\n // Restore agent-specific state\n this.pendingToolCallId = undefined\n this.lastCompactionAttempt = sanitizedLastCompactionAttempt\n }\n\n // -----------------------------------------------------------------------\n // Private Helpers\n // -----------------------------------------------------------------------\n\n /**\n * Extract structured assistant response data from prose plus\n * standalone control segments.\n */\n private extractStructuredResponse(text: string): {\n reasoning?: string\n outcome?: string\n selectedToolCall?: ToolCall\n scratchpad?: string\n } | null {\n const parsed = parseStructuredAgentText(text, { allowTruncated: true })\n if (!parsed) {\n return null\n }\n\n const scratchpadMatch = parsed.prose.match(/(?:^|\\n)Scratchpad:\\s*(.+)$/im)\n\n return {\n reasoning: parsed.prose,\n outcome: parsed.outcome,\n selectedToolCall: parsed.selectedToolCall,\n scratchpad: scratchpadMatch?.[1]?.trim(),\n }\n }\n\n /**\n * Safe parsing of tool response with fallback.\n * Returns structured data instead of string matching.\n */\n private parseToolResponse(content: string): {\n success: boolean\n toolName?: string\n error?: string\n /** The parsed JSON object, if parsing succeeded. */\n parsed?: Record<string, any>\n } {\n return parseToolResultMessage(content)\n }\n}\n","/**\n * Agent Memory Layer Factory — Shared factory for creating pre-configured\n * AgentMemoryLayer instances.\n *\n * Centralizes the shared Hammer/Magic/Monoslides/Monospace memory-layer presets so each\n * agent only provides the small set of overrides it actually owns.\n *\n * Usage:\n * import { createAgentMemoryLayer } from \"./agent-memory-factory\"\n * const memory = createAgentMemoryLayer(\"hammer\", { logger: myLogger })\n * const memory = createAgentMemoryLayer(\"magic\", { toolMemoryExtractor: canvasExtractor })\n */\n\nimport {\n AgentMemoryLayer,\n DEFAULT_TOOL_MEMORY_EXTRACTOR,\n type AgentMemoryLayerConfig,\n type ToolMemoryExtractor,\n type AgentMemoryLogger,\n} from \"./agent-memory-layer\"\nimport { CharTokenEstimator } from \"./memory-layer\"\nimport type { CompactionLLMClient } from \"./memory-layer\"\nimport type { ToolDefinition } from \"./types\"\nimport {\n getCompactionLlmTemperature,\n getCompactionLlmMaxTokens,\n} from \"./configure\"\n\n// ---------------------------------------------------------------------------\n// Preset definitions\n// ---------------------------------------------------------------------------\n\ninterface MemoryPresetConfig {\n compactionTokenThreshold: number\n protectedContextTokens: number\n stateBudgetTokens: number\n maxRawHistory: number\n compactionDebounceTurns: number\n systemPromptOverhead: number\n toolMemoryExtractor: ToolMemoryExtractor\n}\n\n// Default preset values assume a 200k context window (matches MiniMax-M2.7 / qwen3-max).\n// Consumers that use smaller or larger models should pass overrides via createAgentMemoryLayer().\nconst DEFAULT_MAX_CONTEXT_TOKENS = 200_000\nconst SHARED_WORKSPACE_AGENT_MEMORY_PRESET: MemoryPresetConfig = {\n compactionTokenThreshold: Math.floor(DEFAULT_MAX_CONTEXT_TOKENS * 0.75), // 150_000\n protectedContextTokens: Math.floor(DEFAULT_MAX_CONTEXT_TOKENS * 0.30), // 60_000\n stateBudgetTokens: Math.floor(DEFAULT_MAX_CONTEXT_TOKENS * 0.05), // 10_000\n maxRawHistory: 2_000,\n compactionDebounceTurns: 3,\n systemPromptOverhead: 4_000,\n toolMemoryExtractor: DEFAULT_TOOL_MEMORY_EXTRACTOR,\n}\n\nconst PRESETS: Record<string, MemoryPresetConfig> = {\n hammer: SHARED_WORKSPACE_AGENT_MEMORY_PRESET,\n magic: SHARED_WORKSPACE_AGENT_MEMORY_PRESET,\n monoslides: SHARED_WORKSPACE_AGENT_MEMORY_PRESET,\n monospace: SHARED_WORKSPACE_AGENT_MEMORY_PRESET,\n}\n\n// ---------------------------------------------------------------------------\n// Overrides\n// ---------------------------------------------------------------------------\n\nexport interface AgentMemoryFactoryOverrides {\n /** Override the compaction LLM client. */\n compactionClient?: CompactionLLMClient\n /** Override the token estimator (default: CharTokenEstimator for browser safety). */\n tokenEstimator?: AgentMemoryLayerConfig[\"tokenEstimator\"]\n /** Provide registry-backed tool definitions for compaction-time classification. */\n getToolDefinitions?: () => ToolDefinition[]\n /** Override tool memory extractor. */\n toolMemoryExtractor?: ToolMemoryExtractor\n /** Optional structured logger. */\n logger?: AgentMemoryLogger\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\n/**\n * Create an AgentMemoryLayer pre-configured for a specific agent preset.\n *\n * @param preset - Agent preset name (\"hammer\" | \"magic\" | \"monoslides\" | \"monospace\").\n * @param overrides - Optional overrides for any preset value.\n * @returns Configured AgentMemoryLayer instance.\n *\n * @example\n * ```ts\n * // Hammer (Node.js — use TiktokenEstimator for precision)\n * const memory = createAgentMemoryLayer(\"hammer\", {\n * compactionClient,\n * tokenEstimator: new TiktokenEstimator(),\n * logger: hammerLogger,\n * })\n *\n * // Magic/Monoslides/Monospace (browser — CharTokenEstimator is default)\n * const memory = createAgentMemoryLayer(\"magic\", {\n * compactionClient,\n * getToolDefinitions: () => registry.getToolDefinitions(),\n * toolMemoryExtractor: MAGIC_TOOL_MEMORY_EXTRACTOR,\n * })\n * ```\n */\nexport function createAgentMemoryLayer(\n preset: string,\n overrides?: AgentMemoryFactoryOverrides,\n): AgentMemoryLayer {\n const presetConfig = PRESETS[preset]\n if (!presetConfig) {\n throw new Error(`Unknown memory preset: \"${preset}\". Available: ${Object.keys(PRESETS).join(\", \")}`)\n }\n\n return new AgentMemoryLayer({\n compactionTokenThreshold: presetConfig.compactionTokenThreshold,\n protectedContextTokens: presetConfig.protectedContextTokens,\n stateBudgetTokens: presetConfig.stateBudgetTokens,\n maxRawHistory: presetConfig.maxRawHistory,\n compactionDebounceTurns: presetConfig.compactionDebounceTurns,\n systemPromptOverhead: presetConfig.systemPromptOverhead,\n tokenEstimator: overrides?.tokenEstimator ?? new CharTokenEstimator(),\n compactionClient: overrides?.compactionClient,\n compactionTemperature: getCompactionLlmTemperature(),\n compactionMaxTokens: getCompactionLlmMaxTokens(),\n getToolDefinitions: overrides?.getToolDefinitions,\n toolMemoryExtractor: overrides?.toolMemoryExtractor ?? presetConfig.toolMemoryExtractor,\n logger: overrides?.logger,\n })\n}\n","/**\n * StreamingToolParser — separates speech from structured control segments\n * during streaming. It normally parses tool calls at stream end, but if a\n * second control header appears it immediately seals the stream and keeps only\n * the first segment.\n */\n\nimport {\n DEFAULT_ALLOWED_RUN_TARGETS,\n containsStandaloneStructuredInvocationStart,\n parseStructuredAgentText,\n type RunInvocationTarget,\n} from \"./command-response-utils\"\nimport { SUPPORTED_RUN_TARGETS } from \"./run-command-registry\"\nimport type { ToolCall } from \"./types\"\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface StreamingToolParserCallbacks {\n /** Fired for every token that is regular speech (not part of a control segment). */\n onSpeechToken?: (token: string) => void\n /** Fired when structured control segments have been parsed into tool calls. */\n onToolCall?: (selectedToolCall: ToolCall) => void\n /** Fired if structured command text was detected but could not be parsed. */\n onToolCallError?: (error: Error, rawCommandText: string) => void\n /** Informational log messages. */\n onLog?: (msg: string) => void\n /** Allowed control-segment targets for this parser. Defaults to tool/bash. */\n allowedRunTargets?: readonly RunInvocationTarget[]\n}\n\n// ---------------------------------------------------------------------------\n// Parser\n// ---------------------------------------------------------------------------\n\nexport class StreamingToolParser {\n private speechBuffer = \"\"\n private segmentBuffer = \"\"\n private inSegment = false\n private _sealed = false\n private callbacks: StreamingToolParserCallbacks = {}\n\n /** The full raw content accumulated so far (speech + structured lines). */\n private fullContent = \"\"\n\n private static buildControlHeaderPattern(\n allowedTargets: readonly RunInvocationTarget[],\n flags: string,\n ): RegExp | null {\n const normalizedTargets = allowedTargets.filter((target): target is RunInvocationTarget =>\n SUPPORTED_RUN_TARGETS.includes(target),\n )\n\n if (normalizedTargets.length === 0) {\n return null\n }\n\n return new RegExp(\n `(^|\\\\n)([ \\t]*)---(?:${normalizedTargets.join(\"|\")})---(?:[ \\t]*\\\\r?\\\\n[ \\t]*|[ \\t]+|$)`,\n flags,\n )\n }\n\n private static getControlHeaders(allowedTargets: readonly RunInvocationTarget[]): string[] {\n return allowedTargets\n .filter((target): target is RunInvocationTarget =>\n SUPPORTED_RUN_TARGETS.includes(target),\n )\n .map((target) => `---${target}---`)\n }\n\n private static findControlHeader(\n content: string,\n allowedTargets: readonly RunInvocationTarget[],\n ): { index: number } | null {\n const pattern = StreamingToolParser.buildControlHeaderPattern(\n allowedTargets,\n \"i\",\n )\n\n if (!pattern) {\n return null\n }\n\n const match = pattern.exec(content)\n\n if (!match || match.index === undefined) {\n return null\n }\n\n return {\n index: match.index + (match[1]?.length ?? 0),\n }\n }\n\n private static findSecondControlHeader(\n content: string,\n allowedTargets: readonly RunInvocationTarget[],\n ): { index: number } | null {\n const pattern = StreamingToolParser.buildControlHeaderPattern(\n allowedTargets,\n \"ig\",\n )\n\n if (!pattern) {\n return null\n }\n\n let seenFirstHeader = false\n let match: RegExpExecArray | null\n\n while ((match = pattern.exec(content)) !== null) {\n const index = match.index + (match[1]?.length ?? 0)\n\n if (!seenFirstHeader) {\n seenFirstHeader = true\n continue\n }\n\n return {\n index,\n }\n }\n\n return null\n }\n\n private getRunPrefixLookback(): number {\n const prefixes = StreamingToolParser.getControlHeaders(\n this.callbacks.allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS,\n )\n return Math.max(...prefixes.map((prefix) => prefix.length)) - 1\n }\n\n constructor(callbacks?: StreamingToolParserCallbacks) {\n if (callbacks) this.callbacks = callbacks\n }\n\n /** Replace callbacks (e.g. after construction). */\n on(cb: StreamingToolParserCallbacks): void {\n this.callbacks = { ...this.callbacks, ...cb }\n }\n\n /**\n * Whether the parser has sealed after stream completion.\n */\n get sealed(): boolean {\n return this._sealed\n }\n\n /** Feed a new token from the SSE stream. */\n push(token: string): void {\n if (this._sealed) return\n\n for (const ch of token) {\n if (this._sealed) {\n break\n }\n\n this.fullContent += ch\n\n if (this.inSegment) {\n this.segmentBuffer += ch\n this.sealAtFirstSegmentIfSecondHeaderDetected()\n } else {\n this.speechBuffer += ch\n this.captureSegmentHeaderIfPresent()\n }\n }\n\n if (!this.inSegment && !this._sealed) {\n this.flushSafeSpeechTail()\n }\n }\n\n /**\n * Signal that the stream has ended.\n *\n * If we're mid-command (truncated response), buffer it and attempt\n * recovery only after the full streamed response is available.\n */\n finish(): void {\n if (this._sealed) {\n return\n }\n\n if (!this.inSegment && this.speechBuffer.length > 0) {\n this.callbacks.onSpeechToken?.(this.speechBuffer)\n this.speechBuffer = \"\"\n }\n\n if (this.inSegment && this.segmentBuffer.length > 0) {\n const bufferedSegment = this.segmentBuffer.trimEnd()\n\n this.callbacks.onLog?.(\n \"Stream ended with a structured control segment buffered for finish-time parsing\",\n )\n this.inSegment = false\n this.segmentBuffer = \"\"\n\n this.tryParseFullContent(bufferedSegment)\n this._sealed = true\n return\n }\n\n this.tryParseFullContent()\n this._sealed = true\n }\n\n /** Reset internal state for reuse across turns. */\n reset(): void {\n this.speechBuffer = \"\"\n this.segmentBuffer = \"\"\n this.inSegment = false\n this._sealed = false\n this.fullContent = \"\"\n }\n\n /** Get all content accumulated so far. */\n getFullContent(): string {\n return this.fullContent\n }\n\n // -----------------------------------------------------------------------\n // Internal\n // -----------------------------------------------------------------------\n\n private captureSegmentHeaderIfPresent(): void {\n const first = StreamingToolParser.findControlHeader(\n this.speechBuffer,\n this.callbacks.allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS,\n )\n\n if (!first) {\n return\n }\n\n const runStart = first.index\n const speech = this.speechBuffer.slice(0, runStart)\n if (speech.length > 0) {\n this.callbacks.onSpeechToken?.(speech)\n }\n\n this.segmentBuffer = this.speechBuffer.slice(runStart)\n this.speechBuffer = \"\"\n this.inSegment = true\n }\n\n private flushSafeSpeechTail(): void {\n const keep = this.getRunPrefixLookback()\n if (this.speechBuffer.length <= keep) {\n return\n }\n\n const safeText = this.speechBuffer.slice(0, this.speechBuffer.length - keep)\n this.speechBuffer = this.speechBuffer.slice(this.speechBuffer.length - keep)\n if (safeText.length > 0) {\n this.callbacks.onSpeechToken?.(safeText)\n }\n }\n\n private sealAtFirstSegmentIfSecondHeaderDetected(): void {\n const secondHeader = StreamingToolParser.findSecondControlHeader(\n this.segmentBuffer,\n this.callbacks.allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS,\n )\n\n if (!secondHeader) {\n return\n }\n\n const contentBeforeSegment = this.fullContent.slice(\n 0,\n this.fullContent.length - this.segmentBuffer.length,\n )\n const firstSegmentRaw = this.segmentBuffer.slice(0, secondHeader.index).trimEnd()\n const acceptedContent = `${contentBeforeSegment}${firstSegmentRaw}`\n\n this.callbacks.onLog?.(\n \"Detected a second structured control header during streaming; aborting generation and keeping only the first segment\",\n )\n\n this.fullContent = acceptedContent\n this.segmentBuffer = \"\"\n this.speechBuffer = \"\"\n this.inSegment = false\n\n this.tryParseContent(acceptedContent, firstSegmentRaw)\n this._sealed = true\n }\n\n private tryParseFullContent(rawCommandText?: string): boolean {\n return this.tryParseContent(this.fullContent, rawCommandText)\n }\n\n private tryParseContent(content: string, rawCommandText?: string): boolean {\n let fullResult\n try {\n fullResult = parseStructuredAgentText(content, {\n allowTruncated: true,\n allowedTargets:\n this.callbacks.allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS,\n })\n } catch (error: unknown) {\n this.callbacks.onToolCallError?.(\n error instanceof Error\n ? error\n : new Error(String(error)),\n rawCommandText ?? content,\n )\n return true\n }\n\n if (!fullResult) {\n if (!this.containsStandaloneRunStart(content)) {\n return false\n }\n\n this.callbacks.onToolCallError?.(\n new Error(\n \"Structured command text could not be parsed after stream completion\",\n ),\n rawCommandText ?? content,\n )\n return true\n }\n\n if (fullResult.selectedToolCall) {\n this.callbacks.onLog?.(\n `Parsed selected tool call after stream completion: ${fullResult.selectedToolCall.rawInvocation ?? fullResult.selectedToolCall.parameters.command ?? fullResult.selectedToolCall.name}`,\n )\n this.callbacks.onToolCall?.(fullResult.selectedToolCall)\n }\n\n return true\n }\n\n private containsStandaloneRunStart(content: string): boolean {\n return containsStandaloneStructuredInvocationStart(\n content,\n this.callbacks.allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS,\n )\n }\n}\n","/**\n * BaseValidationEnforcer — shared error-handling infrastructure for\n * any LLM agent loop (Hammer CLI, Tauri voice agent, etc.).\n *\n * Provides:\n * • `surfaceError` / `surfaceWarning` → conversation injection\n * • `handleValidationError` (run-line/Zod parse failures)\n * • `handleApiError` (rate-limit, 5xx, etc.)\n *\n * Subclasses add domain-specific enforcement (skills-first policy,\n * TTS error announcements, etc.).\n */\n\n// ── ConversationSink ─────────────────────────────────────────────────\n// Minimal interface for injecting messages into any conversation store.\n// Hammer's ConversationManager and the voice agent's ChatMessage[] both\n// satisfy this with a trivial adapter.\n\nexport interface ConversationSink {\n addMessage(\n role: \"user\" | \"assistant\" | \"system\" | \"tool\",\n content: string,\n ): Promise<void>\n}\n\nexport function createConversationSink(\n appendMessage: (\n role: \"user\" | \"assistant\" | \"system\" | \"tool\",\n content: string,\n ) => void | Promise<void>,\n): ConversationSink {\n return {\n addMessage: async (role, content) => {\n await appendMessage(role, content)\n },\n }\n}\n\n// ── Result returned to the caller ────────────────────────────────────\n\nexport interface EnforcerResult {\n /** Error message surfaced to the agent as a user-visible message. */\n errorMessage: string\n /** JSON-serialised `{ success, error, data }` suitable for `lastToolResult`. */\n lastToolResult: string\n}\n\ntype ValidationErrorWithRawContent = Error & {\n rawContent?: string\n}\n\nconst VALIDATION_ERROR_PREFIX = \"VALIDATION_ERROR: \"\n\nfunction hasValidationErrorPrefix(message: string): boolean {\n return message.startsWith(VALIDATION_ERROR_PREFIX)\n}\n\nfunction stripValidationErrorPrefix(message: string): string {\n return hasValidationErrorPrefix(message)\n ? message.slice(VALIDATION_ERROR_PREFIX.length)\n : message\n}\n\nfunction buildStepValidationSurfaceMessage(message: string): string {\n const details = stripValidationErrorPrefix(message)\n\n if (hasValidationErrorPrefix(message)) {\n return details\n }\n\n return `Validation error: ${details}. Reply with exactly one executable control block only. Put the standalone slug header on its own line and put the payload on the following line(s). Do not discuss the control syntax.`\n}\n\nfunction buildFatalSurfaceMessage(message: string): string {\n return `Fatal agent error: ${message}`\n}\n\n// ── Base class ───────────────────────────────────────────────────────\n\nexport abstract class BaseValidationEnforcer {\n protected sink: ConversationSink\n\n constructor(sink: ConversationSink) {\n this.sink = sink\n }\n\n // ── Missing tool call warning ────────────────────────────────────\n\n /**\n * Warn the agent that it sent a non-terminal response without any\n * executable control block — this wastes an action turn.\n */\n async handleMissingToolCall(actionCount: number): Promise<void> {\n this.logWarning(\n `No executable control block in response — action ${actionCount} was wasted.`,\n )\n\n await this.surfaceWarning(\n `Your response had no executable control block and no final ---bash--- control block whose payload was exit 0 or exit 1. ` +\n `This wasted an action turn. Reply with one concrete next action and do not explain the protocol back to the system.`,\n )\n }\n\n // ── Core: handle a validation error ──────────────────────────────\n\n /**\n * Handle an LLM response validation error (shell-line parse, Zod, etc.).\n *\n * - surfaces a structured corrective error as a user message\n */\n async handleValidationError(\n error: Error,\n ): Promise<EnforcerResult> {\n this.logWarning(`Validation error: ${error.message}`)\n\n await this.surfaceValidationContext(error)\n\n const errorMessage = buildStepValidationSurfaceMessage(error.message)\n\n return this.surfaceError(errorMessage)\n }\n\n /**\n * Handle a non-validation LLM API error (rate-limit, 5xx, etc.).\n * Surfaces the message to the agent so it can retry on the next turn.\n */\n async handleApiError(error: Error): Promise<EnforcerResult> {\n this.logError(`LLM API error: ${error.message}`)\n return this.surfaceError(`LLM API error: ${error.message}`)\n }\n\n /**\n * Handle an unrecoverable runtime error that terminates the current run.\n * Surfaces the message through the same user-visible error channel as\n * validation and API failures.\n */\n async handleFatalError(error: Error | string): Promise<EnforcerResult> {\n const message = error instanceof Error ? error.message : error\n const errorMessage = buildFatalSurfaceMessage(message)\n\n this.logError(errorMessage)\n return this.surfaceError(errorMessage)\n }\n\n /**\n * Override to route warnings to a domain-specific logger.\n * Default: `console.warn`.\n */\n protected logWarning(message: string): void {\n console.warn(`[Agent] ⚠ ${message}`)\n }\n\n /**\n * Override to route errors to a domain-specific logger.\n * Default: `console.error`.\n */\n protected logError(message: string): void {\n console.error(`[Agent] ${message}`)\n }\n\n protected async surfaceValidationContext(error: Error): Promise<void> {\n void error\n }\n\n protected readValidationRawContent(error: Error): string | null {\n const rawContent = (error as ValidationErrorWithRawContent).rawContent\n if (typeof rawContent !== \"string\") {\n return null\n }\n\n const trimmedContent = rawContent.trim()\n return trimmedContent.length > 0 ? trimmedContent : null\n }\n\n // ── Internal: shared error/warning → user-message plumbing ──────\n\n protected async surfaceError(errorMessage: string): Promise<EnforcerResult> {\n const lastToolResult = JSON.stringify({\n success: false,\n error: errorMessage,\n data: null,\n })\n\n await this.sink.addMessage(\"user\", `⚠️ ERROR: ${errorMessage}`)\n\n return { errorMessage, lastToolResult }\n }\n\n protected async surfaceWarning(warningMessage: string): Promise<void> {\n await this.sink.addMessage(\"user\", `⚠️ WARNING: ${warningMessage}`)\n }\n}\n","import type { AgentLoopCallbacks } from \"./agent-loop\"\nimport type { AgentMachineState } from \"./agent-machine\"\nimport type { ToolDefinition, ToolResult } from \"./types\"\nimport { formatToolCallAsUnixCommand } from \"./unix-tooling\"\nimport type { AgentMessage } from \"./web-agent-types\"\nimport type { WebToolLoopRuntimeStateLike } from \"./web-tool-loop-agent-runtime\"\n\nexport class PendingAgentMessageBuffer<TMessage> {\n private messages: TMessage[] = []\n\n push(message: TMessage): void {\n this.messages.push(message)\n }\n\n clear(): void {\n this.messages = []\n }\n\n takeForRun(\n runId: number,\n isRunActive: (runId: number) => boolean,\n ): TMessage[] {\n if (!isRunActive(runId) || this.messages.length === 0) {\n return []\n }\n\n const pendingMessages = this.messages\n this.messages = []\n return pendingMessages\n }\n}\n\nexport function createToolAgentMessage(options: {\n id: string\n name: string\n content: string\n success: boolean\n timestamp?: number\n}): AgentMessage {\n return {\n id: options.id,\n role: \"tool\",\n content: options.content,\n toolName: options.name,\n toolSuccess: options.success,\n timestamp: options.timestamp ?? Date.now(),\n }\n}\n\nexport interface CreateWebToolLoopCallbacksOptions {\n getToolDefinitions: () => ToolDefinition[]\n updateActiveToolName: (activeToolName: string | null) => void\n onToolCompleteMessage: (\n name: string,\n result: ToolResult,\n truncatedResult: string,\n ) => void\n onPhaseChange: (state: AgentMachineState) => void\n}\n\nexport function applyInitialWebAgentRunState<\n TState extends WebToolLoopRuntimeStateLike<TMessage>,\n TMessage extends AgentMessage,\n>(state: TState, userMessage: TMessage): TState {\n return {\n ...state,\n messages: [...state.messages, userMessage],\n streamingContent: \"\",\n error: null,\n activeToolName: null,\n }\n}\n\nexport function applyIdleWebAgentState<\n TState extends WebToolLoopRuntimeStateLike,\n>(state: TState): TState {\n return {\n ...state,\n phase: \"idle\",\n streamingContent: \"\",\n activeToolName: null,\n }\n}\n\nexport function createWebToolLoopCallbacks(\n options: CreateWebToolLoopCallbacksOptions,\n): AgentLoopCallbacks {\n return {\n onToolStart: (name, parameters) => {\n options.updateActiveToolName(\n formatToolCallAsUnixCommand(\n { name, parameters },\n options.getToolDefinitions(),\n ) ?? name,\n )\n },\n onToolComplete: (name, result, truncatedResult) => {\n options.onToolCompleteMessage(name, result, truncatedResult)\n options.updateActiveToolName(null)\n },\n onPhaseChange: options.onPhaseChange,\n }\n}","/**\n * WebValidationEnforcer — shared subclass of BaseValidationEnforcer\n * for browser-based agents (Magic webapp, future web agents).\n *\n * Provides:\n * • Missing tool-call warning (non-terminal response without an executable control segment)\n * • API error surfacing\n * • Browser-compatible logging (no chalk, no file I/O)\n *\n * Unlike Hammer's ValidationEnforcer, this does NOT include:\n * • ListSkills/ReadSkill-first enforcement (no skills concept in web)\n * • Init error handlers (web agents use simpler init flow)\n * • File system session persistence\n */\n\nimport {\n BaseValidationEnforcer,\n type ConversationSink,\n} from \"./validation-enforcer\"\n\n/**\n * WebValidationEnforcer — lightweight validation enforcement for\n * browser-based agents.\n *\n * Wire up with `createConversationSink(...)` against the underlying\n * message store:\n * ```ts\n * const sink = createConversationSink((role, content) =>\n * memory.appendMessage(role, content)\n * )\n * const enforcer = new WebValidationEnforcer(sink)\n * ```\n */\nexport class WebValidationEnforcer extends BaseValidationEnforcer {\n /** Optional callback for logging (default: console). */\n private onLog?: (level: \"warn\" | \"error\", message: string) => void\n\n constructor(\n sink: ConversationSink,\n opts?: { onLog?: (level: \"warn\" | \"error\", message: string) => void },\n ) {\n super(sink)\n this.onLog = opts?.onLog\n }\n\n // ── Protected overrides ──────────────────────────────────────────\n\n protected override logWarning(message: string): void {\n if (this.onLog) {\n this.onLog(\"warn\", message)\n } else {\n console.warn(`[Agent] ⚠ ${message}`)\n }\n }\n\n protected override logError(message: string): void {\n if (this.onLog) {\n this.onLog(\"error\", message)\n } else {\n console.error(`[Agent] ${message}`)\n }\n }\n\n protected override async surfaceValidationContext(error: Error): Promise<void> {\n const rawContent = this.readValidationRawContent(error)\n if (!rawContent) {\n return\n }\n\n await this.sink.addMessage(\"assistant\", rawContent)\n }\n}\n","import type { AgentMachineState } from \"./agent-machine\"\nimport type { TodoItem } from \"./todo-types\"\n\nexport type AgentPhase =\n | \"idle\"\n | \"thinking\"\n | \"tool-calling\"\n | \"complete\"\n | \"error\"\n\nexport interface AgentMessage {\n id: string\n role: \"user\" | \"assistant\" | \"tool\"\n content: string\n diagnosticLevel?: \"error\" | \"warning\"\n diagnosticSource?: \"agent-feedback\"\n toolName?: string\n toolSuccess?: boolean\n reasoning?: string\n rawContent?: string\n timestamp: number\n}\n\nexport interface AgentState {\n phase: AgentPhase\n messages: AgentMessage[]\n streamingContent: string\n actionCount: number\n error: string | null\n activeToolName: string | null\n todoItems: TodoItem[]\n}\n\nexport function createInitialWebAgentState(): AgentState {\n return {\n phase: \"idle\",\n messages: [],\n streamingContent: \"\",\n actionCount: 0,\n error: null,\n activeToolName: null,\n todoItems: [],\n }\n}\n\nexport function machineStateToWebAgentPhase(\n state: AgentMachineState,\n): AgentPhase {\n switch (state) {\n case \"idle\":\n return \"idle\"\n case \"prompting\":\n case \"analyzing\":\n return \"thinking\"\n case \"executing\":\n case \"updating\":\n return \"tool-calling\"\n case \"done\":\n return \"complete\"\n case \"failed\":\n return \"error\"\n }\n}\n\nexport function createWebAgentMessageIdGenerator(\n prefix = \"msg\",\n): () => string {\n let counter = 0\n\n return () => `${prefix}-${Date.now()}-${++counter}`\n}","import {\n getCompactionProvider,\n getProviderConfig,\n} from \"./configure\"\n\nimport type { AgentMachineState } from \"./agent-machine\"\nimport type { AgentLoopDeps, ParsedStepInput } from \"./agent-loop\"\nimport { createAgentMemoryLayer } from \"./agent-memory-factory\"\nimport type {\n AgentMemoryLayer,\n ToolMemoryExtractor,\n} from \"./agent-memory-layer\"\nimport {\n coerceToolCallToDefinition,\n DEFAULT_ALLOWED_RUN_TARGETS,\n} from \"./command-response-utils\"\nimport type { RunInvocationTarget } from \"./command-response-utils\"\nimport { LLMClient } from \"./llm-client\"\nimport {\n buildAgentSystemPrompt,\n buildCoreStaticRules,\n} from \"./prompt-helpers\"\nimport type {\n RuntimeSnapshotUpdater,\n RuntimeStore,\n} from \"./runtime-store\"\nimport {\n parseResponseWithRecovery,\n buildParseFeedback,\n} from \"./tool-call-recovery\"\nimport {\n ToolLoopAgentRuntime,\n type ToolLoopAgentRuntimeDeps,\n type ToolLoopRuntimeLLMRequest,\n type ToolLoopRuntimeLLMResponse,\n type ToolLoopRuntimeRunStepResult,\n type ToolLoopRuntimeSetup,\n type ToolLoopRuntimeStepContext,\n} from \"./tool-loop-agent-runtime\"\nimport { StreamingToolParser } from \"./streaming-tool-parser\"\nimport type {\n ChatMessage,\n ToolDefinition,\n ToolResult,\n} from \"./types\"\nimport {\n createConversationSink,\n} from \"./validation-enforcer\"\nimport {\n applyIdleWebAgentState,\n applyInitialWebAgentRunState,\n createToolAgentMessage,\n createWebToolLoopCallbacks,\n PendingAgentMessageBuffer,\n} from \"./web-runtime-tooling\"\nimport { WebValidationEnforcer } from \"./web-validation-enforcer\"\nimport type { TodoItem } from \"./todo-types\"\nimport {\n createWebAgentMessageIdGenerator,\n machineStateToWebAgentPhase,\n type AgentMessage,\n type AgentPhase,\n} from \"./web-agent-types\"\n\nexport interface WebToolLoopRuntimeStateLike<\n TMessage extends AgentMessage = AgentMessage,\n> {\n phase: AgentPhase\n messages: TMessage[]\n streamingContent: string\n actionCount: number\n error: string | null\n activeToolName: string | null\n todoItems: TodoItem[]\n}\n\nconst STREAMING_CONTENT_TOKEN_BATCH_SIZE = 12\n\ntype WebToolLoopRuntimeError = Error & {\n isWebParseFailure?: boolean\n rawContent?: string\n alreadySurfacedFatalError?: boolean\n}\n\nexport const suppressWebValidationLog = (\n _level: \"warn\" | \"error\",\n _message: string,\n): void => {}\n\nexport function readDiagnosticLevel(\n content: string,\n): AgentMessage[\"diagnosticLevel\"] | undefined {\n const trimmedContent = content.trimStart()\n\n if (trimmedContent.startsWith(\"⚠️ ERROR:\")) {\n return \"error\"\n }\n\n if (trimmedContent.startsWith(\"⚠️ WARNING:\")) {\n return \"warning\"\n }\n\n return undefined\n}\n\nexport function readDiagnosticSource(\n content: string,\n): AgentMessage[\"diagnosticSource\"] | undefined {\n const trimmedContent = content.trimStart()\n\n if (\n trimmedContent.startsWith(\"⚠️ ERROR:\")\n || trimmedContent.startsWith(\"⚠️ WARNING:\")\n ) {\n return \"agent-feedback\"\n }\n\n return undefined\n}\n\nexport function mapConversationRoleToAgentRole(\n role: \"user\" | \"assistant\" | \"system\" | \"tool\",\n): AgentMessage[\"role\"] {\n if (role === \"system\") {\n return \"assistant\"\n }\n\n return role\n}\n\nexport interface CreateWebRuntimeSetupOptions {\n memoryPreset: string\n getToolDefinitions: () => ToolDefinition[]\n executeTool: AgentLoopDeps[\"executeTool\"]\n toolMemoryExtractor?: ToolMemoryExtractor\n validationLog?: (level: \"warn\" | \"error\", message: string) => void\n}\n\nexport interface ExecuteWebLoopRunOptions<\n TState extends WebToolLoopRuntimeStateLike<TMessage>,\n TMessage extends AgentMessage,\n TStepInput extends { runId: number },\n> {\n runId: number\n userTask: string\n stepInput: TStepInput\n createUserMessage: () => TMessage\n applyInitialState: (state: TState, userMessage: TMessage) => TState\n onStepCompleted: (\n step: ToolLoopRuntimeRunStepResult<TStepInput>,\n ) => Promise<void> | void\n createParseFailureMessage?: () => TMessage\n applyParseFailureState?: (state: TState, message: TMessage) => TState\n onBeforeRun?: () => void\n onAfterRun?: () => void\n}\n\nexport interface WebToolLoopAgentRuntimeConstructorOptions<\n TState,\n TStepInput,\n> extends ToolLoopAgentRuntimeDeps<TStepInput> {\n store: RuntimeStore<TState>\n messageIdPrefix: string\n getToolDefinitions: () => ToolDefinition[]\n memoryPreset: string\n executeTool: AgentLoopDeps[\"executeTool\"]\n systemIdentity?: string\n extraRules: string\n temperature: number\n maxTokens: number\n toolMemoryExtractor?: ToolMemoryExtractor\n validationLog?: (level: \"warn\" | \"error\", message: string) => void\n allowedRunTargets?: readonly RunInvocationTarget[]\n logLabel?: string\n logFullSystemPromptOnChange?: boolean\n logFullLlmMessages?: boolean\n}\n\nexport abstract class WebToolLoopAgentRuntime<\n TState extends WebToolLoopRuntimeStateLike<TMessage>,\n TMessage extends AgentMessage = AgentMessage,\n TStepInput extends { runId: number } = { runId: number },\n> extends ToolLoopAgentRuntime<AgentMemoryLayer, WebValidationEnforcer, TStepInput> {\n protected readonly store: RuntimeStore<TState>\n protected readonly pendingToolMessages = new PendingAgentMessageBuffer<TMessage>()\n\n private readonly createMessageId: () => string\n private readonly runtimeToolDefinitions: () => ToolDefinition[]\n private readonly memoryPreset: string\n private readonly executeTool: AgentLoopDeps[\"executeTool\"]\n private readonly systemIdentity?: string\n private readonly extraRules: string\n private readonly temperature: number\n private readonly maxTokens: number\n private readonly toolMemoryExtractor?: ToolMemoryExtractor\n private readonly validationLog?: (level: \"warn\" | \"error\", message: string) => void\n private readonly allowedRunTargets: readonly RunInvocationTarget[]\n private readonly logLabel: string\n private readonly logFullSystemPromptOnChange: boolean\n private readonly logFullLlmMessages: boolean\n private lastLoggedSystemPrompt: string | null = null\n protected abortController: AbortController | null = null\n protected memory: AgentMemoryLayer | null = null\n protected enforcer: WebValidationEnforcer | null = null\n protected running = false\n protected activeRunId: number | null = null\n protected nextRunId = 0\n protected inFlightRunPromise: Promise<void> | null = null\n private pendingDestroyPromise: Promise<void> | null = null\n private pendingSurfacedMessages: TMessage[] = []\n private pendingStreamingContent = new Map<number, string>()\n private pendingStreamingTokenCounts = new Map<number, number>()\n\n protected constructor(\n options: WebToolLoopAgentRuntimeConstructorOptions<TState, TStepInput>,\n ) {\n const {\n store,\n messageIdPrefix,\n getToolDefinitions,\n memoryPreset,\n executeTool,\n systemIdentity,\n extraRules,\n temperature,\n maxTokens,\n toolMemoryExtractor,\n validationLog,\n allowedRunTargets,\n logLabel,\n logFullSystemPromptOnChange,\n logFullLlmMessages,\n loopCallbacks: externalLoopCallbacks,\n ...deps\n } = options\n\n let syncPhaseHandler: (machineState?: AgentMachineState) => void = () => {}\n let activeToolNameUpdater: (activeToolName: string | null) => void = () => {}\n let toolCompleteHandler: (name: string, result: ToolResult, truncatedStr: string) => void = () => {}\n\n const resolvedLoopCallbacks = externalLoopCallbacks ?? createWebToolLoopCallbacks({\n getToolDefinitions,\n updateActiveToolName: (name) => activeToolNameUpdater(name),\n onToolCompleteMessage: (name, result, str) => toolCompleteHandler(name, result, str),\n onPhaseChange: (state) => syncPhaseHandler(state),\n })\n\n super({ ...deps, loopCallbacks: resolvedLoopCallbacks })\n\n this.store = store\n this.createMessageId = createWebAgentMessageIdGenerator(messageIdPrefix)\n this.runtimeToolDefinitions = getToolDefinitions\n this.memoryPreset = memoryPreset\n this.executeTool = executeTool\n this.systemIdentity = systemIdentity\n this.extraRules = extraRules\n this.temperature = temperature\n this.maxTokens = maxTokens\n this.toolMemoryExtractor = toolMemoryExtractor\n this.validationLog = validationLog\n this.allowedRunTargets = allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS\n this.logLabel = logLabel ?? \"WebToolLoopAgentRuntime\"\n this.logFullSystemPromptOnChange = logFullSystemPromptOnChange ?? false\n this.logFullLlmMessages = logFullLlmMessages ?? false\n\n if (!externalLoopCallbacks) {\n syncPhaseHandler = (machineState) => this.syncPhase(machineState)\n activeToolNameUpdater = (activeToolName) => {\n this.updateSnapshotForActiveRun((current) => ({\n ...current,\n activeToolName,\n }))\n }\n toolCompleteHandler = (name, result, truncatedStr) => {\n this.pendingToolMessages.push(createToolAgentMessage({\n id: this.nextMessageId(),\n name,\n content: truncatedStr,\n success: result.success,\n }) as TMessage)\n }\n }\n }\n\n protected async createRuntimeSetup(): Promise<\n ToolLoopRuntimeSetup<AgentMemoryLayer, WebValidationEnforcer>\n > {\n return this.createWebRuntimeSetup({\n memoryPreset: this.memoryPreset,\n getToolDefinitions: this.runtimeToolDefinitions,\n executeTool: this.executeTool,\n toolMemoryExtractor: this.toolMemoryExtractor,\n validationLog: this.validationLog,\n })\n }\n\n protected override getToolDefinitions(): ToolDefinition[] {\n return this.runtimeToolDefinitions()\n }\n\n protected override async ensureStaticContext(memory: AgentMemoryLayer): Promise<void> {\n if (!memory.hasStaticContext()) {\n memory.setStaticContext(buildCoreStaticRules())\n }\n }\n\n protected getAllowedRunTargets(): readonly RunInvocationTarget[] {\n return this.allowedRunTargets\n }\n\n /**\n * Run targets for the parser layer. Always includes \"bash\" so the\n * universal finish signals (`---bash--- exit 0` / `exit 1`) are\n * recognized even when the agent has no bash execution capability.\n */\n private getParserRunTargets(): readonly RunInvocationTarget[] {\n const targets = this.getAllowedRunTargets()\n return targets.includes(\"bash\") ? targets : [...targets, \"bash\" as RunInvocationTarget]\n }\n\n protected override buildSystemPrompt(\n context: ToolLoopRuntimeStepContext<TStepInput>,\n ): string {\n const allowedRunTargets = this.getAllowedRunTargets()\n\n return buildAgentSystemPrompt({\n tools: context.tools,\n identityLine: this.systemIdentity,\n supplementalRules: this.extraRules,\n bashAvailable: allowedRunTargets.includes(\"bash\"),\n backgroundBashAvailable: allowedRunTargets.includes(\"background_bash\"),\n })\n }\n\n protected override buildLLMRequest(\n context: { stepInput?: TStepInput },\n messages: ChatMessage[],\n ): ToolLoopRuntimeLLMRequest {\n return this.buildStreamingLLMRequest(context, messages, {\n temperature: this.temperature,\n maxTokens: this.maxTokens,\n })\n }\n\n protected override async invokeLLM(\n request: ToolLoopRuntimeLLMRequest,\n ): Promise<ToolLoopRuntimeLLMResponse> {\n if (this.logFullSystemPromptOnChange) {\n const fullSystemPrompt = request.messages.find(\n (message) => message.role === \"system\",\n )?.content\n\n if (fullSystemPrompt && fullSystemPrompt !== this.lastLoggedSystemPrompt) {\n this.lastLoggedSystemPrompt = fullSystemPrompt\n console.log(\n `[${this.logLabel}] System prompt changed:\\n${fullSystemPrompt}`,\n )\n }\n }\n\n if (this.logFullLlmMessages) {\n console.log(\n `[${this.logLabel}] Outbound LLM messages:\\n${JSON.stringify(request.messages, null, 2)}`,\n )\n }\n\n return super.invokeLLM(request)\n }\n\n protected override parseStepResponse(\n response: { content: string; finishReason: string },\n tools: ToolDefinition[],\n ) {\n return this.parseRecoveringStepResponse(response, tools)\n }\n\n protected override async onBeforeToolDispatch(\n context: ToolLoopRuntimeStepContext<TStepInput>,\n parsed: ParsedStepInput,\n ): Promise<void> {\n const runId = context.stepInput?.runId\n if (runId === undefined || !this.isRunActive(runId)) {\n return\n }\n\n this.flushPendingStreamingContentForRun(runId)\n\n const toolName = parsed.selectedToolCall?.name ?? null\n if (toolName) {\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n activeToolName: toolName,\n }))\n }\n }\n\n protected nextMessageId(): string {\n return this.createMessageId()\n }\n\n protected updateSnapshot(updater: RuntimeSnapshotUpdater<TState>): void {\n this.store.setSnapshot(updater)\n }\n\n protected isRunActive(runId: number): boolean {\n return this.activeRunId === runId\n }\n\n protected updateSnapshotForActiveRun(\n updater: RuntimeSnapshotUpdater<TState>,\n ): boolean {\n if (this.activeRunId === null) {\n return false\n }\n\n this.updateSnapshot(updater)\n return true\n }\n\n protected updateSnapshotForRun(\n runId: number,\n updater: RuntimeSnapshotUpdater<TState>,\n ): boolean {\n if (!this.isRunActive(runId)) {\n return false\n }\n\n this.updateSnapshot(updater)\n return true\n }\n\n protected async surfaceFatalError(\n error: unknown,\n runId: number,\n ): Promise<Error> {\n const fatalError = error instanceof Error ? error : new Error(String(error))\n const loop = this.runtimeLoop\n\n if (loop) {\n await loop.handleFatalError(fatalError.message)\n this.flushPendingSurfacedMessagesForRun(runId)\n this.syncPhase()\n }\n\n return fatalError\n }\n\n protected appendSurfacedConversationMessage(\n role: \"user\" | \"assistant\" | \"system\" | \"tool\",\n content: string,\n ): void {\n const messageRole = mapConversationRoleToAgentRole(role)\n const surfacedMessage = {\n id: this.nextMessageId(),\n role: messageRole,\n content,\n diagnosticLevel: readDiagnosticLevel(content),\n diagnosticSource: readDiagnosticSource(content),\n timestamp: Date.now(),\n } as TMessage\n\n if (this.activeRunId === null) {\n return\n }\n\n this.pendingSurfacedMessages.push(surfacedMessage)\n }\n\n protected takePendingSurfacedMessagesForRun(runId: number): TMessage[] {\n if (!this.isRunActive(runId) || this.pendingSurfacedMessages.length === 0) {\n return []\n }\n\n const pendingSurfacedMessages = this.pendingSurfacedMessages\n this.pendingSurfacedMessages = []\n return pendingSurfacedMessages\n }\n\n protected flushPendingSurfacedMessagesForRun(runId: number): void {\n const pendingSurfacedMessages = this.takePendingSurfacedMessagesForRun(runId)\n\n if (pendingSurfacedMessages.length === 0) {\n return\n }\n\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n messages: [...state.messages, ...pendingSurfacedMessages],\n }))\n }\n\n protected clearPendingSurfacedMessages(): void {\n this.pendingSurfacedMessages = []\n }\n\n protected appendStreamingToken(runId: number, token: string): void {\n const nextContent = (this.pendingStreamingContent.get(runId) ?? \"\") + token\n const nextCount = (this.pendingStreamingTokenCounts.get(runId) ?? 0) + 1\n\n this.pendingStreamingContent.set(runId, nextContent)\n this.pendingStreamingTokenCounts.set(runId, nextCount)\n\n if (\n nextCount >= STREAMING_CONTENT_TOKEN_BATCH_SIZE\n || token.includes(\"\\n\")\n ) {\n this.flushPendingStreamingContentForRun(runId)\n }\n }\n\n protected flushPendingStreamingContentForRun(runId: number): void {\n const pendingContent = this.pendingStreamingContent.get(runId)\n if (!pendingContent) {\n return\n }\n\n this.pendingStreamingContent.delete(runId)\n this.pendingStreamingTokenCounts.delete(runId)\n\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n streamingContent: state.streamingContent + pendingContent,\n }))\n }\n\n protected clearPendingStreamingContent(runId?: number): void {\n if (typeof runId === \"number\") {\n this.pendingStreamingContent.delete(runId)\n this.pendingStreamingTokenCounts.delete(runId)\n return\n }\n\n this.pendingStreamingContent.clear()\n this.pendingStreamingTokenCounts.clear()\n }\n\n protected syncPhase(machineState?: AgentMachineState): void {\n if (this.activeRunId === null) {\n return\n }\n\n const currentLoop = this.runtimeLoop\n if (!currentLoop) {\n return\n }\n\n const nextMachineState = machineState ?? currentLoop.machineState\n this.updateSnapshotForActiveRun((current) => ({\n ...current,\n phase: machineStateToWebAgentPhase(nextMachineState),\n actionCount: currentLoop.actionCount,\n error: currentLoop.getContext().error ?? null,\n }))\n }\n\n protected async createWebRuntimeSetup(\n options: CreateWebRuntimeSetupOptions,\n ): Promise<ToolLoopRuntimeSetup<AgentMemoryLayer, WebValidationEnforcer>> {\n if (!this.memory) {\n const compactionProviderName = getCompactionProvider()\n if (!compactionProviderName) {\n throw new Error(\n \"hammer-agent: compactionProvider is not configured. \" +\n \"Call configure({ compactionProvider: 'yourProvider' }) before running the agent.\"\n )\n }\n const compactionClient = new LLMClient(\n getProviderConfig(compactionProviderName),\n )\n const { TiktokenEstimator } = await import(\"./tiktoken-estimator\")\n const tokenEstimator = new TiktokenEstimator()\n\n this.memory = createAgentMemoryLayer(options.memoryPreset, {\n compactionClient,\n tokenEstimator,\n getToolDefinitions: options.getToolDefinitions,\n ...(options.toolMemoryExtractor\n ? { toolMemoryExtractor: options.toolMemoryExtractor }\n : {}),\n })\n }\n\n if (!this.enforcer) {\n const sink = createConversationSink((role, content) => {\n this.memory!.appendMessage(role, content)\n this.appendSurfacedConversationMessage(role, content)\n })\n\n this.enforcer = new WebValidationEnforcer(\n sink,\n options.validationLog\n ? { onLog: options.validationLog }\n : undefined,\n )\n }\n\n return {\n memory: this.memory,\n enforcer: this.enforcer,\n conversation: this.memory.toConversationAdapter(),\n loopDeps: {\n executeTool: options.executeTool,\n },\n }\n }\n\n\n\n protected buildStreamingLLMRequest(\n context: { stepInput?: TStepInput },\n messages: ChatMessage[],\n options: {\n temperature: number\n maxTokens: number\n },\n ): ToolLoopRuntimeLLMRequest {\n const runId = context.stepInput?.runId\n const runDetector = new StreamingToolParser({\n allowedRunTargets: this.getParserRunTargets(),\n })\n\n return {\n messages,\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n normalizeResponseContent: () => runDetector.getFullContent(),\n onToken: (token: string) => {\n runDetector.push(token)\n\n if (runId !== undefined) {\n if (runDetector.sealed) {\n this.clearPendingStreamingContent(runId)\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n streamingContent: runDetector.getFullContent(),\n }))\n } else {\n this.appendStreamingToken(runId, token)\n }\n }\n\n if (runDetector.sealed) {\n return true\n }\n\n return false\n },\n }\n }\n\n protected parseRecoveringStepResponse(\n response: { content: string; finishReason: string },\n tools: ToolDefinition[],\n ) {\n if (!response.content || response.content.length === 0) {\n throw new Error(\"Empty response from API\")\n }\n\n let stepParsed\n try {\n stepParsed = parseResponseWithRecovery(response.content, {\n finishReason: response.finishReason,\n allowedRunTargets: this.getParserRunTargets(),\n })\n } catch (error: unknown) {\n const parseError = error instanceof Error\n ? error as WebToolLoopRuntimeError\n : new Error(String(error)) as WebToolLoopRuntimeError\n\n parseError.isWebParseFailure = true\n parseError.rawContent = response.content\n throw parseError\n }\n\n if (!stepParsed) {\n const parseError: WebToolLoopRuntimeError = new Error(\n buildParseFeedback(response.content),\n )\n parseError.isWebParseFailure = true\n parseError.rawContent = response.content\n throw parseError\n }\n\n return {\n outcome: stepParsed.outcome,\n reasoning: stepParsed.reasoning,\n selectedToolCall: coerceToolCallToDefinition(\n stepParsed.selectedToolCall,\n tools,\n ),\n wasTruncated: response.finishReason === \"length\",\n rawContent: response.content,\n }\n }\n\n protected async startSerializedRun(\n execute: (runId: number) => Promise<void>,\n ): Promise<void> {\n if (this.running) {\n return\n }\n\n const previousRunPromise = this.inFlightRunPromise\n if (previousRunPromise) {\n await previousRunPromise\n }\n\n const runId = ++this.nextRunId\n this.activeRunId = runId\n\n const runPromise = execute(runId)\n this.inFlightRunPromise = runPromise\n\n try {\n await runPromise\n } finally {\n if (this.inFlightRunPromise === runPromise) {\n this.inFlightRunPromise = null\n }\n }\n }\n\n protected async executeWebLoopRun(\n options: ExecuteWebLoopRunOptions<TState, TMessage, TStepInput>,\n ): Promise<void> {\n const {\n runId,\n userTask,\n stepInput,\n createUserMessage,\n applyInitialState,\n onStepCompleted,\n createParseFailureMessage,\n applyParseFailureState,\n onBeforeRun,\n onAfterRun,\n } = options\n\n let finalPhase: AgentPhase | null = null\n let finalError: string | null = null\n\n this.running = true\n this.clearPendingSurfacedMessages()\n this.pendingToolMessages.clear()\n onBeforeRun?.()\n\n const ac = new AbortController()\n this.abortController = ac\n\n const userMessage = createUserMessage()\n\n this.updateSnapshotForRun(runId, (state) =>\n applyInitialState(state, userMessage))\n\n try {\n await this.beginRun(userTask)\n this.syncPhase()\n\n while (!ac.signal.aborted) {\n const currentLoop = this.runtimeLoop\n if (!currentLoop) {\n return\n }\n\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n streamingContent: \"\",\n activeToolName: null,\n }))\n this.clearPendingStreamingContent(runId)\n\n try {\n const step = await this.runStep({\n task: userTask,\n actionCount: currentLoop.actionCount + 1,\n signal: ac.signal,\n stepInput,\n })\n\n if (ac.signal.aborted) {\n return\n }\n\n await onStepCompleted(step)\n this.flushPendingSurfacedMessagesForRun(runId)\n this.syncPhase()\n\n if (step.result.outcome === \"success\") {\n finalPhase = \"complete\"\n finalError = currentLoop.getContext().error ?? null\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n phase: \"complete\",\n actionCount: currentLoop.actionCount,\n error: currentLoop.getContext().error ?? null,\n }))\n }\n\n if (step.result.outcome === \"failure\") {\n finalPhase = \"error\"\n finalError =\n currentLoop.getContext().error\n ?? \"Agent reported failure\"\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n phase: \"error\",\n actionCount: currentLoop.actionCount,\n error:\n currentLoop.getContext().error\n ?? state.error\n ?? \"Agent reported failure\",\n }))\n }\n\n if (step.result.outcome !== \"continue\") {\n break\n }\n } catch (stepError: unknown) {\n if (ac.signal.aborted) {\n return\n }\n\n const loop = this.runtimeLoop\n const error = stepError instanceof Error\n ? stepError as WebToolLoopRuntimeError\n : new Error(String(stepError)) as WebToolLoopRuntimeError\n\n if (!loop) {\n throw error\n }\n\n if (error.alreadySurfacedFatalError) {\n this.flushPendingStreamingContentForRun(runId)\n this.flushPendingSurfacedMessagesForRun(runId)\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n phase: \"error\",\n error: error.message,\n streamingContent: \"\",\n activeToolName: null,\n }))\n finalPhase = \"error\"\n finalError = error.message\n break\n }\n\n if (error.isWebParseFailure) {\n this.clearPendingStreamingContent(runId)\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n streamingContent: \"\",\n activeToolName: null,\n }))\n }\n\n await loop.classifyStepError(error)\n\n if (\n error.isWebParseFailure\n && createParseFailureMessage\n && applyParseFailureState\n ) {\n const parseFailureMessage = createParseFailureMessage()\n\n this.updateSnapshotForRun(runId, (state) =>\n applyParseFailureState(state, parseFailureMessage))\n }\n\n this.flushPendingStreamingContentForRun(runId)\n this.flushPendingSurfacedMessagesForRun(runId)\n this.syncPhase()\n\n continue\n }\n }\n } catch (error: unknown) {\n if (!ac.signal.aborted) {\n this.flushPendingStreamingContentForRun(runId)\n const fatalError = await this.surfaceFatalError(error, runId)\n const errorMessage = fatalError.message\n finalPhase = \"error\"\n finalError = errorMessage\n\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n phase: \"error\",\n error: errorMessage,\n }))\n }\n } finally {\n this.clearPendingStreamingContent(runId)\n if (this.activeRunId === runId) {\n this.activeRunId = null\n }\n\n if (this.abortController === ac) {\n this.running = false\n this.abortController = null\n this.pendingToolMessages.clear()\n onAfterRun?.()\n\n if (!ac.signal.aborted && finalPhase) {\n this.updateSnapshot((state) => ({\n ...state,\n phase: finalPhase,\n error: finalError,\n }))\n }\n }\n\n this.runtimeLoop?.reset()\n }\n }\n\n protected abortWebRuntime(\n applyAbortState: (state: TState) => TState,\n cleanup?: () => void,\n ): void {\n this.abortController?.abort()\n this.running = false\n this.activeRunId = null\n this.clearPendingSurfacedMessages()\n this.clearPendingStreamingContent()\n this.pendingToolMessages.clear()\n cleanup?.()\n\n const loop = this.runtimeLoop\n if (loop) {\n try {\n loop.sendEvent({ type: \"OUTCOME_FAILURE\", error: \"Aborted by user\" })\n } catch {\n // The machine may already be in a final state.\n }\n }\n\n this.updateSnapshot((state) => applyAbortState(state))\n }\n\n private scheduleRuntimeDestroy(): void {\n if (this.pendingDestroyPromise) {\n this.inFlightRunPromise = this.pendingDestroyPromise\n return\n }\n\n const basePromise = this.inFlightRunPromise ?? Promise.resolve()\n const destroyPromise = basePromise\n .finally(() => super.destroy())\n .finally(() => {\n if (this.pendingDestroyPromise === destroyPromise) {\n this.pendingDestroyPromise = null\n }\n\n if (this.inFlightRunPromise === destroyPromise) {\n this.inFlightRunPromise = null\n }\n })\n\n this.pendingDestroyPromise = destroyPromise\n this.inFlightRunPromise = destroyPromise\n }\n\n protected resetWebRuntime(cleanup?: () => void): void {\n this.memory = null\n this.enforcer = null\n this.clearPendingSurfacedMessages()\n this.clearPendingStreamingContent()\n this.pendingToolMessages.clear()\n cleanup?.()\n\n this.scheduleRuntimeDestroy()\n\n this.store.resetSnapshot()\n }\n\n protected async clearWebRuntimeState(cleanup?: () => void): Promise<void> {\n this.memory = null\n this.enforcer = null\n this.activeRunId = null\n this.clearPendingSurfacedMessages()\n this.clearPendingStreamingContent()\n this.pendingToolMessages.clear()\n cleanup?.()\n }\n\n protected defaultWebAbort(): void {\n this.abortWebRuntime((state) => applyIdleWebAgentState(state))\n }\n\n protected defaultWebReset(): void {\n this.defaultWebAbort()\n this.resetWebRuntime()\n }\n\n protected override async onDestroy(): Promise<void> {\n await this.clearWebRuntimeState()\n }\n\n protected async executeDefaultWebRun(\n userTask: string,\n options?: {\n shouldSurfaceAssistantContent?: (reasoning?: string, rawContent?: string) => boolean\n onNonContinueStep?: () => Promise<void>\n onBeforeRun?: () => void\n onAfterRun?: () => void\n },\n ): Promise<void> {\n await this.startSerializedRun((runId) =>\n this.executeWebLoopRun({\n runId,\n userTask,\n stepInput: { runId } as TStepInput,\n onBeforeRun: options?.onBeforeRun,\n createUserMessage: () => ({\n id: this.nextMessageId(),\n role: \"user\" as const,\n content: userTask,\n timestamp: Date.now(),\n }) as TMessage,\n applyInitialState: (state, userMessage) =>\n applyInitialWebAgentRunState(state, userMessage),\n onStepCompleted: async (step) => {\n const assistantContent = step.parsed.reasoning?.trim()\n const rawAssistantContent = step.parsed.rawContent?.trim()\n const pendingSurfacedMessages = this.takePendingSurfacedMessagesForRun(runId)\n const pendingToolMessages = this.pendingToolMessages.takeForRun(\n runId,\n (activeRunId) => this.isRunActive(activeRunId),\n )\n\n const shouldSurface = step.result.outcome !== \"failure\"\n && (options?.shouldSurfaceAssistantContent\n ? options.shouldSurfaceAssistantContent(assistantContent, rawAssistantContent)\n : Boolean(rawAssistantContent || assistantContent))\n\n const newMessages: TMessage[] = []\n\n if (shouldSurface) {\n newMessages.push({\n id: this.nextMessageId(),\n role: \"assistant\" as const,\n content: assistantContent || rawAssistantContent || \"\",\n reasoning: assistantContent,\n rawContent: rawAssistantContent,\n timestamp: Date.now(),\n } as TMessage)\n }\n\n newMessages.push(...pendingSurfacedMessages, ...pendingToolMessages)\n\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n ...(newMessages.length > 0\n ? { messages: [...state.messages, ...newMessages] }\n : {}),\n streamingContent: \"\",\n activeToolName: null,\n }))\n\n if (step.result.outcome !== \"continue\" && options?.onNonContinueStep) {\n await options.onNonContinueStep()\n }\n },\n onAfterRun: options?.onAfterRun,\n }))\n }\n}","export type RuntimeSubscriber = () => void\n\nexport type RuntimeSnapshotUpdater<TSnapshot> =\n | TSnapshot\n | ((current: TSnapshot) => TSnapshot)\n\nexport interface RuntimeStore<TSnapshot> {\n subscribe: (subscriber: RuntimeSubscriber) => () => void\n getSnapshot: () => TSnapshot\n getServerSnapshot: () => TSnapshot\n setSnapshot: (updater: RuntimeSnapshotUpdater<TSnapshot>) => TSnapshot\n resetSnapshot: () => TSnapshot\n}\n\nexport interface RuntimeController<\n TSnapshot,\n TActions extends Record<string, unknown>,\n TRefs extends Record<string, unknown> = {},\n> {\n store: RuntimeStore<TSnapshot>\n actions: TActions\n refs: TRefs\n}\n\nexport function createRuntimeStore<TSnapshot>(\n createInitialSnapshot: () => TSnapshot,\n): RuntimeStore<TSnapshot> {\n let snapshot = createInitialSnapshot()\n const subscribers = new Set<RuntimeSubscriber>()\n\n const notifySubscribers = () => {\n for (const subscriber of subscribers) {\n subscriber()\n }\n }\n\n return {\n subscribe(subscriber) {\n subscribers.add(subscriber)\n return () => {\n subscribers.delete(subscriber)\n }\n },\n getSnapshot() {\n return snapshot\n },\n getServerSnapshot() {\n return snapshot\n },\n setSnapshot(updater) {\n snapshot = typeof updater === \"function\"\n ? (updater as (current: TSnapshot) => TSnapshot)(snapshot)\n : updater\n notifySubscribers()\n return snapshot\n },\n resetSnapshot() {\n snapshot = createInitialSnapshot()\n notifySubscribers()\n return snapshot\n },\n }\n}\n\nexport function defineRuntimeController<\n TSnapshot,\n TActions extends Record<string, unknown>,\n TRefs extends Record<string, unknown> = {},\n>(\n controller: RuntimeController<TSnapshot, TActions, TRefs>,\n): RuntimeController<TSnapshot, TActions, TRefs> {\n return controller\n}","export const DEFAULT_THREAD_AUTO_SCROLL_BOTTOM_THRESHOLD = 24\n\nexport type ScrollMetrics = {\n scrollHeight: number\n scrollTop: number\n clientHeight: number\n}\n\nexport function getDistanceFromBottom({\n scrollHeight,\n scrollTop,\n clientHeight,\n}: ScrollMetrics): number {\n return scrollHeight - scrollTop - clientHeight\n}\n\nexport function shouldAutoScrollThread(\n scrollMetrics: ScrollMetrics,\n threshold = DEFAULT_THREAD_AUTO_SCROLL_BOTTOM_THRESHOLD,\n): boolean {\n return getDistanceFromBottom(scrollMetrics) <= threshold\n}\n\nexport function getToolLogSummaryLine(content: string): string {\n for (const line of content.split(/\\r?\\n/)) {\n if (line.trim().length > 0) {\n return line\n }\n }\n\n return \"\"\n}\n\nexport function stripDiagnosticMessagePrefix(content: string): string {\n return content.replace(/^⚠️\\s+(?:ERROR|WARNING):\\s*/, \"\")\n}\n\nexport function getDiagnosticSummaryLine(content: string): string {\n const strippedContent = stripDiagnosticMessagePrefix(content)\n const summaryLine = getToolLogSummaryLine(strippedContent)\n\n return summaryLine.length > 0 ? summaryLine : getToolLogSummaryLine(content)\n}\n\nexport function buildToolLogRevealFrames(\n content: string,\n targetFrameCount = 40,\n): string[] {\n if (content.length === 0) {\n return [\"\"]\n }\n\n const sanitizedTargetFrameCount = Math.max(1, targetFrameCount)\n const targetCharsPerFrame = Math.max(\n 1,\n Math.ceil(content.length / sanitizedTargetFrameCount),\n )\n const segments = mergeStructuralToolLogSegments(\n splitToolLogRevealSegments(content),\n )\n const frames: string[] = []\n let pendingFrame = \"\"\n let revealedContent = \"\"\n\n for (const segment of segments) {\n if (\n pendingFrame.length > 0\n && pendingFrame.length + segment.length > targetCharsPerFrame\n ) {\n revealedContent += pendingFrame\n frames.push(revealedContent)\n pendingFrame = \"\"\n }\n\n pendingFrame += segment\n\n if (pendingFrame.length >= targetCharsPerFrame) {\n revealedContent += pendingFrame\n frames.push(revealedContent)\n pendingFrame = \"\"\n }\n }\n\n if (pendingFrame.length > 0) {\n revealedContent += pendingFrame\n frames.push(revealedContent)\n }\n\n if (frames.length === 0 || frames.at(-1) !== content) {\n frames.push(content)\n }\n\n return frames\n}\n\nfunction mergeStructuralToolLogSegments(segments: string[]): string[] {\n const mergedSegments: string[] = []\n\n for (const segment of segments) {\n const previousSegment = mergedSegments.at(-1)\n\n if (previousSegment && shouldMergeToolLogSegmentWithFollowing(previousSegment)) {\n mergedSegments[mergedSegments.length - 1] = previousSegment + segment\n continue\n }\n\n mergedSegments.push(segment)\n }\n\n return mergedSegments\n}\n\nfunction shouldMergeToolLogSegmentWithFollowing(segment: string): boolean {\n const trimmedSegment = segment.trim()\n\n if (trimmedSegment.length === 0) {\n return true\n }\n\n if (segment.startsWith(\"$ \")) {\n return true\n }\n\n return (\n trimmedSegment === \"{\"\n || trimmedSegment === \"[\"\n || trimmedSegment.endsWith(\"{\")\n || trimmedSegment.endsWith(\"[\")\n )\n}\n\nfunction splitToolLogRevealSegments(content: string): string[] {\n const segments: string[] = []\n let currentSegment = \"\"\n let inQuotedString = false\n let isEscaped = false\n\n for (const character of content) {\n currentSegment += character\n\n if (inQuotedString) {\n if (isEscaped) {\n isEscaped = false\n continue\n }\n\n if (character === \"\\\\\") {\n isEscaped = true\n continue\n }\n\n if (character === '\"') {\n inQuotedString = false\n }\n\n continue\n }\n\n if (character === '\"') {\n inQuotedString = true\n continue\n }\n\n if (\n character === \"\\n\"\n || character === \",\"\n || character === \"}\"\n || character === \"]\"\n ) {\n segments.push(currentSegment)\n currentSegment = \"\"\n }\n }\n\n if (currentSegment.length > 0) {\n segments.push(currentSegment)\n }\n\n return segments.length > 0 ? segments : [content]\n}","import type { ToolResult } from \"./types\"\n\nexport type WebSearchToolActionInput = {\n tool: \"BraveWebSearch\" | \"BochaWebSearch\"\n input: Record<string, unknown>\n}\n\ntype WebSearchToolActionDeps = {\n executeWebSearch: (tool: \"BraveWebSearch\" | \"BochaWebSearch\", input: Record<string, unknown>) => Promise<ToolResult>\n}\n\nexport function createWebSearchToolActions(deps: WebSearchToolActionDeps) {\n return {\n executeWebTool: async (input: WebSearchToolActionInput): Promise<ToolResult> => {\n if (input.tool !== \"BraveWebSearch\" && input.tool !== \"BochaWebSearch\") {\n throw new Error(`Unknown tool: ${String(input.tool)}`)\n }\n\n return deps.executeWebSearch(input.tool, input.input)\n },\n }\n}","/**\n * Base Tool class — all shared tools extend this.\n *\n * Mirrors the Hammer agent tool format so code is shared between\n * apps/hammer and apps/tauri via the DRY principle.\n *\n * Filesystem-aware tools should extend SystemTool directly, which adds\n * `validatePath()` on top of this base class.\n */\n\nimport type {\n ToolDefinition,\n ToolDefinitionMetadata,\n ToolResult,\n} from \"./types\"\nimport { buildToolUsageExample } from \"./tool-usage-examples\"\n\n// ---------------------------------------------------------------------------\n// Types (re-exported so consumers don't need a second import)\n// ---------------------------------------------------------------------------\n\n/** Tool parameter schema — same shape as ToolDefinition[\"parameters\"]. */\nexport type ToolSchema = ToolDefinition[\"parameters\"]\n\n/** Tool metadata — generic version (Hammer extends this with constrained categories). */\nexport interface ToolMetadata extends ToolDefinitionMetadata {\n requirements: string[]\n}\n\n// ---------------------------------------------------------------------------\n// Abstract base class\n// ---------------------------------------------------------------------------\n\n/**\n * Structural interface for any tool that can be registered in a ToolRegistry.\n * Using an interface lets both this class hierarchy and external class\n * hierarchies (e.g. @shared/tools) be stored in the same registry without\n * requiring a shared base-class inheritance chain.\n */\nexport interface ToolLike {\n execute(params: Record<string, any>): Promise<ToolResult>\n getName(): string\n getDescription(): string\n getSchema(): ToolSchema\n getUsageExample(): string | undefined\n getMetadata(): ToolMetadata\n toDefinition(): ToolDefinition\n}\n\nexport abstract class Tool implements ToolLike {\n protected workspaceRoot: string\n\n constructor(workspaceRoot: string = \"\") {\n this.workspaceRoot = workspaceRoot\n }\n\n /**\n * Get tool metadata — capabilities, categories, requirements.\n * Override in subclasses.\n */\n getMetadata(): ToolMetadata {\n return {\n category: \"general\",\n capabilities: [],\n requirements: [],\n }\n }\n\n /** Execute the tool — must be implemented by subclasses. */\n abstract execute(params: Record<string, any>): Promise<ToolResult>\n\n /** Get tool name. */\n abstract getName(): string\n\n /** Get tool description. */\n abstract getDescription(): string\n\n /** Get parameter schema. */\n abstract getSchema(): ToolSchema\n\n /** Get an explicit usage example shown in tool prompts. */\n getUsageExample(): string | undefined {\n return buildToolUsageExample({\n name: this.getName(),\n parameters: this.getSchema(),\n metadata: this.getMetadata(),\n })\n }\n\n /** Convert this tool instance to a ToolDefinition for LLM consumption. */\n toDefinition(): ToolDefinition {\n return {\n name: this.getName(),\n description: this.getDescription(),\n usageExample: this.getUsageExample(),\n parameters: this.getSchema(),\n metadata: this.getMetadata(),\n }\n }\n}\n","/**\n * Shared ToolRegistry infrastructure.\n *\n * This mirrors the Hammer and Magic registry shape: a real\n * Map<string, Tool> registry with registration, lookup, execution,\n * definition generation, and executor creation.\n */\n\nimport type { ToolCall, ToolDefinition, ToolResult } from \"./types\"\nimport {\n DEFAULT_RUN_COMMAND_REGISTRY,\n executeToolCallWithRunCommands,\n type RunCommandRegistry,\n type RunInvocationTarget,\n} from \"./run-command-registry\"\n\nimport { Tool, type ToolLike } from \"./Tool\"\n\ntype ToolExecutor = (toolCall: ToolCall) => Promise<ToolResult>\ntype BashExecutor = (command: string) => Promise<ToolResult>\ntype BackgroundBashExecutor = (command: string) => Promise<ToolResult>\n\nexport interface ToolRegistryMissingToolContext {\n name: string\n availableToolNames: string[]\n}\n\nexport interface ToolRegistryBeforeExecuteContext {\n name: string\n parameters: Record<string, any>\n registry: ToolRegistry\n}\n\nexport interface ToolRegistryOptions {\n tools?: Iterable<ToolLike>\n canExecute?: boolean | (() => boolean)\n executeBash?: BashExecutor\n executeBackgroundBash?: BackgroundBashExecutor\n runCommandRegistry?: RunCommandRegistry\n onMissingTool?: (\n context: ToolRegistryMissingToolContext,\n ) => Error | string\n beforeExecute?: (\n context: ToolRegistryBeforeExecuteContext,\n ) => Promise<ToolResult | void> | ToolResult | void\n}\n\nfunction isToolRegistryOptions(\n value: Iterable<ToolLike> | ToolRegistryOptions,\n): value is ToolRegistryOptions {\n if (!value || typeof value !== \"object\") {\n return false\n }\n\n return (\n \"tools\" in value ||\n \"canExecute\" in value ||\n \"executeBash\" in value ||\n \"executeBackgroundBash\" in value ||\n \"runCommandRegistry\" in value ||\n \"onMissingTool\" in value ||\n \"beforeExecute\" in value\n )\n}\n\nexport function createToolRegistry(\n tools: Iterable<ToolLike> = [],\n options: Omit<ToolRegistryOptions, \"tools\"> = {},\n): ToolRegistry {\n return new ToolRegistry({\n ...options,\n tools,\n })\n}\n\nexport class ToolRegistry {\n protected tools: Map<string, ToolLike>\n private canExecuteOverride?: boolean | (() => boolean)\n private bashExecutor?: BashExecutor\n private backgroundBashExecutor?: BackgroundBashExecutor\n private runCommandRegistry: RunCommandRegistry\n private onMissingTool?: ToolRegistryOptions[\"onMissingTool\"]\n private beforeExecute?: ToolRegistryOptions[\"beforeExecute\"]\n\n constructor(toolsOrOptions: Iterable<ToolLike> | ToolRegistryOptions = []) {\n this.tools = new Map()\n\n const options = isToolRegistryOptions(toolsOrOptions)\n ? toolsOrOptions\n : { tools: toolsOrOptions }\n\n this.canExecuteOverride = options.canExecute\n this.bashExecutor = options.executeBash\n this.backgroundBashExecutor = options.executeBackgroundBash\n this.runCommandRegistry = options.runCommandRegistry ?? DEFAULT_RUN_COMMAND_REGISTRY\n this.onMissingTool = options.onMissingTool\n this.beforeExecute = options.beforeExecute\n this.registerTools(options.tools ?? [])\n }\n\n registerTool(tool: ToolLike): void {\n this.tools.set(tool.getName(), tool)\n }\n\n registerTools(tools: Iterable<ToolLike>): void {\n for (const tool of tools) {\n this.registerTool(tool)\n }\n }\n\n replaceTools(tools: Iterable<ToolLike>): void {\n this.tools.clear()\n this.registerTools(tools)\n }\n\n hasTool(name: string): boolean {\n return this.tools.has(name)\n }\n\n getTool(name: string): ToolLike {\n const tool = this.tools.get(name)\n if (!tool) {\n throw this.buildMissingToolError(name)\n }\n return tool\n }\n\n protected buildMissingToolError(name: string): Error {\n const availableToolNames = Array.from(this.tools.keys()).sort((left, right) =>\n left.localeCompare(right),\n )\n\n if (this.onMissingTool) {\n const result = this.onMissingTool({\n name,\n availableToolNames,\n })\n return result instanceof Error ? result : new Error(result)\n }\n\n return new Error(\n `Tool not found: \"${name}\". Available tools: ${availableToolNames.join(\", \")}`,\n )\n }\n\n getTools(): ToolLike[] {\n return Array.from(this.tools.values())\n }\n\n async executeTool(\n name: string,\n parameters: Record<string, any>,\n ): Promise<ToolResult> {\n return this.executeConcreteTool(name, parameters)\n }\n\n async executeToolCall(toolCall: ToolCall): Promise<ToolResult> {\n return executeToolCallWithRunCommands(\n this.createConcreteRuntime(),\n toolCall,\n this.runCommandRegistry,\n )\n }\n\n private createConcreteRuntime() {\n return {\n getToolDefinitions: () => this.getToolDefinitions(),\n executeTool: (name: string, parameters: Record<string, any>) =>\n this.executeConcreteTool(name, parameters),\n executeBash: this.bashExecutor,\n executeBackgroundBash: this.backgroundBashExecutor,\n }\n }\n\n private async executeConcreteTool(\n name: string,\n parameters: Record<string, any>,\n ): Promise<ToolResult> {\n if (this.beforeExecute) {\n const result = await this.beforeExecute({\n name,\n parameters,\n registry: this,\n })\n\n if (result !== undefined) {\n return result\n }\n }\n\n return this.getTool(name).execute(parameters)\n }\n\n getToolDefinitions(): ToolDefinition[] {\n return this.getTools().map((tool) => tool.toDefinition())\n }\n\n getToolNames(): string[] {\n return Array.from(this.tools.keys())\n }\n\n hasTools(): boolean {\n return this.tools.size > 0\n }\n\n canExecuteBash(): boolean {\n return typeof this.bashExecutor === \"function\"\n }\n\n canExecuteBackgroundBash(): boolean {\n return typeof this.backgroundBashExecutor === \"function\"\n }\n\n getAvailableRunTargets(): readonly RunInvocationTarget[] {\n return this.runCommandRegistry.getAllowedTargets(this.createConcreteRuntime())\n }\n\n getRunCommandRegistry(): RunCommandRegistry {\n return this.runCommandRegistry\n }\n\n canExecute(): boolean {\n if (typeof this.canExecuteOverride === \"function\") {\n return this.canExecuteOverride()\n }\n\n if (typeof this.canExecuteOverride === \"boolean\") {\n return this.canExecuteOverride\n }\n\n return this.hasTools() || this.canExecuteBash() || this.canExecuteBackgroundBash()\n }\n\n createExecutor(): ToolExecutor {\n return async (toolCall: ToolCall): Promise<ToolResult> => {\n try {\n return await this.executeToolCall(toolCall)\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n }\n }\n }\n }\n}\n","import type { ToolDefinition, ToolResult } from \"./types\"\n\nimport { Tool, type ToolMetadata } from \"./Tool\"\n\nexport type ProxyToolExecutor = (\n parameters: Record<string, any>,\n definition: ToolDefinition,\n) => Promise<ToolResult>\n\n/**\n * Shared adapter for exposing a ToolDefinition as a concrete Tool while\n * delegating execution across a runtime boundary.\n */\nexport class ProxyTool extends Tool {\n private definition: ToolDefinition\n private executor: ProxyToolExecutor\n\n constructor(\n definition: ToolDefinition,\n executor: ProxyToolExecutor,\n ) {\n super()\n this.definition = definition\n this.executor = executor\n }\n\n getName(): string {\n return this.definition.name\n }\n\n getDescription(): string {\n return this.definition.description\n }\n\n getSchema(): ToolDefinition[\"parameters\"] {\n return this.definition.parameters\n }\n\n override getMetadata(): ToolMetadata {\n const baseMetadata = super.getMetadata()\n const metadata = this.definition.metadata\n\n return {\n category: metadata?.category ?? baseMetadata.category,\n capabilities: metadata?.capabilities ?? baseMetadata.capabilities,\n requirements: metadata?.requirements ?? baseMetadata.requirements,\n ...(metadata?.memory ? { memory: metadata.memory } : {}),\n ...(metadata?.source ? { source: metadata.source } : {}),\n ...(metadata?.mcpServerName\n ? { mcpServerName: metadata.mcpServerName }\n : {}),\n }\n }\n\n async execute(parameters: Record<string, any>): Promise<ToolResult> {\n return this.executor(parameters, this.definition)\n }\n}","import type { AgentMemoryLayer } from \"./agent-memory-layer\"\r\nimport type { LLMClient } from \"./llm-client\"\r\nimport type {\r\n ChatMessage,\r\n LLMClientResponse,\r\n} from \"./types\"\r\n\r\nexport interface ToolLoopStepExecutorResponse {\r\n content: string\r\n finishReason: string\r\n usage?: LLMClientResponse[\"usage\"]\r\n}\r\n\r\nexport interface ToolLoopStepExecutorCallbacks {\r\n onMessagesBuilt?(messages: ChatMessage[]): void\r\n onToken?(token: string): void\r\n onComplete?(response: ToolLoopStepExecutorResponse): void\r\n onStreamError?(error: Error): void\r\n onLog?(message: string, level: \"info\" | \"warn\" | \"error\"): void\r\n}\r\n\r\nexport interface ToolLoopStepExecutorOptions<TResult> {\r\n llmClient: LLMClient\r\n memoryLayer: Pick<AgentMemoryLayer, \"buildMessages\">\r\n systemPrompt: string\r\n temperature: number\r\n maxTokens: number\r\n frequencyPenalty?: number\r\n presencePenalty?: number\r\n callbacks?: ToolLoopStepExecutorCallbacks\r\n parseResponse(response: {\r\n content: string\r\n finishReason: string\r\n usage?: LLMClientResponse[\"usage\"]\r\n messages: ChatMessage[]\r\n }): TResult\r\n}\r\n\r\nexport interface ToolLoopStepExecutionResult<TResult> {\r\n messages: ChatMessage[]\r\n response: ToolLoopStepExecutorResponse\r\n parsed: TResult\r\n}\r\n\r\nexport async function executeToolLoopStep<TResult>(\r\n options: ToolLoopStepExecutorOptions<TResult>,\r\n): Promise<ToolLoopStepExecutionResult<TResult>> {\r\n const messages = options.memoryLayer.buildMessages(options.systemPrompt)\r\n options.callbacks?.onMessagesBuilt?.(messages)\r\n\r\n const llmResponse = await options.llmClient.chat(\r\n {\r\n messages,\r\n temperature: options.temperature,\r\n maxTokens: options.maxTokens,\r\n stream: true,\r\n frequencyPenalty: options.frequencyPenalty,\r\n presencePenalty: options.presencePenalty,\r\n },\r\n {\r\n onToken: options.callbacks?.onToken,\r\n onError: options.callbacks?.onStreamError,\r\n onLog: options.callbacks?.onLog,\r\n },\r\n )\r\n\r\n const response: ToolLoopStepExecutorResponse = {\r\n content: llmResponse.content,\r\n finishReason: llmResponse.finishReason,\r\n usage: llmResponse.usage,\r\n }\r\n\r\n options.callbacks?.onComplete?.(response)\r\n\r\n return {\r\n messages,\r\n response,\r\n parsed: options.parseResponse({\r\n ...response,\r\n messages,\r\n }),\r\n }\r\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/tiktoken-estimator.ts","../src/configure.ts","../src/schemas.ts","../src/llm-client.ts","../src/agent-machine.ts","../src/tool-usage-examples.ts","../src/tool-call-prompts.ts","../src/unix-tooling.ts","../src/shell-escape-normalization.ts","../src/run-command-registry.ts","../src/command-response-utils.ts","../src/prompt-helpers.ts","../src/tool-helpers.ts","../src/agent-response-parser.ts","../src/tool-call-recovery.ts","../src/agent-loop.ts","../src/tool-loop-agent-runtime.ts","../src/memory-layer.ts","../src/memory-compaction-prompts.ts","../src/memory-compaction-utils.ts","../src/agent-memory-layer.ts","../src/agent-memory-factory.ts","../src/streaming-tool-parser.ts","../src/validation-enforcer.ts","../src/web-runtime-tooling.ts","../src/web-validation-enforcer.ts","../src/web-agent-types.ts","../src/web-tool-loop-agent-runtime.ts","../src/runtime-store.ts","../src/agent-thread.ts","../src/web-search-tool-actions.ts","../src/Tool.ts","../src/registry.ts","../src/ProxyTool.ts","../src/tool-loop-step-executor.ts"],"names":["derivePassthroughParam","derivePositionalParams","toFlagName","isStringType","flagName","parameterEntry","isBooleanType","firstTranscriptArtifactLineIndex","target","detail","setup","entry","TiktokenEstimator"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Precise token estimator using tiktoken (cl100k_base encoding).\n *\n * Separated into its own module so environments can opt into the tiktoken WASM\n * dependency explicitly. Browser runtimes should reach it through async\n * estimator helpers instead of importing it from hot paths.\n */\n\nimport { encoding_for_model, type Tiktoken } from \"tiktoken\"\nimport type { TokenEstimator } from \"./memory-layer\"\n\nexport class TiktokenEstimator implements TokenEstimator {\n private encoder: Tiktoken | null\n\n constructor() {\n try {\n this.encoder = encoding_for_model(\"gpt-4\")\n } catch (err) {\n throw new Error(\n `Failed to initialize tiktoken encoder (WASM may not be available in this environment): ${err instanceof Error ? err.message : err}`,\n )\n }\n }\n\n estimateTokens(text: string): number {\n if (!this.encoder) throw new Error(\"TiktokenEstimator has been disposed\")\n return this.encoder.encode(text).length\n }\n\n dispose(): void {\n if (this.encoder) {\n this.encoder.free()\n this.encoder = null\n }\n }\n}\n","/**\r\n * configure.ts — global configuration store for hammer-agent.\r\n *\r\n * Call `configure(options)` once at app startup to register provider configs\r\n * and optional overrides (timeouts, memory limits, etc.).\r\n *\r\n * Provider configs are looked up by name via `getProviderConfig(name)`.\r\n * Any name not explicitly configured falls back to a runtime error explaining\r\n * what to register — no hardcoded API keys ship in this library.\r\n */\r\n\r\nimport type { LLMProviderConfig, ProviderName } from \"./types\"\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface HammerAgentProviderPreset {\r\n apiKey: string\r\n baseUrl: string\r\n model: string\r\n /** Extra headers merged into every request (e.g. HTTP-Referer for OpenRouter). */\r\n extraHeaders?: Record<string, string>\r\n}\r\n\r\n/**\r\n * Options accepted by `configure()`.\r\n *\r\n * `providers` is a map from provider name to provider config. You only need\r\n * to register the providers your agent actually uses.\r\n *\r\n * All other fields have sensible defaults and are optional.\r\n */\r\nexport interface HammerAgentConfig {\r\n /**\r\n * Named provider presets. Keys are `ProviderName` strings, values are\r\n * provider configs. Pass at minimum the provider(s) your agent uses.\r\n *\r\n * @example\r\n * configure({\r\n * providers: {\r\n * openrouter: { apiKey: process.env.OPENROUTER_KEY!, baseUrl: '...', model: '...' },\r\n * minimax: { apiKey: process.env.MINIMAX_KEY!, baseUrl: '...', model: '...' },\r\n * },\r\n * compactionProvider: 'minimax',\r\n * })\r\n */\r\n providers?: Partial<Record<ProviderName, HammerAgentProviderPreset>>\r\n\r\n /**\r\n * Which provider to use for memory compaction LLM calls.\r\n * Must be a key in `providers`.\r\n * @default first key in `providers`, or throws if not configured\r\n */\r\n compactionProvider?: ProviderName\r\n\r\n // ---- Stream timeout overrides ----------------------------------------\r\n\r\n /**\r\n * Milliseconds without any SSE data before treating the stream as frozen.\r\n * @default 60_000\r\n */\r\n streamInactivityTimeout?: number\r\n\r\n /**\r\n * Maximum milliseconds to wait for the very first SSE chunk.\r\n * @default 120_000\r\n */\r\n firstChunkTimeout?: number\r\n\r\n // ---- Memory layer hard caps ------------------------------------------\r\n\r\n /** @default 100 */\r\n maxRetainedNotes?: number\r\n /** @default 50 */\r\n maxFailedAttempts?: number\r\n /** @default 100 */\r\n maxCodebaseEvidence?: number\r\n /** @default 50 */\r\n maxResearchEvidence?: number\r\n /** @default 50 */\r\n maxConstraints?: number\r\n /** @default 50 */\r\n maxOpenTasks?: number\r\n /** @default 50 */\r\n maxResolvedTasks?: number\r\n\r\n // ---- Compaction LLM defaults ----------------------------------------\r\n\r\n /** @default 0.1 */\r\n compactionLlmTemperature?: number\r\n /** @default 4096 */\r\n compactionLlmMaxTokens?: number\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal config store (module-level singleton)\r\n// ---------------------------------------------------------------------------\r\n\r\ninterface ResolvedConfig {\r\n providers: Map<string, LLMProviderConfig>\r\n compactionProvider: ProviderName | null\r\n streamInactivityTimeout: number\r\n firstChunkTimeout: number\r\n maxRetainedNotes: number\r\n maxFailedAttempts: number\r\n maxCodebaseEvidence: number\r\n maxResearchEvidence: number\r\n maxConstraints: number\r\n maxOpenTasks: number\r\n maxResolvedTasks: number\r\n compactionLlmTemperature: number\r\n compactionLlmMaxTokens: number\r\n}\r\n\r\nconst _config: ResolvedConfig = {\r\n providers: new Map(),\r\n compactionProvider: null,\r\n streamInactivityTimeout: 60_000,\r\n firstChunkTimeout: 120_000,\r\n maxRetainedNotes: 100,\r\n maxFailedAttempts: 50,\r\n maxCodebaseEvidence: 100,\r\n maxResearchEvidence: 50,\r\n maxConstraints: 50,\r\n maxOpenTasks: 50,\r\n maxResolvedTasks: 50,\r\n compactionLlmTemperature: 0.1,\r\n compactionLlmMaxTokens: 4096,\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Configure hammer-agent at startup.\r\n *\r\n * This function is safe to call multiple times — later calls merge over\r\n * earlier ones, so you can split configuration across modules.\r\n *\r\n * @example\r\n * import { configure } from 'hammer-agent'\r\n *\r\n * configure({\r\n * providers: {\r\n * minimax: {\r\n * apiKey: process.env.MINIMAX_KEY!,\r\n * baseUrl: 'https://api.minimaxi.com/v1',\r\n * model: 'MiniMax-M2.7-highspeed',\r\n * },\r\n * },\r\n * compactionProvider: 'minimax',\r\n * })\r\n */\r\nexport function configure(options: HammerAgentConfig): void {\r\n if (options.providers) {\r\n for (const [name, preset] of Object.entries(options.providers)) {\r\n if (preset) {\r\n _config.providers.set(name, preset as LLMProviderConfig)\r\n }\r\n }\r\n }\r\n\r\n if (options.compactionProvider !== undefined) {\r\n _config.compactionProvider = options.compactionProvider\r\n }\r\n\r\n if (options.streamInactivityTimeout !== undefined) {\r\n _config.streamInactivityTimeout = options.streamInactivityTimeout\r\n }\r\n\r\n if (options.firstChunkTimeout !== undefined) {\r\n _config.firstChunkTimeout = options.firstChunkTimeout\r\n }\r\n\r\n if (options.maxRetainedNotes !== undefined) _config.maxRetainedNotes = options.maxRetainedNotes\r\n if (options.maxFailedAttempts !== undefined) _config.maxFailedAttempts = options.maxFailedAttempts\r\n if (options.maxCodebaseEvidence !== undefined) _config.maxCodebaseEvidence = options.maxCodebaseEvidence\r\n if (options.maxResearchEvidence !== undefined) _config.maxResearchEvidence = options.maxResearchEvidence\r\n if (options.maxConstraints !== undefined) _config.maxConstraints = options.maxConstraints\r\n if (options.maxOpenTasks !== undefined) _config.maxOpenTasks = options.maxOpenTasks\r\n if (options.maxResolvedTasks !== undefined) _config.maxResolvedTasks = options.maxResolvedTasks\r\n if (options.compactionLlmTemperature !== undefined) _config.compactionLlmTemperature = options.compactionLlmTemperature\r\n if (options.compactionLlmMaxTokens !== undefined) _config.compactionLlmMaxTokens = options.compactionLlmMaxTokens\r\n}\r\n\r\n/**\r\n * Return the `LLMProviderConfig` registered for `name`.\r\n * Throws a descriptive error if the provider has not been configured.\r\n */\r\nexport function getProviderConfig(name: ProviderName): LLMProviderConfig {\r\n const config = _config.providers.get(name)\r\n if (!config) {\r\n throw new Error(\r\n `hammer-agent: provider \"${name}\" is not configured. ` +\r\n `Call configure({ providers: { \"${name}\": { apiKey, baseUrl, model } } }) before using this provider.`\r\n )\r\n }\r\n\r\n return config\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal accessors (used by lib internals — not re-exported from index)\r\n// ---------------------------------------------------------------------------\r\n\r\nexport function getStreamInactivityTimeout(): number {\r\n return _config.streamInactivityTimeout\r\n}\r\n\r\nexport function getFirstChunkTimeout(): number {\r\n return _config.firstChunkTimeout\r\n}\r\n\r\nexport function getCompactionProvider(): ProviderName | null {\r\n return _config.compactionProvider\r\n}\r\n\r\nexport function getMaxRetainedNotes(): number { return _config.maxRetainedNotes }\r\nexport function getMaxFailedAttempts(): number { return _config.maxFailedAttempts }\r\nexport function getMaxCodebaseEvidence(): number { return _config.maxCodebaseEvidence }\r\nexport function getMaxResearchEvidence(): number { return _config.maxResearchEvidence }\r\nexport function getMaxConstraints(): number { return _config.maxConstraints }\r\nexport function getMaxOpenTasks(): number { return _config.maxOpenTasks }\r\nexport function getMaxResolvedTasks(): number { return _config.maxResolvedTasks }\r\nexport function getCompactionLlmTemperature(): number { return _config.compactionLlmTemperature }\r\nexport function getCompactionLlmMaxTokens(): number { return _config.compactionLlmMaxTokens }\r\n","/**\n * Zod schemas for LLM response validation and normalization.\n *\n * Handles common model mistakes such as garbled status strings.\n *\n * Shared across Hammer, Magic, Monoslides, Monospace, and any other agent consumer.\n */\n\nimport { z } from \"zod\"\n\nfunction normalizeToolCallName(name: string): string {\n return name.replace(/[\\s_-]+/g, \"\").toLowerCase()\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Schemas\n// ---------------------------------------------------------------------------\n\nexport const ToolCallSchema = z\n .object({\n kind: z.enum([\"tool\", \"bash\", \"background_bash\"]).optional(),\n name: z.string().min(1, \"Tool call name is required\"),\n parameters: z.record(z.string(), z.any()).default({}),\n rawInvocation: z.string().optional(),\n truncated: z.boolean().optional(),\n })\n .strict()\n .superRefine((value, ctx) => {\n const normalizedName = normalizeToolCallName(value.name)\n\n if (normalizedName === \"bash\" && value.kind !== \"bash\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"name\"],\n message: 'Bash is not a registered tool name. Use kind: \"bash\" instead.',\n })\n }\n\n if (normalizedName === \"backgroundbash\" && value.kind !== \"background_bash\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"name\"],\n message: 'BackgroundBash is not a registered tool name. Use kind: \"background_bash\" instead.',\n })\n }\n })\n\nexport const LLMResponseSchema = z\n .object({\n content: z.string().optional(),\n reasoning: z.string().default(\"No reasoning provided\"),\n scratchpad: z.string().optional(),\n selectedToolCall: ToolCallSchema.optional(),\n outcome: z.preprocess(\n (v) => (typeof v === \"string\" ? v.toLowerCase() : v),\n z.enum([\"continue\", \"success\", \"failure\"]),\n ),\n })\n .strict()\n","/**\n * LLMClient – generic, browser-compatible streaming client for\n * OpenAI-compatible chat completion endpoints.\n *\n * This is the heart of the shared library. It handles:\n * • Building the request payload\n * • SSE streaming with inactivity / first-chunk timeouts\n * • Retry with exponential back-off on network and transient HTTP errors\n * • Pluggable callbacks so the consumer decides how to render output\n *\n * No Node.js-only APIs (chalk, process, fs) are used here – it works in\n * both Node 22+ and modern browsers.\n */\n\nimport type {\n FetchResponseLike,\n LLMProviderConfig,\n LLMRequestOptions,\n LLMClientResponse,\n StreamCallbacks\n} from \"./types\"\nimport { getStreamInactivityTimeout, getFirstChunkTimeout } from \"./configure\"\n\nfunction shouldOmitTemperature(config: LLMProviderConfig): boolean {\n return config.model === \"kimi-k2.5\"\n}\n\nfunction buildChatPayload(\n config: LLMProviderConfig,\n basePayload: {\n model: string\n messages: LLMRequestOptions[\"messages\"]\n temperature: number\n max_tokens: number\n frequency_penalty: number\n presence_penalty: number\n stream: boolean\n },\n): Record<string, unknown> {\n const payload: Record<string, unknown> = { ...basePayload }\n\n // Moonshot's kimi-k2.5 rejects caller-specified temperature values.\n // Omitting the field lets the API apply its own fixed mode-specific value.\n if (shouldOmitTemperature(config)) {\n delete payload.temperature\n }\n\n return payload\n}\n\n// ---------------------------------------------------------------------------\n// LLMClient\n// ---------------------------------------------------------------------------\n\nexport class LLMClient {\n private config: LLMProviderConfig\n\n constructor(config: LLMProviderConfig) {\n this.config = config\n }\n\n /** Swap the underlying provider at runtime. */\n setConfig(config: LLMProviderConfig): void {\n this.config = config\n }\n\n /** Read-only access to the current provider config. */\n getConfig(): LLMProviderConfig {\n return this.config\n }\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n /**\n * Send a chat completion request.\n *\n * When `options.stream` is true (the default) the response is streamed\n * token-by-token through the supplied `callbacks`.\n */\n async chat(\n options: LLMRequestOptions,\n callbacks?: StreamCallbacks\n ): Promise<LLMClientResponse> {\n const {\n messages,\n temperature = 0.2,\n maxTokens = 16384 * 2,\n stream = true,\n frequencyPenalty = 0,\n presencePenalty = 0,\n signal\n } = options\n\n const payload = buildChatPayload(this.config, {\n model: this.config.model,\n messages,\n temperature,\n max_tokens: maxTokens,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n stream\n })\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.config.apiKey}`,\n ...(this.config.extraHeaders ?? {})\n }\n\n const url = `${this.config.baseUrl}/chat/completions`\n const log = callbacks?.onLog ?? (() => {})\n\n let lastError: unknown\n const maxRetries = 3\n\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n try {\n if (signal?.aborted) {\n throw createAbortError(signal.reason)\n }\n\n if (attempt > 1) {\n log(`Retry attempt ${attempt}/${maxRetries}…`, \"warn\")\n await sleep(1000 * attempt)\n }\n\n const controller = new AbortController()\n const abortFetch = () => {\n controller.abort(signal?.reason)\n }\n signal?.addEventListener(\"abort\", abortFetch, { once: true })\n const doFetch = this.config.fetchImpl ?? globalThis.fetch\n try {\n const response = await doFetch(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n signal: controller.signal\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n const err = new ApiError(response.status, errorText)\n // Retry on transient HTTP errors (502, 503, 429, etc.)\n if (isRetryableStatus(response.status) && attempt < maxRetries) {\n log(`Transient HTTP ${response.status}. Retrying…`, \"warn\")\n lastError = err\n continue\n }\n throw err\n }\n\n if (stream) {\n return await this.handleStream(\n response,\n controller,\n callbacks,\n signal\n )\n }\n\n if (signal?.aborted) {\n throw createAbortError(signal.reason)\n }\n\n // Non-streaming path\n const data = (await response.json()) as any\n const content =\n data.choices?.[0]?.message?.content ?? \"\"\n return {\n content,\n finishReason:\n data.choices?.[0]?.finish_reason ?? \"stop\",\n usage: data.usage\n ? {\n promptTokens:\n data.usage.prompt_tokens ?? 0,\n completionTokens:\n data.usage.completion_tokens ?? 0\n }\n : undefined\n }\n } finally {\n signal?.removeEventListener(\"abort\", abortFetch)\n }\n } catch (err: any) {\n lastError = err\n if (isAbortError(err) && signal?.aborted) {\n throw createAbortError(signal.reason)\n }\n // Retry on network-level failures (ECONNREFUSED, ETIMEDOUT, etc.)\n if (isNetworkError(err) && attempt < maxRetries) {\n log(\n `Network error: ${err.code ?? err.message}. Retrying…`,\n \"warn\"\n )\n continue\n }\n throw err\n }\n }\n\n throw lastError ?? new Error(\"All retry attempts failed\")\n }\n\n // -----------------------------------------------------------------------\n // Streaming\n // -----------------------------------------------------------------------\n\n private async handleStream(\n response: FetchResponseLike,\n fetchController: AbortController,\n callbacks?: StreamCallbacks,\n signal?: AbortSignal\n ): Promise<LLMClientResponse> {\n let fullContent = \"\"\n let finishReason = \"\"\n let streamFrozen = false\n\n const log = callbacks?.onLog ?? (() => {})\n\n const body = response.body as ReadableStream<Uint8Array> | null | undefined\n if (!body) {\n throw new Error(\n \"Response body is null – streaming not supported\"\n )\n }\n\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = \"\"\n let streamAborted = false\n let firstChunkReceived = false\n\n // Timer handles (stored as number for browser compat)\n let inactivityTimer: ReturnType<typeof setTimeout> | null = null\n let firstChunkTimer: ReturnType<typeof setTimeout> | null = null\n\n const abortStream = () => {\n streamAborted = true\n cleanup()\n fetchController.abort(signal?.reason)\n }\n\n if (signal?.aborted) {\n throw createAbortError(signal.reason)\n }\n\n signal?.addEventListener(\"abort\", abortStream, { once: true })\n\n const cleanup = () => {\n if (inactivityTimer) {\n clearTimeout(inactivityTimer)\n inactivityTimer = null\n }\n if (firstChunkTimer) {\n clearTimeout(firstChunkTimer)\n firstChunkTimer = null\n }\n }\n\n const streamPromise = new Promise<void>((resolve, reject) => {\n // --- first-chunk timeout ---\n firstChunkTimer = setTimeout(() => {\n if (!firstChunkReceived && !streamAborted) {\n streamAborted = true\n cleanup()\n reject(\n new Error(\n `getFirstChunkTimeout(): No response received after ${getFirstChunkTimeout() / 1000}s`\n )\n )\n fetchController.abort()\n }\n }, getFirstChunkTimeout())\n\n // --- inactivity timeout (reset on every chunk) ---\n const resetInactivityTimer = () => {\n if (inactivityTimer) clearTimeout(inactivityTimer)\n inactivityTimer = setTimeout(() => {\n if (!streamAborted) {\n streamAborted = true\n streamFrozen = true\n cleanup()\n log(\n `Stream frozen: no data for ${getStreamInactivityTimeout() / 1000}s – treating as truncation`,\n \"warn\"\n )\n callbacks?.onError?.(\n new Error(\n \"Stream frozen – treating as truncation\"\n )\n )\n fetchController.abort()\n resolve()\n }\n }, getStreamInactivityTimeout())\n }\n\n // --- read loop ---\n const pump = async () => {\n try {\n while (true) {\n if (streamAborted) break\n\n const { done, value } = await reader.read()\n if (done) break\n\n if (!firstChunkReceived) {\n firstChunkReceived = true\n if (firstChunkTimer) {\n clearTimeout(firstChunkTimer)\n firstChunkTimer = null\n }\n resetInactivityTimer()\n callbacks?.onStreamStart?.()\n }\n\n resetInactivityTimer()\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split(\"\\n\")\n buffer = lines.pop() || \"\"\n\n for (const line of lines) {\n if (\n !line.trim() ||\n !line.startsWith(\"data: \")\n )\n continue\n if (line.includes(\"[DONE]\")) {\n streamAborted = true\n cleanup()\n break\n }\n\n try {\n const parsed = JSON.parse(line.slice(6))\n const delta = parsed.choices?.[0]?.delta\n const token = delta?.content\n if (!token && delta) {\n log(`SSE delta (no content): ${JSON.stringify(delta).slice(0, 200)}`, \"warn\")\n }\n if (token) {\n fullContent += token\n const stopEarly = callbacks?.onToken?.(token)\n if (stopEarly === true) {\n streamAborted = true\n cleanup()\n fetchController.abort()\n break\n }\n }\n if (\n parsed.choices?.[0]?.finish_reason\n ) {\n finishReason =\n parsed.choices[0].finish_reason\n }\n } catch {\n log(`SSE parse error: ${line.slice(0, 200)}`, \"warn\")\n }\n }\n\n if (streamAborted) break\n }\n resolve()\n } catch (err: any) {\n cleanup()\n if (isAbortError(err) && signal?.aborted) {\n resolve()\n return\n }\n if (!streamAborted) {\n streamFrozen = true\n callbacks?.onError?.(err)\n }\n resolve()\n }\n }\n\n pump()\n })\n\n try {\n await streamPromise\n } catch (err: any) {\n if (err.message?.includes(\"getFirstChunkTimeout()\")) throw err\n throw err\n } finally {\n cleanup()\n signal?.removeEventListener(\"abort\", abortStream)\n }\n\n if (signal?.aborted) {\n throw createAbortError(signal.reason)\n }\n\n await callbacks?.onComplete?.(\n fullContent,\n finishReason || (streamFrozen ? \"length\" : \"stop\")\n )\n\n return {\n content: fullContent,\n finishReason: finishReason || (streamFrozen ? \"length\" : \"stop\")\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Custom error class for HTTP-level API errors (preserves status code). */\nexport class ApiError extends Error {\n constructor(public readonly status: number, body: string) {\n super(`API error ${status}: ${body}`)\n this.name = \"ApiError\"\n }\n}\n\n/** HTTP status codes that indicate a transient/retryable server error. */\nfunction isRetryableStatus(status: number): boolean {\n return status === 429 || status === 500 || status === 502 || status === 503 || status === 408\n}\n\nexport function isNetworkError(err: any): boolean {\n const code = err.code ?? err.cause?.code ?? \"\"\n return (\n code === \"ENOTFOUND\" ||\n code === \"ETIMEDOUT\" ||\n code === \"ECONNREFUSED\" ||\n code === \"UND_ERR_CONNECT_TIMEOUT\" ||\n (typeof err.message === \"string\" &&\n err.message.includes(\"fetch failed\"))\n )\n}\n\nfunction isAbortError(err: unknown): boolean {\n if (!err || typeof err !== \"object\") {\n return false\n }\n\n const name = \"name\" in err ? err.name : undefined\n const code = \"code\" in err ? err.code : undefined\n const message = \"message\" in err ? err.message : undefined\n\n return name === \"AbortError\"\n || code === \"ABORT_ERR\"\n || (typeof message === \"string\" && message.toLowerCase().includes(\"aborted\"))\n}\n\nfunction createAbortError(reason?: unknown): Error {\n const error = reason instanceof Error\n ? reason\n : new Error(\n typeof reason === \"string\" && reason.trim().length > 0\n ? reason\n : \"Request aborted\",\n )\n\n error.name = \"AbortError\"\n return error\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((r) => setTimeout(r, ms))\n}\n","/**\n * Shared Agent State Machine — XState v5 formalisation of the agentic loop.\n *\n * Used by both the Hammer CLI agent and the Magic webapp agent.\n * The machine is a pure state enforcer — all async side effects (LLM\n * calls, tool execution, persistence) happen in the consuming code,\n * which sends events to drive transitions.\n *\n * State graph:\n *\n * ┌────────┐ START ┌──────────────┐\n * │ idle │ ───────▸ │ prompting │\n * └────────┘ └──────┬───────┘\n * │\n * ▾\n * ┌──────────────┐\n * │ analyzing │\n * └──────┬───────┘\n * │\n * ┌─────────────────────────────────────┤\n * LLM error LLM_SUCCESS\n * │ │\n * ▾ ▾\n * ┌──────────────┐ ┌──────────────┐\n * │ prompting │◂────────── │ executing │\n * └──────────────┘ tools done └──────────────┘\n * │\n * TOOLS_EXECUTED\n * │\n * ┌──────────────┐ ▾\n * │ updating │◂────────────────── executing\n * └──────┬───────┘\n * │ UPDATE_COMPLETE\n * ▾\n * ┌──────────────┐\n * │ prompting │ (next iteration)\n * └──────────────┘\n *\n * OUTCOME_SUCCESS ──▸ done (final)\n * OUTCOME_FAILURE ──▸ failed (final)\n *\n * @module\n */\nimport { setup, assign } from \"xstate\"\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** All possible states the agent can be in. */\nexport type AgentMachineState =\n | \"idle\"\n | \"prompting\"\n | \"analyzing\"\n | \"executing\"\n | \"updating\"\n | \"done\"\n | \"failed\"\n\nexport const AGENT_MACHINE_STATES: readonly AgentMachineState[] = [\n \"idle\",\n \"prompting\",\n \"analyzing\",\n \"executing\",\n \"updating\",\n \"done\",\n \"failed\",\n] as const\n\n/** Truncated-tool metadata carried across iterations (Hammer-specific). */\nexport interface TruncatedToolInfo {\n name: string\n filePath?: string\n executionSucceeded: boolean\n}\n\n/** Machine context — all mutable state for the agent loop. */\nexport interface AgentMachineContext {\n /** The user's task. */\n task: string\n /** Current action counter (resumes from persisted state). */\n actionCount: number\n /** Truncated-tool metadata for continuation guidance. */\n truncatedToolInfo: TruncatedToolInfo | undefined\n /** Last tool result JSON string (for resume persistence). */\n lastToolResult: string | undefined\n /** Error message when in failed state. */\n error: string | undefined\n /** Final outcome that caused loop exit. */\n finalOutcome: string\n\n /** Whether ListSkills has been called this session. */\n hasCalledListSkills: boolean\n}\n\n/** Events the machine accepts. */\nexport type AgentMachineEvent =\n | { type: \"START\"; task: string; actionCount?: number }\n | { type: \"PROMPT_COMPLETE\" }\n | { type: \"LLM_SUCCESS\" }\n | { type: \"LLM_VALIDATION_ERROR\"; error: string }\n | { type: \"LLM_API_ERROR\"; error: string }\n | { type: \"OUTCOME_SUCCESS\" }\n | { type: \"OUTCOME_FAILURE\"; error?: string }\n | { type: \"TOOLS_EXECUTED\"; lastToolResult?: string }\n | { type: \"ENFORCEMENT_BREAK\"; lastToolResult: string }\n | { type: \"NO_TOOLS\" }\n | { type: \"UPDATE_COMPLETE\" }\n | { type: \"SET_TRUNCATION\"; info: TruncatedToolInfo | undefined }\n | { type: \"RESTORE_CONTEXT\"; context: Partial<AgentMachineContext> }\n\n// ---------------------------------------------------------------------------\n// Machine definition\n// ---------------------------------------------------------------------------\n\nexport const agentMachine = setup({\n types: {\n context: {} as AgentMachineContext,\n events: {} as AgentMachineEvent,\n },\n guards: {},\n actions: {\n assignTask: assign(({ context }, params: { task: string; actionCount?: number }) => ({\n ...context,\n task: params.task,\n actionCount: params.actionCount ?? 0,\n error: undefined,\n finalOutcome: \"running\",\n })),\n assignLlmError: assign({\n error: (_, params: { error: string }) => params.error,\n }),\n assignOutcomeFailure: assign(({ context }, params: { error?: string }) => ({\n ...context,\n finalOutcome: \"failure\",\n error: params.error,\n })),\n assignOutcomeSuccess: assign({\n finalOutcome: () => \"success\",\n }),\n assignToolsExecuted: assign(({ context }, params: { lastToolResult?: string }) => ({\n ...context,\n lastToolResult: params.lastToolResult,\n })),\n assignEnforcementBreak: assign({\n lastToolResult: (_, params: { lastToolResult: string }) =>\n params.lastToolResult,\n }),\n incrementAction: assign({\n actionCount: ({ context }) => context.actionCount + 1,\n }),\n setTruncation: assign({\n truncatedToolInfo: (_, params: { info: TruncatedToolInfo | undefined }) =>\n params.info,\n }),\n restoreContext: assign(\n ({ context }, params: { context: Partial<AgentMachineContext> }) => ({\n ...context,\n ...params.context,\n }),\n ),\n },\n}).createMachine({\n id: \"agent\",\n initial: \"idle\",\n context: {\n task: \"\",\n actionCount: 0,\n truncatedToolInfo: undefined,\n lastToolResult: undefined,\n error: undefined,\n finalOutcome: \"running\",\n hasCalledListSkills: false,\n },\n\n // Global events that can be sent from any state\n on: {\n SET_TRUNCATION: {\n actions: {\n type: \"setTruncation\",\n params: ({ event }) => ({ info: event.info }),\n },\n },\n RESTORE_CONTEXT: {\n actions: {\n type: \"restoreContext\",\n params: ({ event }) => ({ context: event.context }),\n },\n },\n },\n\n states: {\n idle: {\n on: {\n START: {\n target: \"prompting\",\n actions: {\n type: \"assignTask\",\n params: ({ event }) => ({\n task: event.task,\n actionCount: event.actionCount,\n }),\n },\n },\n OUTCOME_FAILURE: {\n target: \"failed\",\n actions: {\n type: \"assignOutcomeFailure\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n },\n },\n\n prompting: {\n on: {\n PROMPT_COMPLETE: {\n target: \"analyzing\",\n actions: { type: \"incrementAction\" },\n },\n OUTCOME_FAILURE: {\n target: \"failed\",\n actions: {\n type: \"assignOutcomeFailure\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n },\n },\n\n analyzing: {\n on: {\n LLM_SUCCESS: {\n target: \"executing\",\n },\n LLM_VALIDATION_ERROR: {\n target: \"prompting\",\n actions: {\n type: \"assignLlmError\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n LLM_API_ERROR: {\n target: \"prompting\",\n actions: {\n type: \"assignLlmError\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n OUTCOME_SUCCESS: {\n target: \"done\",\n actions: { type: \"assignOutcomeSuccess\" },\n },\n OUTCOME_FAILURE: {\n target: \"failed\",\n actions: {\n type: \"assignOutcomeFailure\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n },\n },\n\n executing: {\n on: {\n TOOLS_EXECUTED: {\n target: \"updating\",\n actions: {\n type: \"assignToolsExecuted\",\n params: ({ event }) => ({\n lastToolResult: event.lastToolResult,\n }),\n },\n },\n ENFORCEMENT_BREAK: {\n target: \"prompting\",\n actions: {\n type: \"assignEnforcementBreak\",\n params: ({ event }) => ({\n lastToolResult: event.lastToolResult,\n }),\n },\n },\n NO_TOOLS: {\n target: \"prompting\",\n },\n OUTCOME_SUCCESS: {\n target: \"done\",\n actions: { type: \"assignOutcomeSuccess\" },\n },\n OUTCOME_FAILURE: {\n target: \"failed\",\n actions: {\n type: \"assignOutcomeFailure\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n },\n },\n\n updating: {\n on: {\n UPDATE_COMPLETE: \"prompting\",\n OUTCOME_FAILURE: {\n target: \"failed\",\n actions: {\n type: \"assignOutcomeFailure\",\n params: ({ event }) => ({ error: event.error }),\n },\n },\n OUTCOME_SUCCESS: {\n target: \"done\",\n actions: { type: \"assignOutcomeSuccess\" },\n },\n },\n },\n\n done: {\n type: \"final\",\n },\n\n failed: {\n type: \"final\",\n },\n },\n})\n","import type {\n ToolDefinition,\n ToolDefinitionMetadata,\n ToolParameterDefinition,\n} from \"./types\"\n\nfunction isBooleanType(type: string | string[]): boolean {\n return (Array.isArray(type) ? type : [type]).includes(\"boolean\")\n}\n\nfunction isNumberType(type: string | string[]): boolean {\n return (Array.isArray(type) ? type : [type]).some((entry) =>\n entry === \"number\" || entry === \"integer\",\n )\n}\n\nfunction isStringType(type: string | string[]): boolean {\n return (Array.isArray(type) ? type : [type]).includes(\"string\")\n}\n\nfunction toFlagName(name: string): string {\n return name.replace(/_/g, \"-\")\n}\n\nfunction derivePositionalParams(\n parameters: Record<string, ToolParameterDefinition>,\n): string[] {\n return Object.entries(parameters)\n .filter(([, definition]) => definition.required && !isBooleanType(definition.type) && definition.positional !== false)\n .map(([name]) => name)\n}\n\nfunction derivePassthroughParam(\n metadata: ToolDefinitionMetadata | undefined,\n parameters: Record<string, ToolParameterDefinition>,\n): string | undefined {\n if (!metadata?.capabilities?.includes(\"raw_command_args\")) {\n return undefined\n }\n\n const entries = Object.entries(parameters)\n if (entries.length !== 1) {\n return undefined\n }\n\n const [parameterName, definition] = entries[0]\n if (!definition.required || !isStringType(definition.type)) {\n return undefined\n }\n\n return parameterName\n}\n\nfunction quoteIfNeeded(value: string): string {\n if (/^[A-Za-z0-9_./:@?&=%+-]+$/.test(value)) {\n return value\n }\n\n return JSON.stringify(value)\n}\n\nfunction buildStringSample(parameterName: string): string {\n const normalized = parameterName.toLowerCase()\n\n if (normalized.includes(\"query\")) return \"bitcoin price today\"\n if (normalized.includes(\"url\")) return \"https://example.com\"\n if (normalized === \"path\" || normalized.endsWith(\"_path\") || normalized.includes(\"file\")) return \"README.md\"\n if (normalized.includes(\"skill\")) return \"frontend-design\"\n if (normalized.includes(\"command\") || normalized === \"args\") return \"cat README.md\"\n if (normalized.includes(\"action\")) return \"start\"\n if (normalized.includes(\"filename\")) return \"session-note\"\n if (normalized.includes(\"board\")) return \"board-1\"\n if (normalized.includes(\"element\")) return \"element-1\"\n if (normalized.includes(\"id\")) return \"item-1\"\n if (normalized.includes(\"prompt\")) return \"Generate a hero image\"\n if (normalized.includes(\"text\") || normalized.includes(\"message\")) return \"example text\"\n\n return \"example\"\n}\n\nfunction buildSampleValue(\n parameterName: string,\n definition: ToolParameterDefinition,\n): string {\n if (definition.enum && definition.enum.length > 0) {\n const first = definition.enum[0]\n return typeof first === \"string\" ? quoteIfNeeded(first) : JSON.stringify(first)\n }\n\n if (isBooleanType(definition.type)) {\n return \"true\"\n }\n\n if (isNumberType(definition.type)) {\n return \"1\"\n }\n\n const normalizedTypes = Array.isArray(definition.type) ? definition.type : [definition.type]\n if (normalizedTypes.includes(\"array\")) {\n return '[\"example\"]'\n }\n if (normalizedTypes.includes(\"object\")) {\n return '{\"key\":\"value\"}'\n }\n if (normalizedTypes.includes(\"null\")) {\n return \"null\"\n }\n\n return quoteIfNeeded(buildStringSample(parameterName))\n}\n\nexport function buildToolUsageExample(\n tool: Pick<ToolDefinition, \"name\" | \"parameters\" | \"metadata\">,\n): string {\n const passthroughParam = derivePassthroughParam(tool.metadata, tool.parameters)\n if (passthroughParam) {\n return `${tool.name} ${buildSampleValue(passthroughParam, tool.parameters[passthroughParam])}`\n }\n\n const parts = [tool.name]\n const positionalParams = derivePositionalParams(tool.parameters)\n\n for (const parameterName of positionalParams) {\n parts.push(buildSampleValue(parameterName, tool.parameters[parameterName]))\n }\n\n const requiredFlags = Object.entries(tool.parameters)\n .filter(([name, definition]) => !positionalParams.includes(name) && definition.required)\n\n for (const [parameterName, definition] of requiredFlags) {\n const flag = `--${toFlagName(parameterName)}`\n if (isBooleanType(definition.type)) {\n parts.push(flag)\n continue\n }\n\n parts.push(flag, buildSampleValue(parameterName, definition))\n }\n\n return parts.join(\" \")\n}","/**\n * Shared structured control-segment prompt fragments used across agent loops.\n *\n * These helpers centralize the plain header-block response contract while\n * letting each agent layer domain-specific constraints on top.\n */\n\nconst TOOL_CALL_RUN_LINE_RULE =\n 'End every response with exactly one final executable control block. Put prose on its own line(s), put the standalone slug header on its own line, then put the executable payload on the next line(s). Never place prose, the slug header, or the payload on the same line.'\n\nconst TOOL_CALL_SHELL_LINE_RULE =\n 'Use plain prose for analysis and reserve the structured control block for the final executable block only.'\n\nconst TOOL_CALL_SINGLE_LINE_RULE =\n 'Never emit multiple structured control blocks in a single response. The final control block is always the final thing in the response and nothing may follow it.'\n\nexport const TOOL_CALL_SEPARATOR_RULE =\n 'The slug header is a hard separator between prose/thought and command/action. Put all prose before the slug, put the standalone slug header on its own line, and put only the executable payload on the following line(s). There must be a newline before the slug header and a newline after the slug header.'\n\nexport function formatStructuredControlSegment(\n target: \"tool\" | \"bash\" | \"background_bash\",\n payload: string,\n): string {\n return [`---${target}---`, payload].join(\"\\n\")\n}\n\nexport const CORRECT_SINGLE_SLUG_SEGMENT_EXAMPLE =\n formatStructuredControlSegment(\"bash\", \"ls -la\")\n\nexport const CORRECT_NEWLINE_FINISH_EXAMPLE = [\n 'Task complete.',\n formatStructuredControlSegment(\"bash\", \"exit 0\"),\n].join(\"\\n\")\n\nexport const CORRECT_NEWLINE_TOOL_EXAMPLE = [\n 'I\\'ll read the create-app skill first.',\n formatStructuredControlSegment(\"tool\", 'ReadSkill --skill_name \"create-app\"'),\n].join(\"\\n\")\n\nexport const INCORRECT_REPEATED_SLUG_EXAMPLE =\n '---bash--- ls -la ---bash---'\n\nexport const INCORRECT_MIXED_SLUG_EXAMPLE =\n '---bash--- ls -la ---tool--- BraveWebSearch \"hello world\"'\n\nexport const INCORRECT_INLINE_PROSE_AND_SLUG_EXAMPLE =\n 'Task complete. ---bash--- exit 0'\n\nexport const INCORRECT_INLINE_PROSE_AND_TOOL_SLUG_EXAMPLE =\n 'I\\'ll build a landing page for Monako Glass smart glasses. Let me first read the create-app skill to ensure I scaffold this project correctly. ---tool--- ReadSkill --skill_name \"create-app\"'\n\nexport const INCORRECT_INLINE_HEADER_AND_PAYLOAD_EXAMPLE =\n '---tool--- ReadSkill --skill_name \"create-app\"'\n\nexport const SLUG_FORMAT_EXAMPLE_RULE_LINES = [\n 'Correct example: prose first, then one slug header, then one executable payload block.',\n `Correct example:\\n${CORRECT_SINGLE_SLUG_SEGMENT_EXAMPLE}`,\n 'Correct finish example: keep the prose, slug header, and payload on separate lines.',\n `Correct finish example:\\n${CORRECT_NEWLINE_FINISH_EXAMPLE}`,\n 'Correct tool example: keep prose, the ---tool--- header, and the tool payload on separate lines.',\n `Correct tool example:\\n${CORRECT_NEWLINE_TOOL_EXAMPLE}`,\n 'Incorrect example: do not repeat the same slug in one response.',\n `Incorrect example:\\n${INCORRECT_REPEATED_SLUG_EXAMPLE}`,\n 'Incorrect example: do not mix different slug headers in one response.',\n `Incorrect example:\\n${INCORRECT_MIXED_SLUG_EXAMPLE}`,\n 'Incorrect example: do not keep prose, the slug header, and the payload on one line.',\n `Incorrect example:\\n${INCORRECT_INLINE_PROSE_AND_SLUG_EXAMPLE}`,\n 'Incorrect example: do not keep prose and a ---tool--- invocation on one line.',\n `Incorrect example:\\n${INCORRECT_INLINE_PROSE_AND_TOOL_SLUG_EXAMPLE}`,\n 'Incorrect example: do not put a slug header and its payload on the same line.',\n `Incorrect example:\\n${INCORRECT_INLINE_HEADER_AND_PAYLOAD_EXAMPLE}`,\n]\n\nexport const CORRECT_SEPARATOR_RESPONSE_EXAMPLE = [\n 'I analyzed the current state.',\n CORRECT_SINGLE_SLUG_SEGMENT_EXAMPLE,\n].join(\"\\n\")\n\nexport const SLUG_SEPARATOR_EXAMPLE_BLOCK = [\n 'Correct separator example:',\n CORRECT_SEPARATOR_RESPONSE_EXAMPLE,\n '',\n 'Correct finish example:',\n CORRECT_NEWLINE_FINISH_EXAMPLE,\n '',\n 'Correct tool example:',\n CORRECT_NEWLINE_TOOL_EXAMPLE,\n '',\n 'Incorrect multi-slug examples:',\n INCORRECT_REPEATED_SLUG_EXAMPLE,\n INCORRECT_MIXED_SLUG_EXAMPLE,\n '',\n 'Incorrect inline prose-plus-slug example:',\n INCORRECT_INLINE_PROSE_AND_SLUG_EXAMPLE,\n '',\n 'Incorrect inline prose-plus-tool example:',\n INCORRECT_INLINE_PROSE_AND_TOOL_SLUG_EXAMPLE,\n '',\n 'Incorrect inline slug-plus-payload example:',\n INCORRECT_INLINE_HEADER_AND_PAYLOAD_EXAMPLE,\n].join(\"\\n\")\n\nexport const SHARED_TOOL_USAGE_RULE =\n \"Use only the tools that are actually listed in the tool section. Do not invent tools, parameters, wrapper flags, bare assignment-style arguments, or capabilities that are not explicitly listed. Follow each tool's description, usage surface, and parameter schema exactly.\"\n\nexport const FOLLOW_TOOL_USAGE_SURFACE_RULE =\n \"For registered tools, follow the exact CLI usage shown in the tool section.\"\n\nexport const POSITIONAL_ARGUMENT_USAGE_RULE =\n \"Use positional arguments only when the usage shows <param>; otherwise use --flag value.\"\n\nexport const BARE_ASSIGNMENT_STYLE_ARGUMENT_RULE =\n \"Never write bare assignment-style arguments like skill_name=..., query=..., or path=... after a tool name unless that exact syntax is explicitly shown in the tool section.\"\n\nexport const PASSTHROUGH_TOOL_ARGUMENT_RULE =\n \"Passthrough tools take their raw arguments directly after the tool name; do not invent wrapper flags unless the tool description explicitly documents them.\"\n\nexport const UNIX_TOOL_USAGE_GUIDANCE_LINE =\n 'Use the exact registered tool name and usage shown: <param> is positional, otherwise use --flag value. Never switch to bare assignment-style arguments unless the tool explicitly shows them.'\n\nexport const UNIX_PASSTHROUGH_TOOL_GUIDANCE_LINE =\n 'For passthrough tools, pass raw arguments directly after the tool name; do not invent wrapper flags unless the tool explicitly documents them.'\n\nexport const WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES =\n \"rg, sed, find, ls, grep, cat\"\n\nexport const SHALLOW_WORKSPACE_DISCOVERY_RULE_LINE =\n 'When exploring the workspace, avoid recursive whole-tree listings such as `ls -R` or `find . -type f` at the repo root. Prefer `rg --files`, shallow `find`/`ls`, or targeted directory inspection, and exclude heavy directories such as `node_modules`, `.git`, `.next`, `dist`, `build`, and coverage outputs unless the task specifically requires them.'\n\nexport interface ShellNativeWorkflowCommandExamplesOptions {\n includeGit?: boolean\n includeBun?: boolean\n includeCurl?: boolean\n}\n\nexport function buildShellNativeWorkflowCommandExamples(\n options?: ShellNativeWorkflowCommandExamplesOptions,\n): string {\n const commands = [WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES]\n\n if (options?.includeGit ?? true) {\n commands.push(\"git\")\n }\n\n if (options?.includeBun ?? true) {\n commands.push(\"bun\")\n }\n\n if (options?.includeCurl ?? true) {\n commands.push(\"curl\")\n }\n\n return commands.join(\", \")\n}\n\nexport const SHELL_NATIVE_WORKFLOW_COMMAND_EXAMPLES =\n buildShellNativeWorkflowCommandExamples()\n\nexport const JUST_BASH_SHELL_NATIVE_WORKFLOW_COMMAND_EXAMPLES =\n buildShellNativeWorkflowCommandExamples({\n includeGit: false,\n includeBun: false,\n includeCurl: false,\n })\n\nexport const JUST_BASH_SCRIPT_EXECUTION_RESTRICTION_LINES = [\n 'Never try to run scripts with `python`, `python3`, `node`, `nodejs`, `bun`, or similar runtimes unless a listed tool explicitly provides that capability.',\n]\n\nexport interface BashCommandsSectionOptions {\n shellNativeWorkflowCommandExamples?: string\n additionalGuidanceLines?: string[]\n}\n\nfunction buildBashCommandsSectionLines(options?: BashCommandsSectionOptions): string[] {\n const shellNativeWorkflowCommandExamples =\n options?.shellNativeWorkflowCommandExamples\n ?? SHELL_NATIVE_WORKFLOW_COMMAND_EXAMPLES\n const additionalGuidanceLines = (options?.additionalGuidanceLines ?? [])\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n\n return [\n '## Bash Commands',\n '',\n '- Invoke them with a standalone `---bash---` header followed by the bash payload on the next line(s).',\n `- Use bash for shell-native workflows such as ${shellNativeWorkflowCommandExamples}.`,\n `- ${SHALLOW_WORKSPACE_DISCOVERY_RULE_LINE}`,\n '- Prefer registered tools when a listed tool already covers the task. Use bash for shell-native workflows or when no listed tool matches.',\n '- When fixing or updating an existing file, always use targeted in-place edits with `sed` or another scoped search-and-replace command.',\n '- Use `cat > file <<\\'EOF\\'` only for creating a new file that does not already exist. Never use it to repair, revise, or overwrite an existing file.',\n `- ${BASH_NOT_REGISTERED_TOOL_RULE}`,\n ...additionalGuidanceLines.map((line) => `- ${line}`),\n `- Example:\\n${formatStructuredControlSegment(\"bash\", \"sed -n '1,120p' README.md\")}`,\n ]\n}\n\nconst REGISTERED_TOOLS_VS_BASH_RULE =\n 'Use ---tool--- for listed tools, ---bash--- for one-shot shell-native workflows, and ---background_bash--- only when a Background bash commands section is present for detached long-running shell commands.'\n\nconst BASH_NOT_REGISTERED_TOOL_RULE =\n 'Bash is not a registered tool name. Never start a tool payload with Bash --command ...; use the ---bash--- header instead.'\n\nconst BACKGROUND_BASH_NOT_REGISTERED_TOOL_RULE =\n 'BackgroundBash is not a registered tool name. Never start a tool payload with BackgroundBash ...; use the ---background_bash--- header instead.'\n\nconst REGISTERED_TOOL_USAGE_SURFACE_RULE =\n `Tool payloads must start with the exact registered tool name after the ---tool--- header. ${FOLLOW_TOOL_USAGE_SURFACE_RULE} ${POSITIONAL_ARGUMENT_USAGE_RULE} ${BARE_ASSIGNMENT_STYLE_ARGUMENT_RULE}`\n\nconst BASH_WORKFLOW_SELECTION_RULE =\n `Use bash for shell-native workflows such as ${SHELL_NATIVE_WORKFLOW_COMMAND_EXAMPLES} when bash is listed. Prefer the appropriate listed tool over bash when a listed tool already covers the task. For edits to existing files, always use targeted search-and-replace commands and never use full-file cat rewrites. If no listed tool covers a direct HTTP request and bash is available, use bash curl.`\n\nconst BACKGROUND_BASH_WORKFLOW_SELECTION_RULE =\n 'Use background_bash only when a background bash section is listed. It starts or manages detached shell commands for blocking operations such as starting servers, preview apps, and long-running watchers. Prefer plain ---bash--- for short synchronous commands.'\n\nconst SINGLE_WELL_COMPOSED_ACTION_RULE =\n 'Prefer one well-composed action over multiple unrelated tool calls.'\n\nconst TOOL_RESULT_FEEDBACK_RULE =\n 'Tool results include stderr and an [exit:N | duration] footer. Use that feedback instead of guessing.'\n\nconst TOOL_AND_BASH_ROUTING_RULE =\n `${REGISTERED_TOOLS_VS_BASH_RULE} ${BASH_NOT_REGISTERED_TOOL_RULE} ${BACKGROUND_BASH_NOT_REGISTERED_TOOL_RULE} ${BASH_WORKFLOW_SELECTION_RULE} ${BACKGROUND_BASH_WORKFLOW_SELECTION_RULE}`\n\nconst TOOL_EXECUTION_STRATEGY_RULE =\n `${SINGLE_WELL_COMPOSED_ACTION_RULE} ${TOOL_RESULT_FEEDBACK_RULE}`\n\nexport const STANDARD_TOOL_CALL_FORMAT_RULES = [\n TOOL_CALL_RUN_LINE_RULE,\n TOOL_CALL_SHELL_LINE_RULE,\n TOOL_CALL_SINGLE_LINE_RULE,\n TOOL_CALL_SEPARATOR_RULE,\n]\n\nconst VALIDATION_FIX_REFERENCE_REQUIRED_FORMAT =\n 'Write normal prose and end with exactly one final executable control block. Put prose on its own line(s), put the standalone slug header on its own line, and put the payload on the following line(s). Do not mention the control headers anywhere else.'\n\nconst VALIDATION_FIX_REFERENCE_RULE_LINES = [\n 'If continuing, end with exactly one real action block.',\n 'If finishing, end with exactly one final ---bash--- control block whose payload is either exit 0 or exit 1.',\n 'Do not mix finish lines with tool commands.',\n 'Do not mention, quote, or explain the control headers in analysis or summaries.',\n ...STANDARD_TOOL_CALL_FORMAT_RULES,\n ...SLUG_FORMAT_EXAMPLE_RULE_LINES,\n]\n\nexport const VALIDATION_FIX_REFERENCE = buildValidationFixReference(\n VALIDATION_FIX_REFERENCE_REQUIRED_FORMAT,\n VALIDATION_FIX_REFERENCE_RULE_LINES,\n)\n\nexport function buildStructuredControlValidationError(details: string): string {\n return `VALIDATION_ERROR: ${details}\\n\\n${VALIDATION_FIX_REFERENCE}`\n}\n\nexport function buildMultipleStructuredControlSegmentsValidationError(\n segmentCount: number,\n): string {\n return buildStructuredControlValidationError(\n `You emitted ${segmentCount} structured control blocks in one response. Emit exactly one standalone slug header per response. The slug header is the separator between prose/thought and command/action.`,\n )\n}\n\nexport const VOICE_TOOL_USAGE_RULE_LINES = [\n TOOL_AND_BASH_ROUTING_RULE,\n REGISTERED_TOOL_USAGE_SURFACE_RULE,\n TOOL_EXECUTION_STRATEGY_RULE,\n]\n\nexport const VOICE_TOOL_FORMAT_RULE_LINES = [\n 'The final executable control block must use one standalone header: ---tool---, ---bash---, or ---background_bash---. Put prose first, then a newline, then the standalone header on its own line, then a newline, then the payload. The header and payload must be the LAST thing in your message - never put speech after them.',\n ...STANDARD_TOOL_CALL_FORMAT_RULES,\n ...SLUG_FORMAT_EXAMPLE_RULE_LINES,\n 'Only call tools that are explicitly listed below. If no tools are listed and bash is unavailable, do not emit a control block.',\n]\n\nexport const VOICE_WORKSPACE_VERIFICATION_RULE_LINES = [\n \"You have ZERO knowledge of the user's workspace. The ONLY way to know what files exist or contain is to use tools.\",\n `If the user asks about ANY file, document, or workspace content: you MUST inspect it with a listed tool or with bash commands like ${WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES} BEFORE saying anything about it. NEVER summarize, describe, or reference file contents without actually checking them first.`,\n `If the user asks you to read, open, summarize, or explain a file: inspect it with a real tool call such as:\\n${formatStructuredControlSegment(\"bash\", \"cat path/to/file\")}\\nor with a listed reading tool. Do NOT make up what the file says.`,\n `If the user mentions a file vaguely (e.g. \"read the analysis\", \"open the summary\") and you don't know the exact filename: use bash with ${WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES} first to locate likely candidates, then inspect the best match. NEVER ask the user to clarify the filename — just look it up yourself.`,\n SHALLOW_WORKSPACE_DISCOVERY_RULE_LINE,\n 'If the user asks about facts, current events, or anything you are uncertain about: verify with an appropriate listed tool, or use bash with a trusted source when bash is available. Do NOT guess.',\n 'If you cannot verify something with tools, say \"let me check\" and use a tool — or honestly say you do not know.',\n 'Violating this rule causes real harm. The user trusts your answers. Never fabricate.',\n]\n\nexport const BASH_COMMANDS_SECTION_LINES = buildBashCommandsSectionLines()\n\nexport const BACKGROUND_BASH_START_EXAMPLE_LINE =\n `- Start:\\n${formatStructuredControlSegment(\"background_bash\", 'start <name> --command \"<long-running server command>\"')}`\n\nfunction buildBackgroundBashCommandsSectionLines(): string[] {\n return [\n '## Background Bash Commands',\n '',\n '- Invoke them with a standalone `---background_bash---` header followed by the payload on the next line(s).',\n '- Use background_bash to start or manage detached shell commands without blocking the agent loop.',\n '- Use it for blocking operations such as starting servers, preview apps, or long-running watchers. Prefer `---bash---` for short synchronous commands.',\n `- ${BACKGROUND_BASH_NOT_REGISTERED_TOOL_RULE}`,\n BACKGROUND_BASH_START_EXAMPLE_LINE,\n `- Status:\\n${formatStructuredControlSegment(\"background_bash\", \"status <name>\")}`,\n `- Logs:\\n${formatStructuredControlSegment(\"background_bash\", \"logs <name> [--tail-bytes 4000]\")}`,\n `- Stop:\\n${formatStructuredControlSegment(\"background_bash\", \"stop <name>\")}`,\n ]\n}\n\nexport const BACKGROUND_BASH_COMMANDS_SECTION_LINES = buildBackgroundBashCommandsSectionLines()\n\nexport const SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE =\n formatStructuredControlSegment(\"tool\", 'ExactToolName --required-flag \"value\"')\n\nexport const INVALID_TOOL_NAME_RUN_LINE_EXAMPLE =\n formatStructuredControlSegment(\"tool\", 'exacttoolname required-arg')\n\nexport const INVALID_ASSIGNMENT_STYLE_RUN_LINE_EXAMPLE =\n formatStructuredControlSegment(\"tool\", 'ExactToolName required_flag=\"value\"')\n\nexport const STANDARD_AGENT_RESPONSE_EXAMPLE = [\n \"This is some useful information.\",\n SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE,\n].join(\"\\n\")\n\nexport const SHARED_TOOL_CALL_EXAMPLE_LINES = [\n ` ✓ ${SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE}`,\n ` ✗ ${INVALID_TOOL_NAME_RUN_LINE_EXAMPLE}`,\n ` ✗ ${INVALID_ASSIGNMENT_STYLE_RUN_LINE_EXAMPLE}`,\n ` ✓ ${STANDARD_AGENT_RESPONSE_EXAMPLE}`,\n ` ✓ ${CORRECT_NEWLINE_TOOL_EXAMPLE}`,\n ` ✗ ${INCORRECT_REPEATED_SLUG_EXAMPLE}`,\n ` ✗ ${INCORRECT_MIXED_SLUG_EXAMPLE}`,\n ` ✗ ${INCORRECT_INLINE_PROSE_AND_TOOL_SLUG_EXAMPLE}`,\n ` ✗ ${INCORRECT_INLINE_HEADER_AND_PAYLOAD_EXAMPLE}`,\n]\n\nexport const CONTINUE_TOOL_CALL_RESPONSE_EXAMPLE = [\n \"I need to inspect the file first.\",\n SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE,\n].join(\"\\n\")\n\nexport const EXIT_SUCCESS_RESPONSE_EXAMPLE = [\n \"Everything is verified.\",\n formatStructuredControlSegment(\"bash\", \"exit 0\"),\n].join(\"\\n\")\n\nexport const EXIT_FAILURE_RESPONSE_EXAMPLE = [\n \"This cannot be completed with the available tools.\",\n formatStructuredControlSegment(\"bash\", \"exit 1\"),\n].join(\"\\n\")\n\nexport const VOICE_TOOL_CALL_RESPONSE_EXAMPLE = [\n \"Let me check that.\",\n SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE,\n].join(\"\\n\")\n\nexport function buildBashCommandsSection(options?: BashCommandsSectionOptions): string {\n return buildBashCommandsSectionLines(options).join(\"\\n\")\n}\n\nexport function buildBackgroundBashCommandsSection(\n): string {\n return buildBackgroundBashCommandsSectionLines().join(\"\\n\")\n}\n\nexport function buildVoiceToolUsagePrompt(): string {\n return [\n \"When you do need a tool, first speak your reasoning or acknowledgement naturally, then insert a newline and end your message with exactly one structured control block whose header is on its own line and whose payload is on the following line(s):\",\n VOICE_TOOL_CALL_RESPONSE_EXAMPLE,\n \"\",\n formatPromptRules(VOICE_TOOL_USAGE_RULE_LINES),\n ].join(\"\\n\")\n}\n\nexport function buildValidationFixReference(\n requiredFormat: string,\n rules: string[],\n): string {\n return `Fix your response and retry.\\n${requiredFormat}\\n${formatPromptRules(rules)}`\n}\n\nexport function formatPromptRules(rules: string[]): string {\n return rules.map((rule) => `- ${rule}`).join(\"\\n\")\n}","import type {\n ToolCall,\n ToolDefinition,\n ToolParameterDefinition,\n ToolResult,\n} from \"./types\"\nimport { buildToolUsageExample } from \"./tool-usage-examples\"\nimport {\n UNIX_PASSTHROUGH_TOOL_GUIDANCE_LINE,\n UNIX_TOOL_USAGE_GUIDANCE_LINE,\n} from \"./tool-call-prompts\"\n\ntype ChainOperator = \"|\" | \"&&\" | \"||\" | \";\"\n\nexport interface CommandRuntime {\n getToolDefinitions(): ToolDefinition[]\n executeTool(name: string, parameters: Record<string, any>): Promise<ToolResult>\n executeBash?(command: string): Promise<ToolResult>\n executeBackgroundBash?(command: string): Promise<ToolResult>\n}\n\nexport interface CommandTargetInfo {\n name: string\n path?: string\n command?: string\n}\n\ninterface CommandDescriptor {\n command: string\n summary: string\n details?: string\n usage: string\n example: string\n toolName: string\n parameters: Record<string, ToolParameterDefinition>\n positionalParams: string[]\n passthroughParam?: string\n}\n\ninterface ParsedCommandArgs {\n positional: string[]\n flags: Record<string, unknown>\n unknownFlags: string[]\n error?: string\n}\n\nexport function isBashToolCall(toolCall: Pick<ToolCall, \"name\" | \"kind\">): boolean {\n return toolCall.kind === \"bash\"\n}\n\nexport function isBackgroundBashToolCall(toolCall: Pick<ToolCall, \"name\" | \"kind\">): boolean {\n return toolCall.kind === \"background_bash\"\n}\n\nexport function resolveToolDefinitionForInvocation(\n tools: ToolDefinition[],\n invocationName: string,\n): ToolDefinition | undefined {\n return tools.find((tool) => tool.name === invocationName)\n}\n\nexport function formatUnixToolSurface(tools: ToolDefinition[]): string {\n if (tools.length === 0) {\n return \"\"\n }\n\n const descriptors = tools\n .map((tool) => buildToolDescriptor(tool))\n .sort((left, right) => left.command.localeCompare(right.command))\n\n return [\n '## Registered Tools',\n '',\n '- Invoke them with a standalone `---tool---` header followed by the tool payload on the next line.',\n `- ${UNIX_TOOL_USAGE_GUIDANCE_LINE}`,\n `- ${UNIX_PASSTHROUGH_TOOL_GUIDANCE_LINE}`,\n ...descriptors.flatMap((descriptor) => {\n const line = `### \\`${descriptor.usage}\\``\n const details: string[] = []\n\n details.push(`- ${descriptor.summary}`)\n\n if (descriptor.details) {\n details.push(\n descriptor.details\n .split(\"\\n\")\n .map((l) => `- ${l}`)\n .join(\"\\n\"),\n )\n }\n\n details.push(`- Example: \\`${descriptor.example}\\``)\n\n return [line, ...details, \"\"]\n }),\n ].join(\"\\n\").trim()\n}\n\nexport function formatToolCallAsUnixCommand(\n toolCall: Pick<ToolCall, \"name\" | \"kind\" | \"parameters\" | \"rawInvocation\">,\n toolDefinitions: ToolDefinition[] = [],\n): string | undefined {\n if (isBashToolCall(toolCall) || isBackgroundBashToolCall(toolCall)) {\n const command = typeof toolCall.parameters?.command === \"string\"\n ? toolCall.parameters.command.trim()\n : \"\"\n return command || undefined\n }\n\n if (typeof toolCall.rawInvocation === \"string\" && toolCall.rawInvocation.trim().length > 0) {\n return toolCall.rawInvocation.trim()\n }\n\n const toolDefinition = resolveToolDefinitionForInvocation(toolDefinitions, toolCall.name)\n const parameters = toolCall.parameters ?? {}\n const passthroughParam = toolDefinition\n ? derivePassthroughParam(toolDefinition)\n : undefined\n\n if (passthroughParam) {\n const passthroughValue = readToolCallParameter(parameters, passthroughParam)\n if (typeof passthroughValue === \"string\" && passthroughValue.trim().length > 0) {\n return `${toolDefinition?.name ?? toolCall.name} ${passthroughValue.trim()}`\n }\n\n return toolDefinition?.name ?? toolCall.name\n }\n\n const parts = [toolDefinition?.name ?? toolCall.name]\n const positionalParams = toolDefinition\n ? derivePositionalParams(toolDefinition.parameters)\n : []\n const consumed = new Set<string>()\n\n for (const parameterName of positionalParams) {\n const value = readToolCallParameter(parameters, parameterName)\n consumed.add(parameterName)\n\n if (value === undefined || value === null) {\n continue\n }\n\n parts.push(formatCliArgument(value))\n }\n\n for (const [parameterName, value] of Object.entries(parameters)) {\n if (\n parameterName === \"command\" ||\n consumed.has(parameterName) ||\n value === undefined ||\n value === null\n ) {\n continue\n }\n\n const flagName = toFlagName(parameterName)\n if (typeof value === \"boolean\") {\n parts.push(value ? `--${flagName}` : `--no-${flagName}`)\n continue\n }\n\n parts.push(`--${flagName}`, formatCliArgument(value))\n }\n\n return parts.join(\" \")\n}\n\nexport function enrichToolResultWithUnixMetadata(\n toolCall: Pick<ToolCall, \"name\" | \"kind\" | \"parameters\" | \"rawInvocation\">,\n result: ToolResult,\n toolDefinitions: ToolDefinition[] = [],\n): ToolResult {\n const command = formatToolCallAsUnixCommand(toolCall, toolDefinitions)\n if (!command) {\n return result\n }\n\n if (isBashToolCall(toolCall) || isBackgroundBashToolCall(toolCall)) {\n const primary = extractPrimaryCommandMetadata(command)\n return {\n ...result,\n command: typeof result.command === \"string\" && result.command.length > 0\n ? result.command\n : command,\n command_name:\n typeof result.command_name === \"string\" && result.command_name.length > 0\n ? result.command_name\n : primary.name ?? \"bash\",\n route:\n typeof result.route === \"string\" && result.route.length > 0\n ? result.route\n : toolCall.kind === \"background_bash\"\n ? \"background_bash\"\n : \"bash\",\n }\n }\n\n return {\n ...result,\n command: typeof result.command === \"string\" && result.command.length > 0\n ? result.command\n : command,\n command_name:\n typeof result.command_name === \"string\" && result.command_name.length > 0\n ? result.command_name\n : toolCall.name,\n route:\n typeof result.route === \"string\" && result.route.length > 0\n ? result.route\n : toolCall.name,\n }\n}\n\nexport function extractCommandTargets(command: string): string[] {\n const chain = parseCommandChain(command)\n if (!chain) {\n return []\n }\n\n return chain.commands\n .map((tokens) => normalizeCommandName(tokens[0] ?? \"\"))\n .filter((value) => value.length > 0)\n}\n\nexport function extractPrimaryCommandMetadata(\n command: string,\n): { name?: string; path?: string; command?: string } {\n const chain = parseCommandChain(command)\n if (!chain || chain.commands.length === 0) {\n return { command }\n }\n\n const [firstCommand] = chain.commands\n const name = normalizeCommandName(firstCommand[0] ?? \"\")\n const args = firstCommand.slice(1)\n const firstPositional = args.find((token) => !token.startsWith(\"-\"))\n\n return {\n name: name || undefined,\n path: firstPositional,\n command,\n }\n}\n\nexport function tokenizeUnixCommand(\n command: string,\n options?: { allowTruncated?: boolean },\n): string[] | null {\n return tokenizeCommand(command, options)\n}\n\nexport function parseUnixToolCommand(\n tool: ToolDefinition,\n command: string,\n options?: {\n allowTruncated?: boolean\n },\n): { ok: true; parameters: Record<string, unknown> } | { ok: false; error: string } {\n const descriptor = buildToolDescriptor(tool)\n\n if (descriptor.passthroughParam) {\n return parsePassthroughToolCommand(descriptor, command)\n }\n\n const tokens = tokenizeCommand(command, options)\n\n if (!tokens || tokens.length === 0) {\n return {\n ok: false,\n error: `${descriptor.command}: empty invocation. Usage: ${descriptor.usage}`,\n }\n }\n\n if (tokens[0] !== descriptor.command) {\n return {\n ok: false,\n error: `${descriptor.command}: invocation must start with ${descriptor.command}. Usage: ${descriptor.usage}`,\n }\n }\n\n const result = parseToolCommandArguments(descriptor, tokens.slice(1), options)\n\n // Fallback: when standard parsing fails, try extracting bracket-\n // balanced JSON values directly from the raw command string. This\n // recovers from edge-case tokenisation failures (e.g. unquoted JSON\n // with special characters the tokenizer may split incorrectly).\n if (!result.ok) {\n const recovered = tryRecoverFlagParamsFromRawCommand(descriptor, command)\n if (recovered) {\n return recovered\n }\n }\n\n return result\n}\n\nexport async function executeToolCallWithUnixSupport(\n runtime: CommandRuntime,\n toolCall: ToolCall,\n): Promise<ToolResult> {\n const toolDefinitions = runtime.getToolDefinitions()\n\n if (isBashToolCall(toolCall)) {\n return executeUnixCommandString(\n typeof toolCall.parameters?.command === \"string\" ? toolCall.parameters.command : \"\",\n runtime,\n )\n }\n\n if (isBackgroundBashToolCall(toolCall)) {\n return executeBackgroundUnixCommandString(\n typeof toolCall.parameters?.command === \"string\" ? toolCall.parameters.command : \"\",\n runtime,\n )\n }\n\n let effectiveParameters = toolCall.parameters\n const definition = resolveToolDefinitionForInvocation(toolDefinitions, toolCall.name)\n\n if (\n definition &&\n typeof toolCall.rawInvocation === \"string\" &&\n toolCall.rawInvocation.trim().length > 0\n ) {\n const parsed = parseUnixToolCommand(definition, toolCall.rawInvocation, {\n allowTruncated: toolCall.truncated === true,\n })\n\n if (parsed.ok) {\n effectiveParameters = parsed.parameters as Record<string, any>\n } else {\n return enrichToolResultWithUnixMetadata(\n toolCall,\n {\n success: false,\n error: parsed.error,\n stderr: parsed.error,\n exit_code: 1,\n },\n toolDefinitions,\n )\n }\n }\n\n const result = await runtime.executeTool(toolCall.name, effectiveParameters)\n return enrichToolResultWithUnixMetadata(toolCall, result, toolDefinitions)\n}\n\nexport async function executeUnixCommandString(\n command: string,\n runtime: CommandRuntime,\n): Promise<ToolResult> {\n const trimmedCommand = command.trim()\n if (!trimmedCommand) {\n return {\n success: false,\n error: \"Bash command is required\",\n stderr: \"Bash command is required\",\n exit_code: 1,\n command: trimmedCommand,\n command_name: \"bash\",\n route: \"bash\",\n }\n }\n\n if (!runtime.executeBash) {\n return {\n success: false,\n error: \"Bash execution is not available in this environment\",\n stderr: \"Bash execution is not available in this environment\",\n exit_code: 1,\n command: trimmedCommand,\n command_name: \"bash\",\n route: \"bash\",\n }\n }\n\n const result = await runtime.executeBash(trimmedCommand)\n return enrichToolResultWithUnixMetadata(\n {\n name: \"Bash\",\n kind: \"bash\",\n parameters: { command: trimmedCommand },\n },\n result,\n )\n}\n\nexport async function executeBackgroundUnixCommandString(\n command: string,\n runtime: CommandRuntime,\n): Promise<ToolResult> {\n const trimmedCommand = command.trim()\n if (!trimmedCommand) {\n return {\n success: false,\n error: \"Background bash command is required\",\n stderr: \"Background bash command is required\",\n exit_code: 1,\n command: trimmedCommand,\n command_name: \"background_bash\",\n route: \"background_bash\",\n }\n }\n\n if (!runtime.executeBackgroundBash) {\n return {\n success: false,\n error: \"Background bash execution is not available in this environment\",\n stderr: \"Background bash execution is not available in this environment\",\n exit_code: 1,\n command: trimmedCommand,\n command_name: \"background_bash\",\n route: \"background_bash\",\n }\n }\n\n const result = await runtime.executeBackgroundBash(trimmedCommand)\n return enrichToolResultWithUnixMetadata(\n {\n name: \"BackgroundBash\",\n kind: \"background_bash\",\n parameters: { command: trimmedCommand },\n },\n result,\n )\n}\n\nexport function deriveCommandName(name: string): string {\n if (name.includes(\"_\")) {\n return name.toLowerCase()\n }\n\n return name\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replace(/\\s+/g, \"-\")\n .toLowerCase()\n}\n\nfunction buildToolDescriptor(tool: ToolDefinition): CommandDescriptor {\n const passthroughParam = derivePassthroughParam(tool)\n const { summary, details } = splitDescription(tool.description)\n\n return {\n command: tool.name,\n summary,\n details,\n usage: buildUsage(tool.name, tool.parameters, passthroughParam),\n example: tool.usageExample ?? buildToolUsageExample(tool),\n toolName: tool.name,\n parameters: tool.parameters,\n positionalParams: derivePositionalParams(tool.parameters),\n passthroughParam,\n }\n}\n\nfunction splitDescription(description: string): { summary: string; details?: string } {\n const match = description.match(/^(.+?[.!?])\\s+([\\s\\S]+)$/)\n if (!match) {\n return { summary: description.trim() }\n }\n\n const summary = match[1].trim()\n const rest = match[2].trim()\n return rest.length > 0 ? { summary, details: rest } : { summary }\n}\n\nfunction parseToolCommandArguments(\n descriptor: CommandDescriptor,\n args: string[],\n _options?: {\n allowTruncated?: boolean\n },\n): { ok: true; parameters: Record<string, unknown> } | { ok: false; error: string } {\n if (descriptor.passthroughParam) {\n const passthroughArgs = args.join(\" \").trim()\n if (!passthroughArgs) {\n return {\n ok: false,\n error: `${descriptor.command}: missing required ${descriptor.passthroughParam}. Usage: ${descriptor.usage}`,\n }\n }\n\n return {\n ok: true,\n parameters: {\n [descriptor.passthroughParam]: passthroughArgs,\n },\n }\n }\n\n const parameters = descriptor.parameters\n const paramEntries = Object.entries(parameters)\n const parsed = parseCommandArgs(descriptor, args)\n\n if (parsed.error) {\n return {\n ok: false,\n error: parsed.error,\n }\n }\n\n if (parsed.unknownFlags.length > 0) {\n const firstUnknownFlag = parsed.unknownFlags[0]\n const positionalFlagHint = buildPositionalFlagError(descriptor, firstUnknownFlag)\n return {\n ok: false,\n error: positionalFlagHint\n ?? `${descriptor.command}: unknown flag ${firstUnknownFlag}. Usage: ${descriptor.usage}`,\n }\n }\n\n const params: Record<string, unknown> = { ...parsed.flags }\n const positional = parsed.positional\n const positionalParams = descriptor.positionalParams\n\n const assignmentStyleParameterError = positional\n .map((token) => buildAssignmentStyleParameterError(descriptor, token))\n .find((error): error is string => typeof error === \"string\")\n\n if (assignmentStyleParameterError) {\n return {\n ok: false,\n error: assignmentStyleParameterError,\n }\n }\n\n if (positional.length > 0) {\n if (positionalParams.length === 0) {\n return {\n ok: false,\n error: `${descriptor.command}: unexpected positional arguments. Usage: ${descriptor.usage}`,\n }\n }\n\n const lastPositionalName = positionalParams[positionalParams.length - 1]\n const lastPositionalDefinition = parameters[lastPositionalName]\n const joinRemainder =\n positional.length > positionalParams.length &&\n lastPositionalDefinition &&\n isStringType(lastPositionalDefinition.type)\n\n for (let index = 0; index < positionalParams.length; index++) {\n const paramName = positionalParams[index]\n const definition = parameters[paramName]\n if (!definition || params[paramName] !== undefined) {\n continue\n }\n\n if (joinRemainder && index === positionalParams.length - 1) {\n params[paramName] = coerceCliValue(positional.slice(index).join(\" \"), definition)\n break\n }\n\n const value = positional[index]\n if (value !== undefined) {\n params[paramName] = coerceCliValue(value, definition)\n }\n }\n\n if (!joinRemainder && positional.length > positionalParams.length) {\n return {\n ok: false,\n error: `${descriptor.command}: too many positional arguments. Usage: ${descriptor.usage}`,\n }\n }\n }\n\n const missingRequired = paramEntries.filter(\n ([name, definition]) => definition.required && params[name] === undefined,\n )\n\n if (missingRequired.length > 0) {\n return {\n ok: false,\n error: `${descriptor.command}: missing required ${missingRequired.map(([name]) => name).join(\", \")}. Usage: ${descriptor.usage}`,\n }\n }\n\n return { ok: true, parameters: params }\n}\n\nfunction parseCommandArgs(\n descriptor: CommandDescriptor,\n args: string[],\n): ParsedCommandArgs {\n const parameterDefinitions = descriptor.parameters\n const flags: Record<string, unknown> = {}\n const positional: string[] = []\n const unknownFlags: string[] = []\n const flagParameters = new Map<string, [string, ToolParameterDefinition]>()\n\n for (const [parameterName, definition] of Object.entries(parameterDefinitions)) {\n flagParameters.set(toFlagName(parameterName), [parameterName, definition])\n }\n\n for (let index = 0; index < args.length; index++) {\n const token = args[index]\n\n if (token === \"--\") {\n positional.push(...args.slice(index + 1))\n break\n }\n\n if (token === \"-\" || !token.startsWith(\"-\")) {\n positional.push(token)\n continue\n }\n\n if (!token.startsWith(\"--\")) {\n unknownFlags.push(token)\n continue\n }\n\n if (token.startsWith(\"--no-\")) {\n const flagName = token.slice(5)\n const parameterEntry = flagParameters.get(flagName)\n if (!parameterEntry || !isBooleanType(parameterEntry[1].type)) {\n unknownFlags.push(token)\n continue\n }\n\n flags[parameterEntry[0]] = false\n continue\n }\n\n const equalsIndex = token.indexOf(\"=\")\n const flagToken = equalsIndex >= 0 ? token.slice(0, equalsIndex) : token\n const flagName = flagToken.slice(2)\n const parameterEntry = flagParameters.get(flagName)\n\n if (!parameterEntry) {\n unknownFlags.push(flagToken)\n continue\n }\n\n if (equalsIndex >= 0) {\n return {\n positional,\n flags,\n unknownFlags,\n error: `${descriptor.command}: ${token} is not valid. Use ${flagToken} <value> with a space-separated value. Usage: ${descriptor.usage}`,\n }\n }\n\n const [parameterName, definition] = parameterEntry\n if (descriptor.positionalParams.includes(parameterName)) {\n return {\n positional,\n flags,\n unknownFlags,\n error: buildRequiredPositionalParameterFlagError(\n descriptor,\n flagToken,\n parameterName,\n ),\n }\n }\n\n if (isBooleanType(definition.type)) {\n flags[parameterName] = true\n continue\n }\n\n const rawValue = args[index + 1]\n\n if (rawValue === undefined || rawValue.length === 0) {\n return {\n positional,\n flags,\n unknownFlags,\n error: `${descriptor.command}: ${flagToken} requires a value. Usage: ${descriptor.usage}`,\n }\n }\n\n // For array/object types, if the value starts with [ or { but\n // isn't bracket-balanced (tokenizer split the JSON), greedily\n // consume subsequent tokens until brackets close.\n const expectedTypes = Array.isArray(definition.type)\n ? definition.type\n : [definition.type]\n if (\n (expectedTypes.includes(\"array\") || expectedTypes.includes(\"object\"))\n && /^[\\[{]/.test(rawValue)\n && !isBracketBalanced(rawValue)\n ) {\n let aggregated = rawValue\n let endIdx = index + 1\n while (!isBracketBalanced(aggregated) && endIdx + 1 < args.length) {\n endIdx++\n aggregated += \" \" + args[endIdx]\n }\n flags[parameterName] = coerceCliValue(aggregated, definition)\n index = endIdx\n continue\n }\n\n flags[parameterName] = coerceCliValue(rawValue, definition)\n index += 1\n }\n\n return {\n positional,\n flags,\n unknownFlags,\n }\n}\n\nfunction buildUsage(\n command: string,\n parameters: Record<string, ToolParameterDefinition>,\n passthroughParam?: string,\n): string {\n if (passthroughParam) {\n return `${command} <${passthroughParam}...>`\n }\n\n const parts = [command]\n const positional = derivePositionalParams(parameters)\n\n for (const name of positional) {\n const definition = parameters[name]\n if (definition?.required) {\n parts.push(`<${name}>`)\n } else {\n parts.push(`[${name}]`)\n }\n }\n\n for (const [name, definition] of Object.entries(parameters)) {\n if (positional.includes(name)) {\n continue\n }\n\n const flag = `--${toFlagName(name)}`\n if (definition.required) {\n parts.push(isBooleanType(definition.type) ? flag : `${flag} <${formatType(definition.type)}>`)\n } else {\n parts.push(isBooleanType(definition.type) ? `[${flag}]` : `[${flag} <${formatType(definition.type)}>]`)\n }\n }\n\n return parts.join(\" \")\n}\n\nfunction derivePositionalParams(\n parameters: Record<string, ToolParameterDefinition>,\n): string[] {\n return Object.entries(parameters)\n .filter(([, definition]) => isPositionalParameterDefinition(definition))\n .map(([name]) => name)\n}\n\nfunction isPositionalParameterDefinition(\n definition: ToolParameterDefinition,\n): boolean {\n if (!definition.required || isBooleanType(definition.type)) {\n return false\n }\n\n return definition.positional !== false\n}\n\nfunction derivePassthroughParam(tool: ToolDefinition): string | undefined {\n if (!tool.metadata?.capabilities?.includes(\"raw_command_args\")) {\n return undefined\n }\n\n const parameterEntries = Object.entries(tool.parameters)\n if (parameterEntries.length !== 1) {\n return undefined\n }\n\n const [parameterName, definition] = parameterEntries[0]\n if (!definition.required || !isStringType(definition.type)) {\n return undefined\n }\n\n return parameterName\n}\n\nfunction parsePassthroughToolCommand(\n descriptor: CommandDescriptor,\n command: string,\n): { ok: true; parameters: Record<string, unknown> } | { ok: false; error: string } {\n const passthroughParam = descriptor.passthroughParam\n if (!passthroughParam) {\n return {\n ok: false,\n error: `${descriptor.command}: internal passthrough parsing error. Usage: ${descriptor.usage}`,\n }\n }\n\n const trimmed = command.trim()\n if (!trimmed.startsWith(descriptor.command)) {\n return {\n ok: false,\n error: `${descriptor.command}: invocation must start with ${descriptor.command}. Usage: ${descriptor.usage}`,\n }\n }\n\n const nextCharacter = trimmed[descriptor.command.length]\n if (nextCharacter && !/\\s/.test(nextCharacter)) {\n return {\n ok: false,\n error: `${descriptor.command}: invocation must start with ${descriptor.command}. Usage: ${descriptor.usage}`,\n }\n }\n\n const rawArguments = trimmed.slice(descriptor.command.length).trim()\n if (!rawArguments) {\n return {\n ok: false,\n error: `${descriptor.command}: missing required ${passthroughParam}. Usage: ${descriptor.usage}`,\n }\n }\n\n const passthroughWrapperMatch = rawArguments.match(/^--([a-zA-Z][\\w-]*)(?:\\s|=)/)\n if (passthroughWrapperMatch) {\n const wrapperFlag = `--${passthroughWrapperMatch[1]}`\n const acceptedWrapperFlags = new Set([`--${toFlagName(passthroughParam)}`])\n\n if (acceptedWrapperFlags.has(wrapperFlag)) {\n const afterFlag = rawArguments.slice(passthroughWrapperMatch[0].length).trim()\n if (afterFlag) {\n return { ok: true, parameters: { [passthroughParam]: afterFlag } }\n }\n return {\n ok: false,\n error: `${descriptor.command}: missing required ${passthroughParam} after ${wrapperFlag}. Usage: ${descriptor.usage}`,\n }\n }\n if (wrapperFlag === \"--options\") {\n return {\n ok: false,\n error: `${descriptor.command}: ${wrapperFlag} is not valid for this passthrough tool. Provide the raw argument string positionally after the tool name. Usage: ${descriptor.usage}`,\n }\n }\n }\n\n return {\n ok: true,\n parameters: {\n [passthroughParam]: rawArguments,\n },\n }\n}\n\nfunction buildPositionalFlagError(\n descriptor: CommandDescriptor,\n flagToken: string,\n): string | undefined {\n if (!flagToken.startsWith(\"--\")) {\n return undefined\n }\n\n const normalizedFlagName = flagToken.startsWith(\"--no-\")\n ? flagToken.slice(5)\n : flagToken.slice(2)\n\n for (const positionalName of descriptor.positionalParams) {\n if (toFlagName(positionalName) === normalizedFlagName) {\n return buildRequiredPositionalParameterFlagError(\n descriptor,\n flagToken,\n positionalName,\n )\n }\n }\n\n return undefined\n}\n\nfunction buildRequiredPositionalParameterFlagError(\n descriptor: CommandDescriptor,\n flagToken: string,\n parameterName: string,\n): string {\n return `${descriptor.command}: ${flagToken} is not valid for required positional parameter ${parameterName}. Provide that value positionally. Usage: ${descriptor.usage}`\n}\n\nfunction buildAssignmentStyleParameterError(\n descriptor: CommandDescriptor,\n token: string,\n): string | undefined {\n const parameterMatch = matchAssignmentStyleParameter(descriptor, token)\n if (!parameterMatch) {\n return undefined\n }\n\n const { parameterName, definition, rawName } = parameterMatch\n if (descriptor.positionalParams.includes(parameterName)) {\n return `${descriptor.command}: ${token} is not valid for required positional parameter ${parameterName}. Provide that value positionally without ${rawName}=. Usage: ${descriptor.usage}`\n }\n\n const flagName = `--${toFlagName(parameterName)}`\n if (isBooleanType(definition.type)) {\n return `${descriptor.command}: ${token} is not valid for parameter ${parameterName}. Use ${flagName} or --no-${toFlagName(parameterName)}. Usage: ${descriptor.usage}`\n }\n\n return `${descriptor.command}: ${token} is not valid for parameter ${parameterName}. Use ${flagName} <${formatType(definition.type)}>. Usage: ${descriptor.usage}`\n}\n\nfunction matchAssignmentStyleParameter(\n descriptor: CommandDescriptor,\n token: string,\n): {\n parameterName: string\n definition: ToolParameterDefinition\n rawName: string\n rawValue: string\n} | null {\n const match = token.match(/^([A-Za-z_][\\w-]*)=(.+)$/)\n if (!match) {\n return null\n }\n\n const [, rawName, rawValue] = match\n const parameterEntry = Object.entries(descriptor.parameters).find(([name]) => (\n name === rawName || toFlagName(name) === rawName\n ))\n\n if (!parameterEntry) {\n return null\n }\n\n const [parameterName, definition] = parameterEntry\n\n return {\n parameterName,\n definition,\n rawName,\n rawValue,\n }\n}\n\nfunction parseCommandChain(\n command: string,\n): { commands: string[][]; operators: ChainOperator[] } | null {\n const tokens = tokenizeCommand(command)\n if (!tokens) {\n return null\n }\n if (tokens.length === 0) {\n return { commands: [], operators: [] }\n }\n\n const commands: string[][] = []\n const operators: ChainOperator[] = []\n let current: string[] = []\n\n for (const token of tokens) {\n if (isOperatorToken(token)) {\n if (current.length === 0) {\n return null\n }\n commands.push(current)\n operators.push(token)\n current = []\n continue\n }\n current.push(token)\n }\n\n if (current.length === 0) {\n return null\n }\n\n commands.push(current)\n return { commands, operators }\n}\n\nfunction tokenizeCommand(\n command: string,\n options?: { allowTruncated?: boolean },\n): string[] | null {\n const tokens: string[] = []\n let current = \"\"\n let quote: '\"' | \"'\" | null = null\n let escaping = false\n let bracketDepth = 0\n const allowTruncated = options?.allowTruncated === true\n\n const flush = () => {\n if (current.length > 0) {\n tokens.push(current)\n current = \"\"\n }\n }\n\n for (let index = 0; index < command.length; index++) {\n const char = command[index]\n const next = command[index + 1]\n\n if (escaping) {\n current += shouldConsumeEscape(char, quote)\n ? char\n : `\\\\${char}`\n escaping = false\n continue\n }\n\n if (char === \"\\\\\") {\n escaping = true\n continue\n }\n\n if (quote) {\n if (char === quote) {\n quote = null\n // Inside a bracket literal, preserve the quotes so the\n // resulting token is valid JSON.\n if (bracketDepth > 0) {\n current += char\n }\n } else {\n current += char\n }\n continue\n }\n\n if (char === '\"' || char === \"'\") {\n // Inside a bracket literal, preserve opening quotes.\n if (bracketDepth > 0) {\n current += char\n }\n quote = char\n continue\n }\n\n // Bracket-balanced JSON literal: [ ... ] or { ... }\n if (bracketDepth > 0) {\n if (char === \"[\" || char === \"{\") {\n bracketDepth++\n } else if (char === \"]\" || char === \"}\") {\n bracketDepth--\n }\n current += char\n continue\n }\n\n if (char === \"[\" || char === \"{\") {\n bracketDepth = 1\n current += char\n continue\n }\n\n if (char === \"&\" && next === \"&\") {\n flush()\n tokens.push(\"&&\")\n index++\n continue\n }\n\n if (char === \"|\" && next === \"|\") {\n flush()\n tokens.push(\"||\")\n index++\n continue\n }\n\n if (char === \"|\" || char === \";\") {\n flush()\n tokens.push(char)\n continue\n }\n\n if (/\\s/.test(char)) {\n flush()\n continue\n }\n\n current += char\n }\n\n if (escaping || quote || (bracketDepth > 0 && !allowTruncated)) {\n if (!allowTruncated) {\n return null\n }\n\n if (escaping) {\n current += \"\\\\\"\n }\n\n flush()\n return tokens\n }\n\n flush()\n return tokens\n}\n\nfunction shouldConsumeEscape(\n char: string,\n quote: '\"' | \"'\" | null,\n): boolean {\n if (quote === \"'\") {\n return char === \"'\" || char === \"\\\\\"\n }\n\n if (quote === '\"') {\n return char === '\"' || char === \"\\\\\"\n }\n\n return /\\s/.test(char) || char === '\"' || char === \"'\" || char === \"\\\\\" || char === \"|\" || char === \"&\" || char === \";\"\n}\n\n/**\n * Returns true when every `[` / `{` in the string has a matching `]` / `}`.\n * Respects double-quoted JSON strings (escaped quotes are handled).\n */\nfunction isBracketBalanced(value: string): boolean {\n let depth = 0\n let inString = false\n let escaping = false\n for (const char of value) {\n if (escaping) {\n escaping = false\n continue\n }\n if (char === \"\\\\\") {\n escaping = true\n continue\n }\n if (char === '\"') {\n inString = !inString\n continue\n }\n if (inString) continue\n if (char === \"[\" || char === \"{\") depth++\n else if (char === \"]\" || char === \"}\") depth--\n }\n return depth === 0\n}\n\n/**\n * Last-resort recovery: scan the raw command string for `--flag`\n * followed by a bracket-balanced JSON value. This bypasses the\n * tokenizer entirely and handles cases where the tokenizer splits\n * or corrupts inline JSON.\n */\nfunction tryRecoverFlagParamsFromRawCommand(\n descriptor: CommandDescriptor,\n command: string,\n): { ok: true; parameters: Record<string, unknown> } | null {\n const params: Record<string, unknown> = {}\n let recovered = false\n\n for (const [paramName, definition] of Object.entries(descriptor.parameters)) {\n const expectedTypes = Array.isArray(definition.type) ? definition.type : [definition.type]\n if (!expectedTypes.includes(\"array\") && !expectedTypes.includes(\"object\")) {\n continue\n }\n\n const flagName = `--${toFlagName(paramName)}`\n const flagIdx = command.indexOf(flagName)\n if (flagIdx < 0) continue\n\n // Find the start of the JSON value after the flag\n let start = flagIdx + flagName.length\n // Skip whitespace between flag and value\n while (start < command.length && /\\s/.test(command[start])) start++\n if (start >= command.length) continue\n\n const opener = command[start]\n if (opener !== \"[\" && opener !== \"{\") continue\n\n // Extract bracket-balanced substring\n const jsonStr = extractBracketBalanced(command, start)\n if (!jsonStr) continue\n\n try {\n params[paramName] = JSON.parse(jsonStr)\n recovered = true\n } catch {\n // Not valid JSON, skip\n }\n }\n\n if (!recovered) return null\n\n // Check required params that weren't recovered\n for (const [name, definition] of Object.entries(descriptor.parameters)) {\n if (definition.required && params[name] === undefined) {\n return null\n }\n }\n\n return { ok: true, parameters: params }\n}\n\n/**\n * Extract a bracket-balanced substring starting at `start`.\n * Respects double-quoted strings inside the JSON.\n */\nfunction extractBracketBalanced(str: string, start: number): string | null {\n let depth = 0\n let inString = false\n let escaping = false\n\n for (let i = start; i < str.length; i++) {\n const char = str[i]\n if (escaping) {\n escaping = false\n continue\n }\n if (char === \"\\\\\") {\n escaping = true\n continue\n }\n if (char === '\"') {\n inString = !inString\n continue\n }\n if (inString) continue\n if (char === \"[\" || char === \"{\") depth++\n else if (char === \"]\" || char === \"}\") {\n depth--\n if (depth === 0) {\n return str.slice(start, i + 1)\n }\n }\n }\n return null\n}\n\nfunction normalizeCommandName(name: string): string {\n return name.trim().toLowerCase()\n}\n\nfunction isOperatorToken(token: string): token is ChainOperator {\n return token === \"|\" || token === \"&&\" || token === \"||\" || token === \";\"\n}\n\nfunction readToolCallParameter(\n parameters: Record<string, any>,\n parameterName: string,\n): unknown {\n if (parameters[parameterName] !== undefined) {\n return parameters[parameterName]\n }\n\n if (parameterName === \"path\" && parameters.file_path !== undefined) {\n return parameters.file_path\n }\n\n if (parameterName === \"taskId\" && parameters.task_id !== undefined) {\n return parameters.task_id\n }\n\n return undefined\n}\n\nfunction formatCliArgument(value: unknown): string {\n if (typeof value === \"string\") {\n return quoteCliArgument(value)\n }\n\n if (typeof value === \"number\" || typeof value === \"bigint\") {\n return String(value)\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"true\" : \"false\"\n }\n\n return quoteCliArgument(JSON.stringify(value))\n}\n\nfunction quoteCliArgument(value: string): string {\n if (value.length === 0) {\n return '\"\"'\n }\n\n if (/^[^\\s\"'|&;]+$/.test(value)) {\n return value\n }\n\n return `\"${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`\n}\n\nfunction toFlagName(name: string): string {\n return name.replace(/_/g, \"-\").toLowerCase()\n}\n\nfunction formatType(type: string | string[]): string {\n return Array.isArray(type) ? type.join(\"|\") : type\n}\n\nfunction isBooleanType(type: string | string[]): boolean {\n return (Array.isArray(type) ? type : [type]).includes(\"boolean\")\n}\n\nfunction isStringType(type: string | string[]): boolean {\n return (Array.isArray(type) ? type : [type]).includes(\"string\")\n}\n\nfunction coerceCliValue(\n value: string,\n definition: ToolParameterDefinition,\n): string | number | boolean | Record<string, unknown> | unknown[] {\n const expectedTypes = Array.isArray(definition.type)\n ? definition.type\n : [definition.type]\n\n if (expectedTypes.includes(\"boolean\")) {\n if (value === \"true\") return true\n if (value === \"false\") return false\n }\n\n if (expectedTypes.includes(\"integer\")) {\n const parsed = Number(value)\n if (Number.isInteger(parsed)) return parsed\n }\n\n if (expectedTypes.includes(\"number\")) {\n const parsed = Number(value)\n if (!Number.isNaN(parsed)) return parsed\n }\n\n if (expectedTypes.includes(\"array\") || expectedTypes.includes(\"object\")) {\n try {\n return JSON.parse(value) as Record<string, unknown> | unknown[]\n } catch {\n if (expectedTypes.includes(\"array\")) {\n const bracketArray = parseBracketArrayLiteral(value, definition)\n if (bracketArray) {\n return bracketArray\n }\n\n return value.split(\",\").map((entry) => entry.trim()).filter(Boolean)\n }\n }\n }\n\n return value\n}\n\nfunction parseBracketArrayLiteral(\n value: string,\n definition: ToolParameterDefinition,\n): unknown[] | null {\n if (!value.startsWith(\"[\") || !value.endsWith(\"]\")) {\n return null\n }\n\n const inner = value.slice(1, -1).trim()\n if (inner.length === 0) {\n return []\n }\n\n return inner\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean)\n .map((entry) => coerceArrayItemValue(stripWrappingQuotes(entry), definition))\n}\n\nfunction coerceArrayItemValue(\n value: string,\n definition: ToolParameterDefinition,\n): unknown {\n const itemType = definition.items?.type\n if (!itemType) {\n return value\n }\n\n const itemDefinition: ToolParameterDefinition = {\n type: itemType,\n description: definition.items?.description ?? definition.description,\n items: definition.items?.items,\n properties: definition.items?.properties,\n additionalProperties: definition.items?.additionalProperties,\n default: definition.items?.default,\n }\n\n return coerceCliValue(value, itemDefinition)\n}\n\nfunction stripWrappingQuotes(value: string): string {\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n return value.slice(1, -1)\n }\n\n return value\n}\n","export function decodeEscapedShellText(value: string): string {\n if (!/\\\\(?:[nrt'\"\\\\]|u[0-9a-fA-F]{4})/.test(value)) {\n return value\n }\n\n let decoded = \"\"\n let escaping = false\n let unicodeEscape = \"\"\n\n for (const char of value) {\n if (unicodeEscape.length > 0) {\n unicodeEscape += char\n\n if (unicodeEscape.length === 5) {\n if (/^u[0-9a-fA-F]{4}$/.test(unicodeEscape)) {\n decoded += String.fromCharCode(Number.parseInt(unicodeEscape.slice(1), 16))\n } else {\n decoded += `\\\\${unicodeEscape}`\n }\n unicodeEscape = \"\"\n }\n continue\n }\n\n if (!escaping) {\n if (char === \"\\\\\") {\n escaping = true\n } else {\n decoded += char\n }\n continue\n }\n\n escaping = false\n\n switch (char) {\n case \"n\":\n decoded += \"\\n\"\n break\n case \"r\":\n decoded += \"\\r\"\n break\n case \"t\":\n decoded += \"\\t\"\n break\n case '\"':\n decoded += '\"'\n break\n case \"'\":\n decoded += \"'\"\n break\n case \"\\\\\":\n decoded += \"\\\\\"\n break\n case \"u\":\n unicodeEscape = \"u\"\n break\n default:\n decoded += `\\\\${char}`\n break\n }\n }\n\n if (unicodeEscape.length > 0) {\n decoded += `\\\\${unicodeEscape}`\n }\n\n if (escaping) {\n decoded += \"\\\\\"\n }\n\n return decoded\n}","import type {\n LoopOutcome,\n ToolCall,\n ToolDefinition,\n ToolResult,\n} from \"./types\"\nimport {\n enrichToolResultWithUnixMetadata,\n executeBackgroundUnixCommandString,\n executeUnixCommandString,\n parseUnixToolCommand,\n tokenizeUnixCommand,\n type CommandRuntime,\n} from \"./unix-tooling\"\nimport { decodeEscapedShellText } from \"./shell-escape-normalization\"\n\nexport type RunInvocationTarget = \"tool\" | \"bash\" | \"background_bash\"\n\nexport interface ExtractedRunInvocationLike {\n target: RunInvocationTarget\n command: string\n truncated: boolean\n}\n\nexport interface RunCommandParseResult {\n outcome?: LoopOutcome\n selectedToolCall?: ToolCall\n selectedToolCallCount?: number\n}\n\nexport interface RunCommandPromptAvailability {\n bashAvailable: boolean\n backgroundBashAvailable: boolean\n}\n\nconst RUN_TOOL_ALIAS_VALIDATION_ERROR_PREFIX = \"VALIDATION_ERROR:\"\n\nfunction normalizeRunToolName(name: string): string {\n return name.replace(/[_\\-\\s]+/g, \"\").toLowerCase()\n}\n\nfunction buildMisroutedRunToolValidationError(toolName: string): Error | null {\n const normalizedToolName = normalizeRunToolName(toolName)\n\n if (normalizedToolName === \"bash\") {\n return new Error(\n `${RUN_TOOL_ALIAS_VALIDATION_ERROR_PREFIX} Bash is not a registered tool name. You wrote a tool payload with a bash command. Use the ---bash--- header instead.`,\n )\n }\n\n if (normalizedToolName === \"backgroundbash\") {\n return new Error(\n `${RUN_TOOL_ALIAS_VALIDATION_ERROR_PREFIX} BackgroundBash is not a registered tool name. Use the ---background_bash--- header instead of a tool payload.`,\n )\n }\n\n return null\n}\n\nexport type BackgroundBashAction = \"start\" | \"status\" | \"logs\" | \"stop\"\n\nexport interface ParsedBackgroundBashCommand {\n action: BackgroundBashAction\n name: string\n rawCommand: string\n startCommand?: string\n port?: number\n tailBytes?: number\n}\n\nexport const DEFAULT_ALLOWED_RUN_TARGETS: readonly RunInvocationTarget[] = [\n \"tool\",\n \"bash\",\n]\n\nexport const SUPPORTED_RUN_TARGETS: readonly RunInvocationTarget[] = [\n \"tool\",\n \"bash\",\n \"background_bash\",\n]\n\nfunction normalizeShellPromptCommand(command: string): string {\n const trimmedCommand = decodeEscapedMultilineCommand(command.trim())\n if (!/^\\$\\s+/.test(trimmedCommand)) {\n return stripTranscriptArtifactsAfterHeredoc(trimmedCommand)\n }\n\n const lines = trimmedCommand.split(/\\r?\\n/)\n const normalizedLines = [...lines]\n normalizedLines[0] = normalizedLines[0]!.replace(/^\\$\\s+/, \"\")\n\n const continuationLines = normalizedLines.slice(1)\n if (\n continuationLines.length > 0\n && continuationLines.every((line) => line.trim().length === 0 || /^>\\s?/.test(line))\n ) {\n for (let index = 1; index < normalizedLines.length; index += 1) {\n normalizedLines[index] = normalizedLines[index]!.replace(/^>\\s?/, \"\")\n }\n }\n\n return stripTranscriptArtifactsAfterHeredoc(normalizedLines.join(\"\\n\").trim())\n}\n\nfunction decodeEscapedMultilineCommand(command: string): string {\n if (command.includes(\"\\n\") || command.includes(\"\\r\")) {\n return command\n }\n\n return decodeEscapedShellText(command)\n}\n\nfunction stripTranscriptArtifactsAfterHeredoc(command: string): string {\n const lines = command.split(/\\r?\\n/)\n const heredocInfo = findFirstHeredoc(lines)\n if (!heredocInfo) {\n return command\n }\n\n const { terminator, startLineIndex, terminatorLineIndex } = heredocInfo\n\n if (terminatorLineIndex === -1) {\n const firstTranscriptArtifactLineIndex = lines.findIndex(\n (line, index) =>\n index > startLineIndex\n && isTranscriptArtifactLine(line?.trim() ?? \"\"),\n )\n\n if (firstTranscriptArtifactLineIndex !== -1) {\n return [\n ...lines.slice(0, firstTranscriptArtifactLineIndex),\n terminator,\n ].join(\"\\n\").trim()\n }\n\n return [...lines, terminator].join(\"\\n\").trim()\n }\n\n const normalizedLines = collapseDuplicateHeredocTerminators(\n lines,\n terminator,\n terminatorLineIndex,\n )\n const normalizedTerminatorLineIndex = findTerminatorLineIndex(\n normalizedLines,\n terminator,\n startLineIndex,\n )\n\n const firstTranscriptArtifactLineIndex = normalizedLines.findIndex(\n (line, index) =>\n index > normalizedTerminatorLineIndex\n && isTranscriptArtifactLine(line?.trim() ?? \"\"),\n )\n\n if (firstTranscriptArtifactLineIndex !== -1) {\n return normalizedLines.slice(0, normalizedTerminatorLineIndex + 1).join(\"\\n\").trim()\n }\n\n return normalizedLines.join(\"\\n\").trim()\n}\n\nfunction findFirstHeredoc(lines: string[]): {\n terminator: string\n startLineIndex: number\n terminatorLineIndex: number\n} | null {\n for (let index = 0; index < lines.length; index += 1) {\n const match = lines[index]?.match(/<<-?\\s*(['\"]?)([A-Za-z_][A-Za-z0-9_]*)\\1/)\n if (!match?.[2]) {\n continue\n }\n\n const terminator = match[2]\n let terminatorLineIndex = -1\n\n for (let lineIndex = index + 1; lineIndex < lines.length; lineIndex += 1) {\n if (lines[lineIndex]?.trim() === terminator) {\n terminatorLineIndex = lineIndex\n break\n }\n }\n\n return {\n terminator,\n startLineIndex: index,\n terminatorLineIndex,\n }\n }\n\n return null\n}\n\nfunction findTerminatorLineIndex(\n lines: string[],\n terminator: string,\n startLineIndex: number,\n): number {\n for (let lineIndex = startLineIndex + 1; lineIndex < lines.length; lineIndex += 1) {\n if (lines[lineIndex]?.trim() === terminator) {\n return lineIndex\n }\n }\n\n return -1\n}\n\nfunction collapseDuplicateHeredocTerminators(\n lines: string[],\n terminator: string,\n terminatorLineIndex: number,\n): string[] {\n const normalizedLines = [...lines]\n let duplicateLineIndex = terminatorLineIndex + 1\n\n while (normalizedLines[duplicateLineIndex]?.trim() === terminator) {\n normalizedLines.splice(duplicateLineIndex, 1)\n }\n\n return normalizedLines\n}\n\nfunction isTranscriptArtifactLine(line: string): boolean {\n return /^\\[(?:stderr|meta|exit)\\]$/i.test(line)\n || /^\\[[A-Z_]+(?::[^\\]]+)?\\]$/.test(line)\n || /^\\$(?:\\s|$)/.test(line)\n || /^[^\\s@]+@.+[$#>]$/.test(line)\n}\n\nexport function createBackgroundBashDefinition({\n description,\n portDescription,\n}: {\n description: string\n portDescription: string\n}): ToolDefinition {\n return {\n name: \"BackgroundBash\",\n description,\n usageExample: 'BackgroundBash start hello --command \"bun server.js\" --port 3000',\n parameters: {\n action: {\n type: \"string\",\n description: \"Background process action: start, status, stop, or logs.\",\n required: true,\n positional: true,\n enum: [\"start\", \"status\", \"stop\", \"logs\"] as const,\n },\n name: {\n type: \"string\",\n description: \"Stable process name, such as hello or dev-server.\",\n required: true,\n positional: true,\n },\n command: {\n type: \"string\",\n description: \"Shell command to start the process. Required only for start.\",\n },\n port: {\n type: \"number\",\n description: portDescription,\n },\n tail_bytes: {\n type: \"number\",\n description: \"Optional number of trailing log bytes to return for status or logs.\",\n },\n },\n }\n}\n\nexport abstract class RunCommand {\n readonly target: RunInvocationTarget\n\n protected constructor(target: RunInvocationTarget) {\n this.target = target\n }\n\n abstract isAvailable(runtime: CommandRuntime): boolean\n\n abstract parseInvocation(\n invocation: ExtractedRunInvocationLike,\n options?: { allowTruncated?: boolean },\n ): RunCommandParseResult | null\n\n abstract execute(\n toolCall: ToolCall,\n runtime: CommandRuntime,\n ): Promise<ToolResult>\n\n matchesToolCall(toolCall: ToolCall): boolean {\n if (toolCall.kind) {\n return toolCall.kind === this.target\n }\n\n return this.target === \"tool\"\n }\n}\n\nexport class ToolRunCommand extends RunCommand {\n constructor() {\n super(\"tool\")\n }\n\n isAvailable(runtime: CommandRuntime): boolean {\n return runtime.getToolDefinitions().length > 0\n }\n\n parseInvocation(\n invocation: ExtractedRunInvocationLike,\n options?: { allowTruncated?: boolean },\n ): RunCommandParseResult | null {\n const tokens = tokenizeUnixCommand(invocation.command, {\n allowTruncated: options?.allowTruncated === true && invocation.truncated,\n })\n const toolName = tokens?.[0]?.trim()\n if (!toolName) {\n return null\n }\n\n const aliasError = buildMisroutedRunToolValidationError(toolName)\n if (aliasError) {\n throw aliasError\n }\n\n return {\n outcome: \"continue\",\n selectedToolCall: {\n kind: \"tool\",\n name: toolName,\n parameters: {},\n rawInvocation: invocation.command,\n ...(invocation.truncated ? { truncated: true } : {}),\n },\n selectedToolCallCount: 1,\n }\n }\n\n async execute(\n toolCall: ToolCall,\n runtime: CommandRuntime,\n ): Promise<ToolResult> {\n const toolDefinitions = runtime.getToolDefinitions()\n const definition = toolDefinitions.find((tool) => tool.name === toolCall.name)\n let effectiveParameters = toolCall.parameters\n\n if (\n definition\n && typeof toolCall.rawInvocation === \"string\"\n && toolCall.rawInvocation.trim().length > 0\n ) {\n const parsed = parseUnixToolCommand(definition, toolCall.rawInvocation, {\n allowTruncated: toolCall.truncated === true,\n })\n\n if (parsed.ok) {\n effectiveParameters = parsed.parameters as Record<string, any>\n } else {\n return enrichToolResultWithUnixMetadata(\n toolCall,\n {\n success: false,\n error: parsed.error,\n stderr: parsed.error,\n exit_code: 1,\n },\n toolDefinitions,\n )\n }\n }\n\n const result = await runtime.executeTool(toolCall.name, effectiveParameters)\n return enrichToolResultWithUnixMetadata(toolCall, result, toolDefinitions)\n }\n}\n\nexport class BashRunCommand extends RunCommand {\n constructor() {\n super(\"bash\")\n }\n\n protected getCommand(toolCall: ToolCall): string {\n return typeof toolCall.parameters?.command === \"string\"\n ? toolCall.parameters.command\n : \"\"\n }\n\n isAvailable(runtime: CommandRuntime): boolean {\n return typeof runtime.executeBash === \"function\"\n }\n\n parseInvocation(invocation: ExtractedRunInvocationLike): RunCommandParseResult | null {\n const normalizedCommand = normalizeShellPromptCommand(invocation.command)\n const tokens = tokenizeUnixCommand(normalizedCommand, {\n allowTruncated: invocation.truncated,\n })\n if (!tokens || tokens.length === 0) {\n return null\n }\n\n if (tokens[0] === \"exit\") {\n if (tokens.length === 2 && tokens[1] === \"0\") {\n return { outcome: \"success\" }\n }\n\n if (tokens.length === 2 && tokens[1] === \"1\") {\n return { outcome: \"failure\" }\n }\n\n return null\n }\n\n return {\n outcome: \"continue\",\n selectedToolCall: {\n kind: \"bash\",\n name: \"Bash\",\n parameters: { command: normalizedCommand },\n ...(invocation.truncated ? { truncated: true } : {}),\n },\n selectedToolCallCount: 1,\n }\n }\n\n protected async executeCommand(\n command: string,\n runtime?: CommandRuntime,\n ): Promise<ToolResult> {\n if (!runtime) {\n throw new Error(\"Bash runtime is required\")\n }\n\n return executeUnixCommandString(command, runtime)\n }\n\n executeRaw(\n command: string,\n runtime?: CommandRuntime,\n ): Promise<ToolResult> {\n return this.executeCommand(command, runtime)\n }\n\n async execute(\n toolCall: ToolCall,\n runtime: CommandRuntime,\n ): Promise<ToolResult> {\n return enrichToolResultWithUnixMetadata(\n toolCall,\n await this.executeRaw(this.getCommand(toolCall), runtime),\n )\n }\n}\n\nexport class BackgroundBashRunCommand extends RunCommand {\n constructor() {\n super(\"background_bash\")\n }\n\n protected getCommand(toolCall: ToolCall): string {\n return typeof toolCall.parameters?.command === \"string\"\n ? toolCall.parameters.command\n : \"\"\n }\n\n isAvailable(runtime: CommandRuntime): boolean {\n return typeof runtime.executeBackgroundBash === \"function\"\n }\n\n parseInvocation(invocation: ExtractedRunInvocationLike): RunCommandParseResult | null {\n const normalizedCommand = normalizeShellPromptCommand(invocation.command)\n\n if (!normalizedCommand) {\n return null\n }\n\n return {\n outcome: \"continue\",\n selectedToolCall: {\n kind: \"background_bash\",\n name: \"BackgroundBash\",\n parameters: { command: normalizedCommand },\n rawInvocation: normalizedCommand,\n ...(invocation.truncated ? { truncated: true } : {}),\n },\n selectedToolCallCount: 1,\n }\n }\n\n protected async executeCommand(\n command: string,\n runtime?: CommandRuntime,\n ): Promise<ToolResult> {\n if (!runtime) {\n throw new Error(\"Background bash runtime is required\")\n }\n\n return executeBackgroundUnixCommandString(command, runtime)\n }\n\n executeRaw(\n command: string,\n runtime?: CommandRuntime,\n ): Promise<ToolResult> {\n return this.executeCommand(command, runtime)\n }\n\n protected buildBackgroundBashErrorResult(command: string, error: string): ToolResult {\n return {\n success: false,\n command,\n error,\n stderr: error,\n exit_code: 1,\n route: \"background_bash\",\n }\n }\n\n protected parseBackgroundBashCommand(\n definition: ToolDefinition,\n command: string,\n ):\n | { ok: true; value: ParsedBackgroundBashCommand }\n | { ok: false; result: ToolResult } {\n const parsed = parseUnixToolCommand(definition, `BackgroundBash ${command}`)\n if (!parsed.ok) {\n return {\n ok: false,\n result: this.buildBackgroundBashErrorResult(command, parsed.error),\n }\n }\n\n const parameters = parsed.parameters as Record<string, unknown>\n const action = String(parameters.action || \"\") as BackgroundBashAction\n const name = String(parameters.name || \"\").trim()\n const startCommand = typeof parameters.command === \"string\"\n ? parameters.command.trim()\n : \"\"\n const port = typeof parameters.port === \"number\" ? parameters.port : undefined\n const tailBytes = typeof parameters.tail_bytes === \"number\"\n ? parameters.tail_bytes\n : undefined\n\n if (!name) {\n return {\n ok: false,\n result: this.buildBackgroundBashErrorResult(\n command,\n \"BackgroundBash: name is required\",\n ),\n }\n }\n\n if (action === \"start\" && !startCommand) {\n return {\n ok: false,\n result: this.buildBackgroundBashErrorResult(\n command,\n \"BackgroundBash: command is required for start. Usage: BackgroundBash start <name> --command <string> [--port <number>]\",\n ),\n }\n }\n\n return {\n ok: true,\n value: {\n action,\n name,\n rawCommand: command,\n ...(startCommand ? { startCommand } : {}),\n ...(typeof port === \"number\" ? { port } : {}),\n ...(typeof tailBytes === \"number\" ? { tailBytes } : {}),\n },\n }\n }\n\n async execute(\n toolCall: ToolCall,\n runtime: CommandRuntime,\n ): Promise<ToolResult> {\n return enrichToolResultWithUnixMetadata(\n toolCall,\n await this.executeRaw(this.getCommand(toolCall), runtime),\n )\n }\n}\n\nexport class RunCommandRegistry {\n private readonly commands: readonly RunCommand[]\n\n constructor(commands: readonly RunCommand[]) {\n this.commands = commands\n }\n\n getCommand(target: RunInvocationTarget): RunCommand | undefined {\n return this.commands.find((command) => command.target === target)\n }\n\n getSupportedTargets(): readonly RunInvocationTarget[] {\n return this.commands.map((command) => command.target)\n }\n\n getAllowedTargets(runtime: CommandRuntime): readonly RunInvocationTarget[] {\n return this.commands\n .filter((command) => command.isAvailable(runtime))\n .map((command) => command.target)\n }\n\n getPromptAvailability(\n allowedTargets: readonly RunInvocationTarget[],\n ): RunCommandPromptAvailability {\n const normalizedTargets = new Set(allowedTargets)\n\n return {\n bashAvailable: normalizedTargets.has(\"bash\"),\n backgroundBashAvailable: normalizedTargets.has(\"background_bash\"),\n }\n }\n\n parseInvocation(\n invocation: ExtractedRunInvocationLike,\n options?: { allowTruncated?: boolean },\n ): RunCommandParseResult | null {\n return this.getCommand(invocation.target)?.parseInvocation(invocation, options) ?? null\n }\n\n async executeToolCall(\n runtime: CommandRuntime,\n toolCall: ToolCall,\n ): Promise<ToolResult> {\n const command = this.resolveCommandForToolCall(toolCall)\n return command.execute(toolCall, runtime)\n }\n\n private resolveCommandForToolCall(toolCall: ToolCall): RunCommand {\n for (const command of this.commands) {\n if (command.matchesToolCall(toolCall)) {\n return command\n }\n }\n\n const toolCommand = this.getCommand(\"tool\")\n if (!toolCommand) {\n throw new Error(\"Tool run command is not registered\")\n }\n\n return toolCommand\n }\n}\n\nexport const DEFAULT_RUN_COMMAND_REGISTRY = new RunCommandRegistry([\n new ToolRunCommand(),\n new BashRunCommand(),\n new BackgroundBashRunCommand(),\n])\n\nexport function createCustomRunCommandRegistry(\n bashCommand: BashRunCommand,\n backgroundBashCommand: BackgroundBashRunCommand,\n): RunCommandRegistry {\n return new RunCommandRegistry([\n new ToolRunCommand(),\n bashCommand,\n backgroundBashCommand,\n ])\n}\n\nexport function createRunCommandRuntimeBindings(\n bashCommand: BashRunCommand,\n backgroundBashCommand: BackgroundBashRunCommand,\n): {\n executeBash: (command: string) => Promise<ToolResult>\n executeBackgroundBash: (command: string) => Promise<ToolResult>\n runCommandRegistry: RunCommandRegistry\n} {\n return {\n executeBash: (command: string) => bashCommand.executeRaw(command),\n executeBackgroundBash: (command: string) => backgroundBashCommand.executeRaw(command),\n runCommandRegistry: createCustomRunCommandRegistry(bashCommand, backgroundBashCommand),\n }\n}\n\nexport function getRunCommandPromptAvailability(\n allowedTargets: readonly RunInvocationTarget[],\n): RunCommandPromptAvailability {\n return DEFAULT_RUN_COMMAND_REGISTRY.getPromptAvailability(allowedTargets)\n}\n\nexport async function executeToolCallWithRunCommands(\n runtime: CommandRuntime,\n toolCall: ToolCall,\n commandRegistry: RunCommandRegistry = DEFAULT_RUN_COMMAND_REGISTRY,\n): Promise<ToolResult> {\n return commandRegistry.executeToolCall(runtime, toolCall)\n}","import type {\n LoopOutcome,\n ToolCall,\n ToolDefinition,\n ToolParameterDefinition,\n} from \"./types\"\nimport {\n DEFAULT_ALLOWED_RUN_TARGETS,\n DEFAULT_RUN_COMMAND_REGISTRY,\n SUPPORTED_RUN_TARGETS,\n type RunCommandParseResult,\n type RunCommandRegistry,\n type RunInvocationTarget,\n} from \"./run-command-registry\"\nimport { buildMultipleStructuredControlSegmentsValidationError } from \"./tool-call-prompts\"\nimport {\n formatUnixToolSurface,\n parseUnixToolCommand,\n} from \"./unix-tooling\"\n\nexport {\n DEFAULT_ALLOWED_RUN_TARGETS,\n}\nexport type {\n RunInvocationTarget,\n}\n\nfunction formatParameterType(type: string | string[]): string {\n if (Array.isArray(type)) {\n return type.join(\"|\")\n }\n return type\n}\n\nexport function formatToolDefinitions(\n tools: ToolDefinition[],\n style: \"compact\" | \"verbose\" | \"unix\" = \"compact\",\n): string {\n if (style === \"unix\") {\n return formatUnixToolSurface(tools)\n }\n\n if (style === \"verbose\") {\n return tools\n .map((tool) => {\n const params = Object.entries(tool.parameters)\n .map(\n ([name, definition]) =>\n ` ${name} (${formatParameterType(definition.type)}${definition.required ? \", required\" : \"\"}): ${definition.description}`,\n )\n .join(\"\\n\")\n return `- ${tool.name}: ${tool.description}\\n Parameters:\\n${params}`\n })\n .join(\"\\n\\n\")\n }\n\n return tools\n .map((tool) => {\n const params = Object.entries(tool.parameters)\n .map(([name, schema]) => {\n const required = schema.required ? \"*\" : \"\"\n return `${name}${required}: ${formatParameterType(schema.type)}`\n })\n .join(\", \")\n return `• ${tool.name}(${params}) - ${tool.description}`\n })\n .join(\"\\n\")\n}\n\nfunction normalizeExpectedTypes(type: string | string[]): string[] {\n return (Array.isArray(type) ? type : [type]).map((entry) =>\n entry.toLowerCase(),\n )\n}\n\nfunction parseStructuredLiteral(rawValue: string): unknown {\n try {\n return JSON.parse(rawValue)\n } catch {\n return undefined\n }\n}\n\nfunction coerceArrayFallbackItem(\n rawValue: string,\n definition: ToolParameterDefinition,\n): unknown {\n if (!definition.items?.type) {\n return rawValue\n }\n\n return coerceStringParameterValue(rawValue, {\n type: definition.items.type,\n description: definition.items.description ?? \"\",\n items: definition.items.items,\n properties: definition.items.properties,\n additionalProperties: definition.items.additionalProperties,\n default: definition.items.default,\n })\n}\n\nfunction coerceStringParameterValue(\n rawValue: string,\n definition: ToolParameterDefinition,\n): unknown {\n const trimmed = rawValue.trim()\n if (trimmed.length === 0) return rawValue\n\n for (const expectedType of normalizeExpectedTypes(definition.type)) {\n switch (expectedType) {\n case \"array\": {\n const parsed = parseStructuredLiteral(trimmed)\n if (Array.isArray(parsed)) return parsed\n\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n const itemTypes = definition.items?.type\n ? normalizeExpectedTypes(definition.items.type)\n : []\n if (itemTypes.includes(\"object\")) {\n return [parsed]\n }\n }\n\n if (!/[{}\\[\\]]/.test(trimmed)) {\n const parts = trimmed\n .split(/[\\r\\n,]+/)\n .map((part) => part.trim())\n .filter(Boolean)\n if (parts.length > 0) {\n return parts.map((part) =>\n coerceArrayFallbackItem(part, definition),\n )\n }\n }\n break\n }\n\n case \"object\": {\n const parsed = parseStructuredLiteral(trimmed)\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n return parsed\n }\n break\n }\n\n case \"boolean\": {\n if (trimmed === \"true\") return true\n if (trimmed === \"false\") return false\n break\n }\n\n case \"integer\": {\n if (/^-?(?:0|[1-9]\\d*)$/.test(trimmed)) {\n return Number(trimmed)\n }\n break\n }\n\n case \"number\": {\n if (/^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/.test(trimmed)) {\n return Number(trimmed)\n }\n break\n }\n\n case \"null\": {\n if (trimmed === \"null\") return null\n break\n }\n }\n }\n\n return rawValue\n}\n\nexport function coerceToolCallToDefinition(\n call: ToolCall | undefined,\n tools: ToolDefinition[] = [],\n): ToolCall | undefined {\n if (!call || tools.length === 0) return call\n\n const definitionsByName = new Map(tools.map((tool) => [tool.name, tool]))\n const definition = definitionsByName.get(call.name)\n\n if (\n definition &&\n call.kind !== \"bash\" &&\n typeof call.rawInvocation === \"string\" &&\n call.rawInvocation.trim().length > 0\n ) {\n const parsed = parseUnixToolCommand(definition, call.rawInvocation, {\n allowTruncated: call.truncated === true,\n })\n if (parsed.ok) {\n return {\n ...call,\n parameters: parsed.parameters as Record<string, any>,\n }\n }\n }\n\n if (!definition) return call\n\n let didCoerce = false\n const parameters = { ...call.parameters }\n\n for (const [paramName, paramValue] of Object.entries(call.parameters)) {\n const paramDefinition = definition.parameters[paramName]\n if (!paramDefinition || typeof paramValue !== \"string\") continue\n\n const coercedValue = coerceStringParameterValue(\n paramValue,\n paramDefinition,\n )\n if (coercedValue !== paramValue) {\n parameters[paramName] = coercedValue\n didCoerce = true\n }\n }\n\n return didCoerce\n ? {\n ...call,\n parameters,\n }\n : call\n}\n\nexport interface ExtractedRunInvocation {\n target: \"tool\" | \"bash\" | \"background_bash\"\n command: string\n raw: string\n start: number\n end: number\n truncated: boolean\n}\n\ninterface ExtractedRunInvocationPayload {\n command: string\n end: number\n truncated: boolean\n quoted: boolean\n}\n\nexport interface ParsedStructuredAgentText {\n prose: string\n outcome?: LoopOutcome\n selectedToolCall?: ToolCall\n selectedToolCallCount: number\n}\n\nfunction buildStructuredInvocationHeaderPattern(\n allowedTargets: readonly RunInvocationTarget[],\n): RegExp {\n const normalizedTargets = Array.from(new Set(allowedTargets)).filter(\n (target): target is RunInvocationTarget => SUPPORTED_RUN_TARGETS.includes(target),\n )\n if (normalizedTargets.length === 0) {\n return /$^/\n }\n\n return new RegExp(\n `(^|\\\\n)([ \\t]*)---(${normalizedTargets.join(\"|\")})---(?:[ \\t]*\\\\r?\\\\n[ \\t]*|[ \\t]+|$)`,\n \"gi\",\n )\n}\n\nfunction extractInlineTrailingCompatibilityInvocation(\n content: string,\n options?: {\n allowTruncated?: boolean\n allowedTargets?: readonly RunInvocationTarget[]\n },\n): ExtractedRunInvocation | null {\n const allowTruncated = options?.allowTruncated === true\n const allowedTargets = options?.allowedTargets ?? DEFAULT_ALLOWED_RUN_TARGETS\n const normalizedTargets = Array.from(new Set(allowedTargets)).filter(\n (target): target is RunInvocationTarget => SUPPORTED_RUN_TARGETS.includes(target),\n )\n\n if (normalizedTargets.length === 0) {\n return null\n }\n\n let lastHeaderMatch: RegExpExecArray | null = null\n const headerMatcher = new RegExp(`---(${normalizedTargets.join(\"|\")})---`, \"gi\")\n let match: RegExpExecArray | null\n\n while ((match = headerMatcher.exec(content)) !== null) {\n lastHeaderMatch = match\n }\n\n const matchedTarget = lastHeaderMatch?.[1]?.toLowerCase()\n if (!lastHeaderMatch?.[0] || !matchedTarget) {\n return null\n }\n\n const prefix = content.slice(0, lastHeaderMatch.index).trimEnd()\n if (!/[.!?]$/.test(prefix)) {\n return null\n }\n\n const payloadSource = content.slice(lastHeaderMatch.index + lastHeaderMatch[0].length)\n const payloadMatch = payloadSource.match(/^[ \\t]+([^\\r\\n][^\\r\\n]*?)\\s*$/)\n const normalizedCommand = payloadMatch?.[1]?.trim()\n\n if (!normalizedCommand) {\n return null\n }\n\n const target = matchedTarget === \"tool\"\n ? \"tool\"\n : matchedTarget === \"background_bash\"\n ? \"background_bash\"\n : \"bash\"\n\n return {\n target,\n command: normalizedCommand,\n raw: content.slice(lastHeaderMatch.index).trimEnd(),\n start: lastHeaderMatch.index,\n end: content.length,\n truncated: allowTruncated\n && isLikelyTruncatedShellLikePayload(normalizedCommand),\n }\n}\n\nexport function containsStandaloneStructuredInvocationStart(\n content: string,\n allowedTargets: readonly RunInvocationTarget[] = DEFAULT_ALLOWED_RUN_TARGETS,\n): boolean {\n const matcher = buildStructuredInvocationHeaderPattern(allowedTargets)\n return matcher.test(content)\n}\n\nexport function extractRunInvocations(\n content: string,\n options?: {\n allowTruncated?: boolean\n allowedTargets?: readonly RunInvocationTarget[]\n },\n): ExtractedRunInvocation[] {\n const invocations: ExtractedRunInvocation[] = []\n const allowTruncated = options?.allowTruncated === true\n const allowedTargets = options?.allowedTargets ?? DEFAULT_ALLOWED_RUN_TARGETS\n const matcher = buildStructuredInvocationHeaderPattern(allowedTargets)\n const headers: Array<{\n target: ExtractedRunInvocation[\"target\"]\n start: number\n payloadStart: number\n }> = []\n let match: RegExpExecArray | null\n\n while ((match = matcher.exec(content)) !== null) {\n const matchedTarget = match[3]?.toLowerCase()\n const target = matchedTarget === \"tool\"\n ? \"tool\"\n : matchedTarget === \"background_bash\"\n ? \"background_bash\"\n : \"bash\"\n const prefixLength = (match[1] ?? \"\").length\n const start = match.index + prefixLength\n const payloadStart = match.index + match[0].length\n\n headers.push({\n target,\n start,\n payloadStart,\n })\n }\n\n if (headers.length === 0) {\n const inlineCompatibilityInvocation = extractInlineTrailingCompatibilityInvocation(\n content,\n options,\n )\n\n if (inlineCompatibilityInvocation) {\n return [inlineCompatibilityInvocation]\n }\n }\n\n for (const [index, header] of headers.entries()) {\n const end = headers[index + 1]?.start ?? content.length\n const raw = content.slice(header.start, end).trimEnd()\n const command = content.slice(header.payloadStart, end).trimEnd()\n const normalizedCommand = command.trim()\n\n if (!normalizedCommand) {\n continue\n }\n\n invocations.push({\n target: header.target,\n command: normalizedCommand,\n raw,\n start: header.start,\n end,\n truncated: allowTruncated\n && end === content.length\n && isLikelyTruncatedShellLikePayload(normalizedCommand),\n })\n }\n\n return invocations\n}\n\nexport function parseStructuredAgentText(\n content: string,\n options?: {\n allowTruncated?: boolean\n allowedTargets?: readonly RunInvocationTarget[]\n commandRegistry?: RunCommandRegistry\n },\n): ParsedStructuredAgentText | null {\n const invocations = extractRunInvocations(content, options)\n if (invocations.length === 0) {\n return null\n }\n\n if (invocations.length > 1) {\n throw new Error(\n buildMultipleStructuredControlSegmentsValidationError(invocations.length),\n )\n }\n\n let selectedToolCall: ToolCall | undefined\n let selectedToolCallCount = 0\n let outcome: ParsedStructuredAgentText[\"outcome\"]\n let latestSuccessfulInvocationIndex = -1\n let latestInvocationError: unknown\n let latestInvocationErrorIndex = -1\n const commandRegistry = options?.commandRegistry ?? DEFAULT_RUN_COMMAND_REGISTRY\n\n for (const [index, invocation] of invocations.entries()) {\n let parsedInvocation: RunCommandParseResult | null\n try {\n parsedInvocation = commandRegistry.parseInvocation(invocation, {\n allowTruncated: options?.allowTruncated === true,\n })\n } catch (error: unknown) {\n latestInvocationError = error\n latestInvocationErrorIndex = index\n continue\n }\n\n if (!parsedInvocation) {\n continue\n }\n\n latestSuccessfulInvocationIndex = index\n\n if (parsedInvocation.selectedToolCall) {\n selectedToolCall = parsedInvocation.selectedToolCall\n }\n\n if (\n parsedInvocation.outcome\n && parsedInvocation.outcome !== \"continue\"\n && !parsedInvocation.selectedToolCall\n ) {\n selectedToolCall = undefined\n }\n\n selectedToolCallCount += parsedInvocation.selectedToolCallCount ?? 0\n\n if (parsedInvocation.outcome) {\n outcome = parsedInvocation.outcome\n }\n }\n\n if (latestInvocationErrorIndex > latestSuccessfulInvocationIndex) {\n throw latestInvocationError\n }\n\n if (!outcome && !selectedToolCall) {\n if (latestInvocationError !== undefined) {\n throw latestInvocationError\n }\n\n return null\n }\n\n return {\n prose: stripInvocations(content, invocations),\n outcome,\n ...(selectedToolCall ? { selectedToolCall } : {}),\n selectedToolCallCount,\n }\n}\n\nfunction isLikelyTruncatedShellLikePayload(command: string): boolean {\n let quote: '\"' | \"'\" | \"`\" | null = null\n let escaping = false\n\n for (const char of command) {\n if (quote) {\n if (escaping) {\n escaping = false\n continue\n }\n\n if (quote !== \"'\" && char === \"\\\\\") {\n escaping = true\n continue\n }\n\n if (char === quote) {\n quote = null\n }\n\n continue\n }\n\n if (escaping) {\n escaping = false\n continue\n }\n\n if (char === \"\\\\\") {\n escaping = true\n continue\n }\n\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char\n }\n }\n\n if (quote || escaping) {\n return true\n }\n\n const heredocMatches = Array.from(command.matchAll(/<<-?\\s*(['\"]?)([A-Za-z_][A-Za-z0-9_]*)\\1/g))\n if (heredocMatches.length === 0) {\n return false\n }\n\n const lines = command.split(/\\r?\\n/)\n\n return heredocMatches.some((match) => {\n const terminator = match[2]\n if (!terminator) {\n return false\n }\n\n return !lines.some((line) => line.trim() === terminator)\n })\n}\n\nfunction stripInvocations(\n content: string,\n invocations: ExtractedRunInvocation[],\n): string {\n if (invocations.length === 0) {\n return content.trim()\n }\n\n let cursor = 0\n let prose = \"\"\n\n for (const invocation of invocations) {\n prose += content.slice(cursor, invocation.start)\n cursor = invocation.end\n }\n\n prose += content.slice(cursor)\n return prose\n .split(/\\r?\\n/)\n .map((line) => line.trimEnd())\n .join(\"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim()\n}\n\n","/**\n * Shared prompt building utilities for agentic loops.\n *\n * Used by Hammer CLI agent, Magic webapp agent, Monoslides, and Monospace to format\n * tool surfaces and construct core prompt templates.\n */\n\nimport type { ToolDefinition } from \"./types\"\nimport type { TruncatedToolInfo } from \"./agent-machine\"\nimport { formatToolDefinitions } from \"./command-response-utils\"\nimport {\n getRunCommandPromptAvailability,\n type RunInvocationTarget,\n} from \"./run-command-registry\"\nimport {\n SHALLOW_WORKSPACE_DISCOVERY_RULE_LINE,\n SLUG_FORMAT_EXAMPLE_RULE_LINES,\n SLUG_SEPARATOR_EXAMPLE_BLOCK,\n SHARED_TOOL_USAGE_RULE,\n TOOL_CALL_SEPARATOR_RULE,\n type BashCommandsSectionOptions,\n buildBackgroundBashCommandsSection,\n buildBashCommandsSection,\n SHARED_TOOL_CALL_EXAMPLE_LINES,\n SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE,\n WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES,\n} from \"./tool-call-prompts\"\n\nexport const DEFAULT_AGENT_FALLBACK_SYSTEM_PROMPT = \"You are an AI agent.\"\nexport const ERROR_RECOVERY_RULE_LINE =\n \"**ERROR RECOVERY**: If a tool returns `success=false`, inspect the error, fix the cause, and retry.\"\nexport const ROOT_CAUSES_RULE_LINE =\n \"**ROOT CAUSES**: Fix root causes rather than suppressing symptoms.\"\nexport const VALIDATE_AFTER_CHANGES_RULE_LINE =\n \"**VALIDATE AFTER CHANGES**: Check syntax, imports, and obvious integration errors after editing.\"\nexport const INCREMENTAL_TESTING_RULE_LINE =\n \"**INCREMENTAL TESTING**: Write → test → fix before moving on. Verify deliverables actually work before finishing successfully.\"\nexport const CODE_QUALITY_RULE_LINE =\n \"**CODE QUALITY**: For TypeScript, prefer `tsc --noEmit` or the repo's build/test command after meaningful edits.\"\nexport const SKILL_INVOKE_READ_RULE_LINE =\n \"If the user says invoke /skill-name, treat that as asking you to read the skill-name skill with ReadSkill before proceeding.\"\nexport const TODO_LIST_FIRST_RESPONSE_RULE_LINE =\n \"You MUST call the manage_todo_list tool in your very first response to plan your work before executing any other tool. Break the task into specific, actionable steps. On subsequent responses, update the todo list to reflect progress.\"\n\nexport interface FormatToolsSectionOptions {\n bashAvailable?: boolean\n backgroundBashAvailable?: boolean\n allowedRunTargets?: readonly RunInvocationTarget[]\n bashCommandsSectionOptions?: BashCommandsSectionOptions\n}\n\nexport interface SystemPromptSections {\n basePrompt: string\n toolsHeading?: string\n toolsSection: string\n supplementalRules?: string\n}\n\nexport interface SystemPromptBuildContext {\n tools: ToolDefinition[]\n toolsSectionOptions: FormatToolsSectionOptions\n}\n\nexport type SystemPromptCustomizer = (\n sections: Readonly<SystemPromptSections>,\n context: Readonly<SystemPromptBuildContext>,\n) => Partial<SystemPromptSections> | void\n\nexport function createAppendToolsSectionCustomizer(\n block: string,\n): SystemPromptCustomizer {\n return (sections) => {\n const trimmedBlock = block.trim()\n if (!trimmedBlock) {\n return\n }\n\n return {\n toolsSection: [sections.toolsSection, trimmedBlock]\n .filter((section) => section.trim().length > 0)\n .join(\"\\n\\n\"),\n }\n }\n}\n\nexport function createToolsSectionOverrideCustomizer(\n buildToolsSection: (context: Readonly<SystemPromptBuildContext>) => string,\n): SystemPromptCustomizer {\n return (_sections, context) => ({\n toolsSection: buildToolsSection(context),\n })\n}\n\nfunction applySystemPromptCustomizers(\n sections: SystemPromptSections,\n context: SystemPromptBuildContext,\n customizers?: readonly SystemPromptCustomizer[],\n): SystemPromptSections {\n if (!customizers || customizers.length === 0) {\n return sections\n }\n\n return customizers.reduce<SystemPromptSections>((current, customizer) => ({\n ...current,\n ...(customizer(current, context) ?? {}),\n }), sections)\n}\n\nexport function buildValidationRecoveryRuleLines(options?: {\n includeVerifiedCompletionRule?: boolean\n reservedControlHeadersRule?: string\n}): string[] {\n const includeVerifiedCompletionRule =\n options?.includeVerifiedCompletionRule ?? false\n const reservedControlHeadersRule =\n options?.reservedControlHeadersRule\n ?? \"Treat the structured control headers as reserved control syntax and use them only in the final executable segment.\"\n\n return [\n \"If the previous response was rejected for format, do not explain the response protocol back to the system.\",\n \"Recover by choosing one concrete next action.\",\n reservedControlHeadersRule,\n TOOL_CALL_SEPARATOR_RULE,\n ...SLUG_FORMAT_EXAMPLE_RULE_LINES,\n ...(includeVerifiedCompletionRule\n ? [\n \"Do not claim success until your latest tool results or observed state show the task is complete.\",\n ]\n : []),\n ]\n}\n\n// ---------------------------------------------------------------------------\n// Tool descriptions\n// ---------------------------------------------------------------------------\n\n/**\n * Format tool definitions for injection into a system prompt.\n * Thin wrapper over `formatToolDefinitions` with configurable bash guidance.\n */\nexport function formatToolsSection(\n tools: ToolDefinition[],\n options?: FormatToolsSectionOptions,\n): string {\n const commandPromptAvailability = options?.allowedRunTargets\n ? getRunCommandPromptAvailability(options.allowedRunTargets)\n : undefined\n let desc = formatToolDefinitions(tools, \"unix\")\n if (options?.bashAvailable ?? commandPromptAvailability?.bashAvailable) {\n const bashSection = buildBashCommandsSection(options?.bashCommandsSectionOptions)\n\n desc = [desc, bashSection].filter(Boolean).join(\"\\n\\n\")\n }\n\n if (options?.backgroundBashAvailable ?? commandPromptAvailability?.backgroundBashAvailable) {\n const backgroundBashSection = buildBackgroundBashCommandsSection()\n\n desc = [desc, backgroundBashSection].filter(Boolean).join(\"\\n\\n\")\n }\n\n return desc\n}\n\nexport interface SkillSummaryLike {\n metadata: {\n name: string\n description: string\n }\n}\n\nexport function buildSkillsSection(allSkills: SkillSummaryLike[]): string {\n if (allSkills.length === 0) {\n return \"\"\n }\n\n const skillSummaries = [...allSkills]\n .sort((left, right) =>\n left.metadata.name.localeCompare(right.metadata.name),\n )\n .map((skill) => ` • **${skill.metadata.name}**: ${skill.metadata.description}`)\n .join(\"\\n\")\n\n return `\\n\\n# AVAILABLE SKILLS\\n\\nSpecialized skills provide expert workflows and domain knowledge. Each skill contains detailed instructions, examples, and best practices.\\n\\n${skillSummaries}\\n\\nThese skill summaries are loaded into context automatically at the start of the run. If a skill is relevant, call ReadSkill to load the full instructions before implementing that workflow.\\n\\n**Skills guidance**:\\n1. Review the skills above before starting implementation-heavy work\\n2. If a listed skill clearly matches the task, prefer reading that skill before planning or implementing a generic approach\\n3. Prefer the most specific relevant skill over a broader fallback skill when multiple skills could apply\\n4. ${SKILL_INVOKE_READ_RULE_LINE}\\n5. Use ReadSkill for the specific skill whose workflow you want to follow in detail before making substantive changes\\n6. If a skill you read instructs you to consult another foundational skill, follow that dependency before implementation\\n7. Skills are instructions, not replacements for the registered tools\\n\\n---\\n\\n`\n}\n\nexport function buildSkillAwareStaticContext(options: {\n allSkills: SkillSummaryLike[]\n staticRules: string\n}): string {\n return [\n buildSkillsSection(options.allSkills).trim(),\n options.staticRules.trim(),\n ].filter((section) => section.length > 0).join(\"\\n\\n\")\n}\n\nexport interface WorkspaceCodingStaticRulesOptions {\n rulesHeading?: string\n skillsDirectory?: string\n additionalRuleSections?: readonly WorkspaceCodingStaticRuleSection[]\n}\n\nexport type WorkspaceCodingStaticBuiltInSection =\n | \"workspace-safety\"\n | \"editing-strategy\"\n | \"verification\"\n | \"efficiency\"\n\nexport type WorkspaceCodingStaticRuleSection =\n | {\n section: WorkspaceCodingStaticBuiltInSection\n ruleLines?: readonly string[]\n omitRuleLines?: readonly string[]\n heading?: never\n }\n | {\n heading: string\n ruleLines: readonly string[]\n section?: never\n omitRuleLines?: never\n }\n\nfunction formatRuleLines(ruleLines: readonly string[]): string {\n return ruleLines\n .map((rule) => rule.trim())\n .filter((rule) => rule.length > 0)\n .map((rule) => `- ${rule}`)\n .join(\"\\n\")\n}\n\ninterface WorkspaceCodingResolvedRuleSection {\n id: string\n heading: string\n ruleLines: string[]\n}\n\nexport const PORT_CONFLICT_RULE_LINE =\n \"**PORT CONFLICTS**: If a server fails with `EADDRINUSE` and `FreePort` is available, use it before retrying.\"\n\nfunction buildDefaultWorkspaceCodingSections(skillsDirectory: string): WorkspaceCodingResolvedRuleSection[] {\n return [\n {\n id: \"workspace-safety\",\n heading: \"Workspace Safety\",\n ruleLines: [\n \"**RELATIVE PATHS**: Use workspace-relative paths for file operations unless a tool explicitly requires an absolute path.\",\n `**SKILLS DIRECTORY**: Skills live in \\`${skillsDirectory}/\\`.`,\n `If a skill references \\`scripts/file.py\\`, use \\`${skillsDirectory}/{skill-name}/scripts/file.py\\`.`,\n `If a skill references \\`guide.md\\`, inspect \\`${skillsDirectory}/{skill-name}/guide.md\\` with bash or another focused tool.`,\n \"**READ BEFORE WRITE**: Inspect an existing file and nearby related files before modifying it unless you are creating a clearly new file in an empty target location.\",\n \"**CREATE PARENTS BEFORE CAT**: When creating a new file with shell redirection such as `cat > path/to/file <<'EOF'`, always run `mkdir -p path/to` first because `cat` and shell redirection do not create missing parent directories.\",\n ],\n },\n {\n id: \"editing-strategy\",\n heading: \"Editing Strategy\",\n ruleLines: [\n \"**SKILL-FIRST WORKFLOWS**: When the current task clearly matches an available skill, read that skill before making substantive edits, implementation plans, or design decisions.\",\n \"**FILE CHANGES VIA BASH**: Use a final \\`---bash---\\` control segment for creating, editing, appending, renaming, and normalizing files. Prefer scoped edits over blind overwrites.\",\n \"**TARGETED EDITS**: When modifying an existing file, always use narrow search-and-replace or patch-style edits that touch only the necessary lines. Preserve surrounding code, formatting, and structure.\",\n \"**SEARCH/REPLACE REQUIRED**: For existing files, use in-place search-and-replace commands such as `sed` or another scoped patching approach. Do not rewrite an existing file wholesale to make a fix.\",\n \"**NO EXISTING-FILE CAT REWRITES**: Never regenerate or overwrite an existing file with `cat > file <<'EOF'`. Reserve `cat > file <<'EOF'` for creating a new file that does not already exist.\",\n \"**ERROR FIXES SHOULD BE LOCAL**: When a compiler, linter, or runtime error points to part of an existing file, patch that local region instead of rewriting the file.\",\n \"**EXPLORE, PLAN, THEN IMPLEMENT**: For ambiguous, multi-file, or unfamiliar work: explore first, form a plan, then implement.\",\n \"**KEEP SCRIPTS SHORT**: Keep one-off scripts around 100 lines or less. Split larger scripts into verified steps.\",\n `**CONTEXT GATHERING**: Use bash with ${WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES} to discover structure, inspect related files, and understand patterns before changing code.`,\n `**SHALLOW DISCOVERY**: ${SHALLOW_WORKSPACE_DISCOVERY_RULE_LINE}`,\n \"**BASH SAFETY**: Avoid destructive broad-scope commands. Keep file operations tightly scoped.\",\n ],\n },\n {\n id: \"verification\",\n heading: \"Verification\",\n ruleLines: [\n ERROR_RECOVERY_RULE_LINE,\n ROOT_CAUSES_RULE_LINE,\n VALIDATE_AFTER_CHANGES_RULE_LINE,\n INCREMENTAL_TESTING_RULE_LINE,\n CODE_QUALITY_RULE_LINE,\n ],\n },\n {\n id: \"efficiency\",\n heading: \"Efficiency\",\n ruleLines: [\n `**EFFICIENT FILE SEARCH**: Use bash with ${WORKSPACE_CONTEXT_GATHERING_COMMAND_EXAMPLES} to locate files and inspect focused ranges instead of repeatedly dumping whole files.`,\n \"**OUTPUT SIZE & TRUNCATION**: Keep each control-segment payload reasonably small. For large file generation, prefer a complete validated file or a sequence of coherent patch-sized edits. Use incremental append steps only when tooling or truncation constraints make that necessary.\",\n \"**MINIMIZE FILE CHURN**: Avoid rewriting entire existing files when a scoped replacement will do. Smaller in-place edits reduce regressions, token waste, and repeated repair loops.\",\n \"**PREFER SED-SHAPED FIXES**: When using bash to repair existing files, use `sed`-style or other search-and-replace edits instead of `cat`-based full-file regeneration.\",\n \"**EFFICIENCY**: Prefer one well-composed control-segment action per response instead of fragmented follow-up steps when a single bash command or tool invocation will do. Do not re-read files already in context without a reason.\",\n PORT_CONFLICT_RULE_LINE,\n ],\n },\n ]\n}\n\nfunction applyWorkspaceCodingSectionOverrides(\n baseSections: WorkspaceCodingResolvedRuleSection[],\n additionalRuleSections: readonly WorkspaceCodingStaticRuleSection[],\n): WorkspaceCodingResolvedRuleSection[] {\n const resolvedSections = baseSections.map((section) => ({\n ...section,\n ruleLines: [...section.ruleLines],\n }))\n\n for (const override of additionalRuleSections) {\n const trimmedRuleLines = (override.ruleLines ?? [])\n .map((rule) => rule.trim())\n .filter((rule) => rule.length > 0)\n const omittedRuleLines = new Set(\n (override.omitRuleLines ?? [])\n .map((rule) => rule.trim())\n .filter((rule) => rule.length > 0),\n )\n\n if (override.section) {\n const targetSection = resolvedSections.find((section) => section.id === override.section)\n\n if (!targetSection) {\n continue\n }\n\n if (omittedRuleLines.size > 0) {\n targetSection.ruleLines = targetSection.ruleLines.filter(\n (rule) => !omittedRuleLines.has(rule),\n )\n }\n\n targetSection.ruleLines.push(...trimmedRuleLines)\n continue\n }\n\n const heading = override.heading?.trim() ?? \"\"\n\n if (!heading || trimmedRuleLines.length === 0) {\n continue\n }\n\n resolvedSections.push({\n id: `custom:${heading}`,\n heading,\n ruleLines: trimmedRuleLines,\n })\n }\n\n return resolvedSections\n}\n\nexport function buildWorkspaceCodingStaticRules(\n options?: WorkspaceCodingStaticRulesOptions,\n): string {\n const skillsDirectory = options?.skillsDirectory ?? \".claude/skills\"\n const rulesHeading = options?.rulesHeading ?? \"WORKSPACE CODING AGENT RULES\"\n const additionalRuleSections = options?.additionalRuleSections ?? []\n const normalizedSections = applyWorkspaceCodingSectionOverrides(\n buildDefaultWorkspaceCodingSections(skillsDirectory),\n additionalRuleSections,\n )\n .map((section) => {\n if (section.ruleLines.length === 0) {\n return \"\"\n }\n\n return `## ${section.heading}\\n\\n${formatRuleLines(section.ruleLines)}`\n })\n .filter((section) => section.length > 0)\n .join(\"\\n\\n\")\n\n const codingAgentRules = `\n\n# ${rulesHeading}\n\n${normalizedSections}`\n\n return buildCoreStaticRules() + codingAgentRules\n}\n\nexport function buildToolAwareSystemPrompt(\n basePrompt: string,\n tools: ToolDefinition[],\n options?: {\n bashAvailable?: boolean\n backgroundBashAvailable?: boolean\n allowedRunTargets?: readonly RunInvocationTarget[]\n toolsSectionOptions?: Omit<FormatToolsSectionOptions, \"bashAvailable\" | \"backgroundBashAvailable\" | \"allowedRunTargets\">\n toolsHeading?: string\n systemPromptCustomizers?: readonly SystemPromptCustomizer[]\n },\n): string {\n const commandPromptAvailability = options?.allowedRunTargets\n ? getRunCommandPromptAvailability(options.allowedRunTargets)\n : undefined\n const bashAvailable = options?.bashAvailable ?? commandPromptAvailability?.bashAvailable ?? false\n const backgroundBashAvailable = options?.backgroundBashAvailable ?? commandPromptAvailability?.backgroundBashAvailable ?? false\n const toolsSectionOptions: FormatToolsSectionOptions = {\n bashAvailable,\n backgroundBashAvailable,\n allowedRunTargets: options?.allowedRunTargets,\n ...options?.toolsSectionOptions,\n }\n const sections = applySystemPromptCustomizers({\n basePrompt,\n toolsHeading: options?.toolsHeading ?? \"## Available Tools\",\n toolsSection: formatToolsSection(tools, toolsSectionOptions),\n }, {\n tools,\n toolsSectionOptions,\n }, options?.systemPromptCustomizers)\n\n if (!sections.toolsSection.trim() && !bashAvailable && !backgroundBashAvailable) {\n return sections.basePrompt\n }\n\n const promptSections = [sections.basePrompt]\n\n if (sections.toolsSection.trim()) {\n if (tools.length > 0) {\n promptSections.push(`${sections.toolsHeading ?? \"Available tools:\"}\\n${sections.toolsSection}`)\n } else {\n promptSections.push(sections.toolsSection)\n }\n }\n\n if (sections.supplementalRules?.trim()) {\n promptSections.push(sections.supplementalRules)\n }\n\n return promptSections.join(\"\\n\\n\")\n}\n\nexport function buildAgentIdentityLine(options: {\n identity?: string\n agentName?: string\n roleDescription?: string\n}): string {\n const {\n identity,\n agentName,\n roleDescription,\n } = options\n\n const identityLine = identity\n ?? (agentName && roleDescription\n ? `You are ${agentName}, a ${roleDescription} agent.`\n : null)\n\n if (!identityLine) {\n throw new Error(\"buildAgentIdentityLine requires either identity or both agentName and roleDescription\")\n }\n\n return identityLine\n}\n\nexport function buildWebRuntimeRules(options?: {\n additionalRules?: string[]\n includeVerifiedCompletionRule?: boolean\n}): string {\n const additionalRules = options?.additionalRules ?? []\n\n return [\n ...buildValidationRecoveryRuleLines({\n includeVerifiedCompletionRule: options?.includeVerifiedCompletionRule ?? false,\n reservedControlHeadersRule:\n \"Treat the structured control headers as reserved control syntax. Use them only in the final executable segment, never inside analysis or summaries.\",\n }),\n ...additionalRules,\n ].join(\"\\n\")\n}\n\nexport function buildAgentSystemPrompt(options: {\n identityLine?: string\n tools: ToolDefinition[]\n supplementalRules?: string\n bashAvailable?: boolean\n backgroundBashAvailable?: boolean\n allowedRunTargets?: readonly RunInvocationTarget[]\n toolsSectionOptions?: Omit<FormatToolsSectionOptions, \"bashAvailable\" | \"backgroundBashAvailable\" | \"allowedRunTargets\">\n systemPromptCustomizers?: readonly SystemPromptCustomizer[]\n}): string {\n const commandPromptAvailability = options.allowedRunTargets\n ? getRunCommandPromptAvailability(options.allowedRunTargets)\n : undefined\n const toolsSectionOptions: FormatToolsSectionOptions = {\n bashAvailable: options.bashAvailable ?? commandPromptAvailability?.bashAvailable ?? false,\n backgroundBashAvailable:\n options.backgroundBashAvailable\n ?? commandPromptAvailability?.backgroundBashAvailable\n ?? false,\n allowedRunTargets: options.allowedRunTargets,\n ...options.toolsSectionOptions,\n }\n const sections = applySystemPromptCustomizers({\n basePrompt: options.identityLine ?? DEFAULT_AGENT_FALLBACK_SYSTEM_PROMPT,\n toolsHeading: \"# TOOLS\",\n toolsSection: formatToolsSection(options.tools, toolsSectionOptions),\n supplementalRules: options.supplementalRules,\n }, {\n tools: options.tools,\n toolsSectionOptions,\n }, options.systemPromptCustomizers)\n\n return [\n sections.basePrompt,\n sections.toolsHeading,\n sections.toolsSection,\n sections.supplementalRules,\n ].filter((section): section is string => Boolean(section && section.trim().length > 0)).join(\"\\n\\n\")\n}\n\n// ---------------------------------------------------------------------------\n// Shared static rules\n// ---------------------------------------------------------------------------\n\n/**\n * Core static rules shared by all agent loops (Hammer, Magic, Monoslides, Monospace).\n *\n * Covers:\n * - Shell-style output format specification\n * - Terminal exit requirements\n * - Tool call formatting\n * - Scratchpad usage\n *\n * Hammer extends this with file-path rules, skills-first policy,\n * incremental testing, etc. Magic uses this as-is or with lighter extensions.\n *\n * Designed to be injected once via `memoryLayer.setStaticContext()`,\n * saving ~1500 tokens per action vs repeating in every system prompt.\n */\nexport function buildCoreStaticRules(): string {\n return `# AGENT RULES (Persistent — do not repeat)\n\n## Output Format\n\nRespond with normal prose first, then end every response with exactly one structured control block whose standalone slug header is on its own line and whose payload is on the following line(s):\n\nI analyzed the current state.\n${SINGLE_TOOL_CALL_RUN_LINE_EXAMPLE}\n\n## Control Segment Contract\n\n- Treat the structured control headers as reserved control syntax — do not express tool instructions as braces, field blocks, arrays, XML tags, or bracket tags\n- ${SHARED_TOOL_USAGE_RULE}\n- Use the final control block only as the final executable block of the response\n- ${TOOL_CALL_SEPARATOR_RULE}\n- Never mention, quote, or explain the control headers in your analysis, summaries, or self-corrections\n- Use a final ---bash--- control block whose payload is exit 0 only when finishing successfully, and a final ---bash--- control block whose payload is exit 1 only when finishing unsuccessfully. Those exit payloads are intercepted as control signals and are not executed as real shell commands.\n- Prefer raw payloads over wrapping the entire command in outer quotes; use shell quotes only inside the payload when needed\n\n## Control Segment Examples\n\n${SHARED_TOOL_CALL_EXAMPLE_LINES.join(\"\\n\")}\n\n${SLUG_SEPARATOR_EXAMPLE_BLOCK}\n\n## Required Endings\n\n- Include prose analysis before the final control block\n- If continuing, include exactly one real action block as the final control block\n- If finishing successfully, include exactly one final ---bash--- control block with payload exit 0 and no tool commands\n- If finishing unsuccessfully, include exactly one final ---bash--- control block with payload exit 1 and no tool commands\n- The final control block is ALWAYS the very last thing in the response. Nothing may follow it — no prose, no second header block, no commentary.\n\nContinue is implicit when you omit an exit line. Never loop after the task is already complete.`\n}\n\n// ---------------------------------------------------------------------------\n// Step user message builder (shared by Hammer, Magic, Monoslides, and Monospace)\n// ---------------------------------------------------------------------------\n\nexport interface StepUserMessageOptions {\n /** Current action number. */\n actionCount: number\n /** Truncated tool info from the previous iteration (if any). */\n truncatedToolInfo?: TruncatedToolInfo\n}\n\n/**\n * Build the user message injected at the start of each agentic loop step.\n *\n * Handles truncation-specific continuation guidance (Write → \"Use Append\",\n * generic tool → \"continue from where you left off\") and the default\n * \"Continue working\" prompt.\n *\n * Shared by Hammer's UnifiedAgent, Magic's useAgent hook, and Monoslides/Monospace runtimes.\n */\nexport function buildStepUserMessage(opts: StepUserMessageOptions): string {\n const { truncatedToolInfo } = opts\n\n if (truncatedToolInfo) {\n if (truncatedToolInfo.name === \"Write\" && truncatedToolInfo.filePath) {\n if (truncatedToolInfo.executionSucceeded) {\n return `Your previous Write to \"${truncatedToolInfo.filePath}\" was truncated due to max_tokens limit. The partial content HAS been written successfully. You can see exactly where it ended in your previous message. Use Append to continue writing the remaining content from where you left off.`\n }\n return `Your previous Write to \"${truncatedToolInfo.filePath}\" was truncated due to max_tokens limit AND the tool execution failed. Check the error in the last tool result and retry with a valid path.`\n }\n return `Your previous ${truncatedToolInfo.name} was truncated due to max_tokens limit. Please continue from where you left off.`\n }\n\n return \"Continue working on the task. What is your next action?\"\n}\n\n/**\n * Check whether the last message in the conversation is a user error\n * message (prefixed with ⚠️), which means we should skip injecting\n * another user message to avoid double user messages.\n *\n * Shared by Hammer's UnifiedAgent, Magic's useAgent hook, and Monoslides/Monospace runtimes.\n */\nexport function shouldSkipStepUserMessage(\n lastRole: string | null,\n lastContent: string | null,\n): boolean {\n return lastRole === \"user\" && (lastContent?.startsWith(\"⚠️\") ?? false)\n}\n\n// ---------------------------------------------------------------------------\n// Truncated tool info extraction (shared by Hammer, Magic, Monoslides, and Monospace)\n// ---------------------------------------------------------------------------\n\nexport interface ToolCallLike {\n name: string\n parameters?: Record<string, unknown>\n}\n\n/**\n * Extract `TruncatedToolInfo` from the first tool call in a response\n * when the LLM response was truncated (finishReason === \"length\").\n *\n * Returns `undefined` if no tool calls are provided.\n */\nexport function extractTruncatedToolInfo(\n calls: ToolCallLike[],\n): TruncatedToolInfo | undefined {\n if (calls.length === 0) return undefined\n const first = calls[0]\n return {\n name: first.name,\n filePath:\n (first.parameters?.path as string) ||\n (first.parameters?.file_path as string) ||\n undefined,\n executionSucceeded: false,\n }\n}\n","/**\n * Shared tool execution utilities for agentic loops.\n *\n * Used by both Hammer CLI agent and Magic webapp agent for\n * consistent tool result truncation and safe execution wrapping.\n */\n\nimport type { ToolCall, ToolResult } from \"./types\"\nimport { formatToolCallAsUnixCommand } from \"./unix-tooling\"\n\n// ---------------------------------------------------------------------------\n// Tool result truncation\n// ---------------------------------------------------------------------------\n\n/** Default maximum characters for tool result strings. */\nexport const MAX_TOOL_RESULT_CHARS = 30_000\nconst MAX_PRESENTATION_LINES = 200\nconst MAX_PRESENTATION_CHARS = 50_000\n\nexport interface TruncateOptions {\n /** Maximum character length (default: 30,000). */\n maxChars?: number\n /**\n * Truncation strategy:\n * - `\"head-tail\"`: Keep first half + last half (preserves end of large outputs).\n * - `\"head-only\"`: Keep the first N characters.\n */\n strategy?: \"head-tail\" | \"head-only\"\n}\n\n/**\n * Truncate an oversized tool result string to stay within LLM context limits.\n *\n * @returns The original string if within limit, otherwise a truncated version.\n */\nexport function truncateToolResult(\n resultStr: string,\n options?: TruncateOptions,\n): string {\n const maxChars = options?.maxChars ?? MAX_TOOL_RESULT_CHARS\n const strategy = options?.strategy ?? \"head-tail\"\n\n if (resultStr.length <= maxChars) return resultStr\n\n if (strategy === \"head-only\") {\n return resultStr.substring(0, maxChars) + \"\\n...(truncated)\"\n }\n\n // head-tail: keep first half and last half\n const half = Math.floor(maxChars / 2)\n const head = resultStr.substring(0, half)\n const tail = resultStr.substring(resultStr.length - half)\n const omitted = resultStr.length - maxChars\n return `${head}\\n... [${omitted} chars truncated] ...\\n${tail}`\n}\n\n// ---------------------------------------------------------------------------\n// Tool result presentation\n// ---------------------------------------------------------------------------\n\nexport function formatToolResultMessage(\n toolCall: ToolCall,\n result: ToolResult,\n): string {\n const exitCode = typeof result.exit_code === \"number\"\n ? result.exit_code\n : result.success === true\n ? 0\n : 1\n const durationMs = typeof result.duration_ms === \"number\"\n ? result.duration_ms\n : 0\n const command = typeof result.command === \"string\" && result.command.length > 0\n ? result.command\n : formatPseudoCommand(toolCall)\n\n const stdout = truncatePresentationOutput(renderToolStdout(result))\n const stderr = renderToolStderr(result, exitCode)\n const metaLine = buildMetaLine(toolCall, result)\n const lines = [`$ ${command}`]\n\n if (stdout) {\n lines.push(stdout)\n }\n\n if (stderr) {\n if (!stdout && exitCode !== 0 && !stderr.includes(\"\\n\")) {\n lines.push(`[error] ${stderr}`)\n } else {\n lines.push(`[stderr]\\n${stderr}`)\n }\n }\n\n if (!stdout && !stderr && exitCode === 0) {\n lines.push(\"(no output)\")\n }\n\n if (metaLine) {\n lines.push(metaLine)\n }\n\n lines.push(`[exit:${exitCode} | ${formatDuration(durationMs)}]`)\n return lines.join(\"\\n\")\n}\n\nexport function parseToolResultMessage(content: string): {\n success: boolean\n toolName?: string\n error?: string\n parsed?: Record<string, any>\n} {\n try {\n const parsed = JSON.parse(content)\n const toolName = typeof parsed.command_name === \"string\"\n ? parsed.command_name\n : typeof parsed.route === \"string\"\n ? parsed.route\n : typeof parsed.tool_name === \"string\"\n ? parsed.tool_name\n : typeof parsed.toolName === \"string\"\n ? parsed.toolName\n : typeof parsed.tool === \"string\"\n ? parsed.tool\n : typeof parsed.name === \"string\"\n ? parsed.name\n : undefined\n return {\n success: parsed.success === true,\n toolName,\n error: parsed.error,\n parsed,\n }\n } catch {\n const lines = content.split(/\\r?\\n/)\n const commandLine = lines[0]?.startsWith(\"$ \") ? lines.shift()!.slice(2) : undefined\n\n const stdoutLines: string[] = []\n const stderrLines: string[] = []\n let errorLine: string | undefined\n let metaLine = \"\"\n let exitCode = 1\n let durationMs = 0\n let inStderr = false\n\n for (const line of lines) {\n if (line.startsWith(\"[stderr]\")) {\n inStderr = true\n const inline = line.slice(\"[stderr]\".length).trim()\n if (inline) {\n stderrLines.push(inline)\n }\n continue\n }\n\n if (line.startsWith(\"[error] \")) {\n errorLine = line.slice(\"[error] \".length)\n inStderr = false\n continue\n }\n\n if (line.startsWith(\"[meta] \")) {\n metaLine = line.slice(\"[meta] \".length)\n inStderr = false\n continue\n }\n\n const exitMatch = line.match(/^\\[exit:(-?\\d+)\\s*\\|\\s*([^\\]]+)\\]$/)\n if (exitMatch) {\n exitCode = Number(exitMatch[1])\n durationMs = parseDuration(exitMatch[2])\n inStderr = false\n continue\n }\n\n if (inStderr) {\n stderrLines.push(line)\n } else {\n stdoutLines.push(line)\n }\n }\n\n const metadata = parseMetadata(metaLine)\n const stdout = stdoutLines.join(\"\\n\").trim()\n const stderr = stderrLines.join(\"\\n\").trim()\n const error = errorLine ?? (exitCode === 0 ? undefined : stderr || undefined)\n const parsed = {\n success: exitCode === 0,\n command: commandLine,\n output: stdout,\n stderr,\n error,\n exit_code: exitCode,\n duration_ms: durationMs,\n ...metadata,\n }\n\n return {\n success: exitCode === 0,\n toolName:\n typeof metadata.tool === \"string\"\n ? metadata.tool\n : typeof metadata.route === \"string\"\n ? metadata.route\n : undefined,\n error,\n parsed,\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Safe tool execution\n// ---------------------------------------------------------------------------\n\n/**\n * Execute a tool call with standard error handling.\n * Catches any thrown error and returns `{ success: false, error: message }`.\n */\nexport async function executeToolSafe(\n fn: () => Promise<ToolResult>,\n): Promise<ToolResult> {\n try {\n return await fn()\n } catch (err: unknown) {\n return {\n success: false,\n error: err instanceof Error ? err.message : \"Tool execution failed\",\n }\n }\n}\n\nfunction renderToolStdout(result: ToolResult): string {\n if (typeof result.stdout === \"string\") {\n return result.stdout\n }\n\n if (typeof result.output === \"string\") {\n return result.output\n }\n\n if (typeof result.content === \"string\") {\n return result.content\n }\n\n if (typeof result.data === \"string\") {\n return result.data\n }\n\n const matchEntries = (result as ToolResult & { matches?: unknown[] }).matches\n if (Array.isArray(matchEntries)) {\n return matchEntries\n .map((match) => {\n if (typeof match === \"string\") return match\n if (!match || typeof match !== \"object\") return JSON.stringify(match)\n\n const typed = match as {\n file?: unknown\n line?: unknown\n content?: unknown\n }\n const file = typeof typed.file === \"string\" ? typed.file : \"\"\n const line = typeof typed.line === \"number\" ? typed.line : \"\"\n const content = typeof typed.content === \"string\"\n ? typed.content\n : JSON.stringify(match)\n return `${file}${line ? `:${line}` : \"\"}: ${content}`.trim()\n })\n .join(\"\\n\")\n }\n\n for (const candidate of [result.output, result.content, result.data]) {\n if (candidate && typeof candidate === \"object\") {\n return JSON.stringify(candidate, null, 2)\n }\n }\n\n const {\n success: _success,\n error: _error,\n stderr: _stderr,\n exit_code: _exitCode,\n duration_ms: _durationMs,\n command: _command,\n ...remainder\n } = result\n if (Object.keys(remainder).length === 0) {\n return \"\"\n }\n\n return JSON.stringify(remainder, null, 2)\n}\n\nfunction renderToolStderr(result: ToolResult, exitCode: number): string {\n if (typeof result.stderr === \"string\" && result.stderr.length > 0) {\n return result.stderr\n }\n\n if (exitCode !== 0 && typeof result.error === \"string\") {\n return result.error\n }\n\n return \"\"\n}\n\nfunction truncatePresentationOutput(output: string): string {\n if (!output) {\n return \"\"\n }\n\n const lines = output.split(/\\r?\\n/)\n if (lines.length <= MAX_PRESENTATION_LINES && output.length <= MAX_PRESENTATION_CHARS) {\n return output\n }\n\n const truncated = lines.slice(0, MAX_PRESENTATION_LINES).join(\"\\n\")\n return `${truncated}\\n--- output truncated (${lines.length} lines, ${output.length} chars) ---\\nUse more specific commands, filters, or line ranges to narrow the result.`\n}\n\nfunction formatPseudoCommand(toolCall: ToolCall): string {\n const unixCommand = formatToolCallAsUnixCommand(toolCall)\n if (unixCommand) {\n return unixCommand\n }\n\n const parts = [toolCall.name]\n\n for (const [name, value] of Object.entries(toolCall.parameters ?? {})) {\n if (value === undefined || value === null) {\n continue\n }\n\n if (typeof value === \"boolean\") {\n parts.push(value ? `--${name}` : `--no-${name}`)\n continue\n }\n\n if (typeof value === \"string\" && !value.includes(\"\\n\") && !/\\s/.test(value)) {\n parts.push(`--${name}`, value)\n continue\n }\n\n parts.push(`--${name}`, JSON.stringify(value))\n }\n\n return parts.join(\" \")\n}\n\nfunction buildMetaLine(toolCall: ToolCall, result: ToolResult): string {\n const commandName = (result as ToolResult & { command_name?: unknown }).command_name\n const route = (result as ToolResult & { route?: unknown }).route\n const metadata: Record<string, string | number | boolean> = {\n tool: typeof commandName === \"string\" ? commandName : toolCall.name,\n route: typeof route === \"string\" ? route : toolCall.name,\n }\n\n for (const source of [toolCall.parameters ?? {}, result as Record<string, unknown>]) {\n for (const key of [\"path\", \"url\", \"query\", \"taskId\", \"task_id\", \"pattern\"]) {\n const value = source[key]\n if (typeof value === \"string\" && value.length > 0) {\n metadata[key] = value\n }\n }\n }\n\n const pairs = Object.entries(metadata)\n if (pairs.length === 0) {\n return \"\"\n }\n\n return `[meta] ${pairs\n .map(([key, value]) => `${key}=${typeof value === \"string\" ? JSON.stringify(value) : String(value)}`)\n .join(\" \")}`\n}\n\nfunction parseMetadata(text: string): Record<string, any> {\n if (!text) {\n return {}\n }\n\n const values: Record<string, any> = {}\n const regex = /(\\w+)=((?:\"(?:[^\"\\\\]|\\\\.)*\")|\\S+)/g\n let match: RegExpExecArray | null\n while ((match = regex.exec(text)) !== null) {\n const key = match[1]\n const rawValue = match[2]\n if (rawValue.startsWith('\"')) {\n try {\n values[key] = JSON.parse(rawValue)\n } catch {\n values[key] = rawValue.slice(1, -1)\n }\n continue\n }\n\n if (rawValue === \"true\") {\n values[key] = true\n } else if (rawValue === \"false\") {\n values[key] = false\n } else if (!Number.isNaN(Number(rawValue))) {\n values[key] = Number(rawValue)\n } else {\n values[key] = rawValue\n }\n }\n\n return values\n}\n\nfunction formatDuration(durationMs: number): string {\n if (durationMs >= 1000) {\n return `${(durationMs / 1000).toFixed(1)}s`\n }\n return `${Math.max(0, Math.round(durationMs))}ms`\n}\n\nfunction parseDuration(raw: string): number {\n const trimmed = raw.trim().toLowerCase()\n if (trimmed.endsWith(\"ms\")) {\n return Number(trimmed.slice(0, -2)) || 0\n }\n if (trimmed.endsWith(\"s\")) {\n return Math.round((Number(trimmed.slice(0, -1)) || 0) * 1000)\n }\n return Number(trimmed) || 0\n}\n\n","/**\n * Shared agent response parsing pipeline.\n *\n * Unifies the response parsing logic used by both Hammer CLI agent\n * (`BaseLLMProvider.parseAgentResponse`) and Magic webapp agent\n * (`useAgent.parseResponse`).\n *\n * Pipeline: raw content → structured control-segment\n * extraction → Zod validation\n */\n\nimport {\n DEFAULT_ALLOWED_RUN_TARGETS,\n parseStructuredAgentText,\n type RunInvocationTarget,\n} from \"./command-response-utils\"\nimport { LLMResponseSchema } from \"./schemas\"\nimport type { LoopOutcome, ToolCall } from \"./types\"\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ParsedAgentResponse {\n /** Zod-validated (or raw fallback) parsed response object. */\n parsed: Record<string, unknown>\n /** The single executable tool call selected for this turn, if any. */\n selectedToolCall?: ToolCall\n /** The outcome field (\"continue\", \"success\", \"failure\"). */\n outcome: LoopOutcome\n /** The reasoning string from the LLM. */\n reasoning: string\n /** Validation error message, if validation failed but raw data was usable. */\n validationError?: string\n /** Original raw content string. */\n raw: string\n}\n\nexport interface ParseAgentResponseOptions {\n /**\n * If `true`, throw on Zod validation failure (Hammer behavior).\n * If `false`, fall back to raw parsed data on Zod failure (Magic behavior).\n * Default: `false`.\n */\n throwOnValidationError?: boolean\n /** Allow truncated structured control segments during recovery paths. */\n allowTruncatedRuns?: boolean\n /**\n * Custom error formatter called when `throwOnValidationError` is `true`.\n * Receives the Zod error and raw content, should return an Error to throw.\n */\n formatValidationError?: (zodError: unknown, rawContent: string) => Error\n /** Allowed structured control targets for this agent. Defaults to tool/bash. */\n allowedRunTargets?: readonly RunInvocationTarget[]\n}\n\n// ---------------------------------------------------------------------------\n// Core parsing function\n// ---------------------------------------------------------------------------\n\n/**\n * Parse an LLM response string into a structured agent response.\n *\n * Shared pipeline:\n * 1. Extract prose + structured control segments\n * 2. Validate via `LLMResponseSchema` (Zod)\n * 3. Return structured result or null if extraction fails\n *\n * @returns Parsed response, or `null` if no structured control segments could be extracted.\n */\nexport function parseAgentResponse(\n content: string,\n options?: ParseAgentResponseOptions,\n): ParsedAgentResponse | null {\n const {\n throwOnValidationError = false,\n allowTruncatedRuns = false,\n formatValidationError,\n allowedRunTargets = DEFAULT_ALLOWED_RUN_TARGETS,\n } = options ?? {}\n\n const result = parseStructuredAgentText(content, {\n allowTruncated: allowTruncatedRuns,\n allowedTargets: allowedRunTargets,\n })\n if (!result) return null\n\n const parsed: Record<string, unknown> = {\n reasoning: result.prose,\n outcome: result.outcome,\n ...(result.selectedToolCall ? { selectedToolCall: result.selectedToolCall } : {}),\n }\n\n let validationError: string | undefined\n let validated: Record<string, unknown>\n\n try {\n validated = LLMResponseSchema.parse(parsed) as Record<string, unknown>\n } catch (err: unknown) {\n if (throwOnValidationError) {\n if (formatValidationError) {\n throw formatValidationError(err, content)\n }\n throw err\n }\n // Lenient mode: fall back to raw parsed data\n validationError = err instanceof Error ? err.message : String(err)\n validated = parsed\n }\n\n const outcome = (validated.outcome ?? parsed.outcome ?? \"continue\") as ParsedAgentResponse[\"outcome\"]\n const reasoning = String(validated.reasoning ?? parsed.reasoning ?? \"\")\n const selectedToolCall =\n (validated.selectedToolCall as ToolCall | undefined) ?? result.selectedToolCall\n\n return {\n parsed: validated,\n ...(selectedToolCall ? { selectedToolCall } : {}),\n outcome,\n reasoning,\n validationError,\n raw: content,\n }\n}\n","/**\n * Shared tool-call recovery utilities for the structured control-segment protocol.\n *\n * Extracts truncation recovery, validation error formatting, and error\n * message templates so Hammer, Magic, Monoslides, Monospace, and the voice agent share one\n * response contract.\n */\n\nimport { parseAgentResponse, type ParsedAgentResponse, type ParseAgentResponseOptions } from \"./agent-response-parser\"\nimport { decodeEscapedShellText } from \"./shell-escape-normalization\"\nimport {\n containsStandaloneStructuredInvocationStart,\n} from \"./command-response-utils\"\nimport {\n VALIDATION_FIX_REFERENCE,\n buildMultipleStructuredControlSegmentsValidationError,\n buildStructuredControlValidationError,\n} from \"./tool-call-prompts\"\nimport { DEFAULT_ALLOWED_RUN_TARGETS, type RunInvocationTarget } from \"./command-response-utils\"\n\n/** Error message sent to the LLM when its response was truncated mid-generation. */\nexport const ERROR_TRUNCATED_RESPONSE = `VALIDATION_ERROR: Your response was truncated before the final executable control block could be extracted.\n\nRetry with normal prose and one final executable control block only. Put the standalone slug header on its own line and put the payload on the following line(s). Do not discuss the control syntax.`\n\n// ---------------------------------------------------------------------------\n// Error formatting\n// ---------------------------------------------------------------------------\n\n/**\n * Format a Zod validation error (or generic Error) into a human-readable string.\n *\n * Returns per-field details showing which parts are missing or have wrong types,\n * suitable for feeding back to the LLM so it can self-correct.\n */\nexport function formatZodValidationError(zodError: unknown): string {\n // Zod errors have an `issues` array\n if (\n zodError &&\n typeof zodError === \"object\" &&\n \"issues\" in zodError &&\n Array.isArray((zodError as any).issues)\n ) {\n return (zodError as any).issues\n .map((err: any) => {\n const path = (err.path ?? []).join(\".\") || \"(root)\"\n if (path === \"outcome\") {\n let detail =\n ' - terminal state: continue responses do not include a finish control block; only final responses use a ---bash--- control block with payload exit 0 or exit 1'\n if (err.received !== undefined) {\n detail += ` (you sent: ${JSON.stringify(err.received)})`\n }\n return detail\n }\n let detail = ` - ${path}: ${err.message}`\n if (err.received === undefined && err.code === \"invalid_type\") {\n detail += \" (field is MISSING from your response)\"\n } else if (err.received !== undefined) {\n detail += ` (you sent: ${JSON.stringify(err.received)})`\n }\n if (err.expected && err.code === \"invalid_type\") {\n detail += ` — expected type: ${err.expected}`\n }\n return detail\n })\n .join(\"\\n\")\n }\n if (zodError instanceof Error) {\n return `Response parse error: ${zodError.message}`\n }\n return String(zodError)\n}\n\n/**\n * Build a complete VALIDATION_ERROR string with Zod details + fix reference.\n *\n * Suitable for throwing as an `Error.message` that gets sent back to the LLM.\n */\nexport function buildValidationErrorMessage(zodError: unknown): string {\n const details = formatZodValidationError(zodError)\n return buildStructuredControlValidationError(details)\n}\n\n/**\n * Build a \"no structured control segment found\" error message.\n *\n * Keep this message focused on the repair instruction instead of duplicating\n * the failed output inline.\n */\nexport function buildNoStructuredResponseFoundError(): string {\n return buildStructuredControlValidationError(\n 'Your response did not end with an executable control block. Reply with normal prose and, if you are acting, one final standalone header block such as ---tool---, ---bash---, or ---background_bash---. Put the header on its own line and put the payload on the following line(s). Use ---bash--- with exit 0 or exit 1 only when finishing. Do not discuss the control syntax.',\n )\n}\n\nexport {\n buildMultipleStructuredControlSegmentsValidationError,\n VALIDATION_FIX_REFERENCE,\n}\n\n// ---------------------------------------------------------------------------\n// Recovery strategies\n// ---------------------------------------------------------------------------\n\n/**\n * Attempt to recover a parseable agent response from truncated LLM output\n * (when `finishReason === \"length\"`).\n *\n * Strategy:\n * 1. Try `parseAgentResponse` in lenient mode with truncated control-segment support\n * 2. Infer \"continue\" for non-terminal responses when control segments exist\n *\n * @returns A `ParsedAgentResponse`, or `null` if nothing could be extracted.\n */\nexport function recoverTruncatedResponse(\n content: string,\n options?: Pick<ParseResponseWithRecoveryOptions, \"allowedRunTargets\">,\n): ParsedAgentResponse | null {\n const fullResult = parseAgentResponse(content, {\n throwOnValidationError: false,\n allowTruncatedRuns: true,\n allowedRunTargets: options?.allowedRunTargets,\n })\n const bashToolLogRecovery = recoverBashCommandFromToolLog(content, {\n allowedRunTargets: options?.allowedRunTargets,\n })\n\n if (fullResult) {\n if (shouldPreferBashToolLogRecovery(fullResult, bashToolLogRecovery)) {\n return bashToolLogRecovery\n }\n\n return fullResult\n }\n\n if (bashToolLogRecovery) return bashToolLogRecovery\n\n return null\n}\n\nfunction recoverBashCommandFromToolLog(\n content: string,\n options?: Pick<ParseResponseWithRecoveryOptions, \"allowedRunTargets\">,\n): ParsedAgentResponse | null {\n const toolLogCommand = extractBashCommandFromToolLog(content)\n if (!toolLogCommand) {\n return null\n }\n\n return parseAgentResponse(\n `Recover the last bash command from the tool log.\\n---bash---\\n${toolLogCommand}`,\n {\n throwOnValidationError: false,\n allowTruncatedRuns: true,\n allowedRunTargets: options?.allowedRunTargets,\n },\n )\n}\n\nfunction extractBashCommandFromToolLog(content: string): string | null {\n const match = content.match(/\\[TOOL_LOG:Bash:[^\\]]+\\]\\s*\\r?\\nOPEN\\s*\\r?\\n([\\s\\S]+?)(?=\\r?\\n\\[(?:stderr|meta|exit)\\])/i)\n if (!match?.[1]) {\n return null\n }\n\n const normalizedBlock = decodeEscapedShellText(match[1]).trim()\n const lines = normalizedBlock.split(/\\r?\\n/)\n if (lines.length === 0) {\n return null\n }\n\n lines[0] = lines[0]!.replace(/^\\$\\s+/, \"\")\n\n const command = lines.join(\"\\n\").trim()\n return command.length > 0 ? command : null\n}\n\nfunction shouldPreferBashToolLogRecovery(\n current: ParsedAgentResponse,\n recovered: ParsedAgentResponse | null,\n): recovered is ParsedAgentResponse {\n if (!recovered) {\n return false\n }\n\n const currentToolCall = current.selectedToolCall\n if (!currentToolCall || currentToolCall.kind !== \"bash\") {\n return true\n }\n\n const currentCommand = currentToolCall.parameters.command\n const recoveredCommand = recovered.selectedToolCall?.parameters.command\n\n if (typeof currentCommand !== \"string\" || typeof recoveredCommand !== \"string\") {\n return false\n }\n\n return currentCommand !== recoveredCommand && (\n currentToolCall.truncated === true\n || /\\n\\[(?:TOOL_LOG|stderr|meta|exit):?/i.test(currentCommand)\n || /\\n\\[(?:stderr|meta|exit)\\]/i.test(currentCommand)\n )\n}\n\n/**\n * Build a user-feedback message to send to the LLM when its response failed\n * to parse. Gives more actionable guidance than a generic \"parse failed\" message.\n *\n * @param content The raw LLM content that failed to parse\n * @param zodError Optional Zod validation error for field-specific feedback\n * @returns A feedback string to send as a user message\n */\nexport function buildParseFeedback(_content: string, zodError?: unknown): string {\n // Check if there's Zod field-level detail\n if (zodError) {\n return buildValidationErrorMessage(zodError)\n }\n\n return buildNoStructuredResponseFoundError()\n}\n\n// ---------------------------------------------------------------------------\n// Unified three-tier parsing cascade\n// ---------------------------------------------------------------------------\n\nexport interface ParseResponseWithRecoveryOptions extends ParseAgentResponseOptions {\n /**\n * The LLM's `finishReason` string. When `\"length\"`, Tier 2 truncation\n * recovery is attempted.\n */\n finishReason?: string\n}\n\nfunction looksLikeStandaloneControlSegment(\n content: string,\n allowedRunTargets: readonly RunInvocationTarget[],\n): boolean {\n return containsStandaloneStructuredInvocationStart(content, allowedRunTargets)\n}\n\nfunction getSelectedToolCallKey(result: ParsedAgentResponse): string | undefined {\n const selectedToolCall = result.selectedToolCall\n if (!selectedToolCall) {\n return undefined\n }\n\n if (\n selectedToolCall.kind === \"bash\"\n || selectedToolCall.kind === \"background_bash\"\n ) {\n const command = selectedToolCall.parameters.command\n return typeof command === \"string\" ? command : undefined\n }\n\n return selectedToolCall.rawInvocation ?? selectedToolCall.name\n}\n\n/**\n * Three-tier parsing cascade for LLM step responses.\n *\n * Shared by Magic (`use-agent.ts`) and Hammer (`BaseLLMProvider`).\n *\n * Tier 1: `parseAgentResponse` — control-segment extraction + Zod validation\n * Tier 2: `recoverTruncatedResponse` — if `finishReason === \"length\"`\n *\n * Tier 1 respects `throwOnValidationError`: if structured lines are found but\n * validation fails in strict mode, the error propagates immediately.\n *\n * @returns Parsed response, or `null` if nothing could be extracted.\n */\nexport function parseResponseWithRecovery(\n content: string,\n options?: ParseResponseWithRecoveryOptions,\n): ParsedAgentResponse | null {\n const {\n finishReason,\n throwOnValidationError,\n formatValidationError,\n allowedRunTargets,\n } = options ?? {}\n const effectiveAllowedRunTargets = allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS\n\n const result = parseAgentResponse(content, {\n throwOnValidationError,\n formatValidationError,\n allowedRunTargets: effectiveAllowedRunTargets,\n })\n if (result) {\n const bashToolLogRecovery = recoverBashCommandFromToolLog(content, {\n allowedRunTargets: effectiveAllowedRunTargets,\n })\n\n if (shouldPreferBashToolLogRecovery(result, bashToolLogRecovery)) {\n return bashToolLogRecovery\n }\n\n if (finishReason === \"length\") {\n const truncated = recoverTruncatedResponse(content, {\n allowedRunTargets: effectiveAllowedRunTargets,\n })\n const currentToolCallKey = getSelectedToolCallKey(result)\n\n if (\n truncated &&\n (\n getSelectedToolCallKey(truncated) !== currentToolCallKey\n )\n ) {\n return truncated\n }\n }\n\n return result\n }\n\n if (\n finishReason === \"length\"\n || looksLikeStandaloneControlSegment(content, effectiveAllowedRunTargets)\n ) {\n const truncated = recoverTruncatedResponse(content, {\n allowedRunTargets: effectiveAllowedRunTargets,\n })\n if (truncated) return truncated\n }\n\n return null\n}\n","/**\n * AgentLoop — Shared agentic loop engine.\n *\n * Encapsulates the duplicated orchestration logic from both Magic\n * (use-agent.ts) and Hammer (UnifiedAgent.ts) into a single class:\n *\n * - XState actor lifecycle (state machine transitions)\n * - Step user-message injection\n * - Post-LLM outcome handling (success / failure / continue)\n * - Tool execution with truncation tracking\n * - Validation / API error recovery via enforcer\n *\n * Consumers inject platform-specific behaviour through the\n * {@link AgentLoopDeps} interface:\n * - Magic: streaming LLM, React state updates\n * - Hammer: non-streaming LLM, disk persistence, CLI logging\n *\n * The caller is still responsible for:\n * 1. LLM calls + response parsing (fundamentally different per platform)\n * 2. UI updates (React setState / CLI logging)\n */\n\nimport { createActor, type Actor } from \"xstate\"\nimport {\n agentMachine,\n type AgentMachineState,\n type TruncatedToolInfo,\n} from \"./agent-machine\"\nimport {\n buildStepUserMessage,\n shouldSkipStepUserMessage,\n extractTruncatedToolInfo,\n} from \"./prompt-helpers\"\nimport {\n truncateToolResult,\n executeToolSafe,\n formatToolResultMessage,\n} from \"./tool-helpers\"\nimport {\n buildNoStructuredResponseFoundError,\n} from \"./tool-call-recovery\"\nimport type {\n BaseValidationEnforcer,\n EnforcerResult,\n} from \"./validation-enforcer\"\nimport type {\n LoopOutcome,\n ToolCall,\n ToolResult,\n} from \"./types\"\n\n// ---------------------------------------------------------------------------\n// Dependency interfaces\n// ---------------------------------------------------------------------------\n\n/** Abstraction over conversation storage (memory layer / conversation manager). */\nexport interface ConversationAdapter {\n appendMessage(role: \"user\" | \"assistant\" | \"tool\", content: string): Promise<void>\n /** Append a tool result with tool name for compaction tracking. Falls back to appendMessage(\"tool\",...) if not provided. */\n appendToolMessage?(content: string, toolCallId: string): Promise<void>\n getLastMessageRole(): string | undefined\n getLastMessageContent(): string | undefined\n triggerCompactionIfNeeded(): Promise<void>\n}\n\n/** Callbacks for platform-specific UI / logging. */\nexport interface AgentLoopCallbacks {\n onToolStart?(name: string, parameters: Record<string, unknown>, index: number, total: number): void\n onToolComplete?(name: string, result: ToolResult, truncatedResultStr: string): void\n onPhaseChange?(state: AgentMachineState): void\n /** Called when the agent reports success. */\n onComplete?(): void\n /** Called when the agent reports failure. */\n onFail?(): void\n}\n\n/** Everything the AgentLoop needs from its host environment. */\nexport interface AgentLoopDeps {\n /** Execute a single tool call. */\n executeTool: (call: ToolCall) => Promise<ToolResult>\n /** Validation / error enforcer. */\n enforcer: BaseValidationEnforcer\n /** Conversation storage adapter. */\n conversation: ConversationAdapter\n /** Optional: transform raw ToolResult before truncation (e.g. spinner cleanup). */\n formatToolResult?: (result: ToolResult, toolName: string) => ToolResult\n /**\n * Optional: pre-tool hook. Return non-null to **block** execution and\n * break out of the tool loop (e.g. Hammer's ListSkills-first enforcement).\n * The returned `lastToolResult` is stored and the machine transitions\n * to ENFORCEMENT_BREAK.\n */\n onBeforeToolExecution?: (\n name: string,\n params: Record<string, unknown>,\n ) => Promise<{ lastToolResult: string } | null>\n /** Platform-specific callbacks for UI/logging. */\n callbacks?: AgentLoopCallbacks\n}\n\n\n\n// ---------------------------------------------------------------------------\n// Input / output types for processStep\n// ---------------------------------------------------------------------------\n\n/** Parsed LLM step response — the caller parses, AgentLoop processes. */\nexport interface ParsedStepInput {\n outcome: LoopOutcome\n reasoning?: string\n selectedToolCall?: ToolCall\n wasTruncated: boolean\n /**\n * Raw LLM content string. When provided, `processStep` records it\n * as an assistant message in the conversation adapter before\n * processing, so callers don't need to do it themselves.\n */\n rawContent?: string\n}\n\n/** Result of a single tool execution (for the caller to build UI). */\nexport interface ToolExecutionResult {\n name: string\n result: ToolResult\n truncatedResultStr: string\n}\n\n/** What processStep returns — outcome is the loop-control signal. */\nexport interface StepResult {\n outcome: LoopOutcome\n toolResults: ToolExecutionResult[]\n}\n\n// ---------------------------------------------------------------------------\n// AgentLoop class\n// ---------------------------------------------------------------------------\n\nexport class AgentLoop {\n private deps: AgentLoopDeps\n private actor: Actor<typeof agentMachine>\n private _truncatedToolInfo?: TruncatedToolInfo\n private _lastToolResult?: string\n\n constructor(deps: AgentLoopDeps) {\n this.deps = deps\n\n // Create and start the XState actor\n this.actor = createActor(agentMachine)\n this.actor.start()\n }\n\n // ── Internal helpers ─────────────────────────────────────────────\n\n /**\n * Send an event to the actor, silently swallowing errors if the actor\n * was stopped concurrently (e.g. abort/destroy during an async gap).\n */\n private safeSend(event: Parameters<typeof this.actor.send>[0]): void {\n try {\n this.actor.send(event)\n } catch {\n // Actor may already be stopped — ignore\n }\n }\n\n // ── Read-only state ──────────────────────────────────────────────\n\n /** Current XState machine state. */\n get machineState(): AgentMachineState {\n return this.actor.getSnapshot().value as AgentMachineState\n }\n\n /** Current action count from the machine context. */\n get actionCount(): number {\n return this.actor.getSnapshot().context.actionCount\n }\n\n /** Last truncation info (for the caller to store / display). */\n get truncatedToolInfo(): TruncatedToolInfo | undefined {\n return this._truncatedToolInfo\n }\n\n /** Last tool result string (independent of machine state). */\n get lastToolResult(): string | undefined {\n return this._lastToolResult\n }\n\n // ── Lifecycle ───────────────────────────────────────────────────\n\n /** Transition: idle → prompting. */\n start(task: string): void {\n this.safeSend({ type: \"START\", task })\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n }\n\n // ── Lifecycle: step preparation ──────────────────────────────────\n\n /**\n * Inject the step user-message and transition to analyzing.\n *\n * @param actionCountOverride If provided, use this count instead of the\n * machine's internal count (useful when the caller tracks total count\n * across sessions).\n * @returns `true` if a user message was injected, `false` if skipped.\n */\n async prepareStep(actionCountOverride?: number): Promise<boolean> {\n const lastRole = this.deps.conversation.getLastMessageRole()\n const lastContent = this.deps.conversation.getLastMessageContent()\n\n let injected = false\n if (!shouldSkipStepUserMessage(lastRole ?? null, lastContent ?? null)) {\n const msg = buildStepUserMessage({\n actionCount: actionCountOverride ?? (this.actionCount + 1),\n truncatedToolInfo: this._truncatedToolInfo,\n })\n // Clear truncation info after using it\n if (this._truncatedToolInfo) this._truncatedToolInfo = undefined\n await this.deps.conversation.appendMessage(\"user\", msg)\n injected = true\n }\n\n // Machine: prompting → analyzing (increments actionCount)\n this.safeSend({ type: \"PROMPT_COMPLETE\" })\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n\n return injected\n }\n\n // ── Lifecycle: process a parsed step ─────────────────────────────\n\n /**\n * Process a fully-parsed LLM step response end-to-end.\n *\n * The caller is responsible for:\n * 1. The LLM call (streaming or not)\n * 2. Parsing the response into {@link ParsedStepInput}\n * 3. UI updates based on the returned {@link StepResult}\n *\n * This method handles:\n * 1. Recording the assistant message (when `rawContent` is provided)\n * 2. Terminal outcomes (success / failure)\n * 3. State machine transitions\n * 4. Tool execution (via deps.executeTool)\n * 5. Result formatting, truncation, and conversation storage\n * 6. Truncation tracking across iterations\n */\n async processStep(\n input: ParsedStepInput,\n signal?: AbortSignal,\n ): Promise<StepResult> {\n const {\n outcome,\n selectedToolCall,\n wasTruncated,\n rawContent,\n } = input\n let effectiveOutcome = outcome\n let effectiveSelectedToolCall = selectedToolCall\n // Circuit breaker removed: always allow the model to retry after failure\n\n // Record assistant message in conversation (when caller supplies raw content)\n if (rawContent && outcome !== \"failure\") {\n await this.deps.conversation.appendMessage(\"assistant\", rawContent)\n }\n\n if (selectedToolCall) {\n effectiveOutcome = \"continue\"\n effectiveSelectedToolCall = selectedToolCall\n }\n\n // ── Terminal outcomes ─────────────────────────────────────────\n\n if (effectiveOutcome === \"success\") {\n this.safeSend({ type: \"OUTCOME_SUCCESS\" })\n this.deps.callbacks?.onComplete?.()\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n return {\n outcome: effectiveOutcome,\n toolResults: [],\n }\n }\n\n if (effectiveOutcome === \"failure\") {\n this.safeSend({\n type: \"OUTCOME_FAILURE\",\n error: input.reasoning || \"Agent reported failure\",\n })\n this.deps.callbacks?.onFail?.()\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n return {\n outcome: effectiveOutcome,\n toolResults: [],\n }\n }\n\n // ── Continue: execute tools ──────────────────────────────────\n\n this.safeSend({ type: \"LLM_SUCCESS\" })\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n\n const effectiveToolCalls = effectiveSelectedToolCall\n ? [effectiveSelectedToolCall]\n : []\n\n // Truncation tracking\n if (wasTruncated) {\n this._truncatedToolInfo = extractTruncatedToolInfo(effectiveToolCalls)\n }\n\n let enforcementBroke = false\n const toolResults: ToolExecutionResult[] = []\n\n if (effectiveToolCalls.length > 0) {\n for (let i = 0; i < effectiveToolCalls.length; i++) {\n if (signal?.aborted) break\n\n const tc = effectiveToolCalls[i]\n\n this.deps.callbacks?.onToolStart?.(tc.name, tc.parameters, i, effectiveToolCalls.length)\n\n // Pre-execution hook (e.g. Hammer's ListSkills-first enforcement)\n if (this.deps.onBeforeToolExecution) {\n const blocked = await this.deps.onBeforeToolExecution(\n tc.name,\n tc.parameters,\n )\n if (blocked) {\n this._lastToolResult = blocked.lastToolResult\n this.safeSend({\n type: \"ENFORCEMENT_BREAK\",\n lastToolResult: blocked.lastToolResult,\n })\n enforcementBroke = true\n break\n }\n }\n\n // Execute\n const startedAt = Date.now()\n let result = await executeToolSafe(() =>\n this.deps.executeTool(tc),\n )\n\n if (typeof result.duration_ms !== \"number\") {\n result = {\n ...result,\n duration_ms: Date.now() - startedAt,\n }\n }\n\n // Optional formatting (e.g. spinner cleanup)\n if (this.deps.formatToolResult) {\n result = this.deps.formatToolResult(result, tc.name)\n }\n\n // Truncate\n let resultStr = formatToolResultMessage(tc, result)\n resultStr = truncateToolResult(resultStr, {\n strategy: \"head-tail\",\n })\n\n // Update truncation info on first tool\n if (wasTruncated && this._truncatedToolInfo && i === 0) {\n this._truncatedToolInfo.executionSucceeded =\n result.success === true\n }\n\n // Store in conversation\n if (this.deps.conversation.appendToolMessage) {\n await this.deps.conversation.appendToolMessage(\n resultStr,\n tc.name,\n )\n } else {\n await this.deps.conversation.appendMessage(\"tool\", resultStr)\n }\n\n toolResults.push({\n name: tc.name,\n result,\n truncatedResultStr: resultStr,\n })\n\n // Track last tool result (independent of machine state)\n this._lastToolResult = resultStr\n\n this.deps.callbacks?.onToolComplete?.(\n tc.name,\n result,\n resultStr,\n )\n\n // No circuit breaker: always allow the model to retry after failure\n }\n\n if (!enforcementBroke) {\n // Trigger compaction (non-fatal)\n try {\n await this.deps.conversation.triggerCompactionIfNeeded()\n } catch {\n // non-fatal\n }\n\n // Machine: executing → updating\n this.safeSend({\n type: \"TOOLS_EXECUTED\",\n lastToolResult: toolResults.at(-1)?.truncatedResultStr,\n })\n }\n } else {\n const validationError = new Error(\n buildNoStructuredResponseFoundError(),\n )\n\n await this.handleLLMValidationError(validationError)\n this.safeSend({ type: \"NO_TOOLS\" })\n }\n\n // ── Finalize step ────────────────────────────────────────────\n\n if (this.machineState === \"updating\") {\n this.safeSend({ type: \"UPDATE_COMPLETE\" })\n }\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n\n return { outcome: effectiveOutcome, toolResults }\n }\n\n // ── Error handling ───────────────────────────────────────────────\n\n /** Handle an LLM validation error (JSON parse, Zod, etc.). */\n async handleLLMValidationError(\n error: Error,\n ): Promise<EnforcerResult> {\n const result = await this.deps.enforcer.handleValidationError(error)\n this.safeSend({\n type: \"LLM_VALIDATION_ERROR\",\n error: error.message,\n })\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n return result\n }\n\n /** Handle an LLM API error (network, rate limit, 5xx). */\n async handleLLMApiError(error: Error): Promise<EnforcerResult> {\n const result = await this.deps.enforcer.handleApiError(error)\n this.safeSend({ type: \"LLM_API_ERROR\", error: error.message })\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n return result\n }\n\n /**\n * Classify a step LLM error as validation or API error and\n * delegate to the appropriate handler.\n */\n async classifyStepError(error: Error): Promise<void> {\n if (error.message?.startsWith(\"VALIDATION_ERROR:\")) {\n await this.handleLLMValidationError(error)\n } else {\n await this.handleLLMApiError(error)\n }\n }\n\n /**\n * Handle an unrecoverable error and transition the machine to a\n * terminal state.\n */\n async handleFatalError(errorMsg: string): Promise<void> {\n const result = await this.deps.enforcer.handleFatalError(errorMsg)\n this._lastToolResult = result.lastToolResult\n this.safeSend({ type: \"OUTCOME_FAILURE\", error: result.errorMessage })\n this.deps.callbacks?.onFail?.()\n this.deps.callbacks?.onPhaseChange?.(this.machineState)\n }\n\n // ── Machine context access ───────────────────────────────────────\n\n /** Send an arbitrary event to the machine (for platform-specific transitions). */\n sendEvent(event: Parameters<typeof this.actor.send>[0]): void {\n this.safeSend(event)\n }\n\n /** Get the raw machine context snapshot. */\n getContext() {\n return this.actor.getSnapshot().context\n }\n\n // ── Cleanup ──────────────────────────────────────────────────────\n\n /** Restore truncated tool info from a previous session. */\n restoreTruncatedToolInfo(info: TruncatedToolInfo | undefined): void {\n this._truncatedToolInfo = info\n }\n\n /** Stop the XState actor. Call during cleanup / unmount. */\n destroy(): void {\n this.actor.stop()\n }\n\n /**\n * Reset the AgentLoop by stopping the current actor and creating\n * a new one. Returns to idle state.\n */\n reset(): void {\n this.actor.stop()\n this.actor = createActor(agentMachine)\n this.actor.start()\n this._truncatedToolInfo = undefined\n this._lastToolResult = undefined\n }\n}\n","/**\n * Shared non-voice tool-loop runtime for Hammer, Magic, Monoslides, and Monospace.\n *\n * This base owns the common runtime seam across non-voice agents: memory\n * bootstrap, static context injection, AgentLoop setup, per-step LLM calls,\n * and parsed step execution.\n */\n\nimport {\n AgentLoop,\n type AgentLoopCallbacks,\n type AgentLoopDeps,\n type ConversationAdapter,\n type ParsedStepInput,\n type StepResult,\n} from \"./agent-loop\"\nimport type { AgentMemoryLayer } from \"./agent-memory-layer\"\nimport { LLMClient } from \"./llm-client\"\nimport type {\n ChatMessage,\n LLMClientResponse,\n ToolDefinition,\n} from \"./types\"\nimport type { BaseValidationEnforcer } from \"./validation-enforcer\"\n\nexport interface ToolLoopRuntimeStepContext<TStepInput = undefined> {\n task: string\n actionCount: number\n tools: ToolDefinition[]\n stepInput?: TStepInput\n}\n\nexport interface ToolLoopRuntimeRunStepOptions<TStepInput = undefined> {\n task: string\n actionCount: number\n signal?: AbortSignal\n stepInput?: TStepInput\n}\n\nexport interface ToolLoopRuntimeLLMRequest {\n messages: ChatMessage[]\n temperature?: number\n maxTokens?: number\n frequencyPenalty?: number\n presencePenalty?: number\n onToken?: (token: string) => void | boolean\n normalizeResponseContent?: (content: string) => string\n}\n\nexport interface ToolLoopRuntimeLLMResponse {\n content: string\n finishReason: string\n usage?: LLMClientResponse[\"usage\"]\n}\n\nexport interface ToolLoopRuntimeHooks<TStepInput = undefined> {\n onBeforeStep?(\n context: ToolLoopRuntimeStepContext<TStepInput>,\n ): Promise<void> | void\n onAfterStep?(\n context: ToolLoopRuntimeStepContext<TStepInput>,\n result: StepResult,\n ): Promise<void> | void\n onToken?(token: string): void | boolean\n}\n\nexport interface ToolLoopAgentRuntimeDeps<TStepInput = undefined> {\n llmClient?: LLMClient\n loopCallbacks?: AgentLoopCallbacks\n hooks?: ToolLoopRuntimeHooks<TStepInput>\n requireTodoListOnFirstResponse?: boolean\n}\n\nexport interface ToolLoopRuntimeSetup<\n TMemory extends AgentMemoryLayer,\n TEnforcer extends BaseValidationEnforcer,\n> {\n memory: TMemory\n enforcer: TEnforcer\n conversation: ConversationAdapter\n loopDeps: Omit<AgentLoopDeps, \"enforcer\" | \"conversation\" | \"callbacks\">\n}\n\nexport interface ToolLoopRuntimeInfrastructure<\n TMemory extends AgentMemoryLayer,\n TEnforcer extends BaseValidationEnforcer,\n> extends ToolLoopRuntimeSetup<TMemory, TEnforcer> {\n loop: AgentLoop\n}\n\nexport interface ToolLoopRuntimeRunStepResult<TStepInput = undefined> {\n context: ToolLoopRuntimeStepContext<TStepInput>\n response: ToolLoopRuntimeLLMResponse\n parsed: ParsedStepInput\n result: StepResult\n}\n\nexport interface ToolLoopRuntimeExecuteStepResult {\n response: ToolLoopRuntimeLLMResponse\n parsed: ParsedStepInput\n}\n\nexport abstract class ToolLoopAgentRuntime<\n TMemory extends AgentMemoryLayer = AgentMemoryLayer,\n TEnforcer extends BaseValidationEnforcer = BaseValidationEnforcer,\n TStepInput = undefined,\n> {\n protected readonly llmClient: LLMClient | null\n protected readonly loopCallbacks: AgentLoopCallbacks\n protected readonly hooks: ToolLoopRuntimeHooks<TStepInput>\n private readonly requireTodoListOnFirstResponse: boolean\n\n private infrastructure: ToolLoopRuntimeInfrastructure<TMemory, TEnforcer> | null = null\n private infrastructurePromise: Promise<\n ToolLoopRuntimeInfrastructure<TMemory, TEnforcer>\n > | null = null\n\n protected constructor(deps: ToolLoopAgentRuntimeDeps<TStepInput>) {\n this.llmClient = deps.llmClient ?? null\n this.loopCallbacks = deps.loopCallbacks ?? {}\n this.hooks = deps.hooks ?? {}\n this.requireTodoListOnFirstResponse = deps.requireTodoListOnFirstResponse ?? false\n }\n\n protected abstract createRuntimeSetup(): Promise<\n ToolLoopRuntimeSetup<TMemory, TEnforcer>\n >\n\n protected abstract getToolDefinitions(): ToolDefinition[]\n\n protected buildSystemPrompt(\n _context: ToolLoopRuntimeStepContext<TStepInput>,\n ): string {\n throw new Error(\n `buildSystemPrompt is not implemented for ${this.constructor.name}`,\n )\n }\n\n protected buildLLMRequest(\n _context: ToolLoopRuntimeStepContext<TStepInput>,\n _messages: ChatMessage[],\n ): ToolLoopRuntimeLLMRequest {\n throw new Error(\n `buildLLMRequest is not implemented for ${this.constructor.name}`,\n )\n }\n\n protected parseStepResponse(\n _response: ToolLoopRuntimeLLMResponse,\n _tools: ToolDefinition[],\n ): ParsedStepInput {\n throw new Error(\n `parseStepResponse is not implemented for ${this.constructor.name}`,\n )\n }\n\n protected get runtimeLoop(): AgentLoop | null {\n return this.infrastructure?.loop ?? null\n }\n\n protected get runtimeMemory(): TMemory | null {\n return this.infrastructure?.memory ?? null\n }\n\n protected get runtimeEnforcer(): TEnforcer | null {\n return this.infrastructure?.enforcer ?? null\n }\n\n protected createStepContext(\n options: ToolLoopRuntimeRunStepOptions<TStepInput>,\n tools: ToolDefinition[],\n ): ToolLoopRuntimeStepContext<TStepInput> {\n return {\n task: options.task,\n actionCount: options.actionCount,\n tools,\n stepInput: options.stepInput,\n }\n }\n\n protected async ensureStaticContext(_memory: TMemory): Promise<void> {}\n\n protected async prepareMemoryForRun(\n memory: TMemory,\n task: string,\n ): Promise<void> {\n await this.ensureStaticContext(memory)\n memory.appendMessage(\"user\", task)\n }\n\n protected async prepareMemoryForStep(memory: TMemory): Promise<void> {\n await this.ensureStaticContext(memory)\n }\n\n protected async buildStepMessages(\n memory: TMemory,\n context: ToolLoopRuntimeStepContext<TStepInput>,\n ): Promise<ChatMessage[]> {\n await this.prepareMemoryForStep(memory)\n const systemPrompt = this.buildSystemPrompt(context)\n return memory.buildMessages(systemPrompt)\n }\n\n protected async invokeLLM(\n request: ToolLoopRuntimeLLMRequest,\n ): Promise<ToolLoopRuntimeLLMResponse> {\n if (!this.llmClient) {\n throw new Error(\n `No llmClient is configured for ${this.constructor.name}. Override executeLLMStep() or provide llmClient in the constructor.`,\n )\n }\n\n const response = await this.llmClient.chat(\n {\n messages: request.messages,\n temperature: request.temperature,\n maxTokens: request.maxTokens,\n stream: Boolean(request.onToken ?? this.hooks.onToken),\n frequencyPenalty: request.frequencyPenalty,\n presencePenalty: request.presencePenalty,\n },\n request.onToken || this.hooks.onToken\n ? {\n onToken: request.onToken ?? this.hooks.onToken,\n }\n : undefined,\n )\n\n return {\n content: request.normalizeResponseContent\n ? request.normalizeResponseContent(response.content)\n : response.content,\n finishReason: response.finishReason,\n usage: response.usage,\n }\n }\n\n protected async executeLLMStep(\n context: ToolLoopRuntimeStepContext<TStepInput>,\n messages: ChatMessage[],\n ): Promise<ToolLoopRuntimeExecuteStepResult> {\n const response = await this.invokeLLM(\n this.buildLLMRequest(context, messages),\n )\n\n return {\n response,\n parsed: this.parseStepResponse(response, context.tools),\n }\n }\n\n protected async validateParsedStep(\n context: ToolLoopRuntimeStepContext<TStepInput>,\n parsed: ParsedStepInput,\n ): Promise<void> {\n if (\n this.requireTodoListOnFirstResponse\n && context.actionCount === 1\n && parsed.selectedToolCall?.name !== \"manage_todo_list\"\n ) {\n throw new Error(\n \"VALIDATION_ERROR: You MUST call the manage_todo_list tool as your very first action to plan your work before executing any other tool. Break the task into specific, actionable steps.\",\n )\n }\n }\n\n /**\n * Called after the LLM response is parsed but before the tool\n * executes. Web runtimes override this to flush streaming content\n * to the store and transition the UI to a \"tool running\" state.\n */\n protected async onBeforeToolDispatch(\n _context: ToolLoopRuntimeStepContext<TStepInput>,\n _parsed: ParsedStepInput,\n ): Promise<void> {}\n\n protected async ensureInfrastructure(): Promise<\n ToolLoopRuntimeInfrastructure<TMemory, TEnforcer>\n > {\n if (this.infrastructurePromise) {\n return this.infrastructurePromise\n }\n\n const promise = (async () => {\n const setup = await this.createRuntimeSetup()\n const infrastructure = {\n ...setup,\n loop: new AgentLoop({\n ...setup.loopDeps,\n enforcer: setup.enforcer,\n conversation: setup.conversation,\n callbacks: this.loopCallbacks,\n }),\n }\n\n this.infrastructure = infrastructure\n return infrastructure\n })()\n\n this.infrastructurePromise = promise.catch((error) => {\n this.infrastructure = null\n this.infrastructurePromise = null\n throw error\n })\n\n return this.infrastructurePromise\n }\n\n async beginRun(\n task: string,\n ): Promise<ToolLoopRuntimeInfrastructure<TMemory, TEnforcer>> {\n const infrastructure = await this.ensureInfrastructure()\n await this.prepareMemoryForRun(infrastructure.memory, task)\n infrastructure.loop.start(task)\n return infrastructure\n }\n\n async runStep(\n options: ToolLoopRuntimeRunStepOptions<TStepInput>,\n ): Promise<ToolLoopRuntimeRunStepResult<TStepInput>> {\n const infrastructure = await this.ensureInfrastructure()\n const tools = this.getToolDefinitions()\n const context = this.createStepContext(options, tools)\n\n await infrastructure.loop.prepareStep(options.actionCount)\n await this.hooks.onBeforeStep?.(context)\n\n const messages = await this.buildStepMessages(\n infrastructure.memory,\n context,\n )\n const { response, parsed } = await this.executeLLMStep(\n context,\n messages,\n )\n await this.validateParsedStep(context, parsed)\n await this.onBeforeToolDispatch(context, parsed)\n const result = await infrastructure.loop.processStep(\n parsed,\n options.signal,\n )\n\n await this.hooks.onAfterStep?.(context, result)\n\n return {\n context,\n response,\n parsed,\n result,\n }\n }\n\n protected async onDestroy(\n _infrastructure: ToolLoopRuntimeInfrastructure<TMemory, TEnforcer>,\n ): Promise<void> {}\n\n async destroy(): Promise<void> {\n const infrastructurePromise = this.infrastructurePromise\n this.infrastructurePromise = null\n this.infrastructure = null\n\n if (!infrastructurePromise) {\n return\n }\n\n const infrastructure = await infrastructurePromise\n await this.onDestroy(infrastructure)\n infrastructure.loop.destroy()\n infrastructure.memory.dispose?.()\n }\n}","/**\n * Base Memory Layer — shared infrastructure for memory compaction.\n *\n * Both workspace agents and the Voice Agent use episodic compaction with\n * structured state extraction. This module provides the shared skeleton:\n *\n * - Generic base class (`BaseMemoryLayer<TState, TMessage>`)\n * - Shared types: `MemoryMessage`, `CompactionCursor`, `MemoryStorage`, etc.\n * - Token estimation strategy (pluggable: tiktoken vs char-based)\n * - Shared algorithms: sliding-window, buildMessages, triggerCompaction\n *\n * Core Invariants (enforced by this base):\n * 1. Raw history is NEVER modified in-place; entries are pruned after compaction\n * 2. Compaction is a state transition, not a view transform\n * 3. Compressed state is NEVER recursively summarized\n * 4. State compaction removes obsolete structure but preserves meaning\n * 5. buildMessages is a PURE function (cache writes are benign memoization)\n */\n\nimport type { ChatMessage } from \"./types\"\n\n// ============================================================================\n// Compaction LLM Interface\n// ============================================================================\n\n/**\n * Minimal interface for an LLM client used during compaction.\n * Kept abstract so memory-layer has no hard dependency on LLMClient.\n * The shared `LLMClient` class satisfies this interface.\n */\nexport interface CompactionLLMClient {\n chat(\n options: {\n messages: ChatMessage[]\n temperature?: number\n maxTokens?: number\n stream?: boolean\n },\n ): Promise<{ content: string }>\n}\n\n// ============================================================================\n// Shared Types\n// ============================================================================\n\n/** Base message stored in raw history. */\nexport interface MemoryMessage {\n id: string\n role: \"system\" | \"user\" | \"assistant\" | \"tool\"\n content: string\n timestamp: number\n /** Monotonic message counter. */\n turn: number\n /** Cached token count for this message (computed once at creation). */\n tokenCount: number\n}\n\nexport interface MemoryProvenance {\n source: \"rule\" | \"llm\" | \"tool\" | \"assistant\" | \"user\"\n detail?: string\n}\n\n/** Tracks how far compaction has progressed. */\nexport interface CompactionCursor {\n lastCompactedTurn: number\n}\n\n// ============================================================================\n// Token Estimation\n// ============================================================================\n\n/**\n * Strategy for estimating token counts.\n *\n * - Workspace agents share the same estimator strategy by default\n * - CharTokenEstimator is the cross-platform baseline implementation\n */\nexport interface TokenEstimator {\n /** Estimate token count for a string. */\n estimateTokens(text: string): number\n /** Dispose any resources (e.g. tiktoken WASM). No-op by default. */\n dispose?(): void\n}\n\n/**\n * Character-based token estimator.\n * GPT/Claude average ~4 chars/token for English; 3.5 is conservative.\n */\nexport class CharTokenEstimator implements TokenEstimator {\n constructor(private charsPerToken = 3.5) {}\n\n estimateTokens(text: string): number {\n return Math.ceil(text.length / this.charsPerToken)\n }\n}\n\n// ============================================================================\n// Persistence\n// ============================================================================\n\n/**\n * Platform-agnostic persistence adapter (generic over data shape).\n *\n * Implementations: LocalStorageAdapter, HttpAdapter, ExpoFileAdapter,\n * and the Bun-server FileMemoryAdapter.\n */\nexport interface MemoryStorage<T = unknown> {\n load(): Promise<T | null>\n save(data: T): Promise<void>\n clear(): Promise<void>\n}\n\n/** Base shape of persisted memory data. Apps may extend with extra fields. */\nexport interface PersistedMemoryData<\n TState = unknown,\n TMessage extends MemoryMessage = MemoryMessage,\n> {\n rawHistory: TMessage[]\n compressedState: TState\n compactionCursor: CompactionCursor\n currentTurn: number\n compactionCount: number\n}\n\n// ============================================================================\n// Configuration\n// ============================================================================\n\nexport interface MemoryLayerConfig {\n /** Trigger compaction when estimated context exceeds this many tokens. */\n compactionTokenThreshold: number\n /** Keep at least this many tokens of recent messages uncompressed. */\n protectedContextTokens: number\n /** Maximum tokens for the rendered compressed state. */\n stateBudgetTokens: number\n /** Hard cap on raw history entries (safety net). */\n maxRawHistory: number\n /** Minimum turns between compaction attempts. */\n compactionDebounceTurns: number\n /** Baseline token overhead for system prompt (conservative estimate). */\n systemPromptOverhead: number\n /** Strategy for estimating token counts. */\n tokenEstimator: TokenEstimator\n /** Optional LLM client for enhanced compaction (e.g. MiniMax). */\n compactionClient?: CompactionLLMClient\n /** Temperature for compaction LLM calls (default 0.1). */\n compactionTemperature?: number\n /** Max tokens for compaction LLM output (default 4096). */\n compactionMaxTokens?: number\n}\n\n// ============================================================================\n// Base Memory Layer\n// ============================================================================\n\n/**\n * Abstract base class for memory layers with episodic compaction.\n *\n * Subclasses provide:\n * - Message creation (TMessage construction with app-specific fields)\n * - Compaction logic (extraction plus pruning obsolete state entries)\n * - State rendering (converting TState to human-readable text)\n *\n * The base class provides:\n * - Append-only raw history with hard cap enforcement\n * - Token-budgeted sliding window for recent messages\n * - buildMessages assembly (system → state → recent)\n * - Compaction triggering (debounce, threshold check, prune)\n * - Rendered state caching with invalidation\n * - Persistence lifecycle (save/load/clear)\n * - Accessors for metrics\n */\nexport abstract class BaseMemoryLayer<\n TState,\n TMessage extends MemoryMessage,\n> {\n protected rawHistory: TMessage[] = []\n protected compressedState: TState\n protected compactionCursor: CompactionCursor = { lastCompactedTurn: 0 }\n protected currentTurn = 0\n protected compactionCount = 0\n\n /** Rendered state cache (invalidated on mutation). */\n protected renderedStateCache: string | null = null\n protected stateTokenCountCache: number | null = null\n\n /** Debounce: turns since last compaction attempt. */\n protected lastCompactionAttempt = 0\n\n /**\n * Static context: rules/instructions injected once, always included in\n * buildMessages, never compressed or pruned.\n */\n protected staticContext: string | null = null\n\n constructor(\n protected readonly config: MemoryLayerConfig,\n initialState: TState,\n ) {\n this.compressedState = initialState\n }\n\n // -----------------------------------------------------------------------\n // Abstract Methods (subclass-specific)\n // -----------------------------------------------------------------------\n\n /**\n * Create a TMessage from the given parts.\n * Subclass should compute and cache the tokenCount (or use tokenEstimator).\n */\n protected abstract createMessage(\n id: string,\n role: \"system\" | \"user\" | \"assistant\" | \"tool\",\n content: string,\n turn: number,\n timestamp: number,\n ): TMessage\n\n /**\n * Extract structured facts from raw messages into compressedState and\n * enforce any dedupe, aging, and hard-cap rules for the durable state.\n * This is deterministic pattern matching, NOT LLM summarization.\n * Should mutate `this.compressedState` in place.\n */\n protected abstract performCompaction(messages: TMessage[]): void\n\n /**\n * Render compressedState as human-readable structured text for LLM context.\n * Result is cached — only called when cache is invalidated.\n */\n protected abstract renderState(): string\n\n /**\n * Create a fresh initial state (used by clear()).\n */\n protected abstract createInitialState(): TState\n\n // -----------------------------------------------------------------------\n // Optional Hooks\n // -----------------------------------------------------------------------\n\n /** Label for the compressed state section in buildMessages. */\n protected getStateLabel(): string {\n return \"Memory\"\n }\n\n /** Placeholder user message when no user message precedes the first assistant. */\n protected getResumePlaceholder(): string {\n return \"Continue.\"\n }\n\n /** Called after a message is appended (e.g. for failure tracking). */\n protected onMessageAppended(_msg: TMessage): void {}\n\n /** Called after compaction + prune (e.g. for extra persistence). */\n protected onCompactionComplete(): void {}\n\n /**\n * LLM-enhanced compaction. Override in subclass to provide LLM-based\n * summarization using `this.config.compactionClient`.\n *\n * When this returns `true`, the pattern-matching `performCompaction()`\n * is skipped. When it returns `false` (or throws), pattern matching\n * runs as a deterministic fallback.\n */\n protected async performLLMCompaction(_messages: TMessage[]): Promise<boolean> {\n return false\n }\n\n // -----------------------------------------------------------------------\n // Message Management\n // -----------------------------------------------------------------------\n\n /** Append a message to raw history. Returns the message ID. */\n appendMessage(\n role: \"system\" | \"user\" | \"assistant\" | \"tool\",\n content: string,\n ): string {\n this.currentTurn++\n const id = `msg_${this.currentTurn}_${Date.now()}`\n const timestamp = Date.now()\n const msg = this.createMessage(id, role, content, this.currentTurn, timestamp)\n this.rawHistory.push(msg)\n\n // Hard cap enforcement\n if (this.rawHistory.length > this.config.maxRawHistory) {\n const excess = this.rawHistory.length - this.config.maxRawHistory\n const lastPrunedTurn = this.rawHistory[excess - 1].turn\n this.rawHistory.splice(0, excess)\n if (this.compactionCursor.lastCompactedTurn < lastPrunedTurn) {\n this.compactionCursor.lastCompactedTurn = lastPrunedTurn\n }\n }\n\n this.onMessageAppended(msg)\n return id\n }\n\n // -----------------------------------------------------------------------\n // Build Messages (PURE — no state mutations except benign cache writes)\n // -----------------------------------------------------------------------\n\n /**\n * Build the message array for LLM context.\n *\n * Assembly order:\n * 1. System prompt\n * 2. Static context (if any)\n * 3. Compressed state\n * 4. Recent raw messages (token-budgeted sliding window)\n *\n * Post-processing:\n * - Tool messages converted to user role (\"Tool result: …\")\n * - Consecutive same-role messages merged\n * - Guard: user message inserted before first assistant if missing\n * - Leading system messages merged into one\n */\n buildMessages(systemPrompt: string): ChatMessage[] {\n const messages: ChatMessage[] = []\n\n // 1. System prompt\n messages.push({ role: \"system\", content: systemPrompt })\n\n // 2. Static context (rules/instructions — never compressed)\n if (this.staticContext) {\n messages.push({ role: \"system\", content: this.staticContext })\n }\n\n // 3. Compressed state\n const stateBlock = this.getCachedRenderedState()\n if (stateBlock) {\n messages.push({\n role: \"system\",\n content: `# ${this.getStateLabel()}\\n\\n${stateBlock}`,\n })\n }\n\n // 4. Recent messages (token-budget sliding window)\n const recent = this.getRecentMessages()\n for (const msg of recent) {\n if (msg.role === \"system\") continue\n\n const role = msg.role === \"tool\" ? \"user\" : msg.role\n const content =\n msg.role === \"tool\"\n ? `Tool result: ${msg.content}`\n : msg.content\n\n // Merge consecutive same-role messages (API alternation requirement)\n const last = messages[messages.length - 1]\n if (last && last.role === role) {\n last.content += \"\\n\\n\" + content\n } else {\n messages.push({ role, content })\n }\n }\n\n // Guard: ensure a user message before first assistant\n const firstNonSystem = messages.findIndex((m) => m.role !== \"system\")\n if (firstNonSystem !== -1 && messages[firstNonSystem].role === \"assistant\") {\n messages.splice(firstNonSystem, 0, {\n role: \"user\",\n content: this.getResumePlaceholder(),\n })\n }\n\n // Merge leading system messages into one\n const systemParts: string[] = []\n let sysCount = 0\n for (const msg of messages) {\n if (msg.role === \"system\") {\n systemParts.push(msg.content)\n sysCount++\n } else break\n }\n if (sysCount > 1) {\n messages.splice(0, sysCount, {\n role: \"system\",\n content: systemParts.join(\"\\n\\n---\\n\\n\"),\n })\n }\n\n return messages\n }\n\n // -----------------------------------------------------------------------\n // Compaction\n // -----------------------------------------------------------------------\n\n /** Trigger compaction if conversation context exceeds token threshold. */\n async triggerCompactionIfNeeded(): Promise<void> {\n // Debounce\n if (\n this.currentTurn - this.lastCompactionAttempt <\n this.config.compactionDebounceTurns\n ) {\n return\n }\n\n // Compute recent messages once (used for both threshold check and boundary)\n const recentMessages = this.getRecentMessages()\n const recentTokens = recentMessages.reduce(\n (sum, m) => sum + m.tokenCount,\n 0,\n )\n const stateContent = this.getCachedRenderedState()\n const stateTokens = stateContent\n ? this.config.tokenEstimator.estimateTokens(stateContent)\n : 0\n const staticTokens = this.staticContext\n ? this.config.tokenEstimator.estimateTokens(this.staticContext)\n : 0\n const estimated = recentTokens + stateTokens + staticTokens + this.config.systemPromptOverhead\n if (estimated < this.config.compactionTokenThreshold) return\n\n // Find protected window boundary\n const protectedTurnBoundary =\n recentMessages.length > 0\n ? recentMessages[0].turn\n : this.currentTurn + 1\n\n const compactionBoundary = Math.max(\n this.compactionCursor.lastCompactedTurn + 1,\n 1,\n )\n\n const toCompact = this.rawHistory.filter(\n (m) =>\n m.turn >= compactionBoundary &&\n m.turn < protectedTurnBoundary,\n )\n\n if (toCompact.length === 0) {\n this.lastCompactionAttempt = this.currentTurn\n return\n }\n\n // Perform compaction: try LLM first, fall back to pattern matching\n let llmSucceeded = false\n if (this.config.compactionClient) {\n try {\n llmSucceeded = await this.performLLMCompaction(toCompact)\n } catch {\n // LLM compaction failed — fall through to pattern matching\n }\n }\n if (!llmSucceeded) {\n this.performCompaction(toCompact)\n }\n\n // Advance cursor & bookkeeping\n this.compactionCursor.lastCompactedTurn = protectedTurnBoundary - 1\n this.lastCompactionAttempt = this.currentTurn\n this.compactionCount++\n this.invalidateStateCache()\n\n // Prune compacted messages from rawHistory\n this.rawHistory = this.rawHistory.filter(\n (m) => m.turn >= protectedTurnBoundary,\n )\n\n // Hook for subclass (e.g. persistence, extra logging)\n this.onCompactionComplete()\n }\n\n // -----------------------------------------------------------------------\n // Sliding Window\n // -----------------------------------------------------------------------\n\n /** Get recent messages that fit within the protected token budget. */\n protected getRecentMessages(): TMessage[] {\n const messages: TMessage[] = []\n let tokenCount = 0\n\n for (let i = this.rawHistory.length - 1; i >= 0; i--) {\n const msg = this.rawHistory[i]\n if (msg.role === \"system\") continue\n\n const msgTokens = msg.tokenCount\n if (\n tokenCount + msgTokens > this.config.protectedContextTokens &&\n messages.length > 0\n ) {\n break\n }\n\n messages.unshift(msg)\n tokenCount += msgTokens\n }\n\n return messages\n }\n\n // -----------------------------------------------------------------------\n // Token Estimation\n // -----------------------------------------------------------------------\n\n /** Estimate total context tokens (recent + state + system overhead). */\n estimateContextTokens(): number {\n const recentTokens = this.getRecentMessages().reduce(\n (sum, m) => sum + m.tokenCount,\n 0,\n )\n const stateContent = this.getCachedRenderedState()\n const stateTokens = stateContent\n ? this.config.tokenEstimator.estimateTokens(stateContent)\n : 0\n const staticTokens = this.staticContext\n ? this.config.tokenEstimator.estimateTokens(this.staticContext)\n : 0\n return recentTokens + stateTokens + staticTokens + this.config.systemPromptOverhead\n }\n\n /** Estimate compressed state tokens. Cached alongside rendered state. */\n estimateStateTokens(): number {\n if (this.stateTokenCountCache !== null) return this.stateTokenCountCache\n const stateContent = this.getCachedRenderedState()\n if (!stateContent) {\n this.stateTokenCountCache = 0\n return 0\n }\n this.stateTokenCountCache = this.config.tokenEstimator.estimateTokens(stateContent)\n return this.stateTokenCountCache\n }\n\n // -----------------------------------------------------------------------\n // State Rendering (cached)\n // -----------------------------------------------------------------------\n\n /** Get rendered state, using cache when valid. */\n protected getCachedRenderedState(): string {\n if (this.renderedStateCache !== null) return this.renderedStateCache\n this.renderedStateCache = this.renderState()\n return this.renderedStateCache\n }\n\n // -----------------------------------------------------------------------\n // Cache Invalidation\n // -----------------------------------------------------------------------\n\n /** Invalidate rendered state cache (call after any state mutation). */\n invalidateStateCache(): void {\n this.renderedStateCache = null\n this.stateTokenCountCache = null\n }\n\n // -----------------------------------------------------------------------\n // Static Context\n // -----------------------------------------------------------------------\n\n /**\n * Set static context (rules/instructions injected once into every\n * buildMessages call). Never compressed or pruned.\n */\n setStaticContext(content: string): void {\n this.staticContext = content\n }\n\n /** Check if static context has been set. */\n hasStaticContext(): boolean {\n return this.staticContext !== null\n }\n\n // -----------------------------------------------------------------------\n // Persistence\n // -----------------------------------------------------------------------\n\n /** Serialize base memory state. Subclasses can extend. */\n serializeBase(): PersistedMemoryData<TState, TMessage> {\n return {\n rawHistory: [...this.rawHistory],\n compressedState: structuredClone(this.compressedState),\n compactionCursor: { ...this.compactionCursor },\n currentTurn: this.currentTurn,\n compactionCount: this.compactionCount,\n }\n }\n\n /** Restore base memory state from persisted data. */\n loadBase(data: PersistedMemoryData<TState, TMessage>): void {\n if (!Array.isArray(data.rawHistory)) {\n throw new Error(\"Invalid rawHistory: must be an array\")\n }\n\n this.rawHistory = data.rawHistory\n this.compressedState = data.compressedState\n this.compactionCursor = {\n lastCompactedTurn:\n typeof data.compactionCursor?.lastCompactedTurn === \"number\"\n ? data.compactionCursor.lastCompactedTurn\n : 0,\n }\n\n const maxTurn = this.rawHistory.reduce(\n (max, m) => Math.max(max, m.turn ?? 0),\n 0,\n )\n this.currentTurn = Math.max(data.currentTurn ?? 0, maxTurn)\n this.compactionCount = data.compactionCount ?? 0\n this.invalidateStateCache()\n }\n\n /**\n * Sanitize raw history messages loaded from persistence.\n *\n * Guards against corrupted or older persisted data by providing safe defaults\n * for all base MemoryMessage fields. Subclasses can extend to handle\n * app-specific fields (e.g. charCount, toolCallId).\n */\n protected sanitizeHistory(\n rawHistory: Array<Partial<TMessage> & Record<string, any>>,\n ): TMessage[] {\n return rawHistory.map((msg, idx) => ({\n ...msg,\n id: msg.id || `recovered_${idx}`,\n role: msg.role || (\"user\" as const),\n content: msg.content ?? \"\",\n turn: typeof msg.turn === \"number\" ? msg.turn : idx,\n timestamp:\n typeof msg.timestamp === \"number\" ? msg.timestamp : Date.now(),\n tokenCount:\n typeof msg.tokenCount === \"number\"\n ? msg.tokenCount\n : this.config.tokenEstimator.estimateTokens(\n msg.content ?? \"\",\n ),\n })) as TMessage[]\n }\n\n /** Reset all state. */\n reset(): void {\n this.rawHistory = []\n this.compressedState = this.createInitialState()\n this.compactionCursor = { lastCompactedTurn: 0 }\n this.currentTurn = 0\n this.compactionCount = 0\n this.lastCompactionAttempt = 0\n this.staticContext = null\n this.invalidateStateCache()\n }\n\n // -----------------------------------------------------------------------\n // Accessors\n // -----------------------------------------------------------------------\n\n getCurrentTurn(): number {\n return this.currentTurn\n }\n\n getCompactionCount(): number {\n return this.compactionCount\n }\n\n getRawHistoryLength(): number {\n return this.rawHistory.length\n }\n\n getRawHistory(): TMessage[] {\n return [...this.rawHistory]\n }\n\n getCompressedState(): TState {\n return structuredClone(this.compressedState)\n }\n\n getCompactionCursor(): CompactionCursor {\n return { ...this.compactionCursor }\n }\n\n getLastMessageRole(): string | null {\n if (this.rawHistory.length === 0) return null\n return this.rawHistory[this.rawHistory.length - 1].role\n }\n\n getLastMessageContent(): string | null {\n if (this.rawHistory.length === 0) return null\n return this.rawHistory[this.rawHistory.length - 1].content\n }\n\n getLastCompactionAttempt(): number {\n return this.lastCompactionAttempt\n }\n\n // -----------------------------------------------------------------------\n // Mutation helpers (used by VoiceAgentService for cancel / merge)\n // -----------------------------------------------------------------------\n\n /**\n * Remove and return the last message from raw history.\n * Useful for cancelling a premature assistant response.\n */\n popLastMessage(): TMessage | undefined {\n return this.rawHistory.pop()\n }\n\n /**\n * Find the last message with the given role, scanning backward.\n */\n getLastMessageByRole(role: string): TMessage | undefined {\n for (let i = this.rawHistory.length - 1; i >= 0; i--) {\n if (this.rawHistory[i].role === role) return this.rawHistory[i]\n }\n return undefined\n }\n\n /**\n * Update the content of the last message matching `role`.\n * Re-estimates token count automatically. Returns `true` if\n * a matching message was found and updated.\n */\n updateLastMessageByRole(role: string, content: string): boolean {\n for (let i = this.rawHistory.length - 1; i >= 0; i--) {\n if (this.rawHistory[i].role === role) {\n this.rawHistory[i] = {\n ...this.rawHistory[i],\n content,\n tokenCount: this.config.tokenEstimator.estimateTokens(content),\n }\n return true\n }\n }\n return false\n }\n}\n","export interface BuildMemoryCompactionPromptOptions {\n persona: string\n currentState: string\n messageBlock: string\n schema: string\n rules: string[]\n}\n\nexport function buildMemoryCompactionPrompt(\n options: BuildMemoryCompactionPromptOptions,\n): string {\n const {\n persona,\n currentState,\n messageBlock,\n schema,\n rules,\n } = options\n\n return `${persona}\n\nCurrent compacted state:\n${currentState || \"(empty — first compaction)\"}\n\nMessages to compact:\n${messageBlock}\n\nReturn a JSON object with exactly these fields:\n${schema}\n\nRules:\n${rules.map((rule) => `- ${rule}`).join(\"\\n\")}`\n}\n","import type {\n CompactionLLMClient,\n MemoryMessage,\n MemoryProvenance,\n} from \"./memory-layer\"\nimport { buildMemoryCompactionPrompt } from \"./memory-compaction-prompts\"\n\nconst MEMORY_PROVENANCE_SOURCES = new Set<MemoryProvenance[\"source\"]>([\n \"rule\",\n \"llm\",\n \"tool\",\n \"assistant\",\n \"user\",\n])\n\nexport interface MemoryMetadataLike {\n provenance: MemoryProvenance\n}\n\nexport interface MemoryEntrySanitizerContext {\n turn: number\n provenance: MemoryProvenance\n}\n\nexport function createMemoryMetadata(provenance: MemoryProvenance): MemoryMetadataLike {\n return { provenance }\n}\n\nexport function buildCompactionEntry<T>(options: {\n text: string\n provenance: MemoryProvenance\n summarize: (text: string) => string\n canonicalize: (text: string) => string\n preprocess?: (text: string) => string\n canonicalizeSource?: (preprocessed: string, normalized: string) => string\n build: (normalized: string, canonical: string, metadata: MemoryMetadataLike) => T\n}): T | null {\n const preprocessed = options.preprocess ? options.preprocess(options.text) : options.text\n const normalized = options.summarize(preprocessed)\n const canonicalSource = options.canonicalizeSource\n ? options.canonicalizeSource(preprocessed, normalized)\n : normalized\n const canonical = options.canonicalize(canonicalSource)\n\n if (!normalized || canonical.length === 0) {\n return null\n }\n\n return options.build(\n normalized,\n canonical,\n createMemoryMetadata(options.provenance),\n )\n}\n\nexport function sanitizeMemoryProvenance(\n value: unknown,\n fallback: MemoryProvenance,\n): MemoryProvenance {\n if (!value || typeof value !== \"object\") {\n return fallback\n }\n\n const candidate = value as Record<string, unknown>\n const source = typeof candidate.source === \"string\" ? candidate.source : undefined\n if (!source || !MEMORY_PROVENANCE_SOURCES.has(source as MemoryProvenance[\"source\"])) {\n return fallback\n }\n\n return {\n source: source as MemoryProvenance[\"source\"],\n detail: typeof candidate.detail === \"string\" ? candidate.detail : fallback.detail,\n }\n}\n\nexport function cleanCompactionText(text: string): string {\n return text.trim().replace(/\\s+/g, \" \").replace(/[.?!:;]+$/, \"\")\n}\n\nexport function canonicalizeCompactionText(\n text: string,\n options?: {\n stopWords?: Iterable<string>\n stripQuotes?: boolean\n },\n): string {\n const stopWords = new Set(Array.from(options?.stopWords ?? [], (word) => word.toLowerCase()))\n const normalized = cleanCompactionText(text)\n .toLowerCase()\n\n const dequoted = options?.stripQuotes === false\n ? normalized\n : normalized.replace(/[\"'`“”‘’]/g, \"\")\n\n return dequoted\n .replace(/[^a-z0-9./:_-]+/g, \" \")\n .split(/\\s+/)\n .filter((token) => token.length > 0 && !stopWords.has(token))\n .join(\" \")\n .trim()\n}\n\nexport function summarizeCompactionText(text: string, max = 160): string {\n const normalized = cleanCompactionText(text)\n if (normalized.length <= max) {\n return normalized\n }\n return normalized.slice(0, max - 1) + \"…\"\n}\n\nexport function splitCompactionCandidates(\n text: string,\n options?: {\n minLength?: number\n },\n): string[] {\n const minLength = options?.minLength ?? 8\n return text\n .split(/\\r?\\n+/)\n .flatMap((line) => line.split(/(?<=[.?!])\\s+/))\n .map((candidate) => cleanCompactionText(candidate))\n .filter((candidate) => candidate.length >= minLength)\n}\n\nexport function selectLatestByKey<T>(\n entries: T[],\n keyOf: (entry: T) => string,\n recencyOf: (entry: T) => number,\n): T[] {\n const latest = new Map<string, T>()\n for (const entry of entries) {\n const key = keyOf(entry)\n const existing = latest.get(key)\n if (!existing || recencyOf(entry) > recencyOf(existing)) {\n latest.set(key, entry)\n }\n }\n\n return Array.from(latest.values()).sort((a, b) => recencyOf(a) - recencyOf(b))\n}\n\nexport function selectLatestMatchingByKey<T>(\n entries: T[],\n options: {\n keyOf: (entry: T) => string\n recencyOf: (entry: T) => number\n include: (entry: T) => boolean\n },\n): T[] {\n return selectLatestByKey(\n entries.filter((entry) => options.include(entry)),\n options.keyOf,\n options.recencyOf,\n )\n}\n\nexport function limitEntriesByRecency<T>(\n entries: T[],\n limit: number,\n recencyOf: (entry: T) => number,\n): T[] {\n if (entries.length <= limit) {\n return entries\n }\n\n return [...entries]\n .sort((a, b) => recencyOf(a) - recencyOf(b))\n .slice(-limit)\n}\n\nexport function formatMemoryMetadataTag(metadata: MemoryMetadataLike): string {\n const detail = metadata.provenance.detail ? `/${metadata.provenance.detail}` : \"\"\n return ` [${metadata.provenance.source}${detail}]`\n}\n\nexport function sanitizeCompactionEntries<T>(\n input: unknown,\n options: {\n fromString?: (value: string) => T | null\n fromObject?: (value: Record<string, unknown>) => T | null\n },\n): T[] {\n if (!Array.isArray(input)) {\n return []\n }\n\n return input.flatMap((value) => {\n if (typeof value === \"string\") {\n const entry = options.fromString?.(value)\n return entry ? [entry] : []\n }\n\n if (!value || typeof value !== \"object\") {\n return []\n }\n\n const entry = options.fromObject?.(value as Record<string, unknown>)\n return entry ? [entry] : []\n })\n}\n\nexport function createEntrySanitizer<T>(options: {\n defaultProvenance: MemoryProvenance\n fromString?: (value: string, context: MemoryEntrySanitizerContext) => T | null\n fromObject: (value: Record<string, unknown>, context: MemoryEntrySanitizerContext) => T | null\n getTurn?: (value: Record<string, unknown>, fallbackTurn: number) => number\n getProvenance?: (value: Record<string, unknown>) => unknown\n}): (input: unknown, fallbackTurn: number, fallbackProvenance?: MemoryProvenance) => T[] {\n return (input, fallbackTurn, fallbackProvenance = options.defaultProvenance) =>\n sanitizeCompactionEntries(input, {\n fromString: options.fromString\n ? (value) => options.fromString!(value, {\n turn: fallbackTurn,\n provenance: fallbackProvenance,\n })\n : undefined,\n fromObject: (value) => options.fromObject(value, {\n turn: options.getTurn?.(value, fallbackTurn)\n ?? (typeof value.turn === \"number\" && Number.isFinite(value.turn)\n ? value.turn\n : fallbackTurn),\n provenance: sanitizeMemoryProvenance(\n options.getProvenance?.(value) ?? value.provenance,\n fallbackProvenance,\n ),\n }),\n })\n}\n\nexport function parseCompactionJsonObject(raw: string): Record<string, unknown> | null {\n try {\n const cleaned = raw.replace(/```json\\n?|```\\n?/gi, \"\").trim()\n const parsed = JSON.parse(cleaned)\n return parsed && typeof parsed === \"object\"\n ? parsed as Record<string, unknown>\n : null\n } catch {\n return null\n }\n}\n\nexport async function runStructuredLLMCompaction<\n TMessage extends MemoryMessage,\n TState,\n>(options: {\n client?: CompactionLLMClient\n currentState: string\n messages: TMessage[]\n formatMessage: (message: TMessage) => string\n persona: string\n schema: string\n rules: string[]\n temperature?: number\n maxTokens?: number\n parseState: (obj: Record<string, unknown>) => TState | null\n}): Promise<TState | null> {\n if (!options.client) {\n return null\n }\n\n const messageBlock = options.messages\n .map((message) => options.formatMessage(message))\n .join(\"\\n\")\n\n const prompt = buildMemoryCompactionPrompt({\n persona: options.persona,\n currentState: options.currentState,\n messageBlock,\n schema: options.schema,\n rules: options.rules,\n })\n\n const result = await options.client.chat({\n messages: [{ role: \"user\", content: prompt }],\n temperature: options.temperature ?? 0.1,\n maxTokens: options.maxTokens ?? 4096,\n stream: false,\n })\n\n const parsed = parseCompactionJsonObject(result.content)\n return parsed ? options.parseState(parsed) : null\n}","/**\n * Shared Agent Memory Layer with Episodic Compaction\n *\n * Extends BaseMemoryLayer with agent-specific compressed state:\n * - Retained notes, constraints, structured evidence, failed attempts\n * - Compaction patterns (shell-line command parsing, tool/result extraction)\n * - Compaction rules (retained-note canonicalization, failure subsuming)\n * - LLM-based compaction with structured prompts\n *\n * Used by both Hammer CLI and Magic browser agents. Consumers configure\n * agent-specific behaviour via AgentMemoryLayerConfig (logger, tool names,\n * token budgets, etc.).\n */\n\nimport {\n BaseMemoryLayer,\n type CompactionLLMClient,\n type MemoryMessage,\n type MemoryProvenance,\n type PersistedMemoryData,\n type TokenEstimator,\n} from \"./memory-layer\"\nimport type { ConversationAdapter } from \"./agent-loop\"\nimport {\n coerceToolCallToDefinition,\n parseStructuredAgentText,\n} from \"./command-response-utils\"\nimport {\n resolveToolDefinitionForInvocation,\n extractPrimaryCommandMetadata,\n formatToolCallAsUnixCommand,\n isBackgroundBashToolCall,\n isBashToolCall,\n} from \"./unix-tooling\"\nimport { parseToolResultMessage } from \"./tool-helpers\"\nimport {\n buildCompactionEntry,\n canonicalizeCompactionText,\n createEntrySanitizer,\n createMemoryMetadata,\n formatMemoryMetadataTag,\n limitEntriesByRecency,\n runStructuredLLMCompaction,\n selectLatestByKey,\n selectLatestMatchingByKey,\n splitCompactionCandidates,\n summarizeCompactionText,\n} from \"./memory-compaction-utils\"\nimport type {\n ToolCall,\n ToolDefinition,\n ToolMemoryCitationKind,\n ToolMemoryEvidenceKind,\n ToolMemoryEvidencePolicy,\n ToolMemoryMetadata,\n ToolMemoryNoteKind,\n ToolMemoryNotePolicy,\n} from \"./types\"\nimport {\n getMaxRetainedNotes,\n getMaxFailedAttempts,\n getMaxCodebaseEvidence,\n getMaxResearchEvidence,\n getMaxConstraints,\n getMaxOpenTasks,\n getMaxResolvedTasks,\n getCompactionLlmTemperature,\n getCompactionLlmMaxTokens,\n} from \"./configure\"\n\n// ============================================================================\n// Data Models\n// ============================================================================\n\nexport interface RawMessage extends MemoryMessage {\n toolCallId?: string\n}\n\nexport interface AgentMemoryCitation {\n kind: ToolMemoryCitationKind\n value: string\n}\n\nexport interface AgentMemoryMetadata {\n provenance: MemoryProvenance\n}\n\nexport interface AgentMemoryNote extends AgentMemoryMetadata {\n summary: string\n category?: string // Stable semantic bucket for canonicalization\n rationale?: string\n kind?: ToolMemoryNoteKind\n citations?: AgentMemoryCitation[]\n turn: number\n}\n\nexport interface AgentMemoryEvidence extends AgentMemoryMetadata {\n summary: string\n kind: ToolMemoryEvidenceKind\n citations?: AgentMemoryCitation[]\n turn: number\n}\n\nexport interface AgentMemoryConstraint extends AgentMemoryMetadata {\n text: string\n canonical: string\n turn: number\n}\n\nexport interface AgentMemoryTask extends AgentMemoryMetadata {\n task: string\n canonical: string\n turn: number\n}\n\nexport interface AgentMemoryResolvedTask extends AgentMemoryMetadata {\n task: string\n canonical: string\n resolvedTurn: number\n}\n\nexport interface AgentMemoryFailedAttempt extends AgentMemoryMetadata {\n approach: string\n reason: string\n canonicalApproach: string\n turn: number\n}\n\nexport type CompressedAgentState = {\n scratchpad?: string // Agent working memory — persists across compactions\n\n retainedNotes: AgentMemoryNote[]\n\n constraints: AgentMemoryConstraint[]\n evidence: AgentMemoryEvidence[]\n\n failedAttempts: AgentMemoryFailedAttempt[]\n\n openTasks: AgentMemoryTask[]\n resolvedTasks: AgentMemoryResolvedTask[]\n\n lastUpdatedTurn: number\n}\n\nexport type MemoryMetrics = {\n totalTurns: number\n totalMessages: number\n compactedTurns: number\n compactionCount: number\n recentWindowSize: number\n protectedContextTokens: number\n compressedStateTokens: number\n estimatedContextTokens: number\n}\n\n// ============================================================================\n// Logger Interface\n// ============================================================================\n\n/** Optional structured logger — avoids coupling to Hammer's `log` import. */\nexport interface AgentMemoryLogger {\n warn(label: string, message: string): void\n}\n\n/** No-op logger used when none is provided. */\nconst nullLogger: AgentMemoryLogger = {\n warn() {},\n}\n\n// ============================================================================\n// Tool-specific Configuration\n// ============================================================================\n\nexport interface ToolMemoryExtractionContext {\n toolName: string\n parsed: Record<string, any>\n toolDefinition?: ToolDefinition\n turn: number\n}\n\n/**\n * Defines how successful tool results should be converted into structured\n * durable memory entries.\n */\nexport interface ToolMemoryExtractor {\n /** Add retained notes derived from successful tool results. */\n extractNotes?(\n context: ToolMemoryExtractionContext,\n ): AgentMemoryNote[]\n /** Add durable evidence entries derived from successful tool results. */\n extractEvidence?(\n context: ToolMemoryExtractionContext,\n ): AgentMemoryEvidence[]\n}\n\nfunction getToolMemoryMetadata(toolDefinition?: ToolDefinition): ToolMemoryMetadata {\n return toolDefinition?.metadata?.memory ?? {}\n}\n\nfunction getToolNotePolicy(\n toolDefinition?: ToolDefinition,\n): ToolMemoryNotePolicy | undefined {\n return getToolMemoryMetadata(toolDefinition).note\n}\n\nfunction getToolEvidencePolicies(\n toolDefinition?: ToolDefinition,\n): ToolMemoryEvidencePolicy[] {\n return getToolMemoryMetadata(toolDefinition).evidence ?? []\n}\n\nfunction isSignificantToolDefinition(toolDefinition?: ToolDefinition): boolean {\n const note = getToolNotePolicy(toolDefinition)\n return !!note && note.scope !== \"none\"\n}\n\nfunction resolveToolDefinition(\n toolName: string,\n toolDefinitions: ToolDefinition[],\n): ToolDefinition | undefined {\n return resolveToolDefinitionForInvocation(toolDefinitions, toolName)\n}\n\nconst MEMORY_NOTE_KIND_VALUES = new Set<ToolMemoryNoteKind>([\n \"workflow\",\n \"operation\",\n \"change\",\n])\nconst MEMORY_EVIDENCE_KIND_VALUES = new Set<ToolMemoryEvidenceKind>([\n \"codebase\",\n \"research\",\n])\nconst MEMORY_CITATION_KIND_VALUES = new Set<ToolMemoryCitationKind>([\n \"path\",\n \"query\",\n \"url\",\n \"command\",\n])\nconst CANONICAL_STOP_WORDS = new Set([\n \"a\",\n \"an\",\n \"the\",\n \"that\",\n \"this\",\n \"these\",\n \"those\",\n \"please\",\n \"kindly\",\n \"really\",\n \"very\",\n \"just\",\n \"to\",\n \"for\",\n \"our\",\n \"your\",\n \"my\",\n \"me\",\n \"we\",\n \"you\",\n \"and\",\n])\n\nfunction stripSentenceDecorators(text: string): string {\n return text\n .replace(/^[\\s\\-•*\\d.)]+/, \"\")\n .replace(/[.?!:;]+$/, \"\")\n .trim()\n}\n\nfunction canonicalizeText(text: string): string {\n return canonicalizeCompactionText(stripSentenceDecorators(text), {\n stopWords: CANONICAL_STOP_WORDS,\n })\n}\n\nfunction summarizeSentence(text: string, max = 160): string {\n return summarizeCompactionText(stripSentenceDecorators(text), max)\n}\n\nfunction splitTextIntoCandidates(text: string): string[] {\n return splitCompactionCandidates(text, { minLength: 12 })\n .map((part) => stripSentenceDecorators(part))\n .filter((part) => part.length >= 12)\n}\n\nfunction buildConstraintEntry(\n text: string,\n turn: number,\n provenance: MemoryProvenance,\n): AgentMemoryConstraint | null {\n return buildCompactionEntry({\n text,\n provenance,\n preprocess: (value) => value.replace(/^(?:constraint|constraints):\\s*/i, \"\"),\n summarize: summarizeSentence,\n canonicalize: canonicalizeText,\n canonicalizeSource: (preprocessed) => preprocessed.replace(\n /^(?:please\\s+)?(?:we\\s+|you\\s+)?(?:must|should|need(?:s)? to|required to|avoid|keep|do not|don't|never|without)\\s+/i,\n \"\",\n ),\n build: (displayText, canonical, metadata) => ({\n text: displayText,\n canonical,\n turn,\n ...metadata,\n }),\n })\n}\n\nfunction buildTaskEntry(\n text: string,\n turn: number,\n provenance: MemoryProvenance,\n): AgentMemoryTask | null {\n return buildCompactionEntry({\n text,\n provenance,\n preprocess: (value) => value\n .replace(/^(?:task|todo|next step|next|remaining):\\s*/i, \"\")\n .replace(/^(?:please\\s+)?(?:can you|could you|need to|we need to|let'?s)\\s+/i, \"\"),\n summarize: summarizeSentence,\n canonicalize: canonicalizeText,\n build: (normalized, canonical, metadata) => ({\n task: normalized,\n canonical,\n turn,\n ...metadata,\n }),\n })\n}\n\nfunction buildResolvedTaskEntry(\n text: string,\n resolvedTurn: number,\n provenance: MemoryProvenance,\n): AgentMemoryResolvedTask | null {\n return buildCompactionEntry({\n text,\n provenance,\n summarize: summarizeSentence,\n canonicalize: canonicalizeText,\n build: (task, canonical, metadata) => ({\n task,\n canonical,\n resolvedTurn,\n ...metadata,\n }),\n })\n}\n\nfunction buildFailedAttemptEntry(\n approach: string,\n reason: string,\n turn: number,\n provenance: MemoryProvenance,\n): AgentMemoryFailedAttempt | null {\n const normalizedApproach = summarizeSentence(approach, 120)\n const normalizedReason = summarizeSentence(reason, 200)\n const canonicalApproach = canonicalizeText(normalizedApproach)\n if (!normalizedApproach || !normalizedReason || canonicalApproach.length === 0) {\n return null\n }\n\n return {\n approach: normalizedApproach,\n reason: normalizedReason,\n canonicalApproach,\n turn,\n ...createMemoryMetadata(provenance),\n }\n}\n\nfunction extractConstraintCandidates(text: string): string[] {\n return splitTextIntoCandidates(text).filter((candidate) =>\n /\\b(?:must|should|need(?:s)? to|required to|avoid|keep|do not|don't|never|without)\\b/i.test(candidate),\n )\n}\n\nfunction extractOpenTaskCandidates(text: string, role: RawMessage[\"role\"]): string[] {\n const candidates = splitTextIntoCandidates(text)\n return candidates.filter((candidate) => {\n if (/^(?:todo|task|next step|next|remaining|follow-up):/i.test(candidate)) {\n return true\n }\n if (role === \"user\") {\n return /\\?$/.test(candidate) || /\\b(?:fix|build|add|update|implement|check|verify|investigate|review|compare|explain)\\b/i.test(candidate)\n }\n return /\\b(?:need(?:s)? to|let'?s|next|remaining)\\b/i.test(candidate)\n })\n}\n\nfunction extractResolvedTaskCandidates(text: string): string[] {\n return splitTextIntoCandidates(text).filter((candidate) =>\n /\\b(?:done|fixed|updated|implemented|completed|resolved|finished)\\b/i.test(candidate),\n )\n}\n\nfunction asNonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined\n}\n\nfunction truncateSummary(text: string, max = 200): string {\n const normalized = text.replace(/\\s+/g, \" \").trim()\n if (normalized.length <= max) {\n return normalized\n }\n return normalized.slice(0, max - 1) + \"…\"\n}\n\nfunction summarizeUnknown(value: unknown, max = 200): string | undefined {\n if (typeof value === \"string\") {\n const summary = truncateSummary(value, max)\n return summary.length > 0 ? summary : undefined\n }\n\n if (Array.isArray(value)) {\n const summary = truncateSummary(\n value\n .map((item) =>\n typeof item === \"string\"\n ? item\n : typeof item === \"object\" && item\n ? JSON.stringify(item)\n : String(item),\n )\n .join(\"; \"),\n max,\n )\n return summary.length > 0 ? summary : undefined\n }\n\n if (value && typeof value === \"object\") {\n const summary = truncateSummary(JSON.stringify(value), max)\n return summary.length > 0 ? summary : undefined\n }\n\n return undefined\n}\n\nfunction asRecord(value: unknown): Record<string, any> | undefined {\n return value && typeof value === \"object\"\n ? value as Record<string, any>\n : undefined\n}\n\nfunction parseJsonLikeString(value: unknown): unknown {\n if (typeof value !== \"string\") {\n return value\n }\n\n const trimmed = value.trim()\n if (!trimmed || (!trimmed.startsWith(\"{\") && !trimmed.startsWith(\"[\"))) {\n return value\n }\n\n try {\n return JSON.parse(trimmed)\n } catch {\n return value\n }\n}\n\nfunction extractWebSearchResults(parsed: Record<string, any>): Record<string, any>[] {\n const queue: unknown[] = [parsed, parsed.data, parsed.content, parsed.output]\n const seen = new Set<unknown>()\n\n while (queue.length > 0) {\n const current = parseJsonLikeString(queue.shift())\n if (!current || seen.has(current)) {\n continue\n }\n seen.add(current)\n\n const record = asRecord(current)\n if (!record) {\n continue\n }\n\n if (Array.isArray(record.results)) {\n return record.results.filter(\n (result): result is Record<string, any> => !!result && typeof result === \"object\",\n )\n }\n\n queue.push(record.web, record.data, record.content, record.output)\n }\n\n return []\n}\n\nfunction extractWebSummarySource(parsed: Record<string, any>): unknown {\n for (const candidate of [parsed.content, parsed.data, parsed.output]) {\n if (typeof candidate === \"string\") {\n if (candidate.trim().length > 0) {\n return candidate\n }\n continue\n }\n\n if (candidate !== undefined && candidate !== null) {\n return candidate\n }\n }\n\n for (const candidate of [parsed.output, parsed.content, parsed.data]) {\n const record = asRecord(parseJsonLikeString(candidate))\n if (!record) {\n continue\n }\n\n for (const nested of [record.content, record.data, record.output]) {\n if (typeof nested === \"string\") {\n if (nested.trim().length > 0) {\n return nested\n }\n continue\n }\n\n if (nested !== undefined && nested !== null) {\n return nested\n }\n }\n }\n\n return undefined\n}\n\nconst SHELL_SIGNAL_REGEX = /\\b(pass(?:ed)?|fail(?:ed|ure)?|error|test(?:s)?|assert(?:ion)?|warn(?:ing)?|build(?:ing)?|built|compile(?:d)?|create(?:d)?|update(?:d)?|delete(?:d)?|remove(?:d)?|install(?:ed)?|generate(?:d)?|save(?:d)?|wrote|written|rename(?:d)?|move(?:d)?|cop(?:y|ied)|chang(?:e|ed))\\b/i\nconst SHELL_STATUS_LINE_REGEX = /^(?:[?MADRCU!]{1,2}\\s+|On branch\\b|Changes?(?: not staged)?\\b|nothing to commit\\b|total \\d+\\b|[A-Za-z]:[\\\\/]|\\.{1,2}[\\\\/]|\\/)/\nconst SHELL_FILENAME_REGEX = /\\b(?:package\\.json|bunfig\\.toml|tsconfig(?:\\.[\\w-]+)?\\.json|README\\.md|Dockerfile(?:\\.\\w+)?|[A-Za-z0-9_.-]+\\.(?:ts|tsx|js|jsx|json|md|toml|yml|yaml|sh|py|rs|go|java|c|cpp|h|lock))\\b/i\nconst MAX_SHORT_SHELL_OUTPUT = 800\nconst MAX_MEDIUM_SHELL_OUTPUT = 2000\nconst MAX_COMPACT_SHELL_LINES = 6\n\nfunction hasStructuredShellSignal(text: string): boolean {\n const lines = text\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n\n if (lines.length === 0) {\n return false\n }\n\n if (lines.length <= MAX_COMPACT_SHELL_LINES && text.length <= MAX_MEDIUM_SHELL_OUTPUT) {\n return true\n }\n\n return lines.slice(0, 12).some((line) =>\n SHELL_STATUS_LINE_REGEX.test(line) || SHELL_FILENAME_REGEX.test(line),\n )\n}\n\nfunction summarizeShellStream(value: unknown, max = 220): string | undefined {\n const text = asNonEmptyString(value)\n if (!text) {\n return undefined\n }\n\n if (text.length > MAX_SHORT_SHELL_OUTPUT) {\n const keepLargeOutput = SHELL_SIGNAL_REGEX.test(text)\n || hasStructuredShellSignal(text)\n if (!keepLargeOutput) {\n return undefined\n }\n }\n\n return truncateSummary(text, max)\n}\n\nfunction buildCitation(\n kind: ToolMemoryCitationKind,\n value: string | undefined,\n): AgentMemoryCitation[] {\n return value ? [{ kind, value }] : []\n}\n\nfunction getCitationValue(\n parsed: Record<string, any>,\n kind?: ToolMemoryCitationKind,\n): string | undefined {\n switch (kind) {\n case \"path\":\n return asNonEmptyString(parsed.path)\n case \"query\":\n return asNonEmptyString(parsed.query)\n case \"url\":\n return asNonEmptyString(parsed.url)\n case \"command\":\n return asNonEmptyString(parsed.command)\n default:\n return undefined\n }\n}\n\nfunction formatWebSearchEvidence(parsed: Record<string, any>): string | undefined {\n const query = asNonEmptyString(parsed.query)\n\n const searchResults = extractWebSearchResults(parsed)\n if (searchResults.length > 0) {\n const titles = searchResults\n .map((result) => {\n return asNonEmptyString(result.title)\n ?? asNonEmptyString(result.snippet)\n ?? asNonEmptyString(result.url)\n })\n .filter((title): title is string => !!title)\n if (titles.length > 0) {\n const label = query ? `Search results for \"${query}\"` : \"Search results\"\n return `${label}: ${truncateSummary(titles.slice(0, 3).join(\"; \"))}`\n }\n }\n\n const fallback = summarizeUnknown(extractWebSummarySource(parsed), 220)\n if (!fallback) {\n return undefined\n }\n return query ? `Search results for \"${query}\": ${fallback}` : `Search results: ${fallback}`\n}\n\nfunction formatWebRequestEvidence(parsed: Record<string, any>): string | undefined {\n const url = asNonEmptyString(parsed.url)\n const summary = summarizeUnknown(extractWebSummarySource(parsed), 220)\n if (!summary) {\n return url ? `Fetched ${url}` : undefined\n }\n return url ? `Fetched ${url}: ${summary}` : `Fetched content: ${summary}`\n}\n\nfunction formatShellEvidence(parsed: Record<string, any>): string | undefined {\n const primarySummary = summarizeShellStream(parsed.stdout ?? parsed.output)\n const stderrSummary = summarizeShellStream(parsed.stderr, 140)\n\n if (!primarySummary && !stderrSummary) {\n return undefined\n }\n\n const command = asNonEmptyString(parsed.command)\n const summary = primarySummary && stderrSummary && primarySummary !== stderrSummary\n ? `${primarySummary} [stderr: ${stderrSummary}]`\n : primarySummary ?? `stderr: ${stderrSummary}`\n\n return command\n ? `Shell \"${truncateSummary(command, 80)}\": ${summary}`\n : `Shell output: ${summary}`\n}\n\nfunction buildDefaultEvidenceSummary(\n policy: ToolMemoryEvidencePolicy,\n parsed: Record<string, any>,\n): string | undefined {\n switch (policy.citation) {\n case \"query\":\n return formatWebSearchEvidence(parsed)\n case \"url\":\n return formatWebRequestEvidence(parsed)\n case \"command\":\n return formatShellEvidence(parsed)\n default:\n return undefined\n }\n}\n\nfunction buildEvidenceFromPolicies(\n parsed: Record<string, any>,\n toolDefinition: ToolDefinition | undefined,\n turn: number,\n): AgentMemoryEvidence[] {\n const entries: AgentMemoryEvidence[] = []\n\n for (const policy of getToolEvidencePolicies(toolDefinition)) {\n const summary = buildDefaultEvidenceSummary(policy, parsed)\n if (!summary) {\n continue\n }\n\n entries.push({\n summary,\n kind: policy.kind,\n citations: policy.citation\n ? buildCitation(policy.citation, getCitationValue(parsed, policy.citation))\n : undefined,\n turn,\n provenance: {\n source: \"tool\",\n detail: toolDefinition?.name,\n },\n })\n }\n\n return entries\n}\n\n/**\n * Default tool-memory extractor for Hammer-style tools. Tool definitions carry\n * the policy; this default implementation turns those policies into structured\n * evidence entries.\n */\nexport const DEFAULT_TOOL_MEMORY_EXTRACTOR: ToolMemoryExtractor = {\n extractNotes(): AgentMemoryNote[] {\n return []\n },\n extractEvidence(context: ToolMemoryExtractionContext): AgentMemoryEvidence[] {\n return buildEvidenceFromPolicies(\n context.parsed,\n context.toolDefinition,\n context.turn,\n )\n },\n}\n\nfunction getToolCallTargets(toolCall: {\n name: string\n kind?: ToolCall[\"kind\"]\n parameters?: Record<string, any>\n}, toolDefinitions: ToolDefinition[]): Array<{ name: string; path?: string; command?: string }> {\n const normalizedToolCall = {\n ...toolCall,\n parameters: toolCall.parameters ?? {},\n }\n const unixCommand = formatToolCallAsUnixCommand(normalizedToolCall, toolDefinitions)\n if (unixCommand && isBashToolCall(normalizedToolCall)) {\n const primary = extractPrimaryCommandMetadata(unixCommand)\n return [\n {\n name: \"Bash\",\n path:\n primary.path ??\n normalizedToolCall.parameters.path ??\n normalizedToolCall.parameters.file_path,\n command: primary.command,\n },\n ]\n }\n\n if (unixCommand && isBackgroundBashToolCall(normalizedToolCall)) {\n return [\n {\n name: \"BackgroundBash\",\n path:\n normalizedToolCall.parameters.path ||\n normalizedToolCall.parameters.file_path,\n command: unixCommand,\n },\n ]\n }\n\n return [\n {\n name: normalizedToolCall.name,\n path:\n normalizedToolCall.parameters.path ||\n normalizedToolCall.parameters.file_path,\n command: normalizedToolCall.parameters.command,\n },\n ]\n}\n\nfunction buildRetainedNoteFromToolCall(\n target: { name: string; path?: string; command?: string },\n toolDefinition: ToolDefinition | undefined,\n turn: number,\n): AgentMemoryNote | null {\n const notePolicy = getToolNotePolicy(toolDefinition)\n if (!notePolicy || notePolicy.scope === \"none\") {\n return null\n }\n\n const canonicalToolName = toolDefinition?.name ?? target.name\n const trimmedPath = asNonEmptyString(target.path)\n const trimmedCommand = asNonEmptyString(target.command)\n\n // Shell invocations are canonicalized by command because they do not have a\n // stable file path target the way file-oriented tools do.\n const summary = canonicalToolName === \"Bash\" || canonicalToolName === \"BackgroundBash\"\n ? `bash: ${truncateSummary(trimmedCommand ?? canonicalToolName, 80)}`\n : trimmedCommand\n ? `${canonicalToolName}: ${truncateSummary(trimmedCommand, 80)}`\n : trimmedPath\n ? `${canonicalToolName}: ${trimmedPath}`\n : canonicalToolName\n\n const citations = canonicalToolName === \"Bash\" || canonicalToolName === \"BackgroundBash\"\n ? buildCitation(\"command\", trimmedCommand)\n : trimmedPath\n ? buildCitation(\"path\", trimmedPath)\n : buildCitation(\"command\", trimmedCommand)\n\n return {\n summary,\n category: `tool_${canonicalToolName}`,\n kind: notePolicy.kind,\n citations: citations.length > 0 ? citations : undefined,\n turn,\n provenance: {\n source: \"assistant\",\n detail: canonicalToolName,\n },\n }\n}\n\nfunction createRetainedNoteKey(note: AgentMemoryNote): string {\n // Categories let compaction collapse superseded notes even when the summary\n // text changes, e.g. framework choices or repeated tool operations.\n return (\n note.category\n ?? note.summary\n .toLowerCase()\n .split(/\\s+/)\n .slice(0, 3)\n .join(\"_\")\n )\n}\n\nfunction createEvidenceKey(entry: AgentMemoryEvidence): string {\n const citationKey = entry.citations\n ?.map((citation) => `${citation.kind}:${citation.value}`)\n .sort()\n .join(\"|\")\n\n return [\n entry.kind,\n citationKey ?? entry.summary.toLowerCase(),\n ].join(\"::\")\n}\n\nfunction formatCitations(citations?: AgentMemoryCitation[]): string {\n if (!citations || citations.length === 0) {\n return \"\"\n }\n\n return ` [${citations.map((citation) => `${citation.kind}: ${truncateSummary(citation.value, 80)}`).join(\"; \")}]`\n}\n\nconst PERSISTED_RULE_PROVENANCE: MemoryProvenance = { source: \"rule\", detail: \"persisted\" }\nconst PERSISTED_TOOL_PROVENANCE: MemoryProvenance = { source: \"tool\", detail: \"persisted\" }\n\nconst sanitizeConstraintEntries = createEntrySanitizer<AgentMemoryConstraint>({\n defaultProvenance: PERSISTED_RULE_PROVENANCE,\n fromString: (value, context) => buildConstraintEntry(value, context.turn, context.provenance),\n fromObject: (constraint, context) => buildConstraintEntry(\n asNonEmptyString(constraint.text) ?? \"\",\n context.turn,\n context.provenance,\n ),\n})\n\nconst sanitizeTaskEntries = createEntrySanitizer<AgentMemoryTask>({\n defaultProvenance: PERSISTED_RULE_PROVENANCE,\n fromString: (value, context) => buildTaskEntry(value, context.turn, context.provenance),\n fromObject: (task, context) => buildTaskEntry(\n asNonEmptyString(task.task) ?? \"\",\n context.turn,\n context.provenance,\n ),\n})\n\nconst sanitizeResolvedTasks = createEntrySanitizer<AgentMemoryResolvedTask>({\n defaultProvenance: PERSISTED_RULE_PROVENANCE,\n fromObject: (entry, context) => buildResolvedTaskEntry(\n asNonEmptyString(entry.task) ?? \"\",\n context.turn,\n context.provenance,\n ),\n getTurn: (entry, fallbackTurn) =>\n typeof entry.resolvedTurn === \"number\" && Number.isFinite(entry.resolvedTurn)\n ? entry.resolvedTurn\n : fallbackTurn,\n})\n\nconst sanitizeRetainedNotes = createEntrySanitizer<AgentMemoryNote>({\n defaultProvenance: PERSISTED_RULE_PROVENANCE,\n fromObject: (note, context) => {\n const summary = asNonEmptyString(note.summary)\n if (!summary) {\n return null\n }\n\n const kind = asNonEmptyString(note.kind)\n return {\n summary,\n category: asNonEmptyString(note.category),\n rationale: asNonEmptyString(note.rationale),\n kind: kind && MEMORY_NOTE_KIND_VALUES.has(kind as ToolMemoryNoteKind)\n ? kind as ToolMemoryNoteKind\n : undefined,\n citations: sanitizeCitations(note.citations),\n turn: context.turn,\n provenance: context.provenance,\n }\n },\n})\n\nconst sanitizeEvidenceEntries = createEntrySanitizer<AgentMemoryEvidence>({\n defaultProvenance: PERSISTED_TOOL_PROVENANCE,\n fromObject: (entry, context) => {\n const summary = asNonEmptyString(entry.summary)\n const kind = asNonEmptyString(entry.kind)\n\n if (!summary || !kind) {\n return null\n }\n if (!MEMORY_EVIDENCE_KIND_VALUES.has(kind as ToolMemoryEvidenceKind)) {\n return null\n }\n\n return {\n summary,\n kind: kind as ToolMemoryEvidenceKind,\n citations: sanitizeCitations(entry.citations),\n turn: context.turn,\n provenance: context.provenance,\n }\n },\n})\n\nconst sanitizeFailedAttempts = createEntrySanitizer<AgentMemoryFailedAttempt>({\n defaultProvenance: PERSISTED_TOOL_PROVENANCE,\n fromObject: (entry, context) => {\n const approach = asNonEmptyString(entry.approach)\n const reason = asNonEmptyString(entry.reason)\n\n if (!approach || !reason) {\n return null\n }\n\n return buildFailedAttemptEntry(\n approach,\n reason,\n context.turn,\n context.provenance,\n )\n },\n getTurn: (entry) =>\n typeof entry.turn === \"number\" && Number.isFinite(entry.turn)\n ? entry.turn\n : 0,\n})\n\nfunction sanitizeCitations(input: unknown): AgentMemoryCitation[] {\n if (!Array.isArray(input)) {\n return []\n }\n\n return input.flatMap((value) => {\n if (!value || typeof value !== \"object\") {\n return []\n }\n\n const citation = value as Record<string, unknown>\n const kind = asNonEmptyString(citation.kind)\n const text = asNonEmptyString(citation.value)\n\n if (!kind || !text || !MEMORY_CITATION_KIND_VALUES.has(kind as ToolMemoryCitationKind)) {\n return []\n }\n\n return [{ kind: kind as ToolMemoryCitationKind, value: text }]\n })\n}\n\n// ============================================================================\n// Agent Memory Layer Config\n// ============================================================================\n\nexport interface AgentMemoryLayerConfig {\n /** Token threshold that triggers compaction. */\n compactionTokenThreshold: number\n /** Tokens reserved for recent uncompressed messages. */\n protectedContextTokens: number\n /** Token budget for the rendered compressed state block. */\n stateBudgetTokens: number\n /** Hard cap on raw history entries. */\n maxRawHistory: number\n /** Minimum turns between compaction attempts. */\n compactionDebounceTurns: number\n /** Token estimate for the system prompt. */\n systemPromptOverhead: number\n /** Token estimator implementation. */\n tokenEstimator: TokenEstimator\n /** Optional LLM client for LLM-based compaction. */\n compactionClient?: CompactionLLMClient\n /** Temperature for compaction LLM calls (default: 0.1). */\n compactionTemperature?: number\n /** Max tokens for compaction LLM output (default: 4096). */\n compactionMaxTokens?: number\n /** Registry-backed tool definitions used to classify tool calls during compaction. */\n getToolDefinitions?: () => ToolDefinition[]\n /** Optional tool-memory extractor for converting tool results to state entries. */\n toolMemoryExtractor?: ToolMemoryExtractor\n /** Optional structured logger. */\n logger?: AgentMemoryLogger\n}\n\n// ============================================================================\n// Initial State\n// ============================================================================\n\nfunction createInitialAgentState(): CompressedAgentState {\n return {\n retainedNotes: [],\n constraints: [],\n evidence: [],\n failedAttempts: [],\n openTasks: [],\n resolvedTasks: [],\n lastUpdatedTurn: 0,\n }\n}\n\n// ============================================================================\n// Agent Memory Layer\n// ============================================================================\n\nexport class AgentMemoryLayer extends BaseMemoryLayer<CompressedAgentState, RawMessage> {\n /** Temporary storage for toolCallId during appendMessage. */\n private pendingToolCallId?: string\n\n /** The agent-level config (superset of base MemoryLayerConfig). */\n private readonly agentConfig: Required<\n Pick<AgentMemoryLayerConfig, \"logger\">\n > & {\n getToolDefinitions: () => ToolDefinition[]\n toolMemoryExtractor: ToolMemoryExtractor\n }\n\n constructor(config: AgentMemoryLayerConfig) {\n super(\n {\n compactionTokenThreshold: config.compactionTokenThreshold,\n protectedContextTokens: config.protectedContextTokens,\n stateBudgetTokens: config.stateBudgetTokens,\n maxRawHistory: config.maxRawHistory,\n compactionDebounceTurns: config.compactionDebounceTurns,\n systemPromptOverhead: config.systemPromptOverhead,\n tokenEstimator: config.tokenEstimator,\n compactionClient: config.compactionClient,\n compactionTemperature: config.compactionTemperature ?? getCompactionLlmTemperature(),\n compactionMaxTokens: config.compactionMaxTokens ?? getCompactionLlmMaxTokens(),\n },\n createInitialAgentState(),\n )\n\n this.agentConfig = {\n getToolDefinitions: config.getToolDefinitions ?? (() => []),\n toolMemoryExtractor: config.toolMemoryExtractor ?? DEFAULT_TOOL_MEMORY_EXTRACTOR,\n logger: config.logger ?? nullLogger,\n }\n }\n\n // -----------------------------------------------------------------------\n // Override: appendMessage (preserves toolCallId support)\n // -----------------------------------------------------------------------\n\n /**\n * Append a message to raw history.\n * Extends the base signature with an optional toolCallId.\n */\n override appendMessage(\n role: \"system\" | \"user\" | \"assistant\" | \"tool\",\n content: string,\n ): string\n override appendMessage(\n role: \"system\" | \"user\" | \"assistant\" | \"tool\",\n content: string,\n toolCallId: string | undefined,\n ): string\n override appendMessage(message: {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\"\n content: string\n toolCallId?: string\n }): string\n override appendMessage(\n roleOrMessage:\n | \"system\"\n | \"user\"\n | \"assistant\"\n | \"tool\"\n | {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\"\n content: string\n toolCallId?: string\n },\n content?: string,\n toolCallId?: string,\n ): string {\n const message =\n typeof roleOrMessage === \"object\"\n ? roleOrMessage\n : {\n role: roleOrMessage,\n content: content!,\n toolCallId,\n }\n\n this.pendingToolCallId = message.toolCallId\n const id = super.appendMessage(message.role, message.content)\n this.pendingToolCallId = undefined\n return id\n }\n\n // -----------------------------------------------------------------------\n // Abstract Implementation\n // -----------------------------------------------------------------------\n\n protected createMessage(\n id: string,\n role: \"system\" | \"user\" | \"assistant\" | \"tool\",\n content: string,\n turn: number,\n timestamp: number,\n ): RawMessage {\n return {\n id,\n role,\n content,\n timestamp,\n turn,\n tokenCount: this.config.tokenEstimator.estimateTokens(content),\n ...(this.pendingToolCallId && { toolCallId: this.pendingToolCallId }),\n }\n }\n\n protected performCompaction(messages: RawMessage[]): void {\n const { getToolDefinitions, toolMemoryExtractor } = this.agentConfig\n const toolDefinitions = getToolDefinitions()\n\n for (const msg of messages) {\n if (msg.role === \"user\") {\n for (const candidate of extractConstraintCandidates(msg.content)) {\n const constraint = buildConstraintEntry(\n candidate,\n msg.turn,\n { source: \"user\", detail: \"message\" },\n )\n if (constraint) {\n this.compressedState.constraints.push(constraint)\n }\n }\n\n for (const candidate of extractOpenTaskCandidates(msg.content, msg.role)) {\n const task = buildTaskEntry(\n candidate,\n msg.turn,\n { source: \"user\", detail: \"message\" },\n )\n if (task) {\n this.compressedState.openTasks.push(task)\n }\n }\n }\n\n if (msg.role === \"assistant\") {\n const retainedNoteMatches = msg.content.matchAll(\n /\\[RETAINED_NOTE\\]\\s*([\\s\\S]+?)(?=\\n\\[|$)/g,\n )\n for (const retainedNoteMatch of retainedNoteMatches) {\n const summary = retainedNoteMatch[1]?.trim()\n if (!summary) {\n continue\n }\n\n this.compressedState.retainedNotes.push({\n summary,\n kind: \"workflow\",\n turn: msg.turn,\n provenance: { source: \"assistant\", detail: \"retained_note\" },\n })\n }\n\n const parsed = this.extractStructuredResponse(msg.content)\n if (parsed) {\n const selectedToolCall = coerceToolCallToDefinition(\n parsed.selectedToolCall,\n toolDefinitions,\n )\n\n if (parsed.reasoning && selectedToolCall) {\n for (const target of getToolCallTargets(selectedToolCall, toolDefinitions)) {\n const toolDefinition = resolveToolDefinition(\n target.name,\n toolDefinitions,\n )\n if (!isSignificantToolDefinition(toolDefinition)) {\n continue\n }\n\n const note = buildRetainedNoteFromToolCall(\n target,\n toolDefinition,\n msg.turn,\n )\n if (note) {\n this.compressedState.retainedNotes.push(note)\n }\n }\n }\n\n // Extract scratchpad (latest overwrites previous)\n if (parsed.scratchpad && typeof parsed.scratchpad === \"string\") {\n this.compressedState.scratchpad = parsed.scratchpad\n }\n\n const assistantContext = [parsed.reasoning, parsed.outcome, parsed.scratchpad]\n .filter((part): part is string => typeof part === \"string\" && part.trim().length > 0)\n .join(\"\\n\")\n\n for (const candidate of extractConstraintCandidates(assistantContext)) {\n const constraint = buildConstraintEntry(\n candidate,\n msg.turn,\n { source: \"assistant\", detail: \"structured_response\" },\n )\n if (constraint) {\n this.compressedState.constraints.push(constraint)\n }\n }\n\n for (const candidate of extractOpenTaskCandidates(assistantContext, msg.role)) {\n const task = buildTaskEntry(\n candidate,\n msg.turn,\n { source: \"assistant\", detail: \"structured_response\" },\n )\n if (task) {\n this.compressedState.openTasks.push(task)\n }\n }\n\n for (const candidate of extractResolvedTaskCandidates(assistantContext)) {\n const resolved = buildResolvedTaskEntry(\n candidate,\n msg.turn,\n { source: \"assistant\", detail: \"structured_response\" },\n )\n if (resolved) {\n this.compressedState.resolvedTasks.push(resolved)\n }\n }\n }\n }\n\n if (msg.role === \"tool\" && msg.toolCallId) {\n const toolInfo = this.parseToolResponse(msg.content)\n\n if (!toolInfo.success && toolInfo.toolName) {\n const failedAttempt = buildFailedAttemptEntry(\n toolInfo.toolName,\n (toolInfo.error || \"Unknown error\").substring(0, 200),\n msg.turn,\n { source: \"tool\", detail: toolInfo.toolName },\n )\n if (failedAttempt) {\n this.compressedState.failedAttempts.push(failedAttempt)\n }\n } else if (toolInfo.success && toolInfo.toolName) {\n if (toolInfo.parsed) {\n const toolDefinition = resolveToolDefinition(\n toolInfo.toolName,\n toolDefinitions,\n )\n const extractionContext: ToolMemoryExtractionContext = {\n toolName: toolInfo.toolName,\n parsed: toolInfo.parsed,\n toolDefinition,\n turn: msg.turn,\n }\n this.compressedState.retainedNotes.push(\n ...sanitizeRetainedNotes(\n toolMemoryExtractor.extractNotes?.(extractionContext) ?? [],\n msg.turn,\n ),\n )\n this.compressedState.evidence.push(\n ...sanitizeEvidenceEntries(\n toolMemoryExtractor.extractEvidence?.(extractionContext) ?? [],\n msg.turn,\n ),\n )\n }\n }\n }\n }\n\n this.compressedState.lastUpdatedTurn = this.currentTurn\n this.finalizeCompactedState()\n }\n\n protected override async performLLMCompaction(messages: RawMessage[]): Promise<boolean> {\n const parsed = await runStructuredLLMCompaction({\n client: this.config.compactionClient,\n currentState: this.renderState(),\n messages,\n formatMessage: (message) => {\n const prefix = message.toolCallId\n ? `[${message.role} tool=${message.toolCallId} turn=${message.turn}]`\n : `[${message.role} turn=${message.turn}]`\n const content = message.content.length > 2000\n ? message.content.slice(0, 1997) + \"…\"\n : message.content\n return `${prefix} ${content}`\n },\n persona: \"You are an agent memory compactor for a coding assistant. Given the conversation messages and current compacted state, produce an UPDATED compacted state as JSON.\",\n schema: '{\"scratchpad\":\"string or null — working memory notes\",\"retainedNotes\":[{\"summary\":\"string\",\"category\":\"string or null\",\"rationale\":\"string or null\",\"kind\":\"workflow|operation|change or null\",\"citations\":[{\"kind\":\"path|query|url|command\",\"value\":\"string\"}],\"turn\":number,\"provenance\":{\"source\":\"rule|llm|tool|assistant|user\",\"detail\":\"string or null\"}}],\"constraints\":[{\"text\":\"string\",\"canonical\":\"string\",\"turn\":number,\"provenance\":{\"source\":\"rule|llm|tool|assistant|user\",\"detail\":\"string or null\"}}],\"evidence\":[{\"summary\":\"string\",\"kind\":\"codebase|research\",\"citations\":[{\"kind\":\"path|query|url|command\",\"value\":\"string\"}],\"turn\":number,\"provenance\":{\"source\":\"rule|llm|tool|assistant|user\",\"detail\":\"string or null\"}}],\"failedAttempts\":[{\"approach\":\"string\",\"reason\":\"string\",\"canonicalApproach\":\"string\",\"turn\":number,\"provenance\":{\"source\":\"rule|llm|tool|assistant|user\",\"detail\":\"string or null\"}}],\"openTasks\":[{\"task\":\"string\",\"canonical\":\"string\",\"turn\":number,\"provenance\":{\"source\":\"rule|llm|tool|assistant|user\",\"detail\":\"string or null\"}}],\"resolvedTasks\":[{\"task\":\"string\",\"canonical\":\"string\",\"resolvedTurn\":number,\"provenance\":{\"source\":\"rule|llm|tool|assistant|user\",\"detail\":\"string or null\"}}]}',\n rules: [\n \"Merge new information with existing state — preserve existing entries unless superseded\",\n 'For retained notes, keep categories stable for repeated tool operations (e.g. \"tool_Bash\" or \"tool_WebSearch\")',\n \"Preserve citations when available\",\n \"Keep evidence specific and attributable; prefer one latest entry per evidence kind and citation, or per evidence kind and summary when uncited\",\n \"Keep failed attempts for learning — only drop if clearly superseded by a later success\",\n \"Normalize constraints and tasks into stable canonical strings so duplicates merge even when wording differs\",\n \"Preserve the scratchpad if present\",\n \"Return ONLY valid JSON — no markdown fences, no commentary\",\n ],\n temperature: this.config.compactionTemperature,\n maxTokens: this.config.compactionMaxTokens,\n parseState: (obj) => this.parseLLMCompactionObject(obj),\n })\n if (parsed) {\n this.compressedState = parsed\n this.finalizeCompactedState()\n return true\n }\n return false\n }\n\n private parseLLMCompactionObject(obj: Record<string, unknown>): CompressedAgentState | null {\n return {\n scratchpad: typeof obj.scratchpad === \"string\" ? obj.scratchpad : this.compressedState.scratchpad,\n retainedNotes: sanitizeRetainedNotes(obj.retainedNotes, this.currentTurn, { source: \"llm\", detail: \"compaction\" }),\n constraints: sanitizeConstraintEntries(obj.constraints, this.currentTurn, { source: \"llm\", detail: \"compaction\" }),\n evidence: sanitizeEvidenceEntries(obj.evidence, this.currentTurn, { source: \"llm\", detail: \"compaction\" }),\n failedAttempts: sanitizeFailedAttempts(obj.failedAttempts, this.currentTurn, { source: \"llm\", detail: \"compaction\" }),\n openTasks: sanitizeTaskEntries(obj.openTasks, this.currentTurn, { source: \"llm\", detail: \"compaction\" }),\n resolvedTasks: sanitizeResolvedTasks(obj.resolvedTasks, this.currentTurn, { source: \"llm\", detail: \"compaction\" }),\n lastUpdatedTurn: this.currentTurn,\n }\n }\n\n private finalizeCompactedState(): void {\n this.compressedState.retainedNotes = selectLatestByKey(\n this.compressedState.retainedNotes,\n createRetainedNoteKey,\n (retainedNote) => retainedNote.turn,\n )\n\n this.compressedState.evidence = selectLatestByKey(\n this.compressedState.evidence,\n createEvidenceKey,\n (entry) => entry.turn,\n )\n\n this.compressedState.resolvedTasks = selectLatestMatchingByKey(\n this.compressedState.resolvedTasks,\n {\n keyOf: (task) => task.canonical,\n recencyOf: (task) => task.resolvedTurn,\n include: (task) => this.currentTurn - task.resolvedTurn < 20,\n },\n )\n\n this.compressedState.failedAttempts =\n this.compressedState.failedAttempts.filter(\n (fa) => this.currentTurn - fa.turn < 30,\n )\n\n this.compressedState.constraints = selectLatestByKey(\n this.compressedState.constraints,\n (constraint) => constraint.canonical,\n (constraint) => constraint.turn,\n )\n\n this.compressedState.openTasks = selectLatestMatchingByKey(\n this.compressedState.openTasks,\n {\n keyOf: (task) => task.canonical,\n recencyOf: (task) => task.turn,\n include: (task) => !this.compressedState.resolvedTasks.some(\n (resolved) => resolved.canonical === task.canonical,\n ),\n },\n )\n\n const MIN_APPROACH_LENGTH_FOR_MATCH = 15\n const retainedNoteTexts = this.compressedState.retainedNotes.map((t) =>\n canonicalizeText(t.summary),\n )\n this.compressedState.failedAttempts =\n this.compressedState.failedAttempts.filter((attempt) => {\n const approach = attempt.canonicalApproach\n if (approach.length < MIN_APPROACH_LENGTH_FOR_MATCH) return true\n return !retainedNoteTexts.some((summary) => summary.includes(approach))\n })\n\n this.compressedState.retainedNotes = limitEntriesByRecency(\n this.compressedState.retainedNotes,\n getMaxRetainedNotes(),\n (retainedNote) => retainedNote.turn,\n )\n this.compressedState.failedAttempts = limitEntriesByRecency(\n this.compressedState.failedAttempts,\n getMaxFailedAttempts(),\n (failedAttempt) => failedAttempt.turn,\n )\n const codebaseEvidence = limitEntriesByRecency(\n this.compressedState.evidence.filter((entry) => entry.kind === \"codebase\"),\n getMaxCodebaseEvidence(),\n (entry) => entry.turn,\n )\n const researchEvidence = limitEntriesByRecency(\n this.compressedState.evidence.filter((entry) => entry.kind === \"research\"),\n getMaxResearchEvidence(),\n (entry) => entry.turn,\n )\n this.compressedState.evidence = [...codebaseEvidence, ...researchEvidence]\n .sort((a, b) => a.turn - b.turn)\n if (this.compressedState.constraints.length > getMaxConstraints()) {\n this.compressedState.constraints =\n this.compressedState.constraints.slice(-getMaxConstraints())\n }\n if (this.compressedState.openTasks.length > getMaxOpenTasks()) {\n this.compressedState.openTasks =\n this.compressedState.openTasks.slice(-getMaxOpenTasks())\n }\n if (this.compressedState.resolvedTasks.length > getMaxResolvedTasks()) {\n this.compressedState.resolvedTasks =\n this.compressedState.resolvedTasks.slice(-getMaxResolvedTasks())\n }\n }\n\n protected renderState(): string {\n const parts: string[] = []\n\n if (this.compressedState.scratchpad) {\n parts.push(\n `**Scratchpad (Working Memory)**:\\n${this.compressedState.scratchpad}`,\n )\n }\n\n if (this.compressedState.retainedNotes.length > 0) {\n const retainedNotes = this.compressedState.retainedNotes\n .map(\n (retainedNote) =>\n `- [Turn ${retainedNote.turn}] ${retainedNote.summary}${\n retainedNote.rationale ? ` (${retainedNote.rationale})` : \"\"\n }${formatCitations(retainedNote.citations)}${formatMemoryMetadataTag(retainedNote)}`,\n )\n .join(\"\\n\")\n parts.push(`**Retained Notes**:\\n${retainedNotes}`)\n }\n\n if (this.compressedState.constraints.length > 0) {\n parts.push(\n `**Constraints**:\\n${this.compressedState.constraints\n .map((constraint) => `- [Turn ${constraint.turn}] ${constraint.text}${formatMemoryMetadataTag(constraint)}`)\n .join(\"\\n\")}`,\n )\n }\n\n const codebaseEvidence = this.compressedState.evidence.filter(\n (entry) => entry.kind === \"codebase\",\n )\n if (codebaseEvidence.length > 0) {\n parts.push(\n `**Codebase Evidence**:\\n${codebaseEvidence\n .map(\n (entry) =>\n `- [Turn ${entry.turn}] ${entry.summary}${formatCitations(entry.citations)}${formatMemoryMetadataTag(entry)}`,\n )\n .join(\"\\n\")}`,\n )\n }\n\n const researchEvidence = this.compressedState.evidence.filter(\n (entry) => entry.kind === \"research\",\n )\n if (researchEvidence.length > 0) {\n parts.push(\n `**Research Evidence**:\\n${researchEvidence\n .map(\n (entry) =>\n `- [Turn ${entry.turn}] ${entry.summary}${formatCitations(entry.citations)}${formatMemoryMetadataTag(entry)}`,\n )\n .join(\"\\n\")}`,\n )\n }\n\n if (this.compressedState.failedAttempts.length > 0) {\n const failures = this.compressedState.failedAttempts\n .map((f) => `- [Turn ${f.turn}] ${f.approach}: ${f.reason}${formatMemoryMetadataTag(f)}`)\n .join(\"\\n\")\n parts.push(`**Failed Attempts**:\\n${failures}`)\n }\n\n if (this.compressedState.openTasks.length > 0) {\n parts.push(\n `**Open Tasks**:\\n${this.compressedState.openTasks\n .map((task) => `- [Turn ${task.turn}] ${task.task}${formatMemoryMetadataTag(task)}`)\n .join(\"\\n\")}`,\n )\n }\n\n if (this.compressedState.resolvedTasks.length > 0) {\n const resolved = this.compressedState.resolvedTasks\n .map((rt) => `${rt.task} (turn ${rt.resolvedTurn})${formatMemoryMetadataTag(rt)}`)\n .join(\", \")\n parts.push(`**Recently Resolved**: ${resolved}`)\n }\n\n return parts.join(\"\\n\\n\")\n }\n\n protected override createInitialState(): CompressedAgentState {\n return createInitialAgentState()\n }\n\n protected override getStateLabel(): string {\n return \"Agent State (Durable Beliefs)\"\n }\n\n protected override getResumePlaceholder(): string {\n return \"Continue working on the task.\"\n }\n\n override reset(): void {\n super.reset()\n this.pendingToolCallId = undefined\n }\n\n /**\n * Get comprehensive metrics for monitoring and observability\n */\n getMetrics(): MemoryMetrics {\n const recentMessages = this.getRecentMessages()\n const protectedTokens = recentMessages.reduce(\n (sum, msg) => sum + msg.tokenCount,\n 0,\n )\n\n return {\n totalTurns: this.currentTurn,\n totalMessages: this.rawHistory.length,\n compactedTurns: this.compactionCursor.lastCompactedTurn,\n compactionCount: this.compactionCount,\n recentWindowSize: recentMessages.length,\n protectedContextTokens: protectedTokens,\n compressedStateTokens: this.estimateStateTokens(),\n estimatedContextTokens: this.estimateContextTokens(),\n }\n }\n\n /**\n * Create a ConversationAdapter backed by this memory layer.\n *\n * Eliminates boilerplate glue code that both Magic and Hammer\n * previously duplicated when wiring AgentLoop.\n */\n toConversationAdapter(): ConversationAdapter {\n return {\n appendMessage: async (role, content) => {\n this.appendMessage(role, content)\n },\n appendToolMessage: async (content, toolCallId) => {\n this.appendMessage(\"tool\", content, toolCallId)\n },\n getLastMessageRole: () => this.getLastMessageRole() ?? undefined,\n getLastMessageContent: () => this.getLastMessageContent() ?? undefined,\n triggerCompactionIfNeeded: () => this.triggerCompactionIfNeeded(),\n }\n }\n\n /**\n * Free token estimator resources.\n * Call when the memory layer is no longer needed to prevent memory leaks.\n */\n dispose(): void {\n this.config.tokenEstimator.dispose?.()\n }\n\n /**\n * Serialize full agent memory state for persistence.\n * Combines base fields with agent-specific state.\n */\n serialize(): PersistedMemoryData<CompressedAgentState, RawMessage> & {\n lastCompactionAttempt: number\n } {\n return {\n ...this.serializeBase(),\n lastCompactionAttempt: this.lastCompactionAttempt,\n }\n }\n\n /**\n * Load from persisted data with comprehensive validation.\n * Ensures all fields have valid structure and reasonable defaults.\n */\n loadFromPersisted(data: {\n rawHistory: RawMessage[]\n compressedState: any\n compactionCursor: { lastCompactedTurn: number }\n currentTurn: number\n lastCompactionAttempt?: number\n compactionCount?: number\n }): void {\n if (!Array.isArray(data.rawHistory)) {\n throw new Error(\"Invalid rawHistory: must be an array\")\n }\n\n // Sanitize base fields via shared sanitizeHistory\n const sanitizedHistory = this.sanitizeHistory(data.rawHistory)\n\n // Validate and sanitize compressedState\n const cs = data.compressedState\n const sanitizedState: CompressedAgentState = {\n scratchpad: cs?.scratchpad,\n retainedNotes: sanitizeRetainedNotes(cs?.retainedNotes, 0),\n constraints: sanitizeConstraintEntries(cs?.constraints, 0),\n evidence: sanitizeEvidenceEntries(cs?.evidence, 0),\n failedAttempts: sanitizeFailedAttempts(cs?.failedAttempts, 0),\n openTasks: sanitizeTaskEntries(cs?.openTasks, 0),\n resolvedTasks: sanitizeResolvedTasks(cs?.resolvedTasks, 0),\n lastUpdatedTurn:\n typeof cs?.lastUpdatedTurn === \"number\" ? cs.lastUpdatedTurn : 0,\n }\n const sanitizedLastCompactionAttempt =\n typeof data.lastCompactionAttempt === \"number\" &&\n Number.isFinite(data.lastCompactionAttempt)\n ? data.lastCompactionAttempt\n : 0\n\n this.loadBase({\n rawHistory: sanitizedHistory,\n compressedState: sanitizedState,\n compactionCursor: data.compactionCursor,\n currentTurn: data.currentTurn,\n compactionCount: data.compactionCount ?? 0,\n })\n\n // Restore agent-specific state\n this.pendingToolCallId = undefined\n this.lastCompactionAttempt = sanitizedLastCompactionAttempt\n }\n\n // -----------------------------------------------------------------------\n // Private Helpers\n // -----------------------------------------------------------------------\n\n /**\n * Extract structured assistant response data from prose plus\n * standalone control segments.\n */\n private extractStructuredResponse(text: string): {\n reasoning?: string\n outcome?: string\n selectedToolCall?: ToolCall\n scratchpad?: string\n } | null {\n const parsed = parseStructuredAgentText(text, { allowTruncated: true })\n if (!parsed) {\n return null\n }\n\n const scratchpadMatch = parsed.prose.match(/(?:^|\\n)Scratchpad:\\s*(.+)$/im)\n\n return {\n reasoning: parsed.prose,\n outcome: parsed.outcome,\n selectedToolCall: parsed.selectedToolCall,\n scratchpad: scratchpadMatch?.[1]?.trim(),\n }\n }\n\n /**\n * Safe parsing of tool response with fallback.\n * Returns structured data instead of string matching.\n */\n private parseToolResponse(content: string): {\n success: boolean\n toolName?: string\n error?: string\n /** The parsed JSON object, if parsing succeeded. */\n parsed?: Record<string, any>\n } {\n return parseToolResultMessage(content)\n }\n}\n","/**\n * Agent Memory Layer Factory — Shared factory for creating pre-configured\n * AgentMemoryLayer instances.\n *\n * Centralizes the shared Hammer/Magic/Monoslides/Monospace memory-layer presets so each\n * agent only provides the small set of overrides it actually owns.\n *\n * Usage:\n * import { createAgentMemoryLayer } from \"./agent-memory-factory\"\n * const memory = createAgentMemoryLayer(\"hammer\", { logger: myLogger })\n * const memory = createAgentMemoryLayer(\"magic\", { toolMemoryExtractor: canvasExtractor })\n */\n\nimport {\n AgentMemoryLayer,\n DEFAULT_TOOL_MEMORY_EXTRACTOR,\n type AgentMemoryLayerConfig,\n type ToolMemoryExtractor,\n type AgentMemoryLogger,\n} from \"./agent-memory-layer\"\nimport { CharTokenEstimator } from \"./memory-layer\"\nimport type { CompactionLLMClient } from \"./memory-layer\"\nimport type { ToolDefinition } from \"./types\"\nimport {\n getCompactionLlmTemperature,\n getCompactionLlmMaxTokens,\n} from \"./configure\"\n\n// ---------------------------------------------------------------------------\n// Preset definitions\n// ---------------------------------------------------------------------------\n\ninterface MemoryPresetConfig {\n compactionTokenThreshold: number\n protectedContextTokens: number\n stateBudgetTokens: number\n maxRawHistory: number\n compactionDebounceTurns: number\n systemPromptOverhead: number\n toolMemoryExtractor: ToolMemoryExtractor\n}\n\n// Default preset values assume a 200k context window (matches MiniMax-M2.7 / qwen3-max).\n// Consumers that use smaller or larger models should pass overrides via createAgentMemoryLayer().\nconst DEFAULT_MAX_CONTEXT_TOKENS = 200_000\nconst SHARED_WORKSPACE_AGENT_MEMORY_PRESET: MemoryPresetConfig = {\n compactionTokenThreshold: Math.floor(DEFAULT_MAX_CONTEXT_TOKENS * 0.75), // 150_000\n protectedContextTokens: Math.floor(DEFAULT_MAX_CONTEXT_TOKENS * 0.30), // 60_000\n stateBudgetTokens: Math.floor(DEFAULT_MAX_CONTEXT_TOKENS * 0.05), // 10_000\n maxRawHistory: 2_000,\n compactionDebounceTurns: 3,\n systemPromptOverhead: 4_000,\n toolMemoryExtractor: DEFAULT_TOOL_MEMORY_EXTRACTOR,\n}\n\nconst PRESETS: Record<string, MemoryPresetConfig> = {\n hammer: SHARED_WORKSPACE_AGENT_MEMORY_PRESET,\n magic: SHARED_WORKSPACE_AGENT_MEMORY_PRESET,\n monoslides: SHARED_WORKSPACE_AGENT_MEMORY_PRESET,\n monospace: SHARED_WORKSPACE_AGENT_MEMORY_PRESET,\n}\n\n// ---------------------------------------------------------------------------\n// Overrides\n// ---------------------------------------------------------------------------\n\nexport interface AgentMemoryFactoryOverrides {\n /** Override the compaction LLM client. */\n compactionClient?: CompactionLLMClient\n /** Override the token estimator (default: CharTokenEstimator for browser safety). */\n tokenEstimator?: AgentMemoryLayerConfig[\"tokenEstimator\"]\n /** Provide registry-backed tool definitions for compaction-time classification. */\n getToolDefinitions?: () => ToolDefinition[]\n /** Override tool memory extractor. */\n toolMemoryExtractor?: ToolMemoryExtractor\n /** Optional structured logger. */\n logger?: AgentMemoryLogger\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\n/**\n * Create an AgentMemoryLayer pre-configured for a specific agent preset.\n *\n * @param preset - Agent preset name (\"hammer\" | \"magic\" | \"monoslides\" | \"monospace\").\n * @param overrides - Optional overrides for any preset value.\n * @returns Configured AgentMemoryLayer instance.\n *\n * @example\n * ```ts\n * // Hammer (Node.js — use TiktokenEstimator for precision)\n * const memory = createAgentMemoryLayer(\"hammer\", {\n * compactionClient,\n * tokenEstimator: new TiktokenEstimator(),\n * logger: hammerLogger,\n * })\n *\n * // Magic/Monoslides/Monospace (browser — CharTokenEstimator is default)\n * const memory = createAgentMemoryLayer(\"magic\", {\n * compactionClient,\n * getToolDefinitions: () => registry.getToolDefinitions(),\n * toolMemoryExtractor: MAGIC_TOOL_MEMORY_EXTRACTOR,\n * })\n * ```\n */\nexport function createAgentMemoryLayer(\n preset: string,\n overrides?: AgentMemoryFactoryOverrides,\n): AgentMemoryLayer {\n const presetConfig = PRESETS[preset]\n if (!presetConfig) {\n throw new Error(`Unknown memory preset: \"${preset}\". Available: ${Object.keys(PRESETS).join(\", \")}`)\n }\n\n return new AgentMemoryLayer({\n compactionTokenThreshold: presetConfig.compactionTokenThreshold,\n protectedContextTokens: presetConfig.protectedContextTokens,\n stateBudgetTokens: presetConfig.stateBudgetTokens,\n maxRawHistory: presetConfig.maxRawHistory,\n compactionDebounceTurns: presetConfig.compactionDebounceTurns,\n systemPromptOverhead: presetConfig.systemPromptOverhead,\n tokenEstimator: overrides?.tokenEstimator ?? new CharTokenEstimator(),\n compactionClient: overrides?.compactionClient,\n compactionTemperature: getCompactionLlmTemperature(),\n compactionMaxTokens: getCompactionLlmMaxTokens(),\n getToolDefinitions: overrides?.getToolDefinitions,\n toolMemoryExtractor: overrides?.toolMemoryExtractor ?? presetConfig.toolMemoryExtractor,\n logger: overrides?.logger,\n })\n}\n","/**\n * StreamingToolParser — separates speech from structured control segments\n * during streaming. It normally parses tool calls at stream end, but if a\n * second control header appears it immediately seals the stream and keeps only\n * the first segment.\n */\n\nimport {\n DEFAULT_ALLOWED_RUN_TARGETS,\n containsStandaloneStructuredInvocationStart,\n parseStructuredAgentText,\n type RunInvocationTarget,\n} from \"./command-response-utils\"\nimport { SUPPORTED_RUN_TARGETS } from \"./run-command-registry\"\nimport type { ToolCall } from \"./types\"\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface StreamingToolParserCallbacks {\n /** Fired for every token that is regular speech (not part of a control segment). */\n onSpeechToken?: (token: string) => void\n /** Fired when structured control segments have been parsed into tool calls. */\n onToolCall?: (selectedToolCall: ToolCall) => void\n /** Fired if structured command text was detected but could not be parsed. */\n onToolCallError?: (error: Error, rawCommandText: string) => void\n /** Informational log messages. */\n onLog?: (msg: string) => void\n /** Allowed control-segment targets for this parser. Defaults to tool/bash. */\n allowedRunTargets?: readonly RunInvocationTarget[]\n}\n\n// ---------------------------------------------------------------------------\n// Parser\n// ---------------------------------------------------------------------------\n\nexport class StreamingToolParser {\n private speechBuffer = \"\"\n private segmentBuffer = \"\"\n private inSegment = false\n private _sealed = false\n private callbacks: StreamingToolParserCallbacks = {}\n\n /** The full raw content accumulated so far (speech + structured lines). */\n private fullContent = \"\"\n\n private static buildControlHeaderPattern(\n allowedTargets: readonly RunInvocationTarget[],\n flags: string,\n ): RegExp | null {\n const normalizedTargets = allowedTargets.filter((target): target is RunInvocationTarget =>\n SUPPORTED_RUN_TARGETS.includes(target),\n )\n\n if (normalizedTargets.length === 0) {\n return null\n }\n\n return new RegExp(\n `(^|\\\\n)([ \\t]*)---(?:${normalizedTargets.join(\"|\")})---(?:[ \\t]*\\\\r?\\\\n[ \\t]*|[ \\t]+|$)`,\n flags,\n )\n }\n\n private static getControlHeaders(allowedTargets: readonly RunInvocationTarget[]): string[] {\n return allowedTargets\n .filter((target): target is RunInvocationTarget =>\n SUPPORTED_RUN_TARGETS.includes(target),\n )\n .map((target) => `---${target}---`)\n }\n\n private static findControlHeader(\n content: string,\n allowedTargets: readonly RunInvocationTarget[],\n ): { index: number } | null {\n const pattern = StreamingToolParser.buildControlHeaderPattern(\n allowedTargets,\n \"i\",\n )\n\n if (!pattern) {\n return null\n }\n\n const match = pattern.exec(content)\n\n if (!match || match.index === undefined) {\n return null\n }\n\n return {\n index: match.index + (match[1]?.length ?? 0),\n }\n }\n\n private static findSecondControlHeader(\n content: string,\n allowedTargets: readonly RunInvocationTarget[],\n ): { index: number } | null {\n const pattern = StreamingToolParser.buildControlHeaderPattern(\n allowedTargets,\n \"ig\",\n )\n\n if (!pattern) {\n return null\n }\n\n let seenFirstHeader = false\n let match: RegExpExecArray | null\n\n while ((match = pattern.exec(content)) !== null) {\n const index = match.index + (match[1]?.length ?? 0)\n\n if (!seenFirstHeader) {\n seenFirstHeader = true\n continue\n }\n\n return {\n index,\n }\n }\n\n return null\n }\n\n private getRunPrefixLookback(): number {\n const prefixes = StreamingToolParser.getControlHeaders(\n this.callbacks.allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS,\n )\n return Math.max(...prefixes.map((prefix) => prefix.length)) - 1\n }\n\n constructor(callbacks?: StreamingToolParserCallbacks) {\n if (callbacks) this.callbacks = callbacks\n }\n\n /** Replace callbacks (e.g. after construction). */\n on(cb: StreamingToolParserCallbacks): void {\n this.callbacks = { ...this.callbacks, ...cb }\n }\n\n /**\n * Whether the parser has sealed after stream completion.\n */\n get sealed(): boolean {\n return this._sealed\n }\n\n /** Feed a new token from the SSE stream. */\n push(token: string): void {\n if (this._sealed) return\n\n for (const ch of token) {\n if (this._sealed) {\n break\n }\n\n this.fullContent += ch\n\n if (this.inSegment) {\n this.segmentBuffer += ch\n this.sealAtFirstSegmentIfSecondHeaderDetected()\n } else {\n this.speechBuffer += ch\n this.captureSegmentHeaderIfPresent()\n }\n }\n\n if (!this.inSegment && !this._sealed) {\n this.flushSafeSpeechTail()\n }\n }\n\n /**\n * Signal that the stream has ended.\n *\n * If we're mid-command (truncated response), buffer it and attempt\n * recovery only after the full streamed response is available.\n */\n finish(): void {\n if (this._sealed) {\n return\n }\n\n if (!this.inSegment && this.speechBuffer.length > 0) {\n this.callbacks.onSpeechToken?.(this.speechBuffer)\n this.speechBuffer = \"\"\n }\n\n if (this.inSegment && this.segmentBuffer.length > 0) {\n const bufferedSegment = this.segmentBuffer.trimEnd()\n\n this.callbacks.onLog?.(\n \"Stream ended with a structured control segment buffered for finish-time parsing\",\n )\n this.inSegment = false\n this.segmentBuffer = \"\"\n\n this.tryParseFullContent(bufferedSegment)\n this._sealed = true\n return\n }\n\n this.tryParseFullContent()\n this._sealed = true\n }\n\n /** Reset internal state for reuse across turns. */\n reset(): void {\n this.speechBuffer = \"\"\n this.segmentBuffer = \"\"\n this.inSegment = false\n this._sealed = false\n this.fullContent = \"\"\n }\n\n /** Get all content accumulated so far. */\n getFullContent(): string {\n return this.fullContent\n }\n\n // -----------------------------------------------------------------------\n // Internal\n // -----------------------------------------------------------------------\n\n private captureSegmentHeaderIfPresent(): void {\n const first = StreamingToolParser.findControlHeader(\n this.speechBuffer,\n this.callbacks.allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS,\n )\n\n if (!first) {\n return\n }\n\n const runStart = first.index\n const speech = this.speechBuffer.slice(0, runStart)\n if (speech.length > 0) {\n this.callbacks.onSpeechToken?.(speech)\n }\n\n this.segmentBuffer = this.speechBuffer.slice(runStart)\n this.speechBuffer = \"\"\n this.inSegment = true\n }\n\n private flushSafeSpeechTail(): void {\n const keep = this.getRunPrefixLookback()\n if (this.speechBuffer.length <= keep) {\n return\n }\n\n const safeText = this.speechBuffer.slice(0, this.speechBuffer.length - keep)\n this.speechBuffer = this.speechBuffer.slice(this.speechBuffer.length - keep)\n if (safeText.length > 0) {\n this.callbacks.onSpeechToken?.(safeText)\n }\n }\n\n private sealAtFirstSegmentIfSecondHeaderDetected(): void {\n const secondHeader = StreamingToolParser.findSecondControlHeader(\n this.segmentBuffer,\n this.callbacks.allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS,\n )\n\n if (!secondHeader) {\n return\n }\n\n const contentBeforeSegment = this.fullContent.slice(\n 0,\n this.fullContent.length - this.segmentBuffer.length,\n )\n const firstSegmentRaw = this.segmentBuffer.slice(0, secondHeader.index).trimEnd()\n const acceptedContent = `${contentBeforeSegment}${firstSegmentRaw}`\n\n this.callbacks.onLog?.(\n \"Detected a second structured control header during streaming; aborting generation and keeping only the first segment\",\n )\n\n this.fullContent = acceptedContent\n this.segmentBuffer = \"\"\n this.speechBuffer = \"\"\n this.inSegment = false\n\n this.tryParseContent(acceptedContent, firstSegmentRaw)\n this._sealed = true\n }\n\n private tryParseFullContent(rawCommandText?: string): boolean {\n return this.tryParseContent(this.fullContent, rawCommandText)\n }\n\n private tryParseContent(content: string, rawCommandText?: string): boolean {\n let fullResult\n try {\n fullResult = parseStructuredAgentText(content, {\n allowTruncated: true,\n allowedTargets:\n this.callbacks.allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS,\n })\n } catch (error: unknown) {\n this.callbacks.onToolCallError?.(\n error instanceof Error\n ? error\n : new Error(String(error)),\n rawCommandText ?? content,\n )\n return true\n }\n\n if (!fullResult) {\n if (!this.containsStandaloneRunStart(content)) {\n return false\n }\n\n this.callbacks.onToolCallError?.(\n new Error(\n \"Structured command text could not be parsed after stream completion\",\n ),\n rawCommandText ?? content,\n )\n return true\n }\n\n if (fullResult.selectedToolCall) {\n this.callbacks.onLog?.(\n `Parsed selected tool call after stream completion: ${fullResult.selectedToolCall.rawInvocation ?? fullResult.selectedToolCall.parameters.command ?? fullResult.selectedToolCall.name}`,\n )\n this.callbacks.onToolCall?.(fullResult.selectedToolCall)\n }\n\n return true\n }\n\n private containsStandaloneRunStart(content: string): boolean {\n return containsStandaloneStructuredInvocationStart(\n content,\n this.callbacks.allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS,\n )\n }\n}\n","/**\n * BaseValidationEnforcer — shared error-handling infrastructure for\n * any LLM agent loop (Hammer CLI, Tauri voice agent, etc.).\n *\n * Provides:\n * • `surfaceError` / `surfaceWarning` → conversation injection\n * • `handleValidationError` (run-line/Zod parse failures)\n * • `handleApiError` (rate-limit, 5xx, etc.)\n *\n * Subclasses add domain-specific enforcement (skills-first policy,\n * TTS error announcements, etc.).\n */\n\n// ── ConversationSink ─────────────────────────────────────────────────\n// Minimal interface for injecting messages into any conversation store.\n// Hammer's ConversationManager and the voice agent's ChatMessage[] both\n// satisfy this with a trivial adapter.\n\nexport interface ConversationSink {\n addMessage(\n role: \"user\" | \"assistant\" | \"system\" | \"tool\",\n content: string,\n ): Promise<void>\n}\n\nexport function createConversationSink(\n appendMessage: (\n role: \"user\" | \"assistant\" | \"system\" | \"tool\",\n content: string,\n ) => void | Promise<void>,\n): ConversationSink {\n return {\n addMessage: async (role, content) => {\n await appendMessage(role, content)\n },\n }\n}\n\n// ── Result returned to the caller ────────────────────────────────────\n\nexport interface EnforcerResult {\n /** Error message surfaced to the agent as a user-visible message. */\n errorMessage: string\n /** JSON-serialised `{ success, error, data }` suitable for `lastToolResult`. */\n lastToolResult: string\n}\n\ntype ValidationErrorWithRawContent = Error & {\n rawContent?: string\n}\n\nconst VALIDATION_ERROR_PREFIX = \"VALIDATION_ERROR: \"\n\nfunction hasValidationErrorPrefix(message: string): boolean {\n return message.startsWith(VALIDATION_ERROR_PREFIX)\n}\n\nfunction stripValidationErrorPrefix(message: string): string {\n return hasValidationErrorPrefix(message)\n ? message.slice(VALIDATION_ERROR_PREFIX.length)\n : message\n}\n\nfunction buildStepValidationSurfaceMessage(message: string): string {\n const details = stripValidationErrorPrefix(message)\n\n if (hasValidationErrorPrefix(message)) {\n return details\n }\n\n return `Validation error: ${details}. Reply with exactly one executable control block only. Put the standalone slug header on its own line and put the payload on the following line(s). Do not discuss the control syntax.`\n}\n\nfunction buildFatalSurfaceMessage(message: string): string {\n return `Fatal agent error: ${message}`\n}\n\n// ── Base class ───────────────────────────────────────────────────────\n\nexport abstract class BaseValidationEnforcer {\n protected sink: ConversationSink\n\n constructor(sink: ConversationSink) {\n this.sink = sink\n }\n\n // ── Missing tool call warning ────────────────────────────────────\n\n /**\n * Warn the agent that it sent a non-terminal response without any\n * executable control block — this wastes an action turn.\n */\n async handleMissingToolCall(actionCount: number): Promise<void> {\n this.logWarning(\n `No executable control block in response — action ${actionCount} was wasted.`,\n )\n\n await this.surfaceWarning(\n `Your response had no executable control block and no final ---bash--- control block whose payload was exit 0 or exit 1. ` +\n `This wasted an action turn. Reply with one concrete next action and do not explain the protocol back to the system.`,\n )\n }\n\n // ── Core: handle a validation error ──────────────────────────────\n\n /**\n * Handle an LLM response validation error (shell-line parse, Zod, etc.).\n *\n * - surfaces a structured corrective error as a user message\n */\n async handleValidationError(\n error: Error,\n ): Promise<EnforcerResult> {\n this.logWarning(`Validation error: ${error.message}`)\n\n await this.surfaceValidationContext(error)\n\n const errorMessage = buildStepValidationSurfaceMessage(error.message)\n\n return this.surfaceError(errorMessage)\n }\n\n /**\n * Handle a non-validation LLM API error (rate-limit, 5xx, etc.).\n * Surfaces the message to the agent so it can retry on the next turn.\n */\n async handleApiError(error: Error): Promise<EnforcerResult> {\n this.logError(`LLM API error: ${error.message}`)\n return this.surfaceError(`LLM API error: ${error.message}`)\n }\n\n /**\n * Handle an unrecoverable runtime error that terminates the current run.\n * Surfaces the message through the same user-visible error channel as\n * validation and API failures.\n */\n async handleFatalError(error: Error | string): Promise<EnforcerResult> {\n const message = error instanceof Error ? error.message : error\n const errorMessage = buildFatalSurfaceMessage(message)\n\n this.logError(errorMessage)\n return this.surfaceError(errorMessage)\n }\n\n /**\n * Override to route warnings to a domain-specific logger.\n * Default: `console.warn`.\n */\n protected logWarning(message: string): void {\n console.warn(`[Agent] ⚠ ${message}`)\n }\n\n /**\n * Override to route errors to a domain-specific logger.\n * Default: `console.error`.\n */\n protected logError(message: string): void {\n console.error(`[Agent] ${message}`)\n }\n\n protected async surfaceValidationContext(error: Error): Promise<void> {\n void error\n }\n\n protected readValidationRawContent(error: Error): string | null {\n const rawContent = (error as ValidationErrorWithRawContent).rawContent\n if (typeof rawContent !== \"string\") {\n return null\n }\n\n const trimmedContent = rawContent.trim()\n return trimmedContent.length > 0 ? trimmedContent : null\n }\n\n // ── Internal: shared error/warning → user-message plumbing ──────\n\n protected async surfaceError(errorMessage: string): Promise<EnforcerResult> {\n const lastToolResult = JSON.stringify({\n success: false,\n error: errorMessage,\n data: null,\n })\n\n await this.sink.addMessage(\"user\", `⚠️ ERROR: ${errorMessage}`)\n\n return { errorMessage, lastToolResult }\n }\n\n protected async surfaceWarning(warningMessage: string): Promise<void> {\n await this.sink.addMessage(\"user\", `⚠️ WARNING: ${warningMessage}`)\n }\n}\n","import type { AgentLoopCallbacks } from \"./agent-loop\"\nimport type { AgentMachineState } from \"./agent-machine\"\nimport type { ToolDefinition, ToolResult } from \"./types\"\nimport { formatToolCallAsUnixCommand } from \"./unix-tooling\"\nimport type { AgentMessage } from \"./web-agent-types\"\nimport type { WebToolLoopRuntimeStateLike } from \"./web-tool-loop-agent-runtime\"\n\nexport class PendingAgentMessageBuffer<TMessage> {\n private messages: TMessage[] = []\n\n push(message: TMessage): void {\n this.messages.push(message)\n }\n\n clear(): void {\n this.messages = []\n }\n\n takeForRun(\n runId: number,\n isRunActive: (runId: number) => boolean,\n ): TMessage[] {\n if (!isRunActive(runId) || this.messages.length === 0) {\n return []\n }\n\n const pendingMessages = this.messages\n this.messages = []\n return pendingMessages\n }\n}\n\nexport function createToolAgentMessage(options: {\n id: string\n name: string\n content: string\n success: boolean\n timestamp?: number\n}): AgentMessage {\n return {\n id: options.id,\n role: \"tool\",\n content: options.content,\n toolName: options.name,\n toolSuccess: options.success,\n timestamp: options.timestamp ?? Date.now(),\n }\n}\n\nexport interface CreateWebToolLoopCallbacksOptions {\n getToolDefinitions: () => ToolDefinition[]\n updateActiveToolName: (activeToolName: string | null) => void\n onToolCompleteMessage: (\n name: string,\n result: ToolResult,\n truncatedResult: string,\n ) => void\n onPhaseChange: (state: AgentMachineState) => void\n}\n\nexport function applyInitialWebAgentRunState<\n TState extends WebToolLoopRuntimeStateLike<TMessage>,\n TMessage extends AgentMessage,\n>(state: TState, userMessage: TMessage): TState {\n return {\n ...state,\n messages: [...state.messages, userMessage],\n streamingContent: \"\",\n error: null,\n activeToolName: null,\n }\n}\n\nexport function applyIdleWebAgentState<\n TState extends WebToolLoopRuntimeStateLike,\n>(state: TState): TState {\n return {\n ...state,\n phase: \"idle\",\n streamingContent: \"\",\n activeToolName: null,\n }\n}\n\nexport function createWebToolLoopCallbacks(\n options: CreateWebToolLoopCallbacksOptions,\n): AgentLoopCallbacks {\n return {\n onToolStart: (name, parameters) => {\n options.updateActiveToolName(\n formatToolCallAsUnixCommand(\n { name, parameters },\n options.getToolDefinitions(),\n ) ?? name,\n )\n },\n onToolComplete: (name, result, truncatedResult) => {\n options.onToolCompleteMessage(name, result, truncatedResult)\n options.updateActiveToolName(null)\n },\n onPhaseChange: options.onPhaseChange,\n }\n}","/**\n * WebValidationEnforcer — shared subclass of BaseValidationEnforcer\n * for browser-based agents (Magic webapp, future web agents).\n *\n * Provides:\n * • Missing tool-call warning (non-terminal response without an executable control segment)\n * • API error surfacing\n * • Browser-compatible logging (no chalk, no file I/O)\n *\n * Unlike Hammer's ValidationEnforcer, this does NOT include:\n * • ListSkills/ReadSkill-first enforcement (no skills concept in web)\n * • Init error handlers (web agents use simpler init flow)\n * • File system session persistence\n */\n\nimport {\n BaseValidationEnforcer,\n type ConversationSink,\n} from \"./validation-enforcer\"\n\n/**\n * WebValidationEnforcer — lightweight validation enforcement for\n * browser-based agents.\n *\n * Wire up with `createConversationSink(...)` against the underlying\n * message store:\n * ```ts\n * const sink = createConversationSink((role, content) =>\n * memory.appendMessage(role, content)\n * )\n * const enforcer = new WebValidationEnforcer(sink)\n * ```\n */\nexport class WebValidationEnforcer extends BaseValidationEnforcer {\n /** Optional callback for logging (default: console). */\n private onLog?: (level: \"warn\" | \"error\", message: string) => void\n\n constructor(\n sink: ConversationSink,\n opts?: { onLog?: (level: \"warn\" | \"error\", message: string) => void },\n ) {\n super(sink)\n this.onLog = opts?.onLog\n }\n\n // ── Protected overrides ──────────────────────────────────────────\n\n protected override logWarning(message: string): void {\n if (this.onLog) {\n this.onLog(\"warn\", message)\n } else {\n console.warn(`[Agent] ⚠ ${message}`)\n }\n }\n\n protected override logError(message: string): void {\n if (this.onLog) {\n this.onLog(\"error\", message)\n } else {\n console.error(`[Agent] ${message}`)\n }\n }\n\n protected override async surfaceValidationContext(error: Error): Promise<void> {\n const rawContent = this.readValidationRawContent(error)\n if (!rawContent) {\n return\n }\n\n await this.sink.addMessage(\"assistant\", rawContent)\n }\n}\n","import type { AgentMachineState } from \"./agent-machine\"\nimport type { TodoItem } from \"./todo-types\"\n\nexport type AgentPhase =\n | \"idle\"\n | \"thinking\"\n | \"tool-calling\"\n | \"complete\"\n | \"error\"\n\nexport interface AgentMessage {\n id: string\n role: \"user\" | \"assistant\" | \"tool\"\n content: string\n diagnosticLevel?: \"error\" | \"warning\"\n diagnosticSource?: \"agent-feedback\"\n toolName?: string\n toolSuccess?: boolean\n reasoning?: string\n rawContent?: string\n timestamp: number\n}\n\nexport interface AgentState {\n phase: AgentPhase\n messages: AgentMessage[]\n streamingContent: string\n actionCount: number\n error: string | null\n activeToolName: string | null\n todoItems: TodoItem[]\n}\n\nexport function createInitialWebAgentState(): AgentState {\n return {\n phase: \"idle\",\n messages: [],\n streamingContent: \"\",\n actionCount: 0,\n error: null,\n activeToolName: null,\n todoItems: [],\n }\n}\n\nexport function machineStateToWebAgentPhase(\n state: AgentMachineState,\n): AgentPhase {\n switch (state) {\n case \"idle\":\n return \"idle\"\n case \"prompting\":\n case \"analyzing\":\n return \"thinking\"\n case \"executing\":\n case \"updating\":\n return \"tool-calling\"\n case \"done\":\n return \"complete\"\n case \"failed\":\n return \"error\"\n }\n}\n\nexport function createWebAgentMessageIdGenerator(\n prefix = \"msg\",\n): () => string {\n let counter = 0\n\n return () => `${prefix}-${Date.now()}-${++counter}`\n}","import {\n getCompactionProvider,\n getProviderConfig,\n} from \"./configure\"\n\nimport type { AgentMachineState } from \"./agent-machine\"\nimport type { AgentLoopDeps, ParsedStepInput } from \"./agent-loop\"\nimport { createAgentMemoryLayer } from \"./agent-memory-factory\"\nimport type {\n AgentMemoryLayer,\n ToolMemoryExtractor,\n} from \"./agent-memory-layer\"\nimport {\n coerceToolCallToDefinition,\n DEFAULT_ALLOWED_RUN_TARGETS,\n} from \"./command-response-utils\"\nimport type { RunInvocationTarget } from \"./command-response-utils\"\nimport { LLMClient } from \"./llm-client\"\nimport {\n buildAgentSystemPrompt,\n buildCoreStaticRules,\n} from \"./prompt-helpers\"\nimport type {\n RuntimeSnapshotUpdater,\n RuntimeStore,\n} from \"./runtime-store\"\nimport {\n parseResponseWithRecovery,\n buildParseFeedback,\n} from \"./tool-call-recovery\"\nimport {\n ToolLoopAgentRuntime,\n type ToolLoopAgentRuntimeDeps,\n type ToolLoopRuntimeLLMRequest,\n type ToolLoopRuntimeLLMResponse,\n type ToolLoopRuntimeRunStepResult,\n type ToolLoopRuntimeSetup,\n type ToolLoopRuntimeStepContext,\n} from \"./tool-loop-agent-runtime\"\nimport { StreamingToolParser } from \"./streaming-tool-parser\"\nimport type {\n ChatMessage,\n ToolDefinition,\n ToolResult,\n} from \"./types\"\nimport {\n createConversationSink,\n} from \"./validation-enforcer\"\nimport {\n applyIdleWebAgentState,\n applyInitialWebAgentRunState,\n createToolAgentMessage,\n createWebToolLoopCallbacks,\n PendingAgentMessageBuffer,\n} from \"./web-runtime-tooling\"\nimport { WebValidationEnforcer } from \"./web-validation-enforcer\"\nimport type { TodoItem } from \"./todo-types\"\nimport {\n createWebAgentMessageIdGenerator,\n machineStateToWebAgentPhase,\n type AgentMessage,\n type AgentPhase,\n} from \"./web-agent-types\"\n\nexport interface WebToolLoopRuntimeStateLike<\n TMessage extends AgentMessage = AgentMessage,\n> {\n phase: AgentPhase\n messages: TMessage[]\n streamingContent: string\n actionCount: number\n error: string | null\n activeToolName: string | null\n todoItems: TodoItem[]\n}\n\nconst STREAMING_CONTENT_TOKEN_BATCH_SIZE = 12\n\ntype WebToolLoopRuntimeError = Error & {\n isWebParseFailure?: boolean\n rawContent?: string\n alreadySurfacedFatalError?: boolean\n}\n\nexport const suppressWebValidationLog = (\n _level: \"warn\" | \"error\",\n _message: string,\n): void => {}\n\nexport function readDiagnosticLevel(\n content: string,\n): AgentMessage[\"diagnosticLevel\"] | undefined {\n const trimmedContent = content.trimStart()\n\n if (trimmedContent.startsWith(\"⚠️ ERROR:\")) {\n return \"error\"\n }\n\n if (trimmedContent.startsWith(\"⚠️ WARNING:\")) {\n return \"warning\"\n }\n\n return undefined\n}\n\nexport function readDiagnosticSource(\n content: string,\n): AgentMessage[\"diagnosticSource\"] | undefined {\n const trimmedContent = content.trimStart()\n\n if (\n trimmedContent.startsWith(\"⚠️ ERROR:\")\n || trimmedContent.startsWith(\"⚠️ WARNING:\")\n ) {\n return \"agent-feedback\"\n }\n\n return undefined\n}\n\nexport function mapConversationRoleToAgentRole(\n role: \"user\" | \"assistant\" | \"system\" | \"tool\",\n): AgentMessage[\"role\"] {\n if (role === \"system\") {\n return \"assistant\"\n }\n\n return role\n}\n\nexport interface CreateWebRuntimeSetupOptions {\n memoryPreset: string\n getToolDefinitions: () => ToolDefinition[]\n executeTool: AgentLoopDeps[\"executeTool\"]\n toolMemoryExtractor?: ToolMemoryExtractor\n validationLog?: (level: \"warn\" | \"error\", message: string) => void\n}\n\nexport interface ExecuteWebLoopRunOptions<\n TState extends WebToolLoopRuntimeStateLike<TMessage>,\n TMessage extends AgentMessage,\n TStepInput extends { runId: number },\n> {\n runId: number\n userTask: string\n stepInput: TStepInput\n createUserMessage: () => TMessage\n applyInitialState: (state: TState, userMessage: TMessage) => TState\n onStepCompleted: (\n step: ToolLoopRuntimeRunStepResult<TStepInput>,\n ) => Promise<void> | void\n createParseFailureMessage?: () => TMessage\n applyParseFailureState?: (state: TState, message: TMessage) => TState\n onBeforeRun?: () => void\n onAfterRun?: () => void\n}\n\nexport interface WebToolLoopAgentRuntimeConstructorOptions<\n TState,\n TStepInput,\n> extends ToolLoopAgentRuntimeDeps<TStepInput> {\n store: RuntimeStore<TState>\n messageIdPrefix: string\n getToolDefinitions: () => ToolDefinition[]\n memoryPreset: string\n executeTool: AgentLoopDeps[\"executeTool\"]\n systemIdentity?: string\n extraRules: string\n temperature: number\n maxTokens: number\n toolMemoryExtractor?: ToolMemoryExtractor\n validationLog?: (level: \"warn\" | \"error\", message: string) => void\n allowedRunTargets?: readonly RunInvocationTarget[]\n logLabel?: string\n logFullSystemPromptOnChange?: boolean\n logFullLlmMessages?: boolean\n}\n\nexport abstract class WebToolLoopAgentRuntime<\n TState extends WebToolLoopRuntimeStateLike<TMessage>,\n TMessage extends AgentMessage = AgentMessage,\n TStepInput extends { runId: number } = { runId: number },\n> extends ToolLoopAgentRuntime<AgentMemoryLayer, WebValidationEnforcer, TStepInput> {\n protected readonly store: RuntimeStore<TState>\n protected readonly pendingToolMessages = new PendingAgentMessageBuffer<TMessage>()\n\n private readonly createMessageId: () => string\n private readonly runtimeToolDefinitions: () => ToolDefinition[]\n private readonly memoryPreset: string\n private readonly executeTool: AgentLoopDeps[\"executeTool\"]\n private readonly systemIdentity?: string\n private readonly extraRules: string\n private readonly temperature: number\n private readonly maxTokens: number\n private readonly toolMemoryExtractor?: ToolMemoryExtractor\n private readonly validationLog?: (level: \"warn\" | \"error\", message: string) => void\n private readonly allowedRunTargets: readonly RunInvocationTarget[]\n private readonly logLabel: string\n private readonly logFullSystemPromptOnChange: boolean\n private readonly logFullLlmMessages: boolean\n private lastLoggedSystemPrompt: string | null = null\n protected abortController: AbortController | null = null\n protected memory: AgentMemoryLayer | null = null\n protected enforcer: WebValidationEnforcer | null = null\n protected running = false\n protected activeRunId: number | null = null\n protected nextRunId = 0\n protected inFlightRunPromise: Promise<void> | null = null\n private pendingDestroyPromise: Promise<void> | null = null\n private pendingSurfacedMessages: TMessage[] = []\n private pendingStreamingContent = new Map<number, string>()\n private pendingStreamingTokenCounts = new Map<number, number>()\n\n protected constructor(\n options: WebToolLoopAgentRuntimeConstructorOptions<TState, TStepInput>,\n ) {\n const {\n store,\n messageIdPrefix,\n getToolDefinitions,\n memoryPreset,\n executeTool,\n systemIdentity,\n extraRules,\n temperature,\n maxTokens,\n toolMemoryExtractor,\n validationLog,\n allowedRunTargets,\n logLabel,\n logFullSystemPromptOnChange,\n logFullLlmMessages,\n loopCallbacks: externalLoopCallbacks,\n ...deps\n } = options\n\n let syncPhaseHandler: (machineState?: AgentMachineState) => void = () => {}\n let activeToolNameUpdater: (activeToolName: string | null) => void = () => {}\n let toolCompleteHandler: (name: string, result: ToolResult, truncatedStr: string) => void = () => {}\n\n const resolvedLoopCallbacks = externalLoopCallbacks ?? createWebToolLoopCallbacks({\n getToolDefinitions,\n updateActiveToolName: (name) => activeToolNameUpdater(name),\n onToolCompleteMessage: (name, result, str) => toolCompleteHandler(name, result, str),\n onPhaseChange: (state) => syncPhaseHandler(state),\n })\n\n super({ ...deps, loopCallbacks: resolvedLoopCallbacks })\n\n this.store = store\n this.createMessageId = createWebAgentMessageIdGenerator(messageIdPrefix)\n this.runtimeToolDefinitions = getToolDefinitions\n this.memoryPreset = memoryPreset\n this.executeTool = executeTool\n this.systemIdentity = systemIdentity\n this.extraRules = extraRules\n this.temperature = temperature\n this.maxTokens = maxTokens\n this.toolMemoryExtractor = toolMemoryExtractor\n this.validationLog = validationLog\n this.allowedRunTargets = allowedRunTargets ?? DEFAULT_ALLOWED_RUN_TARGETS\n this.logLabel = logLabel ?? \"WebToolLoopAgentRuntime\"\n this.logFullSystemPromptOnChange = logFullSystemPromptOnChange ?? false\n this.logFullLlmMessages = logFullLlmMessages ?? false\n\n if (!externalLoopCallbacks) {\n syncPhaseHandler = (machineState) => this.syncPhase(machineState)\n activeToolNameUpdater = (activeToolName) => {\n this.updateSnapshotForActiveRun((current) => ({\n ...current,\n activeToolName,\n }))\n }\n toolCompleteHandler = (name, result, truncatedStr) => {\n this.pendingToolMessages.push(createToolAgentMessage({\n id: this.nextMessageId(),\n name,\n content: truncatedStr,\n success: result.success,\n }) as TMessage)\n }\n }\n }\n\n protected async createRuntimeSetup(): Promise<\n ToolLoopRuntimeSetup<AgentMemoryLayer, WebValidationEnforcer>\n > {\n return this.createWebRuntimeSetup({\n memoryPreset: this.memoryPreset,\n getToolDefinitions: this.runtimeToolDefinitions,\n executeTool: this.executeTool,\n toolMemoryExtractor: this.toolMemoryExtractor,\n validationLog: this.validationLog,\n })\n }\n\n protected override getToolDefinitions(): ToolDefinition[] {\n return this.runtimeToolDefinitions()\n }\n\n protected override async ensureStaticContext(memory: AgentMemoryLayer): Promise<void> {\n if (!memory.hasStaticContext()) {\n memory.setStaticContext(buildCoreStaticRules())\n }\n }\n\n protected getAllowedRunTargets(): readonly RunInvocationTarget[] {\n return this.allowedRunTargets\n }\n\n /**\n * Run targets for the parser layer. Always includes \"bash\" so the\n * universal finish signals (`---bash--- exit 0` / `exit 1`) are\n * recognized even when the agent has no bash execution capability.\n */\n private getParserRunTargets(): readonly RunInvocationTarget[] {\n const targets = this.getAllowedRunTargets()\n return targets.includes(\"bash\") ? targets : [...targets, \"bash\" as RunInvocationTarget]\n }\n\n protected override buildSystemPrompt(\n context: ToolLoopRuntimeStepContext<TStepInput>,\n ): string {\n const allowedRunTargets = this.getAllowedRunTargets()\n\n return buildAgentSystemPrompt({\n tools: context.tools,\n identityLine: this.systemIdentity,\n supplementalRules: this.extraRules,\n bashAvailable: allowedRunTargets.includes(\"bash\"),\n backgroundBashAvailable: allowedRunTargets.includes(\"background_bash\"),\n })\n }\n\n protected override buildLLMRequest(\n context: { stepInput?: TStepInput },\n messages: ChatMessage[],\n ): ToolLoopRuntimeLLMRequest {\n return this.buildStreamingLLMRequest(context, messages, {\n temperature: this.temperature,\n maxTokens: this.maxTokens,\n })\n }\n\n protected override async invokeLLM(\n request: ToolLoopRuntimeLLMRequest,\n ): Promise<ToolLoopRuntimeLLMResponse> {\n if (this.logFullSystemPromptOnChange) {\n const fullSystemPrompt = request.messages.find(\n (message) => message.role === \"system\",\n )?.content\n\n if (fullSystemPrompt && fullSystemPrompt !== this.lastLoggedSystemPrompt) {\n this.lastLoggedSystemPrompt = fullSystemPrompt\n console.log(\n `[${this.logLabel}] System prompt changed:\\n${fullSystemPrompt}`,\n )\n }\n }\n\n if (this.logFullLlmMessages) {\n console.log(\n `[${this.logLabel}] Outbound LLM messages:\\n${JSON.stringify(request.messages, null, 2)}`,\n )\n }\n\n return super.invokeLLM(request)\n }\n\n protected override parseStepResponse(\n response: { content: string; finishReason: string },\n tools: ToolDefinition[],\n ) {\n return this.parseRecoveringStepResponse(response, tools)\n }\n\n protected override async onBeforeToolDispatch(\n context: ToolLoopRuntimeStepContext<TStepInput>,\n parsed: ParsedStepInput,\n ): Promise<void> {\n const runId = context.stepInput?.runId\n if (runId === undefined || !this.isRunActive(runId)) {\n return\n }\n\n this.flushPendingStreamingContentForRun(runId)\n\n const toolName = parsed.selectedToolCall?.name ?? null\n if (toolName) {\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n activeToolName: toolName,\n }))\n }\n }\n\n protected nextMessageId(): string {\n return this.createMessageId()\n }\n\n protected updateSnapshot(updater: RuntimeSnapshotUpdater<TState>): void {\n this.store.setSnapshot(updater)\n }\n\n protected isRunActive(runId: number): boolean {\n return this.activeRunId === runId\n }\n\n protected updateSnapshotForActiveRun(\n updater: RuntimeSnapshotUpdater<TState>,\n ): boolean {\n if (this.activeRunId === null) {\n return false\n }\n\n this.updateSnapshot(updater)\n return true\n }\n\n protected updateSnapshotForRun(\n runId: number,\n updater: RuntimeSnapshotUpdater<TState>,\n ): boolean {\n if (!this.isRunActive(runId)) {\n return false\n }\n\n this.updateSnapshot(updater)\n return true\n }\n\n protected async surfaceFatalError(\n error: unknown,\n runId: number,\n ): Promise<Error> {\n const fatalError = error instanceof Error ? error : new Error(String(error))\n const loop = this.runtimeLoop\n\n if (loop) {\n await loop.handleFatalError(fatalError.message)\n this.flushPendingSurfacedMessagesForRun(runId)\n this.syncPhase()\n }\n\n return fatalError\n }\n\n protected appendSurfacedConversationMessage(\n role: \"user\" | \"assistant\" | \"system\" | \"tool\",\n content: string,\n ): void {\n const messageRole = mapConversationRoleToAgentRole(role)\n const surfacedMessage = {\n id: this.nextMessageId(),\n role: messageRole,\n content,\n diagnosticLevel: readDiagnosticLevel(content),\n diagnosticSource: readDiagnosticSource(content),\n timestamp: Date.now(),\n } as TMessage\n\n if (this.activeRunId === null) {\n return\n }\n\n this.pendingSurfacedMessages.push(surfacedMessage)\n }\n\n protected takePendingSurfacedMessagesForRun(runId: number): TMessage[] {\n if (!this.isRunActive(runId) || this.pendingSurfacedMessages.length === 0) {\n return []\n }\n\n const pendingSurfacedMessages = this.pendingSurfacedMessages\n this.pendingSurfacedMessages = []\n return pendingSurfacedMessages\n }\n\n protected flushPendingSurfacedMessagesForRun(runId: number): void {\n const pendingSurfacedMessages = this.takePendingSurfacedMessagesForRun(runId)\n\n if (pendingSurfacedMessages.length === 0) {\n return\n }\n\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n messages: [...state.messages, ...pendingSurfacedMessages],\n }))\n }\n\n protected clearPendingSurfacedMessages(): void {\n this.pendingSurfacedMessages = []\n }\n\n protected appendStreamingToken(runId: number, token: string): void {\n const nextContent = (this.pendingStreamingContent.get(runId) ?? \"\") + token\n const nextCount = (this.pendingStreamingTokenCounts.get(runId) ?? 0) + 1\n\n this.pendingStreamingContent.set(runId, nextContent)\n this.pendingStreamingTokenCounts.set(runId, nextCount)\n\n if (\n nextCount >= STREAMING_CONTENT_TOKEN_BATCH_SIZE\n || token.includes(\"\\n\")\n ) {\n this.flushPendingStreamingContentForRun(runId)\n }\n }\n\n protected flushPendingStreamingContentForRun(runId: number): void {\n const pendingContent = this.pendingStreamingContent.get(runId)\n if (!pendingContent) {\n return\n }\n\n this.pendingStreamingContent.delete(runId)\n this.pendingStreamingTokenCounts.delete(runId)\n\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n streamingContent: state.streamingContent + pendingContent,\n }))\n }\n\n protected clearPendingStreamingContent(runId?: number): void {\n if (typeof runId === \"number\") {\n this.pendingStreamingContent.delete(runId)\n this.pendingStreamingTokenCounts.delete(runId)\n return\n }\n\n this.pendingStreamingContent.clear()\n this.pendingStreamingTokenCounts.clear()\n }\n\n protected syncPhase(machineState?: AgentMachineState): void {\n if (this.activeRunId === null) {\n return\n }\n\n const currentLoop = this.runtimeLoop\n if (!currentLoop) {\n return\n }\n\n const nextMachineState = machineState ?? currentLoop.machineState\n this.updateSnapshotForActiveRun((current) => ({\n ...current,\n phase: machineStateToWebAgentPhase(nextMachineState),\n actionCount: currentLoop.actionCount,\n error: currentLoop.getContext().error ?? null,\n }))\n }\n\n protected async createWebRuntimeSetup(\n options: CreateWebRuntimeSetupOptions,\n ): Promise<ToolLoopRuntimeSetup<AgentMemoryLayer, WebValidationEnforcer>> {\n if (!this.memory) {\n const compactionProviderName = getCompactionProvider()\n if (!compactionProviderName) {\n throw new Error(\n \"hammer-agent: compactionProvider is not configured. \" +\n \"Call configure({ compactionProvider: 'yourProvider' }) before running the agent.\"\n )\n }\n const compactionClient = new LLMClient(\n getProviderConfig(compactionProviderName),\n )\n const { TiktokenEstimator } = await import(\"./tiktoken-estimator\")\n const tokenEstimator = new TiktokenEstimator()\n\n this.memory = createAgentMemoryLayer(options.memoryPreset, {\n compactionClient,\n tokenEstimator,\n getToolDefinitions: options.getToolDefinitions,\n ...(options.toolMemoryExtractor\n ? { toolMemoryExtractor: options.toolMemoryExtractor }\n : {}),\n })\n }\n\n if (!this.enforcer) {\n const sink = createConversationSink((role, content) => {\n this.memory!.appendMessage(role, content)\n this.appendSurfacedConversationMessage(role, content)\n })\n\n this.enforcer = new WebValidationEnforcer(\n sink,\n options.validationLog\n ? { onLog: options.validationLog }\n : undefined,\n )\n }\n\n return {\n memory: this.memory,\n enforcer: this.enforcer,\n conversation: this.memory.toConversationAdapter(),\n loopDeps: {\n executeTool: options.executeTool,\n },\n }\n }\n\n\n\n protected buildStreamingLLMRequest(\n context: { stepInput?: TStepInput },\n messages: ChatMessage[],\n options: {\n temperature: number\n maxTokens: number\n },\n ): ToolLoopRuntimeLLMRequest {\n const runId = context.stepInput?.runId\n const runDetector = new StreamingToolParser({\n allowedRunTargets: this.getParserRunTargets(),\n })\n\n return {\n messages,\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n normalizeResponseContent: () => runDetector.getFullContent(),\n onToken: (token: string) => {\n runDetector.push(token)\n\n if (runId !== undefined) {\n if (runDetector.sealed) {\n this.clearPendingStreamingContent(runId)\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n streamingContent: runDetector.getFullContent(),\n }))\n } else {\n this.appendStreamingToken(runId, token)\n }\n }\n\n if (runDetector.sealed) {\n return true\n }\n\n return false\n },\n }\n }\n\n protected parseRecoveringStepResponse(\n response: { content: string; finishReason: string },\n tools: ToolDefinition[],\n ) {\n if (!response.content || response.content.length === 0) {\n throw new Error(\"Empty response from API\")\n }\n\n let stepParsed\n try {\n stepParsed = parseResponseWithRecovery(response.content, {\n finishReason: response.finishReason,\n allowedRunTargets: this.getParserRunTargets(),\n })\n } catch (error: unknown) {\n const parseError = error instanceof Error\n ? error as WebToolLoopRuntimeError\n : new Error(String(error)) as WebToolLoopRuntimeError\n\n parseError.isWebParseFailure = true\n parseError.rawContent = response.content\n throw parseError\n }\n\n if (!stepParsed) {\n const parseError: WebToolLoopRuntimeError = new Error(\n buildParseFeedback(response.content),\n )\n parseError.isWebParseFailure = true\n parseError.rawContent = response.content\n throw parseError\n }\n\n return {\n outcome: stepParsed.outcome,\n reasoning: stepParsed.reasoning,\n selectedToolCall: coerceToolCallToDefinition(\n stepParsed.selectedToolCall,\n tools,\n ),\n wasTruncated: response.finishReason === \"length\",\n rawContent: response.content,\n }\n }\n\n protected async startSerializedRun(\n execute: (runId: number) => Promise<void>,\n ): Promise<void> {\n if (this.running) {\n return\n }\n\n const previousRunPromise = this.inFlightRunPromise\n if (previousRunPromise) {\n await previousRunPromise\n }\n\n const runId = ++this.nextRunId\n this.activeRunId = runId\n\n const runPromise = execute(runId)\n this.inFlightRunPromise = runPromise\n\n try {\n await runPromise\n } finally {\n if (this.inFlightRunPromise === runPromise) {\n this.inFlightRunPromise = null\n }\n }\n }\n\n protected async executeWebLoopRun(\n options: ExecuteWebLoopRunOptions<TState, TMessage, TStepInput>,\n ): Promise<void> {\n const {\n runId,\n userTask,\n stepInput,\n createUserMessage,\n applyInitialState,\n onStepCompleted,\n createParseFailureMessage,\n applyParseFailureState,\n onBeforeRun,\n onAfterRun,\n } = options\n\n let finalPhase: AgentPhase | null = null\n let finalError: string | null = null\n\n this.running = true\n this.clearPendingSurfacedMessages()\n this.pendingToolMessages.clear()\n onBeforeRun?.()\n\n const ac = new AbortController()\n this.abortController = ac\n\n const userMessage = createUserMessage()\n\n this.updateSnapshotForRun(runId, (state) =>\n applyInitialState(state, userMessage))\n\n try {\n await this.beginRun(userTask)\n this.syncPhase()\n\n while (!ac.signal.aborted) {\n const currentLoop = this.runtimeLoop\n if (!currentLoop) {\n return\n }\n\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n streamingContent: \"\",\n activeToolName: null,\n }))\n this.clearPendingStreamingContent(runId)\n\n try {\n const step = await this.runStep({\n task: userTask,\n actionCount: currentLoop.actionCount + 1,\n signal: ac.signal,\n stepInput,\n })\n\n if (ac.signal.aborted) {\n return\n }\n\n await onStepCompleted(step)\n this.flushPendingSurfacedMessagesForRun(runId)\n this.syncPhase()\n\n if (step.result.outcome === \"success\") {\n finalPhase = \"complete\"\n finalError = currentLoop.getContext().error ?? null\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n phase: \"complete\",\n actionCount: currentLoop.actionCount,\n error: currentLoop.getContext().error ?? null,\n }))\n }\n\n if (step.result.outcome === \"failure\") {\n finalPhase = \"error\"\n finalError =\n currentLoop.getContext().error\n ?? \"Agent reported failure\"\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n phase: \"error\",\n actionCount: currentLoop.actionCount,\n error:\n currentLoop.getContext().error\n ?? state.error\n ?? \"Agent reported failure\",\n }))\n }\n\n if (step.result.outcome !== \"continue\") {\n break\n }\n } catch (stepError: unknown) {\n if (ac.signal.aborted) {\n return\n }\n\n const loop = this.runtimeLoop\n const error = stepError instanceof Error\n ? stepError as WebToolLoopRuntimeError\n : new Error(String(stepError)) as WebToolLoopRuntimeError\n\n if (!loop) {\n throw error\n }\n\n if (error.alreadySurfacedFatalError) {\n this.flushPendingStreamingContentForRun(runId)\n this.flushPendingSurfacedMessagesForRun(runId)\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n phase: \"error\",\n error: error.message,\n streamingContent: \"\",\n activeToolName: null,\n }))\n finalPhase = \"error\"\n finalError = error.message\n break\n }\n\n if (error.isWebParseFailure) {\n this.clearPendingStreamingContent(runId)\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n streamingContent: \"\",\n activeToolName: null,\n }))\n }\n\n await loop.classifyStepError(error)\n\n if (\n error.isWebParseFailure\n && createParseFailureMessage\n && applyParseFailureState\n ) {\n const parseFailureMessage = createParseFailureMessage()\n\n this.updateSnapshotForRun(runId, (state) =>\n applyParseFailureState(state, parseFailureMessage))\n }\n\n this.flushPendingStreamingContentForRun(runId)\n this.flushPendingSurfacedMessagesForRun(runId)\n this.syncPhase()\n\n continue\n }\n }\n } catch (error: unknown) {\n if (!ac.signal.aborted) {\n this.flushPendingStreamingContentForRun(runId)\n const fatalError = await this.surfaceFatalError(error, runId)\n const errorMessage = fatalError.message\n finalPhase = \"error\"\n finalError = errorMessage\n\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n phase: \"error\",\n error: errorMessage,\n }))\n }\n } finally {\n this.clearPendingStreamingContent(runId)\n if (this.activeRunId === runId) {\n this.activeRunId = null\n }\n\n if (this.abortController === ac) {\n this.running = false\n this.abortController = null\n this.pendingToolMessages.clear()\n onAfterRun?.()\n\n if (!ac.signal.aborted && finalPhase) {\n this.updateSnapshot((state) => ({\n ...state,\n phase: finalPhase,\n error: finalError,\n }))\n }\n }\n\n this.runtimeLoop?.reset()\n }\n }\n\n protected abortWebRuntime(\n applyAbortState: (state: TState) => TState,\n cleanup?: () => void,\n ): void {\n this.abortController?.abort()\n this.running = false\n this.activeRunId = null\n this.clearPendingSurfacedMessages()\n this.clearPendingStreamingContent()\n this.pendingToolMessages.clear()\n cleanup?.()\n\n const loop = this.runtimeLoop\n if (loop) {\n try {\n loop.sendEvent({ type: \"OUTCOME_FAILURE\", error: \"Aborted by user\" })\n } catch {\n // The machine may already be in a final state.\n }\n }\n\n this.updateSnapshot((state) => applyAbortState(state))\n }\n\n private scheduleRuntimeDestroy(): void {\n if (this.pendingDestroyPromise) {\n this.inFlightRunPromise = this.pendingDestroyPromise\n return\n }\n\n const basePromise = this.inFlightRunPromise ?? Promise.resolve()\n const destroyPromise = basePromise\n .finally(() => super.destroy())\n .finally(() => {\n if (this.pendingDestroyPromise === destroyPromise) {\n this.pendingDestroyPromise = null\n }\n\n if (this.inFlightRunPromise === destroyPromise) {\n this.inFlightRunPromise = null\n }\n })\n\n this.pendingDestroyPromise = destroyPromise\n this.inFlightRunPromise = destroyPromise\n }\n\n protected resetWebRuntime(cleanup?: () => void): void {\n this.memory = null\n this.enforcer = null\n this.clearPendingSurfacedMessages()\n this.clearPendingStreamingContent()\n this.pendingToolMessages.clear()\n cleanup?.()\n\n this.scheduleRuntimeDestroy()\n\n this.store.resetSnapshot()\n }\n\n protected async clearWebRuntimeState(cleanup?: () => void): Promise<void> {\n this.memory = null\n this.enforcer = null\n this.activeRunId = null\n this.clearPendingSurfacedMessages()\n this.clearPendingStreamingContent()\n this.pendingToolMessages.clear()\n cleanup?.()\n }\n\n protected defaultWebAbort(): void {\n this.abortWebRuntime((state) => applyIdleWebAgentState(state))\n }\n\n protected defaultWebReset(): void {\n this.defaultWebAbort()\n this.resetWebRuntime()\n }\n\n protected override async onDestroy(): Promise<void> {\n await this.clearWebRuntimeState()\n }\n\n protected async executeDefaultWebRun(\n userTask: string,\n options?: {\n shouldSurfaceAssistantContent?: (reasoning?: string, rawContent?: string) => boolean\n onNonContinueStep?: () => Promise<void>\n onBeforeRun?: () => void\n onAfterRun?: () => void\n },\n ): Promise<void> {\n await this.startSerializedRun((runId) =>\n this.executeWebLoopRun({\n runId,\n userTask,\n stepInput: { runId } as TStepInput,\n onBeforeRun: options?.onBeforeRun,\n createUserMessage: () => ({\n id: this.nextMessageId(),\n role: \"user\" as const,\n content: userTask,\n timestamp: Date.now(),\n }) as TMessage,\n applyInitialState: (state, userMessage) =>\n applyInitialWebAgentRunState(state, userMessage),\n onStepCompleted: async (step) => {\n const assistantContent = step.parsed.reasoning?.trim()\n const rawAssistantContent = step.parsed.rawContent?.trim()\n const pendingSurfacedMessages = this.takePendingSurfacedMessagesForRun(runId)\n const pendingToolMessages = this.pendingToolMessages.takeForRun(\n runId,\n (activeRunId) => this.isRunActive(activeRunId),\n )\n\n const shouldSurface = step.result.outcome !== \"failure\"\n && (options?.shouldSurfaceAssistantContent\n ? options.shouldSurfaceAssistantContent(assistantContent, rawAssistantContent)\n : Boolean(rawAssistantContent || assistantContent))\n\n const newMessages: TMessage[] = []\n\n if (shouldSurface) {\n newMessages.push({\n id: this.nextMessageId(),\n role: \"assistant\" as const,\n content: assistantContent || rawAssistantContent || \"\",\n reasoning: assistantContent,\n rawContent: rawAssistantContent,\n timestamp: Date.now(),\n } as TMessage)\n }\n\n newMessages.push(...pendingSurfacedMessages, ...pendingToolMessages)\n\n this.updateSnapshotForRun(runId, (state) => ({\n ...state,\n ...(newMessages.length > 0\n ? { messages: [...state.messages, ...newMessages] }\n : {}),\n streamingContent: \"\",\n activeToolName: null,\n }))\n\n if (step.result.outcome !== \"continue\" && options?.onNonContinueStep) {\n await options.onNonContinueStep()\n }\n },\n onAfterRun: options?.onAfterRun,\n }))\n }\n}","export type RuntimeSubscriber = () => void\n\nexport type RuntimeSnapshotUpdater<TSnapshot> =\n | TSnapshot\n | ((current: TSnapshot) => TSnapshot)\n\nexport interface RuntimeStore<TSnapshot> {\n subscribe: (subscriber: RuntimeSubscriber) => () => void\n getSnapshot: () => TSnapshot\n getServerSnapshot: () => TSnapshot\n setSnapshot: (updater: RuntimeSnapshotUpdater<TSnapshot>) => TSnapshot\n resetSnapshot: () => TSnapshot\n}\n\nexport interface RuntimeController<\n TSnapshot,\n TActions extends Record<string, unknown>,\n TRefs extends Record<string, unknown> = {},\n> {\n store: RuntimeStore<TSnapshot>\n actions: TActions\n refs: TRefs\n}\n\nexport function createRuntimeStore<TSnapshot>(\n createInitialSnapshot: () => TSnapshot,\n): RuntimeStore<TSnapshot> {\n let snapshot = createInitialSnapshot()\n const subscribers = new Set<RuntimeSubscriber>()\n\n const notifySubscribers = () => {\n for (const subscriber of subscribers) {\n subscriber()\n }\n }\n\n return {\n subscribe(subscriber) {\n subscribers.add(subscriber)\n return () => {\n subscribers.delete(subscriber)\n }\n },\n getSnapshot() {\n return snapshot\n },\n getServerSnapshot() {\n return snapshot\n },\n setSnapshot(updater) {\n snapshot = typeof updater === \"function\"\n ? (updater as (current: TSnapshot) => TSnapshot)(snapshot)\n : updater\n notifySubscribers()\n return snapshot\n },\n resetSnapshot() {\n snapshot = createInitialSnapshot()\n notifySubscribers()\n return snapshot\n },\n }\n}\n\nexport function defineRuntimeController<\n TSnapshot,\n TActions extends Record<string, unknown>,\n TRefs extends Record<string, unknown> = {},\n>(\n controller: RuntimeController<TSnapshot, TActions, TRefs>,\n): RuntimeController<TSnapshot, TActions, TRefs> {\n return controller\n}","export const DEFAULT_THREAD_AUTO_SCROLL_BOTTOM_THRESHOLD = 24\n\nexport type ScrollMetrics = {\n scrollHeight: number\n scrollTop: number\n clientHeight: number\n}\n\nexport function getDistanceFromBottom({\n scrollHeight,\n scrollTop,\n clientHeight,\n}: ScrollMetrics): number {\n return scrollHeight - scrollTop - clientHeight\n}\n\nexport function shouldAutoScrollThread(\n scrollMetrics: ScrollMetrics,\n threshold = DEFAULT_THREAD_AUTO_SCROLL_BOTTOM_THRESHOLD,\n): boolean {\n return getDistanceFromBottom(scrollMetrics) <= threshold\n}\n\nexport function getToolLogSummaryLine(content: string): string {\n for (const line of content.split(/\\r?\\n/)) {\n if (line.trim().length > 0) {\n return line\n }\n }\n\n return \"\"\n}\n\nexport function stripDiagnosticMessagePrefix(content: string): string {\n return content.replace(/^⚠️\\s+(?:ERROR|WARNING):\\s*/, \"\")\n}\n\nexport function getDiagnosticSummaryLine(content: string): string {\n const strippedContent = stripDiagnosticMessagePrefix(content)\n const summaryLine = getToolLogSummaryLine(strippedContent)\n\n return summaryLine.length > 0 ? summaryLine : getToolLogSummaryLine(content)\n}\n\nexport function buildToolLogRevealFrames(\n content: string,\n targetFrameCount = 40,\n): string[] {\n if (content.length === 0) {\n return [\"\"]\n }\n\n const sanitizedTargetFrameCount = Math.max(1, targetFrameCount)\n const targetCharsPerFrame = Math.max(\n 1,\n Math.ceil(content.length / sanitizedTargetFrameCount),\n )\n const segments = mergeStructuralToolLogSegments(\n splitToolLogRevealSegments(content),\n )\n const frames: string[] = []\n let pendingFrame = \"\"\n let revealedContent = \"\"\n\n for (const segment of segments) {\n if (\n pendingFrame.length > 0\n && pendingFrame.length + segment.length > targetCharsPerFrame\n ) {\n revealedContent += pendingFrame\n frames.push(revealedContent)\n pendingFrame = \"\"\n }\n\n pendingFrame += segment\n\n if (pendingFrame.length >= targetCharsPerFrame) {\n revealedContent += pendingFrame\n frames.push(revealedContent)\n pendingFrame = \"\"\n }\n }\n\n if (pendingFrame.length > 0) {\n revealedContent += pendingFrame\n frames.push(revealedContent)\n }\n\n if (frames.length === 0 || frames.at(-1) !== content) {\n frames.push(content)\n }\n\n return frames\n}\n\nfunction mergeStructuralToolLogSegments(segments: string[]): string[] {\n const mergedSegments: string[] = []\n\n for (const segment of segments) {\n const previousSegment = mergedSegments.at(-1)\n\n if (previousSegment && shouldMergeToolLogSegmentWithFollowing(previousSegment)) {\n mergedSegments[mergedSegments.length - 1] = previousSegment + segment\n continue\n }\n\n mergedSegments.push(segment)\n }\n\n return mergedSegments\n}\n\nfunction shouldMergeToolLogSegmentWithFollowing(segment: string): boolean {\n const trimmedSegment = segment.trim()\n\n if (trimmedSegment.length === 0) {\n return true\n }\n\n if (segment.startsWith(\"$ \")) {\n return true\n }\n\n return (\n trimmedSegment === \"{\"\n || trimmedSegment === \"[\"\n || trimmedSegment.endsWith(\"{\")\n || trimmedSegment.endsWith(\"[\")\n )\n}\n\nfunction splitToolLogRevealSegments(content: string): string[] {\n const segments: string[] = []\n let currentSegment = \"\"\n let inQuotedString = false\n let isEscaped = false\n\n for (const character of content) {\n currentSegment += character\n\n if (inQuotedString) {\n if (isEscaped) {\n isEscaped = false\n continue\n }\n\n if (character === \"\\\\\") {\n isEscaped = true\n continue\n }\n\n if (character === '\"') {\n inQuotedString = false\n }\n\n continue\n }\n\n if (character === '\"') {\n inQuotedString = true\n continue\n }\n\n if (\n character === \"\\n\"\n || character === \",\"\n || character === \"}\"\n || character === \"]\"\n ) {\n segments.push(currentSegment)\n currentSegment = \"\"\n }\n }\n\n if (currentSegment.length > 0) {\n segments.push(currentSegment)\n }\n\n return segments.length > 0 ? segments : [content]\n}","import type { ToolResult } from \"./types\"\n\nexport type WebSearchToolActionInput = {\n tool: \"BraveWebSearch\" | \"BochaWebSearch\"\n input: Record<string, unknown>\n}\n\ntype WebSearchToolActionDeps = {\n executeWebSearch: (tool: \"BraveWebSearch\" | \"BochaWebSearch\", input: Record<string, unknown>) => Promise<ToolResult>\n}\n\nexport function createWebSearchToolActions(deps: WebSearchToolActionDeps) {\n return {\n executeWebTool: async (input: WebSearchToolActionInput): Promise<ToolResult> => {\n if (input.tool !== \"BraveWebSearch\" && input.tool !== \"BochaWebSearch\") {\n throw new Error(`Unknown tool: ${String(input.tool)}`)\n }\n\n return deps.executeWebSearch(input.tool, input.input)\n },\n }\n}","/**\n * Base Tool class — all shared tools extend this.\n *\n * Mirrors the Hammer agent tool format so code is shared between\n * apps/hammer and apps/tauri via the DRY principle.\n *\n * Filesystem-aware tools should extend SystemTool directly, which adds\n * `validatePath()` on top of this base class.\n */\n\nimport type {\n ToolDefinition,\n ToolDefinitionMetadata,\n ToolResult,\n} from \"./types\"\nimport { buildToolUsageExample } from \"./tool-usage-examples\"\n\n// ---------------------------------------------------------------------------\n// Types (re-exported so consumers don't need a second import)\n// ---------------------------------------------------------------------------\n\n/** Tool parameter schema — same shape as ToolDefinition[\"parameters\"]. */\nexport type ToolSchema = ToolDefinition[\"parameters\"]\n\n/** Tool metadata — generic version (Hammer extends this with constrained categories). */\nexport interface ToolMetadata extends ToolDefinitionMetadata {\n requirements: string[]\n}\n\n// ---------------------------------------------------------------------------\n// Abstract base class\n// ---------------------------------------------------------------------------\n\n/**\n * Structural interface for any tool that can be registered in a ToolRegistry.\n * Using an interface lets both this class hierarchy and external class\n * hierarchies (e.g. @shared/tools) be stored in the same registry without\n * requiring a shared base-class inheritance chain.\n */\nexport interface ToolLike {\n execute(params: Record<string, any>): Promise<ToolResult>\n getName(): string\n getDescription(): string\n getSchema(): ToolSchema\n getUsageExample(): string | undefined\n getMetadata(): ToolMetadata\n toDefinition(): ToolDefinition\n}\n\nexport abstract class Tool implements ToolLike {\n protected workspaceRoot: string\n\n constructor(workspaceRoot: string = \"\") {\n this.workspaceRoot = workspaceRoot\n }\n\n /**\n * Get tool metadata — capabilities, categories, requirements.\n * Override in subclasses.\n */\n getMetadata(): ToolMetadata {\n return {\n category: \"general\",\n capabilities: [],\n requirements: [],\n }\n }\n\n /** Execute the tool — must be implemented by subclasses. */\n abstract execute(params: Record<string, any>): Promise<ToolResult>\n\n /** Get tool name. */\n abstract getName(): string\n\n /** Get tool description. */\n abstract getDescription(): string\n\n /** Get parameter schema. */\n abstract getSchema(): ToolSchema\n\n /** Get an explicit usage example shown in tool prompts. */\n getUsageExample(): string | undefined {\n return buildToolUsageExample({\n name: this.getName(),\n parameters: this.getSchema(),\n metadata: this.getMetadata(),\n })\n }\n\n /** Convert this tool instance to a ToolDefinition for LLM consumption. */\n toDefinition(): ToolDefinition {\n return {\n name: this.getName(),\n description: this.getDescription(),\n usageExample: this.getUsageExample(),\n parameters: this.getSchema(),\n metadata: this.getMetadata(),\n }\n }\n}\n","/**\n * Shared ToolRegistry infrastructure.\n *\n * This mirrors the Hammer and Magic registry shape: a real\n * Map<string, Tool> registry with registration, lookup, execution,\n * definition generation, and executor creation.\n */\n\nimport type { ToolCall, ToolDefinition, ToolResult } from \"./types\"\nimport {\n DEFAULT_RUN_COMMAND_REGISTRY,\n executeToolCallWithRunCommands,\n type RunCommandRegistry,\n type RunInvocationTarget,\n} from \"./run-command-registry\"\n\nimport { Tool, type ToolLike } from \"./Tool\"\n\ntype ToolExecutor = (toolCall: ToolCall) => Promise<ToolResult>\ntype BashExecutor = (command: string) => Promise<ToolResult>\ntype BackgroundBashExecutor = (command: string) => Promise<ToolResult>\n\nexport interface ToolRegistryMissingToolContext {\n name: string\n availableToolNames: string[]\n}\n\nexport interface ToolRegistryBeforeExecuteContext {\n name: string\n parameters: Record<string, any>\n registry: ToolRegistry\n}\n\nexport interface ToolRegistryOptions {\n tools?: Iterable<ToolLike>\n canExecute?: boolean | (() => boolean)\n executeBash?: BashExecutor\n executeBackgroundBash?: BackgroundBashExecutor\n runCommandRegistry?: RunCommandRegistry\n onMissingTool?: (\n context: ToolRegistryMissingToolContext,\n ) => Error | string\n beforeExecute?: (\n context: ToolRegistryBeforeExecuteContext,\n ) => Promise<ToolResult | void> | ToolResult | void\n}\n\nfunction isToolRegistryOptions(\n value: Iterable<ToolLike> | ToolRegistryOptions,\n): value is ToolRegistryOptions {\n if (!value || typeof value !== \"object\") {\n return false\n }\n\n return (\n \"tools\" in value ||\n \"canExecute\" in value ||\n \"executeBash\" in value ||\n \"executeBackgroundBash\" in value ||\n \"runCommandRegistry\" in value ||\n \"onMissingTool\" in value ||\n \"beforeExecute\" in value\n )\n}\n\nexport function createToolRegistry(\n tools: Iterable<ToolLike> = [],\n options: Omit<ToolRegistryOptions, \"tools\"> = {},\n): ToolRegistry {\n return new ToolRegistry({\n ...options,\n tools,\n })\n}\n\nexport class ToolRegistry {\n protected tools: Map<string, ToolLike>\n private canExecuteOverride?: boolean | (() => boolean)\n private bashExecutor?: BashExecutor\n private backgroundBashExecutor?: BackgroundBashExecutor\n private runCommandRegistry: RunCommandRegistry\n private onMissingTool?: ToolRegistryOptions[\"onMissingTool\"]\n private beforeExecute?: ToolRegistryOptions[\"beforeExecute\"]\n\n constructor(toolsOrOptions: Iterable<ToolLike> | ToolRegistryOptions = []) {\n this.tools = new Map()\n\n const options = isToolRegistryOptions(toolsOrOptions)\n ? toolsOrOptions\n : { tools: toolsOrOptions }\n\n this.canExecuteOverride = options.canExecute\n this.bashExecutor = options.executeBash\n this.backgroundBashExecutor = options.executeBackgroundBash\n this.runCommandRegistry = options.runCommandRegistry ?? DEFAULT_RUN_COMMAND_REGISTRY\n this.onMissingTool = options.onMissingTool\n this.beforeExecute = options.beforeExecute\n this.registerTools(options.tools ?? [])\n }\n\n registerTool(tool: ToolLike): void {\n this.tools.set(tool.getName(), tool)\n }\n\n registerTools(tools: Iterable<ToolLike>): void {\n for (const tool of tools) {\n this.registerTool(tool)\n }\n }\n\n replaceTools(tools: Iterable<ToolLike>): void {\n this.tools.clear()\n this.registerTools(tools)\n }\n\n hasTool(name: string): boolean {\n return this.tools.has(name)\n }\n\n getTool(name: string): ToolLike {\n const tool = this.tools.get(name)\n if (!tool) {\n throw this.buildMissingToolError(name)\n }\n return tool\n }\n\n protected buildMissingToolError(name: string): Error {\n const availableToolNames = Array.from(this.tools.keys()).sort((left, right) =>\n left.localeCompare(right),\n )\n\n if (this.onMissingTool) {\n const result = this.onMissingTool({\n name,\n availableToolNames,\n })\n return result instanceof Error ? result : new Error(result)\n }\n\n return new Error(\n `Tool not found: \"${name}\". Available tools: ${availableToolNames.join(\", \")}`,\n )\n }\n\n getTools(): ToolLike[] {\n return Array.from(this.tools.values())\n }\n\n async executeTool(\n name: string,\n parameters: Record<string, any>,\n ): Promise<ToolResult> {\n return this.executeConcreteTool(name, parameters)\n }\n\n async executeToolCall(toolCall: ToolCall): Promise<ToolResult> {\n return executeToolCallWithRunCommands(\n this.createConcreteRuntime(),\n toolCall,\n this.runCommandRegistry,\n )\n }\n\n private createConcreteRuntime() {\n return {\n getToolDefinitions: () => this.getToolDefinitions(),\n executeTool: (name: string, parameters: Record<string, any>) =>\n this.executeConcreteTool(name, parameters),\n executeBash: this.bashExecutor,\n executeBackgroundBash: this.backgroundBashExecutor,\n }\n }\n\n private async executeConcreteTool(\n name: string,\n parameters: Record<string, any>,\n ): Promise<ToolResult> {\n if (this.beforeExecute) {\n const result = await this.beforeExecute({\n name,\n parameters,\n registry: this,\n })\n\n if (result !== undefined) {\n return result\n }\n }\n\n return this.getTool(name).execute(parameters)\n }\n\n getToolDefinitions(): ToolDefinition[] {\n return this.getTools().map((tool) => tool.toDefinition())\n }\n\n getToolNames(): string[] {\n return Array.from(this.tools.keys())\n }\n\n hasTools(): boolean {\n return this.tools.size > 0\n }\n\n canExecuteBash(): boolean {\n return typeof this.bashExecutor === \"function\"\n }\n\n canExecuteBackgroundBash(): boolean {\n return typeof this.backgroundBashExecutor === \"function\"\n }\n\n getAvailableRunTargets(): readonly RunInvocationTarget[] {\n return this.runCommandRegistry.getAllowedTargets(this.createConcreteRuntime())\n }\n\n getRunCommandRegistry(): RunCommandRegistry {\n return this.runCommandRegistry\n }\n\n canExecute(): boolean {\n if (typeof this.canExecuteOverride === \"function\") {\n return this.canExecuteOverride()\n }\n\n if (typeof this.canExecuteOverride === \"boolean\") {\n return this.canExecuteOverride\n }\n\n return this.hasTools() || this.canExecuteBash() || this.canExecuteBackgroundBash()\n }\n\n createExecutor(): ToolExecutor {\n return async (toolCall: ToolCall): Promise<ToolResult> => {\n try {\n return await this.executeToolCall(toolCall)\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n }\n }\n }\n }\n}\n","import type { ToolDefinition, ToolResult } from \"./types\"\n\nimport { Tool, type ToolMetadata } from \"./Tool\"\n\nexport type ProxyToolExecutor = (\n parameters: Record<string, any>,\n definition: ToolDefinition,\n) => Promise<ToolResult>\n\n/**\n * Shared adapter for exposing a ToolDefinition as a concrete Tool while\n * delegating execution across a runtime boundary.\n */\nexport class ProxyTool extends Tool {\n private definition: ToolDefinition\n private executor: ProxyToolExecutor\n\n constructor(\n definition: ToolDefinition,\n executor: ProxyToolExecutor,\n ) {\n super()\n this.definition = definition\n this.executor = executor\n }\n\n getName(): string {\n return this.definition.name\n }\n\n getDescription(): string {\n return this.definition.description\n }\n\n getSchema(): ToolDefinition[\"parameters\"] {\n return this.definition.parameters\n }\n\n override getMetadata(): ToolMetadata {\n const baseMetadata = super.getMetadata()\n const metadata = this.definition.metadata\n\n return {\n category: metadata?.category ?? baseMetadata.category,\n capabilities: metadata?.capabilities ?? baseMetadata.capabilities,\n requirements: metadata?.requirements ?? baseMetadata.requirements,\n ...(metadata?.memory ? { memory: metadata.memory } : {}),\n ...(metadata?.source ? { source: metadata.source } : {}),\n ...(metadata?.mcpServerName\n ? { mcpServerName: metadata.mcpServerName }\n : {}),\n }\n }\n\n async execute(parameters: Record<string, any>): Promise<ToolResult> {\n return this.executor(parameters, this.definition)\n }\n}","import type { AgentMemoryLayer } from \"./agent-memory-layer\"\r\nimport type { LLMClient } from \"./llm-client\"\r\nimport type {\r\n ChatMessage,\r\n LLMClientResponse,\r\n} from \"./types\"\r\n\r\nexport interface ToolLoopStepExecutorResponse {\r\n content: string\r\n finishReason: string\r\n usage?: LLMClientResponse[\"usage\"]\r\n}\r\n\r\nexport interface ToolLoopStepExecutorCallbacks {\r\n onMessagesBuilt?(messages: ChatMessage[]): void\r\n onToken?(token: string): void\r\n onComplete?(response: ToolLoopStepExecutorResponse): void\r\n onStreamError?(error: Error): void\r\n onLog?(message: string, level: \"info\" | \"warn\" | \"error\"): void\r\n}\r\n\r\nexport interface ToolLoopStepExecutorOptions<TResult> {\r\n llmClient: LLMClient\r\n memoryLayer: Pick<AgentMemoryLayer, \"buildMessages\">\r\n systemPrompt: string\r\n temperature: number\r\n maxTokens: number\r\n frequencyPenalty?: number\r\n presencePenalty?: number\r\n callbacks?: ToolLoopStepExecutorCallbacks\r\n parseResponse(response: {\r\n content: string\r\n finishReason: string\r\n usage?: LLMClientResponse[\"usage\"]\r\n messages: ChatMessage[]\r\n }): TResult\r\n}\r\n\r\nexport interface ToolLoopStepExecutionResult<TResult> {\r\n messages: ChatMessage[]\r\n response: ToolLoopStepExecutorResponse\r\n parsed: TResult\r\n}\r\n\r\nexport async function executeToolLoopStep<TResult>(\r\n options: ToolLoopStepExecutorOptions<TResult>,\r\n): Promise<ToolLoopStepExecutionResult<TResult>> {\r\n const messages = options.memoryLayer.buildMessages(options.systemPrompt)\r\n options.callbacks?.onMessagesBuilt?.(messages)\r\n\r\n const llmResponse = await options.llmClient.chat(\r\n {\r\n messages,\r\n temperature: options.temperature,\r\n maxTokens: options.maxTokens,\r\n stream: true,\r\n frequencyPenalty: options.frequencyPenalty,\r\n presencePenalty: options.presencePenalty,\r\n },\r\n {\r\n onToken: options.callbacks?.onToken,\r\n onError: options.callbacks?.onStreamError,\r\n onLog: options.callbacks?.onLog,\r\n },\r\n )\r\n\r\n const response: ToolLoopStepExecutorResponse = {\r\n content: llmResponse.content,\r\n finishReason: llmResponse.finishReason,\r\n usage: llmResponse.usage,\r\n }\r\n\r\n options.callbacks?.onComplete?.(response)\r\n\r\n return {\r\n messages,\r\n response,\r\n parsed: options.parseResponse({\r\n ...response,\r\n messages,\r\n }),\r\n }\r\n}"]}
|