@raegent/earshot 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/main.js +1917 -1300
  2. package/dist/main.js.map +26 -21
  3. package/package.json +1 -1
package/dist/main.js.map CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../core/src/context/agents-md.ts", "../../providers/src/auth.ts", "../../providers/src/paths.ts", "../../providers/src/catalog/supported.ts", "../../providers/src/catalog/index.ts", "../../providers/src/registry.ts", "../../providers/src/wire/adapters.ts", "../../providers/src/errors.ts", "../../providers/src/wire/ai-sdk-prompt.ts", "../../providers/src/wire/ai-sdk.ts", "../../providers/src/wire/ollama.ts", "../../providers/src/builtin.ts", "../../providers/src/oauth/loopback.ts", "../../providers/src/oauth/openrouter.ts", "../../providers/src/oauth/pkce.ts", "../../core/src/context/shapers.ts", "../../core/src/context/compaction.ts", "../../core/src/context/system-prompt.ts", "../../core/src/memory/store.ts", "../../core/src/model.ts", "../../core/src/tools/fs-paths.ts", "../../core/src/tools/glob-match.ts", "../../core/src/permissions/rules.ts", "../../core/src/permissions/engine.ts", "../../core/src/permissions/settings.ts", "../../core/src/plan/index.ts", "../../core/src/scope/contract.ts", "../../core/src/skills/discover.ts", "../../core/src/skills/frontmatter.ts", "../../core/src/tools/types.ts", "../../core/src/tools/schema.ts", "../../core/src/tools/ask-user.ts", "../../core/src/tools/bash.ts", "../../core/src/tools/exec.ts", "../../core/src/tools/shell.ts", "../../core/src/tools/declare-scope.ts", "../../core/src/tools/edit.ts", "../../core/src/tools/diff.ts", "../../core/src/tools/glob.ts", "../../core/src/tools/walk.ts", "../../core/src/tools/grep.ts", "../../core/src/tools/ls.ts", "../../core/src/tools/read.ts", "../../core/src/tools/task.ts", "../../core/src/tools/todo.ts", "../../core/src/tools/web-fetch.ts", "../../core/src/tools/write.ts", "../../core/src/tools/jobs.ts", "../../core/src/tools/skill.ts", "../../core/src/tools/tool-search.ts", "../../core/src/tools/index.ts", "../../core/src/verify/detect.ts", "../../core/src/verify/run.ts", "../../core/src/agent.ts", "../../core/src/hooks/config.ts", "../../core/src/hooks/run.ts", "../../core/src/hooks/runner.ts", "../../core/src/memory/detect.ts", "../../core/src/undo/shadow-git.ts", "../../core/src/session/store.ts", "../../core/src/version.ts", "../../core/src/session/repair.ts", "../../core/src/session/create.ts", "../src/args.ts", "../../acp/src/events.ts", "../../acp/src/server.ts", "../src/extensions/index.ts", "../../mcp/src/client.ts", "../../mcp/src/config.ts", "../../mcp/src/tool.ts", "../../mcp/src/manager.ts", "../src/extensions/modules.ts", "../src/commands/acp.ts", "../src/commands/auth.ts", "../src/commands/doctor.ts", "../src/commands/extensions.ts", "../src/budget.ts", "../src/image.ts", "../src/output.ts", "../src/commands/headless.ts", "../../tui/src/app.tsx", "../../tui/src/commands.ts", "../../tui/src/components/command-menu.tsx", "../../tui/src/theme.ts", "../../tui/src/components/markdown.tsx", "../../tui/src/components/memory-capture.tsx", "../../tui/src/components/permission.tsx", "../../tui/src/components/diff.tsx", "../../tui/src/components/question.tsx", "../../tui/src/components/text-input.tsx", "../../tui/src/components/status.tsx", "../../tui/src/components/tool-block.tsx", "../../tui/src/onboarding.tsx", "../../tui/src/run.tsx", "../src/onboard.ts", "../src/commands/interactive.ts", "../src/commands/mcp.ts", "../src/commands/models.ts", "../src/commands/update.ts", "../src/index.ts", "../src/main.ts"],
3
+ "sources": ["../../core/src/context/agents-md.ts", "../../providers/src/auth.ts", "../../providers/src/paths.ts", "../../providers/src/catalog/supported.ts", "../../providers/src/catalog/index.ts", "../../providers/src/registry.ts", "../../providers/src/wire/adapters.ts", "../../providers/src/errors.ts", "../../providers/src/wire/ai-sdk-prompt.ts", "../../providers/src/wire/ai-sdk.ts", "../../providers/src/wire/ollama.ts", "../../providers/src/builtin.ts", "../../providers/src/oauth/loopback.ts", "../../providers/src/oauth/openrouter.ts", "../../providers/src/oauth/pkce.ts", "../../providers/src/types.ts", "../../core/src/context/shapers.ts", "../../core/src/context/compaction.ts", "../../core/src/context/system-prompt.ts", "../../core/src/memory/store.ts", "../../core/src/model.ts", "../../core/src/tools/fs-paths.ts", "../../core/src/tools/glob-match.ts", "../../core/src/permissions/rules.ts", "../../core/src/permissions/engine.ts", "../../core/src/permissions/settings.ts", "../../core/src/plan/index.ts", "../../core/src/scope/contract.ts", "../../core/src/skills/discover.ts", "../../core/src/skills/frontmatter.ts", "../../core/src/tools/types.ts", "../../core/src/tools/schema.ts", "../../core/src/tools/ask-user.ts", "../../core/src/tools/bash.ts", "../../core/src/tools/exec.ts", "../../core/src/tools/shell.ts", "../../core/src/tools/declare-scope.ts", "../../core/src/tools/edit.ts", "../../core/src/tools/diff.ts", "../../core/src/tools/glob.ts", "../../core/src/tools/walk.ts", "../../core/src/tools/grep.ts", "../../core/src/tools/ls.ts", "../../core/src/tools/read.ts", "../../core/src/tools/task.ts", "../../core/src/tools/todo.ts", "../../core/src/tools/web-fetch.ts", "../../core/src/tools/write.ts", "../../core/src/tools/jobs.ts", "../../core/src/tools/skill.ts", "../../core/src/tools/tool-search.ts", "../../core/src/tools/index.ts", "../../core/src/verify/detect.ts", "../../core/src/verify/run.ts", "../../core/src/agent.ts", "../../core/src/hooks/config.ts", "../../core/src/hooks/run.ts", "../../core/src/hooks/runner.ts", "../../core/src/memory/detect.ts", "../../core/src/undo/shadow-git.ts", "../../core/src/session/store.ts", "../../core/src/version.ts", "../../core/src/session/repair.ts", "../../core/src/session/create.ts", "../src/args.ts", "../../acp/src/events.ts", "../../acp/src/server.ts", "../src/extensions/index.ts", "../../mcp/src/client.ts", "../../mcp/src/config.ts", "../../mcp/src/tool.ts", "../../mcp/src/manager.ts", "../src/extensions/modules.ts", "../src/commands/acp.ts", "../src/commands/auth.ts", "../src/commands/doctor.ts", "../src/commands/extensions.ts", "../src/budget.ts", "../src/image.ts", "../src/output.ts", "../src/commands/headless.ts", "../../tui/src/app.tsx", "../../tui/src/commands.ts", "../../tui/src/components/activity.tsx", "../../tui/src/theme.ts", "../../tui/src/components/command-menu.tsx", "../../tui/src/components/markdown.tsx", "../../tui/src/components/memory-capture.tsx", "../../tui/src/components/permission.tsx", "../../tui/src/components/diff.tsx", "../../tui/src/components/question.tsx", "../../tui/src/components/text-input.tsx", "../../tui/src/components/reasoning-picker.tsx", "../../tui/src/components/status.tsx", "../../tui/src/components/tool-block.tsx", "../../tui/src/onboarding.tsx", "../../tui/src/sessions.tsx", "../../tui/src/run.tsx", "../src/onboard.ts", "../src/commands/interactive.ts", "../src/commands/mcp.ts", "../src/commands/models.ts", "../src/commands/sessions.ts", "../src/commands/update.ts", "../src/index.ts", "../src/main.ts"],
4
4
  "sourcesContent": [
5
5
  "import { readFile, stat } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { dirname, join, parse, relative, sep } from 'node:path';\nimport { configDir } from '@earshot/providers';\n\n/** Checked in each directory, in order. The first that exists in a directory wins. */\nexport const MEMORY_FILENAMES = ['AGENTS.md', 'CLAUDE.md'];\n\nexport interface MemoryFile {\n path: string;\n content: string;\n /** `user` for the one in the config directory, `project` for the rest. */\n scope: 'user' | 'project';\n}\n\nasync function readIfPresent(path: string): Promise<string | undefined> {\n const info = await stat(path).catch(() => undefined);\n if (!info?.isFile()) return undefined;\n const content = await readFile(path, 'utf8').catch(() => undefined);\n return content?.trim() === '' ? undefined : content;\n}\n\nasync function readDirectory(dir: string): Promise<{ path: string; content: string } | undefined> {\n for (const name of MEMORY_FILENAMES) {\n const path = join(dir, name);\n const content = await readIfPresent(path);\n // AGENTS.md wins over CLAUDE.md in the same directory rather than both being\n // loaded: a project that has both almost always has one as a pointer to the\n // other, and concatenating them duplicates every instruction.\n if (content !== undefined) return { path, content };\n }\n return undefined;\n}\n\n/** Where the walk upward stops: a repository root, or the filesystem root. */\nasync function isBoundary(dir: string): Promise<boolean> {\n return (await stat(join(dir, '.git')).catch(() => undefined)) !== undefined;\n}\n\n/**\n * Collects instruction files from the config directory and from every directory\n * between the repository root and `cwd`.\n *\n * Ordered outermost-first so the nearest file is read last. Nothing here resolves\n * a conflict between two files: they are concatenated, and a model reading two\n * instructions on the same subject takes the later one. Making \"nearest wins\"\n * mechanical would mean parsing prose, which is not something to get subtly wrong.\n */\nexport async function loadMemoryFiles(cwd: string): Promise<MemoryFile[]> {\n const files: MemoryFile[] = [];\n\n const global = await readDirectory(configDir());\n if (global) files.push({ ...global, scope: 'user' });\n\n const chain: string[] = [];\n let dir = cwd;\n const home = homedir();\n const { root } = parse(cwd);\n\n while (true) {\n chain.push(dir);\n if (await isBoundary(dir)) break;\n // Never walks past the home directory: above it the files belong to other\n // projects, or to no project at all.\n if (dir === root || dir === home) break;\n const parent = dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n\n for (const directory of chain.reverse()) {\n const found = await readDirectory(directory);\n if (found) files.push({ ...found, scope: 'project' });\n }\n return files;\n}\n\n/** Renders loaded files into the system prompt, each labelled with its path. */\nexport function renderMemory(files: MemoryFile[], cwd: string): string {\n if (files.length === 0) return '';\n const sections = files.map((file) => {\n const label = file.scope === 'user' ? file.path : displayRelative(cwd, file.path);\n return `<memory path=\"${label}\">\\n${file.content.trim()}\\n</memory>`;\n });\n return (\n 'Instructions from the user and this project. They take precedence over your ' +\n 'defaults. Where two conflict, the later one is nearer to the working directory ' +\n `and wins.\\n\\n${sections.join('\\n\\n')}`\n );\n}\n\nfunction displayRelative(cwd: string, path: string): string {\n const rel = relative(cwd, path);\n return rel.startsWith('..') ? path : rel.split(sep).join('/');\n}\n",
6
6
  "import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport { authFile } from './paths.ts';\nimport type { AuthSpec, Credentials, Provider } from './types.ts';\n\ntype AuthFileShape = { version: 1; providers: Record<string, Credentials> };\n\n/**\n * Credential store. On-disk file is 0600 and written atomically; OAuth refreshes\n * take a lock file so two concurrent earshot processes cannot clobber each other.\n */\nexport class AuthStore {\n #path: string;\n #cache: AuthFileShape | undefined;\n\n constructor(path = authFile()) {\n this.#path = path;\n }\n\n async #load(): Promise<AuthFileShape> {\n if (this.#cache) return this.#cache;\n try {\n const raw = await readFile(this.#path, 'utf8');\n const parsed = JSON.parse(raw) as AuthFileShape;\n this.#cache = parsed.providers ? parsed : { version: 1, providers: {} };\n } catch {\n this.#cache = { version: 1, providers: {} };\n }\n return this.#cache;\n }\n\n async get(providerId: string): Promise<Credentials | undefined> {\n return (await this.#load()).providers[providerId];\n }\n\n async set(providerId: string, creds: Credentials): Promise<void> {\n const data = await this.#load();\n data.providers[providerId] = creds;\n await this.#flush(data);\n }\n\n async remove(providerId: string): Promise<void> {\n const data = await this.#load();\n delete data.providers[providerId];\n await this.#flush(data);\n }\n\n async #flush(data: AuthFileShape): Promise<void> {\n await mkdir(dirname(this.#path), { recursive: true, mode: 0o700 });\n const tmp = `${this.#path}.${process.pid}.tmp`;\n await writeFile(tmp, `${JSON.stringify(data, null, 2)}\\n`, { mode: 0o600 });\n await rename(tmp, this.#path);\n this.#cache = data;\n }\n}\n\nexport interface ResolveAuthOptions {\n /** From `--api-key` or equivalent; highest precedence. */\n cliApiKey?: string;\n env?: NodeJS.ProcessEnv;\n store?: AuthStore;\n}\n\n/**\n * Resolution order (plan §Auth resolution):\n * CLI flag -> env var -> auth.json -> provider-native ambient credentials.\n */\nexport async function resolveCredentials(\n provider: Provider,\n opts: ResolveAuthOptions = {},\n): Promise<Credentials | undefined> {\n const env = opts.env ?? process.env;\n if (opts.cliApiKey) return { type: 'api-key', apiKey: opts.cliApiKey };\n\n for (const name of envVarsOf(provider.auth)) {\n const value = env[name];\n if (value) return { type: 'api-key', apiKey: value };\n }\n\n const stored = await (opts.store ?? new AuthStore()).get(provider.id);\n if (stored) return stored;\n\n if (provider.auth.kind === 'ambient' || provider.auth.kind === 'none') {\n return { type: 'ambient' };\n }\n return undefined;\n}\n\nfunction envVarsOf(auth: AuthSpec): string[] {\n return 'envVars' in auth && auth.envVars ? auth.envVars : [];\n}\n",
@@ -17,16 +17,17 @@
17
17
  "import { createServer } from 'node:http';\nimport type { AddressInfo } from 'node:net';\n\nexport interface LoopbackResult {\n /** Where to send the browser back to. Only known once the port is bound. */\n redirectUri: string;\n /** Resolves with the query parameters of the first callback request. */\n code: Promise<URLSearchParams>;\n close(): void;\n}\n\nconst PAGE = (message: string) =>\n `<!doctype html><meta charset=\"utf-8\"><title>earshot</title>` +\n `<body style=\"font:16px system-ui;padding:3rem;max-width:32rem\">` +\n `<h1 style=\"font-size:1.2rem\">${message}</h1>` +\n `<p>You can close this tab and go back to your terminal.</p>`;\n\n/**\n * A one-shot loopback listener for an OAuth redirect.\n *\n * Bound to 127.0.0.1 on a port the OS picks, and closed as soon as it has the\n * one request it exists for. Not localhost: on a machine where that resolves to\n * ::1 first the provider's redirect and this listener end up on different\n * addresses, and the flow hangs with no error anywhere.\n */\nexport async function listenForCallback(timeoutMs = 300_000): Promise<LoopbackResult> {\n let settle: (params: URLSearchParams) => void = () => {};\n let fail: (error: Error) => void = () => {};\n const code = new Promise<URLSearchParams>((resolve, reject) => {\n settle = resolve;\n fail = reject;\n });\n\n const server = createServer((request, response) => {\n const url = new URL(request.url ?? '/', 'http://127.0.0.1');\n // Browsers ask for a favicon on the way past; answering it as the callback\n // would end the flow with no code in hand.\n if (url.pathname === '/favicon.ico') {\n response.writeHead(404).end();\n return;\n }\n const params = url.searchParams;\n const failed = params.get('error');\n response.writeHead(200, { 'content-type': 'text/html; charset=utf-8' });\n response.end(PAGE(failed ? `Sign-in failed: ${failed}` : 'Signed in to earshot.'));\n if (failed) fail(new Error(`the provider returned \"${failed}\"`));\n else settle(params);\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once('error', reject);\n server.listen(0, '127.0.0.1', resolve);\n });\n\n const timer = setTimeout(() => {\n fail(new Error('timed out waiting for the browser to come back'));\n server.close();\n }, timeoutMs);\n timer.unref();\n\n const { port } = server.address() as AddressInfo;\n const close = () => {\n clearTimeout(timer);\n server.close();\n };\n void code.then(close, close);\n\n return { redirectUri: `http://127.0.0.1:${port}/callback`, code, close };\n}\n",
18
18
  "import { spawn } from 'node:child_process';\nimport { platform } from 'node:os';\nimport type { Credentials } from '../types.ts';\nimport { listenForCallback } from './loopback.ts';\nimport { createPkcePair, type PkcePair } from './pkce.ts';\n\nconst AUTH_URL = 'https://openrouter.ai/auth';\nconst EXCHANGE_URL = 'https://openrouter.ai/api/v1/auth/keys';\n\nexport class OAuthError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'OAuthError';\n }\n}\n\nexport function authorizeUrl(redirectUri: string, pkce: PkcePair): string {\n const url = new URL(AUTH_URL);\n url.searchParams.set('callback_url', redirectUri);\n url.searchParams.set('code_challenge', pkce.challenge);\n url.searchParams.set('code_challenge_method', pkce.method);\n return url.toString();\n}\n\n/**\n * Trades the authorisation code for an OpenRouter key.\n *\n * OpenRouter's PKCE flow hands back a normal API key rather than a\n * refreshable token, so what gets stored is `api-key` credentials like any\n * other - there is no refresh path to get wrong, and revoking it is something\n * the user does on their own dashboard rather than something earshot manages.\n */\nexport async function exchangeCode(\n code: string,\n pkce: PkcePair,\n doFetch: typeof fetch = fetch,\n): Promise<Credentials> {\n const response = await doFetch(EXCHANGE_URL, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n code,\n code_verifier: pkce.verifier,\n code_challenge_method: pkce.method,\n }),\n }).catch((error: Error) => {\n throw new OAuthError(`could not reach OpenRouter: ${error.message}`);\n });\n\n const body = (await response.json().catch(() => undefined)) as { key?: unknown } | undefined;\n if (!response.ok) {\n throw new OAuthError(\n `OpenRouter refused the code (${response.status}). Start again with \\`earshot auth login openrouter\\`.`,\n );\n }\n if (typeof body?.key !== 'string' || body.key === '') {\n throw new OAuthError('OpenRouter returned no key');\n }\n return { type: 'api-key', apiKey: body.key };\n}\n\nexport interface LoginOptions {\n /** Called with the URL, so a caller can print it as well as open it. */\n onUrl?: (url: string) => void;\n openBrowser?: boolean;\n fetch?: typeof fetch;\n timeoutMs?: number;\n}\n\n/**\n * The whole flow: bind a loopback port, send the user to OpenRouter, wait for\n * the redirect, exchange the code.\n *\n * The URL is always printed, not only opened. A browser that fails to launch -\n * over SSH, in a container, on a machine with no default handler - is the\n * common case for a terminal tool, and a flow that only opens one leaves the\n * user with nothing to do.\n */\nexport async function loginToOpenRouter(options: LoginOptions = {}): Promise<Credentials> {\n const pkce = createPkcePair();\n const listener = await listenForCallback(options.timeoutMs ?? 300_000);\n\n try {\n const url = authorizeUrl(listener.redirectUri, pkce);\n options.onUrl?.(url);\n if (options.openBrowser !== false) openBrowser(url);\n\n const params = await listener.code;\n const code = params.get('code');\n if (!code) throw new OAuthError('OpenRouter came back without an authorisation code');\n return await exchangeCode(code, pkce, options.fetch ?? fetch);\n } finally {\n listener.close();\n }\n}\n\n/** Best effort, and deliberately not awaited: the flow does not depend on it. */\nfunction openBrowser(url: string): void {\n const [command, args] =\n platform() === 'darwin'\n ? ['open', [url]]\n : platform() === 'win32'\n ? ['cmd', ['/c', 'start', '', url]]\n : ['xdg-open', [url]];\n try {\n const child = spawn(command, args, { stdio: 'ignore', detached: true });\n child.on('error', () => {});\n child.unref();\n } catch {\n // The URL was printed; that is the fallback.\n }\n}\n",
19
19
  "import { createHash, randomBytes } from 'node:crypto';\n\nexport interface PkcePair {\n verifier: string;\n challenge: string;\n method: 'S256';\n}\n\n/**\n * A PKCE verifier and its S256 challenge.\n *\n * The verifier never leaves this process until the code exchange, which is the\n * point of PKCE: the authorisation code that arrives on a loopback redirect is\n * useless to anything that did not generate the verifier, so another program\n * watching the callback cannot spend it.\n */\nexport function createPkcePair(): PkcePair {\n // 32 bytes of randomness, base64url'd to 43 characters - the shortest length\n // RFC 7636 allows, and the length every provider tested accepts.\n const verifier = base64url(randomBytes(32));\n const challenge = base64url(createHash('sha256').update(verifier).digest());\n return { verifier, challenge, method: 'S256' };\n}\n\nexport function base64url(buffer: Buffer): string {\n return buffer.toString('base64').replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n",
20
+ "/**\n * The unified wire model. Everything above this file (agent loop, TUI, sessions)\n * speaks only these types; each provider adapter translates them to and from its\n * own API. Provider-specific data that must survive a round-trip (OpenAI encrypted\n * reasoning, Gemini thought signatures, Anthropic cache breakpoints) rides along\n * opaquely in `providerMetadata` and is persisted verbatim in the transcript.\n */\n\nexport type JsonValue =\n | null\n | boolean\n | number\n | string\n | JsonValue[]\n | { [key: string]: JsonValue | undefined };\n\n/**\n * Namespaced by provider id. JSON-valued by construction: this is written to and\n * read back from the session JSONL verbatim, so anything unserialisable here would\n * silently break replay. Values may be `undefined` - providers do emit sparse\n * objects, and JSON.stringify drops those keys, which is the behaviour we want.\n */\nexport type ProviderMetadata = Record<string, Record<string, JsonValue | undefined>>;\n\n// ---------------------------------------------------------------------------\n// Messages\n// ---------------------------------------------------------------------------\n\nexport type Role = 'system' | 'user' | 'assistant' | 'tool';\n\nexport interface TextPart {\n type: 'text';\n text: string;\n providerMetadata?: ProviderMetadata;\n}\n\n/** Model-emitted thinking. `text` may be redacted/empty when the provider only\n * returns an opaque blob; the blob lives in providerMetadata and must be replayed. */\nexport interface ReasoningPart {\n type: 'reasoning';\n text: string;\n providerMetadata?: ProviderMetadata;\n}\n\nexport interface ImagePart {\n type: 'image';\n /** base64 payload or an https URL */\n data: string;\n mediaType: string;\n providerMetadata?: ProviderMetadata;\n}\n\nexport interface ToolCallPart {\n type: 'tool_call';\n toolCallId: string;\n toolName: string;\n input: unknown;\n providerMetadata?: ProviderMetadata;\n}\n\nexport interface ToolResultPart {\n type: 'tool_result';\n toolCallId: string;\n toolName: string;\n output: ToolResultOutput;\n isError?: boolean;\n providerMetadata?: ProviderMetadata;\n}\n\nexport type ToolResultOutput =\n | { type: 'text'; value: string }\n | { type: 'json'; value: unknown }\n | { type: 'content'; value: Array<TextPart | ImagePart> };\n\nexport type MessagePart = TextPart | ReasoningPart | ImagePart | ToolCallPart | ToolResultPart;\n\nexport interface Message {\n role: Role;\n content: MessagePart[];\n providerMetadata?: ProviderMetadata;\n}\n\n// ---------------------------------------------------------------------------\n// Requests\n// ---------------------------------------------------------------------------\n\nexport interface ToolDefinition {\n name: string;\n description: string;\n /** JSON Schema for the tool input. */\n inputSchema: Record<string, unknown>;\n}\n\nexport type ReasoningEffort = 'none' | 'low' | 'medium' | 'high' | 'xhigh';\nexport const REASONING_EFFORTS = ['none', 'low', 'medium', 'high', 'xhigh'] as const;\nexport function isReasoningEffort(value: unknown): value is ReasoningEffort {\n return typeof value === 'string' && REASONING_EFFORTS.includes(value as ReasoningEffort);\n}\n\nexport interface ModelRequest {\n modelId: string;\n system?: string;\n messages: Message[];\n tools?: ToolDefinition[];\n toolChoice?: 'auto' | 'none' | 'required';\n maxOutputTokens?: number;\n temperature?: number;\n reasoningEffort?: ReasoningEffort;\n abortSignal?: AbortSignal;\n /** Escape hatch: merged into the provider payload after transforms. */\n providerOptions?: ProviderMetadata;\n}\n\n// ---------------------------------------------------------------------------\n// Streaming\n// ---------------------------------------------------------------------------\n\nexport interface Usage {\n inputTokens: number;\n outputTokens: number;\n reasoningTokens?: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n}\n\nexport type FinishReason =\n | 'stop'\n | 'length'\n | 'tool_calls'\n | 'content_filter'\n | 'refusal'\n | 'abort'\n | 'error';\n\nexport type StreamEvent =\n | { type: 'text_delta'; text: string }\n | { type: 'reasoning_delta'; text: string; providerMetadata?: ProviderMetadata }\n | { type: 'tool_call_start'; toolCallId: string; toolName: string }\n | { type: 'tool_call_delta'; toolCallId: string; argsTextDelta: string }\n | {\n type: 'tool_call_end';\n toolCallId: string;\n toolName: string;\n input: unknown;\n providerMetadata?: ProviderMetadata;\n }\n | { type: 'usage'; usage: Usage }\n | {\n type: 'finish';\n reason: FinishReason;\n usage: Usage;\n /** The fully assembled assistant message, ready to append to history. */\n message: Message;\n }\n | { type: 'error'; error: EarshotError };\n\nexport interface EarshotError {\n kind:\n | 'auth'\n | 'rate_limit'\n | 'context_overflow'\n | 'invalid_request'\n | 'server'\n | 'network'\n | 'abort'\n | 'unknown';\n message: string;\n retryable: boolean;\n status?: number;\n cause?: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Models and providers\n// ---------------------------------------------------------------------------\n\nexport interface ModelCost {\n /** USD per million tokens. */\n input: number;\n output: number;\n cacheRead?: number;\n cacheWrite?: number;\n}\n\nexport interface ModelCapabilities {\n tools: boolean;\n vision: boolean;\n reasoning: boolean;\n /** Provider requires reasoning blocks to be replayed verbatim. */\n reasoningReplay?: boolean;\n}\n\nexport interface Model {\n id: string;\n providerId: string;\n name: string;\n contextWindow: number;\n maxOutputTokens: number;\n cost?: ModelCost;\n capabilities: ModelCapabilities;\n /** Which wire adapter serves this model. */\n api: WireApiKind;\n releaseDate?: string;\n}\n\nexport type WireApiKind =\n | 'anthropic-messages'\n | 'openai-responses'\n | 'openai-completions'\n | 'openai-codex-responses'\n | 'google-generative-ai'\n | 'google-vertex'\n | 'bedrock-converse'\n | 'azure-openai'\n | 'ollama-native';\n\n/** How credentials are obtained for a provider. */\nexport type AuthSpec =\n | { kind: 'none' }\n | { kind: 'api-key'; envVars: string[]; helpUrl?: string }\n | { kind: 'oauth'; flow: 'pkce'; envVars?: string[]; helpUrl?: string }\n | { kind: 'ambient'; description: string };\n\nexport interface Credentials {\n type: 'api-key' | 'oauth' | 'ambient';\n apiKey?: string;\n accessToken?: string;\n refreshToken?: string;\n expiresAt?: number;\n extra?: Record<string, unknown>;\n}\n\n/** A wire adapter: the only thing that actually talks HTTP. */\nexport interface WireApi {\n kind: WireApiKind;\n stream(req: ModelRequest, ctx: WireContext): AsyncIterable<StreamEvent>;\n}\n\nexport interface WireContext {\n baseUrl?: string;\n credentials: Credentials;\n headers?: Record<string, string>;\n fetch?: typeof fetch;\n}\n\n/** A request transform, applied in order before the wire adapter sees the request. */\nexport interface Transform {\n name: string;\n apply(req: ModelRequest, model: Model): ModelRequest;\n}\n\nexport interface Provider {\n id: string;\n name: string;\n auth: AuthSpec;\n /** Default base URL; overridable per provider in config. */\n baseUrl?: string;\n api: WireApiKind | ((model: Model) => WireApiKind);\n models(): Model[];\n /** Live model discovery (Ollama /api/tags, OpenRouter /models, ...). */\n fetchModels?(ctx: WireContext): Promise<Model[]>;\n transforms?: Transform[];\n /** Shown in the TUI when the provider is unofficial or best-effort. */\n notice?: string;\n}\n",
20
21
  "import type { Message, MessagePart, ToolResultPart } from '@earshot/providers';\n\n/**\n * What runs over the message list before each model call, cheapest first.\n *\n * Every shaper is a pure function from messages to messages. Nothing here may\n * touch `Agent.history`: history is append-only because Anthropic rejects a\n * request containing edited thinking blocks, so shaping produces the array sent\n * on this one request and leaves the transcript alone.\n */\nexport interface ShaperOptions {\n /** Longest a single tool result may be before it is truncated. */\n maxResultChars: number;\n /** Tool results from batches older than this are reduced to a stub. */\n keepDetailedBatches: number;\n /** Longest a stub may be. */\n stubChars: number;\n}\n\nexport const DEFAULT_SHAPER_OPTIONS: ShaperOptions = {\n maxResultChars: 20_000,\n keepDetailedBatches: 6,\n stubChars: 200,\n};\n\n/**\n * Rough token count.\n *\n * Four characters per token is wrong for every tokenizer and close enough for\n * all three uses here - deciding when to compact, drawing a percentage, and\n * ordering shapers. Being exact would mean shipping a tokenizer per provider to\n * make a progress bar one percent more accurate.\n */\nexport function estimateTokens(messages: Message[], system = ''): number {\n let chars = system.length;\n for (const message of messages) {\n for (const part of message.content) chars += partChars(part);\n // Role, delimiters and tool-call framing the provider adds around each part.\n chars += 16;\n }\n return Math.ceil(chars / 4);\n}\n\nfunction partChars(part: MessagePart): number {\n switch (part.type) {\n case 'text':\n case 'reasoning':\n return part.text.length;\n case 'tool_call':\n return part.toolName.length + JSON.stringify(part.input ?? null).length;\n case 'tool_result':\n return part.toolName.length + outputText(part).length;\n // An image costs tokens by dimension, which we do not have here. A flat\n // estimate keeps it from reading as free, which is the failure that matters.\n case 'image':\n return 4000;\n default:\n return 0;\n }\n}\n\n/** The text of a tool result, whatever shape the output took. */\nexport function outputText(part: ToolResultPart): string {\n const { output } = part;\n switch (output.type) {\n case 'text':\n return output.value;\n case 'json':\n return JSON.stringify(output.value);\n case 'content':\n return output.value\n .map((item) => (item.type === 'text' ? item.text : `[${item.mediaType}]`))\n .join('\\n');\n default:\n return '';\n }\n}\n\nfunction withText(part: ToolResultPart, text: string): ToolResultPart {\n return { ...part, output: { type: 'text', value: text } };\n}\n\n/**\n * Caps one oversized result rather than dropping it.\n *\n * The head and the tail are kept and the middle is elided: a 200k-line grep is\n * useless in full, but its first hits and the total at the end are exactly what\n * the model needs, and keeping only the head loses the summary line that most\n * tools print last.\n */\nexport function capResults(messages: Message[], options: ShaperOptions): Message[] {\n return messages.map((message) => {\n if (message.role !== 'tool') return message;\n let changed = false;\n const content = message.content.map((part) => {\n if (part.type !== 'tool_result') return part;\n const text = outputText(part);\n if (text.length <= options.maxResultChars) return part;\n changed = true;\n const half = Math.floor((options.maxResultChars - 80) / 2);\n const dropped = text.length - half * 2;\n return withText(\n part,\n `${text.slice(0, half)}\\n\\n... ${dropped} characters elided by earshot ...\\n\\n${text.slice(-half)}`,\n );\n });\n return changed ? { ...message, content } : message;\n });\n}\n\n/**\n * Replaces the body of older tool results with a one-line stub.\n *\n * The result *part* stays: a provider rejects the next request if an assistant\n * tool call has no matching result, so pruning may only shrink a result, never\n * remove it. Recent batches are left intact because that is the work the model\n * is still reasoning about.\n */\nexport function pruneResults(messages: Message[], options: ShaperOptions): Message[] {\n const toolMessages = messages.filter((message) => message.role === 'tool');\n const cutoff = toolMessages.length - options.keepDetailedBatches;\n if (cutoff <= 0) return messages;\n\n let seen = 0;\n return messages.map((message) => {\n if (message.role !== 'tool') return message;\n const index = seen++;\n if (index >= cutoff) return message;\n\n let changed = false;\n const content = message.content.map((part) => {\n if (part.type !== 'tool_result') return part;\n const text = outputText(part);\n if (text.length <= options.stubChars) return part;\n changed = true;\n const first = text.split('\\n', 1)[0]?.slice(0, options.stubChars) ?? '';\n return withText(\n part,\n `[${part.toolName} result from an earlier step, ${text.length} characters, elided]${\n first ? `\\n${first}` : ''\n }`,\n );\n });\n return changed ? { ...message, content } : message;\n });\n}\n\n/** Runs the cheap shapers in order. Compaction is separate: it costs a model call. */\nexport function shapeMessages(\n messages: Message[],\n options: ShaperOptions = DEFAULT_SHAPER_OPTIONS,\n): Message[] {\n return pruneResults(capResults(messages, options), options);\n}\n",
21
22
  "import type { Message } from '@earshot/providers';\nimport { estimateTokens } from './shapers.ts';\n\nexport interface CompactionPolicy {\n /** Fraction of the context window at which compaction runs. */\n threshold: number;\n /** Turns kept verbatim after the summary. A turn is one user or assistant message. */\n keepRecentMessages: number;\n}\n\nexport const DEFAULT_COMPACTION_POLICY: CompactionPolicy = {\n threshold: 0.8,\n keepRecentMessages: 8,\n};\n\nexport interface CompactionInput {\n messages: Message[];\n system: string;\n contextWindow: number;\n policy?: CompactionPolicy;\n /** Open todos, carried across the cut because they are the unfinished work. */\n todos?: string[];\n /** Files the session has touched, carried for the same reason. */\n filesTouched?: string[];\n /** Writes the summary. The agent passes one that calls the model. */\n summarize: (messages: Message[]) => Promise<string>;\n}\n\nexport interface CompactionResult {\n /** What to send on this request. */\n messages: Message[];\n /** The summary text, for the `summary` session entry and for the status line. */\n summary: string;\n /** How many messages the summary stands in for. */\n replaced: number;\n}\n\nexport function shouldCompact(\n messages: Message[],\n system: string,\n contextWindow: number,\n policy: CompactionPolicy = DEFAULT_COMPACTION_POLICY,\n): boolean {\n if (contextWindow <= 0) return false;\n return estimateTokens(messages, system) > contextWindow * policy.threshold;\n}\n\n/**\n * Indices the history can be cut at without orphaning a tool result.\n *\n * A kept tail that begins with a result whose call was dropped is rejected by\n * every provider, so the cut may only fall where each call in the tail still has\n * its own result there. Index 0 is always valid and is the fallback.\n */\nexport function safeCutPoints(messages: Message[]): number[] {\n const points: number[] = [];\n for (let cut = 0; cut < messages.length; cut++) {\n const calls = new Set<string>();\n let orphan = false;\n for (const message of messages.slice(cut)) {\n for (const part of message.content) {\n if (part.type === 'tool_call') calls.add(part.toolCallId);\n if (part.type === 'tool_result' && !calls.has(part.toolCallId)) orphan = true;\n }\n if (orphan) break;\n }\n if (!orphan) points.push(cut);\n }\n return points;\n}\n\n/**\n * Replaces the old part of the history with a model-written summary.\n *\n * The caller decides what to do with the result: the agent sends\n * `result.messages` and appends a `summary` entry to the session, which records\n * what the summary replaced without removing any of it from the file. The\n * transcript on disk stays complete; only the request shrinks.\n */\nexport async function compact(input: CompactionInput): Promise<CompactionResult | undefined> {\n const policy = input.policy ?? DEFAULT_COMPACTION_POLICY;\n const wanted = Math.max(0, input.messages.length - policy.keepRecentMessages);\n // The largest safe cut no later than the one we wanted, so a batch that\n // straddles the boundary is kept whole rather than truncated.\n const cut = safeCutPoints(input.messages)\n .filter((point) => point <= wanted)\n .at(-1);\n if (cut === undefined || cut === 0) return undefined;\n\n const summary = await input.summarize(input.messages.slice(0, cut));\n const carried = [\n summary.trim(),\n section('Open todos', input.todos),\n section('Files touched so far', input.filesTouched),\n ]\n .filter((part) => part !== '')\n .join('\\n\\n');\n\n const preamble: Message = {\n role: 'user',\n content: [\n {\n type: 'text',\n text:\n `<context-summary>\\nThe earlier part of this session was summarised to fit the ` +\n `context window. It is a summary, not a transcript: if a detail matters, read the ` +\n `file rather than trusting a recollection of it.\\n\\n${carried}\\n</context-summary>`,\n },\n ],\n };\n\n return {\n messages: [preamble, ...input.messages.slice(cut)],\n summary: carried,\n replaced: cut,\n };\n}\n\nfunction section(title: string, items?: string[]): string {\n if (!items?.length) return '';\n return `${title}:\\n${items.map((item) => `- ${item}`).join('\\n')}`;\n}\n\n/** The instruction the summarising call is given. */\nexport const SUMMARY_PROMPT =\n 'Summarise the conversation so far for your own use after the earlier messages are ' +\n 'dropped. Write it as notes to yourself, not as a report to the user. Cover: what the ' +\n 'user asked for and any constraints or preferences they stated verbatim; decisions made ' +\n 'and why; what has been changed, file by file; what is still unfinished; anything that ' +\n 'failed or is unverified. Preserve exact names, paths and commands. Do not congratulate ' +\n 'anyone and do not claim anything was verified unless the transcript shows it was.';\n",
22
23
  "import { platform } from 'node:os';\nimport { loadMemories, renderMemories } from '../memory/store.ts';\nimport type { PermissionMode } from '../permissions/engine.ts';\nimport { loadMemoryFiles, renderMemory } from './agents-md.ts';\n\n/**\n * How readily the agent stops to ask. It moves one threshold and nothing else:\n * what counts as \"two readings that lead to different work\". It never turns\n * asking off, because a question the agent cannot ask becomes a guess the user\n * pays for, and never makes asking free, because a prompt for something with an\n * obvious default is its own failure.\n */\nexport type Curiosity = 'low' | 'normal' | 'high';\n\nexport const CURIOSITY_LEVELS: Curiosity[] = ['low', 'normal', 'high'];\n\nexport function isCuriosity(value: unknown): value is Curiosity {\n return typeof value === 'string' && (CURIOSITY_LEVELS as string[]).includes(value);\n}\n\nexport interface SystemPromptOptions {\n cwd: string;\n mode: PermissionMode;\n /** Defaults to `normal`. */\n curiosity?: Curiosity;\n /** Model reference, so the model can answer \"what are you\" accurately. */\n model: string;\n /** Rendered instead of being read from disk, in tests. */\n memory?: string;\n /** Rendered instead of being read from disk, in tests. */\n preferences?: string;\n /** The skill index: what exists and what each is for, never the bodies. */\n skills?: string;\n extra?: string;\n}\n\n/**\n * The behavioural half of \"a harness that actually listens\". Everything here is\n * a rule the project exists to enforce, so each line should be traceable to a\n * failure mode rather than to a style preference.\n */\nconst BASE = `You are earshot, a coding agent running in the user's terminal.\n\nDo the task the user asked for. Not a larger one, not a smaller one. If you spot\nsomething else worth fixing, say so in a sentence and leave it alone unless they\nask - an unrequested refactor buried in a bug fix is a change the user did not\nreview.\n\nBefore your first change of a task, call declare_scope: the files you expect to\ntouch, one paragraph on what changes and what does not, and a rough size. It is\nnot paperwork - editing a file you did not list, adding a dependency, renaming or\ndeleting files, reformatting, removing a test, or a change several times your own\nestimate will stop and ask the user before it happens.\n\nSay why before you act. One line, immediately before each batch of tool calls,\nnaming what you are about to do and what you expect to find or change. One line\nis the budget - it exists so the user can catch a wrong turn after one line of\noutput instead of forty, and a paragraph does not do that.\n\nRead before you change. Every edit must be to a file you have read this session,\nand \\`find\\` strings must match the file exactly, including indentation.\n\nPrefer the read, glob and grep tools over the equivalent shell commands: they are\nfaster, they respect ignore files, and their output is shaped for you.\n\nWhen you are done, say what you did in a sentence or two. Do not restate the diff\nthe user can already see, and do not claim something works if you did not run it.\nIf you could not verify something, say which part and why.\n\nReport failures plainly. A test that fails, a command that errored, a step you\nskipped - say so, with the output. Silence about a problem reads as success and\nis the single most expensive thing you can do here.`;\n\nexport async function buildSystemPrompt(options: SystemPromptOptions): Promise<string> {\n const memory = options.memory ?? renderMemory(await loadMemoryFiles(options.cwd), options.cwd);\n // Assembled here alongside AGENTS.md rather than merged into it: the two are\n // different things and are labelled as such. AGENTS.md is written by hand and\n // committed; a preference is captured from something the user said, carries\n // its provenance, and is deleted with one command.\n const preferences = options.preferences ?? renderMemories(await loadMemories(options.cwd));\n\n const sections = [\n BASE,\n curiositySection(options.curiosity ?? 'normal'),\n modeSection(options.mode),\n `<environment>\\nWorking directory: ${options.cwd}\\nPlatform: ${platform()}\\nModel: ${options.model}\\n</environment>`,\n memory,\n preferences,\n options.skills ?? '',\n options.extra ?? '',\n ];\n return sections.filter((section) => section.trim() !== '').join('\\n\\n');\n}\n\n/**\n * Where the line sits between asking and deciding.\n *\n * The shared half is fixed at every level: never ask for permission to act -\n * that is the harness's job, not the model's - and never ask about something\n * with an obvious default. Only the threshold moves.\n */\nfunction curiositySection(curiosity: Curiosity): string {\n const shared =\n 'Use the ask_user tool, with 2-4 concrete options rather than an open question. Never ' +\n 'ask for permission to act: permission is handled by the harness, not by you. Never ask ' +\n 'about a choice with an obvious default.';\n\n switch (curiosity) {\n case 'low':\n return (\n `<curiosity>low</curiosity>\\nDecide rather than ask. State the assumption you made in ` +\n `one line and keep going; ask only when proceeding either way would be unsafe or would ` +\n `waste the work if the guess is wrong. ${shared}`\n );\n case 'high':\n return (\n `<curiosity>high</curiosity>\\nAsk whenever a second reading of the request is ` +\n `plausible, before doing work that assumes the first one. The user has said they would ` +\n `rather answer a question than review the wrong thing. ${shared}`\n );\n default:\n return (\n `<curiosity>normal</curiosity>\\nAsk rather than guess when the answer would change ` +\n `what you build, and decide the rest yourself. A question costs one round trip; the ` +\n `wrong assumption costs the whole task. ${shared}`\n );\n }\n}\n\n/**\n * The model is told the mode because a refusal it cannot explain looks like a\n * bug to the user. In plan mode especially, it needs to know that the denial is\n * the design rather than something to route around with a different tool.\n */\nfunction modeSection(mode: PermissionMode): string {\n switch (mode) {\n case 'plan':\n return (\n '<mode>plan</mode>\\nYou are in plan mode: you can read and search, but every tool ' +\n 'that changes anything will be refused. Investigate, then present a plan and stop. ' +\n 'Do not attempt to make changes by another route.'\n );\n case 'accept-edits':\n return (\n '<mode>accept-edits</mode>\\nFile edits inside the working directory are approved ' +\n 'automatically. Commands and network access still prompt the user, so batch them ' +\n 'rather than interrupting repeatedly.'\n );\n case 'auto':\n return (\n '<mode>auto</mode>\\nMost actions run without prompting. Be correspondingly careful ' +\n 'with anything destructive or hard to undo.'\n );\n case 'yolo':\n return (\n '<mode>yolo</mode>\\nNothing prompts. The user has accepted that; be careful with ' +\n 'anything you cannot undo, and prefer reversible steps.'\n );\n default:\n return (\n '<mode>ask</mode>\\nActions that change files, run commands or reach the network ' +\n 'prompt the user for approval first.'\n );\n }\n}\n",
23
24
  "import { mkdir, readdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { configDir } from '@earshot/providers';\n\n/**\n * One remembered preference.\n *\n * Provenance is the reason this is a store of its own rather than lines appended\n * to AGENTS.md. A rule the user cannot trace back to something they said is a\n * rule they cannot judge, so every memory records the sentence it came from and\n * when - and `/memory` can show and delete exactly that.\n */\nexport interface Memory {\n id: string;\n scope: MemoryScope;\n /** The rule itself, in the imperative, as it will be given to the model. */\n text: string;\n /** What the user actually said, verbatim. */\n source: string;\n created: string;\n path: string;\n}\n\nexport type MemoryScope = 'user' | 'project';\n\nexport interface NewMemory {\n text: string;\n source: string;\n scope: MemoryScope;\n}\n\nexport function memoryDir(scope: MemoryScope, cwd: string): string {\n return scope === 'user' ? join(configDir(), 'memories') : join(cwd, '.earshot', 'memories');\n}\n\n/**\n * Reads both scopes, user first so a project memory is read last and wins.\n *\n * An unreadable or malformed file is skipped rather than failing the session:\n * these are hand-editable by design, and a typo in one of them must not be able\n * to stop the agent from starting.\n */\nexport async function loadMemories(cwd: string): Promise<Memory[]> {\n const memories: Memory[] = [];\n for (const scope of ['user', 'project'] as MemoryScope[]) {\n const dir = memoryDir(scope, cwd);\n const names = await readdir(dir).catch(() => [] as string[]);\n for (const name of names.sort()) {\n if (!name.endsWith('.md')) continue;\n const path = join(dir, name);\n const raw = await readFile(path, 'utf8').catch(() => undefined);\n if (raw === undefined) continue;\n const parsed = parseMemory(raw, path, scope);\n if (parsed) memories.push(parsed);\n }\n }\n return memories;\n}\n\nexport async function saveMemory(memory: NewMemory, cwd: string): Promise<Memory> {\n const dir = memoryDir(memory.scope, cwd);\n await mkdir(dir, { recursive: true });\n\n const id = memoryId(memory.text);\n const created = new Date().toISOString();\n const path = join(dir, `${id}.md`);\n const body = [\n '---',\n `id: ${id}`,\n `created: ${created}`,\n `source: ${quote(memory.source)}`,\n '---',\n '',\n memory.text.trim(),\n '',\n ].join('\\n');\n\n await writeFile(path, body, 'utf8');\n return {\n id,\n scope: memory.scope,\n text: memory.text.trim(),\n source: memory.source,\n created,\n path,\n };\n}\n\nexport async function deleteMemory(id: string, cwd: string): Promise<boolean> {\n for (const scope of ['user', 'project'] as MemoryScope[]) {\n const path = join(memoryDir(scope, cwd), `${id}.md`);\n const gone = await rm(path).then(\n () => true,\n () => false,\n );\n if (gone) return true;\n }\n return false;\n}\n\n/**\n * Renders the index that sits in the system prompt on every turn.\n *\n * The id is included because the model is asked to name it when a memory changes\n * what it does - \"applying your rule: use bun, not npm\" is only checkable if the\n * user can go and look at that rule.\n */\nexport function renderMemories(memories: Memory[]): string {\n if (memories.length === 0) return '';\n const lines = memories.map(\n (memory) => `- [${memory.id}] (${memory.scope}) ${memory.text.replace(/\\n+/g, ' ')}`,\n );\n return (\n 'Preferences the user has asked you to remember. They are instructions, not ' +\n 'suggestions, and they outrank your defaults. When one of them changes what you do, ' +\n 'say so in one short clause naming it, so the user can see which rule acted and ' +\n `remove it if it is wrong.\\n\\n<preferences>\\n${lines.join('\\n')}\\n</preferences>`\n );\n}\n\n/** A stable, readable file name derived from the rule itself. */\nexport function memoryId(text: string): string {\n const slug = text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '')\n .split('-')\n .slice(0, 6)\n .join('-');\n return slug === '' ? `memory-${Date.now().toString(36)}` : slug;\n}\n\n/**\n * Frontmatter, hand-parsed.\n *\n * A YAML dependency would buy nothing here: these files have three scalar keys,\n * and the failure mode of a real parser - throwing on a file a user hand-edited\n * slightly wrong - is worse than ignoring a key we do not recognise.\n */\nfunction parseMemory(raw: string, path: string, scope: MemoryScope): Memory | undefined {\n const match = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?([\\s\\S]*)$/.exec(raw);\n if (!match) return undefined;\n const [, front = '', body = ''] = match;\n\n const fields = new Map<string, string>();\n for (const line of front.split(/\\r?\\n/)) {\n const at = line.indexOf(':');\n if (at <= 0) continue;\n fields.set(line.slice(0, at).trim(), unquote(line.slice(at + 1).trim()));\n }\n\n const text = body.trim();\n if (text === '') return undefined;\n const id = fields.get('id') ?? (path.split(/[/\\\\]/).pop() ?? '').replace(/\\.md$/, '');\n return {\n id,\n scope,\n text,\n source: fields.get('source') ?? '',\n created: fields.get('created') ?? '',\n path,\n };\n}\n\nfunction quote(value: string): string {\n return JSON.stringify(value.replace(/\\s+/g, ' ').trim());\n}\n\nfunction unquote(value: string): string {\n if (!value.startsWith('\"')) return value;\n try {\n return JSON.parse(value) as string;\n } catch {\n return value.slice(1, -1);\n }\n}\n",
24
- "import {\n type Credentials,\n type Model,\n type ModelRequest,\n type Provider,\n type ProviderRegistry,\n resolveCredentials,\n type StreamEvent,\n type WireContext,\n} from '@earshot/providers';\n\nexport interface ResolvedModel {\n provider: Provider;\n model: Model;\n credentials: Credentials;\n}\n\nexport class MissingCredentialsError extends Error {\n constructor(readonly provider: Provider) {\n super(describeMissingAuth(provider));\n this.name = 'MissingCredentialsError';\n }\n}\n\nexport class UnknownModelError extends Error {\n constructor(readonly ref: string) {\n super(`unknown model \"${ref}\"`);\n this.name = 'UnknownModelError';\n }\n}\n\n/**\n * Binds a model reference to a provider and its credentials. This is the single\n * place the CLI, the TUI and subagents go to turn \"anthropic/claude-opus-5\" into\n * something callable, so auth failures surface once, with a usable message.\n */\nexport async function resolveModel(\n registry: ProviderRegistry,\n ref: string,\n opts: { apiKey?: string; env?: NodeJS.ProcessEnv } = {},\n): Promise<ResolvedModel> {\n const found = registry.resolveModel(ref) ?? (await discoverModel(registry, ref));\n if (!found) throw new UnknownModelError(ref);\n\n const credentials = await resolveCredentials(found.provider, {\n ...(opts.apiKey ? { cliApiKey: opts.apiKey } : {}),\n ...(opts.env ? { env: opts.env } : {}),\n });\n if (!credentials) throw new MissingCredentialsError(found.provider);\n\n return { ...found, credentials };\n}\n\n/**\n * Providers with live model discovery (Ollama, and any local runtime) publish no\n * static catalog, so a reference to one never matches until we ask the server what\n * it has. Only providers that opt in with `fetchModels` are probed, and a probe\n * that fails is treated as \"no such model\" rather than an error - the server\n * simply may not be running.\n */\nasync function discoverModel(\n registry: ProviderRegistry,\n ref: string,\n): Promise<{ provider: Provider; model: Model } | undefined> {\n const slash = ref.indexOf('/');\n const candidates = registry\n .list()\n .filter((p) => p.fetchModels)\n .filter((p) => (slash > 0 ? p.id === ref.slice(0, slash) : true));\n\n const wanted = slash > 0 ? ref.slice(slash + 1) : ref;\n\n for (const provider of candidates) {\n try {\n const models = await provider.fetchModels?.({\n credentials: { type: 'ambient' },\n ...(provider.baseUrl ? { baseUrl: provider.baseUrl } : {}),\n });\n const model = models?.find((m) => m.id === wanted);\n if (model) return { provider, model };\n } catch {\n // The runtime is not reachable; fall through to \"unknown model\".\n }\n }\n return undefined;\n}\n\nfunction describeMissingAuth(provider: Provider): string {\n const { auth } = provider;\n const how =\n auth.kind === 'api-key' && auth.envVars.length\n ? `set ${auth.envVars.join(' or ')}, or run \\`earshot auth login ${provider.id}\\``\n : auth.kind === 'oauth'\n ? `run \\`earshot auth login ${provider.id}\\``\n : auth.kind === 'ambient'\n ? `configure ${auth.description}`\n : 'no credentials are configured';\n return `no credentials for ${provider.name}: ${how}`;\n}\n\n/** Opens a stream for one model call. Transforms run here, in declared order. */\nexport function streamModel(\n registry: ProviderRegistry,\n resolved: ResolvedModel,\n request: Omit<ModelRequest, 'modelId'>,\n): AsyncIterable<StreamEvent> {\n const { provider, model, credentials } = resolved;\n const wire = registry.wireFor(provider, model);\n\n let req: ModelRequest = { ...request, modelId: model.id };\n for (const transform of provider.transforms ?? []) req = transform.apply(req, model);\n\n const ctx: WireContext = {\n credentials,\n ...(provider.baseUrl ? { baseUrl: provider.baseUrl } : {}),\n };\n return wire.stream(req, ctx);\n}\n\n/** USD for one turn, from catalog pricing. Cache reads and writes price separately. */\nexport function turnCost(\n model: Model,\n usage: {\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n },\n): number {\n const cost = model.cost;\n if (!cost) return 0;\n const per = (tokens: number, rate: number) => (tokens / 1_000_000) * rate;\n // Cached reads are billed at the cache rate instead of the input rate, so they\n // must not also be counted as fresh input.\n const cacheRead = usage.cacheReadTokens ?? 0;\n const cacheWrite = usage.cacheWriteTokens ?? 0;\n const freshInput = Math.max(0, usage.inputTokens - cacheRead);\n return (\n per(freshInput, cost.input) +\n per(usage.outputTokens, cost.output) +\n per(cacheRead, cost.cacheRead ?? cost.input) +\n per(cacheWrite, cost.cacheWrite ?? cost.input)\n );\n}\n",
25
+ "import {\n type Credentials,\n type Model,\n type ModelRequest,\n type Provider,\n type ProviderRegistry,\n resolveCredentials,\n type StreamEvent,\n type WireContext,\n} from '@earshot/providers';\n\nexport interface ResolvedModel {\n provider: Provider;\n model: Model;\n credentials: Credentials;\n}\n\nexport const DEFAULT_MODEL = 'anthropic/claude-opus-5';\n\nexport class MissingCredentialsError extends Error {\n constructor(readonly provider: Provider) {\n super(describeMissingAuth(provider));\n this.name = 'MissingCredentialsError';\n }\n}\n\nexport class UnknownModelError extends Error {\n constructor(readonly ref: string) {\n super(`unknown model \"${ref}\"`);\n this.name = 'UnknownModelError';\n }\n}\n\n/**\n * Binds a model reference to a provider and its credentials. This is the single\n * place the CLI, the TUI and subagents go to turn \"anthropic/claude-opus-5\" into\n * something callable, so auth failures surface once, with a usable message.\n */\nexport async function resolveModel(\n registry: ProviderRegistry,\n ref: string,\n opts: { apiKey?: string; env?: NodeJS.ProcessEnv } = {},\n): Promise<ResolvedModel> {\n const found = registry.resolveModel(ref) ?? (await discoverModel(registry, ref));\n if (!found) throw new UnknownModelError(ref);\n\n const credentials = await resolveCredentials(found.provider, {\n ...(opts.apiKey ? { cliApiKey: opts.apiKey } : {}),\n ...(opts.env ? { env: opts.env } : {}),\n });\n if (!credentials) throw new MissingCredentialsError(found.provider);\n\n return { ...found, credentials };\n}\n\n/**\n * Providers with live model discovery (Ollama, and any local runtime) publish no\n * static catalog, so a reference to one never matches until we ask the server what\n * it has. Only providers that opt in with `fetchModels` are probed, and a probe\n * that fails is treated as \"no such model\" rather than an error - the server\n * simply may not be running.\n */\nasync function discoverModel(\n registry: ProviderRegistry,\n ref: string,\n): Promise<{ provider: Provider; model: Model } | undefined> {\n const slash = ref.indexOf('/');\n const candidates = registry\n .list()\n .filter((p) => p.fetchModels)\n .filter((p) => (slash > 0 ? p.id === ref.slice(0, slash) : true));\n\n const wanted = slash > 0 ? ref.slice(slash + 1) : ref;\n\n for (const provider of candidates) {\n try {\n const models = await provider.fetchModels?.({\n credentials: { type: 'ambient' },\n ...(provider.baseUrl ? { baseUrl: provider.baseUrl } : {}),\n });\n const model = models?.find((m) => m.id === wanted);\n if (model) return { provider, model };\n } catch {\n // The runtime is not reachable; fall through to \"unknown model\".\n }\n }\n return undefined;\n}\n\nfunction describeMissingAuth(provider: Provider): string {\n const { auth } = provider;\n const how =\n auth.kind === 'api-key' && auth.envVars.length\n ? `set ${auth.envVars.join(' or ')}, or run \\`earshot auth login ${provider.id}\\``\n : auth.kind === 'oauth'\n ? `run \\`earshot auth login ${provider.id}\\``\n : auth.kind === 'ambient'\n ? `configure ${auth.description}`\n : 'no credentials are configured';\n return `no credentials for ${provider.name}: ${how}`;\n}\n\n/** Opens a stream for one model call. Transforms run here, in declared order. */\nexport function streamModel(\n registry: ProviderRegistry,\n resolved: ResolvedModel,\n request: Omit<ModelRequest, 'modelId'>,\n): AsyncIterable<StreamEvent> {\n const { provider, model, credentials } = resolved;\n const wire = registry.wireFor(provider, model);\n\n let req: ModelRequest = { ...request, modelId: model.id };\n for (const transform of provider.transforms ?? []) req = transform.apply(req, model);\n\n const ctx: WireContext = {\n credentials,\n ...(provider.baseUrl ? { baseUrl: provider.baseUrl } : {}),\n };\n return wire.stream(req, ctx);\n}\n\n/** USD for one turn, from catalog pricing. Cache reads and writes price separately. */\nexport function turnCost(\n model: Model,\n usage: {\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n },\n): number {\n const cost = model.cost;\n if (!cost) return 0;\n const per = (tokens: number, rate: number) => (tokens / 1_000_000) * rate;\n // Cached reads are billed at the cache rate instead of the input rate, so they\n // must not also be counted as fresh input.\n const cacheRead = usage.cacheReadTokens ?? 0;\n const cacheWrite = usage.cacheWriteTokens ?? 0;\n const freshInput = Math.max(0, usage.inputTokens - cacheRead);\n return (\n per(freshInput, cost.input) +\n per(usage.outputTokens, cost.output) +\n per(cacheRead, cost.cacheRead ?? cost.input) +\n per(cacheWrite, cost.cacheWrite ?? cost.input)\n );\n}\n",
25
26
  "import { isAbsolute, relative, resolve, sep } from 'node:path';\n\n/** Resolves a tool-supplied path against the session cwd. */\nexport function resolvePath(cwd: string, path: string): string {\n return isAbsolute(path) ? resolve(path) : resolve(cwd, path);\n}\n\n/**\n * Whether `path` is inside `cwd`. Writes outside the working directory always\n * prompt regardless of configured rules, so this decides when the gate escalates.\n * Compared case-sensitively even on Windows: over-prompting is the safe error.\n */\nexport function isInside(cwd: string, path: string): boolean {\n const rel = relative(resolve(cwd), resolve(path));\n return rel !== '' && !rel.startsWith('..') && !isAbsolute(rel);\n}\n\n/** `src/main.ts` when inside cwd, an absolute path when outside. */\nexport function displayPath(cwd: string, path: string): string {\n const abs = resolve(path);\n return isInside(cwd, abs) ? relative(resolve(cwd), abs).split(sep).join('/') : abs;\n}\n",
26
27
  "/**\n * Glob matching over `/`-separated paths. Hand-rolled because the one thing a\n * dependency would add here is `**` semantics, and getting those wrong is the\n * whole bug surface - so they are tested directly instead.\n *\n * Supports `*` (no separator), `**` (any depth, including none), `?`, and\n * `{a,b}` alternation. A leading `**\\/` is implied for a pattern with no\n * separator, so `*.ts` matches `src/main.ts` the way every other tool behaves.\n */\nexport function globToRegExp(pattern: string): RegExp {\n const implicitlyRecursive = !pattern.includes('/');\n const source = implicitlyRecursive ? `**/${pattern}` : pattern;\n return new RegExp(`^${compile(source)}$`);\n}\n\nexport function matchesGlob(pattern: string, path: string): boolean {\n return globToRegExp(pattern).test(path);\n}\n\nfunction compile(pattern: string): string {\n let out = '';\n for (let i = 0; i < pattern.length; i++) {\n const ch = pattern[i] as string;\n if (ch === '*') {\n if (pattern[i + 1] === '*') {\n // `**/` collapses to \"any number of segments, including zero\", which is\n // what makes `src/**/*.ts` match `src/main.ts` and not just nested files.\n i++;\n if (pattern[i + 1] === '/') {\n i++;\n out += '(?:[^/]+/)*';\n } else {\n out += '.*';\n }\n } else {\n out += '[^/]*';\n }\n } else if (ch === '?') {\n out += '[^/]';\n } else if (ch === '{') {\n const end = pattern.indexOf('}', i);\n if (end === -1) {\n out += '\\\\{';\n } else {\n const alts = pattern.slice(i + 1, end).split(',');\n out += `(?:${alts.map(compile).join('|')})`;\n i = end;\n }\n } else {\n out += ch.replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n }\n return out;\n}\n",
27
28
  "import { matchesGlob } from '../tools/glob-match.ts';\n\nexport type RuleEffect = 'allow' | 'deny' | 'ask';\n\n/** Where a rule came from. Narrower scopes are listed first in explanations. */\nexport type RuleScope = 'global' | 'project' | 'local' | 'session';\n\nexport interface Rule {\n /** Tool name as written in the rule, e.g. `Bash`, `Edit`, `WebFetch`. */\n tool: string;\n /** Pattern inside the parentheses. Absent means \"every use of this tool\". */\n pattern?: string;\n effect: RuleEffect;\n scope: RuleScope;\n /** The rule as written, for showing the user why something was decided. */\n source: string;\n}\n\nexport class RuleSyntaxError extends Error {\n constructor(rule: string, reason: string) {\n super(`bad permission rule \"${rule}\": ${reason}`);\n this.name = 'RuleSyntaxError';\n }\n}\n\n/**\n * Parses `Tool(pattern)` or a bare `Tool`.\n *\n * The pattern is not itself parsed here: what it means depends on the tool, and\n * a command pattern and a path pattern match very differently (see `ruleMatches`).\n */\nexport function parseRule(text: string, effect: RuleEffect, scope: RuleScope): Rule {\n const trimmed = text.trim();\n if (trimmed === '') throw new RuleSyntaxError(text, 'empty');\n\n const open = trimmed.indexOf('(');\n if (open === -1) {\n if (!/^[A-Za-z_][\\w-]*$/.test(trimmed)) throw new RuleSyntaxError(text, 'not a tool name');\n return { tool: trimmed, effect, scope, source: trimmed };\n }\n if (!trimmed.endsWith(')')) throw new RuleSyntaxError(text, 'missing closing parenthesis');\n\n const tool = trimmed.slice(0, open).trim();\n const pattern = trimmed.slice(open + 1, -1).trim();\n if (!/^[A-Za-z_][\\w-]*$/.test(tool)) throw new RuleSyntaxError(text, 'not a tool name');\n if (pattern === '') throw new RuleSyntaxError(text, 'empty pattern');\n\n return { tool, pattern, effect, scope, source: trimmed };\n}\n\n/**\n * Tools whose target is a path, and so is matched with path-glob semantics where\n * `*` stops at a separator. Everything else is matched as a command string.\n */\nconst PATH_TOOLS = new Set(['Edit', 'Write', 'Read']);\n\n/** Operators that chain one command into another inside a single `bash` call. */\nconst CHAIN = /\\s*(?:&&|\\|\\||;|\\|)\\s*/;\n\nexport function ruleMatches(rule: Rule, tool: string, target: string): boolean {\n if (rule.tool !== tool) return false;\n if (rule.pattern === undefined) return true;\n\n if (PATH_TOOLS.has(rule.tool)) return matchesGlob(rule.pattern, target);\n\n // A command is only covered when *every* segment of it is covered. Without\n // this, `Bash(npm run *)` would allow `npm run build && rm -rf ~`, because the\n // string does start with the approved prefix. Splitting is deliberately\n // conservative: an operator inside a quoted argument produces extra segments\n // that fail to match, which over-prompts rather than under-prompts.\n const segments = target.split(CHAIN).filter((segment) => segment.trim() !== '');\n if (segments.length === 0) return false;\n return segments.every((segment) => matchesCommand(rule.pattern as string, segment.trim()));\n}\n\n/**\n * Command matching, where `*` spans anything including spaces - `git *` covers\n * `git log --oneline -5`. Path-glob semantics would stop at a separator and make\n * `Bash(git *)` fail on any command containing a path, which is most of them.\n */\nexport function matchesCommand(pattern: string, command: string): boolean {\n const escaped = pattern.replace(/[.+^${}()|[\\]\\\\?]/g, '\\\\$&').replace(/\\*/g, '[\\\\s\\\\S]*');\n return new RegExp(`^${escaped}$`).test(command);\n}\n\n/**\n * The first matching deny rule, if any. Deny is evaluated before everything else\n * and is never overridden by an allow rule at any scope, so this is checked on\n * its own rather than folded into a single ordered pass.\n */\nexport function firstDeny(rules: Rule[], tool: string, target: string): Rule | undefined {\n return rules.find((rule) => rule.effect === 'deny' && ruleMatches(rule, tool, target));\n}\n\nexport function firstAllow(rules: Rule[], tool: string, target: string): Rule | undefined {\n return rules.find((rule) => rule.effect === 'allow' && ruleMatches(rule, tool, target));\n}\n\nexport function firstAsk(rules: Rule[], tool: string, target: string): Rule | undefined {\n return rules.find((rule) => rule.effect === 'ask' && ruleMatches(rule, tool, target));\n}\n",
28
29
  "import { isInside } from '../tools/fs-paths.ts';\nimport type { PermissionRequest, Tool } from '../tools/types.ts';\nimport { firstAllow, firstAsk, firstDeny, type Rule, type RuleScope } from './rules.ts';\n\n/**\n * How much the agent may do without asking.\n *\n * - `plan` - read and search only; every mutating tool is refused, so the\n * model produces a plan instead of changes.\n * - `ask` - the default. Anything mutating prompts unless a rule allows it.\n * - `accept-edits` - file edits inside the working directory go through; commands\n * and network access still prompt.\n * - `auto` - anything not explicitly denied goes through.\n * - `yolo` - no prompts at all, including writes outside the working\n * directory. Deny rules still apply: they are the one thing that\n * no mode overrides.\n */\nexport type PermissionMode = 'plan' | 'ask' | 'accept-edits' | 'auto' | 'yolo';\n\nexport const PERMISSION_MODES: PermissionMode[] = ['plan', 'ask', 'accept-edits', 'auto', 'yolo'];\n\nexport function isPermissionMode(value: string): value is PermissionMode {\n return (PERMISSION_MODES as string[]).includes(value);\n}\n\nexport type Decision =\n | { outcome: 'allow'; reason: string }\n | { outcome: 'deny'; reason: string }\n | { outcome: 'ask'; reason: string; request: PermissionRequest };\n\n/** Tools that edit files, as opposed to running commands or reaching the network. */\nconst EDIT_TOOLS = new Set(['Edit', 'Write']);\n\nexport interface GateOptions {\n mode: PermissionMode;\n rules: Rule[];\n cwd: string;\n}\n\n/**\n * Decides one tool call. Pure: it reads rules and the request and returns a\n * decision, so the whole policy is testable without a terminal attached.\n *\n * Order is the policy, and it is deliberately not \"most specific wins\":\n *\n * 1. A matching deny rule refuses, always. No mode and no allow rule overrides it.\n * 2. Read-only tools never prompt.\n * 3. `plan` refuses every mutating tool.\n * 4. A write outside the working directory prompts, whatever the rules say,\n * unless the user has explicitly chosen `yolo`.\n * 5. `yolo` allows.\n * 6. A matching ask rule prompts even when a later allow rule would match.\n * 7. A matching allow rule allows.\n * 8. Otherwise the mode decides.\n */\nexport function decide(\n tool: Tool<never>,\n request: PermissionRequest | undefined,\n options: GateOptions,\n): Decision {\n const { mode, rules, cwd } = options;\n\n if (request) {\n const denied = firstDeny(rules, request.tool, request.target);\n if (denied) {\n return { outcome: 'deny', reason: `denied by rule ${denied.source} (${denied.scope})` };\n }\n }\n\n if (tool.readOnly || !request) {\n return { outcome: 'allow', reason: 'read-only' };\n }\n\n if (mode === 'plan') {\n return {\n outcome: 'deny',\n reason:\n `${tool.name} changes state, and the session is in plan mode. Present the plan ` +\n 'and let the user approve it; do not try another tool to work around this.',\n };\n }\n\n const outside = (request.writes ?? []).filter((path) => !isInside(cwd, path));\n if (outside.length > 0 && mode !== 'yolo') {\n // Not overridable by an allow rule: a project's own settings file must not be\n // able to grant that project write access to the rest of the machine.\n return {\n outcome: 'ask',\n reason: `writes outside the working directory: ${outside.join(', ')}`,\n request,\n };\n }\n\n if (mode === 'yolo') return { outcome: 'allow', reason: 'yolo mode' };\n\n const asked = firstAsk(rules, request.tool, request.target);\n if (asked) {\n return { outcome: 'ask', reason: `rule ${asked.source} (${asked.scope})`, request };\n }\n\n const allowed = firstAllow(rules, request.tool, request.target);\n if (allowed) {\n return { outcome: 'allow', reason: `allowed by rule ${allowed.source} (${allowed.scope})` };\n }\n\n if (mode === 'auto') return { outcome: 'allow', reason: 'auto mode' };\n if (mode === 'accept-edits' && EDIT_TOOLS.has(request.tool)) {\n return { outcome: 'allow', reason: 'accept-edits mode' };\n }\n\n return { outcome: 'ask', reason: 'no rule covers this', request };\n}\n\n/** What the user picked at a prompt. */\nexport type PromptChoice =\n | { kind: 'allow-once' }\n | { kind: 'allow-always'; scope: RuleScope }\n | { kind: 'deny'; message?: string };\n\n/**\n * Asks the user. The prompt must show `request.detail` - the real command or the\n * real diff - because a prompt showing a paraphrase is one people learn to\n * approve without reading.\n */\nexport type PermissionPrompt = (\n request: PermissionRequest,\n reason: string,\n) => Promise<PromptChoice>;\n\n/** Turns \"always allow this\" into the rule that will be persisted. */\nexport function ruleFromChoice(request: PermissionRequest, scope: RuleScope): Rule {\n // The rule generalises to the tool's whole target rather than to a wildcard: a\n // user approving `git status` has not approved `git push --force`.\n const source = `${request.tool}(${request.target})`;\n return { tool: request.tool, pattern: request.target, effect: 'allow', scope, source };\n}\n",
29
- "import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { configDir } from '@earshot/providers';\nimport { type Curiosity, isCuriosity } from '../context/system-prompt.ts';\nimport { isPermissionMode, type PermissionMode } from './engine.ts';\nimport { parseRule, type Rule, type RuleScope, RuleSyntaxError } from './rules.ts';\n\nexport interface SettingsFile {\n permissions?: {\n allow?: string[];\n deny?: string[];\n ask?: string[];\n defaultMode?: string;\n };\n curiosity?: string;\n /** Session budget in USD. A turn stops and asks before spending past it. */\n maxCostUsd?: number;\n}\n\nexport interface LoadedSettings {\n rules: Rule[];\n /** From the narrowest scope that sets one. */\n defaultMode?: PermissionMode;\n /** Preferences, like `defaultMode`: the narrowest scope that sets one wins. */\n curiosity?: Curiosity;\n maxCostUsd?: number;\n /** Rules that failed to parse, reported rather than silently dropped. */\n problems: string[];\n}\n\nexport const PROJECT_SETTINGS = join('.earshot', 'settings.json');\nexport const LOCAL_SETTINGS = join('.earshot', 'settings.local.json');\n\nexport function settingsPath(scope: RuleScope, cwd: string): string {\n if (scope === 'global') return join(configDir(), 'settings.json');\n if (scope === 'project') return join(cwd, PROJECT_SETTINGS);\n if (scope === 'local') return join(cwd, LOCAL_SETTINGS);\n throw new Error(`scope \"${scope}\" is not persisted`);\n}\n\nasync function readSettings(path: string): Promise<SettingsFile | undefined> {\n const raw = await readFile(path, 'utf8').catch(() => undefined);\n if (raw === undefined) return undefined;\n try {\n return JSON.parse(raw) as SettingsFile;\n } catch (error) {\n throw new Error(`${path} is not valid JSON: ${(error as Error).message}`);\n }\n}\n\n/**\n * Loads global, then project, then local settings.\n *\n * Rules from every scope are concatenated rather than overriding one another -\n * a narrower scope cannot remove a broader scope's deny rule, which is the whole\n * point of deny-first. `defaultMode` is the exception: it is a preference, not a\n * restriction, so the narrowest scope that sets one wins.\n */\nexport async function loadSettings(cwd: string): Promise<LoadedSettings> {\n const scopes: RuleScope[] = ['global', 'project', 'local'];\n const rules: Rule[] = [];\n const problems: string[] = [];\n let defaultMode: PermissionMode | undefined;\n let curiosity: Curiosity | undefined;\n let maxCostUsd: number | undefined;\n\n for (const scope of scopes) {\n const path = settingsPath(scope, cwd);\n const file = await readSettings(path).catch((error: Error) => {\n problems.push(error.message);\n return undefined;\n });\n if (!file) continue;\n\n if (file.curiosity !== undefined) {\n if (isCuriosity(file.curiosity)) curiosity = file.curiosity;\n else problems.push(`${path}: \"${file.curiosity}\" is not a curiosity level`);\n }\n\n if (file.maxCostUsd !== undefined) {\n if (\n typeof file.maxCostUsd === 'number' &&\n Number.isFinite(file.maxCostUsd) &&\n file.maxCostUsd > 0\n ) {\n maxCostUsd = file.maxCostUsd;\n } else {\n problems.push(`${path}: \"maxCostUsd\" must be a positive number of dollars`);\n }\n }\n\n if (!file.permissions) continue;\n\n // Deny rules are collected first within each scope so an explanation names\n // the deny rule rather than a coincidentally earlier allow rule.\n for (const [effect, list] of [\n ['deny', file.permissions.deny],\n ['ask', file.permissions.ask],\n ['allow', file.permissions.allow],\n ] as const) {\n for (const text of list ?? []) {\n try {\n rules.push(parseRule(text, effect, scope));\n } catch (error) {\n if (!(error instanceof RuleSyntaxError)) throw error;\n problems.push(`${path}: ${error.message}`);\n }\n }\n }\n\n const mode = file.permissions.defaultMode;\n if (mode !== undefined) {\n if (isPermissionMode(mode)) defaultMode = mode;\n else problems.push(`${path}: \"${mode}\" is not a permission mode`);\n }\n }\n\n // Deny rules sort ahead of the rest so `firstDeny` and the explanations it\n // produces are stable regardless of which scope contributed what.\n rules.sort((a, b) => Number(b.effect === 'deny') - Number(a.effect === 'deny'));\n return {\n rules,\n ...(defaultMode ? { defaultMode } : {}),\n ...(curiosity ? { curiosity } : {}),\n ...(maxCostUsd !== undefined ? { maxCostUsd } : {}),\n problems,\n };\n}\n\n/**\n * Appends one allow rule to a settings file, preserving whatever else is in it.\n * Read-modify-write rather than a rewrite from the in-memory rule set: the file\n * is the user's, and may hold settings this version does not know about.\n */\nexport async function persistRule(rule: Rule, scope: RuleScope, cwd: string): Promise<string> {\n const path = settingsPath(scope, cwd);\n const existing = (await readSettings(path).catch(() => undefined)) ?? {};\n\n const permissions = existing.permissions ?? {};\n const list = permissions[rule.effect] ?? [];\n if (!list.includes(rule.source)) list.push(rule.source);\n\n const next: SettingsFile = { ...existing, permissions: { ...permissions, [rule.effect]: list } };\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, `${JSON.stringify(next, null, 2)}\\n`, 'utf8');\n return path;\n}\n",
30
+ "import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { configDir, isReasoningEffort, type ReasoningEffort } from '@earshot/providers';\nimport { type Curiosity, isCuriosity } from '../context/system-prompt.ts';\nimport { isPermissionMode, type PermissionMode } from './engine.ts';\nimport { parseRule, type Rule, type RuleScope, RuleSyntaxError } from './rules.ts';\n\nexport interface SettingsFile {\n permissions?: {\n allow?: string[];\n deny?: string[];\n ask?: string[];\n defaultMode?: string;\n };\n curiosity?: string;\n /** Session budget in USD. A turn stops and asks before spending past it. */\n maxCostUsd?: number;\n defaultModel?: string;\n reasoningEfforts?: Record<string, string>;\n}\n\nexport interface LoadedSettings {\n rules: Rule[];\n /** From the narrowest scope that sets one. */\n defaultMode?: PermissionMode;\n /** Preferences, like `defaultMode`: the narrowest scope that sets one wins. */\n curiosity?: Curiosity;\n maxCostUsd?: number;\n defaultModel?: string;\n reasoningEfforts: Record<string, ReasoningEffort>;\n /** Rules that failed to parse, reported rather than silently dropped. */\n problems: string[];\n}\n\nexport const PROJECT_SETTINGS = join('.earshot', 'settings.json');\nexport const LOCAL_SETTINGS = join('.earshot', 'settings.local.json');\n\nexport function settingsPath(scope: RuleScope, cwd: string): string {\n if (scope === 'global') return join(configDir(), 'settings.json');\n if (scope === 'project') return join(cwd, PROJECT_SETTINGS);\n if (scope === 'local') return join(cwd, LOCAL_SETTINGS);\n throw new Error(`scope \"${scope}\" is not persisted`);\n}\n\nasync function readSettings(path: string): Promise<SettingsFile | undefined> {\n const raw = await readFile(path, 'utf8').catch(() => undefined);\n if (raw === undefined) return undefined;\n try {\n return JSON.parse(raw) as SettingsFile;\n } catch (error) {\n throw new Error(`${path} is not valid JSON: ${(error as Error).message}`);\n }\n}\n\n/**\n * Loads global, then project, then local settings.\n *\n * Rules from every scope are concatenated rather than overriding one another -\n * a narrower scope cannot remove a broader scope's deny rule, which is the whole\n * point of deny-first. `defaultMode` is the exception: it is a preference, not a\n * restriction, so the narrowest scope that sets one wins.\n */\nexport async function loadSettings(cwd: string): Promise<LoadedSettings> {\n const scopes: RuleScope[] = ['global', 'project', 'local'];\n const rules: Rule[] = [];\n const problems: string[] = [];\n let defaultMode: PermissionMode | undefined;\n let curiosity: Curiosity | undefined;\n let maxCostUsd: number | undefined;\n let defaultModel: string | undefined;\n const reasoningEfforts: Record<string, ReasoningEffort> = {};\n\n for (const scope of scopes) {\n const path = settingsPath(scope, cwd);\n const file = await readSettings(path).catch((error: Error) => {\n problems.push(error.message);\n return undefined;\n });\n if (!file) continue;\n\n if (typeof file.defaultModel === 'string' && file.defaultModel.trim() !== '') {\n defaultModel = file.defaultModel.trim();\n }\n for (const [model, effort] of Object.entries(file.reasoningEfforts ?? {})) {\n if (isReasoningEffort(effort)) reasoningEfforts[model] = effort;\n else problems.push(`${path}: reasoning effort for \"${model}\" is invalid`);\n }\n\n if (file.curiosity !== undefined) {\n if (isCuriosity(file.curiosity)) curiosity = file.curiosity;\n else problems.push(`${path}: \"${file.curiosity}\" is not a curiosity level`);\n }\n\n if (file.maxCostUsd !== undefined) {\n if (\n typeof file.maxCostUsd === 'number' &&\n Number.isFinite(file.maxCostUsd) &&\n file.maxCostUsd > 0\n ) {\n maxCostUsd = file.maxCostUsd;\n } else {\n problems.push(`${path}: \"maxCostUsd\" must be a positive number of dollars`);\n }\n }\n\n if (!file.permissions) continue;\n\n // Deny rules are collected first within each scope so an explanation names\n // the deny rule rather than a coincidentally earlier allow rule.\n for (const [effect, list] of [\n ['deny', file.permissions.deny],\n ['ask', file.permissions.ask],\n ['allow', file.permissions.allow],\n ] as const) {\n for (const text of list ?? []) {\n try {\n rules.push(parseRule(text, effect, scope));\n } catch (error) {\n if (!(error instanceof RuleSyntaxError)) throw error;\n problems.push(`${path}: ${error.message}`);\n }\n }\n }\n\n const mode = file.permissions.defaultMode;\n if (mode !== undefined) {\n if (isPermissionMode(mode)) defaultMode = mode;\n else problems.push(`${path}: \"${mode}\" is not a permission mode`);\n }\n }\n\n // Deny rules sort ahead of the rest so `firstDeny` and the explanations it\n // produces are stable regardless of which scope contributed what.\n rules.sort((a, b) => Number(b.effect === 'deny') - Number(a.effect === 'deny'));\n return {\n rules,\n ...(defaultMode ? { defaultMode } : {}),\n ...(curiosity ? { curiosity } : {}),\n ...(maxCostUsd !== undefined ? { maxCostUsd } : {}),\n ...(defaultModel ? { defaultModel } : {}),\n reasoningEfforts,\n problems,\n };\n}\n\nexport async function persistDefaultModel(\n model: string,\n scope: Extract<RuleScope, 'global' | 'project' | 'local'>,\n cwd: string,\n): Promise<string> {\n const path = settingsPath(scope, cwd);\n const existing = (await readSettings(path).catch(() => undefined)) ?? {};\n await mkdir(dirname(path), { recursive: true });\n await writeFile(\n path,\n `${JSON.stringify({ ...existing, defaultModel: model }, null, 2)}\\n`,\n 'utf8',\n );\n return path;\n}\n\nexport async function persistReasoningEffort(\n model: string,\n effort: ReasoningEffort | undefined,\n scope: Extract<RuleScope, 'global' | 'project' | 'local'>,\n cwd: string,\n): Promise<string> {\n const path = settingsPath(scope, cwd);\n const existing = (await readSettings(path).catch(() => undefined)) ?? {};\n const reasoningEfforts = { ...(existing.reasoningEfforts ?? {}) };\n if (effort === undefined) delete reasoningEfforts[model];\n else reasoningEfforts[model] = effort;\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, `${JSON.stringify({ ...existing, reasoningEfforts }, null, 2)}\\n`, 'utf8');\n return path;\n}\n\n/**\n * Appends one allow rule to a settings file, preserving whatever else is in it.\n * Read-modify-write rather than a rewrite from the in-memory rule set: the file\n * is the user's, and may hold settings this version does not know about.\n */\nexport async function persistRule(rule: Rule, scope: RuleScope, cwd: string): Promise<string> {\n const path = settingsPath(scope, cwd);\n const existing = (await readSettings(path).catch(() => undefined)) ?? {};\n\n const permissions = existing.permissions ?? {};\n const list = permissions[rule.effect] ?? [];\n if (!list.includes(rule.source)) list.push(rule.source);\n\n const next: SettingsFile = { ...existing, permissions: { ...permissions, [rule.effect]: list } };\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, `${JSON.stringify(next, null, 2)}\\n`, 'utf8');\n return path;\n}\n",
30
31
  "import { spawn } from 'node:child_process';\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { dataDir } from '@earshot/providers';\n\n/**\n * A plan you can edit.\n *\n * The plan lives in a file rather than in the conversation, and that is the\n * whole point: a plan you can only accept or reject is a prompt. You edit it -\n * in $EDITOR, or in your own editor at the path this prints - and what gets\n * pinned into the run is what the file says when you approve it, not what the\n * model wrote.\n */\nexport function planPath(sessionId: string): string {\n return join(dataDir(), 'plans', `${sessionId}.md`);\n}\n\nexport const PLAN_PROMPT =\n 'Produce a plan and stop. Do not change anything: state what you would do, ' +\n 'file by file, with the behaviour that changes and the behaviour that does not, ' +\n 'and name anything you are unsure about rather than deciding it quietly. The ' +\n 'user will edit this plan before approving it, so write it for them to change.';\n\nexport async function savePlan(path: string, text: string): Promise<void> {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, text.endsWith('\\n') ? text : `${text}\\n`, 'utf8');\n}\n\nexport async function readPlan(path: string): Promise<string | undefined> {\n const raw = await readFile(path, 'utf8').catch(() => undefined);\n return raw?.trim() === '' ? undefined : raw;\n}\n\n/**\n * The approved plan, as it goes into the system prompt.\n *\n * Named as the user's, because it is: they edited it and approved it, and the\n * model needs to treat a line it did not write as binding rather than as a\n * suggestion it made earlier.\n */\nexport function renderPlan(text: string): string {\n return (\n '<plan>\\n' +\n 'The user approved this plan for the work in progress, after editing it. It is\\n' +\n 'their instruction, not your earlier draft: where it differs from what you would\\n' +\n 'have done, it wins. If following it turns out to be wrong, say so and stop -\\n' +\n 'do not quietly do something else.\\n\\n' +\n `${text.trim()}\\n</plan>`\n );\n}\n\nexport interface EditorResult {\n edited: boolean;\n /** What to tell the user. Always set, including on success. */\n message: string;\n}\n\n/**\n * Opens the plan in $VISUAL or $EDITOR.\n *\n * Falls back to naming the path rather than guessing at an editor: launching\n * something the user did not configure, into a terminal earshot is already\n * drawing in, is a worse outcome than one line telling them where the file is.\n */\nexport async function openInEditor(\n path: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<EditorResult> {\n const editor = env.VISUAL ?? env.EDITOR;\n if (!editor || editor.trim() === '') {\n return {\n edited: false,\n message: `no $EDITOR set. Edit ${path} in your own editor, then run /plan approve.`,\n };\n }\n\n const code = await new Promise<number | null>((resolve) => {\n // The editor takes the terminal: it is interactive, and piping its stdio\n // would leave the user typing into something they cannot see.\n const child = spawn(editor, [path], { stdio: 'inherit', shell: true });\n child.on('error', () => resolve(-1));\n child.on('close', (status) => resolve(status));\n });\n\n if (code !== 0) {\n return {\n edited: false,\n message: `${editor} exited ${code ?? 'on a signal'}; ${path} is unchanged as far as earshot knows.`,\n };\n }\n return {\n edited: true,\n message: `edited ${path}. Run /plan approve to pin it, or /plan show to read it back.`,\n };\n}\n",
31
32
  "import { relative, sep } from 'node:path';\nimport { matchesGlob } from '../tools/glob-match.ts';\nimport type { PermissionRequest } from '../tools/types.ts';\n\n/**\n * What the agent said it was going to do, before it did any of it.\n *\n * The scope is declared by the model in its own words and its own file list.\n * That is the point: a contract the agent wrote is one it can be held to, and\n * the check below is a comparison against that statement rather than a guess at\n * what the user meant.\n */\nexport interface Scope {\n /** Paths or globs, relative to the working directory. */\n files: string[];\n /** One paragraph: which behaviours change, and which do not. */\n intent: string;\n /** The agent's own estimate of the size of the change, in changed lines. */\n estimatedLines?: number;\n}\n\nexport type ScopeConcern =\n | { kind: 'undeclared'; summary: string }\n | { kind: 'out-of-scope-file'; summary: string; path: string }\n | { kind: 'new-dependency'; summary: string }\n | { kind: 'rename-or-delete'; summary: string }\n | { kind: 'formatting-sweep'; summary: string }\n | { kind: 'test-removal'; summary: string }\n | { kind: 'over-budget'; summary: string; changed: number; budget: number };\n\nexport interface ScopeOptions {\n /**\n * Smallest turn that can be over budget. Below it the guard stays quiet: a\n * fifty-line change is not a scope violation whatever the estimate said, and\n * a guard that fires on those trains people to confirm without reading.\n */\n floorLines: number;\n /** How far past the agent's own estimate a turn may go before it confirms. */\n overrunFactor: number;\n /** Fires on the first mutating call when nothing has been declared. */\n requireDeclaration: boolean;\n}\n\nexport const DEFAULT_SCOPE_OPTIONS: ScopeOptions = {\n floorLines: 150,\n overrunFactor: 3,\n requireDeclaration: false,\n};\n\nconst DEPENDENCY_FILES = [\n 'package.json',\n 'bun.lock',\n 'bun.lockb',\n 'package-lock.json',\n 'pnpm-lock.yaml',\n 'yarn.lock',\n 'Cargo.toml',\n 'Cargo.lock',\n 'go.mod',\n 'go.sum',\n 'requirements.txt',\n 'pyproject.toml',\n 'Gemfile',\n];\n\n/** `npm i x`, `bun add x`, `cargo add x`, `pip install x`, and the rest. */\nconst INSTALL_COMMAND =\n /\\b(?:npm|bun|pnpm|yarn)\\s+(?:add|install|i)\\b|\\bcargo\\s+add\\b|\\b(?:pip|pip3|uv)\\s+(?:add|install)\\b|\\bgo\\s+get\\b/;\n\nconst MOVE_COMMAND = /\\b(?:rm|mv|git\\s+rm|git\\s+mv)\\b/;\n\nconst TEST_PATH = /(^|[/\\\\])(?:tests?|__tests__|spec)[/\\\\]|\\.(?:test|spec)\\.[cm]?[jt]sx?$/;\n\nconst TEST_DECLARATION = /\\b(?:test|it|describe)\\s*[.(]|\\bdef\\s+test_|\\bfunc\\s+Test[A-Z]/;\n\n/**\n * Tracks the declared scope for a turn and reports what falls outside it.\n *\n * Deliberately not a line count. A line count either fires on every large change\n * the user actually asked for or never fires on the small wrong ones, so the\n * check is categorical - a file nobody mentioned, a dependency nobody asked for,\n * a rename, a formatting sweep, a deleted test - and the size limit is only a\n * backstop for the case where none of those name the problem.\n */\nexport class ScopeContract {\n private scope: Scope | undefined;\n private changedLines = 0;\n /** Concerns already confirmed, so the same one is not raised twice a turn. */\n private readonly accepted = new Set<string>();\n private readonly options: ScopeOptions;\n\n constructor(\n private readonly cwd: string,\n options: Partial<ScopeOptions> = {},\n ) {\n this.options = { ...DEFAULT_SCOPE_OPTIONS, ...options };\n }\n\n get declared(): Scope | undefined {\n return this.scope;\n }\n\n declare(scope: Scope): void {\n this.scope = scope;\n this.changedLines = 0;\n this.accepted.clear();\n }\n\n /** Widens the scope after the user confirmed something outside it. */\n widen(concern: ScopeConcern, path?: string): void {\n this.accepted.add(concern.kind);\n if (path && this.scope) this.scope = { ...this.scope, files: [...this.scope.files, path] };\n }\n\n /** Starts a new turn: the budget is per turn, the declaration is not. */\n beginTurn(): void {\n this.changedLines = 0;\n this.accepted.clear();\n }\n\n /**\n * Called after a change was approved and applied, so the running total counts\n * what happened rather than what was proposed.\n */\n record(request: PermissionRequest): void {\n this.changedLines += countChangedLines(request.detail);\n }\n\n /** The first thing about this call that falls outside what was declared. */\n check(request: PermissionRequest): ScopeConcern | undefined {\n const concern = this.classify(request);\n if (!concern || this.accepted.has(concern.kind)) return undefined;\n return concern;\n }\n\n private classify(request: PermissionRequest): ScopeConcern | undefined {\n const scope = this.scope;\n if (!scope) {\n if (!this.options.requireDeclaration) return undefined;\n return {\n kind: 'undeclared',\n summary:\n 'This is the first change of the turn and no scope was declared. Say which files ' +\n 'will change and what will change about them first.',\n };\n }\n\n const paths = (request.writes ?? []).map((path) => this.display(path));\n\n for (const path of paths) {\n // Named explicitly, not merely matched: a broad glob like `**` should not\n // silently license adding a dependency, which is the change most likely to\n // outlive the task that introduced it.\n if (isDependencyFile(path) && !scope.files.includes(path)) {\n return {\n kind: 'new-dependency',\n summary: `${path} declares this project's dependencies and is not in the declared scope.`,\n };\n }\n if (!this.covers(scope, path)) {\n return {\n kind: 'out-of-scope-file',\n path,\n summary: `${path} is not one of the files this turn said it would change (${scope.files.join(', ')}).`,\n };\n }\n }\n\n if (request.tool === 'Bash') {\n if (INSTALL_COMMAND.test(request.target)) {\n return {\n kind: 'new-dependency',\n summary: 'This command adds a dependency, which the task did not ask for.',\n };\n }\n if (MOVE_COMMAND.test(request.target)) {\n return {\n kind: 'rename-or-delete',\n summary: 'This command renames or deletes files, which the task did not ask for.',\n };\n }\n }\n\n const diff = summariseDiff(request.detail);\n if (diff.changed >= 20 && diff.whitespaceOnly) {\n return {\n kind: 'formatting-sweep',\n summary: `This change rewrites ${diff.changed} lines without changing what any of them say.`,\n };\n }\n if (diff.removedTests > 0 && paths.some((path) => TEST_PATH.test(path))) {\n return {\n kind: 'test-removal',\n summary: `This removes ${diff.removedTests} test${diff.removedTests === 1 ? '' : 's'}. A test that is in the way is usually reporting something real.`,\n };\n }\n\n const budget = Math.max(\n this.options.floorLines,\n (scope.estimatedLines ?? 0) * this.options.overrunFactor,\n );\n const total = this.changedLines + diff.changed;\n if (total > budget) {\n return {\n kind: 'over-budget',\n changed: total,\n budget,\n summary:\n `This turn has changed ${total} lines against an estimate of ` +\n `${scope.estimatedLines ?? 'none'}. A change several times the size of the one ` +\n 'described is usually a different change.',\n };\n }\n return undefined;\n }\n\n private covers(scope: Scope, path: string): boolean {\n return scope.files.some(\n (pattern) => pattern === path || matchesGlob(pattern, path) || path.startsWith(`${pattern}/`),\n );\n }\n\n private display(path: string): string {\n const rel = relative(this.cwd, path);\n return rel === '' || rel.startsWith('..') ? path : rel.split(sep).join('/');\n }\n}\n\nfunction isDependencyFile(path: string): boolean {\n const name = path.split('/').pop() ?? path;\n return DEPENDENCY_FILES.includes(name);\n}\n\nexport function countChangedLines(diff: string): number {\n return summariseDiff(diff).changed;\n}\n\ninterface DiffSummary {\n changed: number;\n /** True when the added and removed lines differ only in whitespace. */\n whitespaceOnly: boolean;\n removedTests: number;\n}\n\n/**\n * Reads the unified diff the permission prompt already shows.\n *\n * Nothing here re-derives the change from the tool input: the diff is what the\n * user was shown and approved, so it is also what the guard should measure.\n */\nexport function summariseDiff(detail: string): DiffSummary {\n const added: string[] = [];\n const removed: string[] = [];\n for (const line of detail.split('\\n')) {\n if (line.startsWith('+++') || line.startsWith('---') || line.startsWith('@@')) continue;\n if (line.startsWith('+')) added.push(line.slice(1));\n else if (line.startsWith('-')) removed.push(line.slice(1));\n }\n\n const squash = (lines: string[]) => lines.join('').replace(/\\s+/g, '');\n const removedTests = removed.filter((line) => TEST_DECLARATION.test(line)).length;\n const addedTests = added.filter((line) => TEST_DECLARATION.test(line)).length;\n\n return {\n changed: added.length + removed.length,\n whitespaceOnly: added.length > 0 && removed.length > 0 && squash(added) === squash(removed),\n removedTests: Math.max(0, removedTests - addedTests),\n };\n}\n",
32
33
  "import { readdir, readFile, stat } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { configDir } from '@earshot/providers';\nimport { parseFrontmatter, parseList } from './frontmatter.ts';\n\nexport type ExtensionScope = 'user' | 'project';\n\nexport interface Skill {\n /**\n * From the file or directory name, never from the frontmatter. The name is\n * what the model and the user address a skill by, and letting a file choose a\n * name that is not its own is how one skill impersonates another.\n */\n name: string;\n description: string;\n scope: ExtensionScope;\n path: string;\n /**\n * Tools this skill may use while it is active. It can only ever remove tools\n * from what the session already allows - see `narrow()`.\n */\n allowedTools: string[];\n body: string;\n}\n\nexport interface SlashCommand {\n name: string;\n description: string;\n scope: ExtensionScope;\n path: string;\n /** The prompt, with `$ARGUMENTS` still in it. */\n body: string;\n}\n\nexport interface Discovered {\n skills: Skill[];\n commands: SlashCommand[];\n problems: string[];\n}\n\n/**\n * A skill body is text the model will act on, and an enormous one would crowd\n * out the conversation it was meant to help with.\n */\nexport const MAX_SKILL_CHARS = 32_000;\n\nconst NAME = /^[a-z0-9][a-z0-9-]{0,63}$/;\n\nexport function skillsDir(scope: ExtensionScope, cwd: string): string {\n return scope === 'user' ? join(configDir(), 'skills') : join(cwd, '.earshot', 'skills');\n}\n\nexport function commandsDir(scope: ExtensionScope, cwd: string): string {\n return scope === 'user' ? join(configDir(), 'commands') : join(cwd, '.earshot', 'commands');\n}\n\n/**\n * Skills and slash commands from the user's config directory and from the\n * project.\n *\n * The user's own skills win a name collision, and the project's is reported\n * rather than dropped silently. That is the opposite of how AGENTS.md resolves,\n * deliberately: a project file is content someone cloned, and a repository being\n * able to replace the meaning of a command the user wrote themselves is a\n * different thing from it adding one of its own.\n */\nexport async function discoverExtensions(cwd: string): Promise<Discovered> {\n const problems: string[] = [];\n const skills = new Map<string, Skill>();\n const commands = new Map<string, SlashCommand>();\n\n for (const scope of ['user', 'project'] as ExtensionScope[]) {\n for (const skill of await readSkills(scope, cwd, problems)) {\n const existing = skills.get(skill.name);\n if (existing) {\n problems.push(\n `skill \"${skill.name}\" in ${skill.path} is shadowed by the one in ${existing.path}`,\n );\n continue;\n }\n skills.set(skill.name, skill);\n }\n for (const command of await readCommands(scope, cwd, problems)) {\n const existing = commands.get(command.name);\n if (existing) {\n problems.push(\n `command /${command.name} in ${command.path} is shadowed by the one in ${existing.path}`,\n );\n continue;\n }\n commands.set(command.name, command);\n }\n }\n\n return {\n skills: [...skills.values()].sort((a, b) => a.name.localeCompare(b.name)),\n commands: [...commands.values()].sort((a, b) => a.name.localeCompare(b.name)),\n problems,\n };\n}\n\nasync function readSkills(\n scope: ExtensionScope,\n cwd: string,\n problems: string[],\n): Promise<Skill[]> {\n const dir = skillsDir(scope, cwd);\n const entries = await readdir(dir).catch(() => [] as string[]);\n const skills: Skill[] = [];\n\n for (const entry of entries.sort()) {\n // Both layouts are accepted: a directory holding SKILL.md alongside whatever\n // else it references, and a single file for a skill that is only prose.\n const asDirectory = join(dir, entry, 'SKILL.md');\n const asFile = join(dir, entry);\n const isDirectory = await stat(join(dir, entry))\n .then((info) => info.isDirectory())\n .catch(() => false);\n const path = isDirectory ? asDirectory : asFile;\n if (!isDirectory && !entry.endsWith('.md')) continue;\n\n const name = isDirectory ? entry : entry.replace(/\\.md$/, '');\n if (!NAME.test(name)) {\n problems.push(`skill \"${name}\" in ${dir} does not have a usable name`);\n continue;\n }\n\n const raw = await readFile(path, 'utf8').catch(() => undefined);\n if (raw === undefined) {\n if (isDirectory) problems.push(`${join(dir, entry)} has no SKILL.md`);\n continue;\n }\n\n const { fields, body } = parseFrontmatter(raw);\n if (body.trim() === '') {\n problems.push(`skill \"${name}\" (${path}) is empty`);\n continue;\n }\n skills.push({\n name,\n description: fields.get('description') ?? `the \"${name}\" skill`,\n scope,\n path,\n allowedTools: parseList(fields.get('allowed-tools')),\n body: body.length > MAX_SKILL_CHARS ? `${body.slice(0, MAX_SKILL_CHARS)}\\n\\n[...]` : body,\n });\n }\n return skills;\n}\n\nasync function readCommands(\n scope: ExtensionScope,\n cwd: string,\n problems: string[],\n): Promise<SlashCommand[]> {\n const dir = commandsDir(scope, cwd);\n const entries = await readdir(dir).catch(() => [] as string[]);\n const commands: SlashCommand[] = [];\n\n for (const entry of entries.sort()) {\n if (!entry.endsWith('.md')) continue;\n const name = entry.replace(/\\.md$/, '');\n if (!NAME.test(name)) {\n problems.push(`command \"${name}\" in ${dir} does not have a usable name`);\n continue;\n }\n const path = join(dir, entry);\n const raw = await readFile(path, 'utf8').catch(() => undefined);\n if (raw === undefined) continue;\n\n const { fields, body } = parseFrontmatter(raw);\n if (body.trim() === '') {\n problems.push(`command /${name} (${path}) is empty`);\n continue;\n }\n commands.push({\n name,\n description: fields.get('description') ?? `the /${name} command`,\n scope,\n path,\n body,\n });\n }\n return commands;\n}\n\n/**\n * Expands a slash command into the prompt it stands for.\n *\n * `$ARGUMENTS` is everything after the command name; `$1`..`$9` are the\n * whitespace-separated words. A placeholder with nothing to fill it becomes an\n * empty string rather than being left in the prompt, where the model would read\n * `$2` as something it was meant to work out.\n */\nexport function expandCommand(command: SlashCommand, argument = ''): string {\n const words = argument.trim() === '' ? [] : argument.trim().split(/\\s+/);\n return command.body\n .replace(/\\$ARGUMENTS\\b/g, argument.trim())\n .replace(/\\$([1-9])\\b/g, (_, index: string) => words[Number(index) - 1] ?? '');\n}\n\n/**\n * The index that sits in the system prompt: what exists and what each is for,\n * never the bodies. A skill's body is loaded when it is used, which is the whole\n * reason a skill is not just more system prompt.\n */\nexport function renderSkillIndex(skills: Skill[]): string {\n if (skills.length === 0) return '';\n const lines = skills.map((skill) => `- ${skill.name}: ${skill.description}`);\n return (\n 'Skills available in this project. Each is a set of instructions written for a ' +\n 'particular kind of task. Load one with the `skill` tool when the task at hand is ' +\n 'one it covers, and follow it in place of your default approach.\\n\\n' +\n `<skills>\\n${lines.join('\\n')}\\n</skills>`\n );\n}\n\n/**\n * What a skill's `allowed-tools` means: the intersection with what the session\n * already offers. A skill file is content that may have come from a repository\n * someone cloned, so it can say \"while doing this, only these tools\" and be\n * believed, and it cannot say \"while doing this, also allow rm -rf\" at all.\n */\nexport function narrow(available: string[], allowed: string[]): string[] {\n if (allowed.length === 0) return available;\n const wanted = new Set(allowed);\n const kept = available.filter((name) => wanted.has(name));\n // Asking must always be possible: a skill that narrowed away the ability to\n // ask would turn \"ask rather than guess\" off by writing a list.\n if (!kept.includes('ask_user') && available.includes('ask_user')) kept.push('ask_user');\n return kept;\n}\n",
@@ -55,17 +56,17 @@
55
56
  "import type { ToolDefinition } from '@earshot/providers';\nimport { askUserTool } from './ask-user.ts';\nimport { bashOutputTool, bashTool } from './bash.ts';\nimport { declareScopeTool } from './declare-scope.ts';\nimport { editTool, multiEditTool } from './edit.ts';\nimport { globTool } from './glob.ts';\nimport { grepTool } from './grep.ts';\nimport { lsTool } from './ls.ts';\nimport { readTool } from './read.ts';\nimport { taskTool } from './task.ts';\nimport { todoTool } from './todo.ts';\nimport type { Tool } from './types.ts';\nimport { webFetchTool } from './web-fetch.ts';\nimport { writeTool } from './write.ts';\n\nexport * from './diff.ts';\nexport { applyEdits } from './edit.ts';\nexport * from './exec.ts';\nexport * from './fs-paths.ts';\nexport * from './glob-match.ts';\nexport * from './jobs.ts';\nexport * from './schema.ts';\nexport * from './shell.ts';\nexport { skillTool } from './skill.ts';\nexport * from './task.ts';\nexport * from './todo.ts';\nexport * from './tool-search.ts';\nexport * from './types.ts';\nexport * from './walk.ts';\nexport { htmlToText } from './web-fetch.ts';\n\n/**\n * Order matters only for how the model reads the list, and reading tools first is\n * the order we want it to work in: look before you change anything.\n */\nexport const BUILTIN_TOOLS: Tool<never>[] = [\n readTool,\n lsTool,\n globTool,\n grepTool,\n editTool,\n multiEditTool,\n writeTool,\n bashTool,\n bashOutputTool,\n webFetchTool,\n askUserTool,\n todoTool,\n declareScopeTool,\n taskTool,\n] as unknown as Tool<never>[];\n\nexport class ToolRegistry {\n private readonly tools = new Map<string, Tool<never>>();\n\n constructor(tools: Iterable<Tool<never>> = BUILTIN_TOOLS) {\n for (const tool of tools) this.add(tool);\n }\n\n add(tool: Tool<never>): void {\n if (this.tools.has(tool.name)) throw new Error(`duplicate tool \"${tool.name}\"`);\n this.tools.set(tool.name, tool);\n }\n\n get(name: string): Tool<never> | undefined {\n return this.tools.get(name);\n }\n\n list(): Tool<never>[] {\n return [...this.tools.values()];\n }\n\n /** Only the tools a given permission mode allows are offered to the model. */\n definitions(filter?: (tool: Tool<never>) => boolean): ToolDefinition[] {\n return this.list()\n .filter((tool) => filter?.(tool) ?? true)\n .map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n }));\n }\n}\n",
56
57
  "import { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { MEMORY_FILENAMES } from '../context/agents-md.ts';\n\nexport interface VerifyCommand {\n command: string;\n /** Where it came from, so the user can see why this command and not another. */\n source: string;\n}\n\n/**\n * Finds the command that proves the change works.\n *\n * Declaration beats detection: a project that says how it is tested is telling\n * the truth about itself, while a `test` script can be a placeholder that exits\n * zero. Nothing is invented - if none of these turn anything up, verification\n * simply does not run and the agent has to say so rather than claim it passed.\n */\nexport async function detectTestCommand(cwd: string): Promise<VerifyCommand | undefined> {\n return (\n (await fromSettings(cwd)) ??\n (await fromInstructions(cwd)) ??\n (await fromPackageJson(cwd)) ??\n (await fromMakefile(cwd))\n );\n}\n\nasync function fromSettings(cwd: string): Promise<VerifyCommand | undefined> {\n for (const name of ['settings.local.json', 'settings.json']) {\n const path = join(cwd, '.earshot', name);\n const raw = await readFile(path, 'utf8').catch(() => undefined);\n if (raw === undefined) continue;\n try {\n const parsed = JSON.parse(raw) as { verify?: { test?: string } };\n const command = parsed.verify?.test;\n if (typeof command === 'string' && command.trim() !== '') {\n return { command: command.trim(), source: `.earshot/${name}` };\n }\n } catch {\n // A settings file that does not parse is reported elsewhere; here it just\n // means no declared command.\n }\n }\n return undefined;\n}\n\n/** `- \\`bun test\\` - test suite`, the shape AGENTS.md documents commands in. */\nconst INSTRUCTION_LINE = /^\\s*[-*]?\\s*`([^`]+)`\\s*[-–:]\\s*(.*)$/;\n\nasync function fromInstructions(cwd: string): Promise<VerifyCommand | undefined> {\n for (const name of MEMORY_FILENAMES) {\n const raw = await readFile(join(cwd, name), 'utf8').catch(() => undefined);\n if (raw === undefined) continue;\n for (const line of raw.split('\\n')) {\n const match = INSTRUCTION_LINE.exec(line);\n const command = match?.[1]?.trim();\n const description = match?.[2] ?? '';\n if (!command || !/\\btests?\\b|\\btest suite\\b/i.test(description)) continue;\n // \"`bun test` - test suite\", not \"`bun run lint` - biome\".\n if (!/\\btests?\\b/i.test(command)) continue;\n return { command, source: name };\n }\n }\n return undefined;\n}\n\nasync function fromPackageJson(cwd: string): Promise<VerifyCommand | undefined> {\n const raw = await readFile(join(cwd, 'package.json'), 'utf8').catch(() => undefined);\n if (raw === undefined) return undefined;\n try {\n const parsed = JSON.parse(raw) as { scripts?: Record<string, string> };\n const script = parsed.scripts?.test;\n if (typeof script !== 'string' || script.trim() === '') return undefined;\n // The npm-init default, which exits 1 and proves nothing.\n if (/no test specified/i.test(script)) return undefined;\n return { command: 'npm test', source: 'package.json' };\n } catch {\n return undefined;\n }\n}\n\nasync function fromMakefile(cwd: string): Promise<VerifyCommand | undefined> {\n const raw = await readFile(join(cwd, 'Makefile'), 'utf8').catch(() => undefined);\n if (raw === undefined) return undefined;\n return /^test\\s*:/m.test(raw) ? { command: 'make test', source: 'Makefile' } : undefined;\n}\n",
57
58
  "import { exec } from '../tools/exec.ts';\nimport { resolveShell } from '../tools/shell.ts';\n\nexport interface VerificationResult {\n command: string;\n source: string;\n exitCode: number | null;\n /** Combined output, verbatim. Never summarised - that is the whole point. */\n output: string;\n timedOut: boolean;\n}\n\n/**\n * Runs the project's own test command and returns exactly what it printed.\n *\n * The output is reported rather than characterised. \"Tests pass\" from an agent\n * that did not run them is the single most expensive thing this harness can say,\n * and a summary of the output is where that claim hides.\n */\nexport async function runVerification(\n command: string,\n source: string,\n options: { cwd: string; env?: NodeJS.ProcessEnv; signal?: AbortSignal; timeoutMs?: number },\n): Promise<VerificationResult> {\n // resolveShell throws on Windows without Git Bash. That is a reportable\n // outcome here, not a crash: the turn still happened, and the agent has to say\n // the change is unverified rather than dying at the end of it.\n const result = await (async () => {\n const shell = resolveShell(options.env ?? process.env);\n return exec(shell.file, [...shell.args, command], {\n cwd: options.cwd,\n ...(options.env ? { env: options.env } : {}),\n ...(options.signal ? { signal: options.signal } : {}),\n timeoutMs: options.timeoutMs ?? 300_000,\n });\n })().catch((error: Error) => ({\n stdout: '',\n stderr: `could not run ${command}: ${error.message}`,\n code: null,\n signal: null,\n timedOut: false,\n }));\n\n return {\n command,\n source,\n exitCode: result.code,\n output: [result.stdout, result.stderr]\n .filter((part) => part.trim() !== '')\n .join('\\n')\n .trim(),\n timedOut: result.timedOut,\n };\n}\n",
58
- "import type {\n EarshotError,\n ImagePart,\n Message,\n ProviderRegistry,\n TextPart,\n ToolCallPart,\n ToolDefinition,\n ToolResultOutput,\n ToolResultPart,\n Usage,\n} from '@earshot/providers';\n\nexport type UserPromptPart = TextPart | ImagePart;\nexport type UserPrompt = string | UserPromptPart[];\n\nimport {\n type CompactionPolicy,\n compact,\n DEFAULT_SHAPER_OPTIONS,\n estimateTokens,\n type ShaperOptions,\n SUMMARY_PROMPT,\n shapeMessages,\n shouldCompact,\n} from './context/index.ts';\nimport type { HookEvent } from './hooks/config.ts';\nimport type { HookOutcome } from './hooks/run.ts';\nimport type { HookRunner } from './hooks/runner.ts';\nimport type { ResolvedModel } from './model.ts';\nimport { resolveModel, streamModel, turnCost } from './model.ts';\nimport {\n decide,\n type PermissionMode,\n type PermissionPrompt,\n ruleFromChoice,\n} from './permissions/engine.ts';\nimport type { Rule } from './permissions/rules.ts';\nimport { persistRule } from './permissions/settings.ts';\nimport { renderPlan } from './plan/index.ts';\nimport { type ScopeConcern, ScopeContract, type ScopeOptions } from './scope/index.ts';\nimport { narrow } from './skills/discover.ts';\nimport { BUILTIN_TOOLS, ToolRegistry } from './tools/index.ts';\nimport { BackgroundJobs } from './tools/jobs.ts';\nimport { DEFAULT_SUBAGENT_TOOLS } from './tools/task.ts';\nimport { MemoryTodoStore } from './tools/todo.ts';\nimport { toolSearchTool } from './tools/tool-search.ts';\nimport {\n type PermissionRequest,\n type SubagentRequest,\n type SubagentResult,\n type Tool,\n type ToolContext,\n ToolInputError,\n type ToolResult,\n} from './tools/types.ts';\nimport type { ShadowGit, SnapshotFile } from './undo/shadow-git.ts';\nimport { detectTestCommand, runVerification, type VerificationResult } from './verify/index.ts';\n\n/** Everything the TUI and the headless renderer need to show a turn. */\nexport type AgentEvent =\n | { type: 'model_start'; model: string }\n | { type: 'text_delta'; text: string }\n | { type: 'reasoning_delta'; text: string }\n | { type: 'message'; message: Message }\n | { type: 'tool_start'; call: ToolCallPart }\n | { type: 'tool_end'; toolCallId: string; toolName: string; result: ToolResult }\n | { type: 'permission'; request: PermissionRequest; reason: string }\n | { type: 'usage'; usage: Usage; costUsd: number }\n | { type: 'compacted'; replaced: number; summary: string }\n | { type: 'scope_concern'; concern: ScopeConcern; accepted: boolean }\n | { type: 'verification'; result: VerificationResult }\n | { type: 'hook'; event: HookEvent; blocked?: string; problems: string[] }\n | { type: 'subagent'; description: string; steps: number; costUsd: number }\n /**\n * The one-line \"why\" in front of a tool batch. Emitted for every batch,\n * including one the model gave no reason for - a missing intent line is\n * itself worth seeing, and reporting nothing would hide it.\n */\n | { type: 'intent'; text: string | undefined; calls: number }\n /**\n * The session budget was reached. Emitted whether the user then raises it or\n * stops: a run that quietly spent past its limit and a run that was allowed\n * to should not look the same in a transcript.\n */\n | { type: 'budget'; spentUsd: number; limitUsd: number; raisedTo?: number }\n | { type: 'turn_end'; reason: 'stop' | 'aborted' | 'max_steps' | 'error' | 'budget' }\n | { type: 'error'; error: EarshotError };\n\nexport interface AgentOptions {\n registry: ProviderRegistry;\n model: ResolvedModel;\n cwd: string;\n system: string;\n mode: PermissionMode;\n rules: Rule[];\n /** Called when a call needs approval. Without one, every ask becomes a denial. */\n prompt?: PermissionPrompt;\n /** Called by the `ask_user` tool. Without one, the tool reports it cannot ask. */\n ask?: (question: string, options?: string[]) => Promise<string>;\n tools?: Tool<never>[];\n /** Guards against a model that loops on tools forever. */\n maxSteps?: number;\n env?: NodeJS.ProcessEnv;\n /** Called with every message appended to history, for session persistence. */\n onMessage?: (message: Message) => void | Promise<void>;\n /** Snapshot store for undo. Absent means this session keeps no undo history. */\n shadow?: ShadowGit;\n /** Overrides for the context shapers. */\n shapers?: Partial<ShaperOptions>;\n compaction?: Partial<CompactionPolicy>;\n /**\n * Called when compaction has written a summary, so the session can append a\n * `summary` entry. The entry records what was summarised; it removes nothing.\n */\n onCompaction?: (summary: string, historyCut: number) => void | Promise<void>;\n /** Overrides for the scope guard. */\n scope?: Partial<ScopeOptions>;\n /**\n * Running the project's tests after a turn that changed files, and reporting\n * what they printed. `enabled: false` turns it off; `command` overrides\n * detection.\n */\n verify?: { enabled?: boolean; command?: string; timeoutMs?: number };\n /** User-configured hooks. Absent means nothing is hooked and nothing is run. */\n hooks?: HookRunner;\n /**\n * Shared rather than constructed, so a subagent is held to the same scope the\n * parent declared. A subagent with a scope of its own would be a hole straight\n * through the contract: the parent says which files it will touch, and then\n * spawns something that never agreed to it.\n */\n scopeContract?: ScopeContract;\n /** Set on a subagent. Its cost lands on the parent's total, not beside it. */\n onCost?: (costUsd: number) => void;\n /**\n * Session budget in USD. Checked before each model call rather than after:\n * stopping once the money is gone is not a budget, it is a receipt.\n */\n maxCostUsd?: number;\n /**\n * Asked when the budget is reached. Returns a new, higher limit to continue\n * with, or undefined to stop. Absent means stop - a headless run must not\n * block forever waiting for a terminal that is not there.\n */\n confirmBudget?: (spentUsd: number, limitUsd: number) => Promise<number | undefined>;\n /** Steps a subagent this agent spawns may take. */\n subagentMaxSteps?: number;\n}\n\nconst DEFAULT_MAX_STEPS = 100;\n\n/**\n * The agent loop.\n *\n * History is a single flat list and is only ever appended to. That is not a\n * simplification: Anthropic rejects a request whose history contains edited\n * thinking blocks, so any feature that looks like rewriting the past (compaction,\n * rewind) has to be expressed as new entries instead. Every other provider is\n * treated as if it had the same rule, so there is one code path rather than two.\n */\nexport class Agent {\n readonly history: Message[] = [];\n readonly todos = new MemoryTodoStore();\n readonly scope: ScopeContract;\n readonly jobs = new BackgroundJobs();\n\n private readonly tools: ToolRegistry;\n private readonly readFiles = new Set<string>();\n /** Messages typed while a turn is running, injected at the next model call. */\n private readonly queued: Message[] = [];\n private rules: Rule[];\n /** Mutable because `/model` swaps it; `options.model` is only the initial one. */\n private resolved: ResolvedModel;\n private mode: PermissionMode;\n private totalCostUsd = 0;\n private maxCostUsd: number | undefined;\n /**\n * Mutable so a memory captured mid-session applies from the next call rather\n * than from the next session - a preference the user has to restart to see\n * honoured reads as one that was ignored.\n */\n private systemPrompt: string;\n /**\n * The approved plan, kept beside the system prompt rather than merged into\n * it: the prompt is rebuilt whenever a memory changes, and a plan folded into\n * that string would be lost the next time it was.\n */\n private plan: string | undefined;\n /** Pre-change hashes for the batch currently executing. */\n private batchSnapshot: SnapshotFile[] = [];\n /** Events raised while a call ran, drained by the batch loop that owns it. */\n private readonly pending: AgentEvent[] = [];\n /**\n * Where the live request starts, and what stands in for everything before it.\n * Compaction cannot shorten `history` - that would rewrite the past - so it\n * records a cut and a preamble, and the request is rebuilt from those.\n */\n private compactedAt = 0;\n private compactionPreamble: Message | undefined;\n /** Tokens in the last request actually sent, for the status line. */\n private lastRequestTokens = 0;\n /** Whether anything has been changed since the last end-of-turn check. */\n private mutatedSinceCheck = false;\n private checksThisTurn = 0;\n /**\n * Installed after construction by the TUI, which cannot supply them earlier:\n * both resolve against React state that does not exist until the app mounts.\n */\n private promptFn: PermissionPrompt | undefined;\n private askFn: ((question: string, options?: string[]) => Promise<string>) | undefined;\n /**\n * Set by a skill that declares `allowed-tools`, and cleared at the start of\n * every turn: a narrowing that outlived the task it was written for would\n * silently remove tools from work the skill knows nothing about.\n */\n private toolRestriction: string[] | undefined;\n /**\n * Deferred tools `tool_search` has surfaced. Session-scoped rather than\n * per-turn: a tool the model went looking for in one turn is exactly the tool\n * the follow-up turn needs, and making it search again would be theatre.\n */\n private readonly surfacedTools = new Set<string>();\n\n constructor(private readonly options: AgentOptions) {\n this.tools = new ToolRegistry(options.tools ?? (BUILTIN_TOOLS as Tool<never>[]));\n if (this.tools.list().some((tool) => tool.deferred)) {\n this.tools.add(\n toolSearchTool({\n all: () => this.tools.list().filter((tool) => tool.deferred),\n surface: (name) => {\n this.surfacedTools.add(name);\n },\n surfaced: (name) => this.surfacedTools.has(name),\n }) as unknown as Tool<never>,\n );\n }\n this.scope = options.scopeContract ?? new ScopeContract(options.cwd, options.scope ?? {});\n this.rules = [...options.rules];\n this.mode = options.mode;\n this.promptFn = options.prompt;\n this.askFn = options.ask;\n this.systemPrompt = options.system;\n this.maxCostUsd = options.maxCostUsd;\n this.resolved = options.model;\n }\n\n /** The model this session is currently calling. */\n get model(): ResolvedModel {\n return this.resolved;\n }\n\n /**\n * Switches model mid-session.\n *\n * Resolved through the same `resolveModel` the CLI uses, so a reference with\n * no credentials fails here with `MissingCredentialsError` and the session\n * keeps the model it had - a half-applied switch would leave the agent\n * pricing one model's tokens against another's rates.\n */\n async changeModel(ref: string): Promise<ResolvedModel> {\n const resolved = await resolveModel(this.options.registry, ref);\n this.resolved = resolved;\n return resolved;\n }\n\n /**\n * The permission rules in force, newest first. A copy: a caller that could\n * push onto this array would be adding rules without going through the gate.\n */\n get permissionRules(): readonly Rule[] {\n return [...this.rules];\n }\n\n get budgetUsd(): number | undefined {\n return this.maxCostUsd;\n }\n\n /** Undefined removes the budget. Used by `/cost` and by the overrun prompt. */\n setBudget(maxCostUsd: number | undefined): void {\n this.maxCostUsd = maxCostUsd;\n }\n\n /** Replaces the approval callback. Passing undefined turns every ask into a denial. */\n setPrompt(prompt: PermissionPrompt | undefined): void {\n this.promptFn = prompt;\n }\n\n setAsk(ask: ((question: string, options?: string[]) => Promise<string>) | undefined): void {\n this.askFn = ask;\n }\n\n get cwd(): string {\n return this.options.cwd;\n }\n\n get system(): string {\n return this.systemPrompt;\n }\n\n setSystem(system: string): void {\n this.systemPrompt = system;\n }\n\n /** Pins an approved plan for the rest of the run. Undefined clears it. */\n setPlan(plan: string | undefined): void {\n this.plan = plan?.trim() === '' ? undefined : plan;\n }\n\n get pinnedPlan(): string | undefined {\n return this.plan;\n }\n\n /** What is actually sent as the system prompt: the prompt plus any plan. */\n private get effectiveSystem(): string {\n return this.plan === undefined\n ? this.systemPrompt\n : `${this.systemPrompt}\\n\\n${renderPlan(this.plan)}`;\n }\n\n get permissionMode(): PermissionMode {\n return this.mode;\n }\n\n setPermissionMode(mode: PermissionMode): void {\n this.mode = mode;\n }\n\n get costUsd(): number {\n return this.totalCostUsd;\n }\n\n /**\n * Adds to this session's spend. A subagent calls its parent's, so one session\n * has one number: a budget that a subagent could spend outside would not be a\n * budget.\n */\n private addCost(costUsd: number): void {\n this.totalCostUsd += costUsd;\n this.options.onCost?.(costUsd);\n }\n\n /** Estimated tokens in the last request, and the window they have to fit in. */\n get contextUse(): { tokens: number; window: number } {\n return { tokens: this.lastRequestTokens, window: this.resolved.model.contextWindow ?? 0 };\n }\n\n /** Files read or written this session, in the order they were first touched. */\n get touchedFiles(): string[] {\n return [...this.readFiles];\n }\n\n /**\n * Queues a message to be delivered at the next model call rather than\n * interrupting. This is what steering is: the user redirects the work without\n * cancelling the turn and losing everything the model has already done.\n */\n steer(text: string): void {\n this.queued.push({ role: 'user', content: [{ type: 'text', text }] });\n }\n\n get pendingSteers(): number {\n return this.queued.length;\n }\n\n /**\n * Replaces the in-memory history, for `/rewind` and `/fork`.\n *\n * The transcript on disk is untouched: rewinding points the next append at an\n * earlier entry and the abandoned branch stays in the file. What changes is\n * only which messages the next request is built from - and the compaction\n * state resets with them, since a summary of messages that are no longer in\n * the history would describe work the model can no longer see.\n */\n replaceHistory(messages: Message[]): void {\n this.history.length = 0;\n this.history.push(...messages);\n this.compactedAt = 0;\n this.compactionPreamble = undefined;\n }\n\n /** Ends the session's background processes. Safe to call more than once. */\n dispose(): void {\n this.jobs.killAll();\n }\n\n async *runTurn(prompt: UserPrompt, signal: AbortSignal): AsyncGenerator<AgentEvent> {\n // The budget is per turn; the declaration outlives one, because a follow-up\n // like \"now do the same for the other file\" is the same piece of work.\n this.scope.beginTurn();\n this.options.hooks?.beginTurn();\n this.toolRestriction = undefined;\n this.mutatedSinceCheck = false;\n this.checksThisTurn = 0;\n\n const promptText = userPromptText(prompt);\n const promptParts: UserPromptPart[] =\n typeof prompt === 'string'\n ? [{ type: 'text', text: prompt }]\n : prompt.map((part) => ({ ...part }));\n if (\n promptParts.some((part) => part.type === 'image') &&\n !this.resolved.model.capabilities.vision\n ) {\n yield {\n type: 'error',\n error: {\n kind: 'invalid_request',\n message: `${this.resolved.model.name} does not support image input`,\n retryable: false,\n },\n };\n yield { type: 'turn_end', reason: 'error' };\n return;\n }\n\n const submitted = await this.options.hooks?.userPromptSubmit(promptText, signal);\n if (submitted) {\n yield hookEvent('UserPromptSubmit', submitted);\n if (submitted.decision === 'deny') {\n // The prompt is not appended at all. A blocked prompt that still entered\n // history would come back on the next request as something the user\n // asked for and the agent ignored.\n yield { type: 'turn_end', reason: 'stop' };\n return;\n }\n }\n\n const context = submitted?.context ?? [];\n const content: UserPromptPart[] =\n context.length > 0 && promptParts.length === 1 && promptParts[0]?.type === 'text'\n ? [\n {\n type: 'text',\n text: `${promptParts[0].text}\\n\\n<hook-context>\\n${context.join('\\n\\n')}\\n</hook-context>`,\n },\n ]\n : [\n ...promptParts,\n ...(context.length\n ? [\n {\n type: 'text' as const,\n text: `<hook-context>\\n${context.join('\\n\\n')}\\n</hook-context>`,\n },\n ]\n : []),\n ];\n await this.append({\n role: 'user',\n content,\n });\n\n const maxSteps = this.options.maxSteps ?? DEFAULT_MAX_STEPS;\n const modelName = `${this.resolved.provider.id}/${this.resolved.model.id}`;\n\n for (let step = 0; step < maxSteps; step++) {\n if (signal.aborted) {\n yield { type: 'turn_end', reason: 'aborted' };\n return;\n }\n\n // Steering messages land here, between one model call and the next, which\n // is the only point where history can grow without contradicting a tool\n // call the model is still waiting on a result for.\n while (this.queued.length > 0) {\n await this.append(this.queued.shift() as Message);\n }\n\n const overrun = await this.checkBudget();\n if (overrun) {\n yield overrun.event;\n if (overrun.stop) {\n yield { type: 'turn_end', reason: 'budget' };\n return;\n }\n }\n\n for await (const event of this.prepareRequest(signal)) yield event;\n const messages = this.requestMessages();\n this.lastRequestTokens = estimateTokens(messages, this.effectiveSystem);\n\n yield { type: 'model_start', model: modelName };\n\n let assistant: Message | undefined;\n let failed: EarshotError | undefined;\n\n for await (const event of streamModel(this.options.registry, this.resolved, {\n system: this.effectiveSystem,\n messages,\n tools: this.offeredTools(),\n abortSignal: signal,\n })) {\n switch (event.type) {\n case 'text_delta':\n yield { type: 'text_delta', text: event.text };\n break;\n case 'reasoning_delta':\n yield { type: 'reasoning_delta', text: event.text };\n break;\n case 'finish': {\n assistant = event.message;\n const costUsd = turnCost(this.resolved.model, event.usage);\n this.addCost(costUsd);\n yield { type: 'usage', usage: event.usage, costUsd };\n break;\n }\n case 'error':\n failed = event.error;\n break;\n default:\n break;\n }\n }\n\n if (failed) {\n yield { type: 'error', error: failed };\n yield { type: 'turn_end', reason: failed.kind === 'abort' ? 'aborted' : 'error' };\n return;\n }\n if (!assistant) {\n yield { type: 'turn_end', reason: signal.aborted ? 'aborted' : 'error' };\n return;\n }\n\n // Appended verbatim, including providerMetadata: an assistant message that\n // is not replayed exactly is what breaks the next request on providers that\n // sign or encrypt their reasoning.\n await this.append(assistant);\n yield { type: 'message', message: assistant };\n\n const calls = assistant.content.filter(\n (part): part is ToolCallPart => part.type === 'tool_call',\n );\n if (calls.length === 0) {\n const check = await this.selfCheck(signal);\n if (!check) {\n const stop = await this.options.hooks?.stop(signal);\n if (stop) {\n yield hookEvent('Stop', stop);\n if (stop.decision === 'deny') {\n await this.append({\n role: 'user',\n content: [\n {\n type: 'text',\n text:\n `<hook>\\nA Stop hook asked you to keep going: ${\n stop.reason ?? 'no reason given'\n }\\nThis message is from the harness, not the user. If you believe the ` +\n `work is finished, say so and stop.\\n</hook>`,\n },\n ],\n });\n continue;\n }\n }\n yield { type: 'turn_end', reason: 'stop' };\n return;\n }\n if (check.verification) yield { type: 'verification', result: check.verification };\n await this.append(check.message);\n continue;\n }\n\n yield { type: 'intent', text: intentOf(assistant), calls: calls.length };\n\n const results: ToolResultPart[] = [];\n this.batchSnapshot = [];\n for await (const event of this.runCalls(calls, results, signal)) yield event;\n await this.commitSnapshot(calls);\n\n // Results are appended in the order the model emitted the calls, not the\n // order they finished, so a replayed transcript is deterministic even\n // though read-only calls ran concurrently.\n await this.append({ role: 'tool', content: results });\n\n if (signal.aborted) {\n yield { type: 'turn_end', reason: 'aborted' };\n return;\n }\n }\n\n yield { type: 'turn_end', reason: 'max_steps' };\n }\n\n /**\n * Whether this session may make another model call.\n *\n * The check is before the call, so the limit is a decision point rather than\n * a post-mortem. Raising it is the user's, and only ever upwards: a callback\n * that answers with a limit already spent would loop.\n */\n private async checkBudget(): Promise<{ event: AgentEvent; stop: boolean } | undefined> {\n const limitUsd = this.maxCostUsd;\n if (limitUsd === undefined || this.totalCostUsd < limitUsd) return undefined;\n\n const spentUsd = this.totalCostUsd;\n const raisedTo = await (this.options.confirmBudget ?? defaultBudgetPrompt(this.askFn))(\n spentUsd,\n limitUsd,\n );\n if (raisedTo === undefined || !Number.isFinite(raisedTo) || raisedTo <= spentUsd) {\n return { event: { type: 'budget', spentUsd, limitUsd }, stop: true };\n }\n this.maxCostUsd = raisedTo;\n return { event: { type: 'budget', spentUsd, limitUsd, raisedTo }, stop: false };\n }\n\n /**\n * The tools this call offers the model. A skill's `allowed-tools` is applied\n * as an intersection with what the session already has, never as a union, so a\n * skill file cannot hand itself a tool the user's settings withheld.\n */\n private offeredTools(): ToolDefinition[] {\n const all = this.tools.definitions(\n (tool) => !tool.deferred || this.surfacedTools.has(tool.name),\n );\n if (!this.toolRestriction) return all;\n const kept = new Set(\n narrow(\n all.map((tool) => tool.name),\n this.toolRestriction,\n ),\n );\n return all.filter((tool) => kept.has(tool.name));\n }\n\n /**\n * Read-only calls run concurrently; anything that mutates runs one at a time.\n * Two edits to the same file in one batch would otherwise race, and the second\n * would be applied against content the first had already replaced.\n */\n private async *runCalls(\n calls: ToolCallPart[],\n into: ToolResultPart[],\n signal: AbortSignal,\n ): AsyncGenerator<AgentEvent> {\n const parallel: Array<{ index: number; promise: Promise<ToolResultPart> }> = [];\n const slots = new Array<ToolResultPart | undefined>(calls.length);\n\n for (const [index, call] of calls.entries()) {\n const tool = this.tools.get(call.toolName);\n if (tool?.readOnly) {\n yield { type: 'tool_start', call };\n parallel.push({ index, promise: this.runOne(tool, call, signal) });\n }\n }\n\n for (const [index, call] of calls.entries()) {\n const tool = this.tools.get(call.toolName);\n if (tool?.readOnly) continue;\n if (signal.aborted) break;\n yield { type: 'tool_start', call };\n const part = await this.runOne(tool, call, signal);\n slots[index] = part;\n while (this.pending.length > 0) yield this.pending.shift() as AgentEvent;\n yield {\n type: 'tool_end',\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n result: asResult(part),\n };\n }\n\n for (const { index, promise } of parallel) {\n const part = await promise;\n slots[index] = part;\n while (this.pending.length > 0) yield this.pending.shift() as AgentEvent;\n const call = calls[index] as ToolCallPart;\n yield {\n type: 'tool_end',\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n result: asResult(part),\n };\n }\n\n // Every call gets a result, including ones skipped by an abort: a provider\n // rejects an assistant tool call that has no matching result on the next turn.\n for (const [index, call] of calls.entries()) {\n into.push(slots[index] ?? errorPart(call, 'interrupted before this tool ran'));\n }\n }\n\n private async runOne(\n tool: Tool<never> | undefined,\n call: ToolCallPart,\n signal: AbortSignal,\n ): Promise<ToolResultPart> {\n if (!tool) return errorPart(call, `no tool named \"${call.toolName}\"`);\n\n let input: never;\n try {\n input = tool.parse(call.input) as never;\n } catch (error) {\n return errorPart(call, (error as Error).message);\n }\n\n const ctx = this.context(signal);\n\n // Hooks run before the gate, and can only make the answer stricter: a deny\n // stops the call, an ask turns an allow into a prompt, and an approve is\n // read, reported and ignored.\n const before = await this.options.hooks?.preToolUse(call.toolName, input, signal);\n if (before) {\n this.pending.push(hookEvent('PreToolUse', before));\n if (before.decision === 'deny') {\n return errorPart(call, before.reason ?? `a PreToolUse hook blocked ${call.toolName}`);\n }\n }\n\n let request: PermissionRequest | undefined;\n try {\n request = tool.permission?.(input, ctx);\n } catch (error) {\n // A permission() that throws is usually a bad path or a `find` that does not\n // match - a model error, reported as one, before the user is ever prompted.\n return errorPart(call, (error as Error).message);\n }\n\n let decision = decide(tool, request, {\n mode: this.mode,\n rules: this.rules,\n cwd: this.options.cwd,\n });\n\n if (decision.outcome === 'deny') return errorPart(call, decision.reason);\n\n // A hook asking for confirmation is honoured even for a read-only tool, which\n // has no PermissionRequest of its own; one is built from the call so the\n // prompt still shows what is actually about to happen.\n if (before?.decision === 'ask' && decision.outcome === 'allow') {\n const asked = request ?? {\n tool: call.toolName,\n target: call.toolName,\n title: call.toolName,\n detail: `${call.toolName}(${JSON.stringify(call.input, null, 2)})`,\n };\n decision = {\n outcome: 'ask',\n reason: before.reason ?? 'a PreToolUse hook asked for confirmation',\n request: asked,\n };\n }\n\n if (decision.outcome === 'ask') {\n const prompt = this.promptFn;\n if (!prompt) {\n return errorPart(\n call,\n `${decision.reason}, and this session cannot prompt for approval. Ask the user ` +\n 'to re-run with a permission mode or rule that allows it.',\n );\n }\n const choice = await prompt(decision.request, decision.reason);\n if (choice.kind === 'deny') {\n return errorPart(call, choice.message ?? 'the user declined this action');\n }\n if (choice.kind === 'allow-always') {\n const rule = ruleFromChoice(decision.request, choice.scope);\n this.rules = [...this.rules, rule];\n if (choice.scope !== 'session') {\n await persistRule(rule, choice.scope, this.options.cwd).catch(() => undefined);\n }\n }\n }\n\n if (request) {\n const concern = this.scope.check(request);\n if (concern) {\n const accepted = await this.confirmScope(concern, request);\n this.pending.push({ type: 'scope_concern', concern, accepted });\n if (!accepted) {\n return errorPart(\n call,\n `${concern.summary} The user did not approve going outside the declared scope. ` +\n 'Do the part that is in scope, and tell them what you left out and why.',\n );\n }\n }\n // Counted after approval, so the running total is what was actually done.\n this.scope.record(request);\n this.mutatedSinceCheck = true;\n }\n\n // Hashed here, immediately before the change and after approval, so the\n // recorded contents are what was on disk when the tool ran.\n await this.captureWrites(request?.writes ?? []);\n\n try {\n const result = await tool.execute(input, ctx);\n const after = await this.options.hooks?.postToolUse(\n call.toolName,\n input,\n result.output,\n signal,\n );\n if (after) this.pending.push(hookEvent('PostToolUse', after));\n return {\n type: 'tool_result',\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n output: withHookContext(result.output, after?.context ?? []),\n ...(result.isError ? { isError: true } : {}),\n };\n } catch (error) {\n // A failing tool is data for the model, not a crash: it is expected to read\n // the message and try something else.\n const message =\n error instanceof ToolInputError\n ? error.message\n : `${call.toolName} failed: ${(error as Error).message}`;\n return errorPart(call, message);\n }\n }\n\n /**\n * Asks before doing something the turn did not say it would do.\n *\n * The prompt carries the real diff or command, exactly as an ordinary\n * permission prompt does - a scope prompt that summarised the change would\n * hide the thing the user is being asked to judge. \"Always\" widens the scope\n * for this session only; unlike a permission choice it persists no rule,\n * because the next task will have a different scope.\n */\n private async confirmScope(concern: ScopeConcern, request: PermissionRequest): Promise<boolean> {\n const prompt = this.promptFn;\n if (!prompt) return false;\n const choice = await prompt(\n {\n tool: 'Scope',\n target: request.target,\n title: `outside the declared scope: ${request.title}`,\n detail: `${concern.summary}\\n\\n${request.detail}`,\n ...(request.writes ? { writes: request.writes } : {}),\n },\n concern.summary,\n );\n if (choice.kind === 'deny') return false;\n if (choice.kind === 'allow-always') {\n this.scope.widen(concern, concern.kind === 'out-of-scope-file' ? concern.path : undefined);\n }\n return true;\n }\n\n /**\n * The end-of-turn check: run the project's tests, and make the model compare\n * what was asked for with what changed before it answers.\n *\n * It runs only on a turn that changed something, and at most twice, so a\n * model that keeps editing after a failure still terminates. The output is\n * handed over verbatim - a summary of it is exactly where \"tests pass\" from an\n * agent that never ran them hides.\n */\n private async selfCheck(\n signal: AbortSignal,\n ): Promise<{ message: Message; verification?: VerificationResult } | undefined> {\n if (!this.mutatedSinceCheck || this.checksThisTurn >= 2 || signal.aborted) return undefined;\n this.mutatedSinceCheck = false;\n this.checksThisTurn++;\n\n const configured = this.options.verify;\n const detected =\n configured?.enabled === false\n ? undefined\n : configured?.command\n ? { command: configured.command, source: 'configuration' }\n : await detectTestCommand(this.options.cwd);\n\n const verification = detected\n ? await runVerification(detected.command, detected.source, {\n cwd: this.options.cwd,\n env: this.options.env ?? process.env,\n signal,\n ...(configured?.timeoutMs !== undefined ? { timeoutMs: configured.timeoutMs } : {}),\n })\n : undefined;\n\n const evidence = verification\n ? `\\`${verification.command}\\` (from ${verification.source}) exited ` +\n `${verification.timedOut ? 'after timing out' : String(verification.exitCode)}. Its ` +\n `output, verbatim:\\n\\n${verification.output || '(no output)'}`\n : 'No test command was detected for this project, so nothing was verified. Say that ' +\n 'plainly rather than implying the change works.';\n\n return {\n message: {\n role: 'user',\n content: [\n {\n type: 'text',\n text:\n `<self-check>\\nThis turn changed files. Before you answer, compare the original ` +\n `request with what actually changed, and report anything you skipped, narrowed, ` +\n `left unverified or that is failing. Four of five things done is that report, ` +\n `not \"done\".\\n\\n${evidence}\\n\\nIf something is failing, fix it or say what is ` +\n `failing and why - do not describe the run as passing. This message is from the ` +\n `harness, not the user; answer them, not it.\\n</self-check>`,\n },\n ],\n },\n ...(verification ? { verification } : {}),\n };\n }\n\n /** Records pre-change contents for paths not already captured in this batch. */\n private async captureWrites(paths: string[]): Promise<void> {\n const shadow = this.options.shadow;\n if (!shadow) return;\n for (const path of paths) {\n if (this.batchSnapshot.some((file) => file.path === path)) continue;\n this.batchSnapshot.push({ path, before: await shadow.hashFile(path) });\n }\n }\n\n /**\n * Writes one snapshot record per tool batch. Per-batch rather than per-call so\n * undo restores a coherent unit: a `multi_edit` across three files, or an edit\n * plus the command that formatted it, is one step back rather than three.\n */\n private async commitSnapshot(calls: ToolCallPart[]): Promise<void> {\n const shadow = this.options.shadow;\n if (!shadow || this.batchSnapshot.length === 0) return;\n const label = calls.map((call) => call.toolName).join(', ');\n await shadow.record(this.batchSnapshot, label).catch(() => undefined);\n this.batchSnapshot = [];\n }\n\n /**\n * The messages for one request: the live tail of history, any compaction\n * preamble in front of it, then the cheap shapers. A copy, never the live\n * array - an adapter that reads messages lazily would otherwise see entries\n * appended after the request was made.\n */\n private requestMessages(): Message[] {\n const tail = this.history.slice(this.compactedAt);\n const base = this.compactionPreamble ? [this.compactionPreamble, ...tail] : tail;\n return shapeMessages(base, { ...DEFAULT_SHAPER_OPTIONS, ...this.options.shapers });\n }\n\n /** Compacts if the shaped request would still be too large for the window. */\n private async *prepareRequest(signal: AbortSignal): AsyncGenerator<AgentEvent> {\n const window = this.resolved.model.contextWindow ?? 0;\n const policy = { threshold: 0.8, keepRecentMessages: 8, ...this.options.compaction };\n const shaped = this.requestMessages();\n if (!shouldCompact(shaped, this.effectiveSystem, window, policy)) return;\n yield* this.runCompaction(signal);\n }\n\n /**\n * Compacts now, whatever the window is at.\n *\n * `/compact` is the same operation the 80% threshold performs, asked for\n * early - before a long tool result pushes the session over on its own. It\n * appends, like every other compaction: nothing in history is rewritten.\n */\n async *compactNow(signal: AbortSignal): AsyncGenerator<AgentEvent> {\n yield* this.runCompaction(signal);\n }\n\n private async *runCompaction(signal: AbortSignal): AsyncGenerator<AgentEvent> {\n const window = this.resolved.model.contextWindow ?? 0;\n const policy = { threshold: 0.8, keepRecentMessages: 8, ...this.options.compaction };\n const shaped = this.requestMessages();\n\n const result = await compact({\n messages: shaped,\n system: this.effectiveSystem,\n contextWindow: window,\n policy,\n todos: this.todos\n .list()\n .filter((todo) => todo.status !== 'done')\n .map((todo) => todo.text),\n filesTouched: this.touchedFiles,\n summarize: (messages) => this.summarise(messages, signal),\n }).catch(() => undefined);\n if (!result) return;\n\n // The cut is expressed against the shaped array, which has the same length\n // and order as the tail it was built from, minus the preamble.\n const offset = this.compactionPreamble ? 1 : 0;\n this.compactedAt += Math.max(0, result.replaced - offset);\n this.compactionPreamble = result.messages[0];\n this.lastRequestTokens = estimateTokens(this.requestMessages(), this.effectiveSystem);\n // The cut is reported as a history index, not as a count of shaped\n // messages: the session layer maps it back to the entry ids the summary\n // stands in for, and those are indexed by history position.\n await this.options.onCompaction?.(result.summary, this.compactedAt);\n yield { type: 'compacted', replaced: result.replaced, summary: result.summary };\n }\n\n /** One extra model call, with no tools: the summary that compaction stands on. */\n private async summarise(messages: Message[], signal: AbortSignal): Promise<string> {\n let text = '';\n for await (const event of streamModel(this.options.registry, this.resolved, {\n system: SUMMARY_PROMPT,\n messages: [...messages, { role: 'user', content: [{ type: 'text', text: SUMMARY_PROMPT }] }],\n abortSignal: signal,\n })) {\n if (event.type === 'text_delta') text += event.text;\n if (event.type === 'finish') {\n for (const part of event.message.content) {\n if (part.type === 'text' && text === '') text = part.text;\n }\n }\n if (event.type === 'error') throw new Error(event.error.message);\n }\n if (text.trim() === '') throw new Error('the model returned an empty summary');\n return text;\n }\n\n private context(signal: AbortSignal): ToolContext {\n return {\n cwd: this.options.cwd,\n signal,\n todos: this.todos,\n jobs: this.jobs,\n scope: this.scope,\n env: this.options.env ?? process.env,\n ask: async (question, choices) => {\n const ask = this.askFn;\n if (!ask) {\n throw new ToolInputError(\n 'this session cannot ask the user a question; decide with the information you have ' +\n 'and state the assumption you made',\n );\n }\n return ask(question, choices);\n },\n restrictTools: (names) => {\n this.toolRestriction = names;\n },\n // Absent on a subagent, so nesting stops at one level: an agent that could\n // spawn agents that spawn agents has no bound anyone can reason about.\n ...(this.options.onCost\n ? {}\n : { runSubagent: (request, sub) => this.subagent(request, sub) }),\n markRead: (path) => {\n this.readFiles.add(path);\n },\n hasRead: (path) => this.readFiles.has(path),\n };\n }\n\n /**\n * Runs a nested agent and returns its answer.\n *\n * What it inherits is the whole design. Permission mode and rules, so nothing\n * it does escapes the gate. The parent's ScopeContract object, so a file\n * nobody declared still prompts. The parent's cost total, so one session has\n * one number. What it does not inherit is context: it starts empty and is\n * given the prompt, which is the point - and it hands back an answer, not a\n * transcript, so the parent's window holds the conclusion rather than the\n * work.\n */\n private async subagent(request: SubagentRequest, signal: AbortSignal): Promise<SubagentResult> {\n const allowed = new Set(request.tools?.length ? request.tools : DEFAULT_SUBAGENT_TOOLS);\n // Intersection, never a union: a subagent cannot be handed a tool the parent\n // session does not have, whoever named it.\n const tools = this.tools\n .list()\n .filter((tool) => allowed.has(tool.name) && tool.name !== 'task');\n\n // The parent's persistence callbacks are dropped rather than passed on: a\n // subagent's messages are not the session's transcript, and writing them\n // there would replay them on the next resume as if the user had said them.\n const { onMessage: _persist, onCompaction: _summarised, ...inherited } = this.options;\n\n const child = new Agent({\n ...inherited,\n system:\n // The plan travels with it: a subagent working outside the plan the user\n // approved is the same hole as one working outside the declared scope.\n `${this.effectiveSystem}\\n\\n<subagent>\\nYou are running as a subagent for one ` +\n `self-contained task: ${request.description}. You cannot see the conversation that ` +\n 'sent you here, and only your final message is returned - so answer in full, and ' +\n 'say plainly what you could not find or could not do rather than implying success.' +\n '\\n</subagent>',\n tools,\n scopeContract: this.scope,\n onCost: (costUsd) => this.addCost(costUsd),\n maxSteps: this.options.subagentMaxSteps ?? 30,\n });\n child.setPrompt(this.promptFn);\n child.setAsk(this.askFn);\n\n let text = '';\n let steps = 0;\n let stoppedBecause: SubagentResult['stoppedBecause'];\n const before = this.totalCostUsd;\n\n for await (const event of child.runTurn(request.prompt, signal)) {\n if (event.type === 'model_start') steps++;\n if (event.type === 'message') {\n const said = event.message.content\n .filter((part) => part.type === 'text')\n .map((part) => (part.type === 'text' ? part.text : ''))\n .join('');\n if (said.trim() !== '') text = said;\n }\n if (event.type === 'turn_end' && event.reason !== 'stop') stoppedBecause = event.reason;\n if (event.type === 'error') stoppedBecause = 'error';\n // Prompts and scope questions the subagent raised are the user's to see.\n if (event.type === 'permission' || event.type === 'scope_concern' || event.type === 'hook') {\n this.pending.push(event);\n }\n }\n child.dispose();\n\n const costUsd = this.totalCostUsd - before;\n this.pending.push({ type: 'subagent', description: request.description, steps, costUsd });\n return { text: text.trim(), steps, costUsd, ...(stoppedBecause ? { stoppedBecause } : {}) };\n }\n\n private async append(message: Message): Promise<void> {\n this.history.push(message);\n await this.options.onMessage?.(message);\n }\n}\n\n/**\n * The line the model said before reaching for a tool.\n *\n * The first line of the text it emitted alongside the calls, not all of it: the\n * point of the intent line is that one line of output is enough to catch a wrong\n * turn, and a paragraph is not one line.\n */\nfunction intentOf(assistant: Message): string | undefined {\n const said = assistant.content\n .filter((part) => part.type === 'text')\n .map((part) => (part.type === 'text' ? part.text : ''))\n .join(' ')\n .trim();\n if (said === '') return undefined;\n return said\n .split(/\\r?\\n/)\n .find((line) => line.trim() !== '')\n ?.trim();\n}\n\nfunction hookEvent(event: HookEvent, outcome: HookOutcome): AgentEvent {\n return {\n type: 'hook',\n event,\n ...(outcome.decision === 'deny' && outcome.reason ? { blocked: outcome.reason } : {}),\n problems: outcome.problems,\n };\n}\n\n/**\n * A PostToolUse hook's output, attached to the result the model reads. Appended\n * rather than substituted: the tool's own output is what actually happened, and\n * a hook commenting on it must not be able to replace it.\n */\nfunction withHookContext(output: ToolResultOutput, context: string[]): ToolResultOutput {\n if (context.length === 0) return output;\n const note = `<hook-context>\\n${context.join('\\n\\n')}\\n</hook-context>`;\n if (output.type === 'text') return { type: 'text', value: `${output.value}\\n\\n${note}` };\n return {\n type: 'content',\n value: [\n ...(output.type === 'content'\n ? output.value\n : [{ type: 'text' as const, text: JSON.stringify(output.value) }]),\n { type: 'text', text: note },\n ],\n };\n}\n\nfunction errorPart(call: ToolCallPart, message: string): ToolResultPart {\n return {\n type: 'tool_result',\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n output: { type: 'text', value: message },\n isError: true,\n };\n}\n\nfunction asResult(part: ToolResultPart): ToolResult {\n return { output: part.output, ...(part.isError ? { isError: true } : {}) };\n}\n\n/**\n * The budget question, asked through whatever the session uses to ask the user\n * anything else. A session with no way to ask - headless, or a subagent - stops\n * rather than blocking on a terminal that is not there.\n */\nfunction defaultBudgetPrompt(\n ask: ((question: string, options?: string[]) => Promise<string>) | undefined,\n): (spentUsd: number, limitUsd: number) => Promise<number | undefined> {\n if (!ask) return async () => undefined;\n return async (spentUsd, limitUsd) => {\n const answer = await ask(\n `This session has spent $${spentUsd.toFixed(2)} against a $${limitUsd.toFixed(2)} budget. ` +\n 'Continue?',\n ['Stop here', `Raise the budget to $${(limitUsd * 2).toFixed(2)}`, 'Remove the budget'],\n );\n if (answer.startsWith('Raise')) return limitUsd * 2;\n if (answer.startsWith('Remove')) return Number.MAX_SAFE_INTEGER;\n return undefined;\n };\n}\n\nfunction userPromptText(prompt: UserPrompt): string {\n if (typeof prompt === 'string') return prompt;\n return prompt\n .map((part) => (part.type === 'text' ? part.text : `[${part.mediaType} image]`))\n .join('\\n\\n');\n}\n",
59
+ "import type {\n EarshotError,\n ImagePart,\n Message,\n ProviderRegistry,\n ReasoningEffort,\n TextPart,\n ToolCallPart,\n ToolDefinition,\n ToolResultOutput,\n ToolResultPart,\n Usage,\n} from '@earshot/providers';\n\nexport type UserPromptPart = TextPart | ImagePart;\nexport type UserPrompt = string | UserPromptPart[];\n\nimport {\n type CompactionPolicy,\n compact,\n DEFAULT_SHAPER_OPTIONS,\n estimateTokens,\n type ShaperOptions,\n SUMMARY_PROMPT,\n shapeMessages,\n shouldCompact,\n} from './context/index.ts';\nimport type { HookEvent } from './hooks/config.ts';\nimport type { HookOutcome } from './hooks/run.ts';\nimport type { HookRunner } from './hooks/runner.ts';\nimport type { ResolvedModel } from './model.ts';\nimport { resolveModel, streamModel, turnCost } from './model.ts';\nimport {\n decide,\n type PermissionMode,\n type PermissionPrompt,\n ruleFromChoice,\n} from './permissions/engine.ts';\nimport type { Rule } from './permissions/rules.ts';\nimport { persistRule } from './permissions/settings.ts';\nimport { renderPlan } from './plan/index.ts';\nimport { type ScopeConcern, ScopeContract, type ScopeOptions } from './scope/index.ts';\nimport { narrow } from './skills/discover.ts';\nimport { BUILTIN_TOOLS, ToolRegistry } from './tools/index.ts';\nimport { BackgroundJobs } from './tools/jobs.ts';\nimport { DEFAULT_SUBAGENT_TOOLS } from './tools/task.ts';\nimport { MemoryTodoStore } from './tools/todo.ts';\nimport { toolSearchTool } from './tools/tool-search.ts';\nimport {\n type PermissionRequest,\n type SubagentRequest,\n type SubagentResult,\n type Tool,\n type ToolContext,\n ToolInputError,\n type ToolResult,\n} from './tools/types.ts';\nimport type { ShadowGit, SnapshotFile } from './undo/shadow-git.ts';\nimport { detectTestCommand, runVerification, type VerificationResult } from './verify/index.ts';\n\n/** Everything the TUI and the headless renderer need to show a turn. */\nexport type AgentEvent =\n | { type: 'model_start'; model: string }\n | { type: 'text_delta'; text: string }\n | { type: 'reasoning_delta'; text: string }\n | { type: 'message'; message: Message }\n | { type: 'tool_start'; call: ToolCallPart }\n | { type: 'tool_end'; toolCallId: string; toolName: string; result: ToolResult }\n | { type: 'permission'; request: PermissionRequest; reason: string }\n | { type: 'usage'; usage: Usage; costUsd: number }\n | { type: 'compacted'; replaced: number; summary: string }\n | { type: 'scope_concern'; concern: ScopeConcern; accepted: boolean }\n | { type: 'verification'; result: VerificationResult }\n | { type: 'hook'; event: HookEvent; blocked?: string; problems: string[] }\n | { type: 'subagent'; description: string; steps: number; costUsd: number }\n /**\n * The one-line \"why\" in front of a tool batch. Emitted for every batch,\n * including one the model gave no reason for - a missing intent line is\n * itself worth seeing, and reporting nothing would hide it.\n */\n | { type: 'intent'; text: string | undefined; calls: number }\n /**\n * The session budget was reached. Emitted whether the user then raises it or\n * stops: a run that quietly spent past its limit and a run that was allowed\n * to should not look the same in a transcript.\n */\n | { type: 'budget'; spentUsd: number; limitUsd: number; raisedTo?: number }\n | { type: 'turn_end'; reason: 'stop' | 'aborted' | 'max_steps' | 'error' | 'budget' }\n | { type: 'error'; error: EarshotError };\n\nexport interface AgentOptions {\n registry: ProviderRegistry;\n model: ResolvedModel;\n reasoningEffort?: ReasoningEffort;\n cwd: string;\n system: string;\n mode: PermissionMode;\n rules: Rule[];\n /** Called when a call needs approval. Without one, every ask becomes a denial. */\n prompt?: PermissionPrompt;\n /** Called by the `ask_user` tool. Without one, the tool reports it cannot ask. */\n ask?: (question: string, options?: string[]) => Promise<string>;\n tools?: Tool<never>[];\n /** Guards against a model that loops on tools forever. */\n maxSteps?: number;\n env?: NodeJS.ProcessEnv;\n /** Called with every message appended to history, for session persistence. */\n onMessage?: (message: Message) => void | Promise<void>;\n /** Snapshot store for undo. Absent means this session keeps no undo history. */\n shadow?: ShadowGit;\n /** Overrides for the context shapers. */\n shapers?: Partial<ShaperOptions>;\n compaction?: Partial<CompactionPolicy>;\n /**\n * Called when compaction has written a summary, so the session can append a\n * `summary` entry. The entry records what was summarised; it removes nothing.\n */\n onCompaction?: (summary: string, historyCut: number) => void | Promise<void>;\n /** Overrides for the scope guard. */\n scope?: Partial<ScopeOptions>;\n /**\n * Running the project's tests after a turn that changed files, and reporting\n * what they printed. `enabled: false` turns it off; `command` overrides\n * detection.\n */\n verify?: { enabled?: boolean; command?: string; timeoutMs?: number };\n /** User-configured hooks. Absent means nothing is hooked and nothing is run. */\n hooks?: HookRunner;\n /**\n * Shared rather than constructed, so a subagent is held to the same scope the\n * parent declared. A subagent with a scope of its own would be a hole straight\n * through the contract: the parent says which files it will touch, and then\n * spawns something that never agreed to it.\n */\n scopeContract?: ScopeContract;\n /** Set on a subagent. Its cost lands on the parent's total, not beside it. */\n onCost?: (costUsd: number) => void;\n /**\n * Session budget in USD. Checked before each model call rather than after:\n * stopping once the money is gone is not a budget, it is a receipt.\n */\n maxCostUsd?: number;\n /**\n * Asked when the budget is reached. Returns a new, higher limit to continue\n * with, or undefined to stop. Absent means stop - a headless run must not\n * block forever waiting for a terminal that is not there.\n */\n confirmBudget?: (spentUsd: number, limitUsd: number) => Promise<number | undefined>;\n /** Steps a subagent this agent spawns may take. */\n subagentMaxSteps?: number;\n}\n\nconst DEFAULT_MAX_STEPS = 100;\n\n/**\n * The agent loop.\n *\n * History is a single flat list and is only ever appended to. That is not a\n * simplification: Anthropic rejects a request whose history contains edited\n * thinking blocks, so any feature that looks like rewriting the past (compaction,\n * rewind) has to be expressed as new entries instead. Every other provider is\n * treated as if it had the same rule, so there is one code path rather than two.\n */\nexport class Agent {\n readonly history: Message[] = [];\n readonly todos = new MemoryTodoStore();\n readonly scope: ScopeContract;\n readonly jobs = new BackgroundJobs();\n\n private readonly tools: ToolRegistry;\n private readonly readFiles = new Set<string>();\n /** Messages typed while a turn is running, injected at the next model call. */\n private readonly queued: Message[] = [];\n private rules: Rule[];\n /** Mutable because `/model` swaps it; `options.model` is only the initial one. */\n private resolved: ResolvedModel;\n private effort: ReasoningEffort | undefined;\n private mode: PermissionMode;\n private totalCostUsd = 0;\n private maxCostUsd: number | undefined;\n /**\n * Mutable so a memory captured mid-session applies from the next call rather\n * than from the next session - a preference the user has to restart to see\n * honoured reads as one that was ignored.\n */\n private systemPrompt: string;\n /**\n * The approved plan, kept beside the system prompt rather than merged into\n * it: the prompt is rebuilt whenever a memory changes, and a plan folded into\n * that string would be lost the next time it was.\n */\n private plan: string | undefined;\n /** Pre-change hashes for the batch currently executing. */\n private batchSnapshot: SnapshotFile[] = [];\n /** Events raised while a call ran, drained by the batch loop that owns it. */\n private readonly pending: AgentEvent[] = [];\n /**\n * Where the live request starts, and what stands in for everything before it.\n * Compaction cannot shorten `history` - that would rewrite the past - so it\n * records a cut and a preamble, and the request is rebuilt from those.\n */\n private compactedAt = 0;\n private compactionPreamble: Message | undefined;\n /** Tokens in the last request actually sent, for the status line. */\n private lastRequestTokens = 0;\n /** Whether anything has been changed since the last end-of-turn check. */\n private mutatedSinceCheck = false;\n private checksThisTurn = 0;\n /**\n * Installed after construction by the TUI, which cannot supply them earlier:\n * both resolve against React state that does not exist until the app mounts.\n */\n private promptFn: PermissionPrompt | undefined;\n private askFn: ((question: string, options?: string[]) => Promise<string>) | undefined;\n /**\n * Set by a skill that declares `allowed-tools`, and cleared at the start of\n * every turn: a narrowing that outlived the task it was written for would\n * silently remove tools from work the skill knows nothing about.\n */\n private toolRestriction: string[] | undefined;\n /**\n * Deferred tools `tool_search` has surfaced. Session-scoped rather than\n * per-turn: a tool the model went looking for in one turn is exactly the tool\n * the follow-up turn needs, and making it search again would be theatre.\n */\n private readonly surfacedTools = new Set<string>();\n\n constructor(private readonly options: AgentOptions) {\n this.tools = new ToolRegistry(options.tools ?? (BUILTIN_TOOLS as Tool<never>[]));\n if (this.tools.list().some((tool) => tool.deferred)) {\n this.tools.add(\n toolSearchTool({\n all: () => this.tools.list().filter((tool) => tool.deferred),\n surface: (name) => {\n this.surfacedTools.add(name);\n },\n surfaced: (name) => this.surfacedTools.has(name),\n }) as unknown as Tool<never>,\n );\n }\n this.scope = options.scopeContract ?? new ScopeContract(options.cwd, options.scope ?? {});\n this.rules = [...options.rules];\n this.mode = options.mode;\n this.promptFn = options.prompt;\n this.askFn = options.ask;\n this.systemPrompt = options.system;\n this.maxCostUsd = options.maxCostUsd;\n this.resolved = options.model;\n this.effort = options.reasoningEffort;\n }\n\n /** The model this session is currently calling. */\n get model(): ResolvedModel {\n return this.resolved;\n }\n\n get reasoningEffort(): ReasoningEffort | undefined {\n return this.effort;\n }\n\n setReasoningEffort(effort: ReasoningEffort | undefined): void {\n this.effort = effort;\n }\n\n /**\n * Switches model mid-session.\n *\n * Resolved through the same `resolveModel` the CLI uses, so a reference with\n * no credentials fails here with `MissingCredentialsError` and the session\n * keeps the model it had - a half-applied switch would leave the agent\n * pricing one model's tokens against another's rates.\n */\n async changeModel(ref: string): Promise<ResolvedModel> {\n const resolved = await resolveModel(this.options.registry, ref);\n this.resolved = resolved;\n return resolved;\n }\n\n /**\n * The permission rules in force, newest first. A copy: a caller that could\n * push onto this array would be adding rules without going through the gate.\n */\n get permissionRules(): readonly Rule[] {\n return [...this.rules];\n }\n\n get budgetUsd(): number | undefined {\n return this.maxCostUsd;\n }\n\n /** Undefined removes the budget. Used by `/cost` and by the overrun prompt. */\n setBudget(maxCostUsd: number | undefined): void {\n this.maxCostUsd = maxCostUsd;\n }\n\n /** Replaces the approval callback. Passing undefined turns every ask into a denial. */\n setPrompt(prompt: PermissionPrompt | undefined): void {\n this.promptFn = prompt;\n }\n\n setAsk(ask: ((question: string, options?: string[]) => Promise<string>) | undefined): void {\n this.askFn = ask;\n }\n\n get cwd(): string {\n return this.options.cwd;\n }\n\n get system(): string {\n return this.systemPrompt;\n }\n\n setSystem(system: string): void {\n this.systemPrompt = system;\n }\n\n /** Pins an approved plan for the rest of the run. Undefined clears it. */\n setPlan(plan: string | undefined): void {\n this.plan = plan?.trim() === '' ? undefined : plan;\n }\n\n get pinnedPlan(): string | undefined {\n return this.plan;\n }\n\n /** What is actually sent as the system prompt: the prompt plus any plan. */\n private get effectiveSystem(): string {\n return this.plan === undefined\n ? this.systemPrompt\n : `${this.systemPrompt}\\n\\n${renderPlan(this.plan)}`;\n }\n\n get permissionMode(): PermissionMode {\n return this.mode;\n }\n\n setPermissionMode(mode: PermissionMode): void {\n this.mode = mode;\n }\n\n get costUsd(): number {\n return this.totalCostUsd;\n }\n\n /**\n * Adds to this session's spend. A subagent calls its parent's, so one session\n * has one number: a budget that a subagent could spend outside would not be a\n * budget.\n */\n private addCost(costUsd: number): void {\n this.totalCostUsd += costUsd;\n this.options.onCost?.(costUsd);\n }\n\n /** Estimated tokens in the last request, and the window they have to fit in. */\n get contextUse(): { tokens: number; window: number } {\n return { tokens: this.lastRequestTokens, window: this.resolved.model.contextWindow ?? 0 };\n }\n\n /** Files read or written this session, in the order they were first touched. */\n get touchedFiles(): string[] {\n return [...this.readFiles];\n }\n\n /**\n * Queues a message to be delivered at the next model call rather than\n * interrupting. This is what steering is: the user redirects the work without\n * cancelling the turn and losing everything the model has already done.\n */\n steer(text: string): void {\n this.queued.push({ role: 'user', content: [{ type: 'text', text }] });\n }\n\n get pendingSteers(): number {\n return this.queued.length;\n }\n\n /**\n * Replaces the in-memory history, for `/rewind` and `/fork`.\n *\n * The transcript on disk is untouched: rewinding points the next append at an\n * earlier entry and the abandoned branch stays in the file. What changes is\n * only which messages the next request is built from - and the compaction\n * state resets with them, since a summary of messages that are no longer in\n * the history would describe work the model can no longer see.\n */\n replaceHistory(messages: Message[]): void {\n this.history.length = 0;\n this.history.push(...messages);\n this.compactedAt = 0;\n this.compactionPreamble = undefined;\n }\n\n /** Ends the session's background processes. Safe to call more than once. */\n dispose(): void {\n this.jobs.killAll();\n }\n\n async *runTurn(prompt: UserPrompt, signal: AbortSignal): AsyncGenerator<AgentEvent> {\n // The budget is per turn; the declaration outlives one, because a follow-up\n // like \"now do the same for the other file\" is the same piece of work.\n this.scope.beginTurn();\n this.options.hooks?.beginTurn();\n this.toolRestriction = undefined;\n this.mutatedSinceCheck = false;\n this.checksThisTurn = 0;\n\n const promptText = userPromptText(prompt);\n const promptParts: UserPromptPart[] =\n typeof prompt === 'string'\n ? [{ type: 'text', text: prompt }]\n : prompt.map((part) => ({ ...part }));\n if (\n promptParts.some((part) => part.type === 'image') &&\n !this.resolved.model.capabilities.vision\n ) {\n yield {\n type: 'error',\n error: {\n kind: 'invalid_request',\n message: `${this.resolved.model.name} does not support image input`,\n retryable: false,\n },\n };\n yield { type: 'turn_end', reason: 'error' };\n return;\n }\n\n const submitted = await this.options.hooks?.userPromptSubmit(promptText, signal);\n if (submitted) {\n yield hookEvent('UserPromptSubmit', submitted);\n if (submitted.decision === 'deny') {\n // The prompt is not appended at all. A blocked prompt that still entered\n // history would come back on the next request as something the user\n // asked for and the agent ignored.\n yield { type: 'turn_end', reason: 'stop' };\n return;\n }\n }\n\n const context = submitted?.context ?? [];\n const content: UserPromptPart[] =\n context.length > 0 && promptParts.length === 1 && promptParts[0]?.type === 'text'\n ? [\n {\n type: 'text',\n text: `${promptParts[0].text}\\n\\n<hook-context>\\n${context.join('\\n\\n')}\\n</hook-context>`,\n },\n ]\n : [\n ...promptParts,\n ...(context.length\n ? [\n {\n type: 'text' as const,\n text: `<hook-context>\\n${context.join('\\n\\n')}\\n</hook-context>`,\n },\n ]\n : []),\n ];\n await this.append({\n role: 'user',\n content,\n });\n\n const maxSteps = this.options.maxSteps ?? DEFAULT_MAX_STEPS;\n const modelName = `${this.resolved.provider.id}/${this.resolved.model.id}`;\n\n for (let step = 0; step < maxSteps; step++) {\n if (signal.aborted) {\n yield { type: 'turn_end', reason: 'aborted' };\n return;\n }\n\n // Steering messages land here, between one model call and the next, which\n // is the only point where history can grow without contradicting a tool\n // call the model is still waiting on a result for.\n while (this.queued.length > 0) {\n await this.append(this.queued.shift() as Message);\n }\n\n const overrun = await this.checkBudget();\n if (overrun) {\n yield overrun.event;\n if (overrun.stop) {\n yield { type: 'turn_end', reason: 'budget' };\n return;\n }\n }\n\n for await (const event of this.prepareRequest(signal)) yield event;\n const messages = this.requestMessages();\n this.lastRequestTokens = estimateTokens(messages, this.effectiveSystem);\n\n yield { type: 'model_start', model: modelName };\n\n let assistant: Message | undefined;\n let failed: EarshotError | undefined;\n\n for await (const event of streamModel(this.options.registry, this.resolved, {\n system: this.effectiveSystem,\n messages,\n tools: this.offeredTools(),\n ...(this.effort ? { reasoningEffort: this.effort } : {}),\n abortSignal: signal,\n })) {\n switch (event.type) {\n case 'text_delta':\n yield { type: 'text_delta', text: event.text };\n break;\n case 'reasoning_delta':\n yield { type: 'reasoning_delta', text: event.text };\n break;\n case 'finish': {\n assistant = event.message;\n const costUsd = turnCost(this.resolved.model, event.usage);\n this.addCost(costUsd);\n yield { type: 'usage', usage: event.usage, costUsd };\n break;\n }\n case 'error':\n failed = event.error;\n break;\n default:\n break;\n }\n }\n\n if (failed) {\n yield { type: 'error', error: failed };\n yield { type: 'turn_end', reason: failed.kind === 'abort' ? 'aborted' : 'error' };\n return;\n }\n if (!assistant) {\n yield { type: 'turn_end', reason: signal.aborted ? 'aborted' : 'error' };\n return;\n }\n\n // Appended verbatim, including providerMetadata: an assistant message that\n // is not replayed exactly is what breaks the next request on providers that\n // sign or encrypt their reasoning.\n await this.append(assistant);\n yield { type: 'message', message: assistant };\n\n const calls = assistant.content.filter(\n (part): part is ToolCallPart => part.type === 'tool_call',\n );\n if (calls.length === 0) {\n const check = await this.selfCheck(signal);\n if (!check) {\n const stop = await this.options.hooks?.stop(signal);\n if (stop) {\n yield hookEvent('Stop', stop);\n if (stop.decision === 'deny') {\n await this.append({\n role: 'user',\n content: [\n {\n type: 'text',\n text:\n `<hook>\\nA Stop hook asked you to keep going: ${\n stop.reason ?? 'no reason given'\n }\\nThis message is from the harness, not the user. If you believe the ` +\n `work is finished, say so and stop.\\n</hook>`,\n },\n ],\n });\n continue;\n }\n }\n yield { type: 'turn_end', reason: 'stop' };\n return;\n }\n if (check.verification) yield { type: 'verification', result: check.verification };\n await this.append(check.message);\n continue;\n }\n\n yield { type: 'intent', text: intentOf(assistant), calls: calls.length };\n\n const results: ToolResultPart[] = [];\n this.batchSnapshot = [];\n for await (const event of this.runCalls(calls, results, signal)) yield event;\n await this.commitSnapshot(calls);\n\n // Results are appended in the order the model emitted the calls, not the\n // order they finished, so a replayed transcript is deterministic even\n // though read-only calls ran concurrently.\n await this.append({ role: 'tool', content: results });\n\n if (signal.aborted) {\n yield { type: 'turn_end', reason: 'aborted' };\n return;\n }\n }\n\n yield { type: 'turn_end', reason: 'max_steps' };\n }\n\n /**\n * Whether this session may make another model call.\n *\n * The check is before the call, so the limit is a decision point rather than\n * a post-mortem. Raising it is the user's, and only ever upwards: a callback\n * that answers with a limit already spent would loop.\n */\n private async checkBudget(): Promise<{ event: AgentEvent; stop: boolean } | undefined> {\n const limitUsd = this.maxCostUsd;\n if (limitUsd === undefined || this.totalCostUsd < limitUsd) return undefined;\n\n const spentUsd = this.totalCostUsd;\n const raisedTo = await (this.options.confirmBudget ?? defaultBudgetPrompt(this.askFn))(\n spentUsd,\n limitUsd,\n );\n if (raisedTo === undefined || !Number.isFinite(raisedTo) || raisedTo <= spentUsd) {\n return { event: { type: 'budget', spentUsd, limitUsd }, stop: true };\n }\n this.maxCostUsd = raisedTo;\n return { event: { type: 'budget', spentUsd, limitUsd, raisedTo }, stop: false };\n }\n\n /**\n * The tools this call offers the model. A skill's `allowed-tools` is applied\n * as an intersection with what the session already has, never as a union, so a\n * skill file cannot hand itself a tool the user's settings withheld.\n */\n private offeredTools(): ToolDefinition[] {\n const all = this.tools.definitions(\n (tool) => !tool.deferred || this.surfacedTools.has(tool.name),\n );\n if (!this.toolRestriction) return all;\n const kept = new Set(\n narrow(\n all.map((tool) => tool.name),\n this.toolRestriction,\n ),\n );\n return all.filter((tool) => kept.has(tool.name));\n }\n\n /**\n * Read-only calls run concurrently; anything that mutates runs one at a time.\n * Two edits to the same file in one batch would otherwise race, and the second\n * would be applied against content the first had already replaced.\n */\n private async *runCalls(\n calls: ToolCallPart[],\n into: ToolResultPart[],\n signal: AbortSignal,\n ): AsyncGenerator<AgentEvent> {\n const parallel: Array<{ index: number; promise: Promise<ToolResultPart> }> = [];\n const slots = new Array<ToolResultPart | undefined>(calls.length);\n\n for (const [index, call] of calls.entries()) {\n const tool = this.tools.get(call.toolName);\n if (tool?.readOnly) {\n yield { type: 'tool_start', call };\n parallel.push({ index, promise: this.runOne(tool, call, signal) });\n }\n }\n\n for (const [index, call] of calls.entries()) {\n const tool = this.tools.get(call.toolName);\n if (tool?.readOnly) continue;\n if (signal.aborted) break;\n yield { type: 'tool_start', call };\n const part = await this.runOne(tool, call, signal);\n slots[index] = part;\n while (this.pending.length > 0) yield this.pending.shift() as AgentEvent;\n yield {\n type: 'tool_end',\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n result: asResult(part),\n };\n }\n\n for (const { index, promise } of parallel) {\n const part = await promise;\n slots[index] = part;\n while (this.pending.length > 0) yield this.pending.shift() as AgentEvent;\n const call = calls[index] as ToolCallPart;\n yield {\n type: 'tool_end',\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n result: asResult(part),\n };\n }\n\n // Every call gets a result, including ones skipped by an abort: a provider\n // rejects an assistant tool call that has no matching result on the next turn.\n for (const [index, call] of calls.entries()) {\n into.push(slots[index] ?? errorPart(call, 'interrupted before this tool ran'));\n }\n }\n\n private async runOne(\n tool: Tool<never> | undefined,\n call: ToolCallPart,\n signal: AbortSignal,\n ): Promise<ToolResultPart> {\n if (!tool) return errorPart(call, `no tool named \"${call.toolName}\"`);\n\n let input: never;\n try {\n input = tool.parse(call.input) as never;\n } catch (error) {\n return errorPart(call, (error as Error).message);\n }\n\n const ctx = this.context(signal);\n\n // Hooks run before the gate, and can only make the answer stricter: a deny\n // stops the call, an ask turns an allow into a prompt, and an approve is\n // read, reported and ignored.\n const before = await this.options.hooks?.preToolUse(call.toolName, input, signal);\n if (before) {\n this.pending.push(hookEvent('PreToolUse', before));\n if (before.decision === 'deny') {\n return errorPart(call, before.reason ?? `a PreToolUse hook blocked ${call.toolName}`);\n }\n }\n\n let request: PermissionRequest | undefined;\n try {\n request = tool.permission?.(input, ctx);\n } catch (error) {\n // A permission() that throws is usually a bad path or a `find` that does not\n // match - a model error, reported as one, before the user is ever prompted.\n return errorPart(call, (error as Error).message);\n }\n\n let decision = decide(tool, request, {\n mode: this.mode,\n rules: this.rules,\n cwd: this.options.cwd,\n });\n\n if (decision.outcome === 'deny') return errorPart(call, decision.reason);\n\n // A hook asking for confirmation is honoured even for a read-only tool, which\n // has no PermissionRequest of its own; one is built from the call so the\n // prompt still shows what is actually about to happen.\n if (before?.decision === 'ask' && decision.outcome === 'allow') {\n const asked = request ?? {\n tool: call.toolName,\n target: call.toolName,\n title: call.toolName,\n detail: `${call.toolName}(${JSON.stringify(call.input, null, 2)})`,\n };\n decision = {\n outcome: 'ask',\n reason: before.reason ?? 'a PreToolUse hook asked for confirmation',\n request: asked,\n };\n }\n\n if (decision.outcome === 'ask') {\n const prompt = this.promptFn;\n if (!prompt) {\n return errorPart(\n call,\n `${decision.reason}, and this session cannot prompt for approval. Ask the user ` +\n 'to re-run with a permission mode or rule that allows it.',\n );\n }\n const choice = await prompt(decision.request, decision.reason);\n if (choice.kind === 'deny') {\n return errorPart(call, choice.message ?? 'the user declined this action');\n }\n if (choice.kind === 'allow-always') {\n const rule = ruleFromChoice(decision.request, choice.scope);\n this.rules = [...this.rules, rule];\n if (choice.scope !== 'session') {\n await persistRule(rule, choice.scope, this.options.cwd).catch(() => undefined);\n }\n }\n }\n\n if (request) {\n const concern = this.scope.check(request);\n if (concern) {\n const accepted = await this.confirmScope(concern, request);\n this.pending.push({ type: 'scope_concern', concern, accepted });\n if (!accepted) {\n return errorPart(\n call,\n `${concern.summary} The user did not approve going outside the declared scope. ` +\n 'Do the part that is in scope, and tell them what you left out and why.',\n );\n }\n }\n // Counted after approval, so the running total is what was actually done.\n this.scope.record(request);\n this.mutatedSinceCheck = true;\n }\n\n // Hashed here, immediately before the change and after approval, so the\n // recorded contents are what was on disk when the tool ran.\n await this.captureWrites(request?.writes ?? []);\n\n try {\n const result = await tool.execute(input, ctx);\n const after = await this.options.hooks?.postToolUse(\n call.toolName,\n input,\n result.output,\n signal,\n );\n if (after) this.pending.push(hookEvent('PostToolUse', after));\n return {\n type: 'tool_result',\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n output: withHookContext(result.output, after?.context ?? []),\n ...(result.isError ? { isError: true } : {}),\n };\n } catch (error) {\n // A failing tool is data for the model, not a crash: it is expected to read\n // the message and try something else.\n const message =\n error instanceof ToolInputError\n ? error.message\n : `${call.toolName} failed: ${(error as Error).message}`;\n return errorPart(call, message);\n }\n }\n\n /**\n * Asks before doing something the turn did not say it would do.\n *\n * The prompt carries the real diff or command, exactly as an ordinary\n * permission prompt does - a scope prompt that summarised the change would\n * hide the thing the user is being asked to judge. \"Always\" widens the scope\n * for this session only; unlike a permission choice it persists no rule,\n * because the next task will have a different scope.\n */\n private async confirmScope(concern: ScopeConcern, request: PermissionRequest): Promise<boolean> {\n const prompt = this.promptFn;\n if (!prompt) return false;\n const choice = await prompt(\n {\n tool: 'Scope',\n target: request.target,\n title: `outside the declared scope: ${request.title}`,\n detail: `${concern.summary}\\n\\n${request.detail}`,\n ...(request.writes ? { writes: request.writes } : {}),\n },\n concern.summary,\n );\n if (choice.kind === 'deny') return false;\n if (choice.kind === 'allow-always') {\n this.scope.widen(concern, concern.kind === 'out-of-scope-file' ? concern.path : undefined);\n }\n return true;\n }\n\n /**\n * The end-of-turn check: run the project's tests, and make the model compare\n * what was asked for with what changed before it answers.\n *\n * It runs only on a turn that changed something, and at most twice, so a\n * model that keeps editing after a failure still terminates. The output is\n * handed over verbatim - a summary of it is exactly where \"tests pass\" from an\n * agent that never ran them hides.\n */\n private async selfCheck(\n signal: AbortSignal,\n ): Promise<{ message: Message; verification?: VerificationResult } | undefined> {\n if (!this.mutatedSinceCheck || this.checksThisTurn >= 2 || signal.aborted) return undefined;\n this.mutatedSinceCheck = false;\n this.checksThisTurn++;\n\n const configured = this.options.verify;\n const detected =\n configured?.enabled === false\n ? undefined\n : configured?.command\n ? { command: configured.command, source: 'configuration' }\n : await detectTestCommand(this.options.cwd);\n\n const verification = detected\n ? await runVerification(detected.command, detected.source, {\n cwd: this.options.cwd,\n env: this.options.env ?? process.env,\n signal,\n ...(configured?.timeoutMs !== undefined ? { timeoutMs: configured.timeoutMs } : {}),\n })\n : undefined;\n\n const evidence = verification\n ? `\\`${verification.command}\\` (from ${verification.source}) exited ` +\n `${verification.timedOut ? 'after timing out' : String(verification.exitCode)}. Its ` +\n `output, verbatim:\\n\\n${verification.output || '(no output)'}`\n : 'No test command was detected for this project, so nothing was verified. Say that ' +\n 'plainly rather than implying the change works.';\n\n return {\n message: {\n role: 'user',\n content: [\n {\n type: 'text',\n text:\n `<self-check>\\nThis turn changed files. Before you answer, compare the original ` +\n `request with what actually changed, and report anything you skipped, narrowed, ` +\n `left unverified or that is failing. Four of five things done is that report, ` +\n `not \"done\".\\n\\n${evidence}\\n\\nIf something is failing, fix it or say what is ` +\n `failing and why - do not describe the run as passing. This message is from the ` +\n `harness, not the user; answer them, not it.\\n</self-check>`,\n },\n ],\n },\n ...(verification ? { verification } : {}),\n };\n }\n\n /** Records pre-change contents for paths not already captured in this batch. */\n private async captureWrites(paths: string[]): Promise<void> {\n const shadow = this.options.shadow;\n if (!shadow) return;\n for (const path of paths) {\n if (this.batchSnapshot.some((file) => file.path === path)) continue;\n this.batchSnapshot.push({ path, before: await shadow.hashFile(path) });\n }\n }\n\n /**\n * Writes one snapshot record per tool batch. Per-batch rather than per-call so\n * undo restores a coherent unit: a `multi_edit` across three files, or an edit\n * plus the command that formatted it, is one step back rather than three.\n */\n private async commitSnapshot(calls: ToolCallPart[]): Promise<void> {\n const shadow = this.options.shadow;\n if (!shadow || this.batchSnapshot.length === 0) return;\n const label = calls.map((call) => call.toolName).join(', ');\n await shadow.record(this.batchSnapshot, label).catch(() => undefined);\n this.batchSnapshot = [];\n }\n\n /**\n * The messages for one request: the live tail of history, any compaction\n * preamble in front of it, then the cheap shapers. A copy, never the live\n * array - an adapter that reads messages lazily would otherwise see entries\n * appended after the request was made.\n */\n private requestMessages(): Message[] {\n const tail = this.history.slice(this.compactedAt);\n const base = this.compactionPreamble ? [this.compactionPreamble, ...tail] : tail;\n return shapeMessages(base, { ...DEFAULT_SHAPER_OPTIONS, ...this.options.shapers });\n }\n\n /** Compacts if the shaped request would still be too large for the window. */\n private async *prepareRequest(signal: AbortSignal): AsyncGenerator<AgentEvent> {\n const window = this.resolved.model.contextWindow ?? 0;\n const policy = { threshold: 0.8, keepRecentMessages: 8, ...this.options.compaction };\n const shaped = this.requestMessages();\n if (!shouldCompact(shaped, this.effectiveSystem, window, policy)) return;\n yield* this.runCompaction(signal);\n }\n\n /**\n * Compacts now, whatever the window is at.\n *\n * `/compact` is the same operation the 80% threshold performs, asked for\n * early - before a long tool result pushes the session over on its own. It\n * appends, like every other compaction: nothing in history is rewritten.\n */\n async *compactNow(signal: AbortSignal): AsyncGenerator<AgentEvent> {\n yield* this.runCompaction(signal);\n }\n\n private async *runCompaction(signal: AbortSignal): AsyncGenerator<AgentEvent> {\n const window = this.resolved.model.contextWindow ?? 0;\n const policy = { threshold: 0.8, keepRecentMessages: 8, ...this.options.compaction };\n const shaped = this.requestMessages();\n\n const result = await compact({\n messages: shaped,\n system: this.effectiveSystem,\n contextWindow: window,\n policy,\n todos: this.todos\n .list()\n .filter((todo) => todo.status !== 'done')\n .map((todo) => todo.text),\n filesTouched: this.touchedFiles,\n summarize: (messages) => this.summarise(messages, signal),\n }).catch(() => undefined);\n if (!result) return;\n\n // The cut is expressed against the shaped array, which has the same length\n // and order as the tail it was built from, minus the preamble.\n const offset = this.compactionPreamble ? 1 : 0;\n this.compactedAt += Math.max(0, result.replaced - offset);\n this.compactionPreamble = result.messages[0];\n this.lastRequestTokens = estimateTokens(this.requestMessages(), this.effectiveSystem);\n // The cut is reported as a history index, not as a count of shaped\n // messages: the session layer maps it back to the entry ids the summary\n // stands in for, and those are indexed by history position.\n await this.options.onCompaction?.(result.summary, this.compactedAt);\n yield { type: 'compacted', replaced: result.replaced, summary: result.summary };\n }\n\n /** One extra model call, with no tools: the summary that compaction stands on. */\n private async summarise(messages: Message[], signal: AbortSignal): Promise<string> {\n let text = '';\n for await (const event of streamModel(this.options.registry, this.resolved, {\n system: SUMMARY_PROMPT,\n messages: [...messages, { role: 'user', content: [{ type: 'text', text: SUMMARY_PROMPT }] }],\n ...(this.effort ? { reasoningEffort: this.effort } : {}),\n abortSignal: signal,\n })) {\n if (event.type === 'text_delta') text += event.text;\n if (event.type === 'finish') {\n for (const part of event.message.content) {\n if (part.type === 'text' && text === '') text = part.text;\n }\n }\n if (event.type === 'error') throw new Error(event.error.message);\n }\n if (text.trim() === '') throw new Error('the model returned an empty summary');\n return text;\n }\n\n private context(signal: AbortSignal): ToolContext {\n return {\n cwd: this.options.cwd,\n signal,\n todos: this.todos,\n jobs: this.jobs,\n scope: this.scope,\n env: this.options.env ?? process.env,\n ask: async (question, choices) => {\n const ask = this.askFn;\n if (!ask) {\n throw new ToolInputError(\n 'this session cannot ask the user a question; decide with the information you have ' +\n 'and state the assumption you made',\n );\n }\n return ask(question, choices);\n },\n restrictTools: (names) => {\n this.toolRestriction = names;\n },\n // Absent on a subagent, so nesting stops at one level: an agent that could\n // spawn agents that spawn agents has no bound anyone can reason about.\n ...(this.options.onCost\n ? {}\n : { runSubagent: (request, sub) => this.subagent(request, sub) }),\n markRead: (path) => {\n this.readFiles.add(path);\n },\n hasRead: (path) => this.readFiles.has(path),\n };\n }\n\n /**\n * Runs a nested agent and returns its answer.\n *\n * What it inherits is the whole design. Permission mode and rules, so nothing\n * it does escapes the gate. The parent's ScopeContract object, so a file\n * nobody declared still prompts. The parent's cost total, so one session has\n * one number. What it does not inherit is context: it starts empty and is\n * given the prompt, which is the point - and it hands back an answer, not a\n * transcript, so the parent's window holds the conclusion rather than the\n * work.\n */\n private async subagent(request: SubagentRequest, signal: AbortSignal): Promise<SubagentResult> {\n const allowed = new Set(request.tools?.length ? request.tools : DEFAULT_SUBAGENT_TOOLS);\n // Intersection, never a union: a subagent cannot be handed a tool the parent\n // session does not have, whoever named it.\n const tools = this.tools\n .list()\n .filter((tool) => allowed.has(tool.name) && tool.name !== 'task');\n\n // The parent's persistence callbacks are dropped rather than passed on: a\n // subagent's messages are not the session's transcript, and writing them\n // there would replay them on the next resume as if the user had said them.\n const { onMessage: _persist, onCompaction: _summarised, ...inherited } = this.options;\n\n const child = new Agent({\n ...inherited,\n system:\n // The plan travels with it: a subagent working outside the plan the user\n // approved is the same hole as one working outside the declared scope.\n `${this.effectiveSystem}\\n\\n<subagent>\\nYou are running as a subagent for one ` +\n `self-contained task: ${request.description}. You cannot see the conversation that ` +\n 'sent you here, and only your final message is returned - so answer in full, and ' +\n 'say plainly what you could not find or could not do rather than implying success.' +\n '\\n</subagent>',\n tools,\n scopeContract: this.scope,\n onCost: (costUsd) => this.addCost(costUsd),\n maxSteps: this.options.subagentMaxSteps ?? 30,\n });\n child.setPrompt(this.promptFn);\n child.setAsk(this.askFn);\n\n let text = '';\n let steps = 0;\n let stoppedBecause: SubagentResult['stoppedBecause'];\n const before = this.totalCostUsd;\n\n for await (const event of child.runTurn(request.prompt, signal)) {\n if (event.type === 'model_start') steps++;\n if (event.type === 'message') {\n const said = event.message.content\n .filter((part) => part.type === 'text')\n .map((part) => (part.type === 'text' ? part.text : ''))\n .join('');\n if (said.trim() !== '') text = said;\n }\n if (event.type === 'turn_end' && event.reason !== 'stop') stoppedBecause = event.reason;\n if (event.type === 'error') stoppedBecause = 'error';\n // Prompts and scope questions the subagent raised are the user's to see.\n if (event.type === 'permission' || event.type === 'scope_concern' || event.type === 'hook') {\n this.pending.push(event);\n }\n }\n child.dispose();\n\n const costUsd = this.totalCostUsd - before;\n this.pending.push({ type: 'subagent', description: request.description, steps, costUsd });\n return { text: text.trim(), steps, costUsd, ...(stoppedBecause ? { stoppedBecause } : {}) };\n }\n\n private async append(message: Message): Promise<void> {\n this.history.push(message);\n await this.options.onMessage?.(message);\n }\n}\n\n/**\n * The line the model said before reaching for a tool.\n *\n * The first line of the text it emitted alongside the calls, not all of it: the\n * point of the intent line is that one line of output is enough to catch a wrong\n * turn, and a paragraph is not one line.\n */\nfunction intentOf(assistant: Message): string | undefined {\n const said = assistant.content\n .filter((part) => part.type === 'text')\n .map((part) => (part.type === 'text' ? part.text : ''))\n .join(' ')\n .trim();\n if (said === '') return undefined;\n return said\n .split(/\\r?\\n/)\n .find((line) => line.trim() !== '')\n ?.trim();\n}\n\nfunction hookEvent(event: HookEvent, outcome: HookOutcome): AgentEvent {\n return {\n type: 'hook',\n event,\n ...(outcome.decision === 'deny' && outcome.reason ? { blocked: outcome.reason } : {}),\n problems: outcome.problems,\n };\n}\n\n/**\n * A PostToolUse hook's output, attached to the result the model reads. Appended\n * rather than substituted: the tool's own output is what actually happened, and\n * a hook commenting on it must not be able to replace it.\n */\nfunction withHookContext(output: ToolResultOutput, context: string[]): ToolResultOutput {\n if (context.length === 0) return output;\n const note = `<hook-context>\\n${context.join('\\n\\n')}\\n</hook-context>`;\n if (output.type === 'text') return { type: 'text', value: `${output.value}\\n\\n${note}` };\n return {\n type: 'content',\n value: [\n ...(output.type === 'content'\n ? output.value\n : [{ type: 'text' as const, text: JSON.stringify(output.value) }]),\n { type: 'text', text: note },\n ],\n };\n}\n\nfunction errorPart(call: ToolCallPart, message: string): ToolResultPart {\n return {\n type: 'tool_result',\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n output: { type: 'text', value: message },\n isError: true,\n };\n}\n\nfunction asResult(part: ToolResultPart): ToolResult {\n return { output: part.output, ...(part.isError ? { isError: true } : {}) };\n}\n\n/**\n * The budget question, asked through whatever the session uses to ask the user\n * anything else. A session with no way to ask - headless, or a subagent - stops\n * rather than blocking on a terminal that is not there.\n */\nfunction defaultBudgetPrompt(\n ask: ((question: string, options?: string[]) => Promise<string>) | undefined,\n): (spentUsd: number, limitUsd: number) => Promise<number | undefined> {\n if (!ask) return async () => undefined;\n return async (spentUsd, limitUsd) => {\n const answer = await ask(\n `This session has spent $${spentUsd.toFixed(2)} against a $${limitUsd.toFixed(2)} budget. ` +\n 'Continue?',\n ['Stop here', `Raise the budget to $${(limitUsd * 2).toFixed(2)}`, 'Remove the budget'],\n );\n if (answer.startsWith('Raise')) return limitUsd * 2;\n if (answer.startsWith('Remove')) return Number.MAX_SAFE_INTEGER;\n return undefined;\n };\n}\n\nfunction userPromptText(prompt: UserPrompt): string {\n if (typeof prompt === 'string') return prompt;\n return prompt\n .map((part) => (part.type === 'text' ? part.text : `[${part.mediaType} image]`))\n .join('\\n\\n');\n}\n",
59
60
  "import { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { configDir } from '@earshot/providers';\nimport type { RuleScope } from '../permissions/rules.ts';\nimport { LOCAL_SETTINGS, PROJECT_SETTINGS } from '../permissions/settings.ts';\n\n/**\n * The events a hook can be attached to.\n *\n * Deliberately a closed set matching Claude Code's names, so hooks people\n * already have keep working. Events earshot has no equivalent for are not\n * invented here; a hook attached to one is reported rather than silently never\n * firing.\n */\nexport const HOOK_EVENTS = [\n 'SessionStart',\n 'UserPromptSubmit',\n 'PreToolUse',\n 'PostToolUse',\n 'Stop',\n 'SessionEnd',\n] as const;\n\nexport type HookEvent = (typeof HOOK_EVENTS)[number];\n\nexport interface HookDefinition {\n event: HookEvent;\n /** Tool-name pattern for the tool events; absent means every tool. */\n matcher?: string;\n command: string;\n timeoutMs: number;\n /** Which settings file it came from, for explaining what ran. */\n scope: RuleScope;\n}\n\nexport interface LoadedHooks {\n hooks: HookDefinition[];\n problems: string[];\n}\n\nexport const DEFAULT_HOOK_TIMEOUT_MS = 60_000;\n\ninterface SettingsShape {\n hooks?: Record<string, unknown>;\n}\n\nfunction settingsPath(scope: RuleScope, cwd: string): string {\n if (scope === 'global') return join(configDir(), 'settings.json');\n if (scope === 'project') return join(cwd, PROJECT_SETTINGS);\n return join(cwd, LOCAL_SETTINGS);\n}\n\n/**\n * Hooks from every scope, concatenated rather than overriding one another - the\n * same rule permission rules follow, and for the same reason: a project's\n * checked-in settings must not be able to remove a hook the user set globally.\n */\nexport async function loadHooks(cwd: string): Promise<LoadedHooks> {\n const hooks: HookDefinition[] = [];\n const problems: string[] = [];\n\n for (const scope of ['global', 'project', 'local'] as RuleScope[]) {\n const path = settingsPath(scope, cwd);\n const raw = await readFile(path, 'utf8').catch(() => undefined);\n if (raw === undefined) continue;\n\n let file: SettingsShape;\n try {\n file = JSON.parse(raw) as SettingsShape;\n } catch {\n // The permission loader reports the same file; saying it twice is noise.\n continue;\n }\n\n for (const [event, groups] of Object.entries(file.hooks ?? {})) {\n if (!(HOOK_EVENTS as readonly string[]).includes(event)) {\n problems.push(`${path}: earshot has no \"${event}\" hook event, so it will never fire`);\n continue;\n }\n if (!Array.isArray(groups)) {\n problems.push(`${path}: \"hooks.${event}\" must be a list`);\n continue;\n }\n for (const group of groups) {\n hooks.push(...parseGroup(group, event as HookEvent, scope, path, problems));\n }\n }\n }\n\n return { hooks, problems };\n}\n\nfunction parseGroup(\n group: unknown,\n event: HookEvent,\n scope: RuleScope,\n path: string,\n problems: string[],\n): HookDefinition[] {\n if (typeof group !== 'object' || group === null) {\n problems.push(`${path}: a \"${event}\" entry is not an object`);\n return [];\n }\n const entry = group as { matcher?: unknown; hooks?: unknown };\n const matcher =\n typeof entry.matcher === 'string' && entry.matcher !== '' ? entry.matcher : undefined;\n if (!Array.isArray(entry.hooks)) {\n problems.push(`${path}: a \"${event}\" entry has no \"hooks\" list`);\n return [];\n }\n\n const out: HookDefinition[] = [];\n for (const hook of entry.hooks) {\n if (typeof hook !== 'object' || hook === null) continue;\n const item = hook as { type?: unknown; command?: unknown; timeout?: unknown };\n if (item.type !== undefined && item.type !== 'command') {\n problems.push(`${path}: only \"command\" hooks are supported, not \"${String(item.type)}\"`);\n continue;\n }\n if (typeof item.command !== 'string' || item.command.trim() === '') {\n problems.push(`${path}: a \"${event}\" hook has no command`);\n continue;\n }\n out.push({\n event,\n ...(matcher !== undefined ? { matcher } : {}),\n command: item.command,\n // Claude Code's field is seconds; a hook config people already have must\n // not become a sixty-times-longer timeout here.\n timeoutMs:\n typeof item.timeout === 'number' && item.timeout > 0\n ? item.timeout * 1000\n : DEFAULT_HOOK_TIMEOUT_MS,\n scope,\n });\n }\n return out;\n}\n",
60
61
  "import { exec } from '../tools/exec.ts';\nimport { resolveShell } from '../tools/shell.ts';\nimport type { HookDefinition, HookEvent } from './config.ts';\n\n/** The JSON a hook reads on stdin. Field names match Claude Code's. */\nexport interface HookInput {\n session_id: string;\n transcript_path?: string;\n cwd: string;\n hook_event_name: HookEvent;\n tool_name?: string;\n tool_input?: unknown;\n tool_response?: unknown;\n prompt?: string;\n stop_hook_active?: boolean;\n}\n\nexport interface HookOutcome {\n /**\n * What the hooks decided. `deny` blocks; `ask` forces a prompt even where a\n * rule would allow. There is no `allow`: see `applyJson`.\n */\n decision?: 'deny' | 'ask';\n reason?: string;\n /** Text to put in front of the model. */\n context: string[];\n /** Shown to the user. A hook that failed is reported, never obeyed. */\n problems: string[];\n /** A hook asked the session to stop. */\n stop?: string;\n}\n\nexport const MAX_HOOK_OUTPUT_CHARS = 10_000;\n\nconst EMPTY: HookOutcome = { context: [], problems: [] };\n\nexport function matches(hook: HookDefinition, toolName: string | undefined): boolean {\n if (hook.matcher === undefined || hook.matcher === '*') return true;\n if (toolName === undefined) return false;\n try {\n return new RegExp(`^(?:${hook.matcher})$`).test(toolName);\n } catch {\n // A matcher that is not a regex is treated as a literal name rather than\n // matching everything, which is the failure that would silently run a hook\n // on every tool the agent has.\n return hook.matcher === toolName;\n }\n}\n\nexport interface RunOptions {\n cwd: string;\n env: NodeJS.ProcessEnv;\n signal?: AbortSignal;\n}\n\n/**\n * Runs every hook attached to an event and folds their answers into one.\n *\n * Hooks run concurrently: they are independent, and a chain of them run in\n * series would put the sum of their timeouts in front of every tool call. A\n * hook that fails, times out, or prints something unparseable contributes a\n * problem and nothing else - the only things that can stop a tool are an\n * explicit block and exit code 2.\n */\nexport async function runHooks(\n hooks: HookDefinition[],\n input: HookInput,\n options: RunOptions,\n): Promise<HookOutcome> {\n if (hooks.length === 0) return EMPTY;\n\n const shell = resolveShell(options.env);\n const payload = JSON.stringify(input);\n const outcome: HookOutcome = { context: [], problems: [] };\n\n const results = await Promise.all(\n hooks.map(async (hook) => {\n try {\n const result = await exec(shell.file, [...shell.args, hook.command], {\n cwd: options.cwd,\n env: options.env,\n timeoutMs: hook.timeoutMs,\n stdin: payload,\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return { hook, result };\n } catch (error) {\n return { hook, failure: (error as Error).message };\n }\n }),\n );\n\n for (const entry of results) {\n const label = `hook ${entry.hook.event} (${entry.hook.scope}): ${entry.hook.command}`;\n if ('failure' in entry) {\n outcome.problems.push(`${label} could not run: ${entry.failure}`);\n continue;\n }\n const { result } = entry;\n if (result.timedOut) {\n outcome.problems.push(`${label} timed out and was killed; it did not block anything`);\n continue;\n }\n\n // Exit 2 is the blocking convention. stderr is the reason, because that is\n // where a script that means to explain itself writes.\n if (result.code === 2) {\n outcome.decision = 'deny';\n outcome.reason = cap(result.stderr.trim() || `${label} blocked this`);\n continue;\n }\n if (result.code !== 0) {\n outcome.problems.push(\n `${label} exited ${result.code ?? 'on a signal'}: ${cap(result.stderr.trim(), 500)}`,\n );\n continue;\n }\n\n applyJson(entry.hook, result.stdout, outcome);\n }\n\n return outcome;\n}\n\n/**\n * Reads a hook's stdout.\n *\n * The deliberate deviation from Claude Code is here: a hook may deny, and it may\n * downgrade an allow to a prompt, but it may never grant. `\"decision\": \"approve\"`\n * and `permissionDecision: \"allow\"` are read and ignored, with a line saying so.\n * A hook command lives in a settings file, including a project's checked-in one,\n * so a hook that could approve would be a repository granting itself permissions\n * the user never gave - which is the thing deny-first exists to prevent.\n */\nfunction applyJson(hook: HookDefinition, stdout: string, outcome: HookOutcome): void {\n const text = stdout.trim();\n if (text === '') return;\n\n let json: Record<string, unknown> | undefined;\n if (text.startsWith('{')) {\n try {\n const parsed = JSON.parse(text) as unknown;\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n json = parsed as Record<string, unknown>;\n }\n } catch {\n // Left undefined: unparseable output is treated as the plain text below\n // rather than as a failure, since a hook printing a log line is normal.\n }\n }\n\n if (!json) {\n outcome.context.push(cap(text));\n return;\n }\n\n const specific = (json.hookSpecificOutput ?? {}) as Record<string, unknown>;\n const granted = json.decision === 'approve' || specific.permissionDecision === 'allow';\n if (granted) {\n outcome.problems.push(\n `${hook.command} tried to approve a call; hooks in earshot can block or ask, ` +\n 'never grant, so the decision was left to the permission rules',\n );\n }\n\n const blocked = json.decision === 'block' || specific.permissionDecision === 'deny';\n const asked = specific.permissionDecision === 'ask';\n if (blocked) {\n outcome.decision = 'deny';\n outcome.reason = cap(\n String(json.reason ?? specific.permissionDecisionReason ?? `${hook.command} blocked this`),\n );\n } else if (asked && outcome.decision !== 'deny') {\n outcome.decision = 'ask';\n outcome.reason ??= cap(String(specific.permissionDecisionReason ?? `${hook.command} asked`));\n }\n\n if (json.continue === false) {\n outcome.stop = cap(String(json.stopReason ?? `${hook.command} stopped the session`), 500);\n }\n if (typeof specific.additionalContext === 'string') {\n outcome.context.push(cap(specific.additionalContext));\n }\n if (typeof json.systemMessage === 'string') {\n outcome.problems.push(cap(json.systemMessage, 500));\n }\n}\n\nfunction cap(value: string, limit = MAX_HOOK_OUTPUT_CHARS): string {\n return value.length <= limit ? value : `${value.slice(0, limit)}\\n[... truncated by earshot ...]`;\n}\n",
61
62
  "import type { HookDefinition, HookEvent } from './config.ts';\nimport { type HookInput, type HookOutcome, matches, runHooks } from './run.ts';\n\nexport interface HookRunnerOptions {\n cwd: string;\n env: NodeJS.ProcessEnv;\n sessionId: string;\n transcriptPath?: string;\n}\n\nconst NOTHING: HookOutcome = { context: [], problems: [] };\n\n/**\n * The agent's view of hooks: one call per event, and an outcome that says what\n * to do.\n *\n * What each event may do is the contract, and it is not symmetric:\n *\n * - `PreToolUse` may block a call or force a prompt for it. It may not approve\n * one - see `applyJson` in run.ts for why.\n * - `UserPromptSubmit` may block the prompt, and may add context to it.\n * - `PostToolUse` may only observe and add context: the tool has already run,\n * and a hook pretending otherwise would be lying to the model about the state\n * of the world.\n * - `Stop` may ask for one more model call, once per turn, so a hook cannot loop\n * the agent forever.\n * - `SessionStart` and `SessionEnd` observe.\n */\nexport class HookRunner {\n private stopBlocked = false;\n\n constructor(\n private readonly hooks: HookDefinition[],\n private readonly options: HookRunnerOptions,\n ) {}\n\n get isEmpty(): boolean {\n return this.hooks.length === 0;\n }\n\n /** True when any hook is attached to this event, so callers can skip the work. */\n has(event: HookEvent): boolean {\n return this.hooks.some((hook) => hook.event === event);\n }\n\n beginTurn(): void {\n this.stopBlocked = false;\n }\n\n async preToolUse(toolName: string, input: unknown, signal?: AbortSignal): Promise<HookOutcome> {\n return this.run('PreToolUse', toolName, { tool_name: toolName, tool_input: input }, signal);\n }\n\n async postToolUse(\n toolName: string,\n input: unknown,\n response: unknown,\n signal?: AbortSignal,\n ): Promise<HookOutcome> {\n const outcome = await this.run(\n 'PostToolUse',\n toolName,\n { tool_name: toolName, tool_input: input, tool_response: response },\n signal,\n );\n // A PostToolUse block is downgraded to context: the call already happened,\n // and reporting it as blocked would tell the model something untrue.\n if (outcome.decision === 'deny') {\n const { decision: _blocked, reason: _reason, ...rest } = outcome;\n return {\n ...rest,\n context: [...outcome.context, outcome.reason ?? 'a hook objected to this result'],\n };\n }\n return outcome;\n }\n\n async userPromptSubmit(prompt: string, signal?: AbortSignal): Promise<HookOutcome> {\n return this.run('UserPromptSubmit', undefined, { prompt }, signal);\n }\n\n /**\n * Asks whether the turn may end. Answered at most once per turn: a hook that\n * could block every stop would keep the agent running - and spending - with no\n * way for the user to get a word in.\n */\n async stop(signal?: AbortSignal): Promise<HookOutcome> {\n if (this.stopBlocked) return NOTHING;\n const outcome = await this.run(\n 'Stop',\n undefined,\n { stop_hook_active: this.stopBlocked },\n signal,\n );\n if (outcome.decision === 'deny') this.stopBlocked = true;\n return outcome;\n }\n\n async sessionStart(signal?: AbortSignal): Promise<HookOutcome> {\n return this.run('SessionStart', undefined, {}, signal);\n }\n\n async sessionEnd(): Promise<HookOutcome> {\n return this.run('SessionEnd', undefined, {});\n }\n\n private run(\n event: HookEvent,\n toolName: string | undefined,\n extra: Partial<HookInput>,\n signal?: AbortSignal,\n ): Promise<HookOutcome> {\n const applicable = this.hooks.filter((hook) => hook.event === event && matches(hook, toolName));\n if (applicable.length === 0) return Promise.resolve(NOTHING);\n\n const input: HookInput = {\n session_id: this.options.sessionId,\n ...(this.options.transcriptPath ? { transcript_path: this.options.transcriptPath } : {}),\n cwd: this.options.cwd,\n hook_event_name: event,\n ...extra,\n };\n return runHooks(applicable, input, {\n cwd: this.options.cwd,\n env: this.options.env,\n ...(signal ? { signal } : {}),\n });\n }\n}\n",
62
63
  "/**\n * Spots a correction in what the user just typed.\n *\n * Detection only proposes; nothing is remembered without the user pressing a\n * key. That asymmetry is deliberate - a false positive costs one dismissed\n * suggestion, while a silently stored wrong rule follows them into every future\n * session, and they would have no idea it was there.\n */\nexport interface MemoryCandidate {\n /** The rule, as it would be stored. */\n text: string;\n /** The sentence it was taken from, kept verbatim as provenance. */\n source: string;\n}\n\n/** Phrasings that state a standing preference rather than a one-off instruction. */\nconst RULES: RegExp[] = [\n /\\b(?:always|never)\\b[^.!?]*/i,\n /\\b(?:don'?t|do not|stop)\\s+[^.!?]*/i,\n /\\buse\\s+[^.!?]*?\\b(?:not|instead of|rather than)\\b[^.!?]*/i,\n /\\b(?:no more|prefer)\\s+[^.!?]*/i,\n /\\bi (?:already )?told you\\b[^.!?]*/i,\n];\n\n/**\n * Marks the instruction as being about this task, not about how to work in\n * general. \"Don't touch the tests in this PR\" is not a preference.\n */\nconst ONE_OFF =\n /\\b(?:this (?:time|once|file|function|test|case|pr|branch)|for now|just here|right now|in this)\\b/i;\n\nexport function detectPreference(prompt: string): MemoryCandidate | undefined {\n const text = prompt.trim();\n if (text === '' || text.length > 400) return undefined;\n\n for (const sentence of text.split(/(?<=[.!?\\n])\\s+/)) {\n const trimmed = sentence.trim();\n if (trimmed === '' || ONE_OFF.test(trimmed)) continue;\n for (const rule of RULES) {\n const match = rule.exec(trimmed);\n if (!match) continue;\n const captured = match[0].trim().replace(/[,;:]$/, '');\n // Two words is a fragment, not a rule worth carrying into every session.\n if (captured.split(/\\s+/).length < 3) continue;\n return { text: capitalise(captured), source: trimmed };\n }\n }\n return undefined;\n}\n\nfunction capitalise(text: string): string {\n const cleaned = text.replace(/^i (?:already )?told you (?:to |that )?/i, '');\n return cleaned.charAt(0).toUpperCase() + cleaned.slice(1);\n}\n",
63
64
  "import { mkdir, readdir, readFile, stat, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { dataDir } from '@earshot/providers';\nimport { projectKey } from '../session/store.ts';\nimport { exec, hasExecutable } from '../tools/exec.ts';\nimport { displayPath } from '../tools/fs-paths.ts';\n\n/**\n * Per-batch snapshots of the files a turn is about to change, stored in a git\n * object database that lives outside the user's repository.\n *\n * The user's own repo is never touched: no commits, no stash, no index changes,\n * no reflog entries. An agent that commits to undo its own work is an agent that\n * has silently rewritten the user's history, and `git log` becomes unreadable.\n * `GIT_DIR` points at our own directory under the data dir instead, and the work\n * tree is the project, so `git hash-object` and `git cat-file` are all we need.\n *\n * Snapshots are of specific files, not of the whole tree: a turn touches a\n * handful of files and hashing the repository per batch would dominate the cost\n * of the batch itself.\n */\nexport interface Snapshot {\n id: string;\n timestamp: string;\n label: string;\n files: SnapshotFile[];\n /**\n * The session that took this snapshot.\n *\n * The store is keyed by working directory, so every session in a project\n * writes into the same one. Without this field `/undo` walked back through\n * whatever was most recent in the directory, which after a crash meant\n * reaching into a previous session's batches: a user who resumed and pressed\n * undo reverted work they had never seen this session do.\n *\n * Absent on snapshots written before this field existed. Those cannot be\n * attributed to any session, so they are unreachable rather than being\n * credited to the current one - crediting them would recreate exactly the\n * bug the field exists to close.\n */\n sessionId?: string;\n}\n\nexport interface SnapshotFile {\n /** Absolute path in the work tree. */\n path: string;\n /** Blob hash of the contents before the batch, or null when it did not exist. */\n before: string | null;\n}\n\n/**\n * Blobs are round-tripped as UTF-8 text, which is what every tool in this harness\n * writes. A binary file edited by a shell command would not survive a restore, so\n * snapshots are taken of the paths the file tools declare, not of arbitrary ones.\n */\nconst MAX_RESTORE_BYTES = 64 * 1024 * 1024;\n\nexport function shadowDir(cwd: string): string {\n return join(dataDir(), 'undo', projectKey(cwd));\n}\n\nexport class ShadowGit {\n private constructor(\n readonly gitDir: string,\n readonly cwd: string,\n /** Stamped onto new snapshots and used to filter `list()`. */\n readonly sessionId?: string,\n ) {}\n\n /**\n * Returns `undefined` when git is not installed rather than throwing: undo is\n * a convenience, and an agent that refuses to edit files because it cannot\n * snapshot them is worse than one that edits without an undo history. Callers\n * treat a missing store as \"no snapshots available\".\n */\n static async open(cwd: string, sessionId?: string): Promise<ShadowGit | undefined> {\n if (!(await hasExecutable('git', cwd))) return undefined;\n\n const gitDir = shadowDir(cwd);\n const initialised = await stat(join(gitDir, 'HEAD')).catch(() => undefined);\n if (!initialised) {\n await mkdir(gitDir, { recursive: true });\n const result = await exec('git', ['init', '--bare', '--quiet', gitDir], { cwd });\n if (result.code !== 0) return undefined;\n }\n await mkdir(join(gitDir, 'snapshots'), { recursive: true });\n return new ShadowGit(gitDir, cwd, sessionId);\n }\n\n private run(args: string[], maxBytes?: number) {\n // GIT_DIR and GIT_WORK_TREE are set per invocation rather than by running\n // inside the shadow directory: the object store is bare and elsewhere, while\n // the files being hashed are in the project.\n return exec('git', args, {\n cwd: this.cwd,\n env: { ...process.env, GIT_DIR: this.gitDir, GIT_WORK_TREE: this.cwd },\n ...(maxBytes !== undefined ? { maxBytes } : {}),\n });\n }\n\n /**\n * Stores one file's current contents and returns its blob hash, or null when\n * the file does not exist yet - which is how a creation is recorded.\n */\n async hashFile(path: string): Promise<string | null> {\n const info = await stat(path).catch(() => undefined);\n if (!info?.isFile()) return null;\n const result = await this.run(['hash-object', '-w', '--', path]);\n if (result.code !== 0) return null;\n return result.stdout.trim() || null;\n }\n\n /**\n * Snapshots the given paths as they are now, before a batch modifies them.\n * Must be called before the tools run, which is why the loop hands it the\n * `writes` from each permission request rather than discovering paths after.\n */\n async snapshot(paths: string[], label: string): Promise<Snapshot | undefined> {\n const unique = [...new Set(paths)];\n if (unique.length === 0) return undefined;\n\n const files: SnapshotFile[] = [];\n for (const path of unique) files.push({ path, before: await this.hashFile(path) });\n return this.record(files, label);\n }\n\n /**\n * Writes a snapshot record from hashes captured earlier. The loop hashes each\n * file immediately before the tool that changes it, then records the batch as\n * one unit at the end, so undo restores a whole batch rather than half of one.\n */\n async record(files: SnapshotFile[], label: string): Promise<Snapshot | undefined> {\n if (files.length === 0) return undefined;\n\n const snapshot: Snapshot = {\n id: `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`,\n timestamp: new Date().toISOString(),\n label,\n files,\n ...(this.sessionId !== undefined ? { sessionId: this.sessionId } : {}),\n };\n await writeFile(\n join(this.gitDir, 'snapshots', `${snapshot.id}.json`),\n `${JSON.stringify(snapshot, null, 2)}\\n`,\n 'utf8',\n );\n return snapshot;\n }\n\n /**\n * Snapshots this session may undo, oldest first.\n *\n * Scoped rather than unscoped by default, so the safe reading is the one a\n * caller gets without asking. A store opened without a session id sees\n * nothing: it cannot tell its own batches from another session's, and\n * guessing is what produced the bug.\n */\n async list(): Promise<Snapshot[]> {\n const all = await this.listAll();\n if (this.sessionId === undefined) return [];\n return all.filter((snapshot) => snapshot.sessionId === this.sessionId);\n }\n\n /** Every snapshot in the directory, whichever session wrote it. */\n async listAll(): Promise<Snapshot[]> {\n const dir = join(this.gitDir, 'snapshots');\n const names = await readdir(dir).catch(() => []);\n const snapshots: Snapshot[] = [];\n for (const name of names) {\n if (!name.endsWith('.json')) continue;\n const raw = await readFile(join(dir, name), 'utf8').catch(() => undefined);\n if (raw === undefined) continue;\n try {\n snapshots.push(JSON.parse(raw) as Snapshot);\n } catch {\n // A snapshot written during a crash; the rest are still usable.\n }\n }\n return snapshots.sort((a, b) => a.timestamp.localeCompare(b.timestamp));\n }\n\n /**\n * Reads a stored blob back. The output cap is raised well above the default,\n * which exists to stop a runaway tool from filling the context window - here it\n * would silently truncate the file being restored, which is data loss.\n */\n async contents(hash: string): Promise<string | undefined> {\n const result = await this.run(['cat-file', 'blob', hash], MAX_RESTORE_BYTES);\n return result.code === 0 ? result.stdout : undefined;\n }\n\n /**\n * Restores every file in a snapshot to its recorded contents. A file the batch\n * created is left in place rather than deleted - removing a path on the user's\n * behalf is not something an undo should do silently - and comes back in\n * `wasCreated` so the caller can say which files it did not touch.\n */\n async restore(snapshot: Snapshot): Promise<{ restored: string[]; wasCreated: string[] }> {\n const restored: string[] = [];\n const wasCreated: string[] = [];\n\n for (const file of snapshot.files) {\n if (file.before === null) {\n wasCreated.push(displayPath(this.cwd, file.path));\n continue;\n }\n const content = await this.contents(file.before);\n if (content === undefined) continue;\n await writeFile(file.path, content, 'utf8');\n restored.push(displayPath(this.cwd, file.path));\n }\n return { restored, wasCreated };\n }\n}\n",
64
- "import { createHash, randomUUID } from 'node:crypto';\nimport { appendFile, mkdir, readdir, readFile, stat } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { Message } from '@earshot/providers';\nimport { sessionsDir } from '@earshot/providers';\n\n/**\n * One line of a session transcript.\n *\n * Entries form a tree rather than a list: each carries its own `id` and the `id`\n * of the entry it follows. A linear session is the degenerate case where every\n * entry has exactly one child. `/fork` and `/rewind` then become navigation -\n * appending a new entry whose parent is somewhere other than the last entry -\n * rather than rewriting the file, which is what keeps the format append-only.\n */\nexport type SessionEntry =\n | {\n type: 'meta';\n id: string;\n parentId: string | null;\n timestamp: string;\n cwd: string;\n model: string;\n version: string;\n /** Set when this session continues another one. */\n forkedFrom?: { sessionId: string; entryId: string };\n }\n | {\n type: 'message';\n id: string;\n parentId: string | null;\n timestamp: string;\n message: Message;\n }\n | {\n type: 'summary';\n id: string;\n parentId: string | null;\n timestamp: string;\n /** Compaction writes a new entry rather than replacing what it summarises. */\n text: string;\n replaces: string[];\n };\n\n/** An entry as supplied by a caller; the store assigns id, parent and timestamp. */\nexport type NewEntry =\n | {\n type: 'meta';\n cwd: string;\n model: string;\n version: string;\n forkedFrom?: { sessionId: string; entryId: string };\n }\n | { type: 'message'; message: Message }\n | { type: 'summary'; text: string; replaces: string[] };\n\nexport interface SessionInfo {\n id: string;\n path: string;\n cwd: string;\n model: string;\n updatedAt: number;\n /** First user message, for showing the user which session is which. */\n preview: string;\n}\n\n/**\n * Sessions are grouped by a hash of the working directory so `--continue` finds\n * the last session for *this* project. The hash is truncated: it disambiguates\n * directories, and a full digest makes the path unreadable for no benefit.\n */\n/**\n * Session ids sort in creation order.\n *\n * A bare UUID does not, and file mtimes tie when two sessions are written in the\n * same millisecond - which makes `--continue` pick an arbitrary one of them. A\n * base36 timestamp plus a per-process counter gives a total order for sessions\n * started by one process, and the timestamp orders the rest.\n */\nlet created = 0;\n\nexport function newSessionId(): string {\n const stamp = Date.now().toString(36).padStart(9, '0');\n const seq = (created++ % 46_656).toString(36).padStart(3, '0');\n return `${stamp}${seq}-${randomUUID().slice(0, 8)}`;\n}\n\nexport function projectKey(cwd: string): string {\n return createHash('sha256').update(cwd).digest('hex').slice(0, 16);\n}\n\nexport function projectDir(cwd: string): string {\n return join(sessionsDir(), projectKey(cwd));\n}\n\n/**\n * Append-only JSONL writer. Every write is an `appendFile` of one line, so an\n * interrupted session leaves a truncated final line rather than a corrupt file,\n * and the reader drops exactly that line.\n */\nexport class SessionStore {\n /**\n * Ids of the message entries written so far, in order. Compaction needs them\n * to say which entries its summary stands in for, and only the store knows\n * the ids - the agent counts messages, not entries.\n */\n readonly messageIds: string[] = [];\n private tail: string | null = null;\n private queue: Promise<void> = Promise.resolve();\n\n private constructor(\n readonly id: string,\n readonly path: string,\n readonly cwd: string,\n ) {}\n\n static async create(\n cwd: string,\n meta: {\n model: string;\n version: string;\n forkedFrom?: { sessionId: string; entryId: string };\n },\n ): Promise<SessionStore> {\n const id = newSessionId();\n const dir = projectDir(cwd);\n await mkdir(dir, { recursive: true });\n\n const store = new SessionStore(id, join(dir, `${id}.jsonl`), cwd);\n await store.append({\n type: 'meta',\n cwd,\n model: meta.model,\n version: meta.version,\n ...(meta.forkedFrom ? { forkedFrom: meta.forkedFrom } : {}),\n });\n return store;\n }\n\n /** Reopens an existing session for appending, continuing from its last entry. */\n static async open(path: string): Promise<SessionStore> {\n const entries = await readEntries(path);\n const meta = entries.find((entry) => entry.type === 'meta');\n if (meta?.type !== 'meta') throw new Error(`${path} has no session header`);\n\n const id =\n path\n .split(/[/\\\\]/)\n .pop()\n ?.replace(/\\.jsonl$/, '') ?? randomUUID();\n const store = new SessionStore(id, path, meta.cwd);\n store.tail = entries.at(-1)?.id ?? null;\n return store;\n }\n\n /**\n * Appends one entry. Writes are serialised through a promise chain: two\n * concurrent appends could otherwise interleave partial lines, and both would\n * claim the same parent.\n */\n append(entry: NewEntry, parentId?: string | null): Promise<string> {\n const id = randomUUID();\n\n this.queue = this.queue.then(async () => {\n // The parent is read inside the queued task, not when append() was called.\n // Reading it eagerly would give every concurrent append the same parent, so\n // twenty writes would land as twenty siblings of one entry rather than as a\n // chain - and replaying the branch would recover only the last of them.\n const line = {\n ...entry,\n id,\n parentId: parentId !== undefined ? parentId : this.tail,\n timestamp: new Date().toISOString(),\n };\n await appendFile(this.path, `${JSON.stringify(line)}\\n`, 'utf8');\n this.tail = id;\n });\n return this.queue.then(() => id);\n }\n\n appendMessage(message: Message): Promise<string> {\n const id = this.append({ type: 'message', message });\n void id.then((value) => this.messageIds.push(value));\n return id;\n }\n\n /**\n * Points the next append at an earlier entry.\n *\n * This is all a rewind is at the storage layer: nothing is removed, and the\n * entries written after it become a second branch of the same file. The old\n * branch stays readable, which is what makes rewinding safe to do casually.\n */\n rewind(entryId: string): void {\n this.tail = entryId;\n }\n\n get tailId(): string | null {\n return this.tail;\n }\n\n /** Resolves once every queued write has landed. */\n flush(): Promise<void> {\n return this.queue;\n }\n}\n\n/**\n * Reads a transcript, skipping unparseable lines rather than failing.\n *\n * A truncated last line is the normal result of a session that was killed\n * mid-write, and refusing to open the file would lose the entire history over\n * one incomplete entry.\n */\nexport async function readEntries(path: string): Promise<SessionEntry[]> {\n const raw = await readFile(path, 'utf8');\n const entries: SessionEntry[] = [];\n for (const line of raw.split('\\n')) {\n if (line.trim() === '') continue;\n try {\n entries.push(JSON.parse(line) as SessionEntry);\n } catch {\n // A partial line: nothing after it can be read either, so stop here.\n break;\n }\n }\n return entries;\n}\n\n/**\n * Walks from `leaf` back to the root, so a forked session replays the branch it\n * actually descends from rather than every entry in the file.\n */\nexport function branchTo(entries: SessionEntry[], leafId?: string): SessionEntry[] {\n const byId = new Map(entries.map((entry) => [entry.id, entry]));\n let cursor = leafId ?? entries.at(-1)?.id;\n const branch: SessionEntry[] = [];\n const seen = new Set<string>();\n\n while (cursor !== undefined && cursor !== null) {\n const entry = byId.get(cursor);\n // A cycle can only come from a corrupted file, but walking one forever is a\n // hang rather than an error, so it is guarded explicitly.\n if (!entry || seen.has(entry.id)) break;\n seen.add(entry.id);\n branch.push(entry);\n cursor = entry.parentId ?? undefined;\n }\n return branch.reverse();\n}\n\n/** The messages of one branch, in order, ready to seed a resumed agent. */\nexport function messagesOf(entries: SessionEntry[]): Message[] {\n return entries\n .filter((entry): entry is SessionEntry & { type: 'message' } => entry.type === 'message')\n .map((entry) => entry.message);\n}\n\nexport async function listSessions(cwd: string): Promise<SessionInfo[]> {\n const dir = projectDir(cwd);\n const names = await readdir(dir).catch(() => []);\n const infos: SessionInfo[] = [];\n\n for (const name of names) {\n if (!name.endsWith('.jsonl')) continue;\n const path = join(dir, name);\n const [info, entries] = await Promise.all([\n stat(path).catch(() => undefined),\n readEntries(path).catch(() => []),\n ]);\n const meta = entries.find((entry) => entry.type === 'meta');\n if (!info || meta?.type !== 'meta') continue;\n\n infos.push({\n id: name.replace(/\\.jsonl$/, ''),\n path,\n cwd: meta.cwd,\n model: meta.model,\n updatedAt: info.mtimeMs,\n preview: firstUserText(entries),\n });\n }\n // Tie-broken by id, which encodes creation order, so two sessions written in\n // the same millisecond still resolve to a stable \"most recent\".\n return infos.sort((a, b) => b.updatedAt - a.updatedAt || b.id.localeCompare(a.id));\n}\n\nexport async function latestSession(cwd: string): Promise<SessionInfo | undefined> {\n return (await listSessions(cwd))[0];\n}\n\nfunction firstUserText(entries: SessionEntry[]): string {\n for (const entry of entries) {\n if (entry.type !== 'message' || entry.message.role !== 'user') continue;\n for (const part of entry.message.content) {\n if (part.type === 'text' && part.text.trim() !== '') {\n return part.text.split('\\n')[0]?.slice(0, 120) ?? '';\n }\n }\n }\n return '(no prompt)';\n}\n",
65
- "/** Kept in its own module so anything can read it without importing the barrel. */\nexport const VERSION = '0.3.2';\n",
65
+ "import { createHash, randomUUID } from 'node:crypto';\nimport { appendFile, mkdir, readdir, readFile, stat } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { Message, ReasoningEffort } from '@earshot/providers';\nimport { sessionsDir } from '@earshot/providers';\n\n/**\n * One line of a session transcript.\n *\n * Entries form a tree rather than a list: each carries its own `id` and the `id`\n * of the entry it follows. A linear session is the degenerate case where every\n * entry has exactly one child. `/fork` and `/rewind` then become navigation -\n * appending a new entry whose parent is somewhere other than the last entry -\n * rather than rewriting the file, which is what keeps the format append-only.\n */\nexport type SessionEntry =\n | {\n type: 'meta';\n id: string;\n parentId: string | null;\n timestamp: string;\n cwd: string;\n model: string;\n version: string;\n /** Set when this session continues another one. */\n forkedFrom?: { sessionId: string; entryId: string };\n }\n | {\n type: 'message';\n id: string;\n parentId: string | null;\n timestamp: string;\n message: Message;\n }\n | {\n type: 'summary';\n id: string;\n parentId: string | null;\n timestamp: string;\n /** Compaction writes a new entry rather than replacing what it summarises. */\n text: string;\n replaces: string[];\n }\n | {\n type: 'configuration';\n id: string;\n parentId: string | null;\n timestamp: string;\n model?: string;\n reasoningEffort?: ReasoningEffort | null;\n };\n\n/** An entry as supplied by a caller; the store assigns id, parent and timestamp. */\nexport type NewEntry =\n | {\n type: 'meta';\n cwd: string;\n model: string;\n version: string;\n forkedFrom?: { sessionId: string; entryId: string };\n }\n | { type: 'message'; message: Message }\n | { type: 'summary'; text: string; replaces: string[] }\n | { type: 'configuration'; model?: string; reasoningEffort?: ReasoningEffort | null };\n\nexport interface SessionInfo {\n id: string;\n path: string;\n cwd: string;\n model: string;\n reasoningEffort?: ReasoningEffort;\n updatedAt: number;\n /** First user message, for showing the user which session is which. */\n preview: string;\n}\n\n/**\n * Sessions are grouped by a hash of the working directory so `--continue` finds\n * the last session for *this* project. The hash is truncated: it disambiguates\n * directories, and a full digest makes the path unreadable for no benefit.\n */\n/**\n * Session ids sort in creation order.\n *\n * A bare UUID does not, and file mtimes tie when two sessions are written in the\n * same millisecond - which makes `--continue` pick an arbitrary one of them. A\n * base36 timestamp plus a per-process counter gives a total order for sessions\n * started by one process, and the timestamp orders the rest.\n */\nlet created = 0;\n\nexport function newSessionId(): string {\n const stamp = Date.now().toString(36).padStart(9, '0');\n const seq = (created++ % 46_656).toString(36).padStart(3, '0');\n return `${stamp}${seq}-${randomUUID().slice(0, 8)}`;\n}\n\nexport function projectKey(cwd: string): string {\n return createHash('sha256').update(cwd).digest('hex').slice(0, 16);\n}\n\nexport function projectDir(cwd: string): string {\n return join(sessionsDir(), projectKey(cwd));\n}\n\n/**\n * Append-only JSONL writer. Every write is an `appendFile` of one line, so an\n * interrupted session leaves a truncated final line rather than a corrupt file,\n * and the reader drops exactly that line.\n */\nexport class SessionStore {\n /**\n * Ids of the message entries written so far, in order. Compaction needs them\n * to say which entries its summary stands in for, and only the store knows\n * the ids - the agent counts messages, not entries.\n */\n readonly messageIds: string[] = [];\n private tail: string | null = null;\n private queue: Promise<void> = Promise.resolve();\n\n private constructor(\n readonly id: string,\n readonly path: string,\n readonly cwd: string,\n ) {}\n\n static async create(\n cwd: string,\n meta: {\n model: string;\n version: string;\n forkedFrom?: { sessionId: string; entryId: string };\n },\n ): Promise<SessionStore> {\n const id = newSessionId();\n const dir = projectDir(cwd);\n await mkdir(dir, { recursive: true });\n\n const store = new SessionStore(id, join(dir, `${id}.jsonl`), cwd);\n await store.append({\n type: 'meta',\n cwd,\n model: meta.model,\n version: meta.version,\n ...(meta.forkedFrom ? { forkedFrom: meta.forkedFrom } : {}),\n });\n return store;\n }\n\n /** Reopens an existing session for appending, continuing from its last entry. */\n static async open(path: string): Promise<SessionStore> {\n const entries = await readEntries(path);\n const meta = entries.find((entry) => entry.type === 'meta');\n if (meta?.type !== 'meta') throw new Error(`${path} has no session header`);\n\n const id =\n path\n .split(/[/\\\\]/)\n .pop()\n ?.replace(/\\.jsonl$/, '') ?? randomUUID();\n const store = new SessionStore(id, path, meta.cwd);\n store.tail = entries.at(-1)?.id ?? null;\n return store;\n }\n\n /**\n * Appends one entry. Writes are serialised through a promise chain: two\n * concurrent appends could otherwise interleave partial lines, and both would\n * claim the same parent.\n */\n append(entry: NewEntry, parentId?: string | null): Promise<string> {\n const id = randomUUID();\n\n this.queue = this.queue.then(async () => {\n // The parent is read inside the queued task, not when append() was called.\n // Reading it eagerly would give every concurrent append the same parent, so\n // twenty writes would land as twenty siblings of one entry rather than as a\n // chain - and replaying the branch would recover only the last of them.\n const line = {\n ...entry,\n id,\n parentId: parentId !== undefined ? parentId : this.tail,\n timestamp: new Date().toISOString(),\n };\n await appendFile(this.path, `${JSON.stringify(line)}\\n`, 'utf8');\n this.tail = id;\n });\n return this.queue.then(() => id);\n }\n\n appendMessage(message: Message): Promise<string> {\n const id = this.append({ type: 'message', message });\n void id.then((value) => this.messageIds.push(value));\n return id;\n }\n\n /**\n * Points the next append at an earlier entry.\n *\n * This is all a rewind is at the storage layer: nothing is removed, and the\n * entries written after it become a second branch of the same file. The old\n * branch stays readable, which is what makes rewinding safe to do casually.\n */\n rewind(entryId: string): void {\n this.tail = entryId;\n }\n\n get tailId(): string | null {\n return this.tail;\n }\n\n /** Resolves once every queued write has landed. */\n flush(): Promise<void> {\n return this.queue;\n }\n}\n\n/**\n * Reads a transcript, skipping unparseable lines rather than failing.\n *\n * A truncated last line is the normal result of a session that was killed\n * mid-write, and refusing to open the file would lose the entire history over\n * one incomplete entry.\n */\nexport async function readEntries(path: string): Promise<SessionEntry[]> {\n const raw = await readFile(path, 'utf8');\n const entries: SessionEntry[] = [];\n for (const line of raw.split('\\n')) {\n if (line.trim() === '') continue;\n try {\n entries.push(JSON.parse(line) as SessionEntry);\n } catch {\n // A partial line: nothing after it can be read either, so stop here.\n break;\n }\n }\n return entries;\n}\n\n/**\n * Walks from `leaf` back to the root, so a forked session replays the branch it\n * actually descends from rather than every entry in the file.\n */\nexport function branchTo(entries: SessionEntry[], leafId?: string): SessionEntry[] {\n const byId = new Map(entries.map((entry) => [entry.id, entry]));\n let cursor = leafId ?? entries.at(-1)?.id;\n const branch: SessionEntry[] = [];\n const seen = new Set<string>();\n\n while (cursor !== undefined && cursor !== null) {\n const entry = byId.get(cursor);\n // A cycle can only come from a corrupted file, but walking one forever is a\n // hang rather than an error, so it is guarded explicitly.\n if (!entry || seen.has(entry.id)) break;\n seen.add(entry.id);\n branch.push(entry);\n cursor = entry.parentId ?? undefined;\n }\n return branch.reverse();\n}\n\n/** The messages of one branch, in order, ready to seed a resumed agent. */\nexport function messagesOf(entries: SessionEntry[]): Message[] {\n return entries\n .filter((entry): entry is SessionEntry & { type: 'message' } => entry.type === 'message')\n .map((entry) => entry.message);\n}\n\nexport async function listSessions(cwd: string): Promise<SessionInfo[]> {\n const dir = projectDir(cwd);\n const names = await readdir(dir).catch(() => []);\n const infos: SessionInfo[] = [];\n\n for (const name of names) {\n if (!name.endsWith('.jsonl')) continue;\n const path = join(dir, name);\n const [info, entries] = await Promise.all([\n stat(path).catch(() => undefined),\n readEntries(path).catch(() => []),\n ]);\n const meta = entries.find((entry) => entry.type === 'meta');\n if (!info || meta?.type !== 'meta') continue;\n\n const configuration = latestConfiguration(entries);\n infos.push({\n id: name.replace(/\\.jsonl$/, ''),\n path,\n cwd: meta.cwd,\n model: configuration.model ?? meta.model,\n ...(configuration.reasoningEffort ? { reasoningEffort: configuration.reasoningEffort } : {}),\n updatedAt: info.mtimeMs,\n preview: firstUserText(entries),\n });\n }\n // Tie-broken by id, which encodes creation order, so two sessions written in\n // the same millisecond still resolve to a stable \"most recent\".\n return infos.sort((a, b) => b.updatedAt - a.updatedAt || b.id.localeCompare(a.id));\n}\n\nexport function latestConfiguration(entries: readonly SessionEntry[]): {\n model?: string;\n reasoningEffort?: ReasoningEffort;\n reasoningConfigured: boolean;\n} {\n const meta = entries.find((entry) => entry.type === 'meta');\n let model = meta?.type === 'meta' ? meta.model : undefined;\n let reasoningEffort: ReasoningEffort | undefined;\n let reasoningConfigured = false;\n for (const entry of branchTo([...entries])) {\n if (entry.type !== 'configuration') continue;\n if (entry.model !== undefined) model = entry.model;\n if (entry.reasoningEffort !== undefined) {\n reasoningConfigured = true;\n reasoningEffort = entry.reasoningEffort === null ? undefined : entry.reasoningEffort;\n }\n }\n return {\n ...(model ? { model } : {}),\n ...(reasoningEffort ? { reasoningEffort } : {}),\n reasoningConfigured,\n };\n}\n\nexport async function latestSession(cwd: string): Promise<SessionInfo | undefined> {\n return (await listSessions(cwd))[0];\n}\n\nfunction firstUserText(entries: SessionEntry[]): string {\n for (const entry of entries) {\n if (entry.type !== 'message' || entry.message.role !== 'user') continue;\n for (const part of entry.message.content) {\n if (part.type === 'text' && part.text.trim() !== '') {\n return part.text.split('\\n')[0]?.slice(0, 120) ?? '';\n }\n }\n }\n return '(no prompt)';\n}\n",
66
+ "/** Kept in its own module so anything can read it without importing the barrel. */\nexport const VERSION = '0.4.0';\n",
66
67
  "import type { Message, ToolCallPart, ToolResultPart } from '@earshot/providers';\n\n/**\n * Repairing a transcript that a crash left mid-turn.\n *\n * The loop already covers the interruptions it can see: `runCalls` fills every\n * empty slot with an error result before the tool message is appended, so an\n * abort - Ctrl-C, a budget stop, a failed step - never reaches disk half-written.\n * What it cannot cover is the process not surviving to do that. Messages are\n * persisted as they are produced, so between the assistant message carrying the\n * tool calls and the tool message carrying their results there is a window in\n * which a SIGKILL, a power loss or an OOM leaves calls with no answer.\n *\n * That file is not corrupt and reads back fine. It is invalid as a *request*:\n * every tool call must have a result part or the next call fails at the\n * provider, so `--resume` on such a session breaks on the first turn, before\n * the user has done anything. Repair closes that.\n *\n * The repair is an append. History is append-only because Anthropic rejects\n * edited thinking blocks, and because a transcript that rewrites itself cannot\n * be trusted as a record of what happened - so the results synthesised here go\n * into a new entry with a normal parent, visible in `/tree` like any other. The\n * abandoned turn stays on disk exactly as the crash left it.\n */\nconst REPAIR_TEXT =\n 'No result was recorded for this call: earshot exited before the tool finished. ' +\n 'The call may or may not have run, so treat its effect as unknown and check ' +\n 'the current state rather than assuming either outcome.';\n\n/**\n * Tool calls in `messages` that no later message answers.\n *\n * The whole branch is scanned rather than only its last pair, because a result\n * may legitimately arrive in a message well after the call - and because a\n * session resumed twice must not re-repair calls the first repair answered.\n */\nexport function unresolvedToolCalls(messages: Message[]): ToolCallPart[] {\n const answered = new Set<string>();\n const calls: ToolCallPart[] = [];\n\n for (const message of messages) {\n for (const part of message.content) {\n if (part.type === 'tool_call') calls.push(part);\n else if (part.type === 'tool_result') answered.add(part.toolCallId);\n }\n }\n return calls.filter((call) => !answered.has(call.toolCallId));\n}\n\n/**\n * The message that answers `calls`, in the order they were emitted.\n *\n * Results are marked `isError` and say what is not known rather than claiming\n * the call failed: a process killed after a `write` completed leaves the file\n * written, and a repair that reported \"this did not run\" would be a lie the\n * model would then act on.\n */\nexport function repairMessage(calls: ToolCallPart[]): Message {\n const content: ToolResultPart[] = calls.map((call) => ({\n type: 'tool_result',\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n output: { type: 'text', value: REPAIR_TEXT },\n isError: true,\n }));\n return { role: 'tool', content };\n}\n",
67
- "import { buildRegistry, type ProviderRegistry } from '@earshot/providers';\nimport { Agent, type AgentOptions } from '../agent.ts';\nimport { buildSystemPrompt, type Curiosity } from '../context/system-prompt.ts';\nimport { loadHooks } from '../hooks/config.ts';\nimport { HookRunner } from '../hooks/runner.ts';\nimport { resolveModel } from '../model.ts';\nimport type { PermissionMode, PermissionPrompt } from '../permissions/engine.ts';\nimport { loadSettings } from '../permissions/settings.ts';\nimport {\n discoverExtensions,\n renderSkillIndex,\n type Skill,\n type SlashCommand,\n} from '../skills/discover.ts';\nimport { BUILTIN_TOOLS } from '../tools/index.ts';\nimport { skillTool } from '../tools/skill.ts';\nimport type { Tool } from '../tools/types.ts';\nimport { ShadowGit } from '../undo/shadow-git.ts';\nimport { VERSION } from '../version.ts';\nimport { repairMessage, unresolvedToolCalls } from './repair.ts';\nimport {\n branchTo,\n latestSession,\n messagesOf,\n readEntries,\n type SessionEntry,\n SessionStore,\n} from './store.ts';\n\nexport interface CreateSessionOptions {\n cwd: string;\n /** Model reference; falls back to the configured default. */\n model: string;\n mode?: PermissionMode;\n apiKey?: string;\n registry?: ProviderRegistry;\n prompt?: PermissionPrompt;\n ask?: (question: string, options?: string[]) => Promise<string>;\n /** Resume a specific transcript, or the most recent one for this directory. */\n resume?: { path: string } | { latest: true };\n /** Skips session persistence entirely, for one-shot runs. */\n ephemeral?: boolean;\n /** Disables undo snapshots. */\n noUndo?: boolean;\n maxSteps?: number;\n /** Overrides `curiosity` in settings. */\n curiosity?: Curiosity;\n /** Overrides `maxCostUsd` in settings. Zero or less removes the budget. */\n maxCostUsd?: number;\n /** Asked when the budget is reached; returns a higher limit, or stops. */\n confirmBudget?: (spentUsd: number, limitUsd: number) => Promise<number | undefined>;\n /**\n * Tools contributed from outside core - MCP servers today, subagents next.\n * They are appended to the built-ins and go through the same gate: core knows\n * nothing about where they came from, which is what keeps `packages/mcp`\n * depending on core rather than the other way round.\n */\n extraTools?: Tool<never>[];\n /** Additional problems to surface before the first turn, e.g. a server that failed. */\n problems?: string[];\n /** Torn down with the session, so a spawned server does not outlive it. */\n onDispose?: () => Promise<void> | void;\n /** Skips skill and slash-command discovery, for tests and one-shot runs. */\n noExtensions?: boolean;\n}\n\nexport interface CreatedSession {\n agent: Agent;\n store?: SessionStore;\n /** Settings problems worth showing the user before the first turn. */\n problems: string[];\n /** Number of messages replayed from a resumed transcript. */\n resumed: number;\n /** Discovered skills, for `/skills` and for explaining what is loaded. */\n skills: Skill[];\n /** User-defined slash commands, expanded into prompts by the TUI. */\n commands: SlashCommand[];\n /** Installs the approval callback; the TUI can only build one after it mounts. */\n installPrompt(prompt: PermissionPrompt): void;\n installAsk(ask: (question: string, options?: string[]) => Promise<string>): void;\n /** The current branch of the transcript, oldest first. */\n branch(): Promise<SessionEntry[]>;\n /**\n * Moves the session back to an earlier entry. Nothing is deleted: later\n * entries stay in the file as an abandoned branch.\n */\n rewindTo(entryId: string): Promise<number>;\n /** Continues in a new transcript that records where it branched from. */\n fork(entryId?: string): Promise<string | undefined>;\n /**\n * Reverts the most recent tool batch's file changes. Calling it again steps\n * back another batch; a file the batch created is reported rather than\n * deleted.\n */\n undo(): Promise<{ label: string; restored: string[]; wasCreated: string[] } | undefined>;\n dispose(): Promise<void>;\n}\n\nexport class NoSessionToResumeError extends Error {\n constructor(cwd: string) {\n super(`no previous session for ${cwd}`);\n this.name = 'NoSessionToResumeError';\n }\n}\n\n/**\n * One place that turns flags into a running agent, so the TUI and the headless\n * command cannot drift on which settings are honoured. Everything optional here\n * degrades rather than failing: a missing git binary means no undo, and an\n * unwritable data directory means no transcript, but the turn still runs.\n */\nexport async function createSession(options: CreateSessionOptions): Promise<CreatedSession> {\n const registry = options.registry ?? buildRegistry();\n const settings = await loadSettings(options.cwd);\n const mode = options.mode ?? settings.defaultMode ?? 'ask';\n const curiosity = options.curiosity ?? settings.curiosity ?? 'normal';\n // A flag of zero or less is how the CLI says \"no budget\", which has to beat a\n // settings file that sets one, or a limit would be impossible to turn off.\n const maxCostUsd =\n options.maxCostUsd !== undefined\n ? options.maxCostUsd > 0\n ? options.maxCostUsd\n : undefined\n : settings.maxCostUsd;\n\n const resolved = await resolveModel(registry, options.model, {\n ...(options.apiKey ? { apiKey: options.apiKey } : {}),\n });\n const modelRef = `${resolved.provider.id}/${resolved.model.id}`;\n\n const discovered = options.noExtensions\n ? { skills: [], commands: [], problems: [] }\n : await discoverExtensions(options.cwd);\n\n let store: SessionStore | undefined;\n let replayed: ReturnType<typeof messagesOf> = [];\n const repairProblems: string[] = [];\n\n if (!options.ephemeral) {\n const resumePath = await resolveResumePath(options);\n if (resumePath) {\n const entries = await readEntries(resumePath);\n // Only the branch the transcript actually ends on: a session that was\n // rewound has entries that are no longer part of its history.\n replayed = messagesOf(branchTo(entries));\n store = await SessionStore.open(resumePath).catch(() => undefined);\n\n // A crash between the assistant message and its tool results leaves calls\n // with no answer, which the provider rejects on the next request - so the\n // resumed session would fail before the user typed anything. The results\n // are appended as a new entry; nothing already written is touched.\n const orphaned = unresolvedToolCalls(replayed);\n if (orphaned.length > 0) {\n const repair = repairMessage(orphaned);\n replayed = [...replayed, repair];\n if (store) await store.appendMessage(repair);\n repairProblems.push(\n `repaired an interrupted turn: ${orphaned.length} tool ` +\n `${orphaned.length === 1 ? 'call' : 'calls'} ` +\n `(${orphaned.map((call) => call.toolName).join(', ')}) had no recorded result`,\n );\n }\n }\n store ??= await SessionStore.create(options.cwd, {\n model: modelRef,\n version: VERSION,\n }).catch(() => undefined);\n }\n\n const loadedHooks = options.noExtensions\n ? { hooks: [], problems: [] }\n : await loadHooks(options.cwd);\n const hooks = new HookRunner(loadedHooks.hooks, {\n cwd: options.cwd,\n env: process.env,\n sessionId: store?.id ?? 'ephemeral',\n ...(store ? { transcriptPath: store.path } : {}),\n });\n\n // Built after the session id exists, because a SessionStart hook is told which\n // session it is running for, and its context goes into the prompt it starts.\n const started = hooks.has('SessionStart') ? await hooks.sessionStart() : undefined;\n const system = await buildSystemPrompt({\n cwd: options.cwd,\n mode,\n curiosity,\n model: modelRef,\n skills: renderSkillIndex(discovered.skills),\n ...(started?.context.length\n ? { extra: `<session-start>\\n${started.context.join('\\n\\n')}\\n</session-start>` }\n : {}),\n });\n\n // Scoped to this session: the store is shared by every session in the\n // directory, and an unscoped `/undo` reached into batches the user never saw\n // this session make. An ephemeral run has no id and so has no undo history.\n const shadow = options.noUndo\n ? undefined\n : await ShadowGit.open(options.cwd, store?.id).catch(() => undefined);\n\n // The skill tool only exists when there is something to load: a tool whose\n // every argument is invalid is one the model wastes a call discovering.\n const sessionTools: Tool<never>[] = [\n ...(BUILTIN_TOOLS as Tool<never>[]),\n ...(discovered.skills.length ? [skillTool(discovered.skills) as unknown as Tool<never>] : []),\n ...(options.extraTools ?? []),\n ];\n\n const agentOptions: AgentOptions = {\n registry,\n model: resolved,\n cwd: options.cwd,\n system,\n mode,\n rules: settings.rules,\n ...(options.prompt ? { prompt: options.prompt } : {}),\n ...(options.ask ? { ask: options.ask } : {}),\n ...(options.maxSteps !== undefined ? { maxSteps: options.maxSteps } : {}),\n ...(maxCostUsd !== undefined ? { maxCostUsd } : {}),\n ...(options.confirmBudget ? { confirmBudget: options.confirmBudget } : {}),\n ...(sessionTools.length > BUILTIN_TOOLS.length ? { tools: sessionTools } : {}),\n ...(hooks.isEmpty ? {} : { hooks }),\n ...(shadow ? { shadow } : {}),\n ...(store ? { onMessage: (message) => void store?.appendMessage(message) } : {}),\n ...(store\n ? {\n // Appended, never substituted for what it summarises: the transcript\n // on disk stays complete, so a resumed session can replay the real\n // messages rather than a recollection of them.\n onCompaction: (summary: string, historyCut: number) => {\n void store?.append({\n type: 'summary',\n text: summary,\n replaces: store?.messageIds.slice(0, historyCut) ?? [],\n });\n },\n }\n : {}),\n };\n\n const agent = new Agent(agentOptions);\n // Replayed messages are pushed straight onto history rather than re-appended\n // through the store: they are already in the transcript, and writing them back\n // would duplicate every entry on each resume.\n agent.history.push(...replayed);\n\n const undone = new Set<string>();\n\n const branch = async (): Promise<SessionEntry[]> => {\n if (!store) return [];\n await store.flush();\n return branchTo(await readEntries(store.path), store.tailId ?? undefined);\n };\n\n return {\n agent,\n ...(store ? { store } : {}),\n problems: [\n ...settings.problems,\n ...discovered.problems,\n ...loadedHooks.problems,\n ...(started?.problems ?? []),\n ...repairProblems,\n ...(options.problems ?? []),\n ],\n resumed: replayed.length,\n skills: discovered.skills,\n commands: discovered.commands,\n installPrompt: (prompt) => agent.setPrompt(prompt),\n installAsk: (ask) => agent.setAsk(ask),\n branch,\n async rewindTo(entryId) {\n if (!store) return 0;\n await store.flush();\n const entries = await readEntries(store.path);\n const kept = messagesOf(branchTo(entries, entryId));\n store.rewind(entryId);\n agent.replaceHistory(kept);\n return kept.length;\n },\n async fork(entryId) {\n if (!store) return undefined;\n await store.flush();\n const from = entryId ?? store.tailId;\n const entries = await readEntries(store.path);\n const forked = await SessionStore.create(options.cwd, {\n model: modelRef,\n version: VERSION,\n ...(from ? { forkedFrom: { sessionId: store.id, entryId: from } } : {}),\n }).catch(() => undefined);\n if (!forked) return undefined;\n\n // The branch is replayed into the new file rather than referenced across\n // it: a transcript that cannot be read on its own is one that breaks as\n // soon as the file it points at is deleted.\n const kept = messagesOf(branchTo(entries, from ?? undefined));\n for (const message of kept) await forked.appendMessage(message);\n agent.replaceHistory(kept);\n store = forked;\n return forked.id;\n },\n async undo() {\n if (!shadow) return undefined;\n // Snapshots are not consumed by restoring them, so the ones already used\n // are tracked here; without this, a second /undo replays the first.\n const snapshots = (await shadow.list()).filter((snapshot) => !undone.has(snapshot.id));\n const last = snapshots.at(-1);\n if (!last) return undefined;\n undone.add(last.id);\n const { restored, wasCreated } = await shadow.restore(last);\n return { label: last.label, restored, wasCreated };\n },\n async dispose() {\n agent.dispose();\n // Best effort: a SessionEnd hook that fails must not stop the session from\n // closing, and nothing can act on its answer by this point anyway.\n if (hooks.has('SessionEnd')) await hooks.sessionEnd().catch(() => undefined);\n await store?.flush();\n await options.onDispose?.();\n },\n };\n}\n\n/**\n * Rebuilds the system prompt from what is currently on disk.\n *\n * Called after a memory is captured or deleted, so a preference takes effect on\n * the next model call rather than the next session.\n */\nexport async function refreshSystemPrompt(\n agent: Agent,\n model: string,\n skills: Skill[] = [],\n): Promise<void> {\n agent.setSystem(\n await buildSystemPrompt({\n cwd: agent.cwd,\n mode: agent.permissionMode,\n model,\n // Rebuilt from the same list rather than re-discovered: a skill added mid\n // session is not loaded until the next one, and a prompt that silently\n // gained an entry would be harder to explain than one that did not.\n skills: renderSkillIndex(skills),\n }),\n );\n}\n\nasync function resolveResumePath(options: CreateSessionOptions): Promise<string | undefined> {\n const { resume } = options;\n if (!resume) return undefined;\n if ('path' in resume) return resume.path;\n\n const latest = await latestSession(options.cwd);\n if (!latest) throw new NoSessionToResumeError(options.cwd);\n return latest.path;\n}\n",
68
- "export interface ParsedArgs {\n command: string | undefined;\n flags: Record<string, string | boolean>;\n positionals: string[];\n}\n\n/** Minimal, dependency-free flag parsing: --key=value, --key value, --bool, -p. */\nexport function parseArgs(argv: string[]): ParsedArgs {\n const flags: Record<string, string | boolean> = {};\n const positionals: string[] = [];\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i] as string;\n if (arg === '--') {\n positionals.push(...argv.slice(i + 1));\n break;\n }\n if (arg.startsWith('--')) {\n const eq = arg.indexOf('=');\n if (eq !== -1) {\n flags[arg.slice(2, eq)] = arg.slice(eq + 1);\n } else {\n const next = argv[i + 1];\n if (next !== undefined && !next.startsWith('-')) {\n flags[arg.slice(2)] = next;\n i++;\n } else {\n flags[arg.slice(2)] = true;\n }\n }\n } else if (arg.startsWith('-') && arg.length > 1) {\n const next = argv[i + 1];\n if (next !== undefined && !next.startsWith('-')) {\n flags[arg.slice(1)] = next;\n i++;\n } else {\n flags[arg.slice(1)] = true;\n }\n } else {\n positionals.push(arg);\n }\n }\n\n const known = new Set([\n 'auth',\n 'mcp',\n 'extensions',\n 'config',\n 'models',\n 'acp',\n 'doctor',\n 'update',\n ]);\n const command =\n positionals[0] !== undefined && known.has(positionals[0]) ? positionals[0] : undefined;\n return { command, flags, positionals: command ? positionals.slice(1) : positionals };\n}\n",
68
+ "import { buildRegistry, type ProviderRegistry, type ReasoningEffort } from '@earshot/providers';\nimport { Agent, type AgentOptions } from '../agent.ts';\nimport { buildSystemPrompt, type Curiosity } from '../context/system-prompt.ts';\nimport { loadHooks } from '../hooks/config.ts';\nimport { HookRunner } from '../hooks/runner.ts';\nimport { DEFAULT_MODEL, resolveModel } from '../model.ts';\nimport type { PermissionMode, PermissionPrompt } from '../permissions/engine.ts';\nimport { loadSettings } from '../permissions/settings.ts';\nimport {\n discoverExtensions,\n renderSkillIndex,\n type Skill,\n type SlashCommand,\n} from '../skills/discover.ts';\nimport { BUILTIN_TOOLS } from '../tools/index.ts';\nimport { skillTool } from '../tools/skill.ts';\nimport type { Tool } from '../tools/types.ts';\nimport { ShadowGit } from '../undo/shadow-git.ts';\nimport { VERSION } from '../version.ts';\nimport { repairMessage, unresolvedToolCalls } from './repair.ts';\nimport {\n branchTo,\n latestConfiguration,\n latestSession,\n messagesOf,\n readEntries,\n type SessionEntry,\n SessionStore,\n} from './store.ts';\n\nexport interface CreateSessionOptions {\n cwd: string;\n /** Model reference; falls back to the configured default. */\n model?: string;\n /** `null` explicitly selects provider-default (Auto). */\n reasoningEffort?: ReasoningEffort | null;\n mode?: PermissionMode;\n apiKey?: string;\n registry?: ProviderRegistry;\n prompt?: PermissionPrompt;\n ask?: (question: string, options?: string[]) => Promise<string>;\n /** Resume a specific transcript, or the most recent one for this directory. */\n resume?: { path: string } | { latest: true };\n /** Skips session persistence entirely, for one-shot runs. */\n ephemeral?: boolean;\n /** Disables undo snapshots. */\n noUndo?: boolean;\n maxSteps?: number;\n /** Overrides `curiosity` in settings. */\n curiosity?: Curiosity;\n /** Overrides `maxCostUsd` in settings. Zero or less removes the budget. */\n maxCostUsd?: number;\n /** Asked when the budget is reached; returns a higher limit, or stops. */\n confirmBudget?: (spentUsd: number, limitUsd: number) => Promise<number | undefined>;\n /**\n * Tools contributed from outside core - MCP servers today, subagents next.\n * They are appended to the built-ins and go through the same gate: core knows\n * nothing about where they came from, which is what keeps `packages/mcp`\n * depending on core rather than the other way round.\n */\n extraTools?: Tool<never>[];\n /** Additional problems to surface before the first turn, e.g. a server that failed. */\n problems?: string[];\n /** Torn down with the session, so a spawned server does not outlive it. */\n onDispose?: () => Promise<void> | void;\n /** Skips skill and slash-command discovery, for tests and one-shot runs. */\n noExtensions?: boolean;\n}\n\nexport interface CreatedSession {\n agent: Agent;\n store?: SessionStore;\n /** Settings problems worth showing the user before the first turn. */\n problems: string[];\n /** Number of messages replayed from a resumed transcript. */\n resumed: number;\n /** Discovered skills, for `/skills` and for explaining what is loaded. */\n skills: Skill[];\n /** User-defined slash commands, expanded into prompts by the TUI. */\n commands: SlashCommand[];\n /** Installs the approval callback; the TUI can only build one after it mounts. */\n installPrompt(prompt: PermissionPrompt): void;\n installAsk(ask: (question: string, options?: string[]) => Promise<string>): void;\n /** The current branch of the transcript, oldest first. */\n branch(): Promise<SessionEntry[]>;\n /**\n * Moves the session back to an earlier entry. Nothing is deleted: later\n * entries stay in the file as an abandoned branch.\n */\n rewindTo(entryId: string): Promise<number>;\n /** Continues in a new transcript that records where it branched from. */\n fork(entryId?: string): Promise<string | undefined>;\n /** Records model/reasoning changes without rewriting transcript history. */\n recordConfiguration(configuration: {\n model?: string;\n reasoningEffort?: ReasoningEffort | null;\n }): Promise<void>;\n /**\n * Reverts the most recent tool batch's file changes. Calling it again steps\n * back another batch; a file the batch created is reported rather than\n * deleted.\n */\n undo(): Promise<{ label: string; restored: string[]; wasCreated: string[] } | undefined>;\n dispose(): Promise<void>;\n}\n\nexport class NoSessionToResumeError extends Error {\n constructor(cwd: string) {\n super(`no previous session for ${cwd}`);\n this.name = 'NoSessionToResumeError';\n }\n}\n\n/**\n * One place that turns flags into a running agent, so the TUI and the headless\n * command cannot drift on which settings are honoured. Everything optional here\n * degrades rather than failing: a missing git binary means no undo, and an\n * unwritable data directory means no transcript, but the turn still runs.\n */\nexport async function createSession(options: CreateSessionOptions): Promise<CreatedSession> {\n const registry = options.registry ?? buildRegistry();\n const settings = await loadSettings(options.cwd);\n const resumePath = options.ephemeral ? undefined : await resolveResumePath(options);\n const resumeEntries = resumePath ? await readEntries(resumePath) : [];\n const resumedConfiguration = latestConfiguration(resumeEntries);\n const requestedModel =\n options.model ?? resumedConfiguration.model ?? settings.defaultModel ?? DEFAULT_MODEL;\n const configuredEffort =\n options.reasoningEffort !== undefined\n ? options.reasoningEffort\n : resumedConfiguration.reasoningConfigured\n ? resumedConfiguration.reasoningEffort\n : settings.reasoningEfforts[requestedModel];\n const mode = options.mode ?? settings.defaultMode ?? 'ask';\n const curiosity = options.curiosity ?? settings.curiosity ?? 'normal';\n // A flag of zero or less is how the CLI says \"no budget\", which has to beat a\n // settings file that sets one, or a limit would be impossible to turn off.\n const maxCostUsd =\n options.maxCostUsd !== undefined\n ? options.maxCostUsd > 0\n ? options.maxCostUsd\n : undefined\n : settings.maxCostUsd;\n\n const resolved = await resolveModel(registry, requestedModel, {\n ...(options.apiKey ? { apiKey: options.apiKey } : {}),\n });\n const modelRef = `${resolved.provider.id}/${resolved.model.id}`;\n const reasoningEffort = resolved.model.capabilities.reasoning\n ? (configuredEffort ?? undefined)\n : undefined;\n\n const discovered = options.noExtensions\n ? { skills: [], commands: [], problems: [] }\n : await discoverExtensions(options.cwd);\n\n let store: SessionStore | undefined;\n let replayed: ReturnType<typeof messagesOf> = [];\n const repairProblems: string[] = [];\n\n if (!options.ephemeral) {\n if (resumePath) {\n const entries = resumeEntries;\n // Only the branch the transcript actually ends on: a session that was\n // rewound has entries that are no longer part of its history.\n replayed = messagesOf(branchTo(entries));\n store = await SessionStore.open(resumePath).catch(() => undefined);\n\n // A crash between the assistant message and its tool results leaves calls\n // with no answer, which the provider rejects on the next request - so the\n // resumed session would fail before the user typed anything. The results\n // are appended as a new entry; nothing already written is touched.\n const orphaned = unresolvedToolCalls(replayed);\n if (orphaned.length > 0) {\n const repair = repairMessage(orphaned);\n replayed = [...replayed, repair];\n if (store) await store.appendMessage(repair);\n repairProblems.push(\n `repaired an interrupted turn: ${orphaned.length} tool ` +\n `${orphaned.length === 1 ? 'call' : 'calls'} ` +\n `(${orphaned.map((call) => call.toolName).join(', ')}) had no recorded result`,\n );\n }\n }\n store ??= await SessionStore.create(options.cwd, {\n model: modelRef,\n version: VERSION,\n }).catch(() => undefined);\n }\n\n const loadedHooks = options.noExtensions\n ? { hooks: [], problems: [] }\n : await loadHooks(options.cwd);\n const hooks = new HookRunner(loadedHooks.hooks, {\n cwd: options.cwd,\n env: process.env,\n sessionId: store?.id ?? 'ephemeral',\n ...(store ? { transcriptPath: store.path } : {}),\n });\n\n // Built after the session id exists, because a SessionStart hook is told which\n // session it is running for, and its context goes into the prompt it starts.\n const started = hooks.has('SessionStart') ? await hooks.sessionStart() : undefined;\n const system = await buildSystemPrompt({\n cwd: options.cwd,\n mode,\n curiosity,\n model: modelRef,\n skills: renderSkillIndex(discovered.skills),\n ...(started?.context.length\n ? { extra: `<session-start>\\n${started.context.join('\\n\\n')}\\n</session-start>` }\n : {}),\n });\n\n // Scoped to this session: the store is shared by every session in the\n // directory, and an unscoped `/undo` reached into batches the user never saw\n // this session make. An ephemeral run has no id and so has no undo history.\n const shadow = options.noUndo\n ? undefined\n : await ShadowGit.open(options.cwd, store?.id).catch(() => undefined);\n\n // The skill tool only exists when there is something to load: a tool whose\n // every argument is invalid is one the model wastes a call discovering.\n const sessionTools: Tool<never>[] = [\n ...(BUILTIN_TOOLS as Tool<never>[]),\n ...(discovered.skills.length ? [skillTool(discovered.skills) as unknown as Tool<never>] : []),\n ...(options.extraTools ?? []),\n ];\n\n const agentOptions: AgentOptions = {\n registry,\n model: resolved,\n ...(reasoningEffort ? { reasoningEffort } : {}),\n cwd: options.cwd,\n system,\n mode,\n rules: settings.rules,\n ...(options.prompt ? { prompt: options.prompt } : {}),\n ...(options.ask ? { ask: options.ask } : {}),\n ...(options.maxSteps !== undefined ? { maxSteps: options.maxSteps } : {}),\n ...(maxCostUsd !== undefined ? { maxCostUsd } : {}),\n ...(options.confirmBudget ? { confirmBudget: options.confirmBudget } : {}),\n ...(sessionTools.length > BUILTIN_TOOLS.length ? { tools: sessionTools } : {}),\n ...(hooks.isEmpty ? {} : { hooks }),\n ...(shadow ? { shadow } : {}),\n ...(store ? { onMessage: (message) => void store?.appendMessage(message) } : {}),\n ...(store\n ? {\n // Appended, never substituted for what it summarises: the transcript\n // on disk stays complete, so a resumed session can replay the real\n // messages rather than a recollection of them.\n onCompaction: (summary: string, historyCut: number) => {\n void store?.append({\n type: 'summary',\n text: summary,\n replaces: store?.messageIds.slice(0, historyCut) ?? [],\n });\n },\n }\n : {}),\n };\n\n const agent = new Agent(agentOptions);\n // Replayed messages are pushed straight onto history rather than re-appended\n // through the store: they are already in the transcript, and writing them back\n // would duplicate every entry on each resume.\n agent.history.push(...replayed);\n\n const undone = new Set<string>();\n\n const branch = async (): Promise<SessionEntry[]> => {\n if (!store) return [];\n await store.flush();\n return branchTo(await readEntries(store.path), store.tailId ?? undefined);\n };\n\n return {\n agent,\n ...(store ? { store } : {}),\n problems: [\n ...settings.problems,\n ...discovered.problems,\n ...loadedHooks.problems,\n ...(started?.problems ?? []),\n ...repairProblems,\n ...(options.problems ?? []),\n ],\n resumed: replayed.length,\n skills: discovered.skills,\n commands: discovered.commands,\n installPrompt: (prompt) => agent.setPrompt(prompt),\n installAsk: (ask) => agent.setAsk(ask),\n branch,\n async rewindTo(entryId) {\n if (!store) return 0;\n await store.flush();\n const entries = await readEntries(store.path);\n const kept = messagesOf(branchTo(entries, entryId));\n store.rewind(entryId);\n agent.replaceHistory(kept);\n return kept.length;\n },\n async fork(entryId) {\n if (!store) return undefined;\n await store.flush();\n const from = entryId ?? store.tailId;\n const entries = await readEntries(store.path);\n const forked = await SessionStore.create(options.cwd, {\n model: `${agent.model.provider.id}/${agent.model.model.id}`,\n version: VERSION,\n ...(from ? { forkedFrom: { sessionId: store.id, entryId: from } } : {}),\n }).catch(() => undefined);\n if (!forked) return undefined;\n\n // The branch is replayed into the new file rather than referenced across\n // it: a transcript that cannot be read on its own is one that breaks as\n // soon as the file it points at is deleted.\n const kept = messagesOf(branchTo(entries, from ?? undefined));\n for (const message of kept) await forked.appendMessage(message);\n await forked.append({\n type: 'configuration',\n model: `${agent.model.provider.id}/${agent.model.model.id}`,\n reasoningEffort: agent.reasoningEffort ?? null,\n });\n agent.replaceHistory(kept);\n store = forked;\n return forked.id;\n },\n async recordConfiguration(configuration) {\n await store?.append({ type: 'configuration', ...configuration });\n },\n async undo() {\n if (!shadow) return undefined;\n // Snapshots are not consumed by restoring them, so the ones already used\n // are tracked here; without this, a second /undo replays the first.\n const snapshots = (await shadow.list()).filter((snapshot) => !undone.has(snapshot.id));\n const last = snapshots.at(-1);\n if (!last) return undefined;\n undone.add(last.id);\n const { restored, wasCreated } = await shadow.restore(last);\n return { label: last.label, restored, wasCreated };\n },\n async dispose() {\n agent.dispose();\n // Best effort: a SessionEnd hook that fails must not stop the session from\n // closing, and nothing can act on its answer by this point anyway.\n if (hooks.has('SessionEnd')) await hooks.sessionEnd().catch(() => undefined);\n await store?.flush();\n await options.onDispose?.();\n },\n };\n}\n\n/**\n * Rebuilds the system prompt from what is currently on disk.\n *\n * Called after a memory is captured or deleted, so a preference takes effect on\n * the next model call rather than the next session.\n */\nexport async function refreshSystemPrompt(\n agent: Agent,\n model: string,\n skills: Skill[] = [],\n): Promise<void> {\n agent.setSystem(\n await buildSystemPrompt({\n cwd: agent.cwd,\n mode: agent.permissionMode,\n model,\n // Rebuilt from the same list rather than re-discovered: a skill added mid\n // session is not loaded until the next one, and a prompt that silently\n // gained an entry would be harder to explain than one that did not.\n skills: renderSkillIndex(skills),\n }),\n );\n}\n\nasync function resolveResumePath(options: CreateSessionOptions): Promise<string | undefined> {\n const { resume } = options;\n if (!resume) return undefined;\n if ('path' in resume) return resume.path;\n\n const latest = await latestSession(options.cwd);\n if (!latest) throw new NoSessionToResumeError(options.cwd);\n return latest.path;\n}\n",
69
+ "export interface ParsedArgs {\n command: string | undefined;\n flags: Record<string, string | boolean>;\n positionals: string[];\n}\n\n/** Minimal, dependency-free flag parsing: --key=value, --key value, --bool, -p. */\nexport function parseArgs(argv: string[]): ParsedArgs {\n const flags: Record<string, string | boolean> = {};\n const positionals: string[] = [];\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i] as string;\n if (arg === '--') {\n positionals.push(...argv.slice(i + 1));\n break;\n }\n if (arg.startsWith('--')) {\n const eq = arg.indexOf('=');\n if (eq !== -1) {\n flags[arg.slice(2, eq)] = arg.slice(eq + 1);\n } else {\n const next = argv[i + 1];\n if (next !== undefined && !next.startsWith('-')) {\n flags[arg.slice(2)] = next;\n i++;\n } else {\n flags[arg.slice(2)] = true;\n }\n }\n } else if (arg.startsWith('-') && arg.length > 1) {\n const next = argv[i + 1];\n if (next !== undefined && !next.startsWith('-')) {\n flags[arg.slice(1)] = next;\n i++;\n } else {\n flags[arg.slice(1)] = true;\n }\n } else {\n positionals.push(arg);\n }\n }\n\n const known = new Set([\n 'auth',\n 'mcp',\n 'extensions',\n 'config',\n 'models',\n 'acp',\n 'doctor',\n 'update',\n 'sessions',\n ]);\n const command =\n positionals[0] !== undefined && known.has(positionals[0]) ? positionals[0] : undefined;\n return { command, flags, positionals: command ? positionals.slice(1) : positionals };\n}\n",
69
70
  "import type * as acp from '@agentclientprotocol/sdk';\nimport type { AgentEvent } from '@earshot/core';\n\nexport function updateFromEvent(\n event: AgentEvent,\n context: { tokens: number; window: number; costUsd: number },\n): acp.SessionUpdate | undefined {\n switch (event.type) {\n case 'text_delta':\n return {\n sessionUpdate: 'agent_message_chunk',\n content: { type: 'text', text: event.text },\n };\n case 'reasoning_delta':\n return {\n sessionUpdate: 'agent_thought_chunk',\n content: { type: 'text', text: event.text },\n };\n case 'tool_start':\n return {\n sessionUpdate: 'tool_call',\n toolCallId: event.call.toolCallId,\n title: event.call.toolName,\n kind: toolKind(event.call.toolName),\n status: 'in_progress',\n rawInput: event.call.input,\n };\n case 'tool_end':\n return {\n sessionUpdate: 'tool_call_update',\n toolCallId: event.toolCallId,\n status: event.result.isError ? 'failed' : 'completed',\n rawOutput: outputValue(event.result.output),\n content: [{ type: 'content', content: contentOf(event.result.output) }],\n };\n case 'usage':\n return {\n sessionUpdate: 'usage_update',\n used: context.tokens,\n size: context.window,\n cost: { amount: context.costUsd, currency: 'USD' },\n };\n default:\n return undefined;\n }\n}\n\nfunction toolKind(name: string): acp.ToolKind {\n if (name === 'read' || name === 'ls') return 'read';\n if (name === 'write' || name === 'edit' || name === 'multi_edit') return 'edit';\n if (name === 'grep' || name === 'glob') return 'search';\n if (name === 'bash' || name === 'bash_output') return 'execute';\n if (name === 'web_fetch') return 'fetch';\n if (name === 'todo' || name === 'declare_scope') return 'think';\n return 'other';\n}\n\nfunction outputValue(output: { type: string; value: unknown }): unknown {\n return output.value;\n}\n\nfunction contentOf(output: { type: string; value: unknown }): acp.ContentBlock {\n if (output.type === 'text') return { type: 'text', text: String(output.value) };\n return { type: 'text', text: JSON.stringify(output.value) ?? String(output.value) };\n}\n",
70
71
  "import { randomUUID } from 'node:crypto';\nimport { isAbsolute } from 'node:path';\nimport { Readable, Writable } from 'node:stream';\nimport * as acp from '@agentclientprotocol/sdk';\nimport {\n type CreatedSession,\n createSession,\n listSessions,\n type PermissionMode,\n type PromptChoice,\n VERSION,\n} from '@earshot/core';\nimport { updateFromEvent } from './events.ts';\n\nexport interface AcpSessionRequest {\n cwd: string;\n resumeSessionId?: string;\n}\n\nexport type AcpSessionFactory = (request: AcpSessionRequest) => Promise<CreatedSession>;\n\nexport interface AcpServerOptions {\n model: string;\n mode?: PermissionMode;\n apiKey?: string;\n sessionFactory?: AcpSessionFactory;\n}\n\ninterface ActiveSession {\n session: CreatedSession;\n controller?: AbortController;\n activeToolCallId?: string;\n}\n\nexport function createAcpApp(options: AcpServerOptions): acp.AgentApp {\n const sessions = new Map<string, ActiveSession>();\n const factory = options.sessionFactory ?? defaultSessionFactory(options);\n\n const app = acp\n .agent({ name: 'earshot' })\n .onRequest(acp.methods.agent.initialize, () => ({\n protocolVersion: acp.PROTOCOL_VERSION,\n agentCapabilities: { loadSession: true, promptCapabilities: { image: true } },\n agentInfo: { name: 'earshot', version: VERSION },\n }))\n .onRequest(acp.methods.agent.session.new, async (ctx) => {\n assertWorkspace(ctx.params.cwd);\n rejectClientMcp(ctx.params.mcpServers);\n const session = await factory({ cwd: ctx.params.cwd });\n const id = session.store?.id ?? randomUUID();\n const active: ActiveSession = { session };\n installClientRequests(active, id, ctx.client);\n sessions.set(id, active);\n return { sessionId: id };\n })\n .onRequest(acp.methods.agent.session.load, async (ctx) => {\n assertWorkspace(ctx.params.cwd);\n rejectClientMcp(ctx.params.mcpServers);\n await sessions.get(ctx.params.sessionId)?.session.dispose();\n const session = await factory({\n cwd: ctx.params.cwd,\n resumeSessionId: ctx.params.sessionId,\n });\n const active: ActiveSession = { session };\n installClientRequests(active, ctx.params.sessionId, ctx.client);\n sessions.set(ctx.params.sessionId, active);\n await replayHistory(ctx.params.sessionId, session, ctx.client);\n return {};\n })\n .onRequest(acp.methods.agent.session.prompt, async (ctx) => {\n const active = sessions.get(ctx.params.sessionId);\n if (!active) throw new Error(`unknown ACP session \"${ctx.params.sessionId}\"`);\n\n active.controller?.abort();\n const controller = new AbortController();\n active.controller = controller;\n let stopReason: acp.StopReason = 'end_turn';\n let failure: Error | undefined;\n\n try {\n for await (const event of active.session.agent.runTurn(\n promptText(ctx.params.prompt),\n controller.signal,\n )) {\n if (event.type === 'tool_start') active.activeToolCallId = event.call.toolCallId;\n if (event.type === 'turn_end') stopReason = stopReasonOf(event.reason);\n if (event.type === 'error') failure = new Error(event.error.message);\n const update = updateFromEvent(event, {\n tokens: active.session.agent.contextUse.tokens,\n window: active.session.agent.contextUse.window,\n costUsd: active.session.agent.costUsd,\n });\n if (update) {\n await ctx.client.notify(acp.methods.client.session.update, {\n sessionId: ctx.params.sessionId,\n update,\n });\n }\n }\n } finally {\n if (active.controller === controller) delete active.controller;\n }\n if (failure) throw failure;\n return { stopReason: controller.signal.aborted ? 'cancelled' : stopReason };\n })\n .onNotification(acp.methods.agent.session.cancel, (ctx) => {\n sessions.get(ctx.params.sessionId)?.controller?.abort();\n });\n\n app.onConnect((connection) => {\n void connection.closed.finally(async () => {\n await Promise.all([...sessions.values()].map(({ session }) => session.dispose()));\n sessions.clear();\n });\n });\n return app;\n}\n\n/** Serves one ACP connection over the process-style NDJSON transport. */\nexport async function runAcpServer(\n options: AcpServerOptions,\n input: NodeJS.ReadableStream = process.stdin,\n output: NodeJS.WritableStream = process.stdout,\n): Promise<void> {\n const stream = acp.ndJsonStream(\n Writable.toWeb(output as NodeJS.WritableStream & import('node:stream').Writable),\n Readable.toWeb(input as NodeJS.ReadableStream & import('node:stream').Readable),\n );\n const connection = createAcpApp(options).connect(stream);\n await connection.closed;\n}\n\nfunction defaultSessionFactory(options: AcpServerOptions): AcpSessionFactory {\n return async ({ cwd, resumeSessionId }) => {\n let resume: { path: string } | undefined;\n if (resumeSessionId) {\n const found = (await listSessions(cwd)).find((session) => session.id === resumeSessionId);\n if (!found) throw new Error(`no session \"${resumeSessionId}\" for ${cwd}`);\n resume = { path: found.path };\n }\n return createSession({\n cwd,\n model: options.model,\n ...(options.mode ? { mode: options.mode } : {}),\n ...(options.apiKey ? { apiKey: options.apiKey } : {}),\n ...(resume ? { resume } : {}),\n });\n };\n}\n\nfunction installClientRequests(\n active: ActiveSession,\n sessionId: string,\n client: acp.AgentContext,\n): void {\n active.session.installPrompt(async (request, reason) => {\n const response = await client.request(\n acp.methods.client.session.requestPermission,\n {\n sessionId,\n toolCall: {\n toolCallId: active.activeToolCallId ?? `permission-${randomUUID()}`,\n title: request.title,\n status: 'pending',\n rawInput: {\n tool: request.tool,\n target: request.target,\n reason,\n detail: request.detail,\n },\n },\n options: [\n { optionId: 'allow_once', name: 'Allow once', kind: 'allow_once' },\n { optionId: 'allow_always', name: 'Always allow this action', kind: 'allow_always' },\n { optionId: 'reject_once', name: 'Reject', kind: 'reject_once' },\n ],\n },\n active.controller ? { cancellationSignal: active.controller.signal } : {},\n );\n if (response.outcome.outcome === 'cancelled') return { kind: 'deny', message: 'cancelled' };\n return promptChoice(response.outcome.optionId);\n });\n\n active.session.installAsk(async (question, options) => {\n const property = {\n type: 'string',\n title: question,\n ...(options?.length ? { enum: options } : {}),\n } as const;\n const response = await client.request(\n acp.methods.client.elicitation.create,\n {\n mode: 'form',\n sessionId,\n message: question,\n requestedSchema: {\n type: 'object',\n properties: { answer: property },\n required: ['answer'],\n },\n },\n active.controller ? { cancellationSignal: active.controller.signal } : {},\n );\n if (response.action !== 'accept') return 'The user declined to answer.';\n const content = response.content as Record<string, unknown> | null | undefined;\n return String(content?.answer ?? '');\n });\n}\n\nfunction promptChoice(optionId: string): PromptChoice {\n if (optionId === 'allow_once') return { kind: 'allow-once' };\n if (optionId === 'allow_always') return { kind: 'allow-always', scope: 'session' };\n return { kind: 'deny' };\n}\n\nfunction promptText(blocks: acp.ContentBlock[]): import('@earshot/core').UserPromptPart[] {\n return blocks.map((block) => {\n if (block.type === 'text') return { type: 'text' as const, text: block.text };\n if (block.type === 'image') {\n return { type: 'image' as const, data: block.data, mediaType: block.mimeType };\n }\n if (block.type === 'resource_link') {\n return { type: 'text' as const, text: `[${block.name}](${block.uri})` };\n }\n throw new Error(`ACP prompt content \"${block.type}\" is not supported yet`);\n });\n}\n\nasync function replayHistory(\n sessionId: string,\n session: CreatedSession,\n client: acp.AgentContext,\n): Promise<void> {\n for (const message of session.agent.history) {\n if (message.role !== 'user' && message.role !== 'assistant') continue;\n for (const part of message.content) {\n if (part.type !== 'text') continue;\n await client.notify(acp.methods.client.session.update, {\n sessionId,\n update: {\n sessionUpdate: message.role === 'user' ? 'user_message_chunk' : 'agent_message_chunk',\n content: { type: 'text', text: part.text },\n },\n });\n }\n }\n}\n\nfunction stopReasonOf(\n reason: 'stop' | 'aborted' | 'max_steps' | 'error' | 'budget',\n): acp.StopReason {\n if (reason === 'aborted') return 'cancelled';\n if (reason === 'max_steps') return 'max_turn_requests';\n // A budget stop is a configured limit, not the model declining: `refusal`\n // would tell the editor the wrong thing about who stopped and why.\n if (reason === 'budget') return 'max_turn_requests';\n return 'end_turn';\n}\n\nfunction assertWorkspace(cwd: string): void {\n if (!isAbsolute(cwd)) throw new Error(`ACP session cwd must be absolute: ${cwd}`);\n}\n\nfunction rejectClientMcp(servers: acp.McpServer[]): void {\n if (servers.length > 0) {\n // A RequestError rather than a plain Error: the JSON-RPC layer reports an\n // unrecognised throw as \"Internal error\" with no message, and a client told\n // only that would have no way to learn its servers were not taken - which is\n // the silent-ignore this rejection exists to avoid.\n throw acp.RequestError.invalidParams(\n undefined,\n 'client-provided MCP servers are not supported; configure them in earshot',\n );\n }\n}\n",
71
72
  "import { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { Tool } from '@earshot/core';\nimport { LOCAL_SETTINGS, McpManager } from '@earshot/mcp';\nimport { EXTENSION_TRUST_NOTE, loadExtensions } from './modules.ts';\n\nexport * from './modules.ts';\n\n/**\n * Above this many MCP tools, their schemas stop being offered in every request\n * and are found with `tool_search` instead. Under it, listing them outright is\n * cheaper than making the model search: one round trip beats two.\n */\nexport const TOOL_SEARCH_THRESHOLD = 25;\n\nexport interface Extensions {\n tools: Tool<never>[];\n /** Lines worth showing before the first turn: a server that failed, a bad config. */\n problems: string[];\n /** One line per configured server, shown on request rather than at every start. */\n summary: string[];\n close(): Promise<void>;\n}\n\n/**\n * Everything outside core that contributes tools to a session.\n *\n * Assembled in the CLI rather than in core: core must not know that MCP exists,\n * or the dependency arrow between the two packages reverses. A failure here is\n * reported and the session still starts - a broken server config should cost the\n * user that server, not their agent.\n */\nexport async function startExtensions(cwd: string): Promise<Extensions> {\n const local = await loadLocalExtensions(cwd);\n const manager = await McpManager.start({ cwd }).catch((error: Error) => {\n return { error } as const;\n });\n\n if ('error' in manager) {\n return {\n tools: local.tools,\n problems: [...local.problems, `mcp servers could not be started: ${manager.error.message}`],\n summary: local.summary,\n close: async () => {},\n };\n }\n\n const failures = manager.reports\n .filter((report) => report.status !== 'ready')\n .map((report) => `mcp server \"${report.name}\" ${report.detail ?? 'did not start'}`);\n\n const mcpTools = manager.tools();\n const deferred = mcpTools.length > TOOL_SEARCH_THRESHOLD;\n\n return {\n tools: [\n ...local.tools,\n ...(deferred ? mcpTools.map((tool) => ({ ...tool, deferred: true })) : mcpTools),\n ],\n problems: [...local.problems, ...manager.problems, ...failures],\n summary: [\n ...local.summary,\n ...manager.summary(),\n ...(deferred\n ? [`${mcpTools.length} mcp tools: found with tool_search rather than listed in full`]\n : []),\n ],\n close: () => manager.close(),\n };\n}\n\n/**\n * In-process extensions, kept separate from MCP tools: they are never deferred\n * behind `tool_search`. A user who wrote a tool into their own config directory\n * expects the model to see it, and there are never a hundred of them.\n */\nasync function loadLocalExtensions(\n cwd: string,\n): Promise<{ tools: Tool<never>[]; problems: string[]; summary: string[] }> {\n const { tools, reports } = await loadExtensions(cwd, await trustedExtensions(cwd));\n return {\n tools,\n problems: reports\n .filter((report) => report.status === 'failed')\n .map((report) => `extension \"${report.name}\" failed to load: ${report.detail ?? 'unknown'}`),\n summary: reports.map((report) => {\n if (report.status === 'untrusted') return `${report.name}: ${EXTENSION_TRUST_NOTE}`;\n if (report.status === 'failed') return `${report.name}: ${report.detail ?? 'failed'}`;\n return `${report.name}: ${report.toolCount} tool${report.toolCount === 1 ? '' : 's'}`;\n }),\n };\n}\n\nexport async function trustedExtensions(cwd: string): Promise<Set<string>> {\n const raw = await readFile(join(cwd, LOCAL_SETTINGS), 'utf8').catch(() => '{}');\n try {\n const parsed = JSON.parse(raw) as { extensionTrust?: unknown };\n return new Set(\n Array.isArray(parsed.extensionTrust)\n ? parsed.extensionTrust.filter((name): name is string => typeof name === 'string')\n : [],\n );\n } catch {\n return new Set();\n }\n}\n",
@@ -74,37 +75,41 @@
74
75
  "import { createHash } from 'node:crypto';\nimport { defineTool, type Tool, ToolInputError, text } from '@earshot/core';\nimport type { McpClient, McpToolDescriptor } from './client.ts';\n\n/**\n * Providers reject a tool name longer than this, so a server with long names\n * would otherwise break every request rather than just its own tools.\n */\nexport const MAX_TOOL_NAME = 64;\n\n/** The separator between a server and its tool. Server names may not contain it. */\nexport const NAMESPACE = '__';\n\n/**\n * `server__tool`, shortened deterministically when the pair is too long for a\n * provider to accept. The hash keeps two long names on the same server distinct;\n * being deterministic keeps a permission rule the user saved yesterday matching\n * the same tool today.\n */\nexport function namespacedName(server: string, tool: string): string {\n const full = `${server}${NAMESPACE}${tool}`;\n if (full.length <= MAX_TOOL_NAME) return full;\n const digest = createHash('sha256').update(full).digest('hex').slice(0, 6);\n const room = MAX_TOOL_NAME - server.length - NAMESPACE.length - digest.length - 1;\n return `${server}${NAMESPACE}${tool.slice(0, Math.max(1, room))}_${digest}`;\n}\n\n/**\n * Wraps one server-supplied tool as an earshot tool.\n *\n * Two properties are not negotiable. It is never `readOnly`, whatever the server\n * says about itself: `readOnlyHint` is an assertion by the same party that wrote\n * the tool, and believing it would mean a server could run in parallel and\n * without a prompt by claiming to be harmless. And it declares a\n * `permission()`, so a server-supplied tool goes through exactly the gate a\n * built-in does - the gate that would otherwise be decorative the moment anyone\n * configured a server.\n */\nexport function mcpTool(\n client: McpClient,\n descriptor: McpToolDescriptor,\n name = namespacedName(client.name, descriptor.name),\n): Tool<Record<string, unknown>> {\n return defineTool<Record<string, unknown>>({\n name,\n description:\n `${descriptor.description || descriptor.name} ` +\n `(provided by the \"${client.name}\" MCP server)`.trim(),\n readOnly: false,\n inputSchema: schemaOf(descriptor),\n parse: (input) => {\n if (input === undefined || input === null) return {};\n if (typeof input !== 'object' || Array.isArray(input)) {\n throw new ToolInputError('expected an object of arguments');\n }\n return input as Record<string, unknown>;\n },\n // The rule name is `Mcp` for every server, so \"always allow\" persists as\n // `Mcp(github__create_issue)` - one tool, not one server. A server that adds\n // a tool after the user approved a different one is not covered by it.\n permission: (input) => ({\n tool: 'Mcp',\n target: name,\n title: `${descriptor.name} on the \"${client.name}\" MCP server`,\n // The arguments verbatim, because that is the thing being judged. A\n // summary here is where a create_issue that posts your source code hides.\n detail: `${name}(${JSON.stringify(input, null, 2)})`,\n }),\n async execute(input, ctx) {\n const result = await client.callTool(descriptor.name, input, ctx.signal);\n return {\n output: text(result.text || '(the server returned no content)'),\n ...(result.isError ? { isError: true } : {}),\n title: name,\n };\n },\n });\n}\n\n/**\n * The server's own schema, passed through. It describes arguments the server\n * will validate itself, so rewriting it here would only add a second opinion -\n * but it must at least be an object schema, or providers reject the request.\n */\nfunction schemaOf(descriptor: McpToolDescriptor): Record<string, unknown> {\n const schema = descriptor.inputSchema;\n if (typeof schema !== 'object' || schema === null || Array.isArray(schema)) {\n return { type: 'object', properties: {} };\n }\n if (schema.type !== 'object') return { ...schema, type: 'object' };\n return schema;\n}\n",
75
76
  "import type { Tool } from '@earshot/core';\nimport { type ConnectOptions, connectServer, type McpClient } from './client.ts';\nimport { loadMcpConfig, type ServerConfig, TRUST_NOTE } from './config.ts';\nimport { mcpTool, namespacedName } from './tool.ts';\n\nexport type ServerStatus = 'ready' | 'failed' | 'untrusted';\n\nexport interface ServerReport {\n name: string;\n scope: ServerConfig['scope'];\n status: ServerStatus;\n toolCount: number;\n detail?: string;\n}\n\nexport interface ManagerOptions {\n cwd: string;\n env?: NodeJS.ProcessEnv;\n connectTimeoutMs?: number;\n callTimeoutMs?: number;\n /** Substituted in tests, so no test spawns a process or opens a socket. */\n connect?: (config: ServerConfig, options: ConnectOptions) => Promise<McpClient>;\n}\n\n/**\n * Every configured MCP server, and the tools they contribute.\n *\n * One server failing is the normal case, not an exception: a missing binary, a\n * bad token, a server that hangs on start. Each is reported and skipped, and the\n * session runs with the tools it does have - a config typo should not be the\n * difference between having a coding agent and not having one.\n */\nexport class McpManager {\n private constructor(\n private readonly clients: McpClient[],\n private readonly registered: Tool<never>[],\n readonly reports: ServerReport[],\n readonly problems: string[],\n ) {}\n\n static async start(options: ManagerOptions): Promise<McpManager> {\n const { servers, problems } = await loadMcpConfig(options.cwd);\n const connect = options.connect ?? connectServer;\n const connectOptions: ConnectOptions = {\n cwd: options.cwd,\n env: options.env ?? process.env,\n ...(options.connectTimeoutMs !== undefined\n ? { connectTimeoutMs: options.connectTimeoutMs }\n : {}),\n ...(options.callTimeoutMs !== undefined ? { callTimeoutMs: options.callTimeoutMs } : {}),\n };\n\n const clients: McpClient[] = [];\n const tools: Tool<never>[] = [];\n const reports: ServerReport[] = [];\n const taken = new Set<string>();\n\n // Started concurrently: a dozen servers each taking a second to hand shake\n // is a dozen seconds of staring at nothing when it could be one.\n const started = await Promise.all(\n servers.map(async (config) => {\n if (!config.enabled) return { config, error: TRUST_NOTE };\n try {\n const client = await connect(config, connectOptions);\n return { config, client };\n } catch (error) {\n return { config, error: (error as Error).message };\n }\n }),\n );\n\n for (const outcome of started) {\n const { config } = outcome;\n if (!('client' in outcome) || !outcome.client) {\n reports.push({\n name: config.name,\n scope: config.scope,\n status: config.enabled ? 'failed' : 'untrusted',\n toolCount: 0,\n ...(outcome.error ? { detail: outcome.error } : {}),\n });\n continue;\n }\n\n const client = outcome.client;\n clients.push(client);\n let descriptors: Awaited<ReturnType<McpClient['listTools']>>;\n try {\n descriptors = await client.listTools();\n } catch (error) {\n await client.close().catch(() => undefined);\n reports.push({\n name: config.name,\n scope: config.scope,\n status: 'failed',\n toolCount: 0,\n detail: `listing its tools failed: ${(error as Error).message}`,\n });\n continue;\n }\n\n let added = 0;\n for (const descriptor of descriptors) {\n const name = namespacedName(config.name, descriptor.name);\n // Two tools can only collide here by a server declaring the same name\n // twice, or by a hashed shortening meeting itself. Skipped rather than\n // thrown: one malformed tool must not cost the session the other forty.\n if (taken.has(name)) continue;\n taken.add(name);\n tools.push(mcpTool(client, descriptor, name) as unknown as Tool<never>);\n added++;\n }\n reports.push({ name: config.name, scope: config.scope, status: 'ready', toolCount: added });\n }\n\n return new McpManager(clients, tools, reports, problems);\n }\n\n tools(): Tool<never>[] {\n return [...this.registered];\n }\n\n /** One line per server, for the CLI and for the startup notice in the TUI. */\n summary(): string[] {\n return this.reports.map((report) => {\n if (report.status === 'ready') {\n return `${report.name}: ${report.toolCount} tool${report.toolCount === 1 ? '' : 's'}`;\n }\n if (report.status === 'untrusted') return `${report.name}: ${TRUST_NOTE}`;\n return `${report.name}: ${report.detail ?? 'failed to start'}`;\n });\n }\n\n async close(): Promise<void> {\n await Promise.all(this.clients.map((client) => client.close().catch(() => undefined)));\n }\n}\n",
76
77
  "import { readdir } from 'node:fs/promises';\nimport { basename, extname, join, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { defineTool, type PermissionRequest, type Tool, type ToolContext } from '@earshot/core';\nimport { LOCAL_SETTINGS, namespacedName } from '@earshot/mcp';\nimport { configDir } from '@earshot/providers';\n\n/** Where extensions live, under the project and under the config directory. */\nexport const PROJECT_EXTENSIONS = join('.earshot', 'extensions');\n\nconst LOADABLE = new Set(['.ts', '.mts', '.js', '.mjs']);\nconst NAME = /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/;\n\nexport const EXTENSION_TRUST_NOTE =\n 'checked in under this project and not loaded. Run `earshot extensions trust <name>` ' +\n 'to allow it - an extension runs inside earshot, with everything earshot can reach, ' +\n 'from the moment it is imported.';\n\nexport type ExtensionStatus = 'ready' | 'failed' | 'untrusted';\n\nexport interface ExtensionReport {\n name: string;\n scope: 'global' | 'project';\n status: ExtensionStatus;\n toolCount: number;\n detail?: string;\n}\n\nexport interface LoadedExtensions {\n tools: Tool<never>[];\n reports: ExtensionReport[];\n}\n\n/**\n * The shape an extension module default-exports.\n *\n * Deliberately importable from nowhere: earshot ships as a bundled binary, not\n * as a library, so requiring `import { defineExtension } from 'earshot'` would\n * mean an extension only works when earshot happens to be resolvable from the\n * project. The shape is structural and validated on load instead.\n */\nexport interface ExtensionModule {\n name?: string;\n tools?: ExtensionTool[];\n}\n\nexport interface ExtensionTool {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n readOnly?: boolean;\n permission?(input: Record<string, unknown>, ctx: ToolContext): PermissionRequest;\n execute(input: Record<string, unknown>, ctx: ToolContext): Promise<unknown>;\n}\n\n/**\n * Loads every extension module in scope.\n *\n * An extension is not sandboxed and cannot be: it is user TypeScript running in\n * earshot's own process, which is the whole point of it being in-process rather\n * than an MCP server. So the boundary is not what it may do once loaded, but\n * whether it is loaded at all - a module checked into a repository the user\n * cloned stays inert until `earshot extensions trust` names it, exactly as a\n * project-defined stdio MCP server does.\n */\nexport async function loadExtensions(cwd: string, trusted: Set<string>): Promise<LoadedExtensions> {\n const tools: Tool<never>[] = [];\n const reports: ExtensionReport[] = [];\n const taken = new Set<string>();\n\n const sources = [\n { scope: 'global' as const, dir: join(configDir(), 'extensions') },\n { scope: 'project' as const, dir: resolve(cwd, PROJECT_EXTENSIONS) },\n ];\n\n for (const { scope, dir } of sources) {\n for (const file of await modulesIn(dir)) {\n const name = basename(file, extname(file));\n if (!NAME.test(name) || name.includes('__')) {\n reports.push({ name, scope, status: 'failed', toolCount: 0, detail: 'unusable name' });\n continue;\n }\n // Global extensions are the user's own files in their own config\n // directory; a project one arrived with the repository.\n if (scope === 'project' && !trusted.has(name)) {\n reports.push({\n name,\n scope,\n status: 'untrusted',\n toolCount: 0,\n detail: EXTENSION_TRUST_NOTE,\n });\n continue;\n }\n\n let module: ExtensionModule;\n try {\n module = await importExtension(join(dir, file));\n } catch (error) {\n reports.push({ name, scope, status: 'failed', toolCount: 0, detail: describe(error) });\n continue;\n }\n\n const declared = module.tools ?? [];\n let added = 0;\n let problem: string | undefined;\n for (const tool of declared) {\n try {\n const wrapped = extensionTool(name, tool, taken);\n if (!wrapped) continue;\n tools.push(wrapped);\n added++;\n } catch (error) {\n problem = describe(error);\n break;\n }\n }\n\n reports.push({\n name,\n scope,\n status: problem ? 'failed' : 'ready',\n toolCount: added,\n ...(problem ? { detail: problem } : {}),\n });\n }\n }\n\n return { tools, reports };\n}\n\n/**\n * One extension-supplied tool, namespaced and put behind the same gate a\n * built-in goes through.\n *\n * Its `readOnly` claim is honoured, unlike an MCP server's: a server is a\n * different party asserting something about itself, whereas an extension is\n * code the user trusted into their own process, where a false claim here is the\n * least of what it could have done at import time.\n */\nfunction extensionTool(\n extension: string,\n tool: ExtensionTool,\n taken: Set<string>,\n): Tool<never> | undefined {\n if (typeof tool?.name !== 'string' || !NAME.test(tool.name)) {\n throw new Error(`declared a tool with an unusable name`);\n }\n if (typeof tool.execute !== 'function') {\n throw new Error(`tool \"${tool.name}\" has no execute()`);\n }\n\n const name = namespacedName(extension, tool.name);\n if (taken.has(name)) return undefined;\n taken.add(name);\n\n const readOnly = tool.readOnly === true;\n return defineTool<Record<string, unknown>>({\n name,\n description: `${tool.description || tool.name} (from the \"${extension}\" extension)`,\n inputSchema: objectSchema(tool.inputSchema),\n readOnly,\n parse: (input) => (typeof input === 'object' && input !== null ? { ...input } : {}),\n ...(readOnly\n ? {}\n : {\n permission: (input, ctx) => ({\n ...(tool.permission?.(input, ctx) ?? {\n tool: 'Extension',\n target: name,\n title: `${tool.name} from the \"${extension}\" extension`,\n detail: `${name}(${JSON.stringify(input, null, 2)})`,\n }),\n // The rule name and target are earshot's to decide: an extension\n // choosing its own would let it match a rule the user wrote for\n // something else.\n tool: 'Extension',\n target: name,\n }),\n }),\n async execute(input, ctx) {\n const result = (await tool.execute(input, ctx)) as\n | { output?: unknown; isError?: boolean; title?: string }\n | string\n | undefined;\n if (typeof result === 'string') {\n return { output: { type: 'text', value: result }, title: name };\n }\n const output = result?.output;\n return {\n output:\n typeof output === 'object' && output !== null && 'type' in output\n ? (output as { type: 'text'; value: string })\n : { type: 'text', value: String(output ?? '') },\n ...(result?.isError ? { isError: true } : {}),\n title: typeof result?.title === 'string' ? result.title : name,\n };\n },\n }) as unknown as Tool<never>;\n}\n\nfunction objectSchema(schema: unknown): Record<string, unknown> {\n if (typeof schema !== 'object' || schema === null || Array.isArray(schema)) {\n return { type: 'object', properties: {} };\n }\n return { ...(schema as Record<string, unknown>), type: 'object' };\n}\n\nasync function modulesIn(dir: string): Promise<string[]> {\n const entries = await readdir(dir).catch(() => []);\n return entries.filter((entry) => LOADABLE.has(extname(entry))).sort();\n}\n\nasync function importExtension(path: string): Promise<ExtensionModule> {\n const imported = (await import(pathToFileURL(path).href)) as { default?: unknown };\n const module = imported.default;\n if (typeof module !== 'object' || module === null || Array.isArray(module)) {\n throw new Error('does not default-export an object');\n }\n const tools = (module as ExtensionModule).tools;\n if (tools !== undefined && !Array.isArray(tools)) throw new Error('\"tools\" is not an array');\n return module as ExtensionModule;\n}\n\n/**\n * Node cannot import TypeScript on every supported version, and the failure it\n * gives is about file extensions rather than about the thing the user did. Said\n * plainly here rather than left for them to decode.\n */\nfunction describe(error: unknown): string {\n const message = (error as Error)?.message ?? String(error);\n if (/Unknown file extension|Cannot find module .*\\.ts/.test(message)) {\n return `this runtime cannot import TypeScript directly: ${message}`;\n }\n return message;\n}\n\nexport { LOCAL_SETTINGS };\n",
77
- "import { type AcpSessionFactory, runAcpServer } from '@earshot/acp';\nimport { createSession, isPermissionMode, listSessions, type PermissionMode } from '@earshot/core';\nimport type { ParsedArgs } from '../args.ts';\nimport { startExtensions } from '../extensions/index.ts';\n\nconst DEFAULT_MODEL = 'anthropic/claude-opus-5';\n\nexport async function acpCommand(args: ParsedArgs): Promise<number> {\n const requested = args.flags['permission-mode'];\n let mode: PermissionMode | undefined;\n if (typeof requested === 'string') {\n if (!isPermissionMode(requested)) {\n process.stderr.write(`\"${requested}\" is not a permission mode\\n`);\n return 2;\n }\n mode = requested;\n }\n\n const model = typeof args.flags.model === 'string' ? args.flags.model : DEFAULT_MODEL;\n const apiKey = typeof args.flags['api-key'] === 'string' ? args.flags['api-key'] : undefined;\n const sessionFactory: AcpSessionFactory = async ({ cwd, resumeSessionId }) => {\n const extensions = await startExtensions(cwd);\n let resume: { path: string } | undefined;\n if (resumeSessionId) {\n const found = (await listSessions(cwd)).find((session) => session.id === resumeSessionId);\n if (!found) {\n await extensions.close();\n throw new Error(`no session \"${resumeSessionId}\" for ${cwd}`);\n }\n resume = { path: found.path };\n }\n try {\n return await createSession({\n cwd,\n model,\n extraTools: extensions.tools,\n problems: extensions.problems,\n onDispose: () => extensions.close(),\n ...(mode ? { mode } : {}),\n ...(apiKey ? { apiKey } : {}),\n ...(resume ? { resume } : {}),\n });\n } catch (error) {\n await extensions.close();\n throw error;\n }\n };\n\n await runAcpServer({ model, sessionFactory });\n return 0;\n}\n",
78
+ "import { type AcpSessionFactory, runAcpServer } from '@earshot/acp';\nimport {\n createSession,\n DEFAULT_MODEL,\n isPermissionMode,\n listSessions,\n type PermissionMode,\n} from '@earshot/core';\nimport type { ParsedArgs } from '../args.ts';\nimport { startExtensions } from '../extensions/index.ts';\n\nexport async function acpCommand(args: ParsedArgs): Promise<number> {\n const requested = args.flags['permission-mode'];\n let mode: PermissionMode | undefined;\n if (typeof requested === 'string') {\n if (!isPermissionMode(requested)) {\n process.stderr.write(`\"${requested}\" is not a permission mode\\n`);\n return 2;\n }\n mode = requested;\n }\n\n const requestedModel = typeof args.flags.model === 'string' ? args.flags.model : undefined;\n const model = requestedModel ?? DEFAULT_MODEL;\n const apiKey = typeof args.flags['api-key'] === 'string' ? args.flags['api-key'] : undefined;\n const sessionFactory: AcpSessionFactory = async ({ cwd, resumeSessionId }) => {\n const extensions = await startExtensions(cwd);\n let resume: { path: string } | undefined;\n if (resumeSessionId) {\n const found = (await listSessions(cwd)).find((session) => session.id === resumeSessionId);\n if (!found) {\n await extensions.close();\n throw new Error(`no session \"${resumeSessionId}\" for ${cwd}`);\n }\n resume = { path: found.path };\n }\n try {\n return await createSession({\n cwd,\n ...(requestedModel ? { model: requestedModel } : {}),\n extraTools: extensions.tools,\n problems: extensions.problems,\n onDispose: () => extensions.close(),\n ...(mode ? { mode } : {}),\n ...(apiKey ? { apiKey } : {}),\n ...(resume ? { resume } : {}),\n });\n } catch (error) {\n await extensions.close();\n throw error;\n }\n };\n\n await runAcpServer({ model, sessionFactory });\n return 0;\n}\n",
78
79
  "import {\n AuthStore,\n buildRegistry,\n loginToOpenRouter,\n OAuthError,\n resolveCredentials,\n} from '@earshot/providers';\nimport type { ParsedArgs } from '../args.ts';\n\n/**\n * `earshot auth login|list|logout`.\n *\n * `login` prompts for a key by default; a provider with a published OAuth flow\n * for third-party apps can be signed into instead. Nothing here uses a\n * consumer subscription's credentials outside the client it was issued for -\n * see docs/providers.md, \"Deliberately not supported\".\n */\nexport async function authCommand(args: ParsedArgs): Promise<number> {\n const [action = 'list', providerId] = args.positionals;\n\n if (action === 'list') return list();\n if (action === 'login') return login(providerId, args);\n if (action === 'logout') return logout(providerId);\n\n process.stderr.write(`earshot auth: unknown action \"${action}\"\\n`);\n return 2;\n}\n\nasync function list(): Promise<number> {\n const registry = buildRegistry();\n const rows: string[] = [];\n\n for (const provider of registry.list()) {\n const credentials = await resolveCredentials(provider).catch(() => undefined);\n const how =\n credentials === undefined\n ? 'not configured'\n : credentials.type === 'ambient'\n ? 'ambient credentials'\n : credentials.type === 'oauth'\n ? 'signed in'\n : 'api key';\n rows.push(`${provider.id.padEnd(14)} ${how}`);\n }\n\n process.stdout.write(`${rows.join('\\n')}\\n`);\n return 0;\n}\n\nasync function login(providerId: string | undefined, args: ParsedArgs): Promise<number> {\n if (!providerId) {\n process.stderr.write('usage: earshot auth login <provider> [--api-key <key>]\\n');\n return 2;\n }\n\n const store = new AuthStore();\n const key = args.flags['api-key'];\n if (typeof key === 'string' && key !== '') {\n await store.set(providerId, { type: 'api-key', apiKey: key });\n process.stdout.write(`stored an api key for ${providerId}\\n`);\n return 0;\n }\n\n if (providerId !== 'openrouter') {\n process.stderr.write(\n `earshot has no sign-in flow for \"${providerId}\". Pass --api-key, or set its ` +\n 'environment variable - `earshot models` names it.\\n',\n );\n return 2;\n }\n\n try {\n const credentials = await loginToOpenRouter({\n onUrl: (url) => {\n // Printed as well as opened: over SSH or in a container there is no\n // browser to open, and a flow that only opens one leaves nothing to do.\n process.stdout.write(`opening your browser to sign in to OpenRouter.\\n\\n${url}\\n\\n`);\n },\n });\n await store.set(providerId, credentials);\n process.stdout.write('signed in to OpenRouter.\\n');\n return 0;\n } catch (error) {\n if (error instanceof OAuthError) {\n process.stderr.write(`${error.message}\\n`);\n return 3;\n }\n process.stderr.write(`sign-in failed: ${(error as Error).message}\\n`);\n return 3;\n }\n}\n\nasync function logout(providerId: string | undefined): Promise<number> {\n if (!providerId) {\n process.stderr.write('usage: earshot auth logout <provider>\\n');\n return 2;\n }\n await new AuthStore().remove(providerId);\n // Says what it did not do: a key in the environment outlives this, and a user\n // who thinks they logged out and did not is worse off than one who knows.\n process.stdout.write(\n `removed stored credentials for ${providerId}. An environment variable, if you have ` +\n 'one set, still applies.\\n',\n );\n return 0;\n}\n",
79
80
  "import { spawnSync } from 'node:child_process';\nimport { access, constants, readFile, stat } from 'node:fs/promises';\nimport { homedir, platform, release } from 'node:os';\nimport { dirname, join } from 'node:path';\nimport { resolveShell, ShellNotFoundError, VERSION } from '@earshot/core';\nimport type { ParsedArgs } from '../args.ts';\n\nexport type DoctorStatus = 'pass' | 'warn' | 'fail';\n\nexport interface DoctorCheck {\n name: string;\n status: DoctorStatus;\n detail: string;\n}\n\ninterface DoctorOptions {\n env?: NodeJS.ProcessEnv;\n cwd?: string;\n platform?: NodeJS.Platform;\n nodeVersion?: string;\n run?: (command: string, args: string[]) => { status: number | null; stdout: string };\n}\n\nconst runCommand = (command: string, args: string[]) => {\n const result = spawnSync(command, args, { encoding: 'utf8', windowsHide: true });\n return { status: result.status, stdout: result.stdout.trim() };\n};\n\nasync function writableLocation(path: string): Promise<boolean> {\n let candidate = path;\n while (true) {\n try {\n const info = await stat(candidate);\n if (!info.isDirectory()) candidate = dirname(candidate);\n await access(candidate, constants.W_OK);\n return true;\n } catch {\n const parent = dirname(candidate);\n if (parent === candidate) return false;\n candidate = parent;\n }\n }\n}\n\nasync function jsonCheck(name: string, path: string): Promise<DoctorCheck | undefined> {\n const raw = await readFile(path, 'utf8').catch(() => undefined);\n if (raw === undefined) return undefined;\n try {\n JSON.parse(raw);\n return { name, status: 'pass', detail: path };\n } catch (error) {\n return { name, status: 'fail', detail: `${path}: ${(error as Error).message}` };\n }\n}\n\nexport async function runDoctor(options: DoctorOptions = {}): Promise<DoctorCheck[]> {\n const env = options.env ?? process.env;\n const cwd = options.cwd ?? process.cwd();\n const hostPlatform = options.platform ?? platform();\n const nodeVersion = options.nodeVersion ?? process.versions.node;\n const run = options.run ?? runCommand;\n const configPath =\n env.EARSHOT_CONFIG_DIR ??\n (hostPlatform === 'win32'\n ? join(env.APPDATA ?? join(homedir(), 'AppData', 'Roaming'), 'earshot')\n : join(env.XDG_CONFIG_HOME ?? join(homedir(), '.config'), 'earshot'));\n const dataPath =\n env.EARSHOT_DATA_DIR ??\n (hostPlatform === 'win32'\n ? join(env.LOCALAPPDATA ?? join(homedir(), 'AppData', 'Local'), 'earshot')\n : join(env.XDG_DATA_HOME ?? join(homedir(), '.local', 'share'), 'earshot'));\n const authPath = join(configPath, 'auth.json');\n const checks: DoctorCheck[] = [];\n\n const nodeMajor = Number.parseInt(nodeVersion.split('.')[0] ?? '0', 10);\n checks.push({\n name: 'runtime',\n status: nodeMajor >= 22 ? 'pass' : 'fail',\n detail: `Node ${nodeVersion}${process.versions.bun ? ` (Bun ${process.versions.bun})` : ''}`,\n });\n checks.push({ name: 'platform', status: 'pass', detail: `${hostPlatform} ${release()}` });\n\n const git = run('git', ['--version']);\n checks.push({\n name: 'git',\n status: git.status === 0 ? 'pass' : 'warn',\n detail: git.status === 0 ? git.stdout : 'not found; sessions work, but /undo is unavailable',\n });\n\n try {\n const shell = resolveShell(env, hostPlatform);\n checks.push({ name: 'shell', status: 'pass', detail: shell.file });\n } catch (error) {\n checks.push({\n name: 'shell',\n status: error instanceof ShellNotFoundError ? 'fail' : 'warn',\n detail: (error as Error).message,\n });\n }\n\n for (const [name, path] of [\n ['config directory', configPath],\n ['data directory', dataPath],\n ] as const) {\n checks.push({\n name,\n status: (await writableLocation(path)) ? 'pass' : 'fail',\n detail: path,\n });\n }\n\n const auth = await jsonCheck('auth file', authPath);\n if (auth) {\n if (hostPlatform !== 'win32' && auth.status === 'pass') {\n const mode = (await stat(authPath)).mode & 0o777;\n if ((mode & 0o077) !== 0) {\n auth.status = 'fail';\n auth.detail += ` (permissions ${mode.toString(8)}; expected 600)`;\n }\n }\n checks.push(auth);\n }\n\n for (const [name, path] of [\n ['project settings', join(cwd, '.earshot', 'settings.json')],\n ['local settings', join(cwd, '.earshot', 'settings.local.json')],\n ['global settings', join(configPath, 'settings.json')],\n ] as const) {\n const check = await jsonCheck(name, path);\n if (check) checks.push(check);\n }\n\n checks.unshift({ name: 'earshot', status: 'pass', detail: VERSION });\n return checks;\n}\n\nexport async function doctorCommand(_args: ParsedArgs): Promise<number> {\n const checks = await runDoctor();\n for (const check of checks) {\n process.stdout.write(\n `${check.status.toUpperCase().padEnd(4)} ${check.name.padEnd(18)} ${check.detail}\\n`,\n );\n }\n const failed = checks.filter((check) => check.status === 'fail').length;\n const warnings = checks.filter((check) => check.status === 'warn').length;\n process.stdout.write(\n `\\n${failed === 0 ? 'ready' : 'not ready'}: ${failed} failed, ${warnings} warnings\\n`,\n );\n return failed === 0 ? 0 : 1;\n}\n",
80
81
  "import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { LOCAL_SETTINGS } from '@earshot/mcp';\nimport { configDir } from '@earshot/providers';\nimport type { ParsedArgs } from '../args.ts';\nimport {\n EXTENSION_TRUST_NOTE,\n loadExtensions,\n PROJECT_EXTENSIONS,\n trustedExtensions,\n} from '../extensions/index.ts';\n\n/**\n * `earshot extensions list|trust|untrust`.\n *\n * `list` names what is there without importing anything untrusted: an extension\n * runs the moment it is imported, so listing must not be the thing that runs it.\n */\nexport async function extensionsCommand(args: ParsedArgs): Promise<number> {\n const [action = 'list', name] = args.positionals;\n const cwd = process.cwd();\n\n if (action === 'list') return list(cwd);\n if (action === 'trust' || action === 'untrust') {\n if (!name) {\n process.stderr.write(`usage: earshot extensions ${action} <name>\\n`);\n return 2;\n }\n return setTrust(cwd, name, action === 'trust');\n }\n\n process.stderr.write(`earshot extensions: unknown action \"${action}\"\\n`);\n return 2;\n}\n\nasync function list(cwd: string): Promise<number> {\n const { reports } = await loadExtensions(cwd, await trustedExtensions(cwd));\n if (reports.length === 0) {\n process.stdout.write(\n 'no extensions found\\n\\n' +\n `add a module to ${PROJECT_EXTENSIONS} for this project, ` +\n `or to ${join(configDir(), 'extensions')} for every project\\n`,\n );\n return 0;\n }\n\n for (const report of reports) {\n const state =\n report.status === 'ready'\n ? `${report.toolCount} tool${report.toolCount === 1 ? '' : 's'}`\n : `${report.status}: ${report.detail ?? EXTENSION_TRUST_NOTE}`;\n process.stdout.write(`${report.name} [${report.scope}] ${state}\\n`);\n }\n return 0;\n}\n\n/** Recorded in local settings, which are not committed: see `earshot mcp trust`. */\nasync function setTrust(cwd: string, name: string, trust: boolean): Promise<number> {\n const { reports } = await loadExtensions(cwd, new Set());\n if (!reports.some((report) => report.name === name && report.scope === 'project')) {\n process.stderr.write(`no project extension named \"${name}\" was found\\n`);\n return 2;\n }\n\n const path = join(cwd, LOCAL_SETTINGS);\n const raw = await readFile(path, 'utf8').catch(() => '{}');\n let settings: { extensionTrust?: string[] };\n try {\n settings = JSON.parse(raw) as { extensionTrust?: string[] };\n } catch (error) {\n process.stderr.write(`${path} is not valid JSON: ${(error as Error).message}\\n`);\n return 2;\n }\n\n const current = new Set(settings.extensionTrust ?? []);\n if (trust) current.add(name);\n else current.delete(name);\n\n await mkdir(dirname(path), { recursive: true });\n await writeFile(\n path,\n `${JSON.stringify({ ...settings, extensionTrust: [...current].sort() }, null, 2)}\\n`,\n 'utf8',\n );\n process.stdout.write(`${trust ? 'trusted' : 'no longer trusting'} \"${name}\" (${path})\\n`);\n return 0;\n}\n",
81
82
  "import { type Curiosity, isCuriosity } from '@earshot/core';\n\n/**\n * `--curiosity` and `--max-cost`, shared by the interactive and headless paths\n * so the two cannot drift on what a flag means. Both refuse a bad value rather\n * than falling back to a default: a script that asked for a $2 ceiling and\n * silently got none is the failure the flag exists to prevent.\n */\nexport function parseCuriosity(value: unknown): Curiosity | undefined | 'invalid' {\n if (value === undefined) return undefined;\n return isCuriosity(value) ? value : 'invalid';\n}\n\nexport function parseMaxCost(value: unknown): number | undefined | 'invalid' {\n if (value === undefined) return undefined;\n const usd = typeof value === 'string' ? Number(value.replace(/^\\$/, '')) : Number.NaN;\n if (!Number.isFinite(usd) || usd < 0) return 'invalid';\n return usd;\n}\n",
82
83
  "import { readFile, stat } from 'node:fs/promises';\nimport { extname, resolve } from 'node:path';\nimport type { ImagePart } from '@earshot/providers';\n\nconst MAX_IMAGE_BYTES = 20 * 1024 * 1024;\nconst MEDIA_TYPES: Record<string, string> = {\n '.gif': 'image/gif',\n '.jpeg': 'image/jpeg',\n '.jpg': 'image/jpeg',\n '.png': 'image/png',\n '.webp': 'image/webp',\n};\n\nexport async function loadImage(input: string, cwd: string): Promise<ImagePart> {\n const remote = input.startsWith('https://');\n const pathname = remote ? new URL(input).pathname : input;\n const mediaType = MEDIA_TYPES[extname(pathname).toLowerCase()];\n if (!mediaType) {\n throw new Error('supported image formats are PNG, JPEG, GIF and WebP');\n }\n if (remote) return { type: 'image', data: input, mediaType };\n if (input.includes('://')) throw new Error('image URLs must use https');\n\n const path = resolve(cwd, input);\n const info = await stat(path);\n if (!info.isFile()) throw new Error(`${path} is not a file`);\n if (info.size > MAX_IMAGE_BYTES) throw new Error(`${path} is larger than 20 MB`);\n return { type: 'image', data: (await readFile(path)).toString('base64'), mediaType };\n}\n",
83
84
  "import type { AgentEvent } from '@earshot/core';\n\n/**\n * The version of the headless output contract.\n *\n * What `earshot.v1` promises, and what it does not:\n *\n * - Every object earshot writes to stdout in a JSON format carries this string,\n * so a consumer can tell which contract it is reading without knowing which\n * binary produced it.\n * - Within v1, fields and record types may be **added**. A consumer must ignore\n * records whose `type` it does not know and fields it did not expect. That is\n * the whole compatibility rule, and it is what lets earshot report new things\n * without breaking anything already parsing the stream.\n * - Renaming a field, removing one, or changing what one means requires v2. v2\n * would be requested explicitly - `--output-format json@v2` - and v1 would\n * keep working alongside it, so an upgrade is never the thing that breaks a\n * script.\n *\n * The internal `AgentEvent` union is deliberately not what gets written: it is\n * ours to rename, and a consumer should not be able to notice when we do.\n */\nexport const SCHEMA = 'earshot.v1';\n\nexport type OutputFormat = 'text' | 'json' | 'stream-json';\n\n/** `json`, `stream-json`, and the pinned forms `json@v1` / `stream-json@v1`. */\nexport function parseFormat(value: string): OutputFormat | undefined {\n const [name, version] = value.split('@');\n if (version !== undefined && version !== 'v1') return undefined;\n if (name === 'text' && version === undefined) return 'text';\n if (name === 'json' || name === 'stream-json') return name;\n return undefined;\n}\n\nexport interface ResultRecord {\n schema: string;\n type: 'result';\n /** `success` unless something stopped the turn; `isError` is the short form. */\n subtype: 'success' | 'error' | 'interrupted' | 'max_steps' | 'budget';\n isError: boolean;\n text: string;\n costUsd: number;\n durationMs: number;\n numMessages: number;\n model: string;\n permissionMode: string;\n sessionId?: string;\n error?: { kind: string; message: string };\n}\n\nexport type StreamRecord = { schema: string; type: string } & Record<string, unknown>;\n\n/**\n * One agent event as a stream record.\n *\n * Events with nothing a consumer can act on return undefined rather than an\n * empty record. Text deltas are passed through as they arrive: a program\n * consuming the stream wants the same incremental output a person watching the\n * terminal gets, or there is no reason to stream at all.\n */\nexport function toStreamRecord(event: AgentEvent): StreamRecord | undefined {\n const base = { schema: SCHEMA };\n switch (event.type) {\n case 'model_start':\n return { ...base, type: 'model_start', model: event.model };\n case 'text_delta':\n return { ...base, type: 'text', text: event.text };\n case 'reasoning_delta':\n return { ...base, type: 'reasoning', text: event.text };\n case 'tool_start':\n return {\n ...base,\n type: 'tool_use',\n toolCallId: event.call.toolCallId,\n toolName: event.call.toolName,\n input: event.call.input,\n };\n case 'tool_end':\n return {\n ...base,\n type: 'tool_result',\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n isError: event.result.isError === true,\n output: event.result.output,\n };\n case 'permission':\n return {\n ...base,\n type: 'permission',\n tool: event.request.tool,\n target: event.request.target,\n title: event.request.title,\n reason: event.reason,\n };\n case 'intent':\n return {\n ...base,\n type: 'intent',\n calls: event.calls,\n ...(event.text !== undefined ? { text: event.text } : {}),\n };\n case 'usage':\n return { ...base, type: 'usage', usage: event.usage, costUsd: event.costUsd };\n case 'budget':\n return {\n ...base,\n type: 'budget',\n spentUsd: event.spentUsd,\n limitUsd: event.limitUsd,\n ...(event.raisedTo !== undefined ? { raisedTo: event.raisedTo } : {}),\n };\n case 'compacted':\n return { ...base, type: 'compacted', replaced: event.replaced };\n case 'scope_concern':\n return {\n ...base,\n type: 'scope',\n kind: event.concern.kind,\n summary: event.concern.summary,\n accepted: event.accepted,\n };\n case 'verification':\n return {\n ...base,\n type: 'verification',\n command: event.result.command,\n exitCode: event.result.exitCode,\n output: event.result.output,\n };\n case 'hook':\n return {\n ...base,\n type: 'hook',\n event: event.event,\n ...(event.blocked !== undefined ? { blocked: event.blocked } : {}),\n problems: event.problems,\n };\n case 'subagent':\n return {\n ...base,\n type: 'subagent',\n description: event.description,\n steps: event.steps,\n costUsd: event.costUsd,\n };\n case 'error':\n return {\n ...base,\n type: 'error',\n kind: event.error.kind,\n message: event.error.message,\n retryable: event.error.retryable,\n };\n // `message` and `turn_end` are covered by the records above and by the final\n // result record; emitting the raw assistant message as well would put the\n // same text in the stream twice.\n default:\n return undefined;\n }\n}\n",
84
- "import {\n type AgentEvent,\n createSession,\n isPermissionMode,\n MissingCredentialsError,\n NoSessionToResumeError,\n type PermissionMode,\n ShellNotFoundError,\n UnknownModelError,\n} from '@earshot/core';\nimport type { ParsedArgs } from '../args.ts';\nimport { parseCuriosity, parseMaxCost } from '../budget.ts';\nimport { startExtensions } from '../extensions/index.ts';\nimport { loadImage } from '../image.ts';\nimport {\n type OutputFormat,\n parseFormat,\n type ResultRecord,\n SCHEMA,\n toStreamRecord,\n} from '../output.ts';\n\nconst DEFAULT_MODEL = 'anthropic/claude-opus-5';\n\n/**\n * `earshot -p \"<prompt>\"` - one non-interactive turn, with tools.\n *\n * Headless runs default to `ask` like everywhere else, which with no terminal to\n * prompt at means mutating tools are refused with an explanation the model can\n * act on. Scripted use passes `--permission-mode`; that is a deliberate choice\n * the caller makes, not a default they fall into.\n */\nexport async function headlessCommand(prompt: string, args: ParsedArgs): Promise<number> {\n const flags = args.flags;\n const requestedFormat =\n typeof flags['output-format'] === 'string' ? flags['output-format'] : 'text';\n const format = parseFormat(requestedFormat);\n if (!format) {\n // Refused rather than falling back to text: a script asking for a format\n // earshot does not have wants to know that, not to be handed prose.\n process.stderr.write(\n `\"${requestedFormat}\" is not an output format. Use text, json or stream-json ` +\n `(optionally pinned as json@v1).\\n`,\n );\n return 2;\n }\n const emit = makeEmitter(format);\n const startedAt = Date.now();\n\n let mode: PermissionMode | undefined;\n const requested = flags['permission-mode'];\n if (typeof requested === 'string') {\n if (!isPermissionMode(requested)) {\n process.stderr.write(`\"${requested}\" is not a permission mode\\n`);\n return 2;\n }\n mode = requested;\n }\n\n const curiosity = parseCuriosity(flags.curiosity);\n if (curiosity === 'invalid') {\n process.stderr.write(`\"${flags.curiosity}\" is not a curiosity level: low, normal or high\\n`);\n return 2;\n }\n const maxCostUsd = parseMaxCost(flags['max-cost']);\n if (maxCostUsd === 'invalid') {\n process.stderr.write(`\"${flags['max-cost']}\" is not an amount in dollars\\n`);\n return 2;\n }\n\n const extensions = await startExtensions(process.cwd());\n\n let session: Awaited<ReturnType<typeof createSession>>;\n try {\n session = await createSession({\n cwd: process.cwd(),\n extraTools: extensions.tools,\n problems: extensions.problems,\n onDispose: () => extensions.close(),\n model: typeof flags.model === 'string' ? flags.model : DEFAULT_MODEL,\n ...(mode ? { mode } : {}),\n ...(typeof flags['api-key'] === 'string' ? { apiKey: flags['api-key'] } : {}),\n ...(curiosity ? { curiosity } : {}),\n ...(maxCostUsd !== undefined ? { maxCostUsd } : {}),\n ...resumeFrom(flags),\n });\n } catch (error) {\n await extensions.close();\n return reportStartupFailure(error);\n }\n\n for (const problem of session.problems) process.stderr.write(`warning: ${problem}\\n`);\n\n const controller = new AbortController();\n // A second interrupt exits rather than waiting: the first asks the turn to\n // stop, and a turn wedged in a subprocess should not trap the user.\n let interrupts = 0;\n const onSigint = () => {\n interrupts += 1;\n if (interrupts === 1) controller.abort();\n else process.exit(130);\n };\n process.on('SIGINT', onSigint);\n\n let exitCode = 0;\n let subtype: ResultRecord['subtype'] = 'success';\n let failure: { kind: string; message: string } | undefined;\n\n try {\n let image: Awaited<ReturnType<typeof loadImage>> | undefined;\n if (typeof flags.image === 'string') {\n try {\n image = await loadImage(flags.image, process.cwd());\n } catch (error) {\n process.stderr.write(`image: ${(error as Error).message}\\n`);\n exitCode = 2;\n subtype = 'error';\n failure = { kind: 'invalid_image', message: (error as Error).message };\n }\n }\n const input = image ? [{ type: 'text' as const, text: prompt }, image] : prompt;\n for await (const event of failure\n ? ([] as AgentEvent[])\n : session.agent.runTurn(input, controller.signal)) {\n emit(event);\n if (event.type === 'error') {\n exitCode = 1;\n subtype = 'error';\n failure = { kind: event.error.kind, message: event.error.message };\n }\n if (event.type === 'turn_end' && event.reason === 'aborted') {\n exitCode = 130;\n subtype = 'interrupted';\n }\n if (event.type === 'turn_end' && event.reason === 'max_steps') {\n exitCode = 1;\n subtype = 'max_steps';\n }\n // Its own exit code: a script that set a ceiling needs to tell \"stopped\n // because it ran out of budget\" from \"stopped because it failed\".\n if (event.type === 'turn_end' && event.reason === 'budget') {\n exitCode = 3;\n subtype = 'budget';\n }\n }\n } finally {\n process.off('SIGINT', onSigint);\n await session.dispose();\n }\n\n if (format === 'text') {\n process.stdout.write('\\n');\n return exitCode;\n }\n\n // The same record ends a stream and stands alone as the whole of `json`, so a\n // consumer that reads only the last line of a stream and one that parses a\n // single object are reading the same thing.\n const result: ResultRecord = {\n schema: SCHEMA,\n type: 'result',\n subtype,\n isError: subtype !== 'success',\n text: emit.text(),\n costUsd: session.agent.costUsd,\n durationMs: Date.now() - startedAt,\n numMessages: session.agent.history.length,\n model: typeof flags.model === 'string' ? flags.model : DEFAULT_MODEL,\n permissionMode: session.agent.permissionMode,\n ...(session.store ? { sessionId: session.store.id } : {}),\n ...(failure ? { error: failure } : {}),\n };\n process.stdout.write(\n format === 'json' ? `${JSON.stringify(result, null, 2)}\\n` : `${JSON.stringify(result)}\\n`,\n );\n\n return exitCode;\n}\n\nfunction resumeFrom(flags: ParsedArgs['flags']) {\n if (typeof flags.resume === 'string') return { resume: { path: flags.resume } } as const;\n if (flags.continue === true || flags.resume === true)\n return { resume: { latest: true } } as const;\n return {};\n}\n\n/**\n * Renders events for one of three consumers: a person reading a terminal, a\n * script parsing one JSON object, or a program reading a JSON stream. All three\n * see tool activity - a headless run that printed only prose would hide the fact\n * that the agent edited files.\n */\nfunction makeEmitter(format: OutputFormat) {\n let text = '';\n\n const emit = (event: AgentEvent): void => {\n if (event.type === 'text_delta') text += event.text;\n\n if (format === 'stream-json') {\n const record = toStreamRecord(event);\n if (record) process.stdout.write(`${JSON.stringify(record)}\\n`);\n return;\n }\n if (format !== 'text') return;\n\n switch (event.type) {\n case 'text_delta':\n process.stdout.write(event.text);\n break;\n case 'tool_start':\n process.stderr.write(`\\n· ${event.call.toolName}\\n`);\n break;\n case 'tool_end':\n if (event.result.isError) {\n process.stderr.write(` ! ${describe(event.result.output)}\\n`);\n }\n break;\n case 'hook':\n // A hook that stopped something is why the run did what it did; leaving\n // it out would make the transcript unexplainable.\n if (event.blocked)\n process.stderr.write(`\\n${event.event} hook blocked: ${event.blocked}\\n`);\n for (const problem of event.problems) process.stderr.write(` ! ${problem}\\n`);\n break;\n case 'subagent':\n process.stderr.write(`\\n· subagent \"${event.description}\" (${event.steps} steps)\\n`);\n break;\n case 'error':\n process.stderr.write(`\\nerror: ${event.error.message}\\n`);\n break;\n case 'turn_end':\n if (event.reason === 'aborted') process.stderr.write('\\ninterrupted\\n');\n if (event.reason === 'max_steps') process.stderr.write('\\nstopped: step limit reached\\n');\n if (event.reason === 'budget') process.stderr.write('\\nstopped: cost budget reached\\n');\n break;\n default:\n break;\n }\n };\n\n emit.text = () => text;\n return emit;\n}\n\nfunction describe(output: { type: string; value: unknown }): string {\n return output.type === 'text' ? (String(output.value).split('\\n')[0] ?? '') : output.type;\n}\n\nfunction reportStartupFailure(error: unknown): number {\n if (error instanceof UnknownModelError) {\n process.stderr.write(`${error.message}\\n\\nrun \\`earshot models\\` to see what is available\\n`);\n return 2;\n }\n if (error instanceof MissingCredentialsError) {\n process.stderr.write(`${error.message}\\n`);\n return 3;\n }\n if (error instanceof NoSessionToResumeError) {\n process.stderr.write(`${error.message}\\n`);\n return 2;\n }\n if (error instanceof ShellNotFoundError) {\n process.stderr.write(`${error.message}\\n`);\n return 4;\n }\n throw error;\n}\n",
85
- "import type {\n Agent,\n CreatedSession,\n MemoryCandidate,\n MemoryScope,\n PermissionMode,\n PermissionRequest,\n PromptChoice,\n TodoItem,\n UserPrompt,\n} from '@earshot/core';\nimport {\n deleteMemory,\n detectPreference,\n expandCommand,\n isPermissionMode,\n loadMemories,\n openInEditor,\n PERMISSION_MODES,\n PLAN_PROMPT,\n planPath,\n readPlan,\n refreshSystemPrompt,\n saveMemory,\n savePlan,\n} from '@earshot/core';\nimport { Box, Static, Text, useApp, useInput } from 'ink';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { type CommandName, commandRows, findCommand } from './commands.ts';\nimport { CommandMenu, menuEntries } from './components/command-menu.tsx';\nimport { Markdown } from './components/markdown.tsx';\nimport { MemoryCapture } from './components/memory-capture.tsx';\nimport { PermissionPrompt } from './components/permission.tsx';\nimport { QuestionPrompt } from './components/question.tsx';\nimport { StatusLine } from './components/status.tsx';\nimport { TextInput } from './components/text-input.tsx';\nimport { ToolBlock } from './components/tool-block.tsx';\nimport { theme } from './theme.ts';\n\n/**\n * A finished piece of scrollback.\n *\n * Once an item is here it never changes, which is the contract `Static` needs:\n * Ink writes those rows to the terminal once and then leaves them alone, so they\n * become real scrollback the user can select and scroll with their own terminal.\n * Only the live region below is re-rendered, which is what keeps a long session\n * from repainting thousands of rows on every token.\n */\nexport type ScrollItem =\n | { kind: 'user'; id: string; text: string }\n | { kind: 'assistant'; id: string; text: string }\n | { kind: 'tool'; id: string; name: string; title?: string; output?: string; isError?: boolean }\n | { kind: 'notice'; id: string; text: string; color?: string };\n\nexport interface AppProps {\n session: CreatedSession;\n model: string;\n /** Run immediately on start, for `earshot \"do the thing\"`. */\n initialPrompt?: UserPrompt;\n}\n\nlet sequence = 0;\nconst nextId = () => `item_${sequence++}`;\n\nfunction promptLabel(prompt: UserPrompt): string {\n if (typeof prompt === 'string') return prompt;\n return prompt\n .map((part) => (part.type === 'text' ? part.text : `[attached ${part.mediaType} image]`))\n .join('\\n');\n}\n\nexport function App({ session, model: initialModel, initialPrompt }: AppProps) {\n const { exit } = useApp();\n const agent: Agent = session.agent;\n\n // State rather than the prop alone: `/model` swaps it mid-session, and the\n // status line and the system prompt both have to follow.\n const [model, setModel] = useState(initialModel);\n\n const [items, setItems] = useState<ScrollItem[]>(() =>\n session.problems.map((problem) => ({\n kind: 'notice' as const,\n id: nextId(),\n text: `warning: ${problem}`,\n color: theme.warning,\n })),\n );\n const [live, setLive] = useState('');\n const [runningTool, setRunningTool] = useState<string | undefined>();\n const [input, setInput] = useState('');\n /** Highlighted row of the `/` menu; reset whenever the line changes. */\n const [menuIndex, setMenuIndex] = useState(0);\n const [busy, setBusy] = useState(false);\n const [mode, setMode] = useState<PermissionMode>(agent.permissionMode);\n const [cost, setCost] = useState(0);\n const [todos, setTodos] = useState<TodoItem[]>([]);\n const [queued, setQueued] = useState(0);\n const [candidate, setCandidate] = useState<MemoryCandidate | undefined>();\n const [context, setContext] = useState(() => agent.contextUse);\n const [compacted, setCompacted] = useState(0);\n\n const [pending, setPending] = useState<\n | { request: PermissionRequest; reason: string; resolve: (choice: PromptChoice) => void }\n | undefined\n >();\n const [question, setQuestion] = useState<\n { question: string; options?: string[]; resolve: (answer: string) => void } | undefined\n >();\n\n const controller = useRef<AbortController | undefined>(undefined);\n const push = useCallback((item: ScrollItem) => setItems((current) => [...current, item]), []);\n\n // The prompt and ask callbacks are installed once and read through refs, so a\n // re-render never leaves the agent holding a stale closure over old state.\n const pendingRef = useRef(setPending);\n pendingRef.current = setPending;\n const questionRef = useRef(setQuestion);\n questionRef.current = setQuestion;\n\n useEffect(() => {\n session.installPrompt(\n (request, reason) =>\n new Promise<PromptChoice>((resolve) => {\n pendingRef.current({ request, reason, resolve });\n }),\n );\n session.installAsk(\n (q, options) =>\n new Promise<string>((resolve) => {\n questionRef.current({ question: q, ...(options ? { options } : {}), resolve });\n }),\n );\n }, [session]);\n\n /** The mode to go back to once a plan is approved or abandoned. */\n const modeBeforePlan = useRef<PermissionMode | undefined>(undefined);\n /** The last thing the model said, which in plan mode is the plan itself. */\n const lastAssistantText = useRef('');\n\n const runTurn = useCallback(\n async (prompt: UserPrompt) => {\n setBusy(true);\n // Cleared per turn: a stale answer read back as this turn's plan is worse\n // than no plan at all.\n lastAssistantText.current = '';\n push({ kind: 'user', id: nextId(), text: promptLabel(prompt) });\n\n const abort = new AbortController();\n controller.current = abort;\n let assistantText = '';\n\n try {\n for await (const event of agent.runTurn(prompt, abort.signal)) {\n switch (event.type) {\n case 'text_delta':\n assistantText += event.text;\n setLive(assistantText);\n break;\n case 'intent':\n // The intent itself is the assistant text already on screen just\n // above the tool block, so only its absence is worth a line: a\n // batch that arrived without a reason is what this exists to show.\n if (event.text === undefined) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `about to run ${event.calls} tool call${\n event.calls === 1 ? '' : 's'\n } without saying why`,\n color: theme.warning,\n });\n }\n break;\n case 'tool_start':\n // The assistant's prose is flushed to scrollback before the tool\n // block, so the two never re-order once the tool finishes.\n if (assistantText.trim() !== '') {\n push({ kind: 'assistant', id: nextId(), text: assistantText.trimEnd() });\n assistantText = '';\n setLive('');\n }\n setRunningTool(event.call.toolName);\n break;\n case 'tool_end': {\n setRunningTool(undefined);\n const output = event.result.output.type === 'text' ? event.result.output.value : '';\n push({\n kind: 'tool',\n id: nextId(),\n name: event.toolName,\n ...(event.result.title ? { title: event.result.title } : {}),\n output,\n ...(event.result.isError ? { isError: true } : {}),\n });\n setTodos(agent.todos.list());\n break;\n }\n case 'usage':\n setCost(agent.costUsd);\n setContext(agent.contextUse);\n break;\n case 'budget':\n push({\n kind: 'notice',\n id: nextId(),\n text:\n event.raisedTo === undefined\n ? `stopped: $${event.spentUsd.toFixed(2)} spent against a ` +\n `$${event.limitUsd.toFixed(2)} budget`\n : `budget raised to $${event.raisedTo.toFixed(2)} after ` +\n `$${event.spentUsd.toFixed(2)} spent`,\n color: theme.warning,\n });\n break;\n case 'verification':\n // Shown to the user as it was shown to the model: the command, the\n // exit code and the output, none of it summarised.\n push({\n kind: 'tool',\n id: nextId(),\n name: event.result.command,\n title: `${event.result.command} - exit ${event.result.exitCode ?? 'killed'}`,\n output: event.result.output,\n ...(event.result.exitCode === 0 ? {} : { isError: true }),\n });\n break;\n case 'subagent':\n push({\n kind: 'notice',\n id: nextId(),\n text: `subagent \"${event.description}\": ${event.steps} step${\n event.steps === 1 ? '' : 's'\n }, $${event.costUsd.toFixed(4)}`,\n });\n break;\n case 'hook':\n // A hook that blocked something is the reason the agent did not do\n // it, so it is said out loud rather than left for the model to\n // paraphrase. Problems are shown too: a hook that failed silently\n // is one the user goes on believing is protecting them.\n if (event.blocked) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `${event.event} hook blocked this: ${event.blocked}`,\n color: theme.warning,\n });\n }\n for (const problem of event.problems) {\n push({ kind: 'notice', id: nextId(), text: problem, color: theme.warning });\n }\n break;\n case 'compacted':\n setCompacted((count) => count + event.replaced);\n push({\n kind: 'notice',\n id: nextId(),\n text: `compacted: ${event.replaced} earlier messages are now a summary`,\n });\n break;\n case 'error':\n push({\n kind: 'notice',\n id: nextId(),\n text: `error: ${event.error.message}`,\n color: theme.danger,\n });\n break;\n case 'turn_end':\n if (event.reason === 'aborted') {\n push({\n kind: 'notice',\n id: nextId(),\n text: 'interrupted',\n color: theme.warning,\n });\n }\n if (event.reason === 'max_steps') {\n push({\n kind: 'notice',\n id: nextId(),\n text: 'stopped: step limit reached',\n color: theme.warning,\n });\n }\n break;\n default:\n break;\n }\n setQueued(agent.pendingSteers);\n }\n } finally {\n if (assistantText.trim() !== '') {\n lastAssistantText.current = assistantText;\n push({ kind: 'assistant', id: nextId(), text: assistantText.trimEnd() });\n }\n setLive('');\n setRunningTool(undefined);\n setBusy(false);\n setQueued(agent.pendingSteers);\n controller.current = undefined;\n }\n },\n [agent, push],\n );\n\n const started = useRef(false);\n useEffect(() => {\n if (started.current || !initialPrompt) return;\n started.current = true;\n void runTurn(initialPrompt);\n }, [initialPrompt, runTurn]);\n\n /**\n * Lists what is remembered, with the sentence each rule came from. Memory the\n * user cannot inspect is memory they cannot trust, so provenance is shown\n * here rather than hidden in the file.\n */\n const showMemories = useCallback(\n async (argument?: string) => {\n const [verb, ...rest] = (argument ?? '').split(/\\s+/);\n const id = rest.join(' ').trim();\n if (verb === 'forget' && id) {\n const gone = await deleteMemory(id, agent.cwd);\n if (gone) await refreshSystemPrompt(agent, model, session.skills);\n push({\n kind: 'notice',\n id: nextId(),\n text: gone ? `forgot ${id}` : `no memory called \"${id}\"`,\n ...(gone ? {} : { color: theme.warning }),\n });\n return;\n }\n\n const memories = await loadMemories(agent.cwd);\n if (memories.length === 0) {\n push({ kind: 'notice', id: nextId(), text: 'nothing remembered yet' });\n return;\n }\n const lines = memories.map((memory) => {\n const when = memory.created.slice(0, 10);\n const why = memory.source ? `\\n from \"${memory.source}\" on ${when}` : '';\n return ` [${memory.id}] (${memory.scope}) ${memory.text}${why}`;\n });\n push({\n kind: 'notice',\n id: nextId(),\n text: `${lines.join('\\n')}\\n\\n /memory forget <id> removes one`,\n });\n },\n [agent, model, push, session.skills],\n );\n\n const remember = useCallback(\n async (scope: MemoryScope) => {\n if (!candidate) return;\n setCandidate(undefined);\n const saved = await saveMemory({ ...candidate, scope }, agent.cwd).catch(() => undefined);\n if (!saved) {\n push({ kind: 'notice', id: nextId(), text: 'could not save that', color: theme.warning });\n return;\n }\n // Applied from the next model call, not the next session.\n await refreshSystemPrompt(agent, model, session.skills);\n push({\n kind: 'notice',\n id: nextId(),\n text: `remembered [${saved.id}] (${scope}) - /memory to review or forget it`,\n });\n },\n [agent, candidate, model, push, session.skills],\n );\n\n /**\n * `/tree`, `/rewind`, `/fork` and `/undo`.\n *\n * The numbering is over the user's own prompts rather than over every entry:\n * \"go back to before I asked for the refactor\" is how people think about a\n * session, and an entry id is not something anyone can pick out of a list.\n */\n const sessionTree = useCallback(\n async (name: string, argument?: string) => {\n const entries = await session.branch();\n const prompts = entries.filter(\n (entry) =>\n entry.type === 'message' &&\n entry.message.role === 'user' &&\n entry.message.content.some(\n (part) => part.type === 'text' && !part.text.startsWith('<self-check>'),\n ),\n );\n\n if (name === 'tree' || !argument) {\n if (prompts.length === 0) {\n push({ kind: 'notice', id: nextId(), text: 'nothing in this session yet' });\n return;\n }\n const lines = prompts.map((entry, index) => {\n const text =\n entry.type === 'message'\n ? (entry.message.content.find((part) => part.type === 'text')?.text ?? '')\n : '';\n return ` ${index + 1}. ${text.split('\\n')[0]?.slice(0, 70) ?? ''}`;\n });\n push({\n kind: 'notice',\n id: nextId(),\n text: `${lines.join('\\n')}\\n\\n /rewind <n> goes back to one · /fork <n> branches from it`,\n });\n return;\n }\n\n const index = Number.parseInt(argument, 10) - 1;\n const target = prompts[index];\n if (!target) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `no prompt ${argument} in this session - /tree lists them`,\n color: theme.warning,\n });\n return;\n }\n // The entry before the chosen prompt: rewinding \"to\" a prompt means the\n // state the session was in when it was typed, not after it ran.\n const previous = entries[entries.indexOf(target) - 1] ?? target;\n\n if (name === 'rewind') {\n const kept = await session.rewindTo(previous.id);\n push({\n kind: 'notice',\n id: nextId(),\n text: `rewound to before prompt ${index + 1}; ${kept} message${kept === 1 ? '' : 's'} kept. Nothing was deleted - the rest is still in the transcript as another branch.`,\n });\n return;\n }\n\n const forked = await session.fork(previous.id);\n push({\n kind: 'notice',\n id: nextId(),\n text: forked\n ? `forked from prompt ${index + 1} into ${forked}; this session continues there and the original is untouched`\n : 'could not fork this session',\n ...(forked ? {} : { color: theme.warning }),\n });\n },\n [push, session],\n );\n\n const undoLast = useCallback(async () => {\n const result = await session.undo();\n if (!result) {\n push({ kind: 'notice', id: nextId(), text: 'nothing to undo', color: theme.warning });\n return;\n }\n const created = result.wasCreated.length\n ? ` Left in place because the batch created them: ${result.wasCreated.join(', ')}.`\n : '';\n push({\n kind: 'notice',\n id: nextId(),\n text: result.restored.length\n ? `undid ${result.label}: restored ${result.restored.join(', ')}.${created}`\n : `nothing to restore from ${result.label}.${created}`,\n });\n }, [push, session]);\n\n /**\n * `/plan` - draft, edit, approve.\n *\n * The plan is a file, and approving reads it back from disk rather than using\n * what the model wrote. That is the difference between a plan and a prompt:\n * whatever the user changed is what gets pinned, and if they changed nothing\n * it is still their decision that it stands.\n */\n const plan = useCallback(\n async (argument?: string) => {\n const path = planPath(session.store?.id ?? 'scratch');\n const [verb = '', ...rest] = (argument ?? '').split(/\\s+/);\n const task = [verb, ...rest].join(' ').trim();\n\n if (verb === 'show') {\n const text = await readPlan(path);\n push({\n kind: 'notice',\n id: nextId(),\n text: text ? `${path}\\n\\n${text}` : `no plan yet at ${path}`,\n });\n return;\n }\n if (verb === 'edit') {\n const result = await openInEditor(path);\n push({\n kind: 'notice',\n id: nextId(),\n text: result.message,\n ...(result.edited ? {} : { color: theme.warning }),\n });\n return;\n }\n if (verb === 'approve') {\n const text = await readPlan(path);\n if (!text) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `there is no plan at ${path} to approve`,\n color: theme.warning,\n });\n return;\n }\n agent.setPlan(text);\n // Back to whatever the session was in before planning: staying in plan\n // mode after approving one is the one thing the user certainly did not\n // ask for.\n const restored = modeBeforePlan.current ?? 'ask';\n agent.setPermissionMode(restored);\n setMode(restored);\n modeBeforePlan.current = undefined;\n push({\n kind: 'notice',\n id: nextId(),\n text: `plan approved and pinned for this run; permission mode: ${restored}`,\n });\n return;\n }\n if (verb === 'clear') {\n agent.setPlan(undefined);\n push({ kind: 'notice', id: nextId(), text: 'plan unpinned' });\n return;\n }\n if (task === '') {\n push({\n kind: 'notice',\n id: nextId(),\n text: 'usage: /plan <what you want planned>, then /plan edit, /plan approve',\n color: theme.warning,\n });\n return;\n }\n\n modeBeforePlan.current = agent.permissionMode;\n agent.setPermissionMode('plan');\n setMode('plan');\n await runTurn(`${task}\\n\\n${PLAN_PROMPT}`);\n\n // Written from the last thing the model said, which in plan mode is the\n // plan, because every mutating tool was refused.\n const drafted = lastAssistantText.current.trim();\n if (drafted === '') {\n push({\n kind: 'notice',\n id: nextId(),\n text: 'the model produced no plan to write',\n color: theme.warning,\n });\n return;\n }\n await savePlan(path, drafted);\n push({\n kind: 'notice',\n id: nextId(),\n text: `plan written to ${path}\\n/plan edit to change it, /plan approve to pin it`,\n });\n },\n [agent, push, runTurn, session.store],\n );\n\n /**\n * `/model` - show what is in use, or switch.\n *\n * The switch goes through the agent, which resolves the reference against the\n * same registry and credential order the CLI uses. A reference with no\n * credentials leaves the session on the model it had: half a switch would\n * price one model's tokens at another's rates.\n */\n const switchModel = useCallback(\n async (ref?: string) => {\n if (!ref) {\n const current = agent.model;\n const price = current.model.cost;\n push({\n kind: 'notice',\n id: nextId(),\n text: [\n ` ${current.provider.id}/${current.model.id}`,\n ` context ${(current.model.contextWindow ?? 0).toLocaleString()} tokens`,\n ` price $${price?.input ?? '?'} in / $${price?.output ?? '?'} out per million`,\n '',\n ' /model <provider/model> switches; `earshot models` lists them',\n ].join('\\n'),\n });\n return;\n }\n try {\n const resolved = await agent.changeModel(ref);\n const next = `${resolved.provider.id}/${resolved.model.id}`;\n setModel(next);\n // The system prompt names the model; leaving the old name in it would\n // tell the new model it is something else.\n await refreshSystemPrompt(agent, next, session.skills);\n push({ kind: 'notice', id: nextId(), text: `model: ${next}` });\n } catch (error) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `${(error as Error).message}`,\n color: theme.warning,\n });\n }\n },\n [agent, push, session.skills],\n );\n\n /** `/compact` - the 80% compaction, asked for early. */\n const compactNow = useCallback(async () => {\n const abort = new AbortController();\n controller.current = abort;\n setBusy(true);\n try {\n let compactedAnything = false;\n for await (const event of agent.compactNow(abort.signal)) {\n if (event.type === 'compacted') {\n compactedAnything = true;\n setCompacted((count) => count + event.replaced);\n push({\n kind: 'notice',\n id: nextId(),\n text: `compacted: ${event.replaced} earlier messages are now a summary`,\n });\n }\n }\n if (!compactedAnything) {\n push({ kind: 'notice', id: nextId(), text: 'nothing to compact yet' });\n }\n } catch (error) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `could not compact: ${(error as Error).message}`,\n color: theme.warning,\n });\n } finally {\n setBusy(false);\n setContext(agent.contextUse);\n controller.current = undefined;\n }\n }, [agent, push]);\n\n /**\n * One handler per registry entry, keyed by name.\n *\n * `Record<CommandName, ...>` is the whole point: a command added to\n * `COMMANDS` with no handler here fails to compile, and a handler for a name\n * the registry does not list fails to compile too. The menu and docs/cli.md\n * read the same registry, so \"listed but not dispatchable\" and \"dispatchable\n * but unlisted\" are both unreachable rather than merely unlikely.\n */\n const handlers: Record<CommandName, (argument?: string) => void> = {\n exit: () => exit(),\n help: () => push({ kind: 'notice', id: nextId(), text: describeCommands(session) }),\n model: (argument) => void switchModel(argument),\n compact: () => void compactNow(),\n context: () => {\n const { tokens, window } = agent.contextUse;\n const percent = window > 0 ? Math.round((tokens / window) * 100) : 0;\n const files = agent.touchedFiles;\n push({\n kind: 'notice',\n id: nextId(),\n text: [\n ` model ${model}`,\n ` context ~${tokens.toLocaleString()} of ${window.toLocaleString()} tokens (${percent}%)`,\n ` dropped ${compacted} earlier message${compacted === 1 ? '' : 's'} replaced by a summary`,\n ` files ${files.length === 0 ? 'none touched yet' : files.join(', ')}`,\n '',\n ' /compact summarises now rather than waiting for 80%',\n ].join('\\n'),\n });\n },\n cost: (argument) => {\n if (argument !== undefined && argument !== '') {\n const amount = Number.parseFloat(argument.replace(/^\\$/, ''));\n if (Number.isNaN(amount)) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `usage: /cost [usd] - \"${argument}\" is not an amount`,\n color: theme.warning,\n });\n return;\n }\n // Zero removes the ceiling, the same way `--max-cost 0` does, so the two\n // ways of setting a budget cannot disagree about how to turn one off.\n agent.setBudget(amount > 0 ? amount : undefined);\n push({\n kind: 'notice',\n id: nextId(),\n text: amount > 0 ? `budget: $${amount.toFixed(2)}` : 'budget removed',\n });\n return;\n }\n const budget = agent.budgetUsd;\n push({\n kind: 'notice',\n id: nextId(),\n text:\n ` spent $${agent.costUsd.toFixed(4)}\\n` +\n ` budget ${budget === undefined ? 'none - /cost <usd> sets one' : `$${budget.toFixed(2)}`}`,\n });\n },\n todo: () => {\n const todos = agent.todos.list();\n push({\n kind: 'notice',\n id: nextId(),\n text:\n todos.length === 0\n ? 'no todos in this session'\n : todos\n .map(\n (todo) =>\n ` ${todo.status === 'done' ? 'x' : todo.status === 'in_progress' ? '>' : ' '} ${todo.text}`,\n )\n .join('\\n'),\n });\n },\n permissions: () => {\n const rules = agent.permissionRules;\n push({\n kind: 'notice',\n id: nextId(),\n text: [\n ` mode ${agent.permissionMode} (/mode changes it)`,\n ...(rules.length === 0\n ? [' rules none configured']\n : [\n ' rules (deny always wins, whatever the mode or scope)',\n ...rules.map(\n (rule) => ` ${rule.effect.padEnd(5)} ${rule.source} [${rule.scope}]`,\n ),\n ]),\n ].join('\\n'),\n });\n },\n init: () => void runTurn(INIT_PROMPT),\n\n mode: (argument) => {\n if (argument && isPermissionMode(argument)) {\n agent.setPermissionMode(argument);\n setMode(argument);\n push({ kind: 'notice', id: nextId(), text: `permission mode: ${argument}` });\n } else {\n push({\n kind: 'notice',\n id: nextId(),\n text: `usage: /mode <${PERMISSION_MODES.join('|')}>`,\n color: theme.warning,\n });\n }\n },\n memory: (argument) => void showMemories(argument),\n tree: (argument) => void sessionTree('tree', argument),\n rewind: (argument) => void sessionTree('rewind', argument),\n fork: (argument) => void sessionTree('fork', argument),\n undo: () => void undoLast(),\n plan: (argument) => void plan(argument),\n skills: () => push({ kind: 'notice', id: nextId(), text: describeExtensions(session) }),\n };\n const handlersRef = useRef(handlers);\n handlersRef.current = handlers;\n\n const handleCommand = useCallback(\n (command: string) => {\n // Split once, keeping the remainder: `split(/\\s+/, 2)` discards everything\n // after the second field, which silently drops the argument of any command\n // that takes more than one word.\n const body = command.slice(1).trim();\n const space = body.search(/\\s/);\n const name = space === -1 ? body : body.slice(0, space);\n const argument = space === -1 ? undefined : body.slice(space + 1).trim();\n\n const spec = findCommand(name);\n if (spec) {\n // Checked once, here, rather than inside each handler that needs it.\n // Three copies of this branch is how `/plan` and `/tree` came to phrase\n // the same refusal differently.\n if (spec.idleOnly && busy) {\n push({\n kind: 'notice',\n id: nextId(),\n text: 'finish or interrupt the current turn first (esc)',\n color: theme.warning,\n });\n return;\n }\n handlersRef.current[spec.name as CommandName](argument);\n return;\n }\n\n // A user-defined command is expanded into a prompt and run as one. It is\n // not a second way to reach the tools: whatever the file asks for goes\n // through the same turn, and the same gate, as anything typed by hand.\n const custom = session.commands.find((entry) => entry.name === name);\n if (custom) {\n const prompt = expandCommand(custom, argument ?? '');\n if (prompt.trim() === '') {\n push({\n kind: 'notice',\n id: nextId(),\n text: `/${name} expanded to nothing`,\n color: theme.warning,\n });\n return;\n }\n if (busy) {\n agent.steer(prompt);\n setQueued(agent.pendingSteers);\n push({ kind: 'user', id: nextId(), text: command });\n return;\n }\n void runTurn(prompt);\n return;\n }\n\n push({\n kind: 'notice',\n id: nextId(),\n text: `unknown command \"${name}\"`,\n color: theme.warning,\n });\n },\n [agent, busy, push, runTurn, session],\n );\n\n const submit = useCallback(\n (text: string) => {\n // Enter is resolved here rather than in the app's `useInput`, because both\n // handlers see the same keystroke and Ink guarantees no order between\n // them: deciding in two places is how a command would get completed and\n // run at once, or run one row off from the one that was highlighted.\n const entry = menuOpenRef.current ? menuEntriesRef.current[selectedRef.current] : undefined;\n if (entry) {\n setInput('');\n setMenuIndex(0);\n handleCommand(entry.insert);\n return;\n }\n\n const trimmed = text.trim();\n setInput('');\n if (trimmed === '') return;\n\n if (trimmed.startsWith('/')) {\n handleCommand(trimmed);\n return;\n }\n // Offered, never stored: a wrong rule saved silently would follow the user\n // into every future session with no sign of where it came from.\n setCandidate(detectPreference(trimmed));\n if (busy) {\n // Steering, not queueing a second turn: the agent injects it at the next\n // model call so the user redirects without losing work in flight.\n agent.steer(trimmed);\n setQueued(agent.pendingSteers);\n push({ kind: 'user', id: nextId(), text: trimmed });\n return;\n }\n void runTurn(trimmed);\n },\n [agent, busy, push, runTurn, handleCommand],\n );\n\n // Input is disabled while a prompt is open so the two do not both consume keys.\n const inputActive = !pending && !question;\n\n // Open while the line is a bare command name being typed. A space means an\n // argument is being written, and the user has already chosen.\n const menuOpen = inputActive && input.startsWith('/') && !input.includes(' ');\n const entries = menuOpen ? menuEntries(input.slice(1), session.commands, busy) : [];\n const selected = Math.min(menuIndex, Math.max(0, entries.length - 1));\n\n // Read by `submit`, which runs from TextInput's own key handler and would\n // otherwise close over the previous render's list.\n const menuOpenRef = useRef(menuOpen);\n menuOpenRef.current = menuOpen;\n const menuEntriesRef = useRef(entries);\n menuEntriesRef.current = entries;\n const selectedRef = useRef(selected);\n selectedRef.current = selected;\n\n useInput(\n (input_, key) => {\n // The menu adds no `useInput` of its own: a second handler would race this\n // one for the same keystroke. It is a pure render of state owned here, and\n // this branch is the only place its keys are interpreted.\n if (menuOpen && entries.length > 0) {\n if (key.upArrow) {\n setMenuIndex((current) => (current <= 0 ? entries.length - 1 : current - 1));\n return;\n }\n if (key.downArrow) {\n setMenuIndex((current) => (current >= entries.length - 1 ? 0 : current + 1));\n return;\n }\n if (key.tab) {\n // Completes without running: choosing a command and committing to it\n // are two decisions, and one of them takes an argument.\n const entry = entries[selected];\n if (entry) setInput(`${entry.insert} `);\n setMenuIndex(0);\n return;\n }\n if (key.escape) {\n // Closes the menu and nothing else. Escape already means \"cancel the\n // turn\", and a menu that quietly took that over would make the one\n // key people rely on mid-turn depend on what is on the line.\n setInput('');\n setMenuIndex(0);\n return;\n }\n }\n if (key.escape) {\n setCandidate(undefined);\n if (busy) controller.current?.abort();\n return;\n }\n // Bound rather than modal: taking the offer must not stop the user typing.\n if (key.ctrl && candidate && (input_ === 'r' || input_ === 'g')) {\n void remember(input_ === 'r' ? 'project' : 'user');\n }\n },\n { isActive: inputActive },\n );\n\n return (\n <Box flexDirection=\"column\">\n <Static items={items}>{(item) => <ScrollRow key={item.id} item={item} />}</Static>\n\n {live !== '' && (\n <Box marginTop={1}>\n <Markdown text={live} />\n </Box>\n )}\n {runningTool && <ToolBlock name={runningTool} running />}\n\n {pending && (\n <PermissionPrompt\n request={pending.request}\n reason={pending.reason}\n onChoice={(choice) => {\n setPending(undefined);\n pending.resolve(choice);\n }}\n />\n )}\n\n {question && (\n <QuestionPrompt\n question={question.question}\n {...(question.options ? { options: question.options } : {})}\n onAnswer={(answer) => {\n setQuestion(undefined);\n question.resolve(answer);\n }}\n />\n )}\n\n {candidate && inputActive && <MemoryCapture candidate={candidate} />}\n\n {menuOpen && <CommandMenu entries={entries} selected={selected} />}\n\n {inputActive && (\n <Box marginTop={1}>\n <Text color={theme.user}>{'> '}</Text>\n <TextInput\n value={input}\n onChange={(value) => {\n setInput(value);\n setMenuIndex(0);\n }}\n onSubmit={submit}\n placeholder={busy ? 'steer the agent, or esc to interrupt' : 'what should I do?'}\n />\n </Box>\n )}\n\n <StatusLine\n model={model}\n mode={mode}\n costUsd={cost}\n todos={todos}\n busy={busy}\n queued={queued}\n context={context}\n compacted={compacted}\n />\n </Box>\n );\n}\n\nfunction ScrollRow({ item }: { item: ScrollItem }) {\n if (item.kind === 'user') {\n return (\n <Box marginTop={1}>\n <Text color={theme.user}>{'> '}</Text>\n <Text>{item.text}</Text>\n </Box>\n );\n }\n if (item.kind === 'assistant') {\n return (\n <Box marginTop={1}>\n <Markdown text={item.text} />\n </Box>\n );\n }\n if (item.kind === 'tool') {\n return (\n <ToolBlock\n name={item.name}\n {...(item.title ? { title: item.title } : {})}\n {...(item.output ? { output: item.output } : {})}\n {...(item.isError ? { isError: true } : {})}\n />\n );\n }\n return (\n <Box marginTop={1}>\n <Text color={item.color ?? theme.muted}>{item.text}</Text>\n </Box>\n );\n}\n\n/**\n * What `/help` shows: the registry, plus whatever this directory contributes.\n *\n * Built from the same list the menu and docs/cli.md read, so `/help` cannot\n * describe a command that does not exist or miss one that does.\n */\nfunction describeCommands(session: CreatedSession): string {\n const lines = commandRows().map((row) => ` ${row.command.padEnd(34)} ${row.summary}`);\n if (session.commands.length > 0) {\n lines.push('', ' commands from this directory:');\n for (const command of session.commands) {\n lines.push(` ${`/${command.name}`.padEnd(34)} ${command.description}`);\n }\n }\n lines.push('', ' type / at the prompt to filter this list and pick one');\n return lines.join('\\n');\n}\n\n/**\n * `/init`. Phrased as a request, not a template: the file is meant to describe\n * what this project actually does, and a model handed a skeleton fills the\n * skeleton in rather than reading the repository.\n */\nconst INIT_PROMPT = `Write an AGENTS.md at the root of this project for a coding agent that has never seen it.\n\nRead enough of the repository first to be accurate. Cover: what the project is, how it is laid out, the commands to build, test and lint it, and the conventions and rules that are not obvious from the code. Prefer rules that prevent a specific failure, and say what the failure is. If an AGENTS.md or CLAUDE.md already exists, improve it in place rather than replacing it.`;\n\n/**\n * What `/skills` shows. Skills and commands are listed together because from the\n * user's side they are the same question - what extra behaviour is loaded in\n * this directory, and where did it come from.\n */\nfunction describeExtensions(session: CreatedSession): string {\n const lines: string[] = [];\n if (session.skills.length > 0) {\n lines.push('skills (the agent loads these itself when they fit):');\n for (const skill of session.skills) {\n lines.push(` ${skill.name} [${skill.scope}] ${skill.description}`);\n }\n }\n if (session.commands.length > 0) {\n if (lines.length > 0) lines.push('');\n lines.push('commands you can type:');\n for (const command of session.commands) {\n lines.push(` /${command.name} [${command.scope}] ${command.description}`);\n }\n }\n return lines.length === 0\n ? 'no skills or commands found in .earshot/skills, .earshot/commands or your config directory'\n : lines.join('\\n');\n}\n",
86
- "/**\n * The one list of built-in slash commands.\n *\n * Dispatch, the `/` menu and the table in docs/cli.md all read from here. Before\n * this existed the if-chain in app.tsx and the docs table were two hand-written\n * lists free to disagree, and a menu would have been a third: a command could be\n * dispatchable but undocumented, or documented and not dispatchable, with\n * nothing to notice either. The handler table in app.tsx is keyed by\n * `CommandName`, so a missing or extra handler is a compile error, and\n * packages/tui/test/commands.test.ts holds docs/cli.md to the same list.\n *\n * Nothing here knows about user-defined commands from `.earshot/commands`:\n * those are discovered at runtime and reach the menu from `session.commands`.\n */\n\nexport interface CommandVerb {\n readonly name: string;\n /** Argument shape as the user types it. */\n readonly args?: string;\n readonly summary: string;\n}\n\nexport interface CommandSpec {\n readonly name: string;\n /** Other names that dispatch to the same handler. Not menu rows of their own. */\n readonly aliases?: readonly string[];\n /** Argument shape as the user types it, e.g. `<n>`; absent means none. */\n readonly args?: string;\n /**\n * One line, plain prose. This is the menu row and the docs cell, so it carries\n * no markdown: the menu renders into a terminal, not into a page.\n */\n readonly summary: string;\n /**\n * Refuses to run while a turn is in flight. Checked once by the dispatcher\n * rather than re-implemented per command, which is how three copies of the\n * same \"finish or interrupt first\" branch used to drift.\n */\n readonly idleOnly?: boolean;\n readonly verbs?: readonly CommandVerb[];\n}\n\n/**\n * Declared `as const` for the literal names, then re-exported as\n * `readonly CommandSpec[]`: without the widening, an entry that omits `args` or\n * `idleOnly` has no such property at all, and every reader has to narrow before\n * it can ask.\n */\nconst SPECS = [\n {\n name: 'help',\n summary: 'List the commands you can type',\n },\n {\n name: 'model',\n args: '[ref]',\n summary: 'Show the model in use, or switch to another for the rest of the session',\n },\n {\n name: 'mode',\n args: '<plan|ask|accept-edits|auto|yolo>',\n summary: 'Change the permission mode',\n },\n {\n name: 'plan',\n args: '<task>',\n summary: 'Draft a plan in plan mode and write it to a file',\n idleOnly: true,\n verbs: [\n { name: 'edit', summary: 'Open the plan in $VISUAL/$EDITOR, or print its path' },\n { name: 'approve', summary: 'Pin the plan as the file now reads for the rest of the run' },\n { name: 'show', summary: 'Read the plan back' },\n { name: 'clear', summary: 'Unpin the plan' },\n ],\n },\n {\n name: 'compact',\n summary: 'Summarise the session so far and free up the context window',\n idleOnly: true,\n },\n {\n name: 'context',\n summary: 'Show what is in the context window and what compaction has dropped',\n },\n {\n name: 'cost',\n args: '[usd]',\n summary: 'Show what this session has spent, or set the budget ceiling; 0 removes it',\n },\n {\n name: 'todo',\n summary: \"Show the agent's current todo list\",\n },\n {\n name: 'permissions',\n summary: 'Show the permission mode and the rules in force',\n },\n {\n name: 'init',\n summary: 'Write an AGENTS.md describing this project',\n idleOnly: true,\n },\n {\n name: 'skills',\n summary: 'List discovered skills and user-defined commands',\n },\n {\n name: 'memory',\n summary: 'List remembered preferences, each with the sentence it came from',\n verbs: [{ name: 'forget', args: '<id>', summary: 'Delete one remembered preference' }],\n },\n {\n name: 'tree',\n summary: \"List this session's prompts, numbered\",\n idleOnly: true,\n },\n {\n name: 'rewind',\n args: '<n>',\n summary: 'Go back to the state before prompt n; nothing is deleted',\n idleOnly: true,\n },\n {\n name: 'fork',\n args: '<n>',\n summary: 'Branch from prompt n into a new transcript',\n idleOnly: true,\n },\n {\n name: 'undo',\n summary: \"Revert the last tool batch's file changes; again to step back further\",\n },\n {\n name: 'exit',\n aliases: ['quit'],\n summary: 'Quit',\n },\n] as const satisfies readonly CommandSpec[];\n\nexport const COMMANDS: readonly CommandSpec[] = SPECS;\n\nexport type CommandName = (typeof SPECS)[number]['name'];\n\n/** The spec a typed name dispatches to, including via an alias. */\nexport function findCommand(name: string): CommandSpec | undefined {\n return COMMANDS.find(\n (command) =>\n command.name === name || (command.aliases as readonly string[] | undefined)?.includes(name),\n );\n}\n\nexport interface CommandRow {\n /** As typed, e.g. `/plan approve`. */\n readonly command: string;\n readonly summary: string;\n readonly spec: CommandSpec;\n}\n\n/**\n * Every documented and menu-listable form, one row per verb.\n *\n * A verb is a row of its own because `/plan approve` does something a user would\n * never guess from a row that only says `/plan`, and a menu that hides it is a\n * menu that fails at the one job it has.\n */\nexport function commandRows(): CommandRow[] {\n const rows: CommandRow[] = [];\n for (const spec of COMMANDS) {\n rows.push({\n command: spec.args ? `/${spec.name} ${spec.args}` : `/${spec.name}`,\n summary: spec.summary,\n spec,\n });\n for (const verb of spec.verbs ?? []) {\n rows.push({\n command: `/${spec.name} ${verb.name}${verb.args ? ` ${verb.args}` : ''}`,\n summary: verb.summary,\n spec,\n });\n }\n }\n return rows;\n}\n",
87
- "import type { SlashCommand } from '@earshot/core';\nimport { Box, Text } from 'ink';\nimport { COMMANDS, type CommandSpec, commandRows } from '../commands.ts';\nimport { theme } from '../theme.ts';\n\n/**\n * A summary longer than this is cut.\n *\n * The row is one line by construction: Ink wraps a `Text` that overruns the\n * terminal, and a wrapped row would push the rest of the menu - and the prompt\n * under it - down by an unpredictable number of lines on every keystroke.\n */\nconst SUMMARY_WIDTH = 58;\n\n/** How many rows fit before the list starts hiding a small terminal's scrollback. */\nconst VISIBLE = 10;\n\nexport interface MenuEntry {\n /** What Tab completes into the input, without the argument placeholder. */\n readonly insert: string;\n /** What the row shows, argument placeholder included. */\n readonly label: string;\n readonly summary: string;\n /** User-defined commands are labelled by where they came from. */\n readonly scope?: string;\n readonly disabled?: boolean;\n}\n\n/**\n * The rows for a typed query, built from the registry and the session's\n * user-defined commands.\n *\n * A pure function rather than a hook so the app can index into the same list it\n * renders - a menu whose selection and display are computed separately is a\n * menu that eventually runs the row above the one that was highlighted.\n */\nexport function menuEntries(\n query: string,\n commands: readonly SlashCommand[],\n busy: boolean,\n): MenuEntry[] {\n const entries: MenuEntry[] = [];\n\n for (const spec of ranked(COMMANDS, query)) {\n if (!matches(spec.name, query)) continue;\n const disabled = busy && spec.idleOnly === true;\n // Verbs only once the user has shown interest in that command: a bare `/`\n // listing every sub-verb buries the nine commands under fourteen rows.\n const expanded = query !== '' && spec.name.startsWith(query);\n for (const row of commandRows()) {\n if (row.spec.name !== spec.name) continue;\n const isBase = row.command === (spec.args ? `/${spec.name} ${spec.args}` : `/${spec.name}`);\n if (!isBase && !expanded) continue;\n entries.push({\n insert: insertFor(row.command, spec),\n label: row.command,\n summary: row.summary,\n ...(disabled ? { disabled: true } : {}),\n });\n }\n }\n\n for (const command of ranked(commands, query)) {\n if (!matches(command.name, query)) continue;\n entries.push({\n insert: `/${command.name}`,\n label: `/${command.name}`,\n summary: command.description,\n scope: command.scope,\n });\n }\n\n return entries;\n}\n\n/**\n * The argument placeholder is shown but never inserted: completing `/rewind <n>`\n * into the line would leave the user deleting the placeholder before they can\n * type the number.\n */\nfunction insertFor(command: string, spec: CommandSpec): string {\n const withoutArgs = spec.args ? command.replace(` ${spec.args}`, '') : command;\n return withoutArgs.replace(/\\s<[^>]*>$/, '');\n}\n\n/**\n * An undefined `color` prop is not the same as an absent one under\n * `exactOptionalPropertyTypes`, so the default row passes no colour at all.\n */\nconst clamp = (text: string) =>\n text.length <= SUMMARY_WIDTH ? text : `${text.slice(0, SUMMARY_WIDTH - 1)}…`;\n\nfunction rowColor(entry: MenuEntry, active: boolean): { color?: string } {\n if (entry.disabled) return { color: theme.muted };\n if (active) return { color: theme.user };\n return {};\n}\n\nfunction matches(name: string, query: string): boolean {\n return query === '' || name.includes(query);\n}\n\n/**\n * Prefix matches first, so `/re` puts `/rewind` above `/tree` - the row the\n * user is most likely typing towards is the one Enter would run.\n * Otherwise the registry's own order is kept, which is the order docs/cli.md\n * documents.\n */\nfunction ranked<T extends { readonly name: string }>(items: readonly T[], query: string): T[] {\n if (query === '') return [...items];\n return [\n ...items.filter((item) => item.name.startsWith(query)),\n ...items.filter((item) => !item.name.startsWith(query)),\n ];\n}\n\nexport interface CommandMenuProps {\n entries: readonly MenuEntry[];\n selected: number;\n}\n\n/**\n * Lives in the live region only.\n *\n * Completed turns are in Ink's `Static` and are written to the terminal once;\n * anything that re-renders them would repaint real scrollback the user has\n * already scrolled past. This draws below them and disappears without touching\n * a row above it.\n */\nexport function CommandMenu({ entries, selected }: CommandMenuProps) {\n if (entries.length === 0) {\n return (\n <Box marginTop={1}>\n <Text color={theme.muted}>no command matches</Text>\n </Box>\n );\n }\n\n // The window follows the selection so arrowing past the eighth row scrolls\n // rather than moving a highlight nobody can see.\n const start = Math.min(\n Math.max(0, selected - VISIBLE + 1),\n Math.max(0, entries.length - VISIBLE),\n );\n const shown = entries.slice(start, start + VISIBLE);\n const hidden = entries.length - shown.length;\n\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n {shown.map((entry, index) => {\n const active = start + index === selected;\n return (\n <Box key={entry.label}>\n <Text color={active ? theme.user : theme.muted}>{active ? '› ' : ' '}</Text>\n <Text {...rowColor(entry, active)}>{entry.label.padEnd(34)}</Text>\n <Text color={theme.muted}>\n {clamp(\n `${entry.scope ? `[${entry.scope}] ` : ''}${entry.summary}${\n entry.disabled ? ' (not while a turn is running)' : ''\n }`,\n )}\n </Text>\n </Box>\n );\n })}\n <Box>\n <Text color={theme.muted}>\n {hidden > 0 ? ` ${hidden} more · ` : ' '}↑↓ choose · tab complete · enter run · esc\n close\n </Text>\n </Box>\n </Box>\n );\n}\n",
85
+ "import {\n type AgentEvent,\n createSession,\n isPermissionMode,\n MissingCredentialsError,\n NoSessionToResumeError,\n type PermissionMode,\n ShellNotFoundError,\n UnknownModelError,\n} from '@earshot/core';\nimport type { ReasoningEffort } from '@earshot/providers';\nimport type { ParsedArgs } from '../args.ts';\nimport { parseCuriosity, parseMaxCost } from '../budget.ts';\nimport { startExtensions } from '../extensions/index.ts';\nimport { loadImage } from '../image.ts';\nimport {\n type OutputFormat,\n parseFormat,\n type ResultRecord,\n SCHEMA,\n toStreamRecord,\n} from '../output.ts';\n\n/**\n * `earshot -p \"<prompt>\"` - one non-interactive turn, with tools.\n *\n * Headless runs default to `ask` like everywhere else, which with no terminal to\n * prompt at means mutating tools are refused with an explanation the model can\n * act on. Scripted use passes `--permission-mode`; that is a deliberate choice\n * the caller makes, not a default they fall into.\n */\nexport async function headlessCommand(prompt: string, args: ParsedArgs): Promise<number> {\n const flags = args.flags;\n const requestedFormat =\n typeof flags['output-format'] === 'string' ? flags['output-format'] : 'text';\n const format = parseFormat(requestedFormat);\n if (!format) {\n // Refused rather than falling back to text: a script asking for a format\n // earshot does not have wants to know that, not to be handed prose.\n process.stderr.write(\n `\"${requestedFormat}\" is not an output format. Use text, json or stream-json ` +\n `(optionally pinned as json@v1).\\n`,\n );\n return 2;\n }\n const emit = makeEmitter(format);\n const startedAt = Date.now();\n\n let mode: PermissionMode | undefined;\n const requested = flags['permission-mode'];\n if (typeof requested === 'string') {\n if (!isPermissionMode(requested)) {\n process.stderr.write(`\"${requested}\" is not a permission mode\\n`);\n return 2;\n }\n mode = requested;\n }\n\n const curiosity = parseCuriosity(flags.curiosity);\n if (curiosity === 'invalid') {\n process.stderr.write(`\"${flags.curiosity}\" is not a curiosity level: low, normal or high\\n`);\n return 2;\n }\n const maxCostUsd = parseMaxCost(flags['max-cost']);\n if (maxCostUsd === 'invalid') {\n process.stderr.write(`\"${flags['max-cost']}\" is not an amount in dollars\\n`);\n return 2;\n }\n const reasoningEffort = parseReasoningEffort(flags['reasoning-effort']);\n if (reasoningEffort === 'invalid') {\n process.stderr.write(`\"${flags['reasoning-effort']}\" is not a reasoning effort\\n`);\n return 2;\n }\n\n const extensions = await startExtensions(process.cwd());\n\n let session: Awaited<ReturnType<typeof createSession>>;\n try {\n session = await createSession({\n cwd: process.cwd(),\n extraTools: extensions.tools,\n problems: extensions.problems,\n onDispose: () => extensions.close(),\n ...(typeof flags.model === 'string' ? { model: flags.model } : {}),\n ...(reasoningEffort !== undefined ? { reasoningEffort } : {}),\n ...(mode ? { mode } : {}),\n ...(typeof flags['api-key'] === 'string' ? { apiKey: flags['api-key'] } : {}),\n ...(curiosity ? { curiosity } : {}),\n ...(maxCostUsd !== undefined ? { maxCostUsd } : {}),\n ...resumeFrom(flags),\n });\n } catch (error) {\n await extensions.close();\n return reportStartupFailure(error);\n }\n\n for (const problem of session.problems) process.stderr.write(`warning: ${problem}\\n`);\n\n const controller = new AbortController();\n // A second interrupt exits rather than waiting: the first asks the turn to\n // stop, and a turn wedged in a subprocess should not trap the user.\n let interrupts = 0;\n const onSigint = () => {\n interrupts += 1;\n if (interrupts === 1) controller.abort();\n else process.exit(130);\n };\n process.on('SIGINT', onSigint);\n\n let exitCode = 0;\n let subtype: ResultRecord['subtype'] = 'success';\n let failure: { kind: string; message: string } | undefined;\n\n try {\n let image: Awaited<ReturnType<typeof loadImage>> | undefined;\n if (typeof flags.image === 'string') {\n try {\n image = await loadImage(flags.image, process.cwd());\n } catch (error) {\n process.stderr.write(`image: ${(error as Error).message}\\n`);\n exitCode = 2;\n subtype = 'error';\n failure = { kind: 'invalid_image', message: (error as Error).message };\n }\n }\n const input = image ? [{ type: 'text' as const, text: prompt }, image] : prompt;\n for await (const event of failure\n ? ([] as AgentEvent[])\n : session.agent.runTurn(input, controller.signal)) {\n emit(event);\n if (event.type === 'error') {\n exitCode = 1;\n subtype = 'error';\n failure = { kind: event.error.kind, message: event.error.message };\n }\n if (event.type === 'turn_end' && event.reason === 'aborted') {\n exitCode = 130;\n subtype = 'interrupted';\n }\n if (event.type === 'turn_end' && event.reason === 'max_steps') {\n exitCode = 1;\n subtype = 'max_steps';\n }\n // Its own exit code: a script that set a ceiling needs to tell \"stopped\n // because it ran out of budget\" from \"stopped because it failed\".\n if (event.type === 'turn_end' && event.reason === 'budget') {\n exitCode = 3;\n subtype = 'budget';\n }\n }\n } finally {\n process.off('SIGINT', onSigint);\n await session.dispose();\n }\n\n if (format === 'text') {\n process.stdout.write('\\n');\n return exitCode;\n }\n\n // The same record ends a stream and stands alone as the whole of `json`, so a\n // consumer that reads only the last line of a stream and one that parses a\n // single object are reading the same thing.\n const result: ResultRecord = {\n schema: SCHEMA,\n type: 'result',\n subtype,\n isError: subtype !== 'success',\n text: emit.text(),\n costUsd: session.agent.costUsd,\n durationMs: Date.now() - startedAt,\n numMessages: session.agent.history.length,\n model: `${session.agent.model.provider.id}/${session.agent.model.model.id}`,\n permissionMode: session.agent.permissionMode,\n ...(session.store ? { sessionId: session.store.id } : {}),\n ...(failure ? { error: failure } : {}),\n };\n process.stdout.write(\n format === 'json' ? `${JSON.stringify(result, null, 2)}\\n` : `${JSON.stringify(result)}\\n`,\n );\n\n return exitCode;\n}\n\nfunction parseReasoningEffort(\n value: string | boolean | undefined,\n): ReasoningEffort | null | 'invalid' | undefined {\n if (value === undefined) return undefined;\n if (value === 'auto') return null;\n if (typeof value !== 'string') return 'invalid';\n return ['none', 'low', 'medium', 'high', 'xhigh'].includes(value)\n ? (value as ReasoningEffort)\n : 'invalid';\n}\n\nfunction resumeFrom(flags: ParsedArgs['flags']) {\n if (typeof flags.resume === 'string') return { resume: { path: flags.resume } } as const;\n if (flags.continue === true || flags.resume === true)\n return { resume: { latest: true } } as const;\n return {};\n}\n\n/**\n * Renders events for one of three consumers: a person reading a terminal, a\n * script parsing one JSON object, or a program reading a JSON stream. All three\n * see tool activity - a headless run that printed only prose would hide the fact\n * that the agent edited files.\n */\nfunction makeEmitter(format: OutputFormat) {\n let text = '';\n\n const emit = (event: AgentEvent): void => {\n if (event.type === 'text_delta') text += event.text;\n\n if (format === 'stream-json') {\n const record = toStreamRecord(event);\n if (record) process.stdout.write(`${JSON.stringify(record)}\\n`);\n return;\n }\n if (format !== 'text') return;\n\n switch (event.type) {\n case 'text_delta':\n process.stdout.write(event.text);\n break;\n case 'tool_start':\n process.stderr.write(`\\n· ${event.call.toolName}\\n`);\n break;\n case 'tool_end':\n if (event.result.isError) {\n process.stderr.write(` ! ${describe(event.result.output)}\\n`);\n }\n break;\n case 'hook':\n // A hook that stopped something is why the run did what it did; leaving\n // it out would make the transcript unexplainable.\n if (event.blocked)\n process.stderr.write(`\\n${event.event} hook blocked: ${event.blocked}\\n`);\n for (const problem of event.problems) process.stderr.write(` ! ${problem}\\n`);\n break;\n case 'subagent':\n process.stderr.write(`\\n· subagent \"${event.description}\" (${event.steps} steps)\\n`);\n break;\n case 'error':\n process.stderr.write(`\\nerror: ${event.error.message}\\n`);\n break;\n case 'turn_end':\n if (event.reason === 'aborted') process.stderr.write('\\ninterrupted\\n');\n if (event.reason === 'max_steps') process.stderr.write('\\nstopped: step limit reached\\n');\n if (event.reason === 'budget') process.stderr.write('\\nstopped: cost budget reached\\n');\n break;\n default:\n break;\n }\n };\n\n emit.text = () => text;\n return emit;\n}\n\nfunction describe(output: { type: string; value: unknown }): string {\n return output.type === 'text' ? (String(output.value).split('\\n')[0] ?? '') : output.type;\n}\n\nfunction reportStartupFailure(error: unknown): number {\n if (error instanceof UnknownModelError) {\n process.stderr.write(`${error.message}\\n\\nrun \\`earshot models\\` to see what is available\\n`);\n return 2;\n }\n if (error instanceof MissingCredentialsError) {\n process.stderr.write(`${error.message}\\n`);\n return 3;\n }\n if (error instanceof NoSessionToResumeError) {\n process.stderr.write(`${error.message}\\n`);\n return 2;\n }\n if (error instanceof ShellNotFoundError) {\n process.stderr.write(`${error.message}\\n`);\n return 4;\n }\n throw error;\n}\n",
86
+ "import type {\n Agent,\n CreatedSession,\n MemoryCandidate,\n MemoryScope,\n PermissionMode,\n PermissionRequest,\n PromptChoice,\n TodoItem,\n UserPrompt,\n} from '@earshot/core';\nimport {\n deleteMemory,\n detectPreference,\n expandCommand,\n isPermissionMode,\n listSessions,\n loadMemories,\n openInEditor,\n PERMISSION_MODES,\n PLAN_PROMPT,\n planPath,\n readPlan,\n refreshSystemPrompt,\n saveMemory,\n savePlan,\n} from '@earshot/core';\nimport type { ReasoningEffort } from '@earshot/providers';\nimport { Box, Static, Text, useApp, useInput } from 'ink';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { type CommandName, commandRows, findCommand } from './commands.ts';\nimport { Activity } from './components/activity.tsx';\nimport { CommandMenu, menuEntries } from './components/command-menu.tsx';\nimport { Markdown } from './components/markdown.tsx';\nimport { MemoryCapture } from './components/memory-capture.tsx';\nimport { PermissionPrompt } from './components/permission.tsx';\nimport { QuestionPrompt } from './components/question.tsx';\nimport { ReasoningPicker } from './components/reasoning-picker.tsx';\nimport { StatusLine } from './components/status.tsx';\nimport { TextInput } from './components/text-input.tsx';\nimport { ToolBlock } from './components/tool-block.tsx';\nimport { Onboarding, type OnboardingOptions, type OnboardingResult } from './onboarding.tsx';\nimport { SessionPicker } from './sessions.tsx';\nimport { theme } from './theme.ts';\n\n/**\n * A finished piece of scrollback.\n *\n * Once an item is here it never changes, which is the contract `Static` needs:\n * Ink writes those rows to the terminal once and then leaves them alone, so they\n * become real scrollback the user can select and scroll with their own terminal.\n * Only the live region below is re-rendered, which is what keeps a long session\n * from repainting thousands of rows on every token.\n */\nexport type ScrollItem =\n | { kind: 'user'; id: string; text: string }\n | { kind: 'assistant'; id: string; text: string }\n | { kind: 'tool'; id: string; name: string; title?: string; output?: string; isError?: boolean }\n | { kind: 'notice'; id: string; text: string; color?: string }\n | { kind: 'reasoning'; id: string; text: string };\n\nexport interface AppProps {\n session: CreatedSession;\n model: string;\n /** Run immediately on start, for `earshot \"do the thing\"`. */\n initialPrompt?: UserPrompt;\n modelOptions?: OnboardingOptions;\n onResume?: (path: string) => void;\n}\n\nlet sequence = 0;\nconst nextId = () => `item_${sequence++}`;\n\nfunction promptLabel(prompt: UserPrompt): string {\n if (typeof prompt === 'string') return prompt;\n return prompt\n .map((part) => (part.type === 'text' ? part.text : `[attached ${part.mediaType} image]`))\n .join('\\n');\n}\n\nexport function App({\n session,\n model: initialModel,\n initialPrompt,\n modelOptions,\n onResume,\n}: AppProps) {\n const { exit } = useApp();\n const agent: Agent = session.agent;\n\n // State rather than the prop alone: `/model` swaps it mid-session, and the\n // status line and the system prompt both have to follow.\n const [model, setModel] = useState(initialModel);\n\n const [items, setItems] = useState<ScrollItem[]>(() =>\n session.problems.map((problem) => ({\n kind: 'notice' as const,\n id: nextId(),\n text: `warning: ${problem}`,\n color: theme.warning,\n })),\n );\n const [live, setLive] = useState('');\n const [reasoningLive, setReasoningLive] = useState('');\n const [showThinking, setShowThinking] = useState(true);\n const [activity, setActivity] = useState<'preparing' | 'thinking' | 'reasoning' | undefined>();\n const [choosingModel, setChoosingModel] = useState(false);\n const [choosingReasoning, setChoosingReasoning] = useState(false);\n const [sessionChoices, setSessionChoices] = useState<\n Awaited<ReturnType<typeof listSessions>> | undefined\n >();\n const [runningTool, setRunningTool] = useState<string | undefined>();\n const [input, setInput] = useState('');\n /** Highlighted row of the `/` menu; reset whenever the line changes. */\n const [menuIndex, setMenuIndex] = useState(0);\n const [busy, setBusy] = useState(false);\n const [mode, setMode] = useState<PermissionMode>(agent.permissionMode);\n const [cost, setCost] = useState(0);\n const [todos, setTodos] = useState<TodoItem[]>([]);\n const [queued, setQueued] = useState(0);\n const [candidate, setCandidate] = useState<MemoryCandidate | undefined>();\n const [context, setContext] = useState(() => agent.contextUse);\n const [compacted, setCompacted] = useState(0);\n\n const [pending, setPending] = useState<\n | { request: PermissionRequest; reason: string; resolve: (choice: PromptChoice) => void }\n | undefined\n >();\n const [question, setQuestion] = useState<\n { question: string; options?: string[]; resolve: (answer: string) => void } | undefined\n >();\n\n const controller = useRef<AbortController | undefined>(undefined);\n const push = useCallback((item: ScrollItem) => setItems((current) => [...current, item]), []);\n\n // The prompt and ask callbacks are installed once and read through refs, so a\n // re-render never leaves the agent holding a stale closure over old state.\n const pendingRef = useRef(setPending);\n pendingRef.current = setPending;\n const questionRef = useRef(setQuestion);\n questionRef.current = setQuestion;\n\n useEffect(() => {\n session.installPrompt(\n (request, reason) =>\n new Promise<PromptChoice>((resolve) => {\n pendingRef.current({ request, reason, resolve });\n }),\n );\n session.installAsk(\n (q, options) =>\n new Promise<string>((resolve) => {\n questionRef.current({ question: q, ...(options ? { options } : {}), resolve });\n }),\n );\n }, [session]);\n\n /** The mode to go back to once a plan is approved or abandoned. */\n const modeBeforePlan = useRef<PermissionMode | undefined>(undefined);\n /** The last thing the model said, which in plan mode is the plan itself. */\n const lastAssistantText = useRef('');\n\n const runTurn = useCallback(\n async (prompt: UserPrompt) => {\n setBusy(true);\n setActivity('preparing');\n // Cleared per turn: a stale answer read back as this turn's plan is worse\n // than no plan at all.\n lastAssistantText.current = '';\n push({ kind: 'user', id: nextId(), text: promptLabel(prompt) });\n\n const abort = new AbortController();\n controller.current = abort;\n let assistantText = '';\n let reasoningText = '';\n let reasoningFlushed = false;\n\n try {\n for await (const event of agent.runTurn(prompt, abort.signal)) {\n switch (event.type) {\n case 'model_start':\n setActivity('thinking');\n break;\n case 'text_delta':\n if (!reasoningFlushed && reasoningText.trim() !== '' && showThinking) {\n push({ kind: 'reasoning', id: nextId(), text: reasoningText.trimEnd() });\n reasoningFlushed = true;\n setReasoningLive('');\n }\n setActivity(undefined);\n assistantText += event.text;\n setLive(assistantText);\n break;\n case 'reasoning_delta':\n setActivity('reasoning');\n reasoningText += event.text;\n if (showThinking) setReasoningLive(reasoningText);\n break;\n case 'intent':\n // The intent itself is the assistant text already on screen just\n // above the tool block, so only its absence is worth a line: a\n // batch that arrived without a reason is what this exists to show.\n if (event.text === undefined) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `about to run ${event.calls} tool call${\n event.calls === 1 ? '' : 's'\n } without saying why`,\n color: theme.warning,\n });\n }\n break;\n case 'tool_start':\n setActivity(undefined);\n // The assistant's prose is flushed to scrollback before the tool\n // block, so the two never re-order once the tool finishes.\n if (assistantText.trim() !== '') {\n push({ kind: 'assistant', id: nextId(), text: assistantText.trimEnd() });\n assistantText = '';\n setLive('');\n }\n setRunningTool(event.call.toolName);\n break;\n case 'tool_end': {\n setRunningTool(undefined);\n const output = event.result.output.type === 'text' ? event.result.output.value : '';\n push({\n kind: 'tool',\n id: nextId(),\n name: event.toolName,\n ...(event.result.title ? { title: event.result.title } : {}),\n output,\n ...(event.result.isError ? { isError: true } : {}),\n });\n setTodos(agent.todos.list());\n break;\n }\n case 'usage':\n setCost(agent.costUsd);\n setContext(agent.contextUse);\n break;\n case 'budget':\n push({\n kind: 'notice',\n id: nextId(),\n text:\n event.raisedTo === undefined\n ? `stopped: $${event.spentUsd.toFixed(2)} spent against a ` +\n `$${event.limitUsd.toFixed(2)} budget`\n : `budget raised to $${event.raisedTo.toFixed(2)} after ` +\n `$${event.spentUsd.toFixed(2)} spent`,\n color: theme.warning,\n });\n break;\n case 'verification':\n // Shown to the user as it was shown to the model: the command, the\n // exit code and the output, none of it summarised.\n push({\n kind: 'tool',\n id: nextId(),\n name: event.result.command,\n title: `${event.result.command} - exit ${event.result.exitCode ?? 'killed'}`,\n output: event.result.output,\n ...(event.result.exitCode === 0 ? {} : { isError: true }),\n });\n break;\n case 'subagent':\n push({\n kind: 'notice',\n id: nextId(),\n text: `subagent \"${event.description}\": ${event.steps} step${\n event.steps === 1 ? '' : 's'\n }, $${event.costUsd.toFixed(4)}`,\n });\n break;\n case 'hook':\n // A hook that blocked something is the reason the agent did not do\n // it, so it is said out loud rather than left for the model to\n // paraphrase. Problems are shown too: a hook that failed silently\n // is one the user goes on believing is protecting them.\n if (event.blocked) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `${event.event} hook blocked this: ${event.blocked}`,\n color: theme.warning,\n });\n }\n for (const problem of event.problems) {\n push({ kind: 'notice', id: nextId(), text: problem, color: theme.warning });\n }\n break;\n case 'compacted':\n setCompacted((count) => count + event.replaced);\n push({\n kind: 'notice',\n id: nextId(),\n text: `compacted: ${event.replaced} earlier messages are now a summary`,\n });\n break;\n case 'error':\n setActivity(undefined);\n push({\n kind: 'notice',\n id: nextId(),\n text: `error: ${event.error.message}`,\n color: theme.danger,\n });\n break;\n case 'turn_end':\n if (event.reason === 'aborted') {\n push({\n kind: 'notice',\n id: nextId(),\n text: 'interrupted',\n color: theme.warning,\n });\n }\n if (event.reason === 'max_steps') {\n push({\n kind: 'notice',\n id: nextId(),\n text: 'stopped: step limit reached',\n color: theme.warning,\n });\n }\n break;\n default:\n break;\n }\n setQueued(agent.pendingSteers);\n }\n } finally {\n if (!reasoningFlushed && reasoningText.trim() !== '' && showThinking) {\n push({ kind: 'reasoning', id: nextId(), text: reasoningText.trimEnd() });\n }\n if (assistantText.trim() !== '') {\n lastAssistantText.current = assistantText;\n push({ kind: 'assistant', id: nextId(), text: assistantText.trimEnd() });\n }\n setLive('');\n setReasoningLive('');\n setActivity(undefined);\n setRunningTool(undefined);\n setBusy(false);\n setQueued(agent.pendingSteers);\n controller.current = undefined;\n }\n },\n [agent, push, showThinking],\n );\n\n const started = useRef(false);\n useEffect(() => {\n if (started.current || !initialPrompt) return;\n started.current = true;\n void runTurn(initialPrompt);\n }, [initialPrompt, runTurn]);\n\n /**\n * Lists what is remembered, with the sentence each rule came from. Memory the\n * user cannot inspect is memory they cannot trust, so provenance is shown\n * here rather than hidden in the file.\n */\n const showMemories = useCallback(\n async (argument?: string) => {\n const [verb, ...rest] = (argument ?? '').split(/\\s+/);\n const id = rest.join(' ').trim();\n if (verb === 'forget' && id) {\n const gone = await deleteMemory(id, agent.cwd);\n if (gone) await refreshSystemPrompt(agent, model, session.skills);\n push({\n kind: 'notice',\n id: nextId(),\n text: gone ? `forgot ${id}` : `no memory called \"${id}\"`,\n ...(gone ? {} : { color: theme.warning }),\n });\n return;\n }\n\n const memories = await loadMemories(agent.cwd);\n if (memories.length === 0) {\n push({ kind: 'notice', id: nextId(), text: 'nothing remembered yet' });\n return;\n }\n const lines = memories.map((memory) => {\n const when = memory.created.slice(0, 10);\n const why = memory.source ? `\\n from \"${memory.source}\" on ${when}` : '';\n return ` [${memory.id}] (${memory.scope}) ${memory.text}${why}`;\n });\n push({\n kind: 'notice',\n id: nextId(),\n text: `${lines.join('\\n')}\\n\\n /memory forget <id> removes one`,\n });\n },\n [agent, model, push, session.skills],\n );\n\n const remember = useCallback(\n async (scope: MemoryScope) => {\n if (!candidate) return;\n setCandidate(undefined);\n const saved = await saveMemory({ ...candidate, scope }, agent.cwd).catch(() => undefined);\n if (!saved) {\n push({ kind: 'notice', id: nextId(), text: 'could not save that', color: theme.warning });\n return;\n }\n // Applied from the next model call, not the next session.\n await refreshSystemPrompt(agent, model, session.skills);\n push({\n kind: 'notice',\n id: nextId(),\n text: `remembered [${saved.id}] (${scope}) - /memory to review or forget it`,\n });\n },\n [agent, candidate, model, push, session.skills],\n );\n\n /**\n * `/tree`, `/rewind`, `/fork` and `/undo`.\n *\n * The numbering is over the user's own prompts rather than over every entry:\n * \"go back to before I asked for the refactor\" is how people think about a\n * session, and an entry id is not something anyone can pick out of a list.\n */\n const sessionTree = useCallback(\n async (name: string, argument?: string) => {\n const entries = await session.branch();\n const prompts = entries.filter(\n (entry) =>\n entry.type === 'message' &&\n entry.message.role === 'user' &&\n entry.message.content.some(\n (part) => part.type === 'text' && !part.text.startsWith('<self-check>'),\n ),\n );\n\n if (name === 'tree' || !argument) {\n if (prompts.length === 0) {\n push({ kind: 'notice', id: nextId(), text: 'nothing in this session yet' });\n return;\n }\n const lines = prompts.map((entry, index) => {\n const text =\n entry.type === 'message'\n ? (entry.message.content.find((part) => part.type === 'text')?.text ?? '')\n : '';\n return ` ${index + 1}. ${text.split('\\n')[0]?.slice(0, 70) ?? ''}`;\n });\n push({\n kind: 'notice',\n id: nextId(),\n text: `${lines.join('\\n')}\\n\\n /rewind <n> goes back to one · /fork <n> branches from it`,\n });\n return;\n }\n\n const index = Number.parseInt(argument, 10) - 1;\n const target = prompts[index];\n if (!target) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `no prompt ${argument} in this session - /tree lists them`,\n color: theme.warning,\n });\n return;\n }\n // The entry before the chosen prompt: rewinding \"to\" a prompt means the\n // state the session was in when it was typed, not after it ran.\n const previous = entries[entries.indexOf(target) - 1] ?? target;\n\n if (name === 'rewind') {\n const kept = await session.rewindTo(previous.id);\n push({\n kind: 'notice',\n id: nextId(),\n text: `rewound to before prompt ${index + 1}; ${kept} message${kept === 1 ? '' : 's'} kept. Nothing was deleted - the rest is still in the transcript as another branch.`,\n });\n return;\n }\n\n const forked = await session.fork(previous.id);\n push({\n kind: 'notice',\n id: nextId(),\n text: forked\n ? `forked from prompt ${index + 1} into ${forked}; this session continues there and the original is untouched`\n : 'could not fork this session',\n ...(forked ? {} : { color: theme.warning }),\n });\n },\n [push, session],\n );\n\n const undoLast = useCallback(async () => {\n const result = await session.undo();\n if (!result) {\n push({ kind: 'notice', id: nextId(), text: 'nothing to undo', color: theme.warning });\n return;\n }\n const created = result.wasCreated.length\n ? ` Left in place because the batch created them: ${result.wasCreated.join(', ')}.`\n : '';\n push({\n kind: 'notice',\n id: nextId(),\n text: result.restored.length\n ? `undid ${result.label}: restored ${result.restored.join(', ')}.${created}`\n : `nothing to restore from ${result.label}.${created}`,\n });\n }, [push, session]);\n\n /**\n * `/plan` - draft, edit, approve.\n *\n * The plan is a file, and approving reads it back from disk rather than using\n * what the model wrote. That is the difference between a plan and a prompt:\n * whatever the user changed is what gets pinned, and if they changed nothing\n * it is still their decision that it stands.\n */\n const plan = useCallback(\n async (argument?: string) => {\n const path = planPath(session.store?.id ?? 'scratch');\n const [verb = '', ...rest] = (argument ?? '').split(/\\s+/);\n const task = [verb, ...rest].join(' ').trim();\n\n if (verb === 'show') {\n const text = await readPlan(path);\n push({\n kind: 'notice',\n id: nextId(),\n text: text ? `${path}\\n\\n${text}` : `no plan yet at ${path}`,\n });\n return;\n }\n if (verb === 'edit') {\n const result = await openInEditor(path);\n push({\n kind: 'notice',\n id: nextId(),\n text: result.message,\n ...(result.edited ? {} : { color: theme.warning }),\n });\n return;\n }\n if (verb === 'approve') {\n const text = await readPlan(path);\n if (!text) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `there is no plan at ${path} to approve`,\n color: theme.warning,\n });\n return;\n }\n agent.setPlan(text);\n // Back to whatever the session was in before planning: staying in plan\n // mode after approving one is the one thing the user certainly did not\n // ask for.\n const restored = modeBeforePlan.current ?? 'ask';\n agent.setPermissionMode(restored);\n setMode(restored);\n modeBeforePlan.current = undefined;\n push({\n kind: 'notice',\n id: nextId(),\n text: `plan approved and pinned for this run; permission mode: ${restored}`,\n });\n return;\n }\n if (verb === 'clear') {\n agent.setPlan(undefined);\n push({ kind: 'notice', id: nextId(), text: 'plan unpinned' });\n return;\n }\n if (task === '') {\n push({\n kind: 'notice',\n id: nextId(),\n text: 'usage: /plan <what you want planned>, then /plan edit, /plan approve',\n color: theme.warning,\n });\n return;\n }\n\n modeBeforePlan.current = agent.permissionMode;\n agent.setPermissionMode('plan');\n setMode('plan');\n await runTurn(`${task}\\n\\n${PLAN_PROMPT}`);\n\n // Written from the last thing the model said, which in plan mode is the\n // plan, because every mutating tool was refused.\n const drafted = lastAssistantText.current.trim();\n if (drafted === '') {\n push({\n kind: 'notice',\n id: nextId(),\n text: 'the model produced no plan to write',\n color: theme.warning,\n });\n return;\n }\n await savePlan(path, drafted);\n push({\n kind: 'notice',\n id: nextId(),\n text: `plan written to ${path}\\n/plan edit to change it, /plan approve to pin it`,\n });\n },\n [agent, push, runTurn, session.store],\n );\n\n /**\n * `/model` - show what is in use, or switch.\n *\n * The switch goes through the agent, which resolves the reference against the\n * same registry and credential order the CLI uses. A reference with no\n * credentials leaves the session on the model it had: half a switch would\n * price one model's tokens at another's rates.\n */\n const switchModel = useCallback(\n async (ref?: string) => {\n if (!ref) {\n if (modelOptions) setChoosingModel(true);\n else push({ kind: 'notice', id: nextId(), text: 'model picker is unavailable' });\n return;\n }\n try {\n const resolved = await agent.changeModel(ref);\n const next = `${resolved.provider.id}/${resolved.model.id}`;\n const effort = modelOptions?.reasoningFor?.(next);\n agent.setReasoningEffort(effort);\n setModel(next);\n // The system prompt names the model; leaving the old name in it would\n // tell the new model it is something else.\n await refreshSystemPrompt(agent, next, session.skills);\n await modelOptions?.remember?.(next, effort, 'project');\n await session.recordConfiguration({ model: next, reasoningEffort: effort ?? null });\n push({\n kind: 'notice',\n id: nextId(),\n text: `model: ${next}${effort ? ` · ${effort}` : ''}`,\n });\n } catch (error) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `${(error as Error).message}`,\n color: theme.warning,\n });\n }\n },\n [agent, modelOptions, push, session],\n );\n\n const finishModelChoice = useCallback(\n async (result: OnboardingResult) => {\n if (result.outcome === 'quit' || !result.model) {\n setChoosingModel(false);\n return;\n }\n try {\n const resolved = await agent.changeModel(result.model);\n const next = `${resolved.provider.id}/${resolved.model.id}`;\n agent.setReasoningEffort(result.reasoningEffort);\n setModel(next);\n await refreshSystemPrompt(agent, next, session.skills);\n await modelOptions?.remember?.(next, result.reasoningEffort, result.scope ?? 'project');\n await session.recordConfiguration({\n model: next,\n reasoningEffort: result.reasoningEffort ?? null,\n });\n push({\n kind: 'notice',\n id: nextId(),\n text: `model: ${next}${result.reasoningEffort ? ` · ${result.reasoningEffort}` : ' · auto'}`,\n });\n } catch (error) {\n push({\n kind: 'notice',\n id: nextId(),\n text: (error as Error).message,\n color: theme.warning,\n });\n } finally {\n setChoosingModel(false);\n }\n },\n [agent, modelOptions, push, session, session.skills],\n );\n\n const changeReasoning = useCallback(\n async (argument?: string) => {\n const value = argument?.trim().toLowerCase();\n if (!value) {\n if (!agent.model.model.capabilities.reasoning) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `${agent.model.model.name} does not support reasoning`,\n color: theme.warning,\n });\n } else setChoosingReasoning(true);\n return;\n }\n const effort = value === 'auto' ? undefined : (value as ReasoningEffort);\n if (value !== 'auto' && !['none', 'low', 'medium', 'high', 'xhigh'].includes(value)) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `unknown reasoning effort \"${value}\"`,\n color: theme.warning,\n });\n return;\n }\n if (!agent.model.model.capabilities.reasoning && effort !== undefined) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `${agent.model.model.name} does not support reasoning`,\n color: theme.warning,\n });\n return;\n }\n agent.setReasoningEffort(effort);\n await modelOptions?.remember?.(model, effort, 'project');\n await session.recordConfiguration({ reasoningEffort: effort ?? null });\n push({ kind: 'notice', id: nextId(), text: `reasoning: ${effort ?? 'auto'}` });\n },\n [agent, model, modelOptions, push, session],\n );\n\n const finishReasoningChoice = useCallback(\n async (effort: ReasoningEffort | undefined) => {\n setChoosingReasoning(false);\n agent.setReasoningEffort(effort);\n await modelOptions?.remember?.(model, effort, 'project');\n await session.recordConfiguration({ reasoningEffort: effort ?? null });\n push({ kind: 'notice', id: nextId(), text: `reasoning: ${effort ?? 'auto'}` });\n },\n [agent, model, modelOptions, push, session],\n );\n\n /** `/compact` - the 80% compaction, asked for early. */\n const compactNow = useCallback(async () => {\n const abort = new AbortController();\n controller.current = abort;\n setBusy(true);\n try {\n let compactedAnything = false;\n for await (const event of agent.compactNow(abort.signal)) {\n if (event.type === 'compacted') {\n compactedAnything = true;\n setCompacted((count) => count + event.replaced);\n push({\n kind: 'notice',\n id: nextId(),\n text: `compacted: ${event.replaced} earlier messages are now a summary`,\n });\n }\n }\n if (!compactedAnything) {\n push({ kind: 'notice', id: nextId(), text: 'nothing to compact yet' });\n }\n } catch (error) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `could not compact: ${(error as Error).message}`,\n color: theme.warning,\n });\n } finally {\n setBusy(false);\n setContext(agent.contextUse);\n controller.current = undefined;\n }\n }, [agent, push]);\n\n /**\n * One handler per registry entry, keyed by name.\n *\n * `Record<CommandName, ...>` is the whole point: a command added to\n * `COMMANDS` with no handler here fails to compile, and a handler for a name\n * the registry does not list fails to compile too. The menu and docs/cli.md\n * read the same registry, so \"listed but not dispatchable\" and \"dispatchable\n * but unlisted\" are both unreachable rather than merely unlikely.\n */\n const handlers: Record<CommandName, (argument?: string) => void> = {\n exit: () => exit(),\n help: () => push({ kind: 'notice', id: nextId(), text: describeCommands(session) }),\n model: (argument) => void switchModel(argument),\n reasoning: (argument) => void changeReasoning(argument),\n thinking: (argument) => {\n if (argument !== 'show' && argument !== 'hide') {\n push({\n kind: 'notice',\n id: nextId(),\n text: `thinking: ${showThinking ? 'shown' : 'hidden'}\\n/thinking <show|hide>`,\n });\n return;\n }\n const shown = argument === 'show';\n setShowThinking(shown);\n if (!shown) setReasoningLive('');\n push({ kind: 'notice', id: nextId(), text: `thinking: ${shown ? 'shown' : 'hidden'}` });\n },\n compact: () => void compactNow(),\n context: () => {\n const { tokens, window } = agent.contextUse;\n const percent = window > 0 ? Math.round((tokens / window) * 100) : 0;\n const files = agent.touchedFiles;\n push({\n kind: 'notice',\n id: nextId(),\n text: [\n ` model ${model}`,\n ` context ~${tokens.toLocaleString()} of ${window.toLocaleString()} tokens (${percent}%)`,\n ` dropped ${compacted} earlier message${compacted === 1 ? '' : 's'} replaced by a summary`,\n ` files ${files.length === 0 ? 'none touched yet' : files.join(', ')}`,\n '',\n ' /compact summarises now rather than waiting for 80%',\n ].join('\\n'),\n });\n },\n cost: (argument) => {\n if (argument !== undefined && argument !== '') {\n const amount = Number.parseFloat(argument.replace(/^\\$/, ''));\n if (Number.isNaN(amount)) {\n push({\n kind: 'notice',\n id: nextId(),\n text: `usage: /cost [usd] - \"${argument}\" is not an amount`,\n color: theme.warning,\n });\n return;\n }\n // Zero removes the ceiling, the same way `--max-cost 0` does, so the two\n // ways of setting a budget cannot disagree about how to turn one off.\n agent.setBudget(amount > 0 ? amount : undefined);\n push({\n kind: 'notice',\n id: nextId(),\n text: amount > 0 ? `budget: $${amount.toFixed(2)}` : 'budget removed',\n });\n return;\n }\n const budget = agent.budgetUsd;\n push({\n kind: 'notice',\n id: nextId(),\n text:\n ` spent $${agent.costUsd.toFixed(4)}\\n` +\n ` budget ${budget === undefined ? 'none - /cost <usd> sets one' : `$${budget.toFixed(2)}`}`,\n });\n },\n todo: () => {\n const todos = agent.todos.list();\n push({\n kind: 'notice',\n id: nextId(),\n text:\n todos.length === 0\n ? 'no todos in this session'\n : todos\n .map(\n (todo) =>\n ` ${todo.status === 'done' ? 'x' : todo.status === 'in_progress' ? '>' : ' '} ${todo.text}`,\n )\n .join('\\n'),\n });\n },\n permissions: () => {\n const rules = agent.permissionRules;\n push({\n kind: 'notice',\n id: nextId(),\n text: [\n ` mode ${agent.permissionMode} (/mode changes it)`,\n ...(rules.length === 0\n ? [' rules none configured']\n : [\n ' rules (deny always wins, whatever the mode or scope)',\n ...rules.map(\n (rule) => ` ${rule.effect.padEnd(5)} ${rule.source} [${rule.scope}]`,\n ),\n ]),\n ].join('\\n'),\n });\n },\n init: () => void runTurn(INIT_PROMPT),\n\n mode: (argument) => {\n if (argument && isPermissionMode(argument)) {\n agent.setPermissionMode(argument);\n setMode(argument);\n push({ kind: 'notice', id: nextId(), text: `permission mode: ${argument}` });\n } else {\n push({\n kind: 'notice',\n id: nextId(),\n text: `usage: /mode <${PERMISSION_MODES.join('|')}>`,\n color: theme.warning,\n });\n }\n },\n memory: (argument) => void showMemories(argument),\n tree: (argument) => void sessionTree('tree', argument),\n sessions: () => {\n void listSessions(agent.cwd).then((saved) => setSessionChoices(saved));\n },\n rewind: (argument) => void sessionTree('rewind', argument),\n fork: (argument) => void sessionTree('fork', argument),\n undo: () => void undoLast(),\n plan: (argument) => void plan(argument),\n skills: () => push({ kind: 'notice', id: nextId(), text: describeExtensions(session) }),\n };\n const handlersRef = useRef(handlers);\n handlersRef.current = handlers;\n\n const handleCommand = useCallback(\n (command: string) => {\n // Split once, keeping the remainder: `split(/\\s+/, 2)` discards everything\n // after the second field, which silently drops the argument of any command\n // that takes more than one word.\n const body = command.slice(1).trim();\n const space = body.search(/\\s/);\n const name = space === -1 ? body : body.slice(0, space);\n const argument = space === -1 ? undefined : body.slice(space + 1).trim();\n\n const spec = findCommand(name);\n if (spec) {\n // Checked once, here, rather than inside each handler that needs it.\n // Three copies of this branch is how `/plan` and `/tree` came to phrase\n // the same refusal differently.\n if (spec.idleOnly && busy) {\n push({\n kind: 'notice',\n id: nextId(),\n text: 'finish or interrupt the current turn first (esc)',\n color: theme.warning,\n });\n return;\n }\n handlersRef.current[spec.name as CommandName](argument);\n return;\n }\n\n // A user-defined command is expanded into a prompt and run as one. It is\n // not a second way to reach the tools: whatever the file asks for goes\n // through the same turn, and the same gate, as anything typed by hand.\n const custom = session.commands.find((entry) => entry.name === name);\n if (custom) {\n const prompt = expandCommand(custom, argument ?? '');\n if (prompt.trim() === '') {\n push({\n kind: 'notice',\n id: nextId(),\n text: `/${name} expanded to nothing`,\n color: theme.warning,\n });\n return;\n }\n if (busy) {\n agent.steer(prompt);\n setQueued(agent.pendingSteers);\n push({ kind: 'user', id: nextId(), text: command });\n return;\n }\n void runTurn(prompt);\n return;\n }\n\n push({\n kind: 'notice',\n id: nextId(),\n text: `unknown command \"${name}\"`,\n color: theme.warning,\n });\n },\n [agent, busy, push, runTurn, session],\n );\n\n const submit = useCallback(\n (text: string) => {\n // Enter is resolved here rather than in the app's `useInput`, because both\n // handlers see the same keystroke and Ink guarantees no order between\n // them: deciding in two places is how a command would get completed and\n // run at once, or run one row off from the one that was highlighted.\n const entry = menuOpenRef.current ? menuEntriesRef.current[selectedRef.current] : undefined;\n if (entry) {\n setInput('');\n setMenuIndex(0);\n handleCommand(entry.insert);\n return;\n }\n\n const trimmed = text.trim();\n setInput('');\n if (trimmed === '') return;\n\n if (trimmed.startsWith('/')) {\n handleCommand(trimmed);\n return;\n }\n // Offered, never stored: a wrong rule saved silently would follow the user\n // into every future session with no sign of where it came from.\n setCandidate(detectPreference(trimmed));\n if (busy) {\n // Steering, not queueing a second turn: the agent injects it at the next\n // model call so the user redirects without losing work in flight.\n agent.steer(trimmed);\n setQueued(agent.pendingSteers);\n push({ kind: 'user', id: nextId(), text: trimmed });\n return;\n }\n void runTurn(trimmed);\n },\n [agent, busy, push, runTurn, handleCommand],\n );\n\n // Input is disabled while a prompt is open so the two do not both consume keys.\n const inputActive =\n !pending && !question && !choosingModel && !choosingReasoning && !sessionChoices;\n\n // Open while the line is a bare command name being typed. A space means an\n // argument is being written, and the user has already chosen.\n const menuOpen = inputActive && input.startsWith('/') && !input.includes(' ');\n const entries = menuOpen ? menuEntries(input.slice(1), session.commands, busy) : [];\n const selected = Math.min(menuIndex, Math.max(0, entries.length - 1));\n\n // Read by `submit`, which runs from TextInput's own key handler and would\n // otherwise close over the previous render's list.\n const menuOpenRef = useRef(menuOpen);\n menuOpenRef.current = menuOpen;\n const menuEntriesRef = useRef(entries);\n menuEntriesRef.current = entries;\n const selectedRef = useRef(selected);\n selectedRef.current = selected;\n\n useInput(\n (input_, key) => {\n // The menu adds no `useInput` of its own: a second handler would race this\n // one for the same keystroke. It is a pure render of state owned here, and\n // this branch is the only place its keys are interpreted.\n if (menuOpen && entries.length > 0) {\n if (key.upArrow) {\n setMenuIndex((current) => (current <= 0 ? entries.length - 1 : current - 1));\n return;\n }\n if (key.downArrow) {\n setMenuIndex((current) => (current >= entries.length - 1 ? 0 : current + 1));\n return;\n }\n if (key.tab) {\n // Completes without running: choosing a command and committing to it\n // are two decisions, and one of them takes an argument.\n const entry = entries[selected];\n if (entry) setInput(`${entry.insert} `);\n setMenuIndex(0);\n return;\n }\n if (key.escape) {\n // Closes the menu and nothing else. Escape already means \"cancel the\n // turn\", and a menu that quietly took that over would make the one\n // key people rely on mid-turn depend on what is on the line.\n setInput('');\n setMenuIndex(0);\n return;\n }\n }\n if (key.escape) {\n setCandidate(undefined);\n if (busy) controller.current?.abort();\n return;\n }\n // Bound rather than modal: taking the offer must not stop the user typing.\n if (key.ctrl && candidate && (input_ === 'r' || input_ === 'g')) {\n void remember(input_ === 'r' ? 'project' : 'user');\n }\n },\n { isActive: inputActive },\n );\n\n return (\n <Box flexDirection=\"column\">\n <Static items={items}>{(item) => <ScrollRow key={item.id} item={item} />}</Static>\n\n {choosingModel && modelOptions && (\n <Onboarding\n {...modelOptions}\n wanted={agent.model.provider.id}\n wantedModel={model}\n embedded\n defaultScope=\"project\"\n onDone={(result) => void finishModelChoice(result)}\n />\n )}\n {choosingReasoning && (\n <ReasoningPicker\n {...(agent.reasoningEffort ? { current: agent.reasoningEffort } : {})}\n onDone={finishReasoningChoice}\n onCancel={() => setChoosingReasoning(false)}\n />\n )}\n {sessionChoices && (\n <SessionPicker\n sessions={sessionChoices}\n embedded\n onDone={(path) => {\n setSessionChoices(undefined);\n if (path) {\n onResume?.(path);\n exit();\n }\n }}\n />\n )}\n\n {!choosingModel &&\n !choosingReasoning &&\n !sessionChoices &&\n reasoningLive !== '' &&\n showThinking && (\n <Box marginTop={1}>\n <Text color={theme.reasoning}>{reasoningLive}</Text>\n </Box>\n )}\n {!choosingModel && !choosingReasoning && live !== '' && (\n <Box marginTop={1}>\n <Markdown text={live} />\n </Box>\n )}\n {runningTool && <ToolBlock name={runningTool} running />}\n {!choosingModel &&\n !choosingReasoning &&\n activity &&\n live === '' &&\n !runningTool &&\n !pending &&\n !question && (\n <Box marginTop={1}>\n <Activity\n {...(activity === 'preparing'\n ? {}\n : { label: activity === 'thinking' ? 'Thinking' : 'Reasoning' })}\n />\n </Box>\n )}\n\n {pending && (\n <PermissionPrompt\n request={pending.request}\n reason={pending.reason}\n onChoice={(choice) => {\n setPending(undefined);\n pending.resolve(choice);\n }}\n />\n )}\n\n {question && (\n <QuestionPrompt\n question={question.question}\n {...(question.options ? { options: question.options } : {})}\n onAnswer={(answer) => {\n setQuestion(undefined);\n question.resolve(answer);\n }}\n />\n )}\n\n {candidate && inputActive && <MemoryCapture candidate={candidate} />}\n\n {menuOpen && <CommandMenu entries={entries} selected={selected} />}\n\n {inputActive && (\n <Box marginTop={1}>\n <Text color={theme.user}>{'> '}</Text>\n <TextInput\n value={input}\n onChange={(value) => {\n setInput(value);\n setMenuIndex(0);\n }}\n onSubmit={submit}\n placeholder={busy ? 'steer the agent, or esc to interrupt' : 'what should I do?'}\n />\n </Box>\n )}\n\n <StatusLine\n model={model}\n {...(agent.reasoningEffort ? { reasoningEffort: agent.reasoningEffort } : {})}\n mode={mode}\n costUsd={cost}\n todos={todos}\n busy={busy}\n queued={queued}\n context={context}\n compacted={compacted}\n />\n </Box>\n );\n}\n\nfunction ScrollRow({ item }: { item: ScrollItem }) {\n if (item.kind === 'user') {\n return (\n <Box marginTop={1}>\n <Text color={theme.user}>{'> '}</Text>\n <Text>{item.text}</Text>\n </Box>\n );\n }\n if (item.kind === 'assistant') {\n return (\n <Box marginTop={1}>\n <Markdown text={item.text} />\n </Box>\n );\n }\n if (item.kind === 'reasoning') {\n return (\n <Box marginTop={1}>\n <Text color={theme.reasoning}>{item.text}</Text>\n </Box>\n );\n }\n if (item.kind === 'tool') {\n return (\n <ToolBlock\n name={item.name}\n {...(item.title ? { title: item.title } : {})}\n {...(item.output ? { output: item.output } : {})}\n {...(item.isError ? { isError: true } : {})}\n />\n );\n }\n return (\n <Box marginTop={1}>\n <Text color={item.color ?? theme.muted}>{item.text}</Text>\n </Box>\n );\n}\n\n/**\n * What `/help` shows: the registry, plus whatever this directory contributes.\n *\n * Built from the same list the menu and docs/cli.md read, so `/help` cannot\n * describe a command that does not exist or miss one that does.\n */\nfunction describeCommands(session: CreatedSession): string {\n const lines = commandRows().map((row) => ` ${row.command.padEnd(34)} ${row.summary}`);\n if (session.commands.length > 0) {\n lines.push('', ' commands from this directory:');\n for (const command of session.commands) {\n lines.push(` ${`/${command.name}`.padEnd(34)} ${command.description}`);\n }\n }\n lines.push('', ' type / at the prompt to filter this list and pick one');\n return lines.join('\\n');\n}\n\n/**\n * `/init`. Phrased as a request, not a template: the file is meant to describe\n * what this project actually does, and a model handed a skeleton fills the\n * skeleton in rather than reading the repository.\n */\nconst INIT_PROMPT = `Write an AGENTS.md at the root of this project for a coding agent that has never seen it.\n\nRead enough of the repository first to be accurate. Cover: what the project is, how it is laid out, the commands to build, test and lint it, and the conventions and rules that are not obvious from the code. Prefer rules that prevent a specific failure, and say what the failure is. If an AGENTS.md or CLAUDE.md already exists, improve it in place rather than replacing it.`;\n\n/**\n * What `/skills` shows. Skills and commands are listed together because from the\n * user's side they are the same question - what extra behaviour is loaded in\n * this directory, and where did it come from.\n */\nfunction describeExtensions(session: CreatedSession): string {\n const lines: string[] = [];\n if (session.skills.length > 0) {\n lines.push('skills (the agent loads these itself when they fit):');\n for (const skill of session.skills) {\n lines.push(` ${skill.name} [${skill.scope}] ${skill.description}`);\n }\n }\n if (session.commands.length > 0) {\n if (lines.length > 0) lines.push('');\n lines.push('commands you can type:');\n for (const command of session.commands) {\n lines.push(` /${command.name} [${command.scope}] ${command.description}`);\n }\n }\n return lines.length === 0\n ? 'no skills or commands found in .earshot/skills, .earshot/commands or your config directory'\n : lines.join('\\n');\n}\n",
87
+ "/**\n * The one list of built-in slash commands.\n *\n * Dispatch, the `/` menu and the table in docs/cli.md all read from here. Before\n * this existed the if-chain in app.tsx and the docs table were two hand-written\n * lists free to disagree, and a menu would have been a third: a command could be\n * dispatchable but undocumented, or documented and not dispatchable, with\n * nothing to notice either. The handler table in app.tsx is keyed by\n * `CommandName`, so a missing or extra handler is a compile error, and\n * packages/tui/test/commands.test.ts holds docs/cli.md to the same list.\n *\n * Nothing here knows about user-defined commands from `.earshot/commands`:\n * those are discovered at runtime and reach the menu from `session.commands`.\n */\n\nexport interface CommandVerb {\n readonly name: string;\n /** Argument shape as the user types it. */\n readonly args?: string;\n readonly summary: string;\n}\n\nexport interface CommandSpec {\n readonly name: string;\n /** Other names that dispatch to the same handler. Not menu rows of their own. */\n readonly aliases?: readonly string[];\n /** Argument shape as the user types it, e.g. `<n>`; absent means none. */\n readonly args?: string;\n /**\n * One line, plain prose. This is the menu row and the docs cell, so it carries\n * no markdown: the menu renders into a terminal, not into a page.\n */\n readonly summary: string;\n /**\n * Refuses to run while a turn is in flight. Checked once by the dispatcher\n * rather than re-implemented per command, which is how three copies of the\n * same \"finish or interrupt first\" branch used to drift.\n */\n readonly idleOnly?: boolean;\n readonly verbs?: readonly CommandVerb[];\n}\n\n/**\n * Declared `as const` for the literal names, then re-exported as\n * `readonly CommandSpec[]`: without the widening, an entry that omits `args` or\n * `idleOnly` has no such property at all, and every reader has to narrow before\n * it can ask.\n */\nconst SPECS = [\n {\n name: 'help',\n summary: 'List the commands you can type',\n },\n {\n name: 'model',\n args: '[ref]',\n summary: 'Show the model in use, or switch to another for the rest of the session',\n },\n {\n name: 'reasoning',\n args: '[auto|none|low|medium|high|xhigh]',\n summary: 'Show or change reasoning effort for the current model',\n },\n {\n name: 'thinking',\n args: '[show|hide]',\n summary: 'Show or hide streamed model reasoning',\n },\n {\n name: 'mode',\n args: '<plan|ask|accept-edits|auto|yolo>',\n summary: 'Change the permission mode',\n },\n {\n name: 'plan',\n args: '<task>',\n summary: 'Draft a plan in plan mode and write it to a file',\n idleOnly: true,\n verbs: [\n { name: 'edit', summary: 'Open the plan in $VISUAL/$EDITOR, or print its path' },\n { name: 'approve', summary: 'Pin the plan as the file now reads for the rest of the run' },\n { name: 'show', summary: 'Read the plan back' },\n { name: 'clear', summary: 'Unpin the plan' },\n ],\n },\n {\n name: 'compact',\n summary: 'Summarise the session so far and free up the context window',\n idleOnly: true,\n },\n {\n name: 'context',\n summary: 'Show what is in the context window and what compaction has dropped',\n },\n {\n name: 'cost',\n args: '[usd]',\n summary: 'Show what this session has spent, or set the budget ceiling; 0 removes it',\n },\n {\n name: 'todo',\n summary: \"Show the agent's current todo list\",\n },\n {\n name: 'permissions',\n summary: 'Show the permission mode and the rules in force',\n },\n {\n name: 'init',\n summary: 'Write an AGENTS.md describing this project',\n idleOnly: true,\n },\n {\n name: 'skills',\n summary: 'List discovered skills and user-defined commands',\n },\n {\n name: 'memory',\n summary: 'List remembered preferences, each with the sentence it came from',\n verbs: [{ name: 'forget', args: '<id>', summary: 'Delete one remembered preference' }],\n },\n {\n name: 'tree',\n summary: \"List this session's prompts, numbered\",\n idleOnly: true,\n },\n {\n name: 'sessions',\n summary: 'Browse and resume chats saved for this project',\n idleOnly: true,\n },\n {\n name: 'rewind',\n args: '<n>',\n summary: 'Go back to the state before prompt n; nothing is deleted',\n idleOnly: true,\n },\n {\n name: 'fork',\n args: '<n>',\n summary: 'Branch from prompt n into a new transcript',\n idleOnly: true,\n },\n {\n name: 'undo',\n summary: \"Revert the last tool batch's file changes; again to step back further\",\n },\n {\n name: 'exit',\n aliases: ['quit'],\n summary: 'Quit',\n },\n] as const satisfies readonly CommandSpec[];\n\nexport const COMMANDS: readonly CommandSpec[] = SPECS;\n\nexport type CommandName = (typeof SPECS)[number]['name'];\n\n/** The spec a typed name dispatches to, including via an alias. */\nexport function findCommand(name: string): CommandSpec | undefined {\n return COMMANDS.find(\n (command) =>\n command.name === name || (command.aliases as readonly string[] | undefined)?.includes(name),\n );\n}\n\nexport interface CommandRow {\n /** As typed, e.g. `/plan approve`. */\n readonly command: string;\n readonly summary: string;\n readonly spec: CommandSpec;\n}\n\n/**\n * Every documented and menu-listable form, one row per verb.\n *\n * A verb is a row of its own because `/plan approve` does something a user would\n * never guess from a row that only says `/plan`, and a menu that hides it is a\n * menu that fails at the one job it has.\n */\nexport function commandRows(): CommandRow[] {\n const rows: CommandRow[] = [];\n for (const spec of COMMANDS) {\n rows.push({\n command: spec.args ? `/${spec.name} ${spec.args}` : `/${spec.name}`,\n summary: spec.summary,\n spec,\n });\n for (const verb of spec.verbs ?? []) {\n rows.push({\n command: `/${spec.name} ${verb.name}${verb.args ? ` ${verb.args}` : ''}`,\n summary: verb.summary,\n spec,\n });\n }\n }\n return rows;\n}\n",
88
+ "import { Text } from 'ink';\nimport { useEffect, useState } from 'react';\nimport { theme } from '../theme.ts';\n\nconst FRAMES = ['· ', '·· ', '···', ' ··', ' ·', ' '] as const;\n\nexport function Activity({ label }: { label?: string }) {\n const [frame, setFrame] = useState(0);\n useEffect(() => {\n const timer = setInterval(() => setFrame((value) => (value + 1) % FRAMES.length), 120);\n return () => clearInterval(timer);\n }, []);\n return <Text color={theme.muted}>{label ? `${label} ${FRAMES[frame]}` : FRAMES[frame]}</Text>;\n}\n",
88
89
  "/**\n * Colours are named by role rather than by hue so a future theme can be swapped\n * in one place. Only the sixteen ANSI names are used: a 24-bit palette looks\n * better on the terminals that support it and unreadable on the ones that map it\n * badly, and a coding agent has to be legible on a stranger's machine.\n */\nexport const theme = {\n user: 'cyan',\n assistant: 'white',\n reasoning: 'gray',\n tool: 'blue',\n toolError: 'red',\n added: 'green',\n removed: 'red',\n hunk: 'cyan',\n muted: 'gray',\n warning: 'yellow',\n danger: 'red',\n accent: 'magenta',\n} as const;\n\n/** Mode indicators for the status line, shortest first - the line is one row. */\nexport const MODE_LABEL: Record<string, string> = {\n plan: 'plan',\n ask: 'ask',\n 'accept-edits': 'edits',\n auto: 'auto',\n yolo: 'yolo',\n};\n\nexport const MODE_COLOR: Record<string, string> = {\n plan: theme.accent,\n ask: theme.muted,\n 'accept-edits': theme.added,\n auto: theme.warning,\n yolo: theme.danger,\n};\n",
90
+ "import type { SlashCommand } from '@earshot/core';\nimport { Box, Text } from 'ink';\nimport { COMMANDS, type CommandSpec, commandRows } from '../commands.ts';\nimport { theme } from '../theme.ts';\n\n/**\n * A summary longer than this is cut.\n *\n * The row is one line by construction: Ink wraps a `Text` that overruns the\n * terminal, and a wrapped row would push the rest of the menu - and the prompt\n * under it - down by an unpredictable number of lines on every keystroke.\n */\nconst SUMMARY_WIDTH = 58;\n\n/** How many rows fit before the list starts hiding a small terminal's scrollback. */\nconst VISIBLE = 10;\n\nexport interface MenuEntry {\n /** What Tab completes into the input, without the argument placeholder. */\n readonly insert: string;\n /** What the row shows, argument placeholder included. */\n readonly label: string;\n readonly summary: string;\n /** User-defined commands are labelled by where they came from. */\n readonly scope?: string;\n readonly disabled?: boolean;\n}\n\n/**\n * The rows for a typed query, built from the registry and the session's\n * user-defined commands.\n *\n * A pure function rather than a hook so the app can index into the same list it\n * renders - a menu whose selection and display are computed separately is a\n * menu that eventually runs the row above the one that was highlighted.\n */\nexport function menuEntries(\n query: string,\n commands: readonly SlashCommand[],\n busy: boolean,\n): MenuEntry[] {\n const entries: MenuEntry[] = [];\n\n for (const spec of ranked(COMMANDS, query)) {\n if (!matches(spec.name, query)) continue;\n const disabled = busy && spec.idleOnly === true;\n // Verbs only once the user has shown interest in that command: a bare `/`\n // listing every sub-verb buries the nine commands under fourteen rows.\n const expanded = query !== '' && spec.name.startsWith(query);\n for (const row of commandRows()) {\n if (row.spec.name !== spec.name) continue;\n const isBase = row.command === (spec.args ? `/${spec.name} ${spec.args}` : `/${spec.name}`);\n if (!isBase && !expanded) continue;\n entries.push({\n insert: insertFor(row.command, spec),\n label: row.command,\n summary: row.summary,\n ...(disabled ? { disabled: true } : {}),\n });\n }\n }\n\n for (const command of ranked(commands, query)) {\n if (!matches(command.name, query)) continue;\n entries.push({\n insert: `/${command.name}`,\n label: `/${command.name}`,\n summary: command.description,\n scope: command.scope,\n });\n }\n\n return entries;\n}\n\n/**\n * The argument placeholder is shown but never inserted: completing `/rewind <n>`\n * into the line would leave the user deleting the placeholder before they can\n * type the number.\n */\nfunction insertFor(command: string, spec: CommandSpec): string {\n const withoutArgs = spec.args ? command.replace(` ${spec.args}`, '') : command;\n return withoutArgs.replace(/\\s<[^>]*>$/, '');\n}\n\n/**\n * An undefined `color` prop is not the same as an absent one under\n * `exactOptionalPropertyTypes`, so the default row passes no colour at all.\n */\nconst clamp = (text: string) =>\n text.length <= SUMMARY_WIDTH ? text : `${text.slice(0, SUMMARY_WIDTH - 1)}…`;\n\nfunction rowColor(entry: MenuEntry, active: boolean): { color?: string } {\n if (entry.disabled) return { color: theme.muted };\n if (active) return { color: theme.user };\n return {};\n}\n\nfunction matches(name: string, query: string): boolean {\n return query === '' || name.includes(query);\n}\n\n/**\n * Prefix matches first, so `/re` puts `/rewind` above `/tree` - the row the\n * user is most likely typing towards is the one Enter would run.\n * Otherwise the registry's own order is kept, which is the order docs/cli.md\n * documents.\n */\nfunction ranked<T extends { readonly name: string }>(items: readonly T[], query: string): T[] {\n if (query === '') return [...items];\n return [\n ...items.filter((item) => item.name.startsWith(query)),\n ...items.filter((item) => !item.name.startsWith(query)),\n ];\n}\n\nexport interface CommandMenuProps {\n entries: readonly MenuEntry[];\n selected: number;\n}\n\n/**\n * Lives in the live region only.\n *\n * Completed turns are in Ink's `Static` and are written to the terminal once;\n * anything that re-renders them would repaint real scrollback the user has\n * already scrolled past. This draws below them and disappears without touching\n * a row above it.\n */\nexport function CommandMenu({ entries, selected }: CommandMenuProps) {\n if (entries.length === 0) {\n return (\n <Box marginTop={1}>\n <Text color={theme.muted}>no command matches</Text>\n </Box>\n );\n }\n\n // The window follows the selection so arrowing past the eighth row scrolls\n // rather than moving a highlight nobody can see.\n const start = Math.min(\n Math.max(0, selected - VISIBLE + 1),\n Math.max(0, entries.length - VISIBLE),\n );\n const shown = entries.slice(start, start + VISIBLE);\n const hidden = entries.length - shown.length;\n\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n {shown.map((entry, index) => {\n const active = start + index === selected;\n return (\n <Box key={entry.label}>\n <Text color={active ? theme.user : theme.muted}>{active ? '› ' : ' '}</Text>\n <Text {...rowColor(entry, active)}>{entry.label.padEnd(34)}</Text>\n <Text color={theme.muted}>\n {clamp(\n `${entry.scope ? `[${entry.scope}] ` : ''}${entry.summary}${\n entry.disabled ? ' (not while a turn is running)' : ''\n }`,\n )}\n </Text>\n </Box>\n );\n })}\n <Box>\n <Text color={theme.muted}>\n {hidden > 0 ? ` ${hidden} more · ` : ' '}↑↓ choose · tab complete · enter run · esc\n close\n </Text>\n </Box>\n </Box>\n );\n}\n",
89
91
  "import { Box, Text } from 'ink';\nimport { theme } from '../theme.ts';\n\n/**\n * Renders a model's markdown as styled terminal text.\n *\n * Not a spec-complete parser - just the subset a model actually produces in\n * conversation: headers, bold/italic, inline and fenced code, lists, block\n * quotes and rules. Anything else falls through as plain text rather than\n * failing, since a raw line is still more readable than a crash.\n */\nexport function Markdown({ text }: { text: string }) {\n const blocks = splitBlocks(text);\n return (\n <Box flexDirection=\"column\">\n {blocks.map((block, index) => (\n // Blocks have no identity beyond position: the whole text is replaced\n // wholesale on every render, never reordered in place.\n // biome-ignore lint/suspicious/noArrayIndexKey: position is the identity\n <Block key={index} block={block} />\n ))}\n </Box>\n );\n}\n\ntype ParsedBlock =\n | { kind: 'code'; lang: string; lines: string[] }\n | { kind: 'heading'; level: number; text: string }\n | { kind: 'rule' }\n | { kind: 'list'; ordered: boolean; items: string[] }\n | { kind: 'quote'; lines: string[] }\n | { kind: 'paragraph'; text: string };\n\nfunction splitBlocks(text: string): ParsedBlock[] {\n const lines = text.split('\\n');\n const blocks: ParsedBlock[] = [];\n let index = 0;\n\n while (index < lines.length) {\n const line = lines[index] ?? '';\n\n if (line.trim() === '') {\n index++;\n continue;\n }\n\n const fence = line.match(/^```(\\w*)\\s*$/);\n if (fence) {\n const lang = fence[1] ?? '';\n const codeLines: string[] = [];\n index++;\n while (index < lines.length && !/^```\\s*$/.test(lines[index] ?? '')) {\n codeLines.push(lines[index] ?? '');\n index++;\n }\n index++; // closing fence\n blocks.push({ kind: 'code', lang, lines: codeLines });\n continue;\n }\n\n const heading = line.match(/^(#{1,6})\\s+(.*)$/);\n if (heading) {\n blocks.push({ kind: 'heading', level: heading[1]?.length ?? 1, text: heading[2] ?? '' });\n index++;\n continue;\n }\n\n if (/^(-{3,}|\\*{3,}|_{3,})\\s*$/.test(line.trim())) {\n blocks.push({ kind: 'rule' });\n index++;\n continue;\n }\n\n const listItem = line.match(/^\\s*([-*]|\\d+[.)])\\s+(.*)$/);\n if (listItem) {\n const ordered = /\\d/.test(listItem[1] ?? '');\n const items: string[] = [];\n while (index < lines.length) {\n const match = (lines[index] ?? '').match(/^\\s*(?:[-*]|\\d+[.)])\\s+(.*)$/);\n if (!match) break;\n items.push(match[1] ?? '');\n index++;\n }\n blocks.push({ kind: 'list', ordered, items });\n continue;\n }\n\n if (line.trimStart().startsWith('>')) {\n const quoteLines: string[] = [];\n while (index < lines.length && (lines[index] ?? '').trimStart().startsWith('>')) {\n quoteLines.push((lines[index] ?? '').trimStart().replace(/^>\\s?/, ''));\n index++;\n }\n blocks.push({ kind: 'quote', lines: quoteLines });\n continue;\n }\n\n const paragraphLines: string[] = [];\n while (index < lines.length && (lines[index] ?? '').trim() !== '') {\n const current = lines[index] ?? '';\n if (\n /^```/.test(current) ||\n /^(#{1,6})\\s+/.test(current) ||\n /^\\s*([-*]|\\d+[.)])\\s+/.test(current) ||\n current.trimStart().startsWith('>')\n ) {\n break;\n }\n paragraphLines.push(current);\n index++;\n }\n blocks.push({ kind: 'paragraph', text: paragraphLines.join(' ') });\n }\n\n return blocks;\n}\n\nfunction Block({ block }: { block: ParsedBlock }) {\n switch (block.kind) {\n case 'code':\n return (\n <Box flexDirection=\"column\" marginY={1} paddingLeft={2}>\n {block.lines.map((line, index) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: position is the identity\n <Text key={index} color={theme.tool}>\n {line}\n </Text>\n ))}\n </Box>\n );\n case 'heading':\n return (\n <Box marginTop={block.level <= 2 ? 1 : 0}>\n <Text bold underline={block.level === 1} color={theme.assistant}>\n {inlineToText(block.text)}\n </Text>\n </Box>\n );\n case 'rule':\n return <Text color={theme.muted}>{'─'.repeat(40)}</Text>;\n case 'list':\n return (\n <Box flexDirection=\"column\">\n {block.items.map((item, index) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: position is the identity\n <Text key={index}>\n {' '}\n {block.ordered ? `${index + 1}.` : '-'} <Inline text={item} />\n </Text>\n ))}\n </Box>\n );\n case 'quote':\n return (\n <Box flexDirection=\"column\" paddingLeft={1}>\n {block.lines.map((line, index) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: position is the identity\n <Text key={index} color={theme.muted} italic>\n │ {inlineToText(line)}\n </Text>\n ))}\n </Box>\n );\n default:\n return (\n <Text>\n <Inline text={block.text} />\n </Text>\n );\n }\n}\n\n/** Strips inline markers for contexts (headings, quotes) that render as one line. */\nfunction inlineToText(text: string): string {\n return text\n .replace(/\\*\\*(.+?)\\*\\*/g, '$1')\n .replace(/__(.+?)__/g, '$1')\n .replace(/\\*(.+?)\\*/g, '$1')\n .replace(/_(.+?)_/g, '$1')\n .replace(/`(.+?)`/g, '$1');\n}\n\n/**\n * Splits one line into bold/italic/code spans and renders each with its own\n * styling, in order - the only way Ink can mix styles within a single line.\n */\nfunction Inline({ text }: { text: string }) {\n const pattern = /(\\*\\*.+?\\*\\*|__.+?__|`.+?`|\\*.+?\\*|_.+?_)/g;\n const parts = text.split(pattern);\n\n return (\n <>\n {parts.map((part, index) => {\n if (part === '') return null;\n if (part.startsWith('**') && part.endsWith('**')) {\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: position is the identity\n <Text key={index} bold>\n {part.slice(2, -2)}\n </Text>\n );\n }\n if (part.startsWith('__') && part.endsWith('__')) {\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: position is the identity\n <Text key={index} bold>\n {part.slice(2, -2)}\n </Text>\n );\n }\n if (part.startsWith('`') && part.endsWith('`')) {\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: position is the identity\n <Text key={index} color={theme.tool}>\n {part.slice(1, -1)}\n </Text>\n );\n }\n if (part.startsWith('*') && part.endsWith('*')) {\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: position is the identity\n <Text key={index} italic>\n {part.slice(1, -1)}\n </Text>\n );\n }\n if (part.startsWith('_') && part.endsWith('_')) {\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: position is the identity\n <Text key={index} italic>\n {part.slice(1, -1)}\n </Text>\n );\n }\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: position is the identity\n <Text key={index}>{part}</Text>\n );\n })}\n </>\n );\n}\n",
90
92
  "import type { MemoryCandidate } from '@earshot/core';\nimport { Box, Text } from 'ink';\nimport { theme } from '../theme.ts';\n\nexport interface MemoryCaptureProps {\n candidate: MemoryCandidate;\n}\n\n/**\n * A one-line offer, not a modal.\n *\n * Capturing a preference must never interrupt the turn the user just started:\n * a dialog here would make correcting the agent more expensive than letting the\n * mistake stand, which is the opposite of the point. Two keystrokes take it,\n * ignoring it costs nothing, and it disappears with the next prompt.\n */\nexport function MemoryCapture({ candidate }: MemoryCaptureProps) {\n return (\n <Box marginTop={1}>\n <Text color={theme.accent}>remember </Text>\n <Text>“{candidate.text}”</Text>\n <Text color={theme.muted}>? ctrl+r for this project · ctrl+g everywhere</Text>\n </Box>\n );\n}\n",
91
93
  "import type { PermissionRequest, PromptChoice } from '@earshot/core';\nimport { Box, Text, useInput } from 'ink';\nimport { useState } from 'react';\nimport { theme } from '../theme.ts';\nimport { DiffView } from './diff.tsx';\n\nexport interface PermissionPromptProps {\n request: PermissionRequest;\n reason: string;\n onChoice: (choice: PromptChoice) => void;\n}\n\ninterface Option {\n label: string;\n choice: PromptChoice;\n color: string;\n}\n\n/**\n * The approval prompt.\n *\n * It renders `request.detail` in full - the actual command, or the actual diff.\n * A prompt that shows a summary is one people learn to approve without reading,\n * which makes the whole gate theatre. Nothing here paraphrases.\n *\n * \"Allow once\" is first and selected by default. The safe choice being the\n * default matters more than the convenient one, and a user who wants the\n * standing rule has to move to it deliberately.\n */\nexport function PermissionPrompt({ request, reason, onChoice }: PermissionPromptProps) {\n const [selected, setSelected] = useState(0);\n\n const options: Option[] = [\n { label: 'Allow once', choice: { kind: 'allow-once' }, color: theme.assistant },\n {\n label: `Always allow ${request.tool}(${truncate(request.target, 40)}) in this project`,\n choice: { kind: 'allow-always', scope: 'project' },\n color: theme.assistant,\n },\n {\n label: 'Deny and tell the agent why',\n choice: { kind: 'deny' },\n color: theme.danger,\n },\n ];\n\n useInput((input, key) => {\n if (key.upArrow || input === 'k') setSelected((n) => (n + options.length - 1) % options.length);\n else if (key.downArrow || input === 'j') setSelected((n) => (n + 1) % options.length);\n else if (key.return) onChoice(options[selected]?.choice ?? { kind: 'deny' });\n // Escape is a denial, not a dismissal: a prompt that can be closed without\n // answering would leave the turn waiting on a promise nothing will resolve.\n else if (key.escape) onChoice({ kind: 'deny', message: 'the user dismissed the prompt' });\n });\n\n const isDiff = request.detail.includes('\\n@@') || request.detail.startsWith('---');\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={theme.warning} paddingX={1}>\n <Text bold color={theme.warning}>\n {request.title}\n </Text>\n <Text color={theme.muted}>{reason}</Text>\n <Box marginY={1} flexDirection=\"column\">\n {isDiff ? <DiffView diff={request.detail} /> : <Text wrap=\"wrap\">{request.detail}</Text>}\n </Box>\n {options.map((option, index) => (\n <Text key={option.label} color={index === selected ? theme.accent : option.color}>\n {index === selected ? '❯ ' : ' '}\n {option.label}\n </Text>\n ))}\n </Box>\n );\n}\n\nfunction truncate(value: string, max: number): string {\n return value.length <= max ? value : `${value.slice(0, max - 1)}…`;\n}\n",
92
94
  "import { Box, Text } from 'ink';\nimport { theme } from '../theme.ts';\n\n/** Beyond this a diff is summarised; a 900-line hunk is not read, it is scrolled past. */\nconst MAX_LINES = 60;\n\nexport function DiffView({ diff, maxLines = MAX_LINES }: { diff: string; maxLines?: number }) {\n const lines = diff.split('\\n');\n // The `---`/`+++` header repeats the filename the caller has already shown.\n const body = lines.filter((line) => !line.startsWith('---') && !line.startsWith('+++'));\n const shown = body.slice(0, maxLines);\n const hidden = body.length - shown.length;\n\n return (\n <Box flexDirection=\"column\">\n {shown.map((line, index) => (\n // A diff line has no identity beyond its position, and duplicate lines in\n // one hunk are ordinary. The list is only ever replaced wholesale - never\n // reordered or spliced - so a positional key is the correct one here.\n // biome-ignore lint/suspicious/noArrayIndexKey: position is the identity\n <Text key={index} color={colorFor(line)} wrap=\"truncate-end\">\n {line === '' ? ' ' : line}\n </Text>\n ))}\n {hidden > 0 && (\n <Text color={theme.muted}>\n {' '}\n ... {hidden} more lines\n </Text>\n )}\n </Box>\n );\n}\n\nfunction colorFor(line: string): string {\n if (line.startsWith('+')) return theme.added;\n if (line.startsWith('-')) return theme.removed;\n if (line.startsWith('@@')) return theme.hunk;\n return theme.muted;\n}\n\n/** One line of counts, for a collapsed edit. */\nexport function diffStat(diff: string): string {\n let added = 0;\n let removed = 0;\n for (const line of diff.split('\\n')) {\n if (line.startsWith('+') && !line.startsWith('+++')) added++;\n if (line.startsWith('-') && !line.startsWith('---')) removed++;\n }\n return `+${added} -${removed}`;\n}\n",
93
95
  "import { Box, Text, useInput } from 'ink';\nimport { useState } from 'react';\nimport { theme } from '../theme.ts';\nimport { TextInput } from './text-input.tsx';\n\nexport interface QuestionPromptProps {\n question: string;\n options?: string[];\n onAnswer: (answer: string) => void;\n}\n\n/**\n * What `ask_user` renders. Offered options are selectable, but a free-text answer\n * is always available: the model's suggestions are guesses, and forcing the user\n * into one of them is exactly the not-listening this project exists to avoid.\n */\nexport function QuestionPrompt({ question, options = [], onAnswer }: QuestionPromptProps) {\n const [selected, setSelected] = useState(0);\n const [typing, setTyping] = useState(options.length === 0);\n const [value, setValue] = useState('');\n\n useInput(\n (input, key) => {\n if (key.upArrow) setSelected((n) => (n + options.length - 1) % options.length);\n else if (key.downArrow) setSelected((n) => (n + 1) % options.length);\n else if (key.return) onAnswer(options[selected] ?? '');\n else if (input && !key.ctrl && !key.meta) {\n // Typing a printable character switches to free text and keeps it, so the\n // first keystroke of an answer is never swallowed by the option list.\n setTyping(true);\n setValue(input);\n }\n },\n { isActive: !typing },\n );\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={theme.accent} paddingX={1}>\n <Text bold color={theme.accent}>\n {question}\n </Text>\n {!typing &&\n options.map((option, index) => (\n <Text key={option} color={index === selected ? theme.accent : theme.muted}>\n {index === selected ? '❯ ' : ' '}\n {option}\n </Text>\n ))}\n {!typing && <Text color={theme.muted}>or start typing to answer in your own words</Text>}\n {typing && (\n <TextInput\n value={value}\n onChange={setValue}\n onSubmit={(answer) => onAnswer(answer.trim())}\n placeholder=\"your answer\"\n />\n )}\n </Box>\n );\n}\n",
94
96
  "import { Text, useInput } from 'ink';\nimport { useEffect, useRef } from 'react';\nimport { theme } from '../theme.ts';\n\nexport interface TextInputProps {\n value: string;\n onChange: (value: string) => void;\n onSubmit?: (value: string) => void;\n placeholder?: string;\n isActive?: boolean;\n}\n\n/**\n * A single-line controlled input.\n *\n * Hand-written rather than pulled from `ink-text-input`, which has not kept pace\n * with Ink's major versions and would add a dependency for about thirty lines.\n * The cursor is rendered as an inverted character rather than moved with an\n * escape sequence, so nothing here writes cursor-control codes that ConPTY\n * handles differently from a POSIX terminal.\n */\nexport function TextInput({\n value,\n onChange,\n onSubmit,\n placeholder = '',\n isActive = true,\n}: TextInputProps) {\n /**\n * The edit buffer is tracked in a ref as well as in the parent's state.\n *\n * Several keystrokes can arrive in one tick - fast typing, and every paste -\n * and each handler would then read the same pre-render `value` prop, so all\n * but the last character would be silently dropped and a Return arriving in\n * the same tick would submit a stale string. The ref carries the edit forward\n * within a tick; the effect resyncs it whenever the parent changes the value\n * itself, such as clearing the line after a submit.\n */\n const buffer = useRef(value);\n useEffect(() => {\n buffer.current = value;\n }, [value]);\n\n useInput(\n (input, key) => {\n if (key.return) {\n const submitted = buffer.current;\n buffer.current = '';\n onSubmit?.(submitted);\n return;\n }\n if (key.backspace || key.delete) {\n buffer.current = buffer.current.slice(0, -1);\n onChange(buffer.current);\n return;\n }\n // Control sequences arrive as `input` too; only printable text is appended.\n if (key.ctrl || key.meta || key.escape || key.tab) return;\n if (key.upArrow || key.downArrow || key.leftArrow || key.rightArrow) return;\n if (input) {\n buffer.current += input;\n onChange(buffer.current);\n }\n },\n { isActive },\n );\n\n if (value === '') {\n return (\n <Text>\n <Text inverse> </Text>\n <Text color={theme.muted}>{placeholder}</Text>\n </Text>\n );\n }\n\n return (\n <Text>\n {value}\n <Text inverse> </Text>\n </Text>\n );\n}\n",
95
- "import type { PermissionMode, TodoItem } from '@earshot/core';\nimport { Box, Text } from 'ink';\nimport { MODE_COLOR, MODE_LABEL, theme } from '../theme.ts';\n\nexport interface StatusLineProps {\n model: string;\n mode: PermissionMode;\n costUsd: number;\n todos: TodoItem[];\n busy: boolean;\n queued: number;\n /** Estimated tokens in the last request, and the model's window. */\n context: { tokens: number; window: number };\n /** How many messages compaction has replaced with a summary this session. */\n compacted: number;\n}\n\n/**\n * One row, always present. Everything on it answers a question the user would\n * otherwise have to interrupt to ask: which model is spending their money, how\n * much it has spent, what the agent thinks it is doing, and whether the thing\n * they just typed was received.\n */\nexport function StatusLine({\n model,\n mode,\n costUsd,\n todos,\n busy,\n queued,\n context,\n compacted,\n}: StatusLineProps) {\n const done = todos.filter((todo) => todo.status === 'done').length;\n const current = todos.find((todo) => todo.status === 'in_progress');\n const used = context.window > 0 ? Math.min(100, (context.tokens / context.window) * 100) : 0;\n\n return (\n <Box>\n <Text color={MODE_COLOR[mode] ?? theme.muted}>{MODE_LABEL[mode] ?? mode}</Text>\n <Text color={theme.muted}> · {model}</Text>\n <Text color={theme.muted}> · ${costUsd.toFixed(4)}</Text>\n {context.window > 0 && (\n // Coloured only when it is close enough to matter: a percentage that is\n // always yellow stops being a warning.\n <Text color={used >= 80 ? theme.warning : theme.muted}> · {used.toFixed(0)}% ctx</Text>\n )}\n {compacted > 0 && (\n // What was dropped, not just that something was: a summarised session\n // answers from a recollection, and the user should know which part.\n <Text color={theme.muted}> · {compacted} summarised</Text>\n )}\n {todos.length > 0 && (\n <Text color={theme.muted}>\n {' '}\n · {done}/{todos.length}\n {current ? ` ${truncate(current.text, 40)}` : ''}\n </Text>\n )}\n {busy && <Text color={theme.warning}> · working (esc to interrupt)</Text>}\n {queued > 0 && <Text color={theme.accent}> · {queued} queued</Text>}\n </Box>\n );\n}\n\nfunction truncate(value: string, max: number): string {\n return value.length <= max ? value : `${value.slice(0, max - 1)}…`;\n}\n",
97
+ "import type { ReasoningEffort } from '@earshot/providers';\nimport { Box, Text, useInput } from 'ink';\nimport { useState } from 'react';\nimport { theme } from '../theme.ts';\n\nconst choices = ['auto', 'none', 'low', 'medium', 'high', 'xhigh'] as const;\n\nexport function ReasoningPicker({\n current,\n onDone,\n onCancel,\n}: {\n current?: ReasoningEffort;\n onDone: (effort: ReasoningEffort | undefined) => void;\n onCancel: () => void;\n}) {\n const [cursor, setCursor] = useState(Math.max(0, choices.indexOf(current ?? 'auto')));\n useInput((_input, key) => {\n if (key.escape) return onCancel();\n if (key.upArrow) setCursor((value) => (value <= 0 ? choices.length - 1 : value - 1));\n if (key.downArrow) setCursor((value) => (value >= choices.length - 1 ? 0 : value + 1));\n if (key.return) {\n const selected = choices[cursor] ?? 'auto';\n onDone(selected === 'auto' ? undefined : selected);\n }\n });\n return (\n <Box flexDirection=\"column\">\n <Text>reasoning effort</Text>\n <Box flexDirection=\"column\" marginTop={1}>\n {choices.map((choice, index) => (\n <Text key={choice} color={index === cursor ? theme.user : theme.muted}>\n {index === cursor ? '› ' : ' '}\n {choice}\n </Text>\n ))}\n </Box>\n <Text color={theme.muted}>↑↓ choose · enter select · esc cancel</Text>\n </Box>\n );\n}\n",
98
+ "import type { PermissionMode, TodoItem } from '@earshot/core';\nimport type { ReasoningEffort } from '@earshot/providers';\nimport { Box, Text } from 'ink';\nimport { MODE_COLOR, MODE_LABEL, theme } from '../theme.ts';\n\nexport interface StatusLineProps {\n model: string;\n reasoningEffort?: ReasoningEffort;\n mode: PermissionMode;\n costUsd: number;\n todos: TodoItem[];\n busy: boolean;\n queued: number;\n /** Estimated tokens in the last request, and the model's window. */\n context: { tokens: number; window: number };\n /** How many messages compaction has replaced with a summary this session. */\n compacted: number;\n}\n\n/**\n * One row, always present. Everything on it answers a question the user would\n * otherwise have to interrupt to ask: which model is spending their money, how\n * much it has spent, what the agent thinks it is doing, and whether the thing\n * they just typed was received.\n */\nexport function StatusLine({\n model,\n reasoningEffort,\n mode,\n costUsd,\n todos,\n busy,\n queued,\n context,\n compacted,\n}: StatusLineProps) {\n const done = todos.filter((todo) => todo.status === 'done').length;\n const current = todos.find((todo) => todo.status === 'in_progress');\n const used = context.window > 0 ? Math.min(100, (context.tokens / context.window) * 100) : 0;\n\n return (\n <Box>\n <Text color={MODE_COLOR[mode] ?? theme.muted}>{MODE_LABEL[mode] ?? mode}</Text>\n <Text color={theme.muted}> · {model}</Text>\n {reasoningEffort && <Text color={theme.muted}> · {reasoningEffort}</Text>}\n <Text color={theme.muted}> · ${costUsd.toFixed(4)}</Text>\n {context.window > 0 && (\n // Coloured only when it is close enough to matter: a percentage that is\n // always yellow stops being a warning.\n <Text color={used >= 80 ? theme.warning : theme.muted}> · {used.toFixed(0)}% ctx</Text>\n )}\n {compacted > 0 && (\n // What was dropped, not just that something was: a summarised session\n // answers from a recollection, and the user should know which part.\n <Text color={theme.muted}> · {compacted} summarised</Text>\n )}\n {todos.length > 0 && (\n <Text color={theme.muted}>\n {' '}\n · {done}/{todos.length}\n {current ? ` ${truncate(current.text, 40)}` : ''}\n </Text>\n )}\n {busy && <Text color={theme.warning}> · working (esc to interrupt)</Text>}\n {queued > 0 && <Text color={theme.accent}> · {queued} queued</Text>}\n </Box>\n );\n}\n\nfunction truncate(value: string, max: number): string {\n return value.length <= max ? value : `${value.slice(0, max - 1)}…`;\n}\n",
96
99
  "import { Box, Text } from 'ink';\nimport { theme } from '../theme.ts';\nimport { DiffView, diffStat } from './diff.tsx';\n\nexport interface ToolBlockProps {\n name: string;\n title?: string;\n output?: string;\n isError?: boolean;\n running?: boolean;\n /** Expanded blocks show full output; collapsed ones show a line of summary. */\n expanded?: boolean;\n}\n\n/** Output beyond this collapses to a count; the full text is in the transcript. */\nconst PREVIEW_LINES = 8;\n\n/**\n * One tool call, collapsed by default.\n *\n * A long tool result pushes the conversation off the screen, and the reason\n * someone is reading a coding agent's scrollback is almost never to re-read the\n * contents of a file it opened. What matters is which tool ran, on what, and\n * whether it failed - so that is what a collapsed block shows, and errors are\n * never collapsed.\n */\nexport function ToolBlock({\n name,\n title,\n output = '',\n isError,\n running,\n expanded,\n}: ToolBlockProps) {\n const marker = running ? '·' : isError ? '✗' : '✓';\n const color = isError ? theme.toolError : theme.tool;\n const isDiff = output.includes('\\n@@') || output.startsWith('---');\n\n const lines = output === '' ? [] : output.split('\\n');\n // An error is always shown in full: it is the one output the user has to read,\n // and it is the thing the model is about to react to.\n const showAll = expanded || isError;\n const shown = showAll ? lines : lines.slice(0, PREVIEW_LINES);\n const hidden = lines.length - shown.length;\n\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color={color}>\n {marker} <Text bold>{name}</Text>\n {title ? <Text color={theme.muted}> {title}</Text> : null}\n {isDiff && !showAll ? <Text color={theme.muted}> {diffStat(output)}</Text> : null}\n </Text>\n {isDiff && showAll ? (\n <Box marginLeft={2}>\n <DiffView diff={output} />\n </Box>\n ) : (\n shown.map((line, index) => (\n // Output lines have no identity beyond position, and this block is\n // replaced wholesale rather than reordered. See DiffView for the same.\n // biome-ignore lint/suspicious/noArrayIndexKey: position is the identity\n <Text key={index} color={theme.muted} wrap=\"truncate-end\">\n {' '}\n {line}\n </Text>\n ))\n )}\n {hidden > 0 && !isDiff && (\n <Text color={theme.muted}>\n {' '}\n ... {hidden} more lines\n </Text>\n )}\n </Box>\n );\n}\n",
97
- "import { Box, Text, useApp, useInput } from 'ink';\nimport { useCallback, useRef, useState } from 'react';\nimport { TextInput } from './components/text-input.tsx';\nimport { theme } from './theme.ts';\n\n/**\n * First-run onboarding.\n *\n * What this module is *not* allowed to do, because it is the one screen that\n * handles a secret:\n *\n * - It never writes a credential itself. `store` is the caller's, and the CLI\n * points it at the same `AuthStore` `earshot auth login` uses - a second\n * write path would be a second set of file permissions to get wrong.\n * - It never renders, logs or returns a key. What the user types is held in a\n * ref, drawn as bullets, and handed to `store`; `firstPrompt` is the only\n * text that leaves here.\n * - It never runs without a TTY. The caller checks, because a headless run\n * with no credentials must fail fast rather than block on a prompt nobody\n * can answer.\n *\n * It also knows nothing about the provider registry: everything it needs is\n * passed in, which is what keeps the TUI free of provider-specific code and\n * lets the tests drive the whole flow without a network.\n */\n\nexport interface OnboardingProvider {\n readonly id: string;\n readonly models: readonly OnboardingModel[];\n /** How credentials are given: a browser sign-in, or a key. */\n readonly kind: 'oauth' | 'api-key';\n /** Environment variable(s) that would also work, for the hint line. */\n readonly envVars?: readonly string[];\n /** Already configured elsewhere - an env var, or ambient credentials. */\n readonly configured?: string;\n}\n\nexport interface OnboardingModel {\n readonly id: string;\n readonly name: string;\n}\n\n/** Why a probe failed, which is the only thing that decides the next screen. */\nexport type ProbeResult =\n | { ok: true }\n | { ok: false; reason: 'rejected'; message: string }\n | { ok: false; reason: 'unreachable'; message: string }\n | { ok: false; reason: 'other'; message: string };\n\nexport interface OnboardingOptions {\n providers: readonly OnboardingProvider[];\n /** The provider the requested model needs, listed first when it is known. */\n wanted?: string;\n /** The requested model, selected by default when the chosen provider offers it. */\n wantedModel?: string;\n /** Stores an api key. The caller's `AuthStore`, never a second one. */\n storeKey(providerId: string, key: string): Promise<void>;\n /** Removes what was stored, so a rejected key is not left to fail again. */\n forgetKey(providerId: string): Promise<void>;\n /** The existing PKCE flow. `onUrl` is shown as well as opened: over SSH there is no browser. */\n signIn(providerId: string, onUrl: (url: string) => void): Promise<void>;\n /** One minimal live call. The only thing that proves a credential works. */\n probe(providerId: string, modelId: string): Promise<ProbeResult>;\n}\n\nexport interface OnboardingResult {\n /** `ready` means credentials are stored and verified. */\n outcome: 'ready' | 'quit';\n providerId?: string;\n model?: string;\n /** What the user typed on the last screen, run as the first turn. */\n firstPrompt?: string;\n}\n\ntype Screen =\n | { name: 'choose' }\n | { name: 'model'; provider: OnboardingProvider }\n | { name: 'key'; provider: OnboardingProvider; model: OnboardingModel }\n | { name: 'oauth'; provider: OnboardingProvider; model: OnboardingModel; url?: string }\n | { name: 'probing'; provider: OnboardingProvider; model: OnboardingModel }\n | {\n name: 'failed';\n provider: OnboardingProvider;\n model: OnboardingModel;\n result: Extract<ProbeResult, { ok: false }>;\n }\n | { name: 'ready'; provider: OnboardingProvider; model: OnboardingModel };\n\nexport interface OnboardingProps extends OnboardingOptions {\n onDone: (result: OnboardingResult) => void;\n}\n\nexport function Onboarding({ onDone, ...rest }: OnboardingProps) {\n const { exit } = useApp();\n // The props object is rebuilt every render (it is a spread), so the\n // callbacks it carries would otherwise force every effect that uses them to\n // be re-declared - and re-lint - on every keystroke. A ref holds the latest\n // without becoming a dependency.\n const options = useRef(rest);\n options.current = rest;\n const [screen, setScreen] = useState<Screen>({ name: 'choose' });\n const [cursor, setCursor] = useState(0);\n const [input, setInput] = useState('');\n const [error, setError] = useState<string | undefined>();\n\n /**\n * The typed key lives here and never in state.\n *\n * State is rendered; a re-render that put the value on screen - or an error\n * message built from it - would print the secret into the user's scrollback,\n * where it would outlive the process.\n */\n const secret = useRef('');\n\n const providers = order(rest.providers, rest.wanted);\n\n const finish = useCallback(\n (result: OnboardingResult) => {\n onDone(result);\n exit();\n },\n [exit, onDone],\n );\n\n const verify = useCallback(async (provider: OnboardingProvider, model: OnboardingModel) => {\n setScreen({ name: 'probing', provider, model });\n const result = await options.current.probe(provider.id, model.id);\n if (result.ok) {\n setScreen({ name: 'ready', provider, model });\n return;\n }\n // A key the provider refused is worse than no key: it fails again on every\n // future launch, from a file the user has no reason to look in.\n if (result.reason === 'rejected') await options.current.forgetKey(provider.id).catch(() => {});\n setScreen({ name: 'failed', provider, model, result });\n }, []);\n\n const submitKey = useCallback(async () => {\n const selected = screen.name === 'key' ? screen : undefined;\n const key = secret.current;\n secret.current = '';\n setInput('');\n if (!selected) return;\n if (key.trim() === '') {\n setError('a key is needed, or press esc to go back');\n return;\n }\n setError(undefined);\n await options.current.storeKey(selected.provider.id, key.trim());\n await verify(selected.provider, selected.model);\n }, [screen, verify]);\n\n const startSignIn = useCallback(\n async (provider: OnboardingProvider, model: OnboardingModel) => {\n setScreen({ name: 'oauth', provider, model });\n try {\n await options.current.signIn(provider.id, (url) =>\n setScreen({ name: 'oauth', provider, model, url }),\n );\n } catch (failure) {\n setScreen({\n name: 'failed',\n provider,\n model,\n result: { ok: false, reason: 'other', message: (failure as Error).message },\n });\n return;\n }\n await verify(provider, model);\n },\n [verify],\n );\n\n const chooseModel = useCallback(\n (provider: OnboardingProvider, model: OnboardingModel) => {\n setInput('');\n setError(undefined);\n if (provider.configured) void verify(provider, model);\n else if (provider.kind === 'oauth') void startSignIn(provider, model);\n else setScreen({ name: 'key', provider, model });\n },\n [startSignIn, verify],\n );\n\n const chooseProvider = useCallback(\n (provider: OnboardingProvider) => {\n setInput('');\n setError(undefined);\n setCursor(preferredModelIndex(provider.models, rest.wantedModel));\n setScreen({ name: 'model', provider });\n },\n [rest.wantedModel],\n );\n\n useInput((key, meta) => {\n if (meta.ctrl && key === 'c') {\n finish({ outcome: 'quit' });\n return;\n }\n if (screen.name === 'choose') {\n if (key === 'q') {\n finish({ outcome: 'quit' });\n return;\n }\n if (meta.upArrow) setCursor((c) => (c <= 0 ? providers.length - 1 : c - 1));\n if (meta.downArrow) setCursor((c) => (c >= providers.length - 1 ? 0 : c + 1));\n if (meta.return) {\n const provider = providers[cursor];\n if (provider) chooseProvider(provider);\n }\n return;\n }\n if (screen.name === 'model') {\n if (meta.escape) {\n setInput('');\n setError(undefined);\n setCursor(0);\n setScreen({ name: 'choose' });\n return;\n }\n const matches = matchingModels(screen.provider.models, input);\n if (meta.upArrow) setCursor((c) => (c <= 0 ? Math.max(0, matches.length - 1) : c - 1));\n if (meta.downArrow) setCursor((c) => (c >= matches.length - 1 ? 0 : c + 1));\n return;\n }\n if (screen.name === 'key' && !meta.escape) {\n // Typed here rather than through TextInput, which renders the value it is\n // given: a masked field has to keep the value out of the render entirely.\n if (meta.return) {\n void submitKey();\n return;\n }\n if (meta.backspace || meta.delete) {\n secret.current = secret.current.slice(0, -1);\n setInput(secret.current);\n return;\n }\n if (meta.ctrl || meta.meta || meta.tab) return;\n if (key) {\n secret.current += key;\n setInput(secret.current);\n }\n return;\n }\n if (meta.escape) {\n secret.current = '';\n setInput('');\n setError(undefined);\n setScreen(\n screen.name === 'key' || screen.name === 'oauth' || screen.name === 'failed'\n ? { name: 'model', provider: screen.provider }\n : { name: 'choose' },\n );\n return;\n }\n if (screen.name === 'failed' && key === 'k' && screen.result.reason === 'unreachable') {\n // Keeping an unverified key is allowed on purpose: a network that cannot\n // be reached must not be able to lock someone out of their own setup.\n setScreen({ name: 'ready', provider: screen.provider, model: screen.model });\n }\n });\n\n if (screen.name === 'choose') {\n return (\n <Box flexDirection=\"column\">\n <Header />\n {providers.map((provider, index) => (\n <Box key={provider.id}>\n <Text color={index === cursor ? theme.user : theme.muted}>\n {index === cursor ? '› ' : ' '}\n </Text>\n {/* An absent prop, not `undefined`: exactOptionalPropertyTypes. */}\n <Text {...(index === cursor ? { color: theme.user } : {})}>\n {provider.id.padEnd(14)}\n </Text>\n <Text color={theme.muted}>{hint(provider)}</Text>\n </Box>\n ))}\n <Box marginTop={1}>\n <Text color={theme.muted}>↑↓ choose · enter select · q quit</Text>\n </Box>\n {error ? <Text color={theme.warning}>{error}</Text> : null}\n </Box>\n );\n }\n\n if (screen.name === 'model') {\n const matches = matchingModels(screen.provider.models, input);\n const selected = matches[cursor];\n const start = Math.max(0, Math.min(cursor - 3, matches.length - 8));\n return (\n <Box flexDirection=\"column\">\n <Header />\n <Text>\n choose a model from {screen.provider.id} ({matches.length} matching)\n </Text>\n <Box>\n <Text color={theme.user}>{'> '}</Text>\n <TextInput\n value={input}\n onChange={(value) => {\n setInput(value);\n setCursor(0);\n setError(undefined);\n }}\n onSubmit={() => {\n if (selected) chooseModel(screen.provider, selected);\n else setError('no model matches that search');\n }}\n placeholder=\"type to filter models\"\n />\n </Box>\n <Box flexDirection=\"column\" marginTop={1}>\n {matches.slice(start, start + 8).map((model) => (\n <Text key={model.id} color={model === selected ? theme.user : theme.muted}>\n {model === selected ? '› ' : ' '}\n {model.id} · {model.name}\n </Text>\n ))}\n {matches.length === 0 ? <Text color={theme.muted}>no matching models</Text> : null}\n </Box>\n <Box marginTop={1}>\n <Text color={theme.muted}>type filter · ↑↓ choose · enter select · esc back</Text>\n </Box>\n {error ? <Text color={theme.warning}>{error}</Text> : null}\n </Box>\n );\n }\n\n if (screen.name === 'key') {\n return (\n <Box flexDirection=\"column\">\n <Header />\n <Text>paste an api key for {screen.provider.id}</Text>\n <Box marginTop={1}>\n <Text color={theme.muted}>\n {screen.provider.envVars?.length\n ? `or set ${screen.provider.envVars.join(' or ')} instead and restart.\\n`\n : ''}\n stored in your config directory, readable only by you, and never printed.\n </Text>\n </Box>\n <Box marginTop={1}>\n <Text color={theme.user}>{'> '}</Text>\n {/* Bullets, not the key: the value is in a ref and never rendered. */}\n <Text>{'•'.repeat(input.length)}</Text>\n <Text inverse> </Text>\n </Box>\n {error ? <Text color={theme.warning}>{error}</Text> : null}\n <Box marginTop={1}>\n <Text color={theme.muted}>enter continue · esc back</Text>\n </Box>\n </Box>\n );\n }\n\n if (screen.name === 'oauth') {\n return (\n <Box flexDirection=\"column\">\n <Header />\n <Text>signing in to {screen.provider.id} in your browser…</Text>\n {screen.url ? (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color={theme.muted}>if it did not open, use this link:</Text>\n <Text>{screen.url}</Text>\n </Box>\n ) : null}\n <Box marginTop={1}>\n <Text color={theme.muted}>esc cancel</Text>\n </Box>\n </Box>\n );\n }\n\n if (screen.name === 'probing') {\n return (\n <Box flexDirection=\"column\">\n <Header />\n <Text color={theme.muted}>checking the credentials with {screen.provider.id}…</Text>\n </Box>\n );\n }\n\n if (screen.name === 'failed') {\n return (\n <Box flexDirection=\"column\">\n <Header />\n <Text color={theme.warning}>\n {screen.result.reason === 'rejected'\n ? `${screen.provider.id} rejected that credential. It has not been kept.`\n : screen.result.reason === 'unreachable'\n ? `could not reach ${screen.provider.id}.`\n : `${screen.provider.id} said:`}\n </Text>\n <Text color={theme.muted}>{screen.result.message}</Text>\n <Box marginTop={1}>\n <Text color={theme.muted}>\n {screen.result.reason === 'unreachable'\n ? 'k keep it anyway and carry on · esc start over · ctrl-c quit'\n : 'esc start over · ctrl-c quit'}\n </Text>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text color={theme.user}>\n ready: {screen.provider.id}/{screen.model.id}\n </Text>\n <Box marginTop={1}>\n <Text color={theme.muted}>what should I do? (enter to start with nothing)</Text>\n </Box>\n <Box>\n <Text color={theme.user}>{'> '}</Text>\n <TextInput\n value={input}\n onChange={setInput}\n onSubmit={(text) =>\n finish({\n outcome: 'ready',\n providerId: screen.provider.id,\n model: `${screen.provider.id}/${screen.model.id}`,\n firstPrompt: text.trim(),\n })\n }\n />\n </Box>\n </Box>\n );\n}\n\nfunction Header() {\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text>earshot needs a model provider before it can do anything.</Text>\n </Box>\n );\n}\n\nfunction hint(provider: OnboardingProvider): string {\n if (provider.configured) return provider.configured;\n if (provider.kind === 'oauth') return 'sign in with a browser - no key to paste';\n return provider.envVars?.length ? provider.envVars.join(' or ') : 'api key';\n}\n\nfunction matchingModels(\n models: readonly OnboardingModel[],\n query: string,\n): readonly OnboardingModel[] {\n const wanted = query.trim().toLowerCase();\n if (!wanted) return models;\n return models.filter(\n (model) => model.id.toLowerCase().includes(wanted) || model.name.toLowerCase().includes(wanted),\n );\n}\n\nfunction preferredModelIndex(models: readonly OnboardingModel[], wanted?: string): number {\n if (!wanted) return 0;\n const modelId = wanted.includes('/') ? wanted.slice(wanted.indexOf('/') + 1) : wanted;\n const index = models.findIndex((model) => model.id === wanted || model.id === modelId);\n return Math.max(0, index);\n}\n\n/** The provider the requested model needs goes first; it is why we are here. */\nfunction order(\n providers: readonly OnboardingProvider[],\n wanted?: string,\n): readonly OnboardingProvider[] {\n if (!wanted) return providers;\n return [\n ...providers.filter((provider) => provider.id === wanted),\n ...providers.filter((provider) => provider.id !== wanted),\n ];\n}\n",
98
- "import { platform } from 'node:os';\nimport type { CreatedSession, UserPrompt } from '@earshot/core';\nimport { render } from 'ink';\nimport { App } from './app.tsx';\nimport { Onboarding, type OnboardingOptions, type OnboardingResult } from './onboarding.tsx';\n\nexport interface RunTuiOptions {\n session: CreatedSession;\n model: string;\n initialPrompt?: UserPrompt;\n}\n\n/**\n * Windows renders more slowly and repaints more visibly than a POSIX terminal,\n * so the frame rate is capped rather than left at Ink's default. 30 is not a\n * performance tuning number: above it, ConPTY's repaint of the live region\n * flickers badly enough to be unpleasant to watch during a long turn.\n */\nconst WINDOWS_MAX_FPS = 30;\n\n/**\n * Starts the interactive app.\n *\n * Nothing in this package writes a DA1 (`CSI c`) or DCS terminal query. ConPTY\n * does not answer them and does not fail either: the query is swallowed and the\n * process sits waiting for a reply that never arrives, which presents to the\n * user as earshot hanging for a minute on startup. Any future capability\n * detection has to be feature-flagged off on Windows for the same reason, which\n * is why colour support is assumed from Ink's own detection rather than probed.\n */\nexport async function runTui(options: RunTuiOptions): Promise<number> {\n const isWindows = platform() === 'win32';\n\n const instance = render(\n <App\n session={options.session}\n model={options.model}\n {...(options.initialPrompt ? { initialPrompt: options.initialPrompt } : {})}\n />,\n {\n // Ctrl-C is handled by the app so a running turn can be interrupted without\n // tearing down the terminal mid-render and leaving it in a raw mode.\n exitOnCtrlC: false,\n // Console output from a dependency would otherwise be interleaved into the\n // live region and corrupt the frame Ink believes it has drawn.\n patchConsole: true,\n ...(isWindows ? { maxFps: WINDOWS_MAX_FPS } : {}),\n },\n );\n\n try {\n await instance.waitUntilExit();\n } finally {\n await options.session.dispose();\n }\n return 0;\n}\n\n/**\n * Runs first-run onboarding and resolves with what it decided.\n *\n * Rendered with the same options as the app - Ctrl-C is the component's, not\n * Ink's, so quitting is one code path rather than two. The caller has already\n * established there is a TTY; onboarding must never be reached from a headless\n * or ACP run, where there is nobody to answer it.\n */\nexport async function runOnboarding(options: OnboardingOptions): Promise<OnboardingResult> {\n const isWindows = platform() === 'win32';\n let result: OnboardingResult = { outcome: 'quit' };\n\n const instance = render(\n <Onboarding\n {...options}\n onDone={(decided) => {\n result = decided;\n }}\n />,\n {\n exitOnCtrlC: false,\n patchConsole: true,\n ...(isWindows ? { maxFps: WINDOWS_MAX_FPS } : {}),\n },\n );\n\n await instance.waitUntilExit();\n return result;\n}\n",
99
- "import { resolveModel, streamModel } from '@earshot/core';\nimport {\n type AuthSpec,\n AuthStore,\n buildRegistry,\n loginToOpenRouter,\n type Provider,\n resolveCredentials,\n} from '@earshot/providers';\nimport type { OnboardingOptions, OnboardingProvider, ProbeResult } from '@earshot/tui';\n\n/**\n * Turns the provider registry and auth store into what `Onboarding` needs.\n *\n * Kept out of packages/tui deliberately: the component takes plain callbacks so\n * it can be driven in tests with no registry and no network, and this is the\n * one place that binds it to the real one.\n */\nexport async function buildOnboardingOptions(\n wanted?: string,\n wantedModel?: string,\n): Promise<OnboardingOptions> {\n const registry = buildRegistry();\n const store = new AuthStore();\n\n const providers: OnboardingProvider[] = [];\n for (const provider of registry.list()) {\n if (provider.auth.kind === 'none') continue;\n providers.push(await describe(provider, store));\n }\n // OAuth first: signing in needs nothing typed, which is the easiest way for\n // someone who has never used earshot before to get past this screen.\n providers.sort((a, b) => Number(b.kind === 'oauth') - Number(a.kind === 'oauth'));\n\n return {\n providers,\n ...(wanted ? { wanted } : {}),\n ...(wantedModel ? { wantedModel } : {}),\n storeKey: (providerId, key) => store.set(providerId, { type: 'api-key', apiKey: key }),\n forgetKey: (providerId) => store.remove(providerId),\n signIn: async (providerId, onUrl) => {\n const credentials = await loginToOpenRouter({ onUrl });\n await store.set(providerId, credentials);\n },\n probe: (providerId, modelId) => probe(registry, providerId, modelId),\n };\n}\n\nasync function describe(provider: Provider, store: AuthStore): Promise<OnboardingProvider> {\n const configured = await resolveCredentials(provider, { store }).catch(() => undefined);\n return {\n id: provider.id,\n models: provider.models().map((model) => ({ id: model.id, name: model.name })),\n kind: provider.auth.kind === 'oauth' ? 'oauth' : 'api-key',\n ...(envVarsOf(provider.auth).length ? { envVars: envVarsOf(provider.auth) } : {}),\n ...(configured ? { configured: describeConfigured(configured.type) } : {}),\n };\n}\n\nfunction envVarsOf(auth: AuthSpec): string[] {\n return auth.kind === 'api-key' || auth.kind === 'oauth' ? (auth.envVars ?? []) : [];\n}\n\nfunction describeConfigured(kind: 'ambient' | 'oauth' | 'api-key'): string {\n return kind === 'ambient'\n ? 'ambient credentials'\n : kind === 'oauth'\n ? 'signed in'\n : 'api key set';\n}\n\n/**\n * One minimal live call, spending a fraction of a cent to prove the credential\n * actually works. Structural validation (a non-empty string) tells you nothing\n * a provider could not reject a second later on the user's first real turn.\n */\nasync function probe(\n registry: ReturnType<typeof buildRegistry>,\n providerId: string,\n modelId: string,\n): Promise<ProbeResult> {\n const listed = registry.list().find((provider) => provider.id === providerId);\n if (!listed) return { ok: false, reason: 'other', message: `unknown provider \"${providerId}\"` };\n\n const model = listed.models().find((candidate) => candidate.id === modelId);\n if (!model) {\n return {\n ok: false,\n reason: 'other',\n message: `${providerId} does not publish model \"${modelId}\"`,\n };\n }\n\n let resolved: Awaited<ReturnType<typeof resolveModel>>;\n try {\n resolved = await resolveModel(registry, `${providerId}/${model.id}`);\n } catch (error) {\n return { ok: false, reason: 'other', message: (error as Error).message };\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n try {\n for await (const event of streamModel(registry, resolved, {\n system: 'Reply with one word.',\n messages: [{ role: 'user', content: [{ type: 'text', text: 'hi' }] }],\n maxOutputTokens: 1,\n abortSignal: controller.signal,\n })) {\n // The first event of any kind proves the request round-tripped; nothing\n // further needs spending.\n controller.abort();\n if (event.type === 'error') {\n return event.error.kind === 'auth'\n ? { ok: false, reason: 'rejected', message: event.error.message }\n : event.error.kind === 'network'\n ? { ok: false, reason: 'unreachable', message: event.error.message }\n : { ok: false, reason: 'other', message: event.error.message };\n }\n return { ok: true };\n }\n return { ok: true };\n } catch (error) {\n const message = (error as Error).message;\n const timedOut = controller.signal.aborted && (error as Error).name === 'AbortError';\n return timedOut\n ? { ok: false, reason: 'unreachable', message: 'timed out waiting for a response' }\n : { ok: false, reason: 'other', message };\n } finally {\n clearTimeout(timeout);\n }\n}\n",
100
- "import {\n createSession,\n isPermissionMode,\n MissingCredentialsError,\n NoSessionToResumeError,\n type PermissionMode,\n UnknownModelError,\n} from '@earshot/core';\nimport { runOnboarding, runTui } from '@earshot/tui';\nimport type { ParsedArgs } from '../args.ts';\nimport { parseCuriosity, parseMaxCost } from '../budget.ts';\nimport { startExtensions } from '../extensions/index.ts';\nimport { loadImage } from '../image.ts';\nimport { buildOnboardingOptions } from '../onboard.ts';\n\nconst DEFAULT_MODEL = 'anthropic/claude-opus-5';\n\n/**\n * The default command: the interactive TUI.\n *\n * Refuses to start without a TTY rather than rendering into a pipe. Ink would\n * happily draw frames into a redirect and produce a file full of escape\n * sequences; someone piping earshot almost certainly wanted `-p`, and the error\n * says so.\n */\nexport async function interactiveCommand(args: ParsedArgs): Promise<number> {\n const flags = args.flags;\n\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n process.stderr.write(\n 'earshot needs an interactive terminal. For scripted use, run `earshot -p \"<prompt>\"`.\\n',\n );\n return 2;\n }\n\n let mode: PermissionMode | undefined;\n const requested = flags['permission-mode'];\n if (typeof requested === 'string') {\n if (!isPermissionMode(requested)) {\n process.stderr.write(`\"${requested}\" is not a permission mode\\n`);\n return 2;\n }\n mode = requested;\n }\n\n // A bare `earshot \"do the thing\"` starts the TUI with that first turn already\n // running, which is how most sessions actually begin.\n const initialPrompt = args.positionals.join(' ').trim();\n let image: Awaited<ReturnType<typeof loadImage>> | undefined;\n if (typeof flags.image === 'string') {\n try {\n image = await loadImage(flags.image, process.cwd());\n } catch (error) {\n process.stderr.write(`image: ${(error as Error).message}\\n`);\n return 2;\n }\n }\n\n const curiosity = parseCuriosity(flags.curiosity);\n if (curiosity === 'invalid') {\n process.stderr.write(`\"${flags.curiosity}\" is not a curiosity level: low, normal or high\\n`);\n return 2;\n }\n const maxCostUsd = parseMaxCost(flags['max-cost']);\n if (maxCostUsd === 'invalid') {\n process.stderr.write(`\"${flags['max-cost']}\" is not an amount in dollars\\n`);\n return 2;\n }\n\n const extensions = await startExtensions(process.cwd());\n let model = typeof flags.model === 'string' ? flags.model : DEFAULT_MODEL;\n // `--no-onboarding` is for CI and for anyone who wants the old dead-end back.\n const onboardingAllowed = flags['no-onboarding'] !== true;\n\n let firstPrompt = initialPrompt;\n let attempted = false;\n\n for (;;) {\n try {\n const session = await createSession({\n cwd: process.cwd(),\n extraTools: extensions.tools,\n problems: extensions.problems,\n onDispose: () => extensions.close(),\n model,\n ...(mode ? { mode } : {}),\n ...(typeof flags['api-key'] === 'string' ? { apiKey: flags['api-key'] } : {}),\n ...(curiosity ? { curiosity } : {}),\n ...(maxCostUsd !== undefined ? { maxCostUsd } : {}),\n ...resumeFrom(flags),\n });\n\n return await runTui({\n session,\n model,\n ...(firstPrompt !== '' || image\n ? {\n initialPrompt: image\n ? [...(firstPrompt ? [{ type: 'text' as const, text: firstPrompt }] : []), image]\n : firstPrompt,\n }\n : {}),\n });\n } catch (error) {\n if (error instanceof MissingCredentialsError && onboardingAllowed && !attempted) {\n // Only ever offered once: a second `MissingCredentialsError` after\n // onboarding said it stored working credentials means something else is\n // wrong, and looping back into the same screens would hide that.\n attempted = true;\n const result = await runOnboarding(await buildOnboardingOptions(error.provider.id, model));\n if (result.outcome === 'quit') {\n process.stdout.write(\n 'nothing was stored. run `earshot auth login <provider>` when you are ready.\\n',\n );\n await extensions.close();\n return 0;\n }\n if (result.model) model = result.model;\n firstPrompt = result.firstPrompt ?? firstPrompt;\n continue;\n }\n // The session never reached dispose(), so anything already spawned is\n // ours to clean up here or it outlives the process that started it.\n await extensions.close();\n if (error instanceof UnknownModelError) {\n process.stderr.write(\n `${error.message}\\n\\nrun \\`earshot models\\` to see what is available\\n`,\n );\n return 2;\n }\n if (error instanceof MissingCredentialsError) {\n process.stderr.write(`${error.message}\\n`);\n return 3;\n }\n if (error instanceof NoSessionToResumeError) {\n process.stderr.write(`${error.message}\\n`);\n return 2;\n }\n throw error;\n }\n }\n}\n\nfunction resumeFrom(flags: ParsedArgs['flags']) {\n if (typeof flags.resume === 'string') return { resume: { path: flags.resume } } as const;\n if (flags.continue === true || flags.resume === true)\n return { resume: { latest: true } } as const;\n return {};\n}\n",
100
+ "import type { ReasoningEffort } from '@earshot/providers';\nimport { Box, Text, useApp, useInput } from 'ink';\nimport { useCallback, useRef, useState } from 'react';\nimport { TextInput } from './components/text-input.tsx';\nimport { theme } from './theme.ts';\n\n/**\n * First-run onboarding.\n *\n * What this module is *not* allowed to do, because it is the one screen that\n * handles a secret:\n *\n * - It never writes a credential itself. `store` is the caller's, and the CLI\n * points it at the same `AuthStore` `earshot auth login` uses - a second\n * write path would be a second set of file permissions to get wrong.\n * - It never renders, logs or returns a key. What the user types is held in a\n * ref, drawn as bullets, and handed to `store`.\n * - It never runs without a TTY. The caller checks, because a headless run\n * with no credentials must fail fast rather than block on a prompt nobody\n * can answer.\n *\n * It also knows nothing about the provider registry: everything it needs is\n * passed in, which is what keeps the TUI free of provider-specific code and\n * lets the tests drive the whole flow without a network.\n */\n\nexport interface OnboardingProvider {\n readonly id: string;\n readonly models: readonly OnboardingModel[];\n /** How credentials are given: a browser sign-in, or a key. */\n readonly kind: 'oauth' | 'api-key';\n /** Environment variable(s) that would also work, for the hint line. */\n readonly envVars?: readonly string[];\n /** Already configured elsewhere - an env var, or ambient credentials. */\n readonly configured?: string;\n}\n\nexport interface OnboardingModel {\n readonly id: string;\n readonly name: string;\n readonly reasoning?: boolean;\n}\n\n/** Why a probe failed, which is the only thing that decides the next screen. */\nexport type ProbeResult =\n | { ok: true }\n | { ok: false; reason: 'rejected'; message: string }\n | { ok: false; reason: 'unreachable'; message: string }\n | { ok: false; reason: 'other'; message: string };\n\nexport interface OnboardingOptions {\n providers: readonly OnboardingProvider[];\n /** The provider the requested model needs, listed first when it is known. */\n wanted?: string;\n /** The requested model, selected by default when the chosen provider offers it. */\n wantedModel?: string;\n /** Stores an api key. The caller's `AuthStore`, never a second one. */\n storeKey(providerId: string, key: string): Promise<void>;\n /** Removes what was stored, so a rejected key is not left to fail again. */\n forgetKey(providerId: string): Promise<void>;\n /** The existing PKCE flow. `onUrl` is shown as well as opened: over SSH there is no browser. */\n signIn(providerId: string, onUrl: (url: string) => void): Promise<void>;\n /** One minimal live call. The only thing that proves a credential works. */\n probe(providerId: string, modelId: string): Promise<ProbeResult>;\n reasoningFor?(model: string): ReasoningEffort | undefined;\n remember?(\n model: string,\n effort: ReasoningEffort | undefined,\n scope: 'global' | 'project',\n ): Promise<void>;\n}\n\nexport interface OnboardingResult {\n /** `ready` means credentials are stored and verified. */\n outcome: 'ready' | 'quit';\n providerId?: string;\n model?: string;\n reasoningEffort?: ReasoningEffort;\n scope?: 'global' | 'project';\n}\n\ntype Screen =\n | { name: 'choose' }\n | { name: 'model'; provider: OnboardingProvider }\n | { name: 'key'; provider: OnboardingProvider; model: OnboardingModel }\n | { name: 'oauth'; provider: OnboardingProvider; model: OnboardingModel; url?: string }\n | { name: 'probing'; provider: OnboardingProvider; model: OnboardingModel }\n | { name: 'effort'; provider: OnboardingProvider; model: OnboardingModel }\n | {\n name: 'failed';\n provider: OnboardingProvider;\n model: OnboardingModel;\n result: Extract<ProbeResult, { ok: false }>;\n };\n\nexport interface OnboardingProps extends OnboardingOptions {\n onDone: (result: OnboardingResult) => void;\n embedded?: boolean;\n defaultScope?: 'global' | 'project';\n}\n\nconst EFFORTS = ['auto', 'none', 'low', 'medium', 'high', 'xhigh'] as const;\n\nexport function Onboarding({\n onDone,\n embedded = false,\n defaultScope = 'global',\n ...rest\n}: OnboardingProps) {\n const { exit } = useApp();\n // The props object is rebuilt every render (it is a spread), so the\n // callbacks it carries would otherwise force every effect that uses them to\n // be re-declared - and re-lint - on every keystroke. A ref holds the latest\n // without becoming a dependency.\n const options = useRef(rest);\n options.current = rest;\n const [screen, setScreen] = useState<Screen>({ name: 'choose' });\n const [cursor, setCursor] = useState(0);\n const [input, setInput] = useState('');\n const [error, setError] = useState<string | undefined>();\n\n /**\n * The typed key lives here and never in state.\n *\n * State is rendered; a re-render that put the value on screen - or an error\n * message built from it - would print the secret into the user's scrollback,\n * where it would outlive the process.\n */\n const secret = useRef('');\n\n const providers = order(rest.providers, rest.wanted);\n\n const finish = useCallback(\n (result: OnboardingResult) => {\n onDone(result);\n if (!embedded) exit();\n },\n [embedded, exit, onDone],\n );\n\n const complete = useCallback(\n (\n provider: OnboardingProvider,\n model: OnboardingModel,\n scope = defaultScope,\n effort?: ReasoningEffort,\n ) =>\n finish({\n outcome: 'ready',\n providerId: provider.id,\n model: `${provider.id}/${model.id}`,\n scope,\n ...(effort ? { reasoningEffort: effort } : {}),\n }),\n [defaultScope, finish],\n );\n\n const readyForEffort = useCallback(\n (provider: OnboardingProvider, model: OnboardingModel) => {\n const remembered = options.current.reasoningFor?.(`${provider.id}/${model.id}`);\n setCursor(remembered ? Math.max(0, EFFORTS.indexOf(remembered)) : 0);\n if (model.reasoning) setScreen({ name: 'effort', provider, model });\n else complete(provider, model);\n },\n [complete],\n );\n\n const verify = useCallback(\n async (provider: OnboardingProvider, model: OnboardingModel) => {\n setScreen({ name: 'probing', provider, model });\n const result = await options.current.probe(provider.id, model.id);\n if (result.ok) {\n readyForEffort(provider, model);\n return;\n }\n // A key the provider refused is worse than no key: it fails again on every\n // future launch, from a file the user has no reason to look in.\n if (result.reason === 'rejected')\n await options.current.forgetKey(provider.id).catch(() => {});\n setScreen({ name: 'failed', provider, model, result });\n },\n [readyForEffort],\n );\n\n const submitKey = useCallback(async () => {\n const selected = screen.name === 'key' ? screen : undefined;\n const key = secret.current;\n secret.current = '';\n setInput('');\n if (!selected) return;\n if (key.trim() === '') {\n setError('a key is needed, or press esc to go back');\n return;\n }\n setError(undefined);\n await options.current.storeKey(selected.provider.id, key.trim());\n await verify(selected.provider, selected.model);\n }, [screen, verify]);\n\n const startSignIn = useCallback(\n async (provider: OnboardingProvider, model: OnboardingModel) => {\n setScreen({ name: 'oauth', provider, model });\n try {\n await options.current.signIn(provider.id, (url) =>\n setScreen({ name: 'oauth', provider, model, url }),\n );\n } catch (failure) {\n setScreen({\n name: 'failed',\n provider,\n model,\n result: { ok: false, reason: 'other', message: (failure as Error).message },\n });\n return;\n }\n await verify(provider, model);\n },\n [verify],\n );\n\n const chooseModel = useCallback(\n (provider: OnboardingProvider, model: OnboardingModel) => {\n setInput('');\n setError(undefined);\n if (provider.configured) readyForEffort(provider, model);\n else if (provider.kind === 'oauth') void startSignIn(provider, model);\n else setScreen({ name: 'key', provider, model });\n },\n [readyForEffort, startSignIn],\n );\n\n const chooseProvider = useCallback(\n (provider: OnboardingProvider) => {\n setInput('');\n setError(undefined);\n setCursor(preferredModelIndex(provider.models, rest.wantedModel));\n setScreen({ name: 'model', provider });\n },\n [rest.wantedModel],\n );\n\n useInput((key, meta) => {\n if (meta.ctrl && key === 'c') {\n finish({ outcome: 'quit' });\n return;\n }\n if (screen.name === 'choose') {\n if (key === 'q') {\n finish({ outcome: 'quit' });\n return;\n }\n if (meta.upArrow) setCursor((c) => (c <= 0 ? providers.length - 1 : c - 1));\n if (meta.downArrow) setCursor((c) => (c >= providers.length - 1 ? 0 : c + 1));\n if (meta.return) {\n const provider = providers[cursor];\n if (provider) chooseProvider(provider);\n }\n return;\n }\n if (screen.name === 'model') {\n if (meta.escape) {\n setInput('');\n setError(undefined);\n setCursor(0);\n setScreen({ name: 'choose' });\n return;\n }\n const matches = matchingModels(screen.provider.models, input);\n if (embedded && meta.ctrl && key === 'g') {\n const selected = matches[cursor];\n if (selected) {\n if (selected.reasoning) {\n setCursor(0);\n setScreen({ name: 'effort', provider: screen.provider, model: selected });\n } else complete(screen.provider, selected, 'global');\n }\n return;\n }\n if (meta.upArrow) setCursor((c) => (c <= 0 ? Math.max(0, matches.length - 1) : c - 1));\n if (meta.downArrow) setCursor((c) => (c >= matches.length - 1 ? 0 : c + 1));\n return;\n }\n if (screen.name === 'effort') {\n if (meta.escape) {\n setCursor(preferredModelIndex(screen.provider.models, rest.wantedModel));\n setScreen({ name: 'model', provider: screen.provider });\n return;\n }\n if (meta.upArrow) setCursor((c) => (c <= 0 ? EFFORTS.length - 1 : c - 1));\n if (meta.downArrow) setCursor((c) => (c >= EFFORTS.length - 1 ? 0 : c + 1));\n const selected = EFFORTS[cursor] ?? 'auto';\n if (meta.return || (embedded && key === 'g')) {\n complete(\n screen.provider,\n screen.model,\n embedded && key === 'g' ? 'global' : defaultScope,\n selected === 'auto' ? undefined : selected,\n );\n }\n return;\n }\n if (screen.name === 'key' && !meta.escape) {\n // Typed here rather than through TextInput, which renders the value it is\n // given: a masked field has to keep the value out of the render entirely.\n if (meta.return) {\n void submitKey();\n return;\n }\n if (meta.backspace || meta.delete) {\n secret.current = secret.current.slice(0, -1);\n setInput(secret.current);\n return;\n }\n if (meta.ctrl || meta.meta || meta.tab) return;\n if (key) {\n secret.current += key;\n setInput(secret.current);\n }\n return;\n }\n if (meta.escape) {\n secret.current = '';\n setInput('');\n setError(undefined);\n setScreen(\n screen.name === 'key' || screen.name === 'oauth' || screen.name === 'failed'\n ? { name: 'model', provider: screen.provider }\n : { name: 'choose' },\n );\n return;\n }\n if (screen.name === 'failed' && key === 'k' && screen.result.reason === 'unreachable') {\n // Keeping an unverified key is allowed on purpose: a network that cannot\n // be reached must not be able to lock someone out of their own setup.\n readyForEffort(screen.provider, screen.model);\n }\n });\n\n if (screen.name === 'choose') {\n return (\n <Box flexDirection=\"column\">\n <Header embedded={embedded} />\n {providers.map((provider, index) => (\n <Box key={provider.id}>\n <Text color={index === cursor ? theme.user : theme.muted}>\n {index === cursor ? '› ' : ' '}\n </Text>\n {/* An absent prop, not `undefined`: exactOptionalPropertyTypes. */}\n <Text {...(index === cursor ? { color: theme.user } : {})}>\n {provider.id.padEnd(14)}\n </Text>\n <Text color={theme.muted}>{hint(provider)}</Text>\n </Box>\n ))}\n <Box marginTop={1}>\n <Text color={theme.muted}>↑↓ choose · enter select · q quit</Text>\n </Box>\n {error ? <Text color={theme.warning}>{error}</Text> : null}\n </Box>\n );\n }\n\n if (screen.name === 'model') {\n const matches = matchingModels(screen.provider.models, input);\n const selected = matches[cursor];\n const start = Math.max(0, Math.min(cursor - 3, matches.length - 8));\n return (\n <Box flexDirection=\"column\">\n <Header embedded={embedded} />\n <Text>\n choose a model from {screen.provider.id} ({matches.length} matching)\n </Text>\n <Box>\n <Text color={theme.user}>{'> '}</Text>\n <TextInput\n value={input}\n onChange={(value) => {\n setInput(value);\n setCursor(0);\n setError(undefined);\n }}\n onSubmit={() => {\n if (selected) chooseModel(screen.provider, selected);\n else setError('no model matches that search');\n }}\n placeholder=\"type to filter models\"\n />\n </Box>\n <Box flexDirection=\"column\" marginTop={1}>\n {matches.slice(start, start + 8).map((model) => (\n <Text key={model.id} color={model === selected ? theme.user : theme.muted}>\n {model === selected ? '› ' : ' '}\n {model.id} · {model.name}\n </Text>\n ))}\n {matches.length === 0 ? <Text color={theme.muted}>no matching models</Text> : null}\n </Box>\n <Box marginTop={1}>\n <Text color={theme.muted}>type filter · ↑↓ choose · enter select · esc back</Text>\n </Box>\n {error ? <Text color={theme.warning}>{error}</Text> : null}\n </Box>\n );\n }\n\n if (screen.name === 'key') {\n return (\n <Box flexDirection=\"column\">\n <Header embedded={embedded} />\n <Text>paste an api key for {screen.provider.id}</Text>\n <Box marginTop={1}>\n <Text color={theme.muted}>\n {screen.provider.envVars?.length\n ? `or set ${screen.provider.envVars.join(' or ')} instead and restart.\\n`\n : ''}\n stored in your config directory, readable only by you, and never printed.\n </Text>\n </Box>\n <Box marginTop={1}>\n <Text color={theme.user}>{'> '}</Text>\n {/* Bullets, not the key: the value is in a ref and never rendered. */}\n <Text>{'•'.repeat(input.length)}</Text>\n <Text inverse> </Text>\n </Box>\n {error ? <Text color={theme.warning}>{error}</Text> : null}\n <Box marginTop={1}>\n <Text color={theme.muted}>enter continue · esc back</Text>\n </Box>\n </Box>\n );\n }\n\n if (screen.name === 'oauth') {\n return (\n <Box flexDirection=\"column\">\n <Header embedded={embedded} />\n <Text>signing in to {screen.provider.id} in your browser…</Text>\n {screen.url ? (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color={theme.muted}>if it did not open, use this link:</Text>\n <Text>{screen.url}</Text>\n </Box>\n ) : null}\n <Box marginTop={1}>\n <Text color={theme.muted}>esc cancel</Text>\n </Box>\n </Box>\n );\n }\n\n if (screen.name === 'probing') {\n return (\n <Box flexDirection=\"column\">\n <Header embedded={embedded} />\n <Text color={theme.muted}>checking the credentials with {screen.provider.id}…</Text>\n </Box>\n );\n }\n\n if (screen.name === 'failed') {\n return (\n <Box flexDirection=\"column\">\n <Header embedded={embedded} />\n <Text color={theme.warning}>\n {screen.result.reason === 'rejected'\n ? `${screen.provider.id} rejected that credential. It has not been kept.`\n : screen.result.reason === 'unreachable'\n ? `could not reach ${screen.provider.id}.`\n : `${screen.provider.id} said:`}\n </Text>\n <Text color={theme.muted}>{screen.result.message}</Text>\n <Box marginTop={1}>\n <Text color={theme.muted}>\n {screen.result.reason === 'unreachable'\n ? 'k keep it anyway and carry on · esc start over · ctrl-c quit'\n : 'esc start over · ctrl-c quit'}\n </Text>\n </Box>\n </Box>\n );\n }\n\n if (screen.name === 'effort')\n return (\n <Box flexDirection=\"column\">\n <Header embedded={embedded} />\n <Text>reasoning effort for {screen.model.name}</Text>\n <Box flexDirection=\"column\" marginTop={1}>\n {EFFORTS.map((effort, index) => (\n <Text key={effort} color={index === cursor ? theme.user : theme.muted}>\n {index === cursor ? '› ' : ' '}\n {effort}\n </Text>\n ))}\n </Box>\n <Text color={theme.muted}>\n ↑↓ choose · enter use{embedded ? ' here · g use everywhere' : ''} · esc back\n </Text>\n </Box>\n );\n\n return null;\n}\n\nfunction Header({ embedded }: { embedded: boolean }) {\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text>\n {embedded ? 'switch model' : 'earshot needs a model provider before it can do anything.'}\n </Text>\n </Box>\n );\n}\n\nfunction hint(provider: OnboardingProvider): string {\n if (provider.configured) return provider.configured;\n if (provider.kind === 'oauth') return 'sign in with a browser - no key to paste';\n return provider.envVars?.length ? provider.envVars.join(' or ') : 'api key';\n}\n\nfunction matchingModels(\n models: readonly OnboardingModel[],\n query: string,\n): readonly OnboardingModel[] {\n const wanted = query.trim().toLowerCase();\n if (!wanted) return models;\n return models.filter(\n (model) => model.id.toLowerCase().includes(wanted) || model.name.toLowerCase().includes(wanted),\n );\n}\n\nfunction preferredModelIndex(models: readonly OnboardingModel[], wanted?: string): number {\n if (!wanted) return 0;\n const modelId = wanted.includes('/') ? wanted.slice(wanted.indexOf('/') + 1) : wanted;\n const index = models.findIndex((model) => model.id === wanted || model.id === modelId);\n return Math.max(0, index);\n}\n\n/** The provider the requested model needs goes first; it is why we are here. */\nfunction order(\n providers: readonly OnboardingProvider[],\n wanted?: string,\n): readonly OnboardingProvider[] {\n if (!wanted) return providers;\n return [\n ...providers.filter((provider) => provider.id === wanted),\n ...providers.filter((provider) => provider.id !== wanted),\n ];\n}\n",
101
+ "import type { SessionInfo } from '@earshot/core';\nimport { Box, Text, useApp, useInput } from 'ink';\nimport { useMemo, useState } from 'react';\nimport { TextInput } from './components/text-input.tsx';\nimport { theme } from './theme.ts';\n\nexport function SessionPicker({\n sessions,\n onDone,\n embedded = false,\n}: {\n sessions: readonly SessionInfo[];\n onDone(path?: string): void;\n embedded?: boolean;\n}) {\n const { exit } = useApp();\n const [query, setQuery] = useState('');\n const [cursor, setCursor] = useState(0);\n const matches = useMemo(() => {\n const wanted = query.trim().toLowerCase();\n return wanted\n ? sessions.filter((session) =>\n `${session.preview} ${session.model} ${session.id}`.toLowerCase().includes(wanted),\n )\n : sessions;\n }, [query, sessions]);\n\n const finish = (path?: string) => {\n onDone(path);\n if (!embedded) exit();\n };\n\n useInput((input, key) => {\n if (key.escape || (input === 'q' && query === '')) return finish();\n if (key.upArrow)\n setCursor((value) => (value <= 0 ? Math.max(0, matches.length - 1) : value - 1));\n if (key.downArrow) setCursor((value) => (value >= matches.length - 1 ? 0 : value + 1));\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text>saved chats for this project</Text>\n <Box marginTop={1}>\n <Text color={theme.user}>{'> '}</Text>\n <TextInput\n value={query}\n onChange={(value) => {\n setQuery(value);\n setCursor(0);\n }}\n onSubmit={() => {\n const selected = matches[cursor];\n if (selected) finish(selected.path);\n }}\n placeholder=\"filter chats\"\n />\n </Box>\n <Box flexDirection=\"column\" marginTop={1}>\n {matches.slice(Math.max(0, cursor - 4), Math.max(0, cursor - 4) + 9).map((session) => (\n <Text key={session.id} color={session === matches[cursor] ? theme.user : theme.muted}>\n {session === matches[cursor] ? '› ' : ' '}\n {session.preview.padEnd(42).slice(0, 42)} {relativeTime(session.updatedAt).padStart(8)}{' '}\n {session.model} {session.id.slice(0, 8)}\n </Text>\n ))}\n {matches.length === 0 && <Text color={theme.muted}>no saved chats match</Text>}\n </Box>\n <Box marginTop={1}>\n <Text color={theme.muted}>type filter · ↑↓ choose · enter resume · esc quit</Text>\n </Box>\n </Box>\n );\n}\n\nfunction relativeTime(updatedAt: number): string {\n const seconds = Math.max(0, Math.floor((Date.now() - updatedAt) / 1000));\n if (seconds < 60) return 'now';\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n return `${Math.floor(hours / 24)}d ago`;\n}\n",
102
+ "import { platform } from 'node:os';\nimport type { CreatedSession, SessionInfo, UserPrompt } from '@earshot/core';\nimport { render } from 'ink';\nimport { App } from './app.tsx';\nimport { Onboarding, type OnboardingOptions, type OnboardingResult } from './onboarding.tsx';\nimport { SessionPicker } from './sessions.tsx';\n\nexport interface RunTuiOptions {\n session: CreatedSession;\n model: string;\n initialPrompt?: UserPrompt;\n modelOptions?: OnboardingOptions;\n}\n\nexport interface RunTuiResult {\n exitCode: number;\n resumePath?: string;\n}\n\n/**\n * Windows renders more slowly and repaints more visibly than a POSIX terminal,\n * so the frame rate is capped rather than left at Ink's default. 30 is not a\n * performance tuning number: above it, ConPTY's repaint of the live region\n * flickers badly enough to be unpleasant to watch during a long turn.\n */\nconst WINDOWS_MAX_FPS = 30;\n\n/**\n * Starts the interactive app.\n *\n * Nothing in this package writes a DA1 (`CSI c`) or DCS terminal query. ConPTY\n * does not answer them and does not fail either: the query is swallowed and the\n * process sits waiting for a reply that never arrives, which presents to the\n * user as earshot hanging for a minute on startup. Any future capability\n * detection has to be feature-flagged off on Windows for the same reason, which\n * is why colour support is assumed from Ink's own detection rather than probed.\n */\nexport async function runTui(options: RunTuiOptions): Promise<RunTuiResult> {\n const isWindows = platform() === 'win32';\n let resumePath: string | undefined;\n\n const instance = render(\n <App\n session={options.session}\n model={options.model}\n {...(options.initialPrompt ? { initialPrompt: options.initialPrompt } : {})}\n {...(options.modelOptions ? { modelOptions: options.modelOptions } : {})}\n onResume={(path) => {\n resumePath = path;\n }}\n />,\n {\n // Ctrl-C is handled by the app so a running turn can be interrupted without\n // tearing down the terminal mid-render and leaving it in a raw mode.\n exitOnCtrlC: false,\n // Console output from a dependency would otherwise be interleaved into the\n // live region and corrupt the frame Ink believes it has drawn.\n patchConsole: true,\n ...(isWindows ? { maxFps: WINDOWS_MAX_FPS } : {}),\n },\n );\n\n try {\n await instance.waitUntilExit();\n } finally {\n await options.session.dispose();\n }\n return { exitCode: 0, ...(resumePath ? { resumePath } : {}) };\n}\n\n/**\n * Runs first-run onboarding and resolves with what it decided.\n *\n * Rendered with the same options as the app - Ctrl-C is the component's, not\n * Ink's, so quitting is one code path rather than two. The caller has already\n * established there is a TTY; onboarding must never be reached from a headless\n * or ACP run, where there is nobody to answer it.\n */\nexport async function runOnboarding(options: OnboardingOptions): Promise<OnboardingResult> {\n const isWindows = platform() === 'win32';\n let result: OnboardingResult = { outcome: 'quit' };\n\n const instance = render(\n <Onboarding\n {...options}\n onDone={(decided) => {\n result = decided;\n }}\n />,\n {\n exitOnCtrlC: false,\n patchConsole: true,\n ...(isWindows ? { maxFps: WINDOWS_MAX_FPS } : {}),\n },\n );\n\n await instance.waitUntilExit();\n return result;\n}\n\nexport async function runSessionPicker(\n sessions: readonly SessionInfo[],\n): Promise<string | undefined> {\n const isWindows = platform() === 'win32';\n let selected: string | undefined;\n const instance = render(\n <SessionPicker\n sessions={sessions}\n onDone={(path) => {\n selected = path;\n }}\n />,\n { exitOnCtrlC: false, patchConsole: true, ...(isWindows ? { maxFps: WINDOWS_MAX_FPS } : {}) },\n );\n await instance.waitUntilExit();\n return selected;\n}\n",
103
+ "import {\n loadSettings,\n persistDefaultModel,\n persistReasoningEffort,\n resolveModel,\n streamModel,\n} from '@earshot/core';\nimport {\n type AuthSpec,\n AuthStore,\n buildRegistry,\n loginToOpenRouter,\n type Provider,\n resolveCredentials,\n} from '@earshot/providers';\nimport type { OnboardingOptions, OnboardingProvider, ProbeResult } from '@earshot/tui';\n\n/**\n * Turns the provider registry and auth store into what `Onboarding` needs.\n *\n * Kept out of packages/tui deliberately: the component takes plain callbacks so\n * it can be driven in tests with no registry and no network, and this is the\n * one place that binds it to the real one.\n */\nexport async function buildOnboardingOptions(\n wanted?: string,\n wantedModel?: string,\n): Promise<OnboardingOptions> {\n const registry = buildRegistry();\n const store = new AuthStore();\n const cwd = process.cwd();\n const settings = await loadSettings(cwd);\n\n const providers: OnboardingProvider[] = [];\n for (const provider of registry.list()) {\n if (provider.auth.kind === 'none') continue;\n providers.push(await describe(provider, store));\n }\n // OAuth first: signing in needs nothing typed, which is the easiest way for\n // someone who has never used earshot before to get past this screen.\n providers.sort(\n (a, b) =>\n Number(Boolean(b.configured)) - Number(Boolean(a.configured)) ||\n Number(b.kind === 'oauth') - Number(a.kind === 'oauth'),\n );\n\n return {\n providers,\n ...(wanted ? { wanted } : {}),\n ...(wantedModel ? { wantedModel } : {}),\n storeKey: (providerId, key) => store.set(providerId, { type: 'api-key', apiKey: key }),\n forgetKey: (providerId) => store.remove(providerId),\n signIn: async (providerId, onUrl) => {\n const credentials = await loginToOpenRouter({ onUrl });\n await store.set(providerId, credentials);\n },\n probe: (providerId, modelId) => probe(registry, providerId, modelId),\n reasoningFor: (model) => settings.reasoningEfforts[model],\n remember: async (model, effort, scope) => {\n await persistDefaultModel(model, scope, cwd);\n await persistReasoningEffort(model, effort, scope, cwd);\n },\n };\n}\n\nasync function describe(provider: Provider, store: AuthStore): Promise<OnboardingProvider> {\n const configured = await resolveCredentials(provider, { store }).catch(() => undefined);\n return {\n id: provider.id,\n models: provider.models().map((model) => ({\n id: model.id,\n name: model.name,\n reasoning: model.capabilities.reasoning,\n })),\n kind: provider.auth.kind === 'oauth' ? 'oauth' : 'api-key',\n ...(envVarsOf(provider.auth).length ? { envVars: envVarsOf(provider.auth) } : {}),\n ...(configured ? { configured: describeConfigured(configured.type) } : {}),\n };\n}\n\nfunction envVarsOf(auth: AuthSpec): string[] {\n return auth.kind === 'api-key' || auth.kind === 'oauth' ? (auth.envVars ?? []) : [];\n}\n\nfunction describeConfigured(kind: 'ambient' | 'oauth' | 'api-key'): string {\n return kind === 'ambient'\n ? 'ambient credentials'\n : kind === 'oauth'\n ? 'signed in'\n : 'api key set';\n}\n\n/**\n * One minimal live call, spending a fraction of a cent to prove the credential\n * actually works. Structural validation (a non-empty string) tells you nothing\n * a provider could not reject a second later on the user's first real turn.\n */\nasync function probe(\n registry: ReturnType<typeof buildRegistry>,\n providerId: string,\n modelId: string,\n): Promise<ProbeResult> {\n const listed = registry.list().find((provider) => provider.id === providerId);\n if (!listed) return { ok: false, reason: 'other', message: `unknown provider \"${providerId}\"` };\n\n const model = listed.models().find((candidate) => candidate.id === modelId);\n if (!model) {\n return {\n ok: false,\n reason: 'other',\n message: `${providerId} does not publish model \"${modelId}\"`,\n };\n }\n\n let resolved: Awaited<ReturnType<typeof resolveModel>>;\n try {\n resolved = await resolveModel(registry, `${providerId}/${model.id}`);\n } catch (error) {\n return { ok: false, reason: 'other', message: (error as Error).message };\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n try {\n for await (const event of streamModel(registry, resolved, {\n system: 'Reply with one word.',\n messages: [{ role: 'user', content: [{ type: 'text', text: 'hi' }] }],\n maxOutputTokens: 1,\n abortSignal: controller.signal,\n })) {\n // The first event of any kind proves the request round-tripped; nothing\n // further needs spending.\n controller.abort();\n if (event.type === 'error') {\n return event.error.kind === 'auth'\n ? { ok: false, reason: 'rejected', message: event.error.message }\n : event.error.kind === 'network'\n ? { ok: false, reason: 'unreachable', message: event.error.message }\n : { ok: false, reason: 'other', message: event.error.message };\n }\n return { ok: true };\n }\n return { ok: true };\n } catch (error) {\n const message = (error as Error).message;\n const timedOut = controller.signal.aborted && (error as Error).name === 'AbortError';\n return timedOut\n ? { ok: false, reason: 'unreachable', message: 'timed out waiting for a response' }\n : { ok: false, reason: 'other', message };\n } finally {\n clearTimeout(timeout);\n }\n}\n",
104
+ "import {\n createSession,\n isPermissionMode,\n MissingCredentialsError,\n NoSessionToResumeError,\n type PermissionMode,\n UnknownModelError,\n} from '@earshot/core';\nimport type { ReasoningEffort } from '@earshot/providers';\nimport { runOnboarding, runTui } from '@earshot/tui';\nimport type { ParsedArgs } from '../args.ts';\nimport { parseCuriosity, parseMaxCost } from '../budget.ts';\nimport { startExtensions } from '../extensions/index.ts';\nimport { loadImage } from '../image.ts';\nimport { buildOnboardingOptions } from '../onboard.ts';\n\n/**\n * The default command: the interactive TUI.\n *\n * Refuses to start without a TTY rather than rendering into a pipe. Ink would\n * happily draw frames into a redirect and produce a file full of escape\n * sequences; someone piping earshot almost certainly wanted `-p`, and the error\n * says so.\n */\nexport async function interactiveCommand(args: ParsedArgs): Promise<number> {\n const flags = args.flags;\n\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n process.stderr.write(\n 'earshot needs an interactive terminal. For scripted use, run `earshot -p \"<prompt>\"`.\\n',\n );\n return 2;\n }\n\n let mode: PermissionMode | undefined;\n const requested = flags['permission-mode'];\n if (typeof requested === 'string') {\n if (!isPermissionMode(requested)) {\n process.stderr.write(`\"${requested}\" is not a permission mode\\n`);\n return 2;\n }\n mode = requested;\n }\n\n // A bare `earshot \"do the thing\"` starts the TUI with that first turn already\n // running, which is how most sessions actually begin.\n const initialPrompt = args.positionals.join(' ').trim();\n let image: Awaited<ReturnType<typeof loadImage>> | undefined;\n if (typeof flags.image === 'string') {\n try {\n image = await loadImage(flags.image, process.cwd());\n } catch (error) {\n process.stderr.write(`image: ${(error as Error).message}\\n`);\n return 2;\n }\n }\n\n const curiosity = parseCuriosity(flags.curiosity);\n if (curiosity === 'invalid') {\n process.stderr.write(`\"${flags.curiosity}\" is not a curiosity level: low, normal or high\\n`);\n return 2;\n }\n const maxCostUsd = parseMaxCost(flags['max-cost']);\n if (maxCostUsd === 'invalid') {\n process.stderr.write(`\"${flags['max-cost']}\" is not an amount in dollars\\n`);\n return 2;\n }\n\n const extensions = await startExtensions(process.cwd());\n let model = typeof flags.model === 'string' ? flags.model : undefined;\n let reasoningEffort = parseReasoningEffort(flags['reasoning-effort']);\n if (reasoningEffort === 'invalid') {\n process.stderr.write(`\"${flags['reasoning-effort']}\" is not a reasoning effort\\n`);\n return 2;\n }\n // `--no-onboarding` is for CI and for anyone who wants the old dead-end back.\n const onboardingAllowed = flags['no-onboarding'] !== true;\n\n let attempted = false;\n\n for (;;) {\n try {\n const session = await createSession({\n cwd: process.cwd(),\n extraTools: extensions.tools,\n problems: extensions.problems,\n onDispose: () => extensions.close(),\n ...(model ? { model } : {}),\n ...(reasoningEffort !== undefined ? { reasoningEffort } : {}),\n ...(mode ? { mode } : {}),\n ...(typeof flags['api-key'] === 'string' ? { apiKey: flags['api-key'] } : {}),\n ...(curiosity ? { curiosity } : {}),\n ...(maxCostUsd !== undefined ? { maxCostUsd } : {}),\n ...resumeFrom(flags),\n });\n\n const tui = await runTui({\n session,\n model: `${session.agent.model.provider.id}/${session.agent.model.model.id}`,\n modelOptions: await buildOnboardingOptions(),\n ...(initialPrompt !== '' || image\n ? {\n initialPrompt: image\n ? [\n ...(initialPrompt ? [{ type: 'text' as const, text: initialPrompt }] : []),\n image,\n ]\n : initialPrompt,\n }\n : {}),\n });\n if (tui.resumePath) {\n return interactiveCommand({\n command: undefined,\n flags: { ...flags, resume: tui.resumePath, continue: false },\n positionals: [],\n });\n }\n return tui.exitCode;\n } catch (error) {\n if (error instanceof MissingCredentialsError && onboardingAllowed && !attempted) {\n // Only ever offered once: a second `MissingCredentialsError` after\n // onboarding said it stored working credentials means something else is\n // wrong, and looping back into the same screens would hide that.\n attempted = true;\n const result = await runOnboarding(await buildOnboardingOptions(error.provider.id, model));\n if (result.outcome === 'quit') {\n process.stdout.write(\n 'nothing was stored. run `earshot auth login <provider>` when you are ready.\\n',\n );\n await extensions.close();\n return 0;\n }\n if (result.model) {\n model = result.model;\n reasoningEffort = result.reasoningEffort;\n await (await buildOnboardingOptions()).remember?.(\n result.model,\n result.reasoningEffort,\n 'global',\n );\n }\n continue;\n }\n // The session never reached dispose(), so anything already spawned is\n // ours to clean up here or it outlives the process that started it.\n await extensions.close();\n if (error instanceof UnknownModelError) {\n process.stderr.write(\n `${error.message}\\n\\nrun \\`earshot models\\` to see what is available\\n`,\n );\n return 2;\n }\n if (error instanceof MissingCredentialsError) {\n process.stderr.write(`${error.message}\\n`);\n return 3;\n }\n if (error instanceof NoSessionToResumeError) {\n process.stderr.write(`${error.message}\\n`);\n return 2;\n }\n throw error;\n }\n }\n}\n\nfunction parseReasoningEffort(\n value: string | boolean | undefined,\n): ReasoningEffort | null | 'invalid' | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== 'string') return 'invalid';\n return ['none', 'low', 'medium', 'high', 'xhigh'].includes(value)\n ? (value as ReasoningEffort)\n : value === 'auto'\n ? null\n : 'invalid';\n}\n\nfunction resumeFrom(flags: ParsedArgs['flags']) {\n if (typeof flags.resume === 'string') return { resume: { path: flags.resume } } as const;\n if (flags.continue === true || flags.resume === true)\n return { resume: { latest: true } } as const;\n return {};\n}\n",
101
105
  "import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { LOCAL_SETTINGS, loadMcpConfig, TRUST_NOTE } from '@earshot/mcp';\nimport type { ParsedArgs } from '../args.ts';\n\n/**\n * `earshot mcp list|trust|untrust`.\n *\n * `list` deliberately does not start anything: seeing what is configured should\n * not be the thing that runs it.\n */\nexport async function mcpCommand(args: ParsedArgs): Promise<number> {\n const [action = 'list', name] = args.positionals;\n const cwd = process.cwd();\n\n if (action === 'list') return list(cwd);\n if (action === 'trust' || action === 'untrust') {\n if (!name) {\n process.stderr.write(`usage: earshot mcp ${action} <server>\\n`);\n return 2;\n }\n return setTrust(cwd, name, action === 'trust');\n }\n\n process.stderr.write(`earshot mcp: unknown action \"${action}\"\\n`);\n return 2;\n}\n\nasync function list(cwd: string): Promise<number> {\n const { servers, problems } = await loadMcpConfig(cwd);\n for (const problem of problems) process.stderr.write(`warning: ${problem}\\n`);\n\n if (servers.length === 0) {\n process.stdout.write(\n 'no mcp servers configured\\n\\n' +\n `add one under \"mcpServers\" in ${join('.earshot', 'settings.local.json')}\\n`,\n );\n return 0;\n }\n\n for (const server of servers) {\n const where =\n server.transport.type === 'stdio'\n ? [server.transport.command, ...server.transport.args].join(' ')\n : server.transport.url;\n const state = server.enabled ? '' : ` (not started: ${TRUST_NOTE})`;\n process.stdout.write(`${server.name} [${server.scope}] ${where}${state}\\n`);\n }\n return 0;\n}\n\n/**\n * Trust is recorded in local settings, which are not committed. Writing it to\n * project settings would let a repository trust itself in the next clone.\n */\nasync function setTrust(cwd: string, name: string, trust: boolean): Promise<number> {\n const { servers } = await loadMcpConfig(cwd);\n if (!servers.some((server) => server.name === name)) {\n process.stderr.write(`no mcp server named \"${name}\" is configured\\n`);\n return 2;\n }\n\n const path = join(cwd, LOCAL_SETTINGS);\n const raw = await readFile(path, 'utf8').catch(() => '{}');\n let settings: { mcpTrust?: string[] };\n try {\n settings = JSON.parse(raw) as { mcpTrust?: string[] };\n } catch (error) {\n process.stderr.write(`${path} is not valid JSON: ${(error as Error).message}\\n`);\n return 2;\n }\n\n const current = new Set(settings.mcpTrust ?? []);\n if (trust) current.add(name);\n else current.delete(name);\n\n await mkdir(dirname(path), { recursive: true });\n await writeFile(\n path,\n `${JSON.stringify({ ...settings, mcpTrust: [...current].sort() }, null, 2)}\\n`,\n 'utf8',\n );\n process.stdout.write(`${trust ? 'trusted' : 'no longer trusting'} \"${name}\" (${path})\\n`);\n return 0;\n}\n",
102
106
  "import { buildRegistry, fetchCatalog, ModelCatalog } from '@earshot/providers';\nimport type { ParsedArgs } from '../args.ts';\n\n/** `earshot models [filter] [--refresh] [--json]` */\nexport async function modelsCommand(args: ParsedArgs): Promise<number> {\n const catalog = args.flags.refresh ? new ModelCatalog(await fetchCatalog()) : new ModelCatalog();\n const registry = buildRegistry({ catalog });\n\n const filter = args.positionals[0]?.toLowerCase();\n const models = registry\n .models()\n .filter(\n (m) =>\n !filter ||\n m.id.toLowerCase().includes(filter) ||\n m.providerId.toLowerCase().includes(filter) ||\n m.name.toLowerCase().includes(filter),\n );\n\n if (args.flags.json) {\n process.stdout.write(`${JSON.stringify(models, null, 2)}\\n`);\n return 0;\n }\n\n if (models.length === 0) {\n process.stderr.write(`no models match \"${filter}\"\\n`);\n return 1;\n }\n\n const rows = models.map((m) => ({\n ref: `${m.providerId}/${m.id}`,\n context: `${Math.round(m.contextWindow / 1000)}k`,\n price: m.cost ? `$${m.cost.input}/$${m.cost.output}` : '-',\n tags: [\n m.capabilities.reasoning ? 'reasoning' : '',\n m.capabilities.vision ? 'vision' : '',\n m.capabilities.tools ? '' : 'no-tools',\n ]\n .filter(Boolean)\n .join(' '),\n }));\n\n const width = Math.max(...rows.map((r) => r.ref.length));\n const priceWidth = Math.max(...rows.map((r) => r.price.length));\n for (const row of rows) {\n process.stdout.write(\n `${row.ref.padEnd(width)} ${row.context.padStart(6)} ${row.price.padStart(priceWidth)} ${row.tags}\\n`,\n );\n }\n process.stdout.write(\n `\\n${models.length} models across ${new Set(models.map((m) => m.providerId)).size} providers`,\n );\n process.stdout.write(` (catalog ${catalog.generatedAt.slice(0, 10)})\\n`);\n process.stdout.write('prices are USD per million tokens, input/output\\n');\n return 0;\n}\n",
107
+ "import { listSessions } from '@earshot/core';\nimport { runSessionPicker } from '@earshot/tui';\nimport type { ParsedArgs } from '../args.ts';\nimport { interactiveCommand } from './interactive.ts';\n\nexport async function sessionsCommand(args: ParsedArgs): Promise<number> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n process.stderr.write('earshot sessions needs an interactive terminal.\\n');\n return 2;\n }\n const sessions = await listSessions(process.cwd());\n if (sessions.length === 0) {\n process.stdout.write('no saved chats for this project\\n');\n return 0;\n }\n const path = await runSessionPicker(sessions);\n if (!path) return 0;\n return interactiveCommand({\n command: undefined,\n flags: { ...args.flags, resume: path },\n positionals: [],\n });\n}\n",
103
108
  "import { spawnSync } from 'node:child_process';\nimport { createHash } from 'node:crypto';\nimport { existsSync, realpathSync } from 'node:fs';\nimport { chmod, readdir, rename, rm, writeFile } from 'node:fs/promises';\nimport { basename, dirname, join, sep } from 'node:path';\nimport { createInterface } from 'node:readline/promises';\nimport { fileURLToPath } from 'node:url';\nimport { VERSION } from '@earshot/core';\nimport type { ParsedArgs } from '../args.ts';\n\nconst PACKAGE = '@raegent/earshot';\nconst REPO = 'rishabhguptajs/earshot';\nconst REGISTRY = `https://registry.npmjs.org/${PACKAGE.replace('/', '%2f')}/latest`;\nconst RELEASE = `https://api.github.com/repos/${REPO}/releases/latest`;\n\n/**\n * Marks Bun leaves in a `--compile`d executable. The entry module lives in a\n * virtual filesystem rather than on disk, and its path is the only signal that\n * survives the user renaming or symlinking the binary.\n *\n * Note what is *not* usable here:\n *\n * - `process.versions.bun` is set when running from source under Bun too.\n * - `basename(process.execPath)` is whatever the file was renamed to.\n * - `existsSync(Bun.main)` returns true inside a compiled binary - Bun\n * intercepts `fs` for these paths - so the obvious \"is the entry a real\n * file?\" check reports the wrong answer rather than failing loudly.\n *\n * The Windows form is Bun's documented layout rather than something verified on\n * a Windows host, so `detectInstall` corroborates a marker hit with\n * `process.versions.bun` being set. If a future Bun renames these, detection\n * degrades to `unknown` - a message and exit 2 - and never to a branch that\n * would try to overwrite the `node` interpreter.\n */\nconst BUNFS_MARKERS = ['/$bunfs/', '\\\\$bunfs\\\\', '/~BUN/', '\\\\~BUN\\\\'];\n\n/** Release asset names, from `scripts/build-binaries.ts`. */\nconst ASSETS: Record<string, string> = {\n 'darwin-arm64': 'earshot-darwin-arm64',\n 'darwin-x64': 'earshot-darwin-x64',\n 'linux-x64': 'earshot-linux-x64',\n 'linux-arm64': 'earshot-linux-arm64',\n 'win32-x64': 'earshot-windows-x64.exe',\n};\n\nexport type InstallKind = 'binary' | 'npm' | 'source' | 'unknown';\n\n/** Which package manager's global tree the npm install actually sits in. */\nexport type Manager = 'npm' | 'bun' | 'pnpm' | 'volta' | 'yarn';\n\nexport interface Install {\n kind: InstallKind;\n /** For `binary`, the executable to replace. For `npm`, the package directory. */\n path?: string;\n /** `npm` only: which manager owns the tree, and whether it is a project install. */\n manager?: Manager;\n local?: boolean;\n /** `binary` only: the release asset that matches this host, if there is one. */\n asset?: string;\n /** Why an install is not updatable, for the `unknown`/`source` message. */\n reason?: string;\n}\n\nexport interface DetectOptions {\n execPath: string;\n moduleUrl: string;\n bunVersion?: string | undefined;\n platform: NodeJS.Platform;\n arch: string;\n /** Resolves symlinks; injected so tests need no real filesystem. */\n realpath?: (path: string) => string;\n /** Reports whether a `package.json` sits beside a `node_modules` directory. */\n isProjectRoot?: (dir: string) => boolean;\n}\n\nfunction modulePath(moduleUrl: string): string {\n try {\n return fileURLToPath(moduleUrl);\n } catch {\n // A `$bunfs` URL is not a real file URL on every platform; the marker test\n // below only needs the raw string.\n return moduleUrl;\n }\n}\n\n/** Classifies the global tree a package directory sits in by its shape. */\nfunction managerOf(dir: string): Manager {\n const lower = dir.toLowerCase().replaceAll('\\\\', '/');\n if (lower.includes('/.bun/install/global')) return 'bun';\n if (lower.includes('/.volta/')) return 'volta';\n if (lower.includes('/pnpm/global') || lower.includes('/.pnpm/')) return 'pnpm';\n if (lower.includes('/.yarn/') || lower.includes('/yarn/global')) return 'yarn';\n return 'npm';\n}\n\n/**\n * Works out how the running earshot was installed.\n *\n * Pure: every host fact arrives as an option, so the tests drive it with the\n * observed values for each form rather than by installing anything.\n */\nexport function detectInstall(options: DetectOptions): Install {\n const { execPath, moduleUrl, bunVersion, platform, arch } = options;\n const realpath = options.realpath ?? ((path: string) => path);\n const file = modulePath(moduleUrl);\n\n if (BUNFS_MARKERS.some((marker) => file.includes(marker)) && bunVersion !== undefined) {\n const asset = ASSETS[`${platform}-${arch}`];\n const target = realpath(execPath);\n if (asset === undefined) {\n return {\n kind: 'binary',\n path: target,\n reason: `no release asset is built for ${platform}-${arch}`,\n };\n }\n return { kind: 'binary', path: target, asset };\n }\n\n const marker = `${sep}node_modules${sep}${PACKAGE.split('/').join(sep)}${sep}`;\n const index = `${file}${sep}`.indexOf(marker);\n if (index !== -1) {\n const packageDir = file.slice(0, index + marker.length - 1);\n const tree = packageDir.slice(0, packageDir.indexOf(`${sep}node_modules${sep}`));\n const isProjectRoot = options.isProjectRoot ?? (() => false);\n return {\n kind: 'npm',\n path: packageDir,\n manager: managerOf(packageDir),\n local: isProjectRoot(tree),\n };\n }\n\n if (file.includes(`${sep}packages${sep}cli${sep}`) || file.endsWith('.ts')) {\n return { kind: 'source', path: file, reason: 'running from a source checkout' };\n }\n return { kind: 'unknown', path: file, reason: `cannot tell how ${execPath} was installed` };\n}\n\n/** `1.2.3` ordering; any prerelease sorts below the release it belongs to. */\nexport function compareVersions(a: string, b: string): number {\n const split = (value: string) => {\n const [core = '', pre] = value.replace(/^v/, '').split('-');\n const parts = core.split('.').map((n) => Number.parseInt(n, 10) || 0);\n return { parts, pre };\n };\n const left = split(a);\n const right = split(b);\n for (let i = 0; i < 3; i++) {\n const diff = (left.parts[i] ?? 0) - (right.parts[i] ?? 0);\n if (diff !== 0) return diff < 0 ? -1 : 1;\n }\n if (left.pre === right.pre) return 0;\n if (left.pre === undefined) return 1;\n if (right.pre === undefined) return -1;\n return left.pre < right.pre ? -1 : 1;\n}\n\nexport type Fetch = (url: string, init?: RequestInit) => Promise<Response>;\n\n/**\n * While the repository is private, every release URL - the API and the asset\n * downloads alike - answers an unauthenticated request with 404 rather than\n * 403, so \"not found\" and \"not allowed\" are the same response. A token in the\n * environment is the only thing that separates them, and `gh` already puts one\n * there for the people who can see these releases at all.\n */\nexport function releaseAuth(env: NodeJS.ProcessEnv): RequestInit {\n const token = env.EARSHOT_GITHUB_TOKEN ?? env.GITHUB_TOKEN ?? env.GH_TOKEN;\n return token ? { headers: { authorization: `Bearer ${token}` } } : {};\n}\n\n/** What a 404 from a release URL actually means, given whether we had a token. */\nexport function releaseNotFound(env: NodeJS.ProcessEnv): string {\n return releaseAuth(env).headers === undefined\n ? 'GitHub returned 404. The releases are not public, so this needs a token: ' +\n 'set GITHUB_TOKEN (or GH_TOKEN) to one that can read the repository.'\n : 'GitHub returned 404 for the token in GITHUB_TOKEN; it may not have access ' +\n 'to this repository.';\n}\n\nexport interface Release {\n version: string;\n /** Asset name to the API download URL for it. */\n assets: Record<string, string>;\n}\n\n/**\n * The newest release, with its assets addressed by their API URL rather than\n * the `releases/download/...` browser URL. The browser URL ignores a bearer\n * token and answers 404 for a private repository; the asset API endpoint\n * accepts one, and works identically once the repository is public, so there is\n * no reason to have two paths.\n */\nexport async function fetchRelease(fetchImpl: Fetch, env: NodeJS.ProcessEnv): Promise<Release> {\n const response = await fetchImpl(RELEASE, releaseAuth(env));\n if (response.status === 404) throw new Error(releaseNotFound(env));\n if (!response.ok) throw new Error(`GitHub releases returned ${response.status}`);\n const body = (await response.json()) as {\n tag_name?: string;\n assets?: { name: string; url: string }[];\n };\n if (!body.tag_name) throw new Error('GitHub returned a release with no tag');\n const assets: Record<string, string> = {};\n for (const asset of body.assets ?? []) assets[asset.name] = asset.url;\n return { version: body.tag_name.replace(/^v/, ''), assets };\n}\n\n/** The newest published version for this install form. */\nexport async function resolveLatest(\n kind: InstallKind,\n fetchImpl: Fetch,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<string> {\n if (kind === 'npm') {\n const response = await fetchImpl(REGISTRY);\n if (!response.ok) throw new Error(`npm registry returned ${response.status}`);\n const body = (await response.json()) as { version?: string };\n if (!body.version) throw new Error('npm registry returned no version');\n return body.version;\n }\n return (await fetchRelease(fetchImpl, env)).version;\n}\n\n/**\n * `sha256sum artifacts/*` in the release workflow leaves the `artifacts/`\n * prefix on every path, so the name is matched on its basename rather than on\n * the whole field.\n */\nexport function findChecksum(sums: string, asset: string): string | undefined {\n for (const line of sums.split('\\n')) {\n const [hash, ...rest] = line.trim().split(/\\s+/);\n const name = rest.join(' ').replace(/^\\*/, '');\n if (hash && name && basename(name) === asset) return hash.toLowerCase();\n }\n return undefined;\n}\n\nexport interface UpdateOptions {\n install?: Install;\n current?: string;\n fetch?: Fetch;\n check?: boolean;\n yes?: boolean;\n /** Answers the confirmation. Absent means non-interactive: never act. */\n confirm?: (question: string) => Promise<boolean>;\n run?: (command: string, args: string[]) => { status: number | null };\n out?: (text: string) => void;\n err?: (text: string) => void;\n /** Injected so the Windows replace path is testable from any host. */\n platform?: NodeJS.Platform;\n env?: NodeJS.ProcessEnv;\n}\n\nconst installCommand: Record<Manager, string> = {\n npm: `npm install -g ${PACKAGE}@latest`,\n bun: `bun add -g ${PACKAGE}@latest`,\n pnpm: `pnpm add -g ${PACKAGE}@latest`,\n yarn: `yarn global add ${PACKAGE}@latest`,\n volta: `volta install ${PACKAGE}@latest`,\n};\n\nexport async function runUpdate(options: UpdateOptions = {}): Promise<number> {\n const out = options.out ?? ((text: string) => process.stdout.write(text));\n const err = options.err ?? ((text: string) => process.stderr.write(text));\n const current = options.current ?? VERSION;\n const install =\n options.install ??\n detectInstall({\n execPath: process.execPath,\n moduleUrl: import.meta.url,\n bunVersion: process.versions.bun,\n platform: process.platform,\n arch: process.arch,\n realpath: (path) => {\n try {\n return realpathSync(path);\n } catch {\n return path;\n }\n },\n isProjectRoot: (dir) => existsSync(join(dir, 'package.json')),\n });\n const fetchImpl = options.fetch ?? ((url: string, init?: RequestInit) => fetch(url, init));\n\n if (install.kind === 'source' || install.kind === 'unknown') {\n err(`earshot update: ${install.reason}\\n`);\n err(\n install.kind === 'source'\n ? 'update the checkout with git instead\\n'\n : `reinstall from ${`https://github.com/${REPO}/releases`}\\n`,\n );\n return 2;\n }\n if (install.kind === 'binary' && install.asset === undefined) {\n err(`earshot update: ${install.reason}\\n`);\n return 2;\n }\n\n // The binary path needs the asset URLs from the same release it read the\n // version off, so it fetches the release rather than just the version.\n let latest: string;\n let release: Release | undefined;\n try {\n if (install.kind === 'binary') {\n release = await fetchRelease(fetchImpl, options.env ?? process.env);\n latest = release.version;\n } else {\n latest = await resolveLatest(install.kind, fetchImpl, options.env ?? process.env);\n }\n } catch (error) {\n err(`earshot update: ${(error as Error).message}\\n`);\n return 1;\n }\n\n if (compareVersions(current, latest) >= 0) {\n out(`earshot ${current} is the latest version\\n`);\n return 0;\n }\n\n const where =\n install.kind === 'npm'\n ? `installed with ${install.manager}, ${install.local ? 'in this project' : 'globally'}`\n : 'standalone binary';\n out(`earshot ${current} -> ${latest} (${where})\\n`);\n\n if (install.kind === 'npm') {\n const manager = install.manager ?? 'npm';\n const command = install.local\n ? `${manager === 'npm' ? 'npm install' : `${manager} add`} ${PACKAGE}@latest`\n : installCommand[manager];\n out(`\\n ${command}\\n\\n`);\n\n // Only an npm-shaped global tree is upgraded automatically. Running\n // `npm install -g` over a bun, pnpm, volta or yarn install does not replace\n // it: it installs a second copy at a different prefix and leaves which one\n // wins to PATH order. A project-local install is the user's project to\n // change, not ours.\n if (install.local || manager !== 'npm') {\n out('run that to update\\n');\n return options.check ? 4 : 0;\n }\n if (options.check) return 4;\n if (!(await confirmed(options, 'run it now?'))) {\n out('run that to update\\n');\n return 0;\n }\n const run = options.run ?? runCommand;\n const result = run('npm', ['install', '-g', `${PACKAGE}@latest`]);\n if (result.status !== 0) {\n err(`earshot update: npm exited ${result.status}\\n`);\n return 1;\n }\n out(`updated to ${latest}\\n`);\n return 0;\n }\n\n return await updateBinary(install, release as Release, options, out, err);\n}\n\nfunction runCommand(command: string, args: string[]) {\n const result = spawnSync(command, args, { stdio: 'inherit', windowsHide: true, shell: false });\n return { status: result.status };\n}\n\nasync function confirmed(options: UpdateOptions, question: string): Promise<boolean> {\n if (options.yes) return true;\n const confirm = options.confirm ?? defaultConfirm;\n return await confirm(question);\n}\n\nasync function defaultConfirm(question: string): Promise<boolean> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) return false;\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n try {\n const answer = await rl.question(`${question} [y/N] `);\n return /^y(es)?$/i.test(answer.trim());\n } finally {\n rl.close();\n }\n}\n\nasync function updateBinary(\n install: Install,\n release: Release,\n options: UpdateOptions,\n out: (text: string) => void,\n err: (text: string) => void,\n): Promise<number> {\n const target = install.path as string;\n const asset = install.asset as string;\n const dir = dirname(target);\n const latest = release.version;\n const fetchImpl = options.fetch ?? ((url: string, init?: RequestInit) => fetch(url, init));\n\n // Sweep what a previous Windows update had to leave behind (see below).\n await sweepStale(dir, target);\n\n out(` ${target} ${asset}\\n`);\n if (options.check) return 4;\n\n // Fail on an unwritable location before spending a download on it.\n try {\n await writeFile(join(dir, `.earshot-update-probe-${process.pid}`), '');\n await rm(join(dir, `.earshot-update-probe-${process.pid}`), { force: true });\n } catch {\n err(`earshot update: cannot write to ${dir}\\n`);\n err('re-run with the permissions that own that directory\\n');\n return 1;\n }\n\n if (!(await confirmed(options, `download ${asset} and replace it?`))) {\n out('nothing was changed\\n');\n return 0;\n }\n\n const assetUrl = release.assets[asset];\n const sumsUrl = release.assets.SHA256SUMS;\n if (assetUrl === undefined || sumsUrl === undefined) {\n err(`earshot update: release v${latest} does not publish ${assetUrl ? 'SHA256SUMS' : asset}\\n`);\n return 1;\n }\n\n const temp = join(dir, `.earshot-update-${process.pid}.tmp`);\n try {\n // The asset API endpoint serves the bytes only when asked for them; without\n // this it answers with the asset's JSON metadata instead.\n const auth = releaseAuth(options.env ?? process.env);\n const octet: RequestInit = {\n ...auth,\n headers: { ...(auth.headers as Record<string, string>), accept: 'application/octet-stream' },\n };\n\n out(' downloading… ');\n const download = await fetchImpl(assetUrl, octet);\n if (download.status === 404) throw new Error(releaseNotFound(options.env ?? process.env));\n if (!download.ok) throw new Error(`downloading ${asset} returned ${download.status}`);\n const bytes = new Uint8Array(await download.arrayBuffer());\n\n out('verifying SHA256… ');\n const sumsResponse = await fetchImpl(sumsUrl, octet);\n if (!sumsResponse.ok) throw new Error(`SHA256SUMS returned ${sumsResponse.status}`);\n const expected = findChecksum(await sumsResponse.text(), asset);\n if (expected === undefined) throw new Error(`SHA256SUMS does not list ${asset}`);\n const actual = createHash('sha256').update(bytes).digest('hex');\n if (actual !== expected) {\n throw new Error(`checksum mismatch for ${asset}: expected ${expected}, got ${actual}`);\n }\n\n out('replacing… ');\n await writeFile(temp, bytes);\n const platform = options.platform ?? process.platform;\n if (platform !== 'win32') await chmod(temp, 0o755);\n await replace(temp, target, platform);\n out(`\\nupdated to ${latest}\\n`);\n return 0;\n } catch (error) {\n await rm(temp, { force: true });\n out('\\n');\n err(`earshot update: ${(error as Error).message}\\n`);\n err('nothing was replaced\\n');\n return 1;\n }\n}\n\nexport interface ReplaceIo {\n rename: (from: string, to: string) => Promise<void>;\n remove: (path: string) => Promise<void>;\n}\n\nconst realIo: ReplaceIo = {\n rename: (from, to) => rename(from, to),\n remove: (path) => rm(path, { force: true }),\n};\n\n/**\n * Puts the downloaded binary where the running one is.\n *\n * POSIX: a single `rename` is atomic, and this process keeps executing from the\n * inode it already opened, so the in-flight update finishes normally.\n *\n * Windows: a running `.exe` cannot be deleted or overwritten, but it *can* be\n * renamed on the same volume while it executes. So the running image is moved\n * aside and the new one takes its place; deleting the old name fails while the\n * process lives, and is left for the next run's sweep rather than reported as\n * an error the user cannot act on.\n */\nexport async function replace(\n temp: string,\n target: string,\n platform: NodeJS.Platform,\n io: ReplaceIo = realIo,\n): Promise<void> {\n if (platform !== 'win32') {\n await io.rename(temp, target);\n return;\n }\n const aside = `${target}.old-${process.pid}`;\n await io.rename(target, aside);\n try {\n await io.rename(temp, target);\n } catch (error) {\n await io.rename(aside, target).catch(() => {});\n throw error;\n }\n // Fails while this process is still executing the old image; the next run's\n // sweep collects it. Not an error the user can do anything about.\n await io.remove(aside).catch(() => {});\n}\n\n/** Removes `.old-*` images an earlier Windows update could not delete. */\nasync function sweepStale(dir: string, target: string): Promise<void> {\n const prefix = `${basename(target)}.old-`;\n const entries = await readdir(dir).catch(() => [] as string[]);\n for (const entry of entries) {\n if (entry.startsWith(prefix)) await rm(join(dir, entry), { force: true }).catch(() => {});\n }\n}\n\nexport async function updateCommand(args: ParsedArgs): Promise<number> {\n if (args.positionals.length > 0) {\n process.stderr.write(`earshot update: unexpected argument \"${args.positionals[0]}\"\\n`);\n process.stderr.write('usage: earshot update [--check] [--yes]\\n');\n return 2;\n }\n return runUpdate({\n check: args.flags.check === true,\n yes: args.flags.yes === true || args.flags.y === true,\n });\n}\n",
104
- "import { VERSION } from '@earshot/core';\nimport { parseArgs } from './args.ts';\nimport { acpCommand } from './commands/acp.ts';\nimport { authCommand } from './commands/auth.ts';\nimport { doctorCommand } from './commands/doctor.ts';\nimport { extensionsCommand } from './commands/extensions.ts';\nimport { headlessCommand } from './commands/headless.ts';\nimport { interactiveCommand } from './commands/interactive.ts';\nimport { mcpCommand } from './commands/mcp.ts';\nimport { modelsCommand } from './commands/models.ts';\nimport { updateCommand } from './commands/update.ts';\n\nconst HELP = `earshot ${VERSION} - a terminal coding agent that actually listens\n\nUsage\n earshot start the interactive TUI\n earshot -p \"<prompt>\" headless: print the final response\n earshot auth <cmd> login, list or logout provider credentials\n earshot models [--refresh] list or refresh the model catalog\n earshot mcp <cmd> list, trust or untrust MCP servers\n earshot extensions <cmd> list, trust or untrust in-process extensions\n earshot acp serve editor clients over ACP v1 on stdio\n earshot doctor diagnose the local setup\n earshot update [--check] update earshot to the latest release\n\nFlags\n --model <provider/model> model for this session\n --permission-mode <mode> plan | ask | accept-edits | auto | yolo\n --output-format <fmt> text | json | stream-json | json@v1 (with -p)\n --continue resume the most recent session here\n --resume [<path>] resume a specific session transcript\n --api-key <key> credentials for this run only\n --image <path|https-url> attach one PNG, JPEG, GIF or WebP image\n --max-cost <usd> stop and ask before spending past this\n --curiosity <level> low, normal or high: how readily it asks\n --version, -v print the version\n --help, -h print this help\n`;\n\nexport async function main(argv = process.argv.slice(2)): Promise<number> {\n const args = parseArgs(argv);\n const { command, flags } = args;\n\n if (flags.version || flags.v) {\n process.stdout.write(`${VERSION}\\n`);\n return 0;\n }\n if (flags.help || flags.h) {\n process.stdout.write(HELP);\n return 0;\n }\n\n const prompt = typeof flags.p === 'string' ? flags.p : undefined;\n if (prompt) return headlessCommand(prompt, args);\n\n if (command === 'models') return modelsCommand(args);\n if (command === 'mcp') return mcpCommand(args);\n if (command === 'extensions') return extensionsCommand(args);\n if (command === 'auth') return authCommand(args);\n if (command === 'doctor') return doctorCommand(args);\n if (command === 'update') return updateCommand(args);\n if (command === 'acp') return acpCommand(args);\n if (command) {\n process.stderr.write(`earshot: \"${command}\" is not implemented yet\\n`);\n return 1;\n }\n\n return interactiveCommand(args);\n}\n",
109
+ "import { VERSION } from '@earshot/core';\nimport { parseArgs } from './args.ts';\nimport { acpCommand } from './commands/acp.ts';\nimport { authCommand } from './commands/auth.ts';\nimport { doctorCommand } from './commands/doctor.ts';\nimport { extensionsCommand } from './commands/extensions.ts';\nimport { headlessCommand } from './commands/headless.ts';\nimport { interactiveCommand } from './commands/interactive.ts';\nimport { mcpCommand } from './commands/mcp.ts';\nimport { modelsCommand } from './commands/models.ts';\nimport { sessionsCommand } from './commands/sessions.ts';\nimport { updateCommand } from './commands/update.ts';\n\nconst HELP = `earshot ${VERSION} - a terminal coding agent that actually listens\n\nUsage\n earshot start the interactive TUI\n earshot -p \"<prompt>\" headless: print the final response\n earshot auth <cmd> login, list or logout provider credentials\n earshot models [--refresh] list or refresh the model catalog\n earshot mcp <cmd> list, trust or untrust MCP servers\n earshot extensions <cmd> list, trust or untrust in-process extensions\n earshot acp serve editor clients over ACP v1 on stdio\n earshot doctor diagnose the local setup\n earshot update [--check] update earshot to the latest release\n earshot sessions browse and resume saved chats for this project\n\nFlags\n --model <provider/model> model for this session\n --permission-mode <mode> plan | ask | accept-edits | auto | yolo\n --output-format <fmt> text | json | stream-json | json@v1 (with -p)\n --continue resume the most recent session here\n --resume [<path>] resume a specific session transcript\n --api-key <key> credentials for this run only\n --image <path|https-url> attach one PNG, JPEG, GIF or WebP image\n --max-cost <usd> stop and ask before spending past this\n --curiosity <level> low, normal or high: how readily it asks\n --reasoning-effort <level> auto | none | low | medium | high | xhigh\n --version, -v print the version\n --help, -h print this help\n`;\n\nexport async function main(argv = process.argv.slice(2)): Promise<number> {\n const args = parseArgs(argv);\n const { command, flags } = args;\n\n if (flags.version || flags.v) {\n process.stdout.write(`${VERSION}\\n`);\n return 0;\n }\n if (flags.help || flags.h) {\n process.stdout.write(HELP);\n return 0;\n }\n\n const prompt = typeof flags.p === 'string' ? flags.p : undefined;\n if (prompt) return headlessCommand(prompt, args);\n\n if (command === 'models') return modelsCommand(args);\n if (command === 'mcp') return mcpCommand(args);\n if (command === 'extensions') return extensionsCommand(args);\n if (command === 'auth') return authCommand(args);\n if (command === 'doctor') return doctorCommand(args);\n if (command === 'update') return updateCommand(args);\n if (command === 'sessions') return sessionsCommand(args);\n if (command === 'acp') return acpCommand(args);\n if (command) {\n process.stderr.write(`earshot: \"${command}\" is not implemented yet\\n`);\n return 1;\n }\n\n return interactiveCommand(args);\n}\n",
105
110
  "import { main } from './index.ts';\n\nconst code = await main();\nprocess.exitCode = code;\n"
106
111
  ],
107
- "mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
108
- "debugId": "50400322D722C83B64756E2164756E21",
112
+ "mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
113
+ "debugId": "BF0091864A65A6E164756E2164756E21",
109
114
  "names": []
110
115
  }