@amistio/cli 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/dist/index.js +544 -77
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../../shared/src/schemas.ts", "../../shared/src/api-url.ts", "../../shared/src/brain-documents.ts", "../../shared/src/repo-metadata.ts", "../../shared/src/repository-link.ts", "../../shared/src/sync.ts", "../../shared/src/next-action.ts", "../src/bootstrap.ts", "../src/credential-store.ts", "../src/control-plane.ts", "../src/api-client.ts", "../src/orchestrator.ts", "../src/local-tool-runner.ts", "../src/runner-daemon.ts", "../src/session-policy.ts", "../src/sync.ts", "../src/tool-session-store.ts", "../src/work-runner.ts", "../src/runner-status.ts", "../src/importer.ts", "../src/runner-actions.ts", "../src/git-worktree.ts", "../src/version.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { AMISTIO_API_URL_ENV, computeProjectNextAction, formatProjectNextAction, isOfficialAmistioApiUrl, officialAmistioApiUrl, parseRepositoryCloneUrl, type GeneratedBrainArtifact, type ProjectNextAction, type RepoLinkMetadata, type RepositoryLinkItem, type RunnerCommandItem, type RunnerCommandKind, type RunnerEffectiveInvocationChannel, type RunnerInvocationChannel, type RunnerPreferenceSource, type RunnerPreferenceStatus, type RunnerToolCapability, type RunnerToolName, type RunnerToolSelection, type SessionDecision, type SessionPolicy, type SessionResumabilityScope, type ToolSessionItem, type WorkItem, type WorkStatus } from \"@amistio/shared\";\nimport { cloneOrValidateRepository } from \"./bootstrap.js\";\nimport { credentialKey, LocalCredentialStore } from \"./credential-store.js\";\nimport { initControlPlane, inspectControlPlane, readProjectLink, writeProjectLink } from \"./control-plane.js\";\nimport { ApiClient, type ActivityEventMutation, type RunnerHeartbeatMetadata, type WorkStatusTelemetry } from \"./api-client.js\";\nimport { createOrchestrationPrompt, writePromptFile } from \"./orchestrator.js\";\nimport { createToolRunPreview, detectLocalTools, isLocalToolName, runLocalTool, type DetectedLocalTool, type LocalToolRunResult } from \"./local-tool-runner.js\";\nimport { currentRunnerMode, listRunnerDaemonMetadata, markRunnerDaemonStopped, restartRunnerDaemonProcess, runnerDaemonRuntimeStatus, runnerDaemonUptime, startRunnerDaemon, stopRunnerDaemonProcess } from \"./runner-daemon.js\";\nimport { normalizeSessionPolicy, selectToolSession } from \"./session-policy.js\";\nimport { collectDirtyDocumentsForPush, collectSyncStatus, materializeBrainDocuments } from \"./sync.js\";\nimport { LocalToolSessionStore } from \"./tool-session-store.js\";\nimport { createWorkExecutionPrompt, parseAssistantAnswerResult, parseBrainGenerationArtifacts, parseImpactPreviewResult } from \"./work-runner.js\";\nimport { formatWatchIdleLine, formatWatchStartupContext, shouldPrintWatchState, stableRunnerId, watchStateKey, type WatchStateLog } from \"./runner-status.js\";\nimport { buildImportedBrainDocuments, importSkipCounts, inspectLocalRepository, scanLegacyDocuments } from \"./importer.js\";\nimport { buildBackgroundRunnerArgs, runOfficialCliUpdate } from \"./runner-actions.js\";\nimport { needsGitWorktreeIsolation, prepareGitWorktreeIsolation, resolveWorktreeIdentity, type GitWorktreeIsolation } from \"./git-worktree.js\";\nimport { CLI_VERSION } from \"./version.js\";\n\nconst program = new Command();\nconst defaultRoot = process.env.INIT_CWD ?? process.cwd();\nconst apiUrlOptionDescription = `Amistio API URL override (or ${AMISTIO_API_URL_ENV})`;\n\nprogram.name(\"amistio\").description(\"Amistio project brain CLI\").version(CLI_VERSION);\n\nprogram\n .command(\"init\")\n .description(\"Create Amistio control-plane folders for a new project\")\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { root: string }) => {\n const created = await initControlPlane(options.root);\n console.log(created.length ? `Created ${created.length} control-plane folders.` : \"Control-plane folders already exist.\");\n });\n\nprogram\n .command(\"onboard\")\n .description(\"Inspect and prepare an existing repository for Amistio\")\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { root: string }) => {\n const result = await inspectControlPlane(options.root);\n console.log(`Present: ${result.present.length ? result.present.join(\", \") : \"none\"}`);\n console.log(`Missing: ${result.missing.length ? result.missing.join(\", \") : \"none\"}`);\n if (result.missing.length) {\n console.log(\"Run `amistio init` to create missing control-plane folders without overwriting existing files.\");\n }\n });\n\nprogram\n .command(\"bootstrap\")\n .description(\"Clone a linked repository locally, prepare the control plane, and pair it with Amistio\")\n .requiredOption(\"--repo-url <url>\", \"Linked repository clone URL\")\n .requiredOption(\"--target <path>\", \"Local checkout target path\")\n .requiredOption(\"--account <accountId>\", \"Amistio account ID\")\n .requiredOption(\"--project <projectId>\", \"Amistio project ID\")\n .requiredOption(\"--repository-link <repositoryLinkId>\", \"Existing repository link ID\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .requiredOption(\"--pairing-code <code>\", \"Short-lived pairing code from the Amistio app\")\n .option(\"--default-branch <branch>\", \"Default branch\", \"main\")\n .action(async (options: { repoUrl: string; target: string; account: string; project: string; repositoryLink: string; apiUrl: string; pairingCode: string; defaultBranch: string }) => {\n const parsedRepoUrl = parseRepositoryCloneUrl(options.repoUrl);\n const checkout = await cloneOrValidateRepository({ repoUrl: parsedRepoUrl.cloneUrl, targetDir: options.target });\n await initControlPlane(checkout.targetDir);\n\n const pairing = await new ApiClient({\n apiUrl: options.apiUrl,\n accountId: options.account\n }).consumePairingSession({\n projectId: options.project,\n pairingCode: options.pairingCode,\n repositoryLinkId: options.repositoryLink,\n repoName: parsedRepoUrl.repoName,\n repoFingerprint: createRepoFingerprint(options.account, options.project, options.repositoryLink),\n defaultBranch: options.defaultBranch\n });\n\n const filePath = await writeProjectLink(checkout.targetDir, {\n amistioAccountId: options.account,\n amistioProjectId: options.project,\n repositoryLinkId: pairing.repositoryLink.repositoryLinkId,\n defaultBranch: options.defaultBranch,\n lastSyncedRevision: 0\n });\n\n await new LocalCredentialStore().set(credentialKey(options.account, options.project, pairing.repositoryLink.repositoryLinkId), pairing.token);\n\n console.log(checkout.status === \"cloned\" ? `Cloned repository to ${checkout.targetDir}.` : `Validated existing checkout at ${checkout.targetDir}.`);\n console.log(`Pairing confirmed for ${pairing.repositoryLink.repoName}.`);\n console.log(`Wrote non-secret project metadata to ${filePath}.`);\n console.log(`Next: cd ${formatShellArg(checkout.targetDir)} && amistio run${formatApiUrlFlag(options.apiUrl)} --watch`);\n });\n\nprogram\n .command(\"import\")\n .description(\"Pair an existing checkout and import legacy Markdown docs as accepted brain records\")\n .argument(\"[code]\", \"Short-lived pairing code from the Amistio app\")\n .option(\"--pairing-code <code>\", \"Short-lived pairing code from the Amistio app\")\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--default-branch <branch>\", \"Default branch fallback\", \"main\")\n .option(\"--include <glob>\", \"Only import files matching a repo-relative glob\", collectRepeatedOption, [] as string[])\n .option(\"--exclude <glob>\", \"Exclude files matching a repo-relative glob\", collectRepeatedOption, [] as string[])\n .option(\"--max-file-kb <kb>\", \"Maximum Markdown file size to import\", parsePositiveInteger, 256)\n .option(\"--dry-run\", \"Inspect and print import candidates without consuming the code or uploading documents\")\n .action(async (code: string | undefined, options: { pairingCode?: string; root: string; apiUrl: string; defaultBranch: string; include: string[]; exclude: string[]; maxFileKb: number; dryRun?: boolean }) => {\n const pairingCode = (options.pairingCode ?? code)?.trim();\n if (!pairingCode) {\n throw new Error(\"Provide a pairing code as `amistio import <code>` or with `--pairing-code <code>`.\");\n }\n\n const repository = await inspectLocalRepository(options.root, options.defaultBranch);\n const scan = await scanLegacyDocuments({\n rootDir: repository.rootDir,\n include: options.include,\n exclude: options.exclude,\n maxFileKb: options.maxFileKb\n });\n const skipCounts = importSkipCounts(scan.skipped);\n\n console.log(`Repository: ${repository.repoName}`);\n console.log(`Root: ${repository.rootDir}`);\n console.log(`Default branch: ${repository.defaultBranch}`);\n if (repository.originRemoteWarning) {\n console.log(repository.originRemoteWarning);\n }\n console.log(`Import candidates: ${scan.candidates.length}`);\n console.log(formatImportSkipSummary(skipCounts));\n for (const candidate of scan.candidates.slice(0, 12)) {\n console.log(`- ${candidate.sourcePath} -> ${candidate.repoPath} (${candidate.documentType})`);\n }\n if (scan.candidates.length > 12) {\n console.log(`...and ${scan.candidates.length - 12} more.`);\n }\n\n if (options.dryRun) {\n console.log(\"Dry run complete. No pairing code was consumed and no files or Amistio records were written.\");\n return;\n }\n\n const parsedCloneUrl = repository.parsedCloneUrl;\n const pairing = await new ApiClient({ apiUrl: options.apiUrl }).importPairingSession({\n pairingCode,\n repoName: repository.repoName,\n repoFingerprint: repository.repoFingerprint,\n defaultBranch: repository.defaultBranch,\n ...(parsedCloneUrl ? { cloneUrl: parsedCloneUrl.cloneUrl } : {}),\n ...(parsedCloneUrl?.provider ? { provider: parsedCloneUrl.provider } : {}),\n ...(parsedCloneUrl?.repoOwner ? { repoOwner: parsedCloneUrl.repoOwner } : {}),\n ...(parsedCloneUrl?.repoFullName ? { repoFullName: parsedCloneUrl.repoFullName } : {})\n });\n\n await initControlPlane(repository.rootDir);\n const metadataFilePath = await writeProjectLink(repository.rootDir, {\n amistioAccountId: pairing.accountId,\n amistioProjectId: pairing.projectId,\n repositoryLinkId: pairing.repositoryLink.repositoryLinkId,\n defaultBranch: repository.defaultBranch,\n lastSyncedRevision: 0\n });\n await new LocalCredentialStore().set(credentialKey(pairing.accountId, pairing.projectId, pairing.repositoryLink.repositoryLinkId), pairing.token);\n\n const authenticatedClient = new ApiClient({ apiUrl: options.apiUrl, accountId: pairing.accountId, token: pairing.token });\n const { documents: existingDocuments } = await authenticatedClient.listBrainDocuments(pairing.projectId);\n const documents = buildImportedBrainDocuments({\n accountId: pairing.accountId,\n projectId: pairing.projectId,\n repositoryLinkId: pairing.repositoryLink.repositoryLinkId,\n candidates: scan.candidates,\n existingDocuments\n });\n\n if (documents.length) {\n await authenticatedClient.pushBrainDocuments(pairing.projectId, documents);\n }\n\n console.log(`Pairing confirmed for ${pairing.repositoryLink.repoName}; repository link ${pairing.repositoryLinkAction}.`);\n console.log(`Wrote non-secret project metadata to ${metadataFilePath}.`);\n console.log(`Imported ${documents.length} legacy document${documents.length === 1 ? \"\" : \"s\"} as accepted brain record${documents.length === 1 ? \"\" : \"s\"}.`);\n console.log(`Next: amistio sync status${formatApiUrlFlag(options.apiUrl)}`);\n });\n\nprogram\n .command(\"pair\")\n .description(\"Pair this repository with an Amistio web project\")\n .requiredOption(\"--account <accountId>\", \"Amistio account ID\")\n .requiredOption(\"--project <projectId>\", \"Amistio project ID\")\n .option(\"--repository-link <repositoryLinkId>\", \"Existing repository link ID\")\n .option(\"--default-branch <branch>\", \"Default branch\", \"main\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--pairing-code <code>\", \"Short-lived pairing code from the Amistio app\")\n .option(\"--token <token>\", \"Runner/device credential to store outside the repository\")\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { account: string; project: string; repositoryLink?: string; defaultBranch: string; apiUrl: string; pairingCode?: string; token?: string; root: string }, command: Command) => {\n let repositoryLinkId = options.repositoryLink ?? `repo_${randomUUID()}`;\n let credential = options.token;\n\n if (options.pairingCode) {\n const pairing = await new ApiClient({\n apiUrl: options.apiUrl,\n accountId: options.account,\n ...(credential ? { token: credential } : {})\n }).consumePairingSession({\n projectId: options.project,\n pairingCode: options.pairingCode,\n repositoryLinkId,\n repoName: inferRepoName(options.root),\n repoFingerprint: createRepoFingerprint(options.account, options.project, repositoryLinkId),\n defaultBranch: options.defaultBranch\n });\n repositoryLinkId = pairing.repositoryLink.repositoryLinkId;\n credential = credential ?? pairing.token;\n console.log(`Pairing confirmed for ${pairing.repositoryLink.repoName}.`);\n }\n\n const filePath = await writeProjectLink(options.root, {\n amistioAccountId: options.account,\n amistioProjectId: options.project,\n repositoryLinkId,\n defaultBranch: options.defaultBranch,\n lastSyncedRevision: 0\n });\n\n if (credential) {\n await new LocalCredentialStore().set(credentialKey(options.account, options.project, repositoryLinkId), credential);\n }\n\n if (!options.pairingCode && apiUrlOverrideWasRequested(command)) {\n const session = await new ApiClient({\n apiUrl: options.apiUrl,\n accountId: options.account,\n ...(credential ? { token: credential } : {})\n }).createPairingSession(options.project);\n console.log(`Pairing code: ${session.pairingCode}`);\n console.log(`Expires at: ${session.expiresAt}`);\n }\n\n console.log(`Wrote non-secret project metadata to ${filePath}.`);\n });\n\nconst sync = program.command(\"sync\").description(\"Inspect or move project brain changes between the repo and Amistio\");\n\nsync\n .command(\"status\")\n .description(\"Show local sync status\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { apiUrl: string; root: string }) => {\n const metadata = await readProjectLink(options.root);\n if (!metadata) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n const webDocuments = context ? await context.client.listBrainDocuments(metadata.amistioProjectId).then((result) => result.documents).catch(() => []) : [];\n const report = await collectSyncStatus(options.root, webDocuments);\n console.log(`Paired project: ${metadata.amistioProjectId}`);\n console.log(`Repository link: ${metadata.repositoryLinkId}`);\n console.log(`Last synced revision: ${metadata.lastSyncedRevision}`);\n console.log(`Sync status: ${report.status}`);\n console.log(`Clean: ${report.counts.clean}; Pending: ${report.counts.pending}; Dirty: ${report.counts.dirty}; Conflicted: ${report.counts.conflicted}`);\n for (const item of report.items.filter((entry) => entry.status !== \"clean\")) {\n console.log(`${item.status}: ${item.repoPath} - ${item.reason}`);\n }\n });\n\nsync\n .command(\"pull\")\n .description(\"Pull approved web changes into the repository\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { apiUrl: string; root: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n\n const { documents } = await context.client.listBrainDocuments(context.metadata.amistioProjectId);\n const approvedDocuments = documents.filter((document) => document.syncState === \"approved\" || document.syncState === \"synced\");\n const result = await materializeBrainDocuments(options.root, approvedDocuments);\n for (const conflict of result.conflicts) {\n console.log(`conflicted: ${conflict}`);\n }\n if (result.conflicts.length) {\n process.exitCode = 1;\n return;\n }\n\n const latestRevision = Math.max(context.metadata.lastSyncedRevision, ...approvedDocuments.map((document) => document.revision));\n if (latestRevision !== context.metadata.lastSyncedRevision) {\n await writeProjectLink(options.root, { ...context.metadata, lastSyncedRevision: latestRevision });\n }\n console.log(result.written.length ? `Pulled ${result.written.length} approved document${result.written.length === 1 ? \"\" : \"s\"}.` : \"No approved web changes were pulled.\");\n });\n\nsync\n .command(\"push\")\n .description(\"Push local brain changes to Amistio for review\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { apiUrl: string; root: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n\n const dirtyDocuments = await collectDirtyDocumentsForPush(options.root, context.metadata);\n if (!dirtyDocuments.length) {\n console.log(\"No local brain changes were pushed.\");\n return;\n }\n\n const { documents } = await context.client.pushBrainDocuments(context.metadata.amistioProjectId, dirtyDocuments);\n const conflictedDocuments = documents.filter((document) => document.syncState === \"conflicted\" || document.status === \"conflicted\");\n if (conflictedDocuments.length) {\n for (const document of conflictedDocuments) {\n console.log(`conflicted: ${document.repoPath} - web and repository revisions both changed`);\n }\n process.exitCode = 1;\n return;\n }\n await materializeBrainDocuments(options.root, documents, { allowDirtyOverwrite: true });\n console.log(`Pushed ${documents.length} local document${documents.length === 1 ? \"\" : \"s\"} for web review.`);\n });\n\nconst work = program.command(\"work\").description(\"Inspect approved work items\");\n\nwork\n .command(\"list\")\n .description(\"List queued work without claiming it\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { apiUrl: string; root: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n\n const [{ workItems }, { documents }, { runners }] = await Promise.all([\n context.client.listWorkItems(context.metadata.amistioProjectId),\n context.client.listBrainDocuments(context.metadata.amistioProjectId),\n context.client.listRunners(context.metadata.amistioProjectId).catch(() => ({ runners: [] }))\n ]);\n const nextAction = computeProjectNextAction({\n projectId: context.metadata.amistioProjectId,\n repositoryLinks: [createCliRepositoryLink(context.metadata, options.root)],\n documents,\n workItems,\n runnerHeartbeats: runners\n });\n console.log(`Next action: ${formatProjectNextAction(nextAction)}`);\n if (!workItems.length) {\n console.log(\"No work items are queued for this project.\");\n return;\n }\n\n for (const item of workItems) {\n console.log(`${item.workItemId} [${item.status}] ${item.title}`);\n }\n });\n\nwork\n .command(\"prompt\")\n .description(\"Print or write an approved work prompt without claiming a runner lease\")\n .argument(\"[workItemId]\", \"Work item ID. Defaults to the newest approved work item.\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--out <path>\", \"Write the prompt to a file instead of stdout\")\n .action(async (workItemId: string | undefined, options: { apiUrl: string; root: string; out?: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n\n const { workItems } = await context.client.listWorkItems(context.metadata.amistioProjectId);\n const workItem = selectPromptWorkItem(workItems, workItemId);\n if (!workItem) {\n console.log(workItemId ? `No work item found for ${workItemId}.` : \"No approved work item is ready for prompt export.\");\n return;\n }\n\n const prompt = await createRunnerWorkPrompt(context.client, context.metadata.amistioProjectId, workItem);\n if (options.out) {\n await writeFile(options.out, prompt, \"utf8\");\n console.log(`Wrote work prompt to ${options.out}.`);\n } else {\n console.log(prompt);\n }\n });\n\nprogram\n .command(\"tools\")\n .description(\"List local AI coding tools that the Amistio CLI can use\")\n .action(async () => {\n const tools = await detectLocalTools();\n for (const tool of tools) {\n const mode = tool.execution === \"sdk\" ? \"sdk\" : tool.execution === \"command\" ? \"cli\" : \"--\";\n console.log(`${tool.available ? \"yes\" : \"no \"} ${mode} ${tool.name} - ${tool.description}`);\n }\n console.log(\"custom - pass --tool-command to use any other local runner command.\");\n });\n\nprogram\n .command(\"orchestrate\")\n .description(\"Update the Amistio control plane through a user-installed local AI tool\")\n .argument(\"[goal...]\", \"Goal or next-step instruction for the orchestration pass\")\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--tool <name>\", \"Local tool to use: auto, none, opencode, claude, codex, copilot, gemini, aider, cursor-agent\", \"auto\")\n .option(\"--invocation-channel <channel>\", \"Local invocation channel: auto, sdk, or command\", parseInvocationChannel, \"auto\")\n .option(\"--model <model>\", \"Model to request when the selected local tool supports model selection\")\n .option(\"--tool-command <command>\", \"Custom local command. Use {promptFile} and {root} placeholders when supported\")\n .option(\"--session <policy>\", \"Tool session policy: auto, new, continue:<toolSessionId>, or none\", \"auto\")\n .option(\"--prompt-out <path>\", \"Write the generated orchestration prompt to a file before running\")\n .option(\"--dry-run\", \"Print the generated orchestration prompt without running a tool\")\n .option(\"--no-stream\", \"Capture local tool output instead of streaming it\")\n .action(async (goalParts: string[] | undefined, options: { root: string; tool: string; invocationChannel: RunnerInvocationChannel; toolCommand?: string; model?: string; session: string; promptOut?: string; dryRun?: boolean; stream: boolean }) => {\n const goal = goalParts?.join(\" \").trim() || \"Review the current repository state and update the Amistio control plane with the next useful orchestration steps.\";\n const prompt = await createOrchestrationPrompt({ rootDir: options.root, goal });\n\n if (options.promptOut) {\n const promptPath = await writePromptFile(options.promptOut, prompt);\n console.log(`Wrote orchestration prompt to ${promptPath}.`);\n }\n\n if (options.dryRun || options.tool === \"none\") {\n console.log(prompt);\n return;\n }\n\n const sessionPolicy = normalizeSessionPolicy(options.session);\n const preview = await createToolRunPreview({ rootDir: options.root, prompt, tool: options.tool, invocationChannel: options.invocationChannel, ...(options.toolCommand ? { toolCommand: options.toolCommand } : {}), ...(options.model ? { model: options.model } : {}) });\n console.log(`Running ${preview.toolName}: ${preview.displayCommand}`);\n const result = await runLocalTool({\n rootDir: options.root,\n prompt,\n tool: options.tool,\n invocationChannel: options.invocationChannel,\n ...(options.toolCommand ? { toolCommand: options.toolCommand } : {}),\n ...(options.model ? { model: options.model } : {}),\n streamOutput: options.stream,\n ...(sessionPolicy === \"none\" ? {} : { session: { toolSessionId: `local_orchestration_${randomUUID()}`, policy: sessionPolicy, decision: localSessionDecision(sessionPolicy) } })\n });\n if (!options.stream && result.stdout.trim()) {\n console.log(result.stdout.trim());\n }\n if (!options.stream && result.stderr.trim()) {\n console.error(result.stderr.trim());\n }\n if (result.exitCode !== 0) {\n process.exitCode = result.exitCode;\n }\n });\n\nprogram\n .command(\"run\")\n .description(\"Claim and run approved Amistio work locally\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--runner-id <runnerId>\", \"Stable runner ID\")\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--tool <name>\", \"Local tool to use: auto, none, opencode, claude, codex, copilot, gemini, aider, cursor-agent\")\n .option(\"--invocation-channel <channel>\", \"Local invocation channel: auto, sdk, or command\", parseInvocationChannel)\n .option(\"--model <model>\", \"Model to request when the selected local tool supports model selection\")\n .option(\"--tool-command <command>\", \"Custom local command. Use {promptFile} and {root} placeholders when supported\")\n .option(\"--session <policy>\", \"Tool session policy: auto, new, continue:<toolSessionId>, or none\", \"auto\")\n .option(\"--dry-run\", \"Claim work and print the generated execution prompt without running a tool\")\n .option(\"--watch\", \"Keep polling for approved work until stopped\")\n .option(\"--background\", \"Start a detached background runner that watches for approved work\")\n .option(\"--interval-seconds <seconds>\", \"Polling interval for --watch\", parsePositiveInteger, 10)\n .option(\"--max-iterations <count>\", \"Stop watch mode after this many polling attempts\", parsePositiveInteger)\n .option(\"--no-stream\", \"Capture local tool output instead of streaming it\")\n .option(\"--verbose\", \"Print detailed runner errors while watching\")\n .action(async (options: RunCommandOptions, command: Command) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n if (!context.token) {\n console.log(\"No local runner credential found. Run `amistio pair --pairing-code <code>` to store this machine credential.\");\n process.exitCode = 1;\n return;\n }\n\n const runnerId = options.runnerId ?? stableRunnerId({\n accountId: context.metadata.amistioAccountId,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n machineId: runnerMachineId()\n });\n const resolvedOptions = { ...options, runnerId };\n\n if (options.background) {\n if (options.dryRun) {\n console.log(\"Background runners cannot be started in dry-run mode.\");\n process.exitCode = 1;\n return;\n }\n\n const metadata = await startRunnerDaemon({\n accountId: context.metadata.amistioAccountId,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n runnerId,\n rootDir: path.resolve(options.root),\n apiUrl: options.apiUrl,\n args: buildBackgroundRunnerArgs(resolvedOptions)\n });\n console.log(`Started background runner ${metadata.runnerId} with PID ${metadata.pid}.`);\n if (metadata.logPath) {\n console.log(`Log: ${metadata.logPath}`);\n }\n return;\n }\n\n if (options.watch) {\n for (const line of formatWatchStartupContext({ runnerId, projectId: context.metadata.amistioProjectId, repositoryLinkId: context.metadata.repositoryLinkId, apiUrl: options.apiUrl, intervalSeconds: options.intervalSeconds })) {\n console.log(line);\n }\n }\n\n let offlineSent = false;\n const sendOfflineHeartbeat = async (message?: string) => {\n if (offlineSent || options.dryRun) return;\n offlineSent = true;\n await context.client.sendRunnerHeartbeat(context.metadata.amistioProjectId, runnerId, context.metadata.repositoryLinkId, \"offline\", { ...runnerHeartbeatMetadata(), ...(message ? { preferenceMessage: message } : {}) }).catch(() => undefined);\n };\n const handleShutdownSignal = (signal: NodeJS.Signals) => {\n void sendOfflineHeartbeat(`Runner stopped by ${signal}.`).finally(() => {\n process.exit(signal === \"SIGINT\" ? 130 : 143);\n });\n };\n process.once(\"SIGINT\", handleShutdownSignal);\n process.once(\"SIGTERM\", handleShutdownSignal);\n\n let iterations = 0;\n let lastWatchStateLog: WatchStateLog | undefined;\n try {\n while (true) {\n iterations += 1;\n const result = await runWatchIteration({\n command,\n context,\n options: resolvedOptions,\n runnerId\n });\n\n if (!options.watch || options.dryRun) {\n if (result.exitCode !== 0) {\n process.exitCode = result.exitCode;\n }\n return;\n }\n\n if (result.status === \"idle\" && result.nextAction) {\n const nowMs = Date.now();\n if (shouldPrintWatchState(result.nextAction, lastWatchStateLog, nowMs)) {\n console.log(formatWatchIdleLine(result.nextAction, options.intervalSeconds));\n lastWatchStateLog = { key: watchStateKey(result.nextAction), printedAtMs: nowMs };\n }\n }\n\n if (result.stopRunner) {\n return;\n }\n\n if (options.maxIterations !== undefined && iterations >= options.maxIterations) {\n console.log(`Runner stopped after ${iterations} polling attempt${iterations === 1 ? \"\" : \"s\"}.`);\n return;\n }\n await delay(options.intervalSeconds * 1000);\n }\n } finally {\n process.off(\"SIGINT\", handleShutdownSignal);\n process.off(\"SIGTERM\", handleShutdownSignal);\n await sendOfflineHeartbeat(\"Runner stopped.\");\n }\n });\n\nconst runner = program.command(\"runner\").description(\"Manage local Amistio runner processes\");\n\nrunner\n .command(\"status\")\n .description(\"Show background runner status for the paired repository\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--runner-id <runnerId>\", \"Limit status to one runner ID\")\n .action(async (options: { apiUrl: string; root: string; runnerId?: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n\n const records = await listRunnerDaemonMetadata({\n accountId: context.metadata.amistioAccountId,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n ...(options.runnerId ? { runnerId: options.runnerId } : {})\n });\n const runners = await context.client.listRunners(context.metadata.amistioProjectId).then((result) => result.runners).catch(() => []);\n if (!records.length) {\n console.log(\"No background runner metadata found for this paired repository.\");\n if (runners.length) {\n console.log(`Last runner heartbeat: ${runners[0]!.runnerId} ${runners[0]!.status} at ${runners[0]!.lastSeenAt}.`);\n }\n return;\n }\n\n for (const record of records) {\n const runtimeStatus = runnerDaemonRuntimeStatus(record);\n const heartbeat = runners.find((item) => item.runnerId === record.runnerId);\n console.log(`Runner ${record.runnerId}: ${runtimeStatus}`);\n console.log(` PID: ${record.pid}`);\n console.log(` Uptime: ${runtimeStatus === \"running\" ? runnerDaemonUptime(record) : \"not running\"}`);\n console.log(` Project: ${record.projectId}`);\n console.log(` Repository link: ${record.repositoryLinkId}`);\n console.log(` Root: ${record.rootDir}`);\n console.log(` API: ${record.apiUrl}`);\n console.log(` Host: ${record.hostname}`);\n if (record.logPath) {\n console.log(` Log: ${record.logPath}`);\n }\n if (heartbeat) {\n console.log(` Last heartbeat: ${heartbeat.status} at ${heartbeat.lastSeenAt}${heartbeat.version ? ` (${heartbeat.version})` : \"\"}`);\n }\n }\n });\n\nrunner\n .command(\"stop\")\n .description(\"Stop a background runner for the paired repository\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--runner-id <runnerId>\", \"Runner ID to stop when multiple background runners exist\")\n .action(async (options: { apiUrl: string; root: string; runnerId?: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n\n const records = await listRunnerDaemonMetadata({\n accountId: context.metadata.amistioAccountId,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n ...(options.runnerId ? { runnerId: options.runnerId } : {})\n });\n if (!records.length) {\n console.log(\"No background runner metadata found for this paired repository.\");\n return;\n }\n if (records.length > 1 && !options.runnerId) {\n console.log(`Multiple background runners found: ${records.map((record) => record.runnerId).join(\", \")}. Pass --runner-id to stop one.`);\n process.exitCode = 1;\n return;\n }\n\n const record = records[0]!;\n const stopResult = await stopRunnerDaemonProcess(record);\n await markRunnerDaemonStopped(record);\n await context.client.sendRunnerHeartbeat(context.metadata.amistioProjectId, record.runnerId, context.metadata.repositoryLinkId, \"offline\", {\n version: CLI_VERSION,\n mode: \"background\",\n hostname: record.hostname\n }).catch(() => undefined);\n console.log(stopResult === \"stopped\" ? `Stopped background runner ${record.runnerId}.` : `Marked background runner ${record.runnerId} stopped; process was not running.`);\n });\n\ninterface RunCommandOptions {\n apiUrl: string;\n runnerId?: string;\n root: string;\n tool?: string;\n invocationChannel?: RunnerInvocationChannel;\n toolCommand?: string;\n model?: string;\n session: string;\n dryRun?: boolean;\n watch?: boolean;\n background?: boolean;\n intervalSeconds: number;\n maxIterations?: number;\n stream: boolean;\n verbose?: boolean;\n}\n\ntype ResolvedRunCommandOptions = RunCommandOptions & { runnerId: string };\n\nasync function runWatchIteration({ command, context, options, runnerId }: { command: Command; context: PairedApiContext; options: ResolvedRunCommandOptions; runnerId: string }): ReturnType<typeof runNextWorkItem> {\n try {\n return await runNextWorkItem({\n apiClient: context.client,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n runnerId,\n root: options.root,\n sessionPolicy: normalizeSessionPolicy(options.session),\n ...(command.getOptionValueSource(\"tool\") === \"cli\" && options.tool ? { explicitTool: options.tool } : {}),\n ...(command.getOptionValueSource(\"invocationChannel\") === \"cli\" && options.invocationChannel ? { explicitInvocationChannel: options.invocationChannel } : {}),\n ...(command.getOptionValueSource(\"model\") === \"cli\" && options.model ? { explicitModel: options.model } : {}),\n ...(options.toolCommand ? { toolCommand: options.toolCommand } : {}),\n dryRun: Boolean(options.dryRun),\n stream: options.stream,\n commandContext: {\n accountId: context.metadata.amistioAccountId,\n apiUrl: options.apiUrl,\n backgroundArgs: buildBackgroundRunnerArgs(options),\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n root: options.root,\n runnerId\n },\n suppressIdleOutput: Boolean(options.watch),\n verbose: Boolean(options.verbose)\n });\n } catch (error) {\n if (!options.watch) {\n throw error;\n }\n const detail = truncateLogExcerpt(errorDetail(error));\n const message = \"Runner hit an error while watching and will keep listening.\";\n if (options.verbose) {\n console.error(`${message}\\n${detail}`);\n } else {\n console.error(`${message} Run with --verbose for details.`);\n }\n await Promise.allSettled([\n context.client.sendRunnerHeartbeat(context.metadata.amistioProjectId, runnerId, context.metadata.repositoryLinkId, \"blocked\", { ...runnerHeartbeatMetadata(), preferenceMessage: message }),\n context.client.recordRunnerLog(context.metadata.amistioProjectId, {\n runnerId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n status: \"failed\",\n message,\n error: detail,\n machineId: runnerMachineId()\n })\n ]);\n return { status: \"failed\", exitCode: 1, message };\n }\n}\n\nasync function runNextWorkItem({\n apiClient,\n dryRun,\n projectId,\n repositoryLinkId,\n root,\n runnerId,\n sessionPolicy,\n stream,\n explicitModel,\n explicitInvocationChannel,\n explicitTool,\n toolCommand,\n commandContext,\n suppressIdleOutput,\n verbose\n}: {\n apiClient: ApiClient;\n dryRun: boolean;\n projectId: string;\n repositoryLinkId: string;\n root: string;\n runnerId: string;\n sessionPolicy: SessionPolicy;\n stream: boolean;\n explicitModel?: string;\n explicitInvocationChannel?: RunnerInvocationChannel;\n explicitTool?: string;\n suppressIdleOutput?: boolean;\n verbose?: boolean;\n commandContext: RunnerCommandExecutionContext;\n toolCommand?: string;\n}): Promise<{ status: \"completed\" | \"failed\" | \"idle\" | \"preview\" | \"blocked\"; exitCode: number; nextAction?: ProjectNextAction; message?: string; stopRunner?: boolean }> {\n const toolConfig = await resolveRunnerToolConfig({\n apiClient,\n projectId,\n ...(explicitInvocationChannel ? { explicitInvocationChannel } : {}),\n ...(explicitModel ? { explicitModel } : {}),\n ...(explicitTool ? { explicitTool } : {}),\n ...(toolCommand ? { toolCommand } : {})\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, toolConfig.ready ? \"online\" : \"blocked\", runnerHeartbeatMetadata(toolConfig));\n const commandResult = await runPendingRunnerCommand(apiClient, commandContext, runnerHeartbeatMetadata(toolConfig));\n if (commandResult.handled) {\n if (commandResult.message) {\n console.log(commandResult.message);\n }\n return { status: commandResult.succeeded ? \"completed\" : \"failed\", exitCode: commandResult.succeeded ? 0 : 1, ...(commandResult.stopRunner ? { stopRunner: true } : {}) };\n }\n if (!toolConfig.ready) {\n console.log(toolConfig.message);\n return { status: \"blocked\", exitCode: 1 };\n }\n const result = await apiClient.claimWork(projectId, runnerId, repositoryLinkId, 300, runnerIsolationCapabilityMetadata());\n if (!result.workItem) {\n const nextAction = await loadProjectNextAction(apiClient, projectId, repositoryLinkId, root);\n const message = formatProjectNextAction(nextAction);\n if (!suppressIdleOutput) {\n console.log(message);\n }\n return { status: \"idle\", exitCode: 0, nextAction, message };\n }\n\n const prompt = await createRunnerWorkPrompt(apiClient, projectId, result.workItem);\n if (dryRun || toolConfig.tool === \"none\") {\n console.log(prompt);\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n return { status: \"preview\", exitCode: 0 };\n }\n\n const worktreeIsolation = await prepareWorktreeForClaimedItem({ apiClient, projectId, repositoryLinkId, root, runnerId, toolConfig, workItem: result.workItem });\n if (worktreeIsolation.status === \"blocked\") {\n return { status: \"blocked\", exitCode: 1, message: worktreeIsolation.message };\n }\n const executionRoot = worktreeIsolation.isolation?.worktreePath ?? root;\n const isolationTelemetry = workItemIsolationTelemetry(result.workItem, worktreeIsolation.isolation);\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"running\", {\n ...runnerHeartbeatMetadata(toolConfig),\n currentWorkItemId: result.workItem.workItemId,\n ...(isolationTelemetry.implementationScopeId ? { currentImplementationScopeId: isolationTelemetry.implementationScopeId } : {}),\n ...(isolationTelemetry.executionWorktreeKey ? { currentWorktreeKey: isolationTelemetry.executionWorktreeKey } : {}),\n ...(isolationTelemetry.executionBranch ? { currentBranch: isolationTelemetry.executionBranch } : {})\n });\n\n const preview = await createToolRunPreview({ rootDir: executionRoot, prompt, tool: toolConfig.tool, invocationChannel: toolConfig.requestedInvocationChannel ?? \"auto\", ...(toolCommand ? { toolCommand } : {}), ...(toolConfig.model ? { model: toolConfig.model } : {}) });\n const sessionContext = await prepareToolSession({\n apiClient,\n projectId,\n repositoryLinkId,\n runnerId,\n machineId: runnerMachineId(),\n sessionPolicy: result.workItem.sessionPolicy ?? sessionPolicy,\n toolName: preview.toolName,\n ...(toolConfig.model ? { model: toolConfig.model } : {}),\n supportsSessionReuse: preview.supportsSessionReuse,\n resumabilityScope: preview.resumabilityScope,\n workItem: result.workItem,\n isolationTelemetry\n });\n console.log(`Claimed ${result.workItem.workItemId}. Running ${preview.toolName}: ${preview.displayCommand}`);\n await recordRunnerMilestone(apiClient, projectId, result.workItem, runnerId, repositoryLinkId, {\n status: \"running\",\n summary: `Local runner started ${preview.toolName} execution.`,\n idempotencyKey: `runner_milestone_started_${result.workItem.workItemId}_${result.workItem.attempt}`,\n metadata: { tool: preview.toolName, invocationChannel: toolConfig.requestedInvocationChannel ?? \"auto\" }\n });\n const startedAt = Date.now();\n const providerSessionStore = new LocalToolSessionStore();\n const providerSessionId = sessionContext.toolSession\n ? await providerSessionStore.getProviderSessionId(sessionContext.toolSession.toolSessionId, preview.toolName)\n : undefined;\n let toolResult: LocalToolRunResult;\n try {\n toolResult = await runLocalTool({\n rootDir: executionRoot,\n prompt,\n tool: toolConfig.tool,\n invocationChannel: toolConfig.requestedInvocationChannel ?? \"auto\",\n ...(toolCommand ? { toolCommand } : {}),\n ...(toolConfig.model ? { model: toolConfig.model } : {}),\n streamOutput: stream,\n ...(sessionContext.toolSession\n ? {\n session: {\n toolSessionId: sessionContext.toolSession.toolSessionId,\n policy: sessionContext.policy,\n decision: sessionContext.decision,\n ...(providerSessionId ? { providerSessionId } : {})\n }\n }\n : {})\n });\n } catch (error) {\n const detail = truncateLogExcerpt(errorDetail(error));\n const durationMs = Date.now() - startedAt;\n const message = `${preview.toolName} failed before returning a result.`;\n await Promise.allSettled([\n apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig)),\n markToolSessionBlocked(apiClient, projectId, sessionContext.toolSession, errorMessage(error)),\n apiClient.updateWorkStatus(projectId, result.workItem.workItemId, \"failed\", `run_failed_${result.workItem.workItemId}_${result.workItem.attempt}_${runnerId}`, runnerId, {\n ...isolationTelemetry,\n tool: preview.toolName,\n ...(toolConfig.model ? { model: toolConfig.model } : {}),\n durationMs,\n message,\n error: detail,\n ...(sessionContext.toolSession ? { toolSessionId: sessionContext.toolSession.toolSessionId } : {}),\n sessionPolicy: sessionContext.policy,\n sessionDecision: sessionContext.decision,\n sessionDecisionReason: sessionContext.reason\n }),\n recordRunnerMilestone(apiClient, projectId, result.workItem, runnerId, repositoryLinkId, {\n status: \"failed\",\n summary: message,\n idempotencyKey: `runner_milestone_tool_throw_${result.workItem.workItemId}_${result.workItem.attempt}`,\n metadata: { tool: preview.toolName, error: detail }\n })\n ]);\n if (verbose || !stream) {\n console.error(detail);\n }\n return { status: \"failed\", exitCode: 1, message };\n }\n if (sessionContext.toolSession && toolResult.providerSessionId) {\n await providerSessionStore.setProviderSessionId(sessionContext.toolSession.toolSessionId, preview.toolName, toolResult.providerSessionId);\n }\n if (!stream && toolResult.stdout.trim()) {\n console.log(toolResult.stdout.trim());\n }\n if (!stream && toolResult.stderr.trim()) {\n console.error(toolResult.stderr.trim());\n }\n\n if (result.workItem.workKind === \"brainGeneration\" || result.workItem.workKind === \"planRevision\") {\n return finalizeBrainGenerationWork({\n apiClient,\n durationMs: Date.now() - startedAt,\n projectId,\n repositoryLinkId,\n runnerId,\n sessionContext,\n toolConfig,\n toolName: preview.toolName,\n toolResult,\n workItem: result.workItem\n });\n }\n\n if (result.workItem.workKind === \"assistantQuestion\") {\n return finalizeAssistantQuestionWork({\n apiClient,\n durationMs: Date.now() - startedAt,\n projectId,\n repositoryLinkId,\n runnerId,\n sessionContext,\n toolConfig,\n toolName: preview.toolName,\n toolResult,\n workItem: result.workItem\n });\n }\n\n if (result.workItem.workKind === \"impactPreview\") {\n return finalizeImpactPreviewWork({\n apiClient,\n durationMs: Date.now() - startedAt,\n projectId,\n repositoryLinkId,\n root,\n runnerId,\n sessionContext,\n toolConfig,\n toolName: preview.toolName,\n toolResult,\n workItem: result.workItem\n });\n }\n\n const finalStatus = toolResult.exitCode === 0 ? \"completed\" : \"failed\";\n const durationMs = Date.now() - startedAt;\n const failureExcerpt = toolResult.exitCode === 0 ? undefined : truncateLogExcerpt(toolResult.stderr || toolResult.stdout);\n const updatedToolSession = await finalizeToolSession({\n apiClient,\n projectId,\n status: finalStatus,\n runnerId,\n workItemId: result.workItem.workItemId,\n stdout: toolResult.stdout,\n ...(sessionContext.toolSession ? { session: sessionContext.toolSession } : {}),\n ...(toolResult.messageCount !== undefined ? { messageCount: toolResult.messageCount } : {}),\n ...(toolResult.tokensIn !== undefined ? { tokensIn: toolResult.tokensIn } : {}),\n ...(toolResult.tokensOut !== undefined ? { tokensOut: toolResult.tokensOut } : {}),\n ...(toolResult.costUsd !== undefined ? { costUsd: toolResult.costUsd } : {})\n });\n const statusResult = await apiClient.updateWorkStatus(\n projectId,\n result.workItem.workItemId,\n finalStatus,\n `run_${result.workItem.workItemId}_${randomUUID()}`,\n runnerId,\n {\n tool: preview.toolName,\n ...(toolResult.model ? { model: toolResult.model } : {}),\n durationMs,\n message: `${preview.toolName} exited with code ${toolResult.exitCode}.`,\n ...isolationTelemetry,\n sessionPolicy: sessionContext.policy,\n sessionDecision: sessionContext.decision,\n sessionDecisionReason: sessionContext.reason,\n ...(updatedToolSession ? { toolSessionId: updatedToolSession.toolSessionId } : {}),\n ...(updatedToolSession?.sessionGroupKey ? { sessionGroupKey: updatedToolSession.sessionGroupKey } : {}),\n ...(toolResult.tokensIn !== undefined ? { tokensIn: toolResult.tokensIn } : {}),\n ...(toolResult.tokensOut !== undefined ? { tokensOut: toolResult.tokensOut } : {}),\n ...(toolResult.costUsd !== undefined ? { costUsd: toolResult.costUsd } : {}),\n ...(failureExcerpt ? { error: failureExcerpt } : {})\n }\n );\n await recordRunnerMilestone(apiClient, projectId, result.workItem, runnerId, repositoryLinkId, {\n status: finalStatus,\n summary: `${preview.toolName} exited with code ${toolResult.exitCode}.`,\n idempotencyKey: `runner_milestone_finished_${result.workItem.workItemId}_${statusResult.workItem.idempotencyKey}`,\n metadata: { tool: preview.toolName, durationMs, exitCode: toolResult.exitCode, verificationSummary: finalStatus === \"completed\" ? \"Local execution reported completion.\" : \"Local execution reported failure.\", executionWorktreeKey: isolationTelemetry.executionWorktreeKey ?? \"\", executionBranch: isolationTelemetry.executionBranch ?? \"\" }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n const durationSeconds = Math.round(durationMs / 1000);\n console.log(`Marked ${statusResult.workItem.workItemId} ${statusResult.workItem.status} after ${durationSeconds}s.`);\n\n return { status: finalStatus, exitCode: toolResult.exitCode };\n}\n\nasync function prepareWorktreeForClaimedItem({ apiClient, projectId, repositoryLinkId, root, runnerId, toolConfig, workItem }: {\n apiClient: ApiClient;\n projectId: string;\n repositoryLinkId: string;\n root: string;\n runnerId: string;\n toolConfig: RunnerToolConfig;\n workItem: WorkItem;\n}): Promise<{ status: \"ready\"; isolation?: GitWorktreeIsolation } | { status: \"blocked\"; message: string }> {\n if (!needsGitWorktreeIsolation(workItem)) {\n return { status: \"ready\" };\n }\n\n const identity = resolveWorktreeIdentity(workItem);\n try {\n const isolation = await prepareGitWorktreeIsolation(root, workItem);\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"running\",\n summary: `Prepared Git worktree ${isolation.worktreeKey} on ${isolation.branch}.`,\n idempotencyKey: `runner_milestone_worktree_${workItem.workItemId}_${workItem.attempt}`,\n metadata: { executionWorktreeKey: isolation.worktreeKey, executionBranch: isolation.branch, implementationScopeId: isolation.implementationScopeId }\n });\n return { status: \"ready\", isolation };\n } catch (error) {\n const message = errorMessage(error);\n const telemetry = workItemIsolationTelemetry(workItem, { ...identity, baseRevision: workItem.baseRevision ?? \"unknown\", worktreePath: \"\" });\n const statusResult = await apiClient.updateWorkStatus(projectId, workItem.workItemId, \"blocked\", `worktree_${workItem.workItemId}_${randomUUID()}`, runnerId, {\n ...telemetry,\n message,\n blockerReason: message,\n error: message\n });\n await recordRunnerMilestone(apiClient, projectId, statusResult.workItem, runnerId, repositoryLinkId, {\n status: \"blocked\",\n summary: message,\n idempotencyKey: `runner_milestone_worktree_blocked_${workItem.workItemId}_${statusResult.workItem.idempotencyKey}`,\n metadata: { executionWorktreeKey: telemetry.executionWorktreeKey ?? \"\", executionBranch: telemetry.executionBranch ?? \"\", implementationScopeId: telemetry.implementationScopeId ?? \"\" }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"blocked\", {\n ...runnerHeartbeatMetadata(toolConfig),\n currentWorkItemId: workItem.workItemId,\n ...(telemetry.implementationScopeId ? { currentImplementationScopeId: telemetry.implementationScopeId } : {}),\n ...(telemetry.executionWorktreeKey ? { currentWorktreeKey: telemetry.executionWorktreeKey } : {}),\n ...(telemetry.executionBranch ? { currentBranch: telemetry.executionBranch } : {})\n });\n console.error(message);\n return { status: \"blocked\", message };\n }\n}\n\nfunction workItemIsolationTelemetry(workItem: WorkItem, isolation: GitWorktreeIsolation | undefined): WorkStatusTelemetryLike {\n const implementationScopeId = isolation?.implementationScopeId ?? workItem.implementationScopeId;\n const executionBranch = isolation?.branch ?? workItem.executionBranch;\n const executionWorktreeKey = isolation?.worktreeKey ?? workItem.executionWorktreeKey;\n const repositoryLockId = isolation?.repositoryLockId ?? workItem.repositoryLockId;\n return {\n ...(needsGitWorktreeIsolation(workItem) ? { isolationMode: \"gitWorktree\" as const } : workItem.isolationMode ? { isolationMode: workItem.isolationMode } : {}),\n ...(workItem.claimLeaseId ? { claimLeaseId: workItem.claimLeaseId } : {}),\n ...(workItem.controllingAdrId ? { controllingAdrId: workItem.controllingAdrId } : {}),\n ...(implementationScopeId ? { implementationScopeId } : {}),\n ...(executionBranch ? { executionBranch } : {}),\n ...(executionWorktreeKey ? { executionWorktreeKey } : {}),\n ...(repositoryLockId ? { repositoryLockId } : {}),\n ...(isolation?.baseRevision && isolation.baseRevision !== \"unknown\" ? { baseRevision: isolation.baseRevision } : {}),\n machineId: runnerMachineId()\n };\n}\n\ntype WorkStatusTelemetryLike = Pick<WorkStatusTelemetry, \"baseRevision\" | \"claimLeaseId\" | \"controllingAdrId\" | \"executionBranch\" | \"executionWorktreeKey\" | \"implementationScopeId\" | \"isolationMode\" | \"machineId\" | \"repositoryLockId\">;\n\nasync function recordRunnerMilestone(apiClient: ApiClient, projectId: string, workItem: WorkItem, runnerId: string, repositoryLinkId: string, input: Omit<ActivityEventMutation, \"eventType\" | \"runnerId\" | \"repositoryLinkId\" | \"relatedWorkItemId\" | \"relatedDocumentId\" | \"generatedDraftId\">): Promise<void> {\n await apiClient.recordActivityEvent(projectId, {\n eventType: \"runnerMilestone\",\n runnerId,\n repositoryLinkId,\n relatedWorkItemId: workItem.workItemId,\n ...(workItem.reviewDocumentId ? { relatedDocumentId: workItem.reviewDocumentId } : workItem.impactDocumentId ? { relatedDocumentId: workItem.impactDocumentId } : {}),\n ...(workItem.generatedDraftId ? { generatedDraftId: workItem.generatedDraftId } : {}),\n ...input\n }).catch(() => undefined);\n}\n\ninterface RunnerCommandExecutionContext {\n accountId: string;\n apiUrl: string;\n backgroundArgs: string[];\n projectId: string;\n repositoryLinkId: string;\n root: string;\n runnerId: string;\n}\n\ninterface RunnerCommandExecutionResult {\n handled: boolean;\n succeeded: boolean;\n stopRunner?: boolean;\n message?: string;\n}\n\nasync function runPendingRunnerCommand(apiClient: ApiClient, context: RunnerCommandExecutionContext, heartbeatMetadata: RunnerHeartbeatMetadata): Promise<RunnerCommandExecutionResult> {\n const { commands } = await apiClient.listRunnerCommands(context.projectId, context.runnerId, context.repositoryLinkId).catch(() => ({ commands: [] }));\n const command = commands\n .filter((item) => item.status === \"pending\" || item.status === \"acknowledged\" || item.status === \"running\")\n .sort((first, second) => Date.parse(first.createdAt) - Date.parse(second.createdAt))[0];\n if (!command) {\n return { handled: false, succeeded: true };\n }\n\n await updateRunnerCommandStatus(apiClient, context, command, \"acknowledged\", \"Command acknowledged by local runner.\");\n await updateRunnerCommandStatus(apiClient, context, command, \"running\", `Running ${runnerCommandLabel(command.commandKind)} command.`);\n\n const result = await executeRunnerCommand(command, context);\n await updateRunnerCommandStatus(apiClient, context, command, result.succeeded ? \"completed\" : \"failed\", result.message, result.error);\n if (command.commandKind === \"remove\" && result.succeeded) {\n await new LocalCredentialStore().delete(credentialKey(context.accountId, context.projectId, context.repositoryLinkId));\n }\n if (result.stopRunner && command.commandKind === \"remove\") {\n await apiClient.sendRunnerHeartbeat(context.projectId, context.runnerId, context.repositoryLinkId, \"offline\", heartbeatMetadata).catch(() => undefined);\n }\n\n return { handled: true, succeeded: result.succeeded, message: result.message, ...(result.stopRunner ? { stopRunner: true } : {}) };\n}\n\nasync function updateRunnerCommandStatus(apiClient: ApiClient, context: RunnerCommandExecutionContext, command: RunnerCommandItem, status: \"acknowledged\" | \"running\" | \"completed\" | \"failed\", message: string, error?: string): Promise<RunnerCommandItem> {\n const result = await apiClient.updateRunnerCommand(context.projectId, command.commandId, {\n runnerId: context.runnerId,\n repositoryLinkId: context.repositoryLinkId,\n status,\n idempotencyKey: `runner_command_${command.commandId}_${status}_${randomUUID()}`,\n message,\n ...(error ? { error } : {})\n });\n return result.command;\n}\n\nasync function executeRunnerCommand(command: RunnerCommandItem, context: RunnerCommandExecutionContext): Promise<{ succeeded: boolean; stopRunner?: boolean; message: string; error?: string }> {\n if (command.commandKind === \"remove\") {\n return { succeeded: true, stopRunner: true, message: \"Runner credential revoked. This local runner will stop after removing its stored credential.\" };\n }\n\n if (command.commandKind === \"restart\") {\n return restartCurrentRunner(context);\n }\n\n return runOfficialCliUpdate();\n}\n\nasync function restartCurrentRunner(context: RunnerCommandExecutionContext): Promise<{ succeeded: boolean; stopRunner?: boolean; message: string; error?: string }> {\n if (currentRunnerMode() !== \"background\") {\n return { succeeded: false, message: \"Foreground runners cannot be restarted remotely. Stop and start the local command manually.\" };\n }\n\n const [metadata] = await listRunnerDaemonMetadata({ accountId: context.accountId, projectId: context.projectId, repositoryLinkId: context.repositoryLinkId, runnerId: context.runnerId });\n if (!metadata) {\n return { succeeded: false, message: \"Background runner metadata was not found, so restart needs manual action.\" };\n }\n\n try {\n const replacement = await restartRunnerDaemonProcess(metadata, context.backgroundArgs);\n return { succeeded: true, stopRunner: true, message: `Replacement background runner started with PID ${replacement.pid}.` };\n } catch (error) {\n return { succeeded: false, message: \"Background restart failed.\", error: errorMessage(error) };\n }\n}\n\nfunction runnerCommandLabel(commandKind: RunnerCommandKind): string {\n if (commandKind === \"update\") return \"update\";\n if (commandKind === \"restart\") return \"restart\";\n return \"remove\";\n}\n\nasync function finalizeBrainGenerationWork({\n apiClient,\n durationMs,\n projectId,\n repositoryLinkId,\n runnerId,\n sessionContext,\n toolConfig,\n toolName,\n toolResult,\n workItem\n}: {\n apiClient: ApiClient;\n durationMs: number;\n projectId: string;\n repositoryLinkId: string;\n runnerId: string;\n sessionContext: PreparedToolSession;\n toolConfig: RunnerToolConfig;\n toolName: string;\n toolResult: LocalToolRunResult;\n workItem: WorkItem;\n}): Promise<{ status: \"completed\" | \"failed\"; exitCode: number }> {\n let artifacts: GeneratedBrainArtifact[] | undefined;\n let generationError: string | undefined;\n if (toolResult.exitCode === 0) {\n try {\n artifacts = parseBrainGenerationArtifacts(`${toolResult.stdout}\\n${toolResult.stderr}`);\n } catch (error) {\n generationError = errorMessage(error);\n }\n } else {\n generationError = truncateLogExcerpt(toolResult.stderr || toolResult.stdout) || `${toolName} exited with code ${toolResult.exitCode}.`;\n }\n\n const finalStatus = artifacts ? \"completed\" : \"failed\";\n const updatedToolSession = await finalizeToolSession({\n apiClient,\n projectId,\n status: finalStatus,\n runnerId,\n workItemId: workItem.workItemId,\n stdout: toolResult.stdout,\n ...(sessionContext.toolSession ? { session: sessionContext.toolSession } : {}),\n ...(toolResult.messageCount !== undefined ? { messageCount: toolResult.messageCount } : {}),\n ...(toolResult.tokensIn !== undefined ? { tokensIn: toolResult.tokensIn } : {}),\n ...(toolResult.tokensOut !== undefined ? { tokensOut: toolResult.tokensOut } : {}),\n ...(toolResult.costUsd !== undefined ? { costUsd: toolResult.costUsd } : {})\n });\n const sessionTelemetry = {\n sessionPolicy: sessionContext.policy,\n sessionDecision: sessionContext.decision,\n sessionDecisionReason: sessionContext.reason,\n ...(updatedToolSession ? { toolSessionId: updatedToolSession.toolSessionId } : {}),\n ...(updatedToolSession?.sessionGroupKey ? { sessionGroupKey: updatedToolSession.sessionGroupKey } : {})\n };\n\n if (artifacts) {\n const completionMessage = workItem.workKind === \"planRevision\" ? `${toolName} returned a revised plan for review.` : `${toolName} generated ${artifacts.length} brain artifact${artifacts.length === 1 ? \"\" : \"s\"}.`;\n const result = await apiClient.submitBrainGenerationResult(projectId, workItem.workItemId, {\n status: \"completed\",\n runnerId,\n idempotencyKey: `generation_${workItem.workItemId}_${randomUUID()}`,\n artifacts,\n tool: toolName,\n durationMs,\n ...sessionTelemetry,\n message: completionMessage\n });\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"completed\",\n summary: completionMessage,\n idempotencyKey: `runner_milestone_generation_completed_${workItem.workItemId}_${result.workItem.idempotencyKey}`,\n metadata: { tool: toolName, durationMs, artifactCount: result.documents.length, verificationSummary: \"Generated artifacts were accepted by the Amistio API for review.\" }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n console.log(workItem.workKind === \"planRevision\" ? \"Revised plan returned for review.\" : `Generated ${result.documents.length} brain artifact${result.documents.length === 1 ? \"\" : \"s\"} for review.`);\n return { status: \"completed\", exitCode: 0 };\n }\n\n const failedResult = await apiClient.submitBrainGenerationResult(projectId, workItem.workItemId, {\n status: \"failed\",\n runnerId,\n idempotencyKey: `generation_${workItem.workItemId}_${randomUUID()}`,\n tool: toolName,\n durationMs,\n ...sessionTelemetry,\n message: `${toolName} did not produce valid brain artifacts.`,\n ...(generationError ? { error: generationError } : {})\n });\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"failed\",\n summary: generationError ?? `${toolName} did not produce valid brain artifacts.`,\n idempotencyKey: `runner_milestone_generation_failed_${workItem.workItemId}_${failedResult.workItem.idempotencyKey}`,\n metadata: { tool: toolName, durationMs, verificationSummary: \"Generation output could not be parsed into approved artifact JSON.\" }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n console.error(generationError ?? \"Local runner generation failed.\");\n return { status: \"failed\", exitCode: toolResult.exitCode || 1 };\n}\n\nasync function finalizeAssistantQuestionWork({\n apiClient,\n durationMs,\n projectId,\n repositoryLinkId,\n runnerId,\n sessionContext,\n toolConfig,\n toolName,\n toolResult,\n workItem\n}: {\n apiClient: ApiClient;\n durationMs: number;\n projectId: string;\n repositoryLinkId: string;\n runnerId: string;\n sessionContext: PreparedToolSession;\n toolConfig: RunnerToolConfig;\n toolName: string;\n toolResult: LocalToolRunResult;\n workItem: WorkItem;\n}): Promise<{ status: \"completed\" | \"failed\"; exitCode: number }> {\n let answerResult: ReturnType<typeof parseAssistantAnswerResult> | undefined;\n let answerError: string | undefined;\n if (toolResult.exitCode === 0) {\n try {\n answerResult = parseAssistantAnswerResult(`${toolResult.stdout}\\n${toolResult.stderr}`);\n } catch (error) {\n answerError = errorMessage(error);\n }\n } else {\n answerError = truncateLogExcerpt(toolResult.stderr || toolResult.stdout) || `${toolName} exited with code ${toolResult.exitCode}.`;\n }\n\n const finalStatus = answerResult ? \"completed\" : \"failed\";\n const updatedToolSession = await finalizeToolSession({\n apiClient,\n projectId,\n status: finalStatus,\n runnerId,\n workItemId: workItem.workItemId,\n stdout: toolResult.stdout,\n ...(sessionContext.toolSession ? { session: sessionContext.toolSession } : {}),\n ...(toolResult.messageCount !== undefined ? { messageCount: toolResult.messageCount } : {}),\n ...(toolResult.tokensIn !== undefined ? { tokensIn: toolResult.tokensIn } : {}),\n ...(toolResult.tokensOut !== undefined ? { tokensOut: toolResult.tokensOut } : {}),\n ...(toolResult.costUsd !== undefined ? { costUsd: toolResult.costUsd } : {})\n });\n const sessionTelemetry = {\n sessionPolicy: sessionContext.policy,\n sessionDecision: sessionContext.decision,\n sessionDecisionReason: sessionContext.reason,\n ...(updatedToolSession ? { toolSessionId: updatedToolSession.toolSessionId } : {}),\n ...(updatedToolSession?.sessionGroupKey ? { sessionGroupKey: updatedToolSession.sessionGroupKey } : {})\n };\n\n if (answerResult) {\n const result = await apiClient.submitAssistantResult(projectId, workItem.workItemId, {\n status: \"completed\",\n runnerId,\n idempotencyKey: `assistant_${workItem.workItemId}_${randomUUID()}`,\n answer: answerResult.answer,\n sourceBoundary: answerResult.sourceBoundary,\n citations: answerResult.citations,\n tool: toolName,\n durationMs,\n ...sessionTelemetry,\n message: `${toolName} returned a project knowledge answer.`\n });\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"completed\",\n summary: `${toolName} returned a project knowledge answer.`,\n idempotencyKey: `runner_milestone_assistant_completed_${workItem.workItemId}_${result.workItem.idempotencyKey}`,\n metadata: { tool: toolName, durationMs, sourceBoundary: answerResult.sourceBoundary, citationCount: answerResult.citations.length }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n console.log(\"Project knowledge answer returned.\");\n return { status: \"completed\", exitCode: 0 };\n }\n\n const failedResult = await apiClient.submitAssistantResult(projectId, workItem.workItemId, {\n status: \"failed\",\n runnerId,\n idempotencyKey: `assistant_${workItem.workItemId}_${randomUUID()}`,\n tool: toolName,\n durationMs,\n ...sessionTelemetry,\n message: `${toolName} did not produce a valid project knowledge answer.`,\n ...(answerError ? { error: answerError } : {})\n });\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"failed\",\n summary: answerError ?? `${toolName} did not produce a valid project knowledge answer.`,\n idempotencyKey: `runner_milestone_assistant_failed_${workItem.workItemId}_${failedResult.workItem.idempotencyKey}`,\n metadata: { tool: toolName, durationMs, verificationSummary: \"Assistant output did not include a valid structured answer.\" }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n console.error(answerError ?? \"Local runner assistant answer failed.\");\n return { status: \"failed\", exitCode: toolResult.exitCode || 1 };\n}\n\nasync function finalizeImpactPreviewWork({\n apiClient,\n durationMs,\n projectId,\n repositoryLinkId,\n root,\n runnerId,\n sessionContext,\n toolConfig,\n toolName,\n toolResult,\n workItem\n}: {\n apiClient: ApiClient;\n durationMs: number;\n projectId: string;\n repositoryLinkId: string;\n root: string;\n runnerId: string;\n sessionContext: PreparedToolSession;\n toolConfig: RunnerToolConfig;\n toolName: string;\n toolResult: LocalToolRunResult;\n workItem: WorkItem;\n}): Promise<{ status: \"completed\" | \"failed\"; exitCode: number }> {\n let report = undefined as ReturnType<typeof parseImpactPreviewResult> | undefined;\n let previewError: string | undefined;\n if (toolResult.exitCode === 0) {\n try {\n report = parseImpactPreviewResult(`${toolResult.stdout}\\n${toolResult.stderr}`);\n } catch (error) {\n previewError = errorMessage(error);\n }\n } else {\n previewError = truncateLogExcerpt(toolResult.stderr || toolResult.stdout) || `${toolName} exited with code ${toolResult.exitCode}.`;\n }\n\n const finalStatus = report ? \"completed\" : \"failed\";\n const updatedToolSession = await finalizeToolSession({\n apiClient,\n projectId,\n status: finalStatus,\n runnerId,\n workItemId: workItem.workItemId,\n stdout: toolResult.stdout,\n ...(sessionContext.toolSession ? { session: sessionContext.toolSession } : {}),\n ...(toolResult.messageCount !== undefined ? { messageCount: toolResult.messageCount } : {}),\n ...(toolResult.tokensIn !== undefined ? { tokensIn: toolResult.tokensIn } : {}),\n ...(toolResult.tokensOut !== undefined ? { tokensOut: toolResult.tokensOut } : {}),\n ...(toolResult.costUsd !== undefined ? { costUsd: toolResult.costUsd } : {})\n });\n const sessionTelemetry = {\n sessionPolicy: sessionContext.policy,\n sessionDecision: sessionContext.decision,\n sessionDecisionReason: sessionContext.reason,\n ...(updatedToolSession ? { toolSessionId: updatedToolSession.toolSessionId } : {}),\n ...(updatedToolSession?.sessionGroupKey ? { sessionGroupKey: updatedToolSession.sessionGroupKey } : {})\n };\n\n if (report) {\n const metadata = await readProjectLink(root).catch(() => undefined);\n const result = await apiClient.submitImpactPreviewResult(projectId, workItem.workItemId, {\n status: \"completed\",\n runnerId,\n idempotencyKey: `impact_${workItem.workItemId}_${randomUUID()}`,\n report: {\n ...report,\n analyzedRepoRevision: report.analyzedRepoRevision ?? metadata?.lastSyncedRevision\n },\n tool: toolName,\n durationMs,\n ...sessionTelemetry,\n message: `${toolName} returned an implementation impact preview.`\n });\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"completed\",\n summary: `${toolName} returned an implementation impact preview.`,\n idempotencyKey: `runner_milestone_impact_completed_${workItem.workItemId}_${result.workItem.idempotencyKey}`,\n metadata: { tool: toolName, durationMs, riskLevel: report.riskLevel, likelyPathCount: report.likelyPaths.length, verificationSummary: report.verificationPlan }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n console.log(result.implementationWorkItem ? \"Impact preview returned; implementation work is now queued.\" : \"Impact preview returned.\");\n return { status: \"completed\", exitCode: 0 };\n }\n\n const failedResult = await apiClient.submitImpactPreviewResult(projectId, workItem.workItemId, {\n status: \"failed\",\n runnerId,\n idempotencyKey: `impact_${workItem.workItemId}_${randomUUID()}`,\n tool: toolName,\n durationMs,\n ...sessionTelemetry,\n message: `${toolName} did not produce a valid impact preview.`,\n ...(previewError ? { error: previewError } : {})\n });\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"failed\",\n summary: previewError ?? `${toolName} did not produce a valid impact preview.`,\n idempotencyKey: `runner_milestone_impact_failed_${workItem.workItemId}_${failedResult.workItem.idempotencyKey}`,\n metadata: { tool: toolName, durationMs, verificationSummary: \"Impact preview output did not include valid structured JSON.\" }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n console.error(previewError ?? \"Local runner impact preview failed.\");\n return { status: \"failed\", exitCode: toolResult.exitCode || 1 };\n}\n\nasync function createRunnerWorkPrompt(apiClient: ApiClient, projectId: string, workItem: WorkItem): Promise<string> {\n if (workItem.workKind === \"assistantQuestion\") {\n const [{ documents }, { messages }] = await Promise.all([\n apiClient.listBrainDocuments(projectId),\n apiClient.listAssistantMessages(projectId)\n ]);\n const question = messages.find((message) => message.messageId === workItem.assistantMessageId || message.id === workItem.assistantMessageId)\n ?? messages.filter((message) => message.workItemId === workItem.workItemId).sort((first, second) => Date.parse(first.createdAt) - Date.parse(second.createdAt))[0];\n return createWorkExecutionPrompt(workItem, {\n ...(question ? { assistantQuestion: { question, messages, documents } } : {})\n });\n }\n\n if (workItem.workKind === \"impactPreview\") {\n const { documents } = await apiClient.listBrainDocuments(projectId);\n const implementationPrompt = workItem.impactDocumentId\n ? documents.find((document) => document.documentId === workItem.impactDocumentId || document.id === workItem.impactDocumentId)\n : documents.find((document) => document.frontmatter.generatedDraftId === workItem.generatedDraftId && (document.frontmatter.createsWorkItem === true || document.documentType === \"prompt\"));\n return createWorkExecutionPrompt(workItem, {\n impactPreview: {\n documents,\n ...(implementationPrompt ? { implementationPrompt } : {})\n }\n });\n }\n\n if (workItem.workKind !== \"planRevision\" || !workItem.reviewDocumentId) {\n return createWorkExecutionPrompt(workItem);\n }\n\n const [{ documents }, { messages }] = await Promise.all([\n apiClient.listBrainDocuments(projectId),\n apiClient.listPlanReviewMessages(projectId, workItem.reviewDocumentId)\n ]);\n const planDocument = documents.find((document) => document.documentId === workItem.reviewDocumentId || document.id === workItem.reviewDocumentId);\n return createWorkExecutionPrompt(workItem, {\n ...(planDocument ? { planRevision: { planDocument, messages } } : {})\n });\n}\n\ninterface PairedApiContext {\n client: ApiClient;\n metadata: RepoLinkMetadata;\n token?: string;\n}\n\nasync function loadPairedApiContext(root: string, apiUrl: string): Promise<PairedApiContext | undefined> {\n const metadata = await readProjectLink(root);\n if (!metadata) {\n return undefined;\n }\n\n const token = await new LocalCredentialStore().get(\n credentialKey(metadata.amistioAccountId, metadata.amistioProjectId, metadata.repositoryLinkId)\n );\n return {\n metadata,\n ...(token ? { token } : {}),\n client: new ApiClient({\n apiUrl,\n accountId: metadata.amistioAccountId,\n ...(token ? { token } : {})\n })\n };\n}\n\nasync function loadProjectNextAction(apiClient: ApiClient, projectId: string, repositoryLinkId: string, root: string): Promise<ProjectNextAction> {\n const [{ workItems }, { documents }, { runners }] = await Promise.all([\n apiClient.listWorkItems(projectId),\n apiClient.listBrainDocuments(projectId),\n apiClient.listRunners(projectId).catch(() => ({ runners: [] }))\n ]);\n\n return computeProjectNextAction({\n projectId,\n repositoryLinks: [createCliRepositoryLink({ amistioAccountId: \"local_runner\", amistioProjectId: projectId, repositoryLinkId, defaultBranch: \"main\", lastSyncedRevision: 0 }, root)],\n documents,\n workItems,\n runnerHeartbeats: runners\n });\n}\n\nfunction createCliRepositoryLink(metadata: RepoLinkMetadata, root: string): RepositoryLinkItem {\n const now = new Date().toISOString();\n return {\n id: metadata.repositoryLinkId,\n type: \"repositoryLink\",\n schemaVersion: 1,\n accountId: metadata.amistioAccountId,\n projectId: metadata.amistioProjectId,\n repositoryLinkId: metadata.repositoryLinkId,\n repoName: inferRepoName(root),\n repoFingerprint: createRepoFingerprint(metadata.amistioAccountId, metadata.amistioProjectId, metadata.repositoryLinkId),\n defaultBranch: metadata.defaultBranch,\n status: \"active\",\n createdAt: now,\n updatedAt: now\n };\n}\n\nfunction selectPromptWorkItem(workItems: WorkItem[], workItemId: string | undefined): WorkItem | undefined {\n if (workItemId) {\n return workItems.find((item) => item.workItemId === workItemId || item.id === workItemId);\n }\n\n return workItems.find((item) => isPromptReadyStatus(item.status));\n}\n\nfunction isPromptReadyStatus(status: WorkStatus): boolean {\n return status === \"approved\" || status === \"running\" || status === \"blocked\" || status === \"changesRequested\";\n}\n\ninterface PreparedToolSession {\n policy: SessionPolicy;\n decision: SessionDecision;\n reason: string;\n toolSession?: ToolSessionItem;\n}\n\nasync function prepareToolSession({\n apiClient,\n isolationTelemetry,\n machineId,\n projectId,\n repositoryLinkId,\n runnerId,\n sessionPolicy,\n supportsSessionReuse,\n resumabilityScope,\n toolName,\n model,\n workItem\n}: {\n apiClient: ApiClient;\n isolationTelemetry: WorkStatusTelemetryLike;\n machineId: string;\n projectId: string;\n repositoryLinkId: string;\n runnerId: string;\n sessionPolicy: SessionPolicy;\n supportsSessionReuse: boolean;\n resumabilityScope: SessionResumabilityScope;\n toolName: string;\n model?: string;\n workItem: WorkItem;\n}): Promise<PreparedToolSession> {\n const { toolSessions } = await apiClient.listToolSessions(projectId);\n const selection = selectToolSession({\n policy: sessionPolicy,\n workItem,\n sessions: toolSessions,\n toolName,\n runnerId,\n repositoryLinkId,\n machineId,\n supportsSessionReuse\n });\n\n if (selection.decision === \"skipped\") {\n return selection;\n }\n\n if (selection.toolSession) {\n const { toolSession } = await apiClient.updateToolSession(projectId, selection.toolSession.toolSessionId, {\n status: \"active\",\n runnerId,\n machineId,\n lastWorkItemId: workItem.workItemId,\n reusePolicy: sessionPolicy,\n ...(isolationTelemetry.implementationScopeId ? { implementationScopeId: isolationTelemetry.implementationScopeId } : {}),\n ...(isolationTelemetry.executionWorktreeKey ? { executionWorktreeKey: isolationTelemetry.executionWorktreeKey } : {}),\n ...(isolationTelemetry.isolationMode ? { isolationMode: isolationTelemetry.isolationMode } : {})\n });\n return { ...selection, toolSession };\n }\n\n const toolSessionId = `tool_session_${randomUUID()}`;\n const { toolSession } = await apiClient.createToolSession(projectId, {\n toolSessionId,\n repositoryLinkId,\n tool: toolName,\n provider: toolName,\n ...(model ? { model } : {}),\n resumabilityScope: supportsSessionReuse ? resumabilityScope : \"none\",\n title: workItem.title,\n summary: selection.reason,\n status: \"active\",\n runnerId,\n machineId,\n lastWorkItemId: workItem.workItemId,\n messageCount: 0,\n reusePolicy: sessionPolicy,\n ...(workItem.requestedByUserId ?? workItem.requestedBy ? { createdByUserId: workItem.requestedByUserId ?? workItem.requestedBy } : {}),\n ...(isolationTelemetry.implementationScopeId ? { implementationScopeId: isolationTelemetry.implementationScopeId } : {}),\n ...(isolationTelemetry.executionWorktreeKey ? { executionWorktreeKey: isolationTelemetry.executionWorktreeKey } : {}),\n ...(isolationTelemetry.isolationMode ? { isolationMode: isolationTelemetry.isolationMode } : {}),\n ...(workItem.sessionGroupKey ? { sessionGroupKey: workItem.sessionGroupKey } : {})\n });\n\n return { ...selection, toolSession };\n}\n\nasync function finalizeToolSession({\n apiClient,\n costUsd,\n messageCount,\n projectId,\n runnerId,\n session,\n status,\n stdout,\n tokensIn,\n tokensOut,\n workItemId\n}: {\n apiClient: ApiClient;\n costUsd?: number;\n messageCount?: number;\n projectId: string;\n runnerId: string;\n session?: ToolSessionItem;\n status: \"completed\" | \"failed\";\n stdout: string;\n tokensIn?: number;\n tokensOut?: number;\n workItemId: string;\n}): Promise<ToolSessionItem | undefined> {\n if (!session) {\n return undefined;\n }\n\n const summary = summarizeToolOutput(stdout) ?? session.summary;\n const { toolSession } = await apiClient.updateToolSession(projectId, session.toolSessionId, {\n status: status === \"completed\" ? \"open\" : \"blocked\",\n runnerId,\n lastWorkItemId: workItemId,\n messageCount: (session.messageCount ?? 0) + (messageCount ?? 1),\n ...(summary ? { summary } : {}),\n ...(tokensIn !== undefined ? { estimatedInputTokens: (session.estimatedInputTokens ?? 0) + tokensIn } : {}),\n ...(tokensOut !== undefined ? { estimatedOutputTokens: (session.estimatedOutputTokens ?? 0) + tokensOut } : {}),\n ...(costUsd !== undefined ? { costUsd: (session.costUsd ?? 0) + costUsd } : {}),\n ...(status === \"failed\" ? { closedReason: \"Last run failed or returned a non-zero exit code.\" } : {})\n });\n return toolSession;\n}\n\nasync function markToolSessionBlocked(apiClient: ApiClient, projectId: string, session: ToolSessionItem | undefined, reason: string) {\n if (!session) {\n return;\n }\n\n await apiClient.updateToolSession(projectId, session.toolSessionId, {\n status: \"blocked\",\n summary: reason,\n closedReason: reason\n });\n}\n\nfunction localSessionDecision(policy: SessionPolicy): SessionDecision {\n if (policy === \"new\") {\n return \"forcedNew\";\n }\n if (typeof policy === \"string\" && policy.startsWith(\"continue:\")) {\n return \"forcedContinue\";\n }\n return \"created\";\n}\n\nfunction summarizeToolOutput(value: string): string | undefined {\n const trimmed = value.trim();\n if (!trimmed) {\n return undefined;\n }\n return trimmed.length > 300 ? `${trimmed.slice(0, 300)}...` : trimmed;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction errorDetail(error: unknown): string {\n return error instanceof Error ? error.stack ?? error.message : String(error);\n}\n\nfunction truncateLogExcerpt(value: string) {\n const trimmed = value.trim();\n return trimmed.length > 1200 ? `${trimmed.slice(0, 1200)}...` : trimmed;\n}\n\nfunction collectRepeatedOption(value: string, previous: string[]): string[] {\n return [...previous, value];\n}\n\nfunction formatImportSkipSummary(counts: Record<\"notMarkdown\" | \"excluded\" | \"tooLarge\" | \"alreadyManaged\" | \"unreadable\", number>): string {\n return `Skipped: ${counts.excluded} excluded, ${counts.tooLarge} too large, ${counts.alreadyManaged} already managed, ${counts.unreadable} unreadable, ${counts.notMarkdown} non-Markdown.`;\n}\n\nfunction parsePositiveInteger(value: string) {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new Error(`Expected a positive integer, received ${value}.`);\n }\n\n return parsed;\n}\n\nfunction parseInvocationChannel(value: string): RunnerInvocationChannel {\n if (value === \"auto\" || value === \"sdk\" || value === \"command\") {\n return value;\n }\n throw new Error(`Expected invocation channel auto, sdk, or command; received ${value}.`);\n}\n\nfunction inferRepoName(root: string): string {\n return path.basename(path.resolve(root)) || \"repository\";\n}\n\nfunction createRepoFingerprint(accountId: string, projectId: string, repositoryLinkId: string): string {\n return createHash(\"sha256\").update(`${accountId}:${projectId}:${repositoryLinkId}`).digest(\"hex\");\n}\n\nfunction defaultApiUrl(): string {\n const envApiUrl = process.env[AMISTIO_API_URL_ENV]?.trim();\n return envApiUrl || officialAmistioApiUrl;\n}\n\nfunction apiUrlOverrideWasRequested(command: Command): boolean {\n return command.getOptionValueSource(\"apiUrl\") === \"cli\" || Boolean(process.env[AMISTIO_API_URL_ENV]?.trim());\n}\n\nfunction formatApiUrlFlag(apiUrl: string): string {\n return isOfficialAmistioApiUrl(apiUrl) ? \"\" : ` --api-url ${formatShellArg(apiUrl)}`;\n}\n\nfunction formatShellArg(value: string): string {\n return /^[A-Za-z0-9_./:@-]+$/.test(value) ? value : `'${value.replace(/'/g, \"'\\\\''\")}'`;\n}\n\ntype RunnerToolConfig =\n | {\n ready: true;\n tool: string;\n capabilities: RunnerToolCapability[];\n source: RunnerPreferenceSource;\n status: RunnerPreferenceStatus;\n requestedTool?: RunnerToolSelection;\n requestedInvocationChannel?: RunnerInvocationChannel;\n effectiveTool?: RunnerToolName | \"custom\";\n effectiveInvocationChannel?: RunnerEffectiveInvocationChannel;\n model?: string;\n message?: string;\n }\n | {\n ready: false;\n tool: string;\n capabilities: RunnerToolCapability[];\n source: RunnerPreferenceSource;\n status: RunnerPreferenceStatus;\n requestedTool?: RunnerToolSelection;\n requestedInvocationChannel?: RunnerInvocationChannel;\n effectiveTool?: RunnerToolName | \"custom\";\n effectiveInvocationChannel?: RunnerEffectiveInvocationChannel;\n model?: string;\n message: string;\n };\n\nasync function resolveRunnerToolConfig({ apiClient, explicitInvocationChannel, explicitModel, explicitTool, projectId, toolCommand }: { apiClient: ApiClient; explicitInvocationChannel?: RunnerInvocationChannel; explicitModel?: string; explicitTool?: string; projectId: string; toolCommand?: string }): Promise<RunnerToolConfig> {\n const capabilities = toRunnerToolCapabilities(await detectLocalTools());\n\n if (toolCommand) {\n return {\n ready: true,\n tool: explicitTool ?? \"auto\",\n capabilities,\n source: \"cli\",\n status: \"custom\",\n effectiveTool: \"custom\",\n requestedInvocationChannel: explicitInvocationChannel ?? \"command\",\n effectiveInvocationChannel: \"command\",\n ...(explicitTool && explicitTool !== \"none\" && explicitTool !== \"auto\" && isLocalToolName(explicitTool) ? { requestedTool: explicitTool } : explicitTool === \"auto\" ? { requestedTool: \"auto\" } : {}),\n ...(explicitModel ? { model: explicitModel } : {}),\n message: \"Using local custom tool command.\"\n };\n }\n\n if (explicitTool === \"none\") {\n if (explicitModel) {\n return unavailableToolConfig({ capabilities, source: \"cli\", status: \"modelUnsupported\", message: \"--model cannot be used with --tool none.\", tool: \"none\", requestedInvocationChannel: explicitInvocationChannel ?? \"auto\", model: explicitModel });\n }\n return { ready: true, tool: \"none\", capabilities, source: \"cli\", status: \"none\", requestedInvocationChannel: explicitInvocationChannel ?? \"auto\", message: \"No local tool selected.\" };\n }\n\n if (explicitTool && explicitTool !== \"auto\" && !isLocalToolName(explicitTool)) {\n return unavailableToolConfig({ capabilities, source: \"cli\", status: \"unavailable\", message: `Unsupported local tool: ${explicitTool}.`, tool: explicitTool, requestedInvocationChannel: explicitInvocationChannel ?? \"auto\", ...(explicitModel ? { model: explicitModel } : {}) });\n }\n\n const remotePreference = await apiClient.getRunnerPreferences(projectId).then((response) => response.effective).catch(() => undefined);\n const requestedTool = (explicitTool as RunnerToolSelection | undefined) ?? remotePreference?.tool ?? \"auto\";\n const requestedInvocationChannel = explicitInvocationChannel ?? remotePreference?.invocationChannel ?? \"auto\";\n const model = explicitModel ?? remotePreference?.model;\n const source: RunnerPreferenceSource = explicitTool || explicitInvocationChannel || explicitModel ? \"cli\" : remotePreference?.source ?? \"default\";\n\n return resolveRequestedTool({ capabilities, requestedInvocationChannel, requestedTool, source, ...(model ? { model } : {}) });\n}\n\nfunction resolveRequestedTool({ capabilities, model, requestedInvocationChannel, requestedTool, source }: { capabilities: RunnerToolCapability[]; model?: string; requestedInvocationChannel: RunnerInvocationChannel; requestedTool: RunnerToolSelection; source: RunnerPreferenceSource }): RunnerToolConfig {\n if (requestedTool === \"auto\") {\n const candidate = capabilities.find((capability) => capability.available && capabilitySupportsInvocationChannel(capability, requestedInvocationChannel) && (!model || capability.supportsModelSelection));\n if (!candidate) {\n const anyAvailable = capabilities.some((capability) => capability.available);\n const anyChannelAvailable = capabilities.some((capability) => capability.available && capabilitySupportsInvocationChannel(capability, requestedInvocationChannel));\n const status: RunnerPreferenceStatus = !anyAvailable ? \"unavailable\" : requestedInvocationChannel !== \"auto\" && !anyChannelAvailable ? \"channelUnsupported\" : model ? \"modelUnsupported\" : \"unavailable\";\n return unavailableToolConfig({\n capabilities,\n source,\n status,\n requestedTool,\n requestedInvocationChannel,\n tool: \"auto\",\n ...(model ? { model } : {}),\n message: status === \"channelUnsupported\" ? `No installed local AI tool can honor ${requestedInvocationChannel} invocation.` : model ? \"No installed local tool can honor the selected model.\" : \"No supported local AI tool is installed.\"\n });\n }\n return { ready: true, tool: \"auto\", capabilities, source, status: \"resolved\", requestedTool, requestedInvocationChannel, effectiveTool: candidate.name, effectiveInvocationChannel: effectiveInvocationChannel(candidate, requestedInvocationChannel), ...(model ? { model } : {}) };\n }\n\n const capability = capabilities.find((candidate) => candidate.name === requestedTool);\n if (!capability?.available) {\n return unavailableToolConfig({ capabilities, source, status: \"unavailable\", requestedTool, requestedInvocationChannel, tool: requestedTool, ...(model ? { model } : {}), message: `${requestedTool} is selected but is not available on this runner.` });\n }\n if (!capabilitySupportsInvocationChannel(capability, requestedInvocationChannel)) {\n return unavailableToolConfig({ capabilities, source, status: \"channelUnsupported\", requestedTool, requestedInvocationChannel, effectiveTool: requestedTool, tool: requestedTool, ...(model ? { model } : {}), message: `${requestedTool} is available but does not support ${requestedInvocationChannel} invocation on this runner.` });\n }\n if (model && !capability.supportsModelSelection) {\n return unavailableToolConfig({ capabilities, source, status: \"modelUnsupported\", requestedTool, requestedInvocationChannel, effectiveTool: requestedTool, effectiveInvocationChannel: effectiveInvocationChannel(capability, requestedInvocationChannel), tool: requestedTool, model, message: `${requestedTool} is available but does not support Amistio model selection yet.` });\n }\n\n return { ready: true, tool: requestedTool, capabilities, source, status: \"resolved\", requestedTool, requestedInvocationChannel, effectiveTool: requestedTool, effectiveInvocationChannel: effectiveInvocationChannel(capability, requestedInvocationChannel), ...(model ? { model } : {}) };\n}\n\nfunction unavailableToolConfig(input: { capabilities: RunnerToolCapability[]; source: RunnerPreferenceSource; status: RunnerPreferenceStatus; tool: string; message: string; requestedTool?: RunnerToolSelection; requestedInvocationChannel?: RunnerInvocationChannel; effectiveTool?: RunnerToolName | \"custom\"; effectiveInvocationChannel?: RunnerEffectiveInvocationChannel; model?: string }): RunnerToolConfig {\n return {\n ready: false,\n tool: input.tool,\n capabilities: input.capabilities,\n source: input.source,\n status: input.status,\n message: input.message,\n ...(input.requestedTool ? { requestedTool: input.requestedTool } : {}),\n ...(input.requestedInvocationChannel ? { requestedInvocationChannel: input.requestedInvocationChannel } : {}),\n ...(input.effectiveTool ? { effectiveTool: input.effectiveTool } : {}),\n ...(input.effectiveInvocationChannel ? { effectiveInvocationChannel: input.effectiveInvocationChannel } : {}),\n ...(input.model ? { model: input.model } : {})\n };\n}\n\nfunction capabilitySupportsInvocationChannel(capability: RunnerToolCapability, channel: RunnerInvocationChannel): boolean {\n if (channel === \"auto\") return capability.available;\n if (channel === \"sdk\") return capability.sdkAvailable;\n return capability.commandAvailable;\n}\n\nfunction effectiveInvocationChannel(capability: RunnerToolCapability, channel: RunnerInvocationChannel): RunnerEffectiveInvocationChannel {\n if (channel === \"sdk\" || channel === \"command\") return channel;\n return capability.sdkAvailable ? \"sdk\" : \"command\";\n}\n\nfunction toRunnerToolCapabilities(tools: DetectedLocalTool[]): RunnerToolCapability[] {\n return tools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n available: tool.available,\n sdkAvailable: tool.sdkAvailable,\n commandAvailable: tool.commandAvailable,\n execution: tool.execution,\n supportsSessionReuse: tool.supportsSessionReuse,\n resumabilityScope: tool.resumabilityScope,\n supportsModelSelection: tool.supportsModelSelection,\n supportsBranchIsolation: true,\n supportsGitWorktreeIsolation: true\n }));\n}\n\nfunction runnerIsolationCapabilityMetadata() {\n return {\n machineId: runnerMachineId(),\n supportsBranchIsolation: true,\n supportsGitWorktreeIsolation: true\n };\n}\n\nfunction runnerHeartbeatMetadata(toolConfig?: RunnerToolConfig, mode = currentRunnerMode()) {\n return {\n version: CLI_VERSION,\n mode,\n hostname: os.hostname(),\n ...runnerIsolationCapabilityMetadata(),\n ...(toolConfig?.capabilities ? { capabilities: toolConfig.capabilities } : {}),\n ...(toolConfig?.requestedTool ? { requestedTool: toolConfig.requestedTool } : {}),\n ...(toolConfig?.requestedInvocationChannel ? { requestedInvocationChannel: toolConfig.requestedInvocationChannel } : {}),\n ...(toolConfig?.effectiveTool ? { effectiveTool: toolConfig.effectiveTool } : {}),\n ...(toolConfig?.effectiveInvocationChannel ? { effectiveInvocationChannel: toolConfig.effectiveInvocationChannel } : {}),\n ...(toolConfig?.model ? { effectiveModel: toolConfig.model } : {}),\n ...(toolConfig?.source ? { preferenceSource: toolConfig.source } : {}),\n ...(toolConfig?.status ? { preferenceStatus: toolConfig.status } : {}),\n ...(toolConfig?.message ? { preferenceMessage: toolConfig.message } : {})\n };\n}\n\nfunction runnerMachineId(): string {\n return createHash(\"sha256\").update(`${os.hostname()}:${os.platform()}:${os.arch()}`).digest(\"hex\").slice(0, 20);\n}\n\nasync function delay(milliseconds: number) {\n await new Promise((resolve) => setTimeout(resolve, milliseconds));\n}\n\nprogram.parseAsync().catch((error: unknown) => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exitCode = 1;\n});", "import { z } from \"zod\";\n\nexport const isoDateTimeSchema = z.string().datetime({ offset: true });\n\nexport const itemTypeSchema = z.enum([\n \"account\",\n \"accountUser\",\n \"accountInvite\",\n \"accountSettings\",\n \"user\",\n \"project\",\n \"repositoryLink\",\n \"brainDocument\",\n \"generatedDraft\",\n \"syncCursor\",\n \"syncConflict\",\n \"workItem\",\n \"runnerHeartbeat\",\n \"runnerExecutionLog\",\n \"runnerCredential\",\n \"runnerCommand\",\n \"planReviewMessage\",\n \"assistantMessage\",\n \"impactReport\",\n \"toolSession\",\n \"activityEvent\",\n \"pairingSession\"\n]);\n\nexport const documentTypeSchema = z.enum([\n \"architecture\",\n \"context\",\n \"decision\",\n \"feature\",\n \"memory\",\n \"plan\",\n \"prompt\",\n \"workflow\"\n]);\n\nexport const syncStateSchema = z.enum([\n \"draft\",\n \"approved\",\n \"synced\",\n \"dirtyInRepo\",\n \"dirtyInWeb\",\n \"conflicted\",\n \"archived\"\n]);\n\nexport const workStatusSchema = z.enum([\n \"drafted\",\n \"approved\",\n \"synced\",\n \"running\",\n \"blocked\",\n \"completed\",\n \"changesRequested\",\n \"failed\",\n \"conflicted\"\n]);\n\nexport const sourceSchema = z.enum([\"web\", \"repo\", \"generated\", \"runner\"]);\n\nexport const executionModeSchema = z.enum([\"localRunner\", \"cloudSandbox\"]);\n\nexport const workKindSchema = z.enum([\"brainGeneration\", \"implementation\", \"planRevision\", \"assistantQuestion\", \"impactPreview\"]);\n\nexport const generatedDraftStatusSchema = z.enum([\"queued\", \"generating\", \"reviewing\", \"approved\", \"rejected\", \"changesRequested\", \"failed\"]);\n\nexport const assistantQuestionModeSchema = z.enum([\"brainOnly\", \"sourceAware\"]);\n\nexport const impactRiskLevelSchema = z.enum([\"low\", \"medium\", \"high\", \"critical\"]);\n\nexport const impactReportStatusSchema = z.enum([\"queued\", \"running\", \"completed\", \"failed\", \"stale\"]);\n\nexport const activityEventTypeSchema = z.enum([\n \"commandSubmitted\",\n \"generationQueued\",\n \"generationCompleted\",\n \"generationFailed\",\n \"documentGenerated\",\n \"documentReview\",\n \"documentSync\",\n \"workQueued\",\n \"workClaimed\",\n \"workStatusChanged\",\n \"runnerMilestone\",\n \"assistantAnswered\",\n \"assistantFailed\",\n \"impactPreviewQueued\",\n \"impactPreviewCompleted\",\n \"impactPreviewFailed\",\n \"impactPreviewStale\",\n \"handoffExported\"\n]);\n\nexport const activityEventActorSchema = z.enum([\"webUser\", \"runner\", \"cli\", \"system\"]);\n\nexport const activityEventStatusSchema = z.enum([\"info\", \"queued\", \"running\", \"completed\", \"failed\", \"blocked\", \"warning\"]);\n\nconst activityMetadataValueSchema = z.union([\n z.string().max(600),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(z.string().max(200)).max(20)\n]);\n\nexport const activityMetadataSchema = z.record(z.string().min(1).max(80), activityMetadataValueSchema).default({});\n\nexport const generatedBrainArtifactSchema = z.object({\n documentType: documentTypeSchema,\n title: z.string().trim().min(1),\n repoPath: z.string().trim().min(1),\n content: z.string().min(1)\n});\n\nexport const brainGenerationResultSchema = z.object({\n artifacts: z.array(generatedBrainArtifactSchema).min(1),\n summary: z.string().optional()\n});\n\nexport const sessionPolicySchema = z.union([z.enum([\"auto\", \"new\", \"none\"]), z.string().regex(/^continue:[A-Za-z0-9_.:-]+$/)]);\n\nexport const sessionDecisionSchema = z.enum([\"created\", \"continued\", \"forcedNew\", \"forcedContinue\", \"notSupported\", \"skipped\"]);\n\nexport const toolSessionStatusSchema = z.enum([\"open\", \"active\", \"closed\", \"archived\", \"blocked\", \"unavailable\"]);\n\nexport const sessionResumabilityScopeSchema = z.enum([\"none\", \"localMachine\", \"repository\", \"account\", \"providerCloud\"]);\n\nexport const runnerToolNames = [\"opencode\", \"claude\", \"codex\", \"copilot\", \"gemini\", \"aider\", \"cursor-agent\"] as const;\n\nexport const runnerToolNameSchema = z.enum(runnerToolNames);\n\nexport const runnerToolSelectionSchema = z.union([runnerToolNameSchema, z.literal(\"auto\")]);\n\nexport const runnerPreferenceScopeSchema = z.enum([\"account\", \"project\"]);\n\nexport const runnerPreferenceSourceSchema = z.enum([\"cli\", \"project\", \"account\", \"default\"]);\n\nexport const runnerPreferenceStatusSchema = z.enum([\"resolved\", \"unavailable\", \"modelUnsupported\", \"channelUnsupported\", \"custom\", \"none\"]);\n\nexport const runnerInvocationChannelSchema = z.enum([\"auto\", \"sdk\", \"command\"]);\n\nexport const runnerEffectiveInvocationChannelSchema = z.enum([\"sdk\", \"command\"]);\n\nexport const runnerToolModelPreferenceSchema = z.object({\n tool: runnerToolSelectionSchema.optional(),\n invocationChannel: runnerInvocationChannelSchema.optional(),\n model: z.string().trim().min(1).max(160).optional()\n});\n\nexport const runnerToolCapabilitySchema = z.object({\n name: runnerToolNameSchema,\n description: z.string().min(1),\n available: z.boolean(),\n sdkAvailable: z.boolean(),\n commandAvailable: z.boolean(),\n execution: z.enum([\"sdk\", \"command\", \"unavailable\"]),\n supportsSessionReuse: z.boolean(),\n resumabilityScope: sessionResumabilityScopeSchema,\n supportsModelSelection: z.boolean(),\n supportsBranchIsolation: z.boolean().optional(),\n supportsGitWorktreeIsolation: z.boolean().optional()\n});\n\nexport const workIsolationModeSchema = z.enum([\"none\", \"primaryCheckout\", \"branch\", \"gitWorktree\"]);\n\nexport const repositoryLinkSourceSchema = z.enum([\"web\", \"cli\"]);\n\nexport const repositoryCloneStatusSchema = z.enum([\"notCloned\", \"cloned\", \"validated\", \"failed\"]);\n\nexport const projectStatusSchema = z.enum([\"active\", \"archived\"]);\n\nexport const workspaceScopeKindSchema = z.enum([\"personal\", \"organization\"]);\n\nexport const personalWorkspaceScopeSchema = z.object({\n kind: z.literal(\"personal\"),\n accountId: z.string().min(1),\n userId: z.string().min(1),\n label: z.string().trim().min(1).default(\"Personal workspace\")\n});\n\nexport const organizationWorkspaceScopeSchema = z.object({\n kind: z.literal(\"organization\"),\n accountId: z.string().min(1),\n organizationId: z.string().min(1),\n organizationSlug: z.string().trim().min(1).optional(),\n organizationRole: z.string().trim().min(1).optional(),\n label: z.string().trim().min(1).default(\"Organization workspace\")\n});\n\nexport const activeWorkspaceScopeSchema = z.discriminatedUnion(\"kind\", [personalWorkspaceScopeSchema, organizationWorkspaceScopeSchema]);\n\nexport const organizationWorkspaceOnboardingStatusSchema = z.enum([\"available\", \"upgradeRequired\", \"authRequired\", \"unconfigured\"]);\n\nexport const organizationWorkspaceOnboardingSchema = z.object({\n enabled: z.boolean(),\n canCreate: z.boolean(),\n status: organizationWorkspaceOnboardingStatusSchema,\n reason: z.string().trim().min(1).optional()\n});\n\nexport const baseItemSchema = z.object({\n id: z.string().min(1),\n type: itemTypeSchema,\n schemaVersion: z.number().int().positive().default(1),\n accountId: z.string().min(1),\n projectId: z.string().min(1).optional(),\n createdAt: isoDateTimeSchema,\n updatedAt: isoDateTimeSchema\n});\n\nexport const accountItemSchema = baseItemSchema.extend({\n type: z.literal(\"account\"),\n name: z.string().min(1),\n slug: z.string().min(1)\n});\n\nexport const userItemSchema = baseItemSchema.extend({\n type: z.literal(\"user\"),\n userId: z.string().min(1),\n email: z.string().email(),\n firstName: z.string(),\n lastName: z.string()\n});\n\nexport const projectItemSchema = baseItemSchema.extend({\n type: z.literal(\"project\"),\n projectId: z.string().min(1),\n name: z.string().min(1),\n slug: z.string().min(1),\n description: z.string().optional(),\n status: projectStatusSchema.default(\"active\"),\n archivedAt: isoDateTimeSchema.optional(),\n archivedByUserId: z.string().min(1).optional(),\n archiveReason: z.string().min(1).optional()\n});\n\nexport const repositoryLinkItemSchema = baseItemSchema.extend({\n type: z.literal(\"repositoryLink\"),\n projectId: z.string().min(1),\n repositoryLinkId: z.string().min(1),\n repoName: z.string().min(1),\n repoFingerprint: z.string().min(1).optional(),\n defaultBranch: z.string().min(1),\n cloneUrl: z.string().min(1).optional(),\n provider: z.string().min(1).optional(),\n repoOwner: z.string().min(1).optional(),\n repoFullName: z.string().min(1).optional(),\n linkedByUserId: z.string().min(1).optional(),\n linkSource: repositoryLinkSourceSchema.optional(),\n cloneStatus: repositoryCloneStatusSchema.optional(),\n lastValidatedAt: isoDateTimeSchema.optional(),\n status: z.enum([\"active\", \"revoked\"]).default(\"active\")\n});\n\nexport const brainDocumentItemSchema = baseItemSchema.extend({\n type: z.literal(\"brainDocument\"),\n projectId: z.string().min(1),\n documentId: z.string().min(1),\n documentType: documentTypeSchema,\n title: z.string().min(1),\n status: z.string().min(1),\n repoPath: z.string().min(1),\n content: z.string(),\n contentHash: z.string().min(1),\n frontmatter: z.record(z.string(), z.unknown()).default({}),\n revision: z.number().int().nonnegative(),\n approvedRevision: z.number().int().nonnegative().optional(),\n source: sourceSchema,\n syncState: syncStateSchema\n});\n\nexport const generatedDraftItemSchema = baseItemSchema.extend({\n type: z.literal(\"generatedDraft\"),\n projectId: z.string().min(1),\n wishId: z.string().min(1),\n title: z.string().min(1),\n status: generatedDraftStatusSchema,\n documentIds: z.array(z.string()).default([]),\n wish: z.string().min(1).optional(),\n requestedByUserId: z.string().min(1).optional(),\n workItemId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional(),\n generationAttempt: z.number().int().nonnegative().optional(),\n lastGenerationError: z.string().optional()\n});\n\nexport const syncCursorItemSchema = baseItemSchema.extend({\n type: z.literal(\"syncCursor\"),\n projectId: z.string().min(1),\n repositoryLinkId: z.string().min(1),\n lastSyncedRevision: z.number().int().nonnegative(),\n lastSyncedAt: isoDateTimeSchema.optional()\n});\n\nexport const syncConflictItemSchema = baseItemSchema.extend({\n type: z.literal(\"syncConflict\"),\n projectId: z.string().min(1),\n conflictId: z.string().min(1),\n documentId: z.string().min(1),\n repoPath: z.string().min(1),\n webRevision: z.number().int().nonnegative(),\n repoContentHash: z.string().min(1),\n status: z.enum([\"open\", \"resolved\", \"ignored\"])\n});\n\nexport const workItemSchema = baseItemSchema.extend({\n type: z.literal(\"workItem\"),\n projectId: z.string().min(1),\n workItemId: z.string().min(1),\n workKind: workKindSchema.optional(),\n status: workStatusSchema,\n executionMode: executionModeSchema.optional(),\n title: z.string().min(1),\n requestedBy: z.string().min(1),\n requestedByUserId: z.string().min(1).optional(),\n approvedBy: z.string().min(1).optional(),\n approvedByUserId: z.string().min(1).optional(),\n sourceWish: z.string().min(1).optional(),\n generatedDraftId: z.string().min(1).optional(),\n repositoryLinkId: z.string().min(1).optional(),\n reviewThreadId: z.string().min(1).optional(),\n reviewDocumentId: z.string().min(1).optional(),\n reviewDocumentRevision: z.number().int().nonnegative().optional(),\n reviewMessageId: z.string().min(1).optional(),\n assistantMessageId: z.string().min(1).optional(),\n assistantQuestionMode: assistantQuestionModeSchema.optional(),\n impactReportId: z.string().min(1).optional(),\n impactDocumentId: z.string().min(1).optional(),\n impactDocumentRevision: z.number().int().nonnegative().optional(),\n claimedByRunnerId: z.string().optional(),\n pairedByUserId: z.string().min(1).optional(),\n machineId: z.string().min(1).optional(),\n claimLeaseId: z.string().min(1).optional(),\n claimAttempt: z.number().int().nonnegative().optional(),\n leaseExpiresAt: isoDateTimeSchema.optional(),\n controllingAdrId: z.string().min(1).optional(),\n implementationScopeId: z.string().min(1).optional(),\n executionBranch: z.string().min(1).optional(),\n executionWorktreeKey: z.string().min(1).optional(),\n isolationMode: workIsolationModeSchema.optional(),\n repositoryLockId: z.string().min(1).optional(),\n baseRevision: z.string().min(1).optional(),\n baseContentHash: z.string().min(1).optional(),\n blockerReason: z.string().min(1).optional(),\n attempt: z.number().int().nonnegative().default(0),\n idempotencyKey: z.string().min(1),\n sessionPolicy: sessionPolicySchema.optional(),\n sessionGroupKey: z.string().min(1).optional(),\n toolSessionId: z.string().min(1).optional(),\n sessionDecision: sessionDecisionSchema.optional(),\n sessionDecisionReason: z.string().min(1).optional(),\n lastStatusMessage: z.string().optional(),\n lastStatusAt: isoDateTimeSchema\n});\n\nexport const runnerHeartbeatItemSchema = baseItemSchema.extend({\n type: z.literal(\"runnerHeartbeat\"),\n projectId: z.string().min(1),\n runnerId: z.string().min(1),\n repositoryLinkId: z.string().min(1),\n status: z.enum([\"online\", \"offline\", \"running\", \"blocked\", \"removed\"]),\n workspaceId: z.string().min(1).optional(),\n pairedByUserId: z.string().min(1).optional(),\n machineId: z.string().min(1).optional(),\n version: z.string().optional(),\n mode: z.enum([\"foreground\", \"background\"]).optional(),\n hostname: z.string().min(1).optional(),\n runnerName: z.string().min(1).optional(),\n supportsBranchIsolation: z.boolean().optional(),\n supportsGitWorktreeIsolation: z.boolean().optional(),\n currentWorkItemId: z.string().min(1).optional(),\n currentImplementationScopeId: z.string().min(1).optional(),\n currentWorktreeKey: z.string().min(1).optional(),\n currentBranch: z.string().min(1).optional(),\n capabilities: z.array(runnerToolCapabilitySchema).optional(),\n requestedTool: runnerToolSelectionSchema.optional(),\n requestedInvocationChannel: runnerInvocationChannelSchema.optional(),\n effectiveTool: z.union([runnerToolNameSchema, z.literal(\"custom\")]).optional(),\n effectiveInvocationChannel: runnerEffectiveInvocationChannelSchema.optional(),\n effectiveModel: z.string().min(1).optional(),\n preferenceSource: runnerPreferenceSourceSchema.optional(),\n preferenceStatus: runnerPreferenceStatusSchema.optional(),\n preferenceMessage: z.string().optional(),\n lastSeenAt: isoDateTimeSchema\n});\n\nexport const runnerSettingsItemSchema = baseItemSchema.extend({\n type: z.literal(\"accountSettings\"),\n projectId: z.string().min(1),\n settingsType: z.literal(\"runnerPreferences\"),\n scope: runnerPreferenceScopeSchema,\n preferences: runnerToolModelPreferenceSchema\n});\n\nexport const runnerExecutionLogItemSchema = baseItemSchema.extend({\n type: z.literal(\"runnerExecutionLog\"),\n projectId: z.string().min(1),\n runnerLogId: z.string().min(1),\n runnerId: z.string().min(1),\n workKind: workKindSchema.optional(),\n workItemId: z.string().min(1).optional(),\n workTitle: z.string().min(1).optional(),\n initiatedBy: z.string().min(1).optional(),\n approvedBy: z.string().min(1).optional(),\n repositoryLinkId: z.string().min(1).optional(),\n pairedByUserId: z.string().min(1).optional(),\n machineId: z.string().min(1).optional(),\n controllingAdrId: z.string().min(1).optional(),\n implementationScopeId: z.string().min(1).optional(),\n executionBranch: z.string().min(1).optional(),\n executionWorktreeKey: z.string().min(1).optional(),\n isolationMode: workIsolationModeSchema.optional(),\n repositoryLockId: z.string().min(1).optional(),\n claimLeaseId: z.string().min(1).optional(),\n status: z.enum([\"claimed\", \"running\", \"completed\", \"failed\", \"blocked\", \"idle\"]),\n executionMode: executionModeSchema.optional(),\n tool: z.string().min(1).optional(),\n model: z.string().min(1).optional(),\n attempt: z.number().int().nonnegative().optional(),\n startedAt: isoDateTimeSchema.optional(),\n endedAt: isoDateTimeSchema.optional(),\n durationMs: z.number().int().nonnegative().optional(),\n costUsd: z.number().nonnegative().optional(),\n tokensIn: z.number().int().nonnegative().optional(),\n tokensOut: z.number().int().nonnegative().optional(),\n sessionPolicy: sessionPolicySchema.optional(),\n sessionGroupKey: z.string().min(1).optional(),\n toolSessionId: z.string().min(1).optional(),\n sessionDecision: sessionDecisionSchema.optional(),\n sessionDecisionReason: z.string().min(1).optional(),\n message: z.string().optional(),\n error: z.string().optional()\n});\n\nexport const runnerCredentialItemSchema = baseItemSchema.extend({\n type: z.literal(\"runnerCredential\"),\n projectId: z.string().min(1),\n runnerCredentialId: z.string().min(1),\n repositoryLinkId: z.string().min(1),\n pairedByUserId: z.string().min(1).optional(),\n machineId: z.string().min(1).optional(),\n tokenHash: z.string().min(32),\n issuedAt: isoDateTimeSchema,\n lastUsedAt: isoDateTimeSchema.optional(),\n status: z.enum([\"active\", \"revoked\"]).default(\"active\")\n});\n\nexport const runnerCommandKindSchema = z.enum([\"update\", \"restart\", \"remove\"]);\n\nexport const runnerCommandStatusSchema = z.enum([\"pending\", \"acknowledged\", \"running\", \"completed\", \"failed\", \"expired\", \"cancelled\"]);\n\nexport const runnerCommandItemSchema = baseItemSchema.extend({\n type: z.literal(\"runnerCommand\"),\n projectId: z.string().min(1),\n commandId: z.string().min(1),\n commandKind: runnerCommandKindSchema,\n status: runnerCommandStatusSchema,\n runnerId: z.string().min(1),\n repositoryLinkId: z.string().min(1),\n requestedByUserId: z.string().min(1),\n idempotencyKey: z.string().min(1),\n lastStatusIdempotencyKey: z.string().min(1).optional(),\n expiresAt: isoDateTimeSchema,\n acknowledgedAt: isoDateTimeSchema.optional(),\n startedAt: isoDateTimeSchema.optional(),\n completedAt: isoDateTimeSchema.optional(),\n cancelledAt: isoDateTimeSchema.optional(),\n message: z.string().optional(),\n error: z.string().optional()\n});\n\nexport const planReviewMessageRoleSchema = z.enum([\"user\", \"assistant\", \"system\"]);\n\nexport const planReviewMessageIntentSchema = z.enum([\"ask\", \"revisionRequest\", \"revisionResult\"]);\n\nexport const planReviewMessageStatusSchema = z.enum([\"posted\", \"queued\", \"running\", \"completed\", \"failed\"]);\n\nexport const planReviewMessageItemSchema = baseItemSchema.extend({\n type: z.literal(\"planReviewMessage\"),\n projectId: z.string().min(1),\n messageId: z.string().min(1),\n threadId: z.string().min(1),\n generatedDraftId: z.string().min(1),\n documentId: z.string().min(1),\n documentRevision: z.number().int().nonnegative(),\n role: planReviewMessageRoleSchema,\n intent: planReviewMessageIntentSchema,\n status: planReviewMessageStatusSchema,\n content: z.string().min(1),\n workItemId: z.string().min(1).optional(),\n responseToMessageId: z.string().min(1).optional(),\n createdByUserId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional()\n});\n\nexport const assistantMessageRoleSchema = z.enum([\"user\", \"assistant\", \"system\"]);\n\nexport const assistantMessageStatusSchema = z.enum([\"posted\", \"queued\", \"running\", \"completed\", \"failed\"]);\n\nexport const assistantSourceBoundarySchema = z.enum([\"projectBrain\", \"localSource\", \"runnerState\", \"mixed\"]);\n\nexport const assistantCitationSchema = z.object({\n source: assistantSourceBoundarySchema,\n documentId: z.string().min(1).optional(),\n title: z.string().min(1).optional(),\n repoPath: z.string().min(1).optional(),\n documentRevision: z.number().int().nonnegative().optional(),\n excerpt: z.string().max(600).optional()\n});\n\nexport const assistantMessageItemSchema = baseItemSchema.extend({\n type: z.literal(\"assistantMessage\"),\n projectId: z.string().min(1),\n messageId: z.string().min(1),\n threadId: z.string().min(1),\n role: assistantMessageRoleSchema,\n status: assistantMessageStatusSchema,\n content: z.string().min(1),\n questionMode: assistantQuestionModeSchema.optional(),\n sourceBoundary: assistantSourceBoundarySchema.optional(),\n citations: z.array(assistantCitationSchema).default([]),\n relatedDocumentIds: z.array(z.string().min(1)).default([]),\n workItemId: z.string().min(1).optional(),\n responseToMessageId: z.string().min(1).optional(),\n createdByUserId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional(),\n repositoryLinkId: z.string().min(1).optional(),\n repoFingerprint: z.string().min(1).optional(),\n answeredAt: isoDateTimeSchema.optional(),\n error: z.string().optional()\n});\n\nexport const assistantAnswerResultSchema = z.object({\n answer: z.string().trim().min(1),\n sourceBoundary: assistantSourceBoundarySchema.default(\"localSource\"),\n citations: z.array(assistantCitationSchema).default([]),\n summary: z.string().optional()\n});\n\nexport const knowledgeSearchScopeSchema = z.enum([\"project\", \"organization\"]);\n\nexport const knowledgeSourceTypeSchema = z.enum([\"brainDocument\", \"generatedArtifact\", \"runnerSummary\", \"knowledgeEntity\", \"knowledgeRelation\"]);\n\nexport const knowledgeChunkStatusSchema = z.enum([\"approved\", \"synced\", \"stale\"]);\n\nexport const knowledgeEntityTypeSchema = z.enum([\"project\", \"system\", \"component\", \"domain\", \"tool\", \"decision\", \"feature\", \"risk\", \"team\", \"workflow\", \"unknown\"]);\n\nexport const knowledgeRelationTypeSchema = z.enum([\"uses\", \"depends_on\", \"decides\", \"supersedes\", \"touches\", \"blocks\", \"implements\", \"mentions\"]);\n\nexport const knowledgeIndexFreshnessSchema = z.object({\n status: z.enum([\"disabled\", \"fresh\", \"stale\", \"indexing\", \"degraded\"]),\n indexedAt: isoDateTimeSchema.optional(),\n staleReason: z.string().trim().min(1).optional(),\n failedChunkCount: z.number().int().nonnegative().default(0),\n indexedChunkCount: z.number().int().nonnegative().default(0)\n});\n\nexport const knowledgeSearchChunkSchema = z.object({\n chunkId: z.string().min(1),\n accountId: z.string().min(1),\n projectId: z.string().min(1),\n sourceType: knowledgeSourceTypeSchema.default(\"brainDocument\"),\n documentId: z.string().min(1),\n documentType: documentTypeSchema,\n title: z.string().min(1),\n repoPath: z.string().min(1),\n revision: z.number().int().nonnegative(),\n sectionHeading: z.string().trim().min(1).optional(),\n chunkText: z.string().trim().min(1).max(12000),\n chunkHash: z.string().min(1),\n contentHash: z.string().min(1),\n sourceBoundary: assistantSourceBoundarySchema.default(\"projectBrain\"),\n status: knowledgeChunkStatusSchema,\n embeddingModel: z.string().trim().min(1).optional(),\n embedding: z.array(z.number()).max(8192).optional(),\n indexedAt: isoDateTimeSchema.optional(),\n createdAt: isoDateTimeSchema,\n updatedAt: isoDateTimeSchema\n});\n\nexport const knowledgeEntitySchema = z.object({\n entityId: z.string().min(1),\n accountId: z.string().min(1),\n projectIds: z.array(z.string().min(1)).min(1),\n name: z.string().trim().min(1).max(200),\n entityType: knowledgeEntityTypeSchema,\n aliases: z.array(z.string().trim().min(1).max(200)).default([]),\n description: z.string().trim().min(1).max(1200).optional(),\n sourceDocumentIds: z.array(z.string().min(1)).default([]),\n confidence: z.number().min(0).max(1).default(0.6),\n createdAt: isoDateTimeSchema,\n updatedAt: isoDateTimeSchema\n});\n\nexport const knowledgeRelationEndpointSchema = z.object({\n entityId: z.string().min(1),\n name: z.string().trim().min(1).max(200),\n entityType: knowledgeEntityTypeSchema.default(\"unknown\")\n});\n\nexport const knowledgeRelationSchema = z.object({\n relationId: z.string().min(1),\n accountId: z.string().min(1),\n projectIds: z.array(z.string().min(1)).min(1),\n relationType: knowledgeRelationTypeSchema,\n from: knowledgeRelationEndpointSchema,\n to: knowledgeRelationEndpointSchema,\n summary: z.string().trim().min(1).max(1200),\n citations: z.array(assistantCitationSchema).default([]),\n confidence: z.number().min(0).max(1).default(0.6),\n createdAt: isoDateTimeSchema,\n updatedAt: isoDateTimeSchema\n});\n\nexport const knowledgeSearchRequestSchema = z.object({\n query: z.string().trim().min(1).max(2000),\n scope: knowledgeSearchScopeSchema.default(\"project\"),\n projectIds: z.array(z.string().min(1)).max(100).optional(),\n topK: z.number().int().min(1).max(20).default(6),\n includeRelations: z.boolean().default(true),\n useSemanticRanking: z.boolean().default(false)\n});\n\nexport const knowledgeSearchResultSchema = z.object({\n chunkId: z.string().min(1),\n accountId: z.string().min(1),\n projectId: z.string().min(1),\n documentId: z.string().min(1),\n documentType: documentTypeSchema,\n title: z.string().min(1),\n repoPath: z.string().min(1),\n revision: z.number().int().nonnegative(),\n sectionHeading: z.string().trim().min(1).optional(),\n excerpt: z.string().trim().min(1).max(1200),\n sourceBoundary: assistantSourceBoundarySchema.default(\"projectBrain\"),\n score: z.number().optional(),\n citation: assistantCitationSchema\n});\n\nexport const knowledgeSearchResponseSchema = z.object({\n query: z.string().trim().min(1),\n scope: knowledgeSearchScopeSchema,\n results: z.array(knowledgeSearchResultSchema).default([]),\n relations: z.array(knowledgeRelationSchema).default([]),\n freshness: knowledgeIndexFreshnessSchema,\n degradedReason: z.string().trim().min(1).optional()\n});\n\nexport const knowledgeDiagramFormatSchema = z.enum([\"mermaid\"]);\n\nexport const knowledgeDiagramRequestSchema = knowledgeSearchRequestSchema.extend({\n format: knowledgeDiagramFormatSchema.default(\"mermaid\"),\n saveAsDocument: z.boolean().default(false),\n title: z.string().trim().min(1).max(160).optional()\n});\n\nexport const knowledgeDiagramResultSchema = z.object({\n diagramId: z.string().min(1),\n title: z.string().trim().min(1).max(160),\n format: knowledgeDiagramFormatSchema,\n content: z.string().trim().min(1),\n citations: z.array(assistantCitationSchema).default([]),\n sourceResultIds: z.array(z.string().min(1)).default([]),\n documentId: z.string().min(1).optional(),\n freshness: knowledgeIndexFreshnessSchema,\n warnings: z.array(z.string().trim().min(1).max(600)).default([])\n});\n\nexport const impactAffectedAreaSchema = z.object({\n name: z.string().trim().min(1),\n description: z.string().trim().min(1).optional()\n});\n\nexport const impactPathSchema = z.object({\n repoPath: z.string().trim().min(1),\n reason: z.string().trim().min(1).optional()\n});\n\nexport const impactReportItemSchema = baseItemSchema.extend({\n type: z.literal(\"impactReport\"),\n projectId: z.string().min(1),\n impactReportId: z.string().min(1),\n status: impactReportStatusSchema,\n riskLevel: impactRiskLevelSchema.optional(),\n summary: z.string().trim().min(1).optional(),\n affectedAreas: z.array(impactAffectedAreaSchema).default([]),\n likelyPaths: z.array(impactPathSchema).default([]),\n dependencies: z.array(z.string().trim().min(1)).default([]),\n dataSchemaImpact: z.string().trim().min(1).optional(),\n securityPrivacyImpact: z.string().trim().min(1).optional(),\n verificationPlan: z.array(z.string().trim().min(1)).default([]),\n rollbackPlan: z.string().trim().min(1).optional(),\n generatedDraftId: z.string().min(1).optional(),\n sourceWorkItemId: z.string().min(1).optional(),\n documentId: z.string().min(1).optional(),\n documentRevision: z.number().int().nonnegative().optional(),\n repositoryLinkId: z.string().min(1).optional(),\n repoFingerprint: z.string().min(1).optional(),\n analyzedRepoRevision: z.number().int().nonnegative().optional(),\n workItemId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional(),\n createdByUserId: z.string().min(1).optional(),\n completedAt: isoDateTimeSchema.optional(),\n staleReason: z.string().optional(),\n error: z.string().optional()\n});\n\nexport const impactPreviewResultSchema = z.object({\n riskLevel: impactRiskLevelSchema,\n summary: z.string().trim().min(1),\n affectedAreas: z.array(impactAffectedAreaSchema).min(1),\n likelyPaths: z.array(impactPathSchema).default([]),\n dependencies: z.array(z.string().trim().min(1)).default([]),\n dataSchemaImpact: z.string().trim().min(1),\n securityPrivacyImpact: z.string().trim().min(1),\n verificationPlan: z.array(z.string().trim().min(1)).min(1),\n rollbackPlan: z.string().trim().min(1),\n analyzedRepoRevision: z.number().int().nonnegative().optional(),\n repoFingerprint: z.string().min(1).optional()\n});\n\nexport const activityEventItemSchema = baseItemSchema.extend({\n type: z.literal(\"activityEvent\"),\n projectId: z.string().min(1),\n activityEventId: z.string().min(1),\n eventType: activityEventTypeSchema,\n actorType: activityEventActorSchema,\n actorId: z.string().min(1).optional(),\n status: activityEventStatusSchema,\n summary: z.string().trim().min(1).max(600),\n metadata: activityMetadataSchema,\n idempotencyKey: z.string().min(1),\n occurredAt: isoDateTimeSchema,\n relatedWorkItemId: z.string().min(1).optional(),\n relatedDocumentId: z.string().min(1).optional(),\n generatedDraftId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional(),\n repositoryLinkId: z.string().min(1).optional(),\n runnerLogId: z.string().min(1).optional(),\n commandId: z.string().min(1).optional()\n});\n\nexport const activityHandoffExportSchema = z.object({\n markdown: z.string().min(1),\n generatedAt: isoDateTimeSchema,\n eventCount: z.number().int().nonnegative()\n});\n\nexport const toolSessionItemSchema = baseItemSchema.extend({\n type: z.literal(\"toolSession\"),\n projectId: z.string().min(1),\n toolSessionId: z.string().min(1),\n repositoryLinkId: z.string().min(1).optional(),\n tool: z.string().min(1),\n provider: z.string().min(1).optional(),\n model: z.string().min(1).optional(),\n resumabilityScope: sessionResumabilityScopeSchema,\n title: z.string().min(1),\n summary: z.string().optional(),\n tags: z.array(z.string().min(1)).default([]),\n relatedDocumentIds: z.array(z.string().min(1)).default([]),\n status: toolSessionStatusSchema,\n createdByUserId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional(),\n machineId: z.string().min(1).optional(),\n implementationScopeId: z.string().min(1).optional(),\n executionWorktreeKey: z.string().min(1).optional(),\n isolationMode: workIsolationModeSchema.optional(),\n lastWorkItemId: z.string().min(1).optional(),\n lastActivityAt: isoDateTimeSchema,\n messageCount: z.number().int().nonnegative().optional(),\n estimatedInputTokens: z.number().int().nonnegative().optional(),\n estimatedOutputTokens: z.number().int().nonnegative().optional(),\n costUsd: z.number().nonnegative().optional(),\n sessionGroupKey: z.string().min(1).optional(),\n reusePolicy: sessionPolicySchema.optional(),\n closedReason: z.string().optional()\n});\n\nexport const pairingSessionItemSchema = baseItemSchema.extend({\n type: z.literal(\"pairingSession\"),\n pairingCodeHash: z.string().min(1),\n projectId: z.string().min(1),\n createdByUserId: z.string().min(1),\n expiresAt: isoDateTimeSchema,\n status: z.enum([\"pending\", \"confirmed\", \"expired\", \"revoked\"])\n});\n\nexport const projectItemUnionSchema = z.discriminatedUnion(\"type\", [\n projectItemSchema,\n repositoryLinkItemSchema,\n brainDocumentItemSchema,\n generatedDraftItemSchema,\n syncCursorItemSchema,\n syncConflictItemSchema,\n workItemSchema,\n runnerHeartbeatItemSchema,\n runnerSettingsItemSchema,\n runnerExecutionLogItemSchema,\n runnerCredentialItemSchema,\n runnerCommandItemSchema,\n planReviewMessageItemSchema,\n assistantMessageItemSchema,\n impactReportItemSchema,\n activityEventItemSchema,\n toolSessionItemSchema\n]);\n\nexport type ItemType = z.infer<typeof itemTypeSchema>;\nexport type DocumentType = z.infer<typeof documentTypeSchema>;\nexport type SyncState = z.infer<typeof syncStateSchema>;\nexport type WorkStatus = z.infer<typeof workStatusSchema>;\nexport type ExecutionMode = z.infer<typeof executionModeSchema>;\nexport type WorkKind = z.infer<typeof workKindSchema>;\nexport type GeneratedDraftStatus = z.infer<typeof generatedDraftStatusSchema>;\nexport type GeneratedBrainArtifact = z.infer<typeof generatedBrainArtifactSchema>;\nexport type BrainGenerationResult = z.infer<typeof brainGenerationResultSchema>;\nexport type SessionPolicy = z.infer<typeof sessionPolicySchema>;\nexport type SessionDecision = z.infer<typeof sessionDecisionSchema>;\nexport type ToolSessionStatus = z.infer<typeof toolSessionStatusSchema>;\nexport type SessionResumabilityScope = z.infer<typeof sessionResumabilityScopeSchema>;\nexport type RunnerToolName = z.infer<typeof runnerToolNameSchema>;\nexport type RunnerToolSelection = z.infer<typeof runnerToolSelectionSchema>;\nexport type RunnerPreferenceScope = z.infer<typeof runnerPreferenceScopeSchema>;\nexport type RunnerPreferenceSource = z.infer<typeof runnerPreferenceSourceSchema>;\nexport type RunnerPreferenceStatus = z.infer<typeof runnerPreferenceStatusSchema>;\nexport type RunnerInvocationChannel = z.infer<typeof runnerInvocationChannelSchema>;\nexport type RunnerEffectiveInvocationChannel = z.infer<typeof runnerEffectiveInvocationChannelSchema>;\nexport type RunnerToolModelPreference = z.infer<typeof runnerToolModelPreferenceSchema>;\nexport type RunnerToolCapability = z.infer<typeof runnerToolCapabilitySchema>;\nexport type WorkIsolationMode = z.infer<typeof workIsolationModeSchema>;\nexport type RepositoryLinkSource = z.infer<typeof repositoryLinkSourceSchema>;\nexport type RepositoryCloneStatus = z.infer<typeof repositoryCloneStatusSchema>;\nexport type ProjectStatus = z.infer<typeof projectStatusSchema>;\nexport type WorkspaceScopeKind = z.infer<typeof workspaceScopeKindSchema>;\nexport type PersonalWorkspaceScope = z.infer<typeof personalWorkspaceScopeSchema>;\nexport type OrganizationWorkspaceScope = z.infer<typeof organizationWorkspaceScopeSchema>;\nexport type ActiveWorkspaceScope = z.infer<typeof activeWorkspaceScopeSchema>;\nexport type OrganizationWorkspaceOnboardingStatus = z.infer<typeof organizationWorkspaceOnboardingStatusSchema>;\nexport type OrganizationWorkspaceOnboarding = z.infer<typeof organizationWorkspaceOnboardingSchema>;\nexport type AccountItem = z.infer<typeof accountItemSchema>;\nexport type UserItem = z.infer<typeof userItemSchema>;\nexport type ProjectItem = z.infer<typeof projectItemSchema>;\nexport type RepositoryLinkItem = z.infer<typeof repositoryLinkItemSchema>;\nexport type BrainDocumentItem = z.infer<typeof brainDocumentItemSchema>;\nexport type GeneratedDraftItem = z.infer<typeof generatedDraftItemSchema>;\nexport type SyncCursorItem = z.infer<typeof syncCursorItemSchema>;\nexport type SyncConflictItem = z.infer<typeof syncConflictItemSchema>;\nexport type WorkItem = z.infer<typeof workItemSchema>;\nexport type RunnerHeartbeatItem = z.infer<typeof runnerHeartbeatItemSchema>;\nexport type RunnerSettingsItem = z.infer<typeof runnerSettingsItemSchema>;\nexport type RunnerExecutionLogItem = z.infer<typeof runnerExecutionLogItemSchema>;\nexport type RunnerCredentialItem = z.infer<typeof runnerCredentialItemSchema>;\nexport type RunnerCommandKind = z.infer<typeof runnerCommandKindSchema>;\nexport type RunnerCommandStatus = z.infer<typeof runnerCommandStatusSchema>;\nexport type RunnerCommandItem = z.infer<typeof runnerCommandItemSchema>;\nexport type PlanReviewMessageRole = z.infer<typeof planReviewMessageRoleSchema>;\nexport type PlanReviewMessageIntent = z.infer<typeof planReviewMessageIntentSchema>;\nexport type PlanReviewMessageStatus = z.infer<typeof planReviewMessageStatusSchema>;\nexport type PlanReviewMessageItem = z.infer<typeof planReviewMessageItemSchema>;\nexport type AssistantMessageRole = z.infer<typeof assistantMessageRoleSchema>;\nexport type AssistantMessageStatus = z.infer<typeof assistantMessageStatusSchema>;\nexport type AssistantQuestionMode = z.infer<typeof assistantQuestionModeSchema>;\nexport type AssistantSourceBoundary = z.infer<typeof assistantSourceBoundarySchema>;\nexport type AssistantCitation = z.infer<typeof assistantCitationSchema>;\nexport type AssistantMessageItem = z.infer<typeof assistantMessageItemSchema>;\nexport type AssistantAnswerResult = z.infer<typeof assistantAnswerResultSchema>;\nexport type KnowledgeSearchScope = z.infer<typeof knowledgeSearchScopeSchema>;\nexport type KnowledgeSourceType = z.infer<typeof knowledgeSourceTypeSchema>;\nexport type KnowledgeChunkStatus = z.infer<typeof knowledgeChunkStatusSchema>;\nexport type KnowledgeEntityType = z.infer<typeof knowledgeEntityTypeSchema>;\nexport type KnowledgeRelationType = z.infer<typeof knowledgeRelationTypeSchema>;\nexport type KnowledgeIndexFreshness = z.infer<typeof knowledgeIndexFreshnessSchema>;\nexport type KnowledgeSearchChunk = z.infer<typeof knowledgeSearchChunkSchema>;\nexport type KnowledgeEntity = z.infer<typeof knowledgeEntitySchema>;\nexport type KnowledgeRelation = z.infer<typeof knowledgeRelationSchema>;\nexport type KnowledgeSearchRequest = z.infer<typeof knowledgeSearchRequestSchema>;\nexport type KnowledgeSearchResult = z.infer<typeof knowledgeSearchResultSchema>;\nexport type KnowledgeSearchResponse = z.infer<typeof knowledgeSearchResponseSchema>;\nexport type KnowledgeDiagramFormat = z.infer<typeof knowledgeDiagramFormatSchema>;\nexport type KnowledgeDiagramRequest = z.infer<typeof knowledgeDiagramRequestSchema>;\nexport type KnowledgeDiagramResult = z.infer<typeof knowledgeDiagramResultSchema>;\nexport type ImpactRiskLevel = z.infer<typeof impactRiskLevelSchema>;\nexport type ImpactReportStatus = z.infer<typeof impactReportStatusSchema>;\nexport type ImpactAffectedArea = z.infer<typeof impactAffectedAreaSchema>;\nexport type ImpactPath = z.infer<typeof impactPathSchema>;\nexport type ImpactReportItem = z.infer<typeof impactReportItemSchema>;\nexport type ImpactPreviewResult = z.infer<typeof impactPreviewResultSchema>;\nexport type ActivityEventType = z.infer<typeof activityEventTypeSchema>;\nexport type ActivityEventActor = z.infer<typeof activityEventActorSchema>;\nexport type ActivityEventStatus = z.infer<typeof activityEventStatusSchema>;\nexport type ActivityMetadata = z.infer<typeof activityMetadataSchema>;\nexport type ActivityEventItem = z.infer<typeof activityEventItemSchema>;\nexport type ActivityHandoffExport = z.infer<typeof activityHandoffExportSchema>;\nexport type ToolSessionItem = z.infer<typeof toolSessionItemSchema>;\nexport type PairingSessionItem = z.infer<typeof pairingSessionItemSchema>;", "export const AMISTIO_API_URL_ENV = \"AMISTIO_API_URL\";\nexport const OFFICIAL_AMISTIO_WEB_ORIGIN = \"https://www.amistio.com\";\n\nconst API_PATH = \"/api\";\n\nexport const officialAmistioApiUrl = normalizeAmistioApiUrl(new URL(API_PATH, OFFICIAL_AMISTIO_WEB_ORIGIN).toString());\n\nexport function normalizeAmistioApiUrl(value: string): string {\n const parsed = new URL(value);\n parsed.hash = \"\";\n parsed.search = \"\";\n if (parsed.pathname.length > 1 && parsed.pathname.endsWith(\"/\")) {\n parsed.pathname = parsed.pathname.slice(0, -1);\n }\n return parsed.toString().replace(/\\/$/, \"\");\n}\n\nexport function isOfficialAmistioApiUrl(value: string): boolean {\n try {\n return normalizeAmistioApiUrl(value) === officialAmistioApiUrl;\n } catch {\n return false;\n }\n}", "const controlPlaneRoots = new Set([\"architecture\", \"context\", \"decisions\", \"features\", \"memory\", \"plans\", \"prompts\", \"workflows\"]);\n\nexport function isControlPlaneTemplateRepoPath(repoPath: string): boolean {\n const normalized = normalizeRepoPath(repoPath);\n const segments = normalized.split(\"/\").filter(Boolean);\n const root = segments[0] === \"docs\" ? segments[1] : segments[0];\n const basename = segments[segments.length - 1]?.toLowerCase();\n return Boolean(root && controlPlaneRoots.has(root) && (basename === \"_template.md\" || basename === \"_template.mdx\"));\n}\n\nfunction normalizeRepoPath(repoPath: string): string {\n return repoPath.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\").replace(/^\\/+/, \"\");\n}", "import { z } from \"zod\";\n\nexport const repoLinkMetadataSchema = z.object({\n amistioProjectId: z.string().min(1),\n amistioAccountId: z.string().min(1),\n repositoryLinkId: z.string().min(1),\n defaultBranch: z.string().min(1).default(\"main\"),\n lastSyncedRevision: z.coerce.number().int().nonnegative().default(0)\n});\n\nexport type RepoLinkMetadata = z.infer<typeof repoLinkMetadataSchema>;\n\nexport const syncedDocumentFrontmatterSchema = z.object({\n amistioDocumentId: z.string().min(1),\n amistioDocumentType: z.string().min(1),\n amistioRevision: z.coerce.number().int().nonnegative(),\n amistioContentHash: z.string().min(1),\n status: z.string().optional()\n});\n\nexport type SyncedDocumentFrontmatter = z.infer<typeof syncedDocumentFrontmatterSchema>;\n\nexport function createProjectLinkMarkdown(metadata: RepoLinkMetadata): string {\n return [\n \"---\",\n `amistioProjectId: ${metadata.amistioProjectId}`,\n `amistioAccountId: ${metadata.amistioAccountId}`,\n `repositoryLinkId: ${metadata.repositoryLinkId}`,\n `defaultBranch: ${metadata.defaultBranch}`,\n `lastSyncedRevision: ${metadata.lastSyncedRevision}`,\n \"---\",\n \"\",\n \"# Amistio Project Link\",\n \"\",\n \"This repository is paired with an Amistio project. Credentials are stored outside the repository on each user's machine.\",\n \"\"\n ].join(\"\\n\");\n}", "export type RepositoryCloneProtocol = \"https\" | \"ssh\";\n\nexport interface ParsedRepositoryCloneUrl {\n cloneUrl: string;\n protocol: RepositoryCloneProtocol;\n host: string;\n path: string;\n repoName: string;\n normalizedKey: string;\n provider?: string;\n repoOwner?: string;\n repoFullName?: string;\n}\n\nconst scpStyleSshPattern = /^([A-Za-z0-9._-]+)@([A-Za-z0-9.-]+):(.+)$/;\n\nexport function parseRepositoryCloneUrl(input: string): ParsedRepositoryCloneUrl {\n const cloneUrl = input.trim();\n if (!cloneUrl) {\n throw new Error(\"Repository URL is required.\");\n }\n\n if (isLocalPathLike(cloneUrl)) {\n throw new Error(\"Use an HTTPS or SSH repository clone URL, not a local path.\");\n }\n\n const scpMatch = scpStyleSshPattern.exec(cloneUrl);\n if (scpMatch) {\n const host = scpMatch[2];\n const rawPath = scpMatch[3];\n if (!host || !rawPath) {\n throw new Error(\"Repository URL must include an owner and repository name.\");\n }\n return buildParsedRepositoryCloneUrl({ cloneUrl, protocol: \"ssh\", host, rawPath });\n }\n\n let url: URL;\n try {\n url = new URL(cloneUrl);\n } catch {\n throw new Error(\"Repository URL must be a valid HTTPS or SSH clone URL.\");\n }\n\n if (url.protocol === \"file:\") {\n throw new Error(\"Use an HTTPS or SSH repository clone URL, not a local path.\");\n }\n\n if (url.protocol !== \"https:\" && url.protocol !== \"ssh:\") {\n throw new Error(\"Repository URL must use HTTPS or SSH.\");\n }\n\n if (url.protocol === \"https:\" && (url.username || url.password)) {\n throw new Error(\"Repository URL must not include embedded credentials.\");\n }\n\n if (url.protocol === \"ssh:\" && url.password) {\n throw new Error(\"Repository SSH URL must not include a password.\");\n }\n\n if (url.search || url.hash) {\n throw new Error(\"Repository URL must not include query strings or fragments.\");\n }\n\n return buildParsedRepositoryCloneUrl({\n cloneUrl,\n protocol: url.protocol === \"https:\" ? \"https\" : \"ssh\",\n host: url.hostname,\n rawPath: url.pathname\n });\n}\n\nexport function repositoryCloneUrlsMatch(firstUrl: string, secondUrl: string): boolean {\n try {\n return parseRepositoryCloneUrl(firstUrl).normalizedKey === parseRepositoryCloneUrl(secondUrl).normalizedKey;\n } catch {\n return false;\n }\n}\n\nexport function redactRepositoryCloneUrl(input: string): string {\n try {\n const url = new URL(input);\n if (url.username || url.password) {\n url.username = \"redacted\";\n url.password = \"redacted\";\n return url.toString();\n }\n } catch {\n // Non-URL SSH forms do not carry password userinfo.\n }\n return input;\n}\n\nfunction buildParsedRepositoryCloneUrl({ cloneUrl, host, protocol, rawPath }: { cloneUrl: string; host: string; protocol: RepositoryCloneProtocol; rawPath: string }): ParsedRepositoryCloneUrl {\n const normalizedHost = host.trim().toLowerCase();\n if (!normalizedHost) {\n throw new Error(\"Repository URL must include a host.\");\n }\n\n const pathWithoutSlash = normalizeRepoPath(rawPath);\n const segments = pathWithoutSlash.split(\"/\").filter(Boolean);\n if (segments.length < 2) {\n throw new Error(\"Repository URL must include an owner and repository name.\");\n }\n\n const repoSegment = segments[segments.length - 1];\n const ownerSegment = segments[segments.length - 2];\n const repoName = stripGitSuffix(repoSegment ?? \"\");\n if (!repoName || !ownerSegment) {\n throw new Error(\"Repository URL must include an owner and repository name.\");\n }\n\n const normalizedSegments = [...segments.slice(0, -1), repoName].map((segment) => segment.toLowerCase());\n const provider = inferRepositoryProvider(normalizedHost);\n const repoOwner = ownerSegment;\n const repoFullName = `${repoOwner}/${repoName}`;\n\n return {\n cloneUrl,\n protocol,\n host: normalizedHost,\n path: pathWithoutSlash,\n repoName,\n normalizedKey: `${normalizedHost}/${normalizedSegments.join(\"/\")}`,\n ...(provider ? { provider } : {}),\n repoOwner,\n repoFullName\n };\n}\n\nfunction normalizeRepoPath(rawPath: string): string {\n const withoutLeadingSlash = rawPath.trim().replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n if (!withoutLeadingSlash || withoutLeadingSlash.includes(\"..\")) {\n throw new Error(\"Repository URL path is not supported.\");\n }\n return withoutLeadingSlash;\n}\n\nfunction stripGitSuffix(value: string): string {\n return value.replace(/\\.git$/i, \"\");\n}\n\nfunction inferRepositoryProvider(host: string): string | undefined {\n if (host === \"github.com\" || host.endsWith(\".github.com\")) return \"github\";\n if (host === \"gitlab.com\" || host.endsWith(\".gitlab.com\")) return \"gitlab\";\n if (host === \"bitbucket.org\" || host.endsWith(\".bitbucket.org\")) return \"bitbucket\";\n if (host.endsWith(\"dev.azure.com\") || host.endsWith(\"visualstudio.com\")) return \"azureDevOps\";\n return \"other\";\n}\n\nfunction isLocalPathLike(value: string): boolean {\n return (\n value.startsWith(\"/\") ||\n value.startsWith(\"./\") ||\n value.startsWith(\"../\") ||\n value.startsWith(\"~/\") ||\n /^[A-Za-z]:[\\\\/]/.test(value)\n );\n}", "import { createHash } from \"node:crypto\";\n\nexport type SyncDecision = \"clean\" | \"pullWeb\" | \"pushRepo\" | \"conflict\";\n\nexport interface SyncRevisionState {\n lastSyncedHash?: string;\n webHash?: string;\n repoHash?: string;\n}\n\nexport function sha256ContentHash(content: string): string {\n return createHash(\"sha256\").update(content, \"utf8\").digest(\"hex\");\n}\n\nexport function decideSyncState(state: SyncRevisionState): SyncDecision {\n const webChanged = Boolean(state.webHash && state.webHash !== state.lastSyncedHash);\n const repoChanged = Boolean(state.repoHash && state.repoHash !== state.lastSyncedHash);\n\n if (webChanged && repoChanged && state.webHash !== state.repoHash) {\n return \"conflict\";\n }\n\n if (webChanged) {\n return \"pullWeb\";\n }\n\n if (repoChanged) {\n return \"pushRepo\";\n }\n\n return \"clean\";\n}", "import type { BrainDocumentItem, RepositoryLinkItem, RunnerHeartbeatItem, WorkItem } from \"./schemas.js\";\n\nexport const projectNextActionKinds = [\n \"noProject\",\n \"linkRepository\",\n \"pairRepository\",\n \"runnerMissing\",\n \"runnerOffline\",\n \"runnerStale\",\n \"brainGenerationQueued\",\n \"brainGenerationRunning\",\n \"brainGenerationFailed\",\n \"planRevisionQueued\",\n \"planRevisionRunning\",\n \"planRevisionFailed\",\n \"generatedArtifactsReview\",\n \"generatedArtifactsPartiallyApproved\",\n \"implementationQueued\",\n \"runnerRunningWork\",\n \"workBlocked\",\n \"workFailed\",\n \"workCompleted\",\n \"idle\"\n] as const;\n\nexport type ProjectNextActionKind = (typeof projectNextActionKinds)[number];\nexport type ProjectNextActionActor = \"user\" | \"runner\" | \"system\" | \"none\";\nexport type ProjectNextActionTone = \"neutral\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface ProjectNextAction {\n kind: ProjectNextActionKind;\n actor: ProjectNextActionActor;\n tone: ProjectNextActionTone;\n title: string;\n message: string;\n detail?: string;\n count?: number;\n documentId?: string;\n repositoryLinkId?: string;\n runnerId?: string;\n updatedAt?: string;\n workItemId?: string;\n}\n\nexport interface ProjectNextActionInput {\n projectId?: string;\n projectName?: string;\n repositoryLinks: RepositoryLinkItem[];\n documents: BrainDocumentItem[];\n workItems: WorkItem[];\n runnerHeartbeats: RunnerHeartbeatItem[];\n nowMs?: number;\n}\n\nexport const nextActionRunnerHeartbeatFreshMs = 15 * 60 * 1000;\n\nexport function computeProjectNextAction(input: ProjectNextActionInput): ProjectNextAction {\n const nowMs = input.nowMs ?? Date.now();\n if (!input.projectId) {\n return {\n kind: \"noProject\",\n actor: \"user\",\n tone: \"neutral\",\n title: \"Create a project\",\n message: \"Create a project before linking a repository or starting runner work.\"\n };\n }\n\n const activeRepositoryLinks = input.repositoryLinks.filter((link) => link.status !== \"revoked\");\n const repositoryLink = activeRepositoryLinks[0];\n if (!repositoryLink) {\n return {\n kind: \"linkRepository\",\n actor: \"user\",\n tone: \"warning\",\n title: \"Link a repository\",\n message: \"Add the project repository so Amistio can pair a local runner.\"\n };\n }\n\n const pairedRepositoryLinks = activeRepositoryLinks.filter((link) => Boolean(link.repoFingerprint));\n if (!pairedRepositoryLinks.length) {\n return {\n kind: \"pairRepository\",\n actor: \"user\",\n tone: \"warning\",\n title: \"Pair the repository\",\n message: `Run the pairing command from ${repositoryLink.repoName} before queueing runner work.`,\n repositoryLinkId: repositoryLink.repositoryLinkId,\n updatedAt: repositoryLink.updatedAt\n };\n }\n\n const runningWork = latestWorkItem(input.workItems.filter((item) => item.status === \"running\"));\n if (runningWork) {\n if (runningWork.workKind === \"brainGeneration\") {\n return workAction(runningWork, \"brainGenerationRunning\", \"runner\", \"warning\", \"Generating project brain\", \"The local runner is generating draft brain artifacts for review.\");\n }\n if (runningWork.workKind === \"planRevision\") {\n return workAction(runningWork, \"planRevisionRunning\", \"runner\", \"warning\", \"Revising the plan\", \"The local runner is revising the generated plan from the conversation.\");\n }\n return workAction(runningWork, \"runnerRunningWork\", \"runner\", \"warning\", \"Runner is working\", \"The local runner has claimed approved implementation work.\");\n }\n\n const generatedReview = generatedReviewState(input.documents);\n if (generatedReview.unapproved.length > 0) {\n const partial = generatedReview.approved.length > 0;\n const title = partial ? \"Finish generated review\" : \"Review generated artifacts\";\n const message = partial\n ? `${generatedReview.unapproved.length} generated artifact${generatedReview.unapproved.length === 1 ? \"\" : \"s\"} still need approval before implementation work can queue.`\n : `${generatedReview.unapproved.length} generated artifact${generatedReview.unapproved.length === 1 ? \"\" : \"s\"} need approval in the web app before the runner can implement them.`;\n return {\n kind: partial ? \"generatedArtifactsPartiallyApproved\" : \"generatedArtifactsReview\",\n actor: \"user\",\n tone: \"warning\",\n title,\n message,\n count: generatedReview.unapproved.length,\n ...(generatedReview.unapproved[0]?.documentId ? { documentId: generatedReview.unapproved[0].documentId } : {}),\n ...(latestTimestamp(generatedReview.unapproved.map((document) => document.updatedAt)) ? { updatedAt: latestTimestamp(generatedReview.unapproved.map((document) => document.updatedAt))! } : {})\n };\n }\n\n const failedBrainGeneration = latestWorkItem(input.workItems.filter((item) => item.workKind === \"brainGeneration\" && item.status === \"failed\"));\n if (failedBrainGeneration) {\n return workAction(failedBrainGeneration, \"brainGenerationFailed\", \"user\", \"danger\", \"Brain generation failed\", failedBrainGeneration.lastStatusMessage ?? \"Retry generation after checking the runner output.\");\n }\n\n const failedPlanRevision = latestWorkItem(input.workItems.filter((item) => item.workKind === \"planRevision\" && item.status === \"failed\"));\n if (failedPlanRevision) {\n return workAction(failedPlanRevision, \"planRevisionFailed\", \"user\", \"danger\", \"Plan revision failed\", failedPlanRevision.lastStatusMessage ?? \"Review the conversation and request another revision if needed.\");\n }\n\n const blockedWork = latestWorkItem(input.workItems.filter((item) => item.status === \"blocked\" || item.status === \"changesRequested\"));\n if (blockedWork) {\n return workAction(blockedWork, \"workBlocked\", \"user\", \"danger\", \"Work is blocked\", blockedWork.lastStatusMessage ?? \"Review the blocked work item before the runner can continue.\");\n }\n\n const failedWork = latestWorkItem(input.workItems.filter((item) => item.status === \"failed\"));\n if (failedWork) {\n return workAction(failedWork, \"workFailed\", \"user\", \"danger\", \"Work failed\", failedWork.lastStatusMessage ?? \"Review the failure and retry or update the plan.\");\n }\n\n const queuedBrainGeneration = latestWorkItem(input.workItems.filter((item) => item.workKind === \"brainGeneration\" && item.status === \"approved\"));\n const queuedPlanRevision = latestWorkItem(input.workItems.filter((item) => item.workKind === \"planRevision\" && item.status === \"approved\"));\n const queuedImplementation = latestWorkItem(input.workItems.filter((item) => item.workKind !== \"brainGeneration\" && item.workKind !== \"planRevision\" && item.status === \"approved\"));\n const queuedWork = queuedBrainGeneration ?? queuedPlanRevision ?? queuedImplementation;\n const readiness = getSharedRunnerReadiness(pairedRepositoryLinks, input.runnerHeartbeats, nowMs);\n\n if (queuedWork && !readiness.ready) {\n const title = queuedWork.workKind === \"brainGeneration\" ? \"Brain generation is queued\" : queuedWork.workKind === \"planRevision\" ? \"Plan revision is queued\" : \"Implementation is queued\";\n return runnerWaitAction(readiness, title);\n }\n\n if (queuedBrainGeneration) {\n return workAction(queuedBrainGeneration, \"brainGenerationQueued\", \"runner\", \"warning\", \"Brain generation queued\", \"The local runner can claim this queued brain-generation work.\");\n }\n\n if (queuedPlanRevision) {\n return workAction(queuedPlanRevision, \"planRevisionQueued\", \"runner\", \"warning\", \"Plan revision queued\", \"The local runner can claim the requested plan revision.\");\n }\n\n if (queuedImplementation) {\n return workAction(queuedImplementation, \"implementationQueued\", \"runner\", \"warning\", \"Implementation queued\", \"The local runner can claim approved implementation work.\");\n }\n\n if (!readiness.ready) {\n return runnerWaitAction(readiness, \"Runner setup needed\");\n }\n\n const completedWork = latestWorkItem(input.workItems.filter((item) => item.status === \"completed\"));\n if (completedWork) {\n return workAction(completedWork, \"workCompleted\", \"none\", \"success\", \"Work completed\", completedWork.lastStatusMessage ?? \"The latest runner work is complete.\");\n }\n\n return {\n kind: \"idle\",\n actor: \"user\",\n tone: \"success\",\n title: \"Ready for the next task\",\n message: \"The repository and runner are ready for a new project-brain request.\",\n ...(readiness.repositoryLink?.repositoryLinkId ? { repositoryLinkId: readiness.repositoryLink.repositoryLinkId } : {}),\n ...(readiness.heartbeat?.runnerId ? { runnerId: readiness.heartbeat.runnerId } : {}),\n ...(readiness.heartbeat?.lastSeenAt ? { updatedAt: readiness.heartbeat.lastSeenAt } : {})\n };\n}\n\nexport function formatProjectNextAction(action: ProjectNextAction): string {\n return `${action.title}: ${action.message}`;\n}\n\ninterface SharedRunnerReadiness {\n ready: boolean;\n reason: \"ready\" | \"runnerMissing\" | \"runnerOffline\" | \"runnerStale\";\n repositoryLink?: RepositoryLinkItem;\n heartbeat?: RunnerHeartbeatItem;\n}\n\nfunction runnerWaitAction(readiness: SharedRunnerReadiness, fallbackTitle: string): ProjectNextAction {\n const repositoryName = readiness.repositoryLink?.repoName ?? \"the paired repository\";\n if (readiness.reason === \"runnerOffline\") {\n return {\n kind: \"runnerOffline\",\n actor: \"user\",\n tone: \"danger\",\n title: \"Restart the runner\",\n message: `The runner for ${repositoryName} is offline. Start amistio run --watch from the paired checkout.`,\n ...(readiness.repositoryLink?.repositoryLinkId ? { repositoryLinkId: readiness.repositoryLink.repositoryLinkId } : {}),\n ...(readiness.heartbeat?.runnerId ? { runnerId: readiness.heartbeat.runnerId } : {}),\n ...(readiness.heartbeat?.lastSeenAt ? { updatedAt: readiness.heartbeat.lastSeenAt } : {})\n };\n }\n if (readiness.reason === \"runnerStale\") {\n return {\n kind: \"runnerStale\",\n actor: \"user\",\n tone: \"warning\",\n title: \"Refresh the runner\",\n message: `The runner for ${repositoryName} has not checked in recently. Restart amistio run --watch from the paired checkout.`,\n ...(readiness.repositoryLink?.repositoryLinkId ? { repositoryLinkId: readiness.repositoryLink.repositoryLinkId } : {}),\n ...(readiness.heartbeat?.runnerId ? { runnerId: readiness.heartbeat.runnerId } : {}),\n ...(readiness.heartbeat?.lastSeenAt ? { updatedAt: readiness.heartbeat.lastSeenAt } : {})\n };\n }\n\n return {\n kind: \"runnerMissing\",\n actor: \"user\",\n tone: \"warning\",\n title: fallbackTitle,\n message: `Start amistio run --watch from ${repositoryName} so the local runner can claim work.`,\n ...(readiness.repositoryLink?.repositoryLinkId ? { repositoryLinkId: readiness.repositoryLink.repositoryLinkId } : {})\n };\n}\n\nfunction getSharedRunnerReadiness(repositoryLinks: RepositoryLinkItem[], runnerHeartbeats: RunnerHeartbeatItem[], nowMs: number): SharedRunnerReadiness {\n const repositoryLinkIds = new Set(repositoryLinks.map((link) => link.repositoryLinkId));\n const latestHeartbeat = runnerHeartbeats\n .filter((heartbeat) => repositoryLinkIds.has(heartbeat.repositoryLinkId) && heartbeat.status !== \"removed\")\n .sort((first, second) => heartbeatTime(second) - heartbeatTime(first))[0];\n const repositoryLink = latestHeartbeat\n ? repositoryLinks.find((link) => link.repositoryLinkId === latestHeartbeat.repositoryLinkId) ?? repositoryLinks[0]\n : repositoryLinks[0];\n\n if (!latestHeartbeat) {\n return { ready: false, reason: \"runnerMissing\", ...(repositoryLink ? { repositoryLink } : {}) };\n }\n if (latestHeartbeat.status === \"offline\") {\n return { ready: false, reason: \"runnerOffline\", ...(repositoryLink ? { repositoryLink } : {}), heartbeat: latestHeartbeat };\n }\n if (!isFreshHeartbeat(latestHeartbeat, nowMs)) {\n return { ready: false, reason: \"runnerStale\", ...(repositoryLink ? { repositoryLink } : {}), heartbeat: latestHeartbeat };\n }\n\n return { ready: true, reason: \"ready\", ...(repositoryLink ? { repositoryLink } : {}), heartbeat: latestHeartbeat };\n}\n\nfunction generatedReviewState(documents: BrainDocumentItem[]) {\n const generated = documents.filter(isGeneratedDocument);\n return {\n approved: generated.filter((document) => document.status === \"approved\"),\n unapproved: generated.filter((document) => document.status !== \"approved\" && document.status !== \"rejected\" && document.syncState !== \"archived\")\n };\n}\n\nfunction isGeneratedDocument(document: BrainDocumentItem): boolean {\n const generatedDraftId = document.frontmatter.generatedDraftId;\n return typeof generatedDraftId === \"string\" && generatedDraftId.length > 0;\n}\n\nfunction workAction(workItem: WorkItem, kind: ProjectNextActionKind, actor: ProjectNextActionActor, tone: ProjectNextActionTone, title: string, message: string): ProjectNextAction {\n return {\n kind,\n actor,\n tone,\n title,\n message,\n workItemId: workItem.workItemId,\n ...(workItem.claimedByRunnerId ? { runnerId: workItem.claimedByRunnerId } : {}),\n updatedAt: workItem.lastStatusAt\n };\n}\n\nfunction latestWorkItem(workItems: WorkItem[]): WorkItem | undefined {\n return [...workItems].sort((first, second) => Date.parse(second.updatedAt) - Date.parse(first.updatedAt))[0];\n}\n\nfunction latestTimestamp(values: string[]): string | undefined {\n return values.sort((first, second) => Date.parse(second) - Date.parse(first))[0];\n}\n\nfunction heartbeatTime(heartbeat: RunnerHeartbeatItem): number {\n const timestamp = Date.parse(heartbeat.lastSeenAt);\n return Number.isNaN(timestamp) ? 0 : timestamp;\n}\n\nfunction isFreshHeartbeat(heartbeat: RunnerHeartbeatItem, nowMs: number): boolean {\n const lastSeenMs = heartbeatTime(heartbeat);\n return lastSeenMs > 0 && nowMs - lastSeenMs <= nextActionRunnerHeartbeatFreshMs;\n}\n", "import { execFile } from \"node:child_process\";\nimport { mkdir, readdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { repositoryCloneUrlsMatch } from \"@amistio/shared\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface BootstrapCheckoutResult {\n status: \"cloned\" | \"validated\";\n targetDir: string;\n originUrl?: string;\n}\n\nexport function buildGitCloneArgs(repoUrl: string, targetDir: string): string[] {\n return [\"clone\", repoUrl, targetDir];\n}\n\nexport async function cloneOrValidateRepository({ repoUrl, targetDir }: { repoUrl: string; targetDir: string }): Promise<BootstrapCheckoutResult> {\n const resolvedTarget = path.resolve(targetDir);\n const targetStat = await stat(resolvedTarget).catch((error: unknown) => {\n if (isNotFoundError(error)) return undefined;\n throw error;\n });\n\n if (!targetStat) {\n await mkdir(path.dirname(resolvedTarget), { recursive: true });\n await runGit(buildGitCloneArgs(repoUrl, resolvedTarget), \"clone\");\n return { status: \"cloned\", targetDir: resolvedTarget };\n }\n\n if (!targetStat.isDirectory()) {\n throw new Error(\"Bootstrap target exists and is not a directory.\");\n }\n\n if (await isGitCheckout(resolvedTarget)) {\n const originUrl = await runGit([\"-C\", resolvedTarget, \"remote\", \"get-url\", \"origin\"], \"remote\");\n if (!repositoryCloneUrlsMatch(repoUrl, originUrl)) {\n throw new Error(\"Bootstrap target is a Git checkout for a different repository.\");\n }\n return { status: \"validated\", targetDir: resolvedTarget, originUrl };\n }\n\n const entries = await readdir(resolvedTarget);\n if (entries.length > 0) {\n throw new Error(\"Bootstrap target exists, is not empty, and is not the linked repository checkout.\");\n }\n\n await runGit(buildGitCloneArgs(repoUrl, resolvedTarget), \"clone\");\n return { status: \"cloned\", targetDir: resolvedTarget };\n}\n\nasync function isGitCheckout(targetDir: string): Promise<boolean> {\n try {\n const result = await runGit([\"-C\", targetDir, \"rev-parse\", \"--is-inside-work-tree\"], \"rev-parse\");\n return result.trim() === \"true\";\n } catch {\n return false;\n }\n}\n\nasync function runGit(args: string[], operation: \"clone\" | \"remote\" | \"rev-parse\"): Promise<string> {\n try {\n const { stdout } = await execFileAsync(\"git\", args, { maxBuffer: 1024 * 1024 });\n return stdout.trim();\n } catch {\n if (operation === \"clone\") {\n throw new Error(\"git clone failed. Confirm local Git credentials can access the repository.\");\n }\n if (operation === \"remote\") {\n throw new Error(\"Could not read the target checkout origin remote.\");\n }\n throw new Error(\"Could not inspect the target Git checkout.\");\n }\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n return Boolean(error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\");\n}", "import { chmod, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\ninterface StoredCredentialFile {\n credentials: Record<string, string>;\n}\n\nexport class LocalCredentialStore {\n constructor(private readonly filePath = path.join(os.homedir(), \".config\", \"amistio\", \"credentials.json\")) { }\n\n async set(key: string, value: string): Promise<void> {\n const data = await this.read();\n data.credentials[key] = value;\n await mkdir(path.dirname(this.filePath), { recursive: true });\n await writeFile(this.filePath, JSON.stringify(data, null, 2), { encoding: \"utf8\", mode: 0o600 });\n await chmod(this.filePath, 0o600);\n }\n\n async get(key: string): Promise<string | undefined> {\n const data = await this.read();\n return data.credentials[key];\n }\n\n async delete(key: string): Promise<void> {\n const data = await this.read();\n if (!(key in data.credentials)) {\n return;\n }\n delete data.credentials[key];\n await mkdir(path.dirname(this.filePath), { recursive: true });\n await writeFile(this.filePath, JSON.stringify(data, null, 2), { encoding: \"utf8\", mode: 0o600 });\n await chmod(this.filePath, 0o600);\n }\n\n private async read(): Promise<StoredCredentialFile> {\n try {\n return JSON.parse(await readFile(this.filePath, \"utf8\")) as StoredCredentialFile;\n } catch {\n return { credentials: {} };\n }\n }\n}\n\nexport function credentialKey(accountId: string, projectId: string, repositoryLinkId: string): string {\n return `${accountId}:${projectId}:${repositoryLinkId}`;\n}", "import { mkdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createProjectLinkMarkdown, repoLinkMetadataSchema, type RepoLinkMetadata } from \"@amistio/shared\";\n\nexport const controlPlaneFolders = [\n path.join(\"docs\", \"architecture\"),\n path.join(\"docs\", \"context\"),\n path.join(\"docs\", \"decisions\"),\n path.join(\"docs\", \"features\"),\n path.join(\"docs\", \"memory\"),\n path.join(\"docs\", \"plans\"),\n path.join(\"docs\", \"prompts\", \"shared\"),\n path.join(\"docs\", \"workflows\")\n] as const;\n\nexport async function initControlPlane(rootDir: string): Promise<string[]> {\n const created: string[] = [];\n\n for (const folder of controlPlaneFolders) {\n const fullPath = path.join(rootDir, folder);\n if (!(await exists(fullPath))) {\n await mkdir(fullPath, { recursive: true });\n created.push(folder);\n }\n }\n\n await writeIfMissing(\n path.join(rootDir, \"AGENTS.md\"),\n \"# Agents\\n\\nThe docs/ control-plane folders are the project brain. Keep docs/architecture, docs/context, docs/decisions, docs/features, docs/memory, docs/plans, docs/prompts, and docs/workflows in sync with product intent.\\n\"\n );\n await writeIfMissing(path.join(rootDir, \"docs\", \"context\", \"product.md\"), \"# Product Context\\n\\nDescribe the product direction here.\\n\");\n await writeIfMissing(path.join(rootDir, \"docs\", \"architecture\", \"overview.md\"), \"# Architecture Overview\\n\\nDescribe the system shape here.\\n\");\n\n return created;\n}\n\nexport async function inspectControlPlane(rootDir: string): Promise<{ present: string[]; missing: string[] }> {\n const present: string[] = [];\n const missing: string[] = [];\n\n for (const folder of controlPlaneFolders) {\n if (await exists(path.join(rootDir, folder))) {\n present.push(folder);\n } else {\n missing.push(folder);\n }\n }\n\n return { present, missing };\n}\n\nexport async function writeProjectLink(rootDir: string, metadata: RepoLinkMetadata): Promise<string> {\n const contextDir = path.join(rootDir, \"docs\", \"context\");\n await mkdir(contextDir, { recursive: true });\n const filePath = path.join(contextDir, \"amistio-project.md\");\n await writeFile(filePath, createProjectLinkMarkdown(metadata), \"utf8\");\n return filePath;\n}\n\nexport async function readProjectLink(rootDir: string): Promise<RepoLinkMetadata | undefined> {\n const candidatePaths = [\n path.join(rootDir, \"docs\", \"context\", \"amistio-project.md\"),\n path.join(rootDir, \"context\", \"amistio-project.md\")\n ];\n\n for (const filePath of candidatePaths) {\n if (!(await exists(filePath))) {\n continue;\n }\n\n const content = await readFile(filePath, \"utf8\");\n const frontmatter = parseFrontmatter(content);\n return repoLinkMetadataSchema.parse(frontmatter);\n }\n\n return undefined;\n}\n\nexport function parseFrontmatter(content: string): Record<string, string> {\n if (!content.startsWith(\"---\\n\")) {\n return {};\n }\n\n const end = content.indexOf(\"\\n---\", 4);\n if (end === -1) {\n return {};\n }\n\n const lines = content.slice(4, end).split(\"\\n\");\n return Object.fromEntries(\n lines\n .map((line) => {\n const separator = line.indexOf(\":\");\n if (separator === -1) {\n return undefined;\n }\n return [line.slice(0, separator).trim(), line.slice(separator + 1).trim()] as const;\n })\n .filter((entry): entry is readonly [string, string] => Boolean(entry))\n );\n}\n\nasync function writeIfMissing(filePath: string, content: string): Promise<void> {\n if (await exists(filePath)) {\n return;\n }\n await writeFile(filePath, content, \"utf8\");\n}\n\nasync function exists(filePath: string): Promise<boolean> {\n try {\n await stat(filePath);\n return true;\n } catch {\n return false;\n }\n}", "import {\n activityEventItemSchema,\n assistantMessageItemSchema,\n brainDocumentItemSchema,\n generatedDraftItemSchema,\n impactReportItemSchema,\n planReviewMessageItemSchema,\n repositoryLinkItemSchema,\n runnerInvocationChannelSchema,\n runnerPreferenceSourceSchema,\n runnerCommandItemSchema,\n runnerExecutionLogItemSchema,\n runnerHeartbeatItemSchema,\n runnerSettingsItemSchema,\n runnerToolSelectionSchema,\n type BrainDocumentItem,\n type ActivityEventItem,\n type AssistantAnswerResult,\n type AssistantMessageItem,\n type GeneratedBrainArtifact,\n type GeneratedDraftItem,\n type ImpactPreviewResult,\n type ImpactReportItem,\n type RepositoryLinkItem,\n type RunnerCommandItem,\n type RunnerExecutionLogItem,\n sessionDecisionSchema,\n sessionPolicySchema,\n sessionResumabilityScopeSchema,\n toolSessionItemSchema,\n toolSessionStatusSchema,\n workIsolationModeSchema,\n workItemSchema,\n type ExecutionMode,\n type RunnerHeartbeatItem,\n type PlanReviewMessageItem,\n type RunnerPreferenceSource,\n type RunnerPreferenceStatus,\n type RunnerCommandStatus,\n type RunnerEffectiveInvocationChannel,\n type RunnerSettingsItem,\n type RunnerInvocationChannel,\n type RunnerToolCapability,\n type RunnerToolModelPreference,\n type RunnerToolName,\n type RunnerToolSelection,\n type SessionDecision,\n type SessionPolicy,\n type SessionResumabilityScope,\n type ToolSessionItem,\n type WorkItem,\n type WorkStatus\n} from \"@amistio/shared\";\nimport { z } from \"zod\";\n\nexport interface ApiClientOptions {\n apiUrl: string;\n accountId?: string;\n token?: string;\n}\n\nexport interface ImportPairingInput {\n pairingCode: string;\n repoName: string;\n repoFingerprint: string;\n defaultBranch: string;\n cloneUrl?: string;\n provider?: string;\n repoOwner?: string;\n repoFullName?: string;\n}\n\nexport interface ImportPairingResponse {\n accountId: string;\n projectId: string;\n repositoryLink: RepositoryLinkItem;\n repositoryLinkAction: \"created\" | \"reused\";\n token: string;\n}\n\nexport interface WorkStatusTelemetry {\n executionMode?: ExecutionMode;\n message?: string;\n tool?: string;\n model?: string;\n durationMs?: number;\n costUsd?: number;\n tokensIn?: number;\n tokensOut?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n pairedByUserId?: string;\n machineId?: string;\n claimLeaseId?: string;\n controllingAdrId?: string;\n implementationScopeId?: string;\n executionBranch?: string;\n executionWorktreeKey?: string;\n isolationMode?: WorkItem[\"isolationMode\"];\n repositoryLockId?: string;\n baseRevision?: string;\n baseContentHash?: string;\n blockerReason?: string;\n error?: string;\n}\n\nexport type BrainGenerationResultMutation =\n | {\n status: \"completed\";\n runnerId: string;\n idempotencyKey: string;\n artifacts: GeneratedBrainArtifact[];\n tool?: string;\n durationMs?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n message?: string;\n }\n | {\n status: \"failed\";\n runnerId: string;\n idempotencyKey: string;\n tool?: string;\n durationMs?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n message?: string;\n error?: string;\n };\n\nexport type AssistantResultMutation =\n | {\n status: \"completed\";\n runnerId: string;\n idempotencyKey: string;\n answer: string;\n sourceBoundary?: AssistantAnswerResult[\"sourceBoundary\"];\n citations?: AssistantAnswerResult[\"citations\"];\n tool?: string;\n durationMs?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n message?: string;\n }\n | {\n status: \"failed\";\n runnerId: string;\n idempotencyKey: string;\n tool?: string;\n durationMs?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n message?: string;\n error?: string;\n };\n\nexport type ImpactPreviewResultMutation =\n | {\n status: \"completed\";\n runnerId: string;\n idempotencyKey: string;\n report: ImpactPreviewResult;\n tool?: string;\n durationMs?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n message?: string;\n }\n | {\n status: \"failed\";\n runnerId: string;\n idempotencyKey: string;\n tool?: string;\n durationMs?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n message?: string;\n error?: string;\n };\n\nexport interface ToolSessionMutation {\n toolSessionId?: string;\n repositoryLinkId?: string;\n tool?: string;\n provider?: string;\n model?: string;\n resumabilityScope?: SessionResumabilityScope;\n title?: string;\n summary?: string;\n tags?: string[];\n relatedDocumentIds?: string[];\n status?: ToolSessionItem[\"status\"];\n createdByUserId?: string;\n runnerId?: string;\n lastWorkItemId?: string;\n messageCount?: number;\n estimatedInputTokens?: number;\n estimatedOutputTokens?: number;\n costUsd?: number;\n sessionGroupKey?: string;\n reusePolicy?: SessionPolicy;\n closedReason?: string;\n machineId?: string;\n implementationScopeId?: string;\n executionWorktreeKey?: string;\n isolationMode?: ToolSessionItem[\"isolationMode\"];\n}\n\nexport interface ActivityEventMutation {\n eventType: \"runnerMilestone\";\n status: \"running\" | \"completed\" | \"failed\" | \"blocked\" | \"warning\" | \"info\" | \"queued\";\n summary: string;\n idempotencyKey: string;\n metadata?: Record<string, unknown>;\n relatedWorkItemId?: string;\n relatedDocumentId?: string;\n generatedDraftId?: string;\n runnerId?: string;\n repositoryLinkId?: string;\n}\n\nexport type RunnerHeartbeatStatus = \"online\" | \"offline\" | \"running\" | \"blocked\";\n\nexport type RunnerCommandUpdateStatus = Extract<RunnerCommandStatus, \"acknowledged\" | \"running\" | \"completed\" | \"failed\">;\n\nexport interface RunnerHeartbeatMetadata {\n version?: string;\n mode?: \"foreground\" | \"background\";\n hostname?: string;\n runnerName?: string;\n machineId?: string;\n supportsBranchIsolation?: boolean;\n supportsGitWorktreeIsolation?: boolean;\n currentWorkItemId?: string;\n currentImplementationScopeId?: string;\n currentWorktreeKey?: string;\n currentBranch?: string;\n capabilities?: RunnerToolCapability[];\n requestedTool?: RunnerToolSelection;\n requestedInvocationChannel?: RunnerInvocationChannel;\n effectiveTool?: RunnerToolName | \"custom\";\n effectiveInvocationChannel?: RunnerEffectiveInvocationChannel;\n effectiveModel?: string;\n preferenceSource?: RunnerPreferenceSource;\n preferenceStatus?: RunnerPreferenceStatus;\n preferenceMessage?: string;\n}\n\nexport interface RunnerLogMutation {\n runnerId: string;\n repositoryLinkId: string;\n status: RunnerExecutionLogItem[\"status\"];\n message?: string;\n error?: string;\n workItemId?: string;\n workTitle?: string;\n workKind?: RunnerExecutionLogItem[\"workKind\"];\n tool?: string;\n model?: string;\n durationMs?: number;\n machineId?: string;\n}\n\nexport interface RunnerPreferencesResponse {\n account?: RunnerSettingsItem;\n project?: RunnerSettingsItem;\n effective: RunnerToolModelPreference & { tool: RunnerToolSelection; invocationChannel: RunnerInvocationChannel; source: RunnerPreferenceSource };\n}\n\nexport class ApiClient {\n constructor(private readonly options: ApiClientOptions) { }\n\n async createPairingSession(projectId: string): Promise<{ pairingCode: string; expiresAt: string }> {\n return this.request(\n \"pairing-sessions\",\n z.object({ pairingCode: z.string(), expiresAt: z.string() }),\n {\n method: \"POST\",\n body: JSON.stringify({ projectId })\n }\n );\n }\n\n async consumePairingSession(input: { projectId: string; pairingCode: string; repositoryLinkId: string; repoName: string; repoFingerprint: string; defaultBranch: string }): Promise<{ repositoryLink: RepositoryLinkItem; token: string }> {\n return this.request(\n \"pairing-sessions\",\n z.object({ repositoryLink: repositoryLinkItemSchema, token: z.string().min(1) }),\n {\n method: \"PATCH\",\n body: JSON.stringify(input)\n }\n );\n }\n\n async importPairingSession(input: ImportPairingInput): Promise<ImportPairingResponse> {\n return this.request(\n \"pairing-sessions\",\n z.object({\n accountId: z.string().min(1),\n projectId: z.string().min(1),\n repositoryLink: repositoryLinkItemSchema,\n repositoryLinkAction: z.enum([\"created\", \"reused\"]),\n token: z.string().min(1)\n }),\n {\n method: \"PATCH\",\n body: JSON.stringify(input)\n }\n );\n }\n\n async claimWork(projectId: string, runnerId: string, repositoryLinkId: string, leaseSeconds = 300, metadata: Pick<RunnerHeartbeatMetadata, \"machineId\" | \"supportsBranchIsolation\" | \"supportsGitWorktreeIsolation\"> = {}): Promise<{ workItem: WorkItem | undefined }> {\n return this.request(\n `/projects/${projectId}/work-items/claim`,\n z.object({ workItem: workItemSchema.optional() }).transform(({ workItem }) => ({ workItem })),\n {\n method: \"POST\",\n body: JSON.stringify({ runnerId, repositoryLinkId, leaseSeconds, ...metadata })\n }\n );\n }\n\n async listWorkItems(projectId: string): Promise<{ workItems: WorkItem[] }> {\n return this.request(\n `/projects/${projectId}/work-items`,\n z.object({ workItems: z.array(workItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async listBrainDocuments(projectId: string): Promise<{ documents: BrainDocumentItem[] }> {\n return this.request(\n `/projects/${projectId}/brain-documents`,\n z.object({ documents: z.array(brainDocumentItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async listPlanReviewMessages(projectId: string, documentId?: string): Promise<{ messages: PlanReviewMessageItem[] }> {\n const suffix = documentId ? `?documentId=${encodeURIComponent(documentId)}` : \"\";\n return this.request(\n `/projects/${projectId}/plan-review-messages${suffix}`,\n z.object({ messages: z.array(planReviewMessageItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async listAssistantMessages(projectId: string): Promise<{ messages: AssistantMessageItem[] }> {\n return this.request(\n `/projects/${projectId}/assistant-messages`,\n z.object({ messages: z.array(assistantMessageItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async listImpactReports(projectId: string, generatedDraftId?: string): Promise<{ reports: ImpactReportItem[] }> {\n const query = generatedDraftId ? `?generatedDraftId=${encodeURIComponent(generatedDraftId)}` : \"\";\n return this.request(\n `/projects/${projectId}/impact-reports${query}`,\n z.object({ reports: z.array(impactReportItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async pushBrainDocuments(projectId: string, documents: BrainDocumentItem[]): Promise<{ documents: BrainDocumentItem[] }> {\n return this.request(\n `/projects/${projectId}/brain-documents`,\n z.object({ documents: z.array(brainDocumentItemSchema) }),\n {\n method: \"POST\",\n body: JSON.stringify({ documents })\n }\n );\n }\n\n async listRunners(projectId: string): Promise<{ runners: RunnerHeartbeatItem[] }> {\n return this.request(\n `/projects/${projectId}/runners`,\n z.object({ runners: z.array(runnerHeartbeatItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async listRunnerCommands(projectId: string, runnerId: string, repositoryLinkId: string): Promise<{ commands: RunnerCommandItem[] }> {\n return this.request(\n `/projects/${projectId}/runner-commands?runnerId=${encodeURIComponent(runnerId)}&repositoryLinkId=${encodeURIComponent(repositoryLinkId)}`,\n z.object({ commands: z.array(runnerCommandItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async updateRunnerCommand(projectId: string, commandId: string, input: { runnerId: string; repositoryLinkId: string; status: RunnerCommandUpdateStatus; idempotencyKey: string; message?: string; error?: string }): Promise<{ command: RunnerCommandItem }> {\n return this.request(\n `/projects/${projectId}/runner-commands/${commandId}`,\n z.object({ command: runnerCommandItemSchema }),\n {\n method: \"PATCH\",\n body: JSON.stringify(input)\n }\n );\n }\n\n async getRunnerPreferences(projectId: string): Promise<RunnerPreferencesResponse> {\n const response = await this.request(\n `/projects/${projectId}/runner-preferences`,\n z.object({\n account: runnerSettingsItemSchema.optional(),\n project: runnerSettingsItemSchema.optional(),\n effective: z.object({\n tool: runnerToolSelectionSchema,\n invocationChannel: runnerInvocationChannelSchema,\n model: z.string().optional(),\n source: runnerPreferenceSourceSchema\n })\n }),\n { method: \"GET\" }\n );\n return {\n ...(response.account ? { account: response.account } : {}),\n ...(response.project ? { project: response.project } : {}),\n effective: response.effective\n };\n }\n\n async sendRunnerHeartbeat(projectId: string, runnerId: string, repositoryLinkId: string, status: RunnerHeartbeatStatus, metadata?: string | RunnerHeartbeatMetadata): Promise<{ runner: RunnerHeartbeatItem }> {\n const heartbeatMetadata = typeof metadata === \"string\" ? { version: metadata } : metadata ?? {};\n return this.request(\n `/projects/${projectId}/runners`,\n z.object({ runner: runnerHeartbeatItemSchema }),\n {\n method: \"POST\",\n body: JSON.stringify({ runnerId, repositoryLinkId, status, ...heartbeatMetadata, lastSeenAt: new Date().toISOString() })\n }\n );\n }\n\n async recordRunnerLog(projectId: string, input: RunnerLogMutation): Promise<{ runnerLog: RunnerExecutionLogItem }> {\n return this.request(\n `/projects/${projectId}/runner-logs`,\n z.object({ runnerLog: runnerExecutionLogItemSchema }),\n {\n method: \"POST\",\n body: JSON.stringify(input)\n }\n );\n }\n\n async listToolSessions(projectId: string): Promise<{ toolSessions: ToolSessionItem[] }> {\n return this.request(\n `/projects/${projectId}/tool-sessions`,\n z.object({ toolSessions: z.array(toolSessionItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async createToolSession(projectId: string, session: Required<Pick<ToolSessionMutation, \"tool\" | \"title\">> & ToolSessionMutation): Promise<{ toolSession: ToolSessionItem }> {\n return this.request(\n `/projects/${projectId}/tool-sessions`,\n z.object({ toolSession: toolSessionItemSchema }),\n {\n method: \"POST\",\n body: JSON.stringify(session)\n }\n );\n }\n\n async updateToolSession(projectId: string, toolSessionId: string, session: ToolSessionMutation): Promise<{ toolSession: ToolSessionItem }> {\n return this.request(\n `/projects/${projectId}/tool-sessions/${toolSessionId}`,\n z.object({ toolSession: toolSessionItemSchema }),\n {\n method: \"PATCH\",\n body: JSON.stringify(session)\n }\n );\n }\n\n async recordActivityEvent(projectId: string, event: ActivityEventMutation): Promise<{ event: ActivityEventItem }> {\n return this.request(\n `/projects/${projectId}/activity-events`,\n z.object({ event: activityEventItemSchema }),\n {\n method: \"POST\",\n body: JSON.stringify(event)\n }\n );\n }\n\n async updateWorkStatus(projectId: string, workItemId: string, status: WorkStatus, idempotencyKey: string, runnerId?: string, telemetry: WorkStatusTelemetry = {}): Promise<{ workItem: WorkItem }> {\n return this.request(\n `/projects/${projectId}/work-items/${workItemId}/status`,\n z.object({ workItem: workItemSchema }),\n {\n method: \"PATCH\",\n body: JSON.stringify({ status, idempotencyKey, ...(runnerId ? { runnerId } : {}), ...telemetry })\n }\n );\n }\n\n async submitBrainGenerationResult(projectId: string, workItemId: string, result: BrainGenerationResultMutation): Promise<{ draft: GeneratedDraftItem; documents: BrainDocumentItem[]; workItem: WorkItem }> {\n return this.request(\n `/projects/${projectId}/work-items/${workItemId}/generation-result`,\n z.object({ draft: generatedDraftItemSchema, documents: z.array(brainDocumentItemSchema), workItem: workItemSchema }),\n {\n method: \"POST\",\n body: JSON.stringify(result)\n }\n );\n }\n\n async submitAssistantResult(projectId: string, workItemId: string, result: AssistantResultMutation): Promise<{ message: AssistantMessageItem; answer?: AssistantMessageItem | undefined; workItem: WorkItem }> {\n return this.request(\n `/projects/${projectId}/work-items/${workItemId}/assistant-result`,\n z.object({ message: assistantMessageItemSchema, answer: assistantMessageItemSchema.optional(), workItem: workItemSchema }),\n {\n method: \"POST\",\n body: JSON.stringify(result)\n }\n );\n }\n\n async submitImpactPreviewResult(projectId: string, workItemId: string, result: ImpactPreviewResultMutation): Promise<{ report: ImpactReportItem; workItem: WorkItem; implementationWorkItem?: WorkItem | undefined }> {\n return this.request(\n `/projects/${projectId}/work-items/${workItemId}/impact-result`,\n z.object({ report: impactReportItemSchema, workItem: workItemSchema, implementationWorkItem: workItemSchema.optional() }),\n {\n method: \"POST\",\n body: JSON.stringify(result)\n }\n );\n }\n\n private async request<T>(urlPath: string, schema: z.ZodSchema<T>, init: RequestInit): Promise<T> {\n const response = await fetch(resolveApiUrl(this.options.apiUrl, urlPath), {\n ...init,\n headers: {\n \"content-type\": \"application/json\",\n ...(this.options.accountId ? { \"x-amistio-account-id\": this.options.accountId } : {}),\n ...(this.options.token ? { authorization: `Bearer ${this.options.token}` } : {})\n }\n });\n\n if (!response.ok) {\n const detail = await response.text().catch(() => \"\");\n throw new Error(`Amistio API request failed: ${response.status} ${response.statusText}${detail ? ` - ${detail}` : \"\"}`);\n }\n\n return schema.parse(await response.json());\n }\n}\n\nexport const toolSessionMutationSchema = z.object({\n toolSessionId: z.string().min(1).optional(),\n repositoryLinkId: z.string().min(1).optional(),\n tool: z.string().min(1).optional(),\n provider: z.string().min(1).optional(),\n model: z.string().min(1).optional(),\n resumabilityScope: sessionResumabilityScopeSchema.optional(),\n title: z.string().min(1).optional(),\n summary: z.string().optional(),\n tags: z.array(z.string()).optional(),\n relatedDocumentIds: z.array(z.string()).optional(),\n status: toolSessionStatusSchema.optional(),\n createdByUserId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional(),\n lastWorkItemId: z.string().min(1).optional(),\n messageCount: z.number().int().nonnegative().optional(),\n estimatedInputTokens: z.number().int().nonnegative().optional(),\n estimatedOutputTokens: z.number().int().nonnegative().optional(),\n costUsd: z.number().nonnegative().optional(),\n sessionGroupKey: z.string().min(1).optional(),\n reusePolicy: sessionPolicySchema.optional(),\n sessionDecision: sessionDecisionSchema.optional(),\n closedReason: z.string().optional(),\n machineId: z.string().min(1).optional(),\n implementationScopeId: z.string().min(1).optional(),\n executionWorktreeKey: z.string().min(1).optional(),\n isolationMode: workIsolationModeSchema.optional()\n});\n\nfunction resolveApiUrl(apiUrl: string, urlPath: string): URL {\n const base = apiUrl.endsWith(\"/\") ? apiUrl.slice(0, -1) : apiUrl;\n const path = urlPath.startsWith(\"/\") ? urlPath : `/${urlPath}`;\n return new URL(`${base}${path}`);\n}", "import { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { inspectControlPlane } from \"./control-plane.js\";\n\nexport interface OrchestrationPromptOptions {\n rootDir: string;\n goal: string;\n}\n\nexport async function createOrchestrationPrompt(options: OrchestrationPromptOptions): Promise<string> {\n const controlPlane = await inspectControlPlane(options.rootDir);\n return [\n \"# Amistio Orchestration Task\",\n \"\",\n \"You are running locally through the Amistio CLI inside the user's repository.\",\n \"Your job is to keep future agents on the same track by updating the Amistio control plane, not by rewriting the project from scratch.\",\n \"\",\n \"## Goal\",\n \"\",\n options.goal,\n \"\",\n \"## Orchestrator Principle\",\n \"\",\n \"The docs/ control-plane files are the project brain. They exist so agentic coding sessions can continue from established context, decisions, memory, plans, workflows, and prompts instead of drifting into a fresh interpretation each time.\",\n \"\",\n \"## Repository Rules\",\n \"\",\n \"- Read AGENTS.md first when it exists.\",\n \"- Read existing docs/architecture, docs/context, docs/decisions, docs/features, docs/memory, docs/plans, docs/prompts, and docs/workflows files before proposing changes.\",\n \"- Preserve existing intent. Add the next useful orchestration layer instead of replacing old content wholesale.\",\n \"- Prefer small additive edits, dated notes, explicit decisions, focused plans, and executable prompts.\",\n \"- Do not modify product source code unless the user's goal explicitly asks for implementation.\",\n \"- Do not create a repo-local .amistio folder.\",\n \"- Do not write access tokens, API keys, refresh tokens, local filesystem secrets, or machine-specific credentials into the repository.\",\n \"- Do not commit changes.\",\n \"\",\n \"## Control-Plane Areas\",\n \"\",\n \"- AGENTS.md for agent operating rules.\",\n \"- docs/architecture/**/*.md for system shape and boundaries.\",\n \"- docs/context/**/*.md for product, stack, and implementation context.\",\n \"- docs/decisions/**/*.md for ADRs and durable choices.\",\n \"- docs/features/**/*.md for behavior specs and acceptance criteria.\",\n \"- docs/memory/**/*.md for lessons, patterns, and known pitfalls.\",\n \"- docs/plans/**/*.md for near-term execution plans.\",\n \"- docs/prompts/**/*.md for model-agnostic implementation prompts.\",\n \"- docs/workflows/**/*.md for repeatable procedures.\",\n \"\",\n \"## Current Control-Plane Folder Status\",\n \"\",\n `Present: ${controlPlane.present.length ? controlPlane.present.join(\", \") : \"none\"}`,\n `Missing: ${controlPlane.missing.length ? controlPlane.missing.join(\", \") : \"none\"}`,\n \"\",\n \"## Expected Result\",\n \"\",\n \"- Update the smallest useful set of control-plane files needed to orient the next coding agent.\",\n \"- Record any new decision, plan, prompt, workflow, memory, or context that prevents future drift.\",\n \"- Keep old decisions visible. If something is superseded, say so explicitly instead of silently deleting it.\",\n \"- Summarize changed files, why they changed, and the recommended next agent action.\"\n ].join(\"\\n\");\n}\n\nexport async function writePromptFile(filePath: string, prompt: string): Promise<string> {\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(filePath, prompt, \"utf8\");\n return filePath;\n}", "import { spawn } from \"node:child_process\";\nimport { mkdtemp, rm, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { runnerToolNames, type RunnerInvocationChannel, type RunnerToolName, type SessionDecision, type SessionPolicy, type SessionResumabilityScope } from \"@amistio/shared\";\n\nexport const localToolNames = runnerToolNames;\n\nexport type LocalToolName = RunnerToolName;\nexport type ToolRequest = LocalToolName | \"auto\" | \"none\";\n\nexport interface LocalToolAdapter {\n name: LocalToolName;\n description: string;\n sdkPackageName?: string;\n sdkDisplayCommand?: string;\n sdkRequiresExecutable?: boolean;\n executable?: string;\n supportsSessionReuse?: boolean;\n resumabilityScope?: SessionResumabilityScope;\n supportsModelSelection?: boolean;\n buildInvocation?: (input: ToolInvocationInput) => ToolInvocation;\n runWithSdk?: (input: ToolExecutionInput) => Promise<ToolExecutionResult>;\n}\n\nexport interface DetectedLocalTool {\n name: LocalToolName;\n description: string;\n available: boolean;\n sdkAvailable: boolean;\n commandAvailable: boolean;\n execution: \"sdk\" | \"command\" | \"unavailable\";\n supportsSessionReuse: boolean;\n resumabilityScope: SessionResumabilityScope;\n supportsModelSelection: boolean;\n}\n\nexport interface ToolInvocationInput {\n prompt: string;\n promptFilePath: string;\n rootDir: string;\n model?: string;\n}\n\nexport interface ToolExecutionInput extends ToolInvocationInput {\n streamOutput: boolean;\n session?: ToolExecutionSession;\n}\n\nexport interface ToolExecutionSession {\n toolSessionId: string;\n policy: SessionPolicy;\n decision: SessionDecision;\n providerSessionId?: string;\n}\n\nexport interface ToolInvocation {\n command: string;\n args: string[];\n displayCommand: string;\n shell?: boolean;\n stdin?: string;\n}\n\nexport interface RunLocalToolOptions {\n rootDir: string;\n prompt: string;\n tool?: string;\n toolCommand?: string;\n invocationChannel?: RunnerInvocationChannel;\n model?: string;\n streamOutput?: boolean;\n session?: ToolExecutionSession;\n}\n\nexport interface LocalToolRunResult {\n toolName: string;\n displayCommand: string;\n exitCode: number;\n stdout: string;\n stderr: string;\n supportsSessionReuse: boolean;\n resumabilityScope: SessionResumabilityScope;\n model?: string;\n providerSessionId?: string;\n messageCount?: number;\n tokensIn?: number;\n tokensOut?: number;\n costUsd?: number;\n}\n\ninterface ToolExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n providerSessionId?: string;\n messageCount?: number;\n tokensIn?: number;\n tokensOut?: number;\n costUsd?: number;\n}\n\ntype ResolvedToolRunner =\n | {\n toolName: string;\n kind: \"sdk\";\n displayCommand: string;\n adapter: LocalToolAdapter;\n allowCommandFallback: boolean;\n }\n | {\n toolName: string;\n kind: \"command\";\n invocation: ToolInvocation;\n };\n\nexport const localToolAdapters: readonly LocalToolAdapter[] = [\n {\n name: \"opencode\",\n description: \"opencode SDK adapter using @opencode-ai/sdk, with CLI fallback.\",\n sdkPackageName: \"@opencode-ai/sdk\",\n sdkDisplayCommand: \"@opencode-ai/sdk createOpencode().client.session.prompt()\",\n sdkRequiresExecutable: true,\n executable: \"opencode\",\n supportsSessionReuse: true,\n resumabilityScope: \"localMachine\",\n runWithSdk: runOpencodeSdk,\n buildInvocation: ({ prompt }) => ({\n command: \"opencode\",\n args: [\"run\", prompt],\n displayCommand: \"opencode run <generated prompt>\"\n })\n },\n {\n name: \"claude\",\n description: \"Claude Agent SDK adapter using @anthropic-ai/claude-agent-sdk, with CLI fallback.\",\n sdkPackageName: \"@anthropic-ai/claude-agent-sdk\",\n sdkDisplayCommand: \"@anthropic-ai/claude-agent-sdk query()\",\n executable: \"claude\",\n supportsSessionReuse: false,\n resumabilityScope: \"none\",\n runWithSdk: runClaudeSdk,\n buildInvocation: ({ prompt }) => ({\n command: \"claude\",\n args: [\"-p\", prompt],\n displayCommand: \"claude -p <generated prompt>\"\n })\n },\n {\n name: \"codex\",\n description: \"Codex SDK adapter using @openai/codex-sdk, with CLI fallback.\",\n sdkPackageName: \"@openai/codex-sdk\",\n sdkDisplayCommand: \"@openai/codex-sdk Codex.startThread().run()\",\n executable: \"codex\",\n supportsSessionReuse: false,\n resumabilityScope: \"none\",\n runWithSdk: runCodexSdk,\n buildInvocation: ({ prompt }) => ({\n command: \"codex\",\n args: [\"exec\", prompt],\n displayCommand: \"codex exec <generated prompt>\"\n })\n },\n {\n name: \"copilot\",\n description: \"GitHub Copilot SDK adapter using @github/copilot-sdk.\",\n sdkPackageName: \"@github/copilot-sdk\",\n sdkDisplayCommand: \"@github/copilot-sdk CopilotClient.createSession().sendAndWait()\",\n supportsModelSelection: true,\n supportsSessionReuse: false,\n resumabilityScope: \"none\",\n runWithSdk: runCopilotSdk\n },\n {\n name: \"gemini\",\n description: \"Gemini CLI adapter using prompt mode.\",\n executable: \"gemini\",\n supportsSessionReuse: false,\n resumabilityScope: \"none\",\n buildInvocation: ({ prompt }) => ({\n command: \"gemini\",\n args: [\"-p\", prompt],\n displayCommand: \"gemini -p <generated prompt>\"\n })\n },\n {\n name: \"aider\",\n description: \"Aider CLI adapter using a one-shot message.\",\n executable: \"aider\",\n supportsSessionReuse: false,\n resumabilityScope: \"none\",\n buildInvocation: ({ prompt }) => ({\n command: \"aider\",\n args: [\"--yes\", \"--message\", prompt],\n displayCommand: \"aider --yes --message <generated prompt>\"\n })\n },\n {\n name: \"cursor-agent\",\n description: \"Cursor agent CLI adapter using prompt mode when installed.\",\n executable: \"cursor-agent\",\n supportsSessionReuse: false,\n resumabilityScope: \"none\",\n buildInvocation: ({ prompt }) => ({\n command: \"cursor-agent\",\n args: [\"-p\", prompt],\n displayCommand: \"cursor-agent -p <generated prompt>\"\n })\n }\n];\n\nexport function isLocalToolName(value: string): value is LocalToolName {\n return localToolNames.includes(value as LocalToolName);\n}\n\nexport async function detectLocalTools(): Promise<DetectedLocalTool[]> {\n return Promise.all(\n localToolAdapters.map(async (adapter) => {\n const sdkAvailable = await isSdkAvailable(adapter);\n const commandAvailable = adapter.executable ? await commandExists(adapter.executable) : false;\n return {\n name: adapter.name,\n description: adapter.description,\n available: sdkAvailable || commandAvailable,\n sdkAvailable,\n commandAvailable,\n execution: sdkAvailable ? \"sdk\" : commandAvailable ? \"command\" : \"unavailable\",\n supportsSessionReuse: Boolean(adapter.supportsSessionReuse),\n resumabilityScope: adapter.resumabilityScope ?? \"none\",\n supportsModelSelection: Boolean(adapter.supportsModelSelection)\n };\n })\n );\n}\n\nexport async function runLocalTool(options: RunLocalToolOptions): Promise<LocalToolRunResult> {\n const promptTempDir = await mkdtemp(path.join(os.tmpdir(), \"amistio-prompt-\"));\n const promptFilePath = path.join(promptTempDir, \"prompt.md\");\n await writeFile(promptFilePath, options.prompt, \"utf8\");\n\n try {\n const runnerOptions: CreateToolRunnerOptions = {\n rootDir: options.rootDir,\n prompt: options.prompt,\n promptFilePath,\n tool: options.tool ?? \"auto\",\n invocationChannel: options.invocationChannel ?? \"auto\",\n ...(options.model ? { model: options.model } : {})\n };\n if (options.toolCommand) {\n runnerOptions.toolCommand = options.toolCommand;\n }\n const runner = await createToolRunner(runnerOptions);\n const result = await executeToolRunner(runner, {\n rootDir: options.rootDir,\n prompt: options.prompt,\n promptFilePath,\n streamOutput: Boolean(options.streamOutput),\n ...(options.session ? { session: options.session } : {})\n });\n return {\n toolName: runner.toolName,\n displayCommand: runner.kind === \"sdk\" ? runner.displayCommand : runner.invocation.displayCommand,\n supportsSessionReuse: runner.kind === \"sdk\" ? Boolean(runner.adapter.supportsSessionReuse) : false,\n resumabilityScope: runner.kind === \"sdk\" ? runner.adapter.resumabilityScope ?? \"none\" : \"none\",\n ...(options.model ? { model: options.model } : {}),\n ...result\n };\n } finally {\n await rm(promptTempDir, { recursive: true, force: true });\n }\n}\n\nexport async function createToolRunPreview(options: RunLocalToolOptions): Promise<{ toolName: string; displayCommand: string; supportsSessionReuse: boolean; resumabilityScope: SessionResumabilityScope; model?: string }> {\n const promptFilePath = path.join(os.tmpdir(), \"amistio-generated-prompt.md\");\n const runnerOptions: CreateToolRunnerOptions = {\n rootDir: options.rootDir,\n prompt: options.prompt,\n promptFilePath,\n tool: options.tool ?? \"auto\",\n invocationChannel: options.invocationChannel ?? \"auto\",\n ...(options.model ? { model: options.model } : {})\n };\n if (options.toolCommand) {\n runnerOptions.toolCommand = options.toolCommand;\n }\n const runner = await createToolRunner(runnerOptions);\n return {\n toolName: runner.toolName,\n displayCommand: runner.kind === \"sdk\" ? runner.displayCommand : runner.invocation.displayCommand,\n supportsSessionReuse: runner.kind === \"sdk\" ? Boolean(runner.adapter.supportsSessionReuse) : false,\n resumabilityScope: runner.kind === \"sdk\" ? runner.adapter.resumabilityScope ?? \"none\" : \"none\",\n ...(options.model ? { model: options.model } : {})\n };\n}\n\nexport function createCustomToolInvocation(commandTemplate: string, input: ToolInvocationInput): ToolInvocation {\n const displayCommand = commandTemplate\n .replaceAll(\"{promptFile}\", shellQuote(input.promptFilePath))\n .replaceAll(\"{root}\", shellQuote(input.rootDir));\n\n return {\n command: displayCommand,\n args: [],\n displayCommand,\n shell: true,\n ...(commandTemplate.includes(\"{promptFile}\") ? {} : { stdin: input.prompt })\n };\n}\n\ninterface CreateToolRunnerOptions extends ToolInvocationInput {\n tool: string;\n toolCommand?: string;\n invocationChannel: RunnerInvocationChannel;\n}\n\nasync function createToolRunner(options: CreateToolRunnerOptions): Promise<ResolvedToolRunner> {\n if (options.toolCommand) {\n return {\n toolName: \"custom\",\n kind: \"command\",\n invocation: createCustomToolInvocation(options.toolCommand, options)\n };\n }\n\n const tool = normalizeToolRequest(options.tool);\n if (tool === \"none\") {\n throw new Error(\"No local tool selected. Use --tool auto, a supported tool name, or --tool-command.\");\n }\n\n const adapter = tool === \"auto\" ? await selectFirstAvailableAdapter(Boolean(options.model), options.invocationChannel) : await selectRequestedAdapter(tool, options.invocationChannel);\n if (options.model && !adapter.supportsModelSelection) {\n throw new Error(`Model selection is not supported by ${adapter.name}. Remove --model or choose a model-aware adapter.`);\n }\n if (options.invocationChannel !== \"command\" && adapter.runWithSdk && (await isSdkAvailable(adapter))) {\n return {\n toolName: adapter.name,\n kind: \"sdk\",\n displayCommand: adapter.sdkDisplayCommand ?? `${adapter.name} SDK`,\n adapter,\n allowCommandFallback: options.invocationChannel === \"auto\"\n };\n }\n\n if (options.invocationChannel !== \"sdk\" && adapter.buildInvocation && adapter.executable && (await commandExists(adapter.executable))) {\n return {\n toolName: adapter.name,\n kind: \"command\",\n invocation: adapter.buildInvocation(options)\n };\n }\n\n if (options.invocationChannel === \"sdk\") {\n throw new Error(`The ${adapter.name} SDK was not found. Select Auto or Command invocation, install the SDK/runtime, or pass --tool-command locally.`);\n }\n if (options.invocationChannel === \"command\") {\n throw new Error(`The ${adapter.name} executable was not found. Select Auto or SDK invocation, install the command, or pass --tool-command locally.`);\n }\n throw new Error(`The ${adapter.name} SDK or executable was not found. Install the SDK/runtime or pass --tool-command.`);\n}\n\nasync function executeToolRunner(runner: ResolvedToolRunner, input: ToolExecutionInput): Promise<ToolExecutionResult> {\n if (runner.kind === \"command\") {\n return executeToolInvocation(runner.invocation, input.rootDir, input.streamOutput);\n }\n\n try {\n return await runner.adapter.runWithSdk!(input);\n } catch (error) {\n if (runner.allowCommandFallback && runner.adapter.buildInvocation && runner.adapter.executable && (await commandExists(runner.adapter.executable))) {\n const fallback = runner.adapter.buildInvocation(input);\n const result = await executeToolInvocation(fallback, input.rootDir, input.streamOutput);\n const sdkFailure = `SDK execution for ${runner.adapter.name} failed, fell back to ${fallback.displayCommand}: ${errorMessage(error)}`;\n return {\n ...result,\n stderr: result.stderr ? `${sdkFailure}\\n${result.stderr}` : sdkFailure\n };\n }\n\n throw error;\n }\n}\n\nfunction normalizeToolRequest(value: string): ToolRequest {\n if (value === \"auto\" || value === \"none\" || isLocalToolName(value)) {\n return value;\n }\n\n throw new Error(`Unsupported local tool: ${value}. Supported tools: auto, none, ${localToolNames.join(\", \")}.`);\n}\n\nasync function selectFirstAvailableAdapter(requiresModelSelection = false, invocationChannel: RunnerInvocationChannel = \"auto\"): Promise<LocalToolAdapter> {\n for (const adapter of localToolAdapters) {\n if (requiresModelSelection && !adapter.supportsModelSelection) {\n continue;\n }\n const sdkAvailable = await isSdkAvailable(adapter);\n const commandAvailable = adapter.executable ? await commandExists(adapter.executable) : false;\n if (supportsRequestedInvocationChannel({ sdkAvailable, commandAvailable }, invocationChannel)) {\n return adapter;\n }\n }\n\n if (invocationChannel !== \"auto\") {\n throw new Error(`No installed local AI tool supports ${invocationChannel} invocation${requiresModelSelection ? \" with model selection\" : \"\"}. Select Auto or install a compatible tool.`);\n }\n throw new Error(\n requiresModelSelection\n ? \"No installed local AI tool supports model selection. Remove --model or choose a model-aware adapter.\"\n : `No supported local AI tool was found. Install one of ${localToolNames.join(\", \")} or pass --tool-command \"your-tool --prompt-file {promptFile}\".`\n );\n}\n\nasync function selectRequestedAdapter(tool: LocalToolName, invocationChannel: RunnerInvocationChannel = \"auto\"): Promise<LocalToolAdapter> {\n const adapter = localToolAdapters.find((candidate) => candidate.name === tool);\n if (!adapter) {\n throw new Error(`Unsupported local tool: ${tool}.`);\n }\n const sdkAvailable = await isSdkAvailable(adapter);\n const commandAvailable = adapter.executable ? await commandExists(adapter.executable) : false;\n if (!supportsRequestedInvocationChannel({ sdkAvailable, commandAvailable }, invocationChannel)) {\n if (invocationChannel === \"sdk\") {\n throw new Error(`The ${tool} SDK was not found. Select Auto or Command invocation, install it, or pass --tool-command locally.`);\n }\n if (invocationChannel === \"command\") {\n throw new Error(`The ${tool} executable was not found. Select Auto or SDK invocation, install it, or pass --tool-command locally.`);\n }\n throw new Error(`The ${tool} SDK or executable was not found. Install it or pass --tool-command.`);\n }\n if (invocationChannel !== \"command\" && sdkAvailable) {\n return adapter;\n }\n if (invocationChannel !== \"sdk\" && commandAvailable) {\n return adapter;\n }\n throw new Error(`The ${tool} SDK or executable was not found. Install it or pass --tool-command.`);\n}\n\nfunction supportsRequestedInvocationChannel(capability: { sdkAvailable: boolean; commandAvailable: boolean }, invocationChannel: RunnerInvocationChannel): boolean {\n if (invocationChannel === \"auto\") return capability.sdkAvailable || capability.commandAvailable;\n if (invocationChannel === \"sdk\") return capability.sdkAvailable;\n return capability.commandAvailable;\n}\n\nasync function isSdkAvailable(adapter: LocalToolAdapter): Promise<boolean> {\n if (!adapter.sdkPackageName || !adapter.runWithSdk) {\n return false;\n }\n if (adapter.sdkRequiresExecutable && adapter.executable && !(await commandExists(adapter.executable))) {\n return false;\n }\n\n return packageAvailable(adapter.sdkPackageName);\n}\n\nasync function packageAvailable(packageName: string): Promise<boolean> {\n try {\n await import(packageName);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function commandExists(command: string): Promise<boolean> {\n const lookupCommand = process.platform === \"win32\" ? \"where\" : \"which\";\n return new Promise((resolve) => {\n const lookup = spawn(lookupCommand, [command], { stdio: \"ignore\" });\n lookup.on(\"error\", () => resolve(false));\n lookup.on(\"close\", (exitCode) => resolve(exitCode === 0));\n });\n}\n\nasync function executeToolInvocation(\n invocation: ToolInvocation,\n rootDir: string,\n streamOutput: boolean\n): Promise<{ exitCode: number; stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n const child = spawn(invocation.command, invocation.args, {\n cwd: rootDir,\n env: process.env,\n shell: invocation.shell ?? false,\n stdio: [\"pipe\", \"pipe\", \"pipe\"]\n });\n let stdout = \"\";\n let stderr = \"\";\n\n child.on(\"error\", reject);\n child.stdout.setEncoding(\"utf8\");\n child.stderr.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (chunk: string) => {\n stdout += chunk;\n if (streamOutput) {\n process.stdout.write(chunk);\n }\n });\n child.stderr.on(\"data\", (chunk: string) => {\n stderr += chunk;\n if (streamOutput) {\n process.stderr.write(chunk);\n }\n });\n child.stdin.on(\"error\", () => undefined);\n if (invocation.stdin) {\n child.stdin.write(invocation.stdin);\n }\n child.stdin.end();\n child.on(\"close\", (exitCode) => {\n resolve({ exitCode: exitCode ?? 1, stdout, stderr });\n });\n });\n}\n\nasync function runOpencodeSdk(input: ToolExecutionInput): Promise<ToolExecutionResult> {\n const { createOpencode } = await import(\"@opencode-ai/sdk\");\n const previousDirectory = process.cwd();\n process.chdir(input.rootDir);\n try {\n const opencode = await createOpencode({ timeout: 10_000 });\n try {\n let providerSessionId = input.session?.providerSessionId;\n if (!providerSessionId) {\n const sessionResult = (await opencode.client.session.create({\n query: { directory: input.rootDir },\n body: { title: \"Amistio orchestration\" }\n })) as OpencodeResult<{ id: string }>;\n if (sessionResult.error || !sessionResult.data) {\n throw new Error(`opencode session create failed: ${JSON.stringify(sessionResult.error ?? \"missing data\")}`);\n }\n providerSessionId = sessionResult.data.id;\n }\n\n const promptResult = (await opencode.client.session.prompt({\n path: { id: providerSessionId },\n query: { directory: input.rootDir },\n body: { parts: [{ type: \"text\", text: input.prompt }] }\n })) as OpencodeResult<{ parts?: unknown[] }>;\n if (promptResult.error || !promptResult.data) {\n throw new Error(`opencode prompt failed: ${JSON.stringify(promptResult.error ?? \"missing data\")}`);\n }\n\n const stdout = extractTextParts(promptResult.data.parts);\n if (input.streamOutput && stdout) {\n process.stdout.write(stdout);\n }\n return { exitCode: 0, stdout, stderr: \"\", providerSessionId, messageCount: 1 };\n } finally {\n opencode.server.close();\n }\n } finally {\n process.chdir(previousDirectory);\n }\n}\n\nasync function runClaudeSdk(input: ToolExecutionInput): Promise<ToolExecutionResult> {\n const { query } = await import(\"@anthropic-ai/claude-agent-sdk\");\n let stdout = \"\";\n let stderr = \"\";\n let exitCode = 0;\n\n for await (const message of query({\n prompt: input.prompt,\n options: {\n cwd: input.rootDir,\n permissionMode: \"default\",\n tools: { type: \"preset\", preset: \"claude_code\" },\n env: {\n ...process.env,\n CLAUDE_AGENT_SDK_CLIENT_APP: \"amistio-cli/0.1.0\"\n }\n }\n })) {\n if (isRecord(message) && message.type === \"result\") {\n if (message.subtype === \"success\" && typeof message.result === \"string\") {\n stdout += message.result;\n if (input.streamOutput) {\n process.stdout.write(message.result);\n }\n } else {\n exitCode = 1;\n const resultMessage = message as Record<string, unknown>;\n const errors = Array.isArray(resultMessage.errors) ? resultMessage.errors.map(String).join(\"\\n\") : \"Claude Agent SDK execution failed.\";\n stderr += errors;\n }\n }\n }\n\n return { exitCode, stdout, stderr };\n}\n\nasync function runCodexSdk(input: ToolExecutionInput): Promise<ToolExecutionResult> {\n const { Codex } = await import(\"@openai/codex-sdk\");\n const codex = new Codex();\n const thread = codex.startThread({\n workingDirectory: input.rootDir,\n sandboxMode: \"workspace-write\",\n approvalPolicy: \"on-request\",\n skipGitRepoCheck: true\n });\n const result = await thread.run(input.prompt);\n if (input.streamOutput && result.finalResponse) {\n process.stdout.write(result.finalResponse);\n }\n return { exitCode: 0, stdout: result.finalResponse, stderr: \"\" };\n}\n\nasync function runCopilotSdk(input: ToolExecutionInput): Promise<ToolExecutionResult> {\n const { CopilotClient, approveAll } = await import(\"@github/copilot-sdk\");\n const client = new CopilotClient({\n cwd: input.rootDir,\n logLevel: \"error\"\n });\n try {\n await client.start();\n const session = await client.createSession({\n clientName: \"amistio-cli\",\n model: input.model ?? process.env.AMISTIO_COPILOT_MODEL ?? \"gpt-5\",\n workingDirectory: input.rootDir,\n enableConfigDiscovery: true,\n streaming: input.streamOutput,\n onPermissionRequest: approveAll\n });\n\n try {\n let streamedOutput = \"\";\n const unsubscribe = input.streamOutput\n ? session.on(\"assistant.message_delta\", (event) => {\n streamedOutput += event.data.deltaContent;\n process.stdout.write(event.data.deltaContent);\n })\n : undefined;\n try {\n const response = await session.sendAndWait({ prompt: input.prompt }, 10 * 60 * 1000);\n const stdout = response?.data.content ?? streamedOutput;\n return { exitCode: 0, stdout, stderr: \"\" };\n } finally {\n unsubscribe?.();\n }\n } finally {\n await session.disconnect();\n }\n } finally {\n await client.stop();\n }\n}\n\ninterface OpencodeResult<TData> {\n data?: TData;\n error?: unknown;\n}\n\nfunction extractTextParts(parts: unknown): string {\n if (!Array.isArray(parts)) {\n return \"\";\n }\n\n return parts\n .filter(isRecord)\n .map((part) => (part.type === \"text\" && typeof part.text === \"string\" ? part.text : \"\"))\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n}", "import { spawn } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { openSync } from \"node:fs\";\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport type RunnerProcessMode = \"foreground\" | \"background\";\nexport type RunnerDaemonStatus = \"running\" | \"stopped\";\n\nexport interface RunnerDaemonMetadata {\n schemaVersion: 1;\n accountId: string;\n projectId: string;\n repositoryLinkId: string;\n runnerId: string;\n rootDir: string;\n apiUrl: string;\n pid: number;\n status: RunnerDaemonStatus;\n startedAt: string;\n updatedAt: string;\n hostname: string;\n logPath?: string;\n stoppedAt?: string;\n}\n\nexport interface StartRunnerDaemonInput {\n accountId: string;\n projectId: string;\n repositoryLinkId: string;\n runnerId: string;\n rootDir: string;\n apiUrl: string;\n args: string[];\n executablePath?: string;\n scriptPath?: string;\n metadataDir?: string;\n}\n\nexport function currentRunnerMode(): RunnerProcessMode {\n return process.env.AMISTIO_RUNNER_MODE === \"background\" ? \"background\" : \"foreground\";\n}\n\nexport function defaultRunnerMetadataDir(): string {\n return path.join(os.homedir(), \".config\", \"amistio\", \"runners\");\n}\n\nexport async function startRunnerDaemon(input: StartRunnerDaemonInput): Promise<RunnerDaemonMetadata> {\n const metadataDir = input.metadataDir ?? defaultRunnerMetadataDir();\n const existing = await readRunnerDaemonMetadata(input, metadataDir);\n if (existing?.status === \"running\" && isProcessRunning(existing.pid)) {\n throw new Error(`Background runner ${existing.runnerId} is already running with PID ${existing.pid}.`);\n }\n\n await mkdir(metadataDir, { recursive: true });\n const logPath = path.join(metadataDir, `${runnerDaemonKey(input)}.log`);\n const logFd = openSync(logPath, \"a\");\n const child = spawn(input.executablePath ?? process.execPath, [input.scriptPath ?? process.argv[1]!, ...input.args], {\n cwd: input.rootDir,\n detached: true,\n env: {\n ...process.env,\n AMISTIO_RUNNER_MODE: \"background\"\n },\n stdio: [\"ignore\", logFd, logFd]\n });\n\n if (!child.pid) {\n throw new Error(\"Failed to start background runner process.\");\n }\n\n child.unref();\n\n const now = new Date().toISOString();\n const metadata: RunnerDaemonMetadata = {\n schemaVersion: 1,\n accountId: input.accountId,\n projectId: input.projectId,\n repositoryLinkId: input.repositoryLinkId,\n runnerId: input.runnerId,\n rootDir: path.resolve(input.rootDir),\n apiUrl: input.apiUrl,\n pid: child.pid,\n status: \"running\",\n startedAt: now,\n updatedAt: now,\n hostname: os.hostname(),\n logPath\n };\n await writeRunnerDaemonMetadata(metadata, metadataDir);\n return metadata;\n}\n\nexport async function restartRunnerDaemonProcess(metadata: RunnerDaemonMetadata, args: string[], input: { executablePath?: string; scriptPath?: string; metadataDir?: string } = {}): Promise<RunnerDaemonMetadata> {\n const metadataDir = input.metadataDir ?? defaultRunnerMetadataDir();\n await mkdir(metadataDir, { recursive: true });\n const logPath = metadata.logPath ?? path.join(metadataDir, `${runnerDaemonKey(metadata)}.log`);\n const logFd = openSync(logPath, \"a\");\n const child = spawn(input.executablePath ?? process.execPath, [input.scriptPath ?? process.argv[1]!, ...args], {\n cwd: metadata.rootDir,\n detached: true,\n env: {\n ...process.env,\n AMISTIO_RUNNER_MODE: \"background\"\n },\n stdio: [\"ignore\", logFd, logFd]\n });\n\n if (!child.pid) {\n throw new Error(\"Failed to start replacement background runner process.\");\n }\n\n child.unref();\n const now = new Date().toISOString();\n const replacement: RunnerDaemonMetadata = {\n ...metadata,\n pid: child.pid,\n status: \"running\",\n startedAt: now,\n updatedAt: now,\n hostname: os.hostname(),\n logPath\n };\n await writeRunnerDaemonMetadata(replacement, metadataDir);\n return replacement;\n}\n\nexport async function listRunnerDaemonMetadata(input: { accountId: string; projectId: string; repositoryLinkId: string; runnerId?: string }, metadataDir = defaultRunnerMetadataDir()): Promise<RunnerDaemonMetadata[]> {\n let entries: string[];\n try {\n entries = await readdir(metadataDir);\n } catch {\n return [];\n }\n\n const records = await Promise.all(\n entries\n .filter((entry) => entry.endsWith(\".json\"))\n .map(async (entry) => readRunnerDaemonMetadataFile(path.join(metadataDir, entry)))\n );\n\n return records\n .filter((record): record is RunnerDaemonMetadata => Boolean(record))\n .filter((record) => record.accountId === input.accountId && record.projectId === input.projectId && record.repositoryLinkId === input.repositoryLinkId)\n .filter((record) => !input.runnerId || record.runnerId === input.runnerId)\n .sort((a, b) => Date.parse(b.updatedAt) - Date.parse(a.updatedAt));\n}\n\nexport async function readRunnerDaemonMetadata(input: { accountId: string; projectId: string; repositoryLinkId: string; runnerId: string }, metadataDir = defaultRunnerMetadataDir()): Promise<RunnerDaemonMetadata | undefined> {\n return readRunnerDaemonMetadataFile(runnerDaemonMetadataPath(input, metadataDir));\n}\n\nexport async function writeRunnerDaemonMetadata(metadata: RunnerDaemonMetadata, metadataDir = defaultRunnerMetadataDir()): Promise<void> {\n await mkdir(metadataDir, { recursive: true });\n await writeFile(runnerDaemonMetadataPath(metadata, metadataDir), JSON.stringify(metadata, null, 2), { encoding: \"utf8\", mode: 0o600 });\n}\n\nexport async function markRunnerDaemonStopped(metadata: RunnerDaemonMetadata, metadataDir = defaultRunnerMetadataDir()): Promise<RunnerDaemonMetadata> {\n const now = new Date().toISOString();\n const stopped: RunnerDaemonMetadata = {\n ...metadata,\n status: \"stopped\",\n stoppedAt: now,\n updatedAt: now\n };\n await writeRunnerDaemonMetadata(stopped, metadataDir);\n return stopped;\n}\n\nexport async function stopRunnerDaemonProcess(metadata: RunnerDaemonMetadata): Promise<\"stopped\" | \"not-running\"> {\n if (!isProcessRunning(metadata.pid)) {\n return \"not-running\";\n }\n\n process.kill(metadata.pid, \"SIGTERM\");\n for (let attempt = 0; attempt < 30; attempt += 1) {\n if (!isProcessRunning(metadata.pid)) {\n return \"stopped\";\n }\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n return isProcessRunning(metadata.pid) ? \"not-running\" : \"stopped\";\n}\n\nexport function isProcessRunning(pid: number): boolean {\n if (!Number.isInteger(pid) || pid <= 0) {\n return false;\n }\n\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n const code = typeof error === \"object\" && error && \"code\" in error ? (error as { code?: string }).code : undefined;\n return code === \"EPERM\";\n }\n}\n\nexport function runnerDaemonRuntimeStatus(metadata: RunnerDaemonMetadata): \"running\" | \"stale\" | \"stopped\" {\n if (metadata.status === \"stopped\") {\n return \"stopped\";\n }\n return isProcessRunning(metadata.pid) ? \"running\" : \"stale\";\n}\n\nexport function runnerDaemonUptime(metadata: RunnerDaemonMetadata, now = Date.now()): string {\n const startedAt = Date.parse(metadata.startedAt);\n if (!Number.isFinite(startedAt)) {\n return \"unknown\";\n }\n const totalSeconds = Math.max(0, Math.floor((now - startedAt) / 1000));\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n if (hours > 0) {\n return `${hours}h ${minutes}m`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds}s`;\n }\n return `${seconds}s`;\n}\n\nfunction runnerDaemonMetadataPath(input: { accountId: string; projectId: string; repositoryLinkId: string; runnerId: string }, metadataDir: string): string {\n return path.join(metadataDir, `${runnerDaemonKey(input)}.json`);\n}\n\nfunction runnerDaemonKey(input: { accountId: string; projectId: string; repositoryLinkId: string; runnerId: string }): string {\n return createHash(\"sha256\").update(`${input.accountId}:${input.projectId}:${input.repositoryLinkId}:${input.runnerId}`).digest(\"hex\");\n}\n\nasync function readRunnerDaemonMetadataFile(filePath: string): Promise<RunnerDaemonMetadata | undefined> {\n try {\n const parsed = JSON.parse(await readFile(filePath, \"utf8\")) as RunnerDaemonMetadata;\n if (parsed.schemaVersion !== 1 || !parsed.runnerId || !parsed.projectId || !parsed.repositoryLinkId) {\n return undefined;\n }\n return parsed;\n } catch {\n return undefined;\n }\n}\n", "import type { SessionDecision, SessionPolicy, ToolSessionItem, WorkItem } from \"@amistio/shared\";\n\nconst maxIdleMs = 24 * 60 * 60 * 1000;\nconst maxTotalMs = 7 * 24 * 60 * 60 * 1000;\nconst maxMessageCount = 80;\nconst maxEstimatedTokens = 120_000;\nconst maxCostUsd = 25;\nconst relatednessThreshold = 20;\n\nexport interface SessionSelectionInput {\n policy: SessionPolicy;\n workItem: WorkItem;\n sessions: ToolSessionItem[];\n toolName: string;\n runnerId: string;\n repositoryLinkId: string;\n machineId: string;\n supportsSessionReuse: boolean;\n now?: Date;\n}\n\nexport interface SessionSelection {\n policy: SessionPolicy;\n decision: SessionDecision;\n reason: string;\n toolSession?: ToolSessionItem;\n}\n\nexport function normalizeSessionPolicy(value: string | undefined): SessionPolicy {\n if (!value || value === \"auto\" || value === \"new\" || value === \"none\") {\n return (value ?? \"auto\") as SessionPolicy;\n }\n\n if (/^continue:[A-Za-z0-9_.:-]+$/.test(value)) {\n return value as SessionPolicy;\n }\n\n throw new Error(`Unsupported session policy: ${value}. Use auto, new, continue:<toolSessionId>, or none.`);\n}\n\nexport function selectToolSession(input: SessionSelectionInput): SessionSelection {\n if (input.policy === \"none\") {\n return { policy: input.policy, decision: \"skipped\", reason: \"Session reuse was disabled for this run.\" };\n }\n\n if (!input.supportsSessionReuse) {\n return {\n policy: input.policy,\n decision: \"notSupported\",\n reason: `${input.toolName} does not expose reusable provider sessions; Amistio will record this as a one-shot tool session.`\n };\n }\n\n if (input.policy === \"new\") {\n return { policy: input.policy, decision: \"forcedNew\", reason: \"The user requested a fresh tool session.\" };\n }\n\n const forcedSessionId = forcedContinueSessionId(input.policy);\n if (forcedSessionId) {\n const forced = input.sessions.find((session) => session.toolSessionId === forcedSessionId);\n if (!forced) {\n return { policy: input.policy, decision: \"forcedNew\", reason: `Requested session ${forcedSessionId} was not found; creating a fresh session.` };\n }\n\n const ineligibleReason = sessionIneligibleReason(forced, input, input.now ?? new Date());\n if (ineligibleReason) {\n return { policy: input.policy, decision: \"forcedNew\", reason: `Requested session ${forcedSessionId} cannot be resumed: ${ineligibleReason}` };\n }\n\n return { policy: input.policy, decision: \"forcedContinue\", reason: `The user requested session ${forcedSessionId}.`, toolSession: forced };\n }\n\n const now = input.now ?? new Date();\n const candidates = input.sessions\n .map((session) => ({ session, ineligibleReason: sessionIneligibleReason(session, input, now), score: relatednessScore(session, input.workItem) }))\n .filter((candidate) => !candidate.ineligibleReason)\n .sort((a, b) => b.score - a.score || Date.parse(b.session.lastActivityAt) - Date.parse(a.session.lastActivityAt));\n\n const best = candidates[0];\n if (!best || best.score < relatednessThreshold) {\n return {\n policy: input.policy,\n decision: \"created\",\n reason: best ? `Best related session score ${best.score} was below ${relatednessThreshold}; creating a fresh session.` : \"No eligible related session was found.\"\n };\n }\n\n return {\n policy: input.policy,\n decision: \"continued\",\n reason: `Reusing ${best.session.toolSessionId}; relatedness score ${best.score}.`,\n toolSession: best.session\n };\n}\n\nfunction forcedContinueSessionId(policy: SessionPolicy) {\n return typeof policy === \"string\" && policy.startsWith(\"continue:\") ? policy.slice(\"continue:\".length) : undefined;\n}\n\nfunction sessionIneligibleReason(session: ToolSessionItem, input: SessionSelectionInput, now: Date): string | undefined {\n if (session.tool !== input.toolName) {\n return `tool mismatch (${session.tool} != ${input.toolName})`;\n }\n if (session.repositoryLinkId && session.repositoryLinkId !== input.repositoryLinkId) {\n return \"repository link mismatch\";\n }\n if (session.machineId && session.machineId !== input.machineId) {\n return \"session is scoped to another machine\";\n }\n if (session.resumabilityScope === \"localMachine\" && session.runnerId && session.runnerId !== input.runnerId) {\n return \"session is scoped to another runner machine\";\n }\n const requestedByUserId = input.workItem.requestedByUserId ?? input.workItem.requestedBy;\n if (session.createdByUserId && session.createdByUserId !== requestedByUserId) {\n return \"session belongs to another requester\";\n }\n if (input.workItem.implementationScopeId && session.implementationScopeId !== input.workItem.implementationScopeId) {\n return \"implementation scope mismatch\";\n }\n if (input.workItem.executionWorktreeKey && session.executionWorktreeKey !== input.workItem.executionWorktreeKey) {\n return \"worktree scope mismatch\";\n }\n if (session.status === \"closed\" || session.status === \"archived\" || session.status === \"blocked\" || session.status === \"unavailable\") {\n return `session is ${session.status}`;\n }\n if (Date.parse(session.lastActivityAt) + maxIdleMs < now.getTime()) {\n return \"session is idle past the reuse window\";\n }\n if (Date.parse(session.createdAt) + maxTotalMs < now.getTime()) {\n return \"session is older than the reuse window\";\n }\n if ((session.messageCount ?? 0) >= maxMessageCount) {\n return \"session message count is too high\";\n }\n if ((session.estimatedInputTokens ?? 0) + (session.estimatedOutputTokens ?? 0) >= maxEstimatedTokens) {\n return \"session token estimate is too high\";\n }\n if ((session.costUsd ?? 0) >= maxCostUsd) {\n return \"session cost is too high\";\n }\n\n return undefined;\n}\n\nfunction relatednessScore(session: ToolSessionItem, workItem: WorkItem): number {\n let score = 0;\n if (session.sessionGroupKey && workItem.sessionGroupKey && session.sessionGroupKey === workItem.sessionGroupKey) {\n score += 60;\n }\n if (session.lastWorkItemId && session.lastWorkItemId === workItem.workItemId) {\n score += 40;\n }\n\n const titleOverlap = tokenOverlap(session.title, workItem.title);\n score += titleOverlap * 8;\n\n if (session.summary) {\n score += tokenOverlap(session.summary, workItem.title) * 4;\n }\n\n for (const tag of session.tags) {\n if (workItem.title.toLowerCase().includes(tag.toLowerCase())) {\n score += 10;\n }\n }\n\n return score;\n}\n\nfunction tokenOverlap(firstValue: string, secondValue: string): number {\n const firstTokens = new Set(tokens(firstValue));\n return tokens(secondValue).filter((token) => firstTokens.has(token)).length;\n}\n\nfunction tokens(value: string): string[] {\n return value\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter((token) => token.length >= 4);\n}", "import { mkdir, readdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n brainDocumentItemSchema,\n decideSyncState,\n documentTypeSchema,\n isControlPlaneTemplateRepoPath,\n sha256ContentHash,\n syncedDocumentFrontmatterSchema,\n type BrainDocumentItem,\n type RepoLinkMetadata,\n type SyncedDocumentFrontmatter\n} from \"@amistio/shared\";\nimport { parseFrontmatter } from \"./control-plane.js\";\n\nconst legacySyncRoots = [\"architecture\", \"context\", \"decisions\", \"features\", \"memory\", \"plans\", \"prompts\", \"workflows\"];\nconst syncRoots = legacySyncRoots.map((syncRoot) => `docs/${syncRoot}`);\n\nexport type SyncStatus = \"clean\" | \"pending\" | \"dirty\" | \"conflicted\";\n\nexport interface LocalSyncedDocument {\n fullPath: string;\n repoPath: string;\n frontmatter: SyncedDocumentFrontmatter;\n content: string;\n contentHash: string;\n}\n\nexport interface SyncStatusItem {\n repoPath: string;\n documentId?: string;\n status: SyncStatus;\n reason: string;\n}\n\nexport interface SyncStatusReport {\n status: SyncStatus;\n items: SyncStatusItem[];\n counts: Record<SyncStatus, number>;\n}\n\nexport interface MaterializeResult {\n written: string[];\n skipped: string[];\n conflicts: string[];\n}\n\nexport async function collectSyncStatus(rootDir: string, webDocuments: BrainDocumentItem[] = []): Promise<SyncStatusReport> {\n const localDocuments = await readLocalSyncedDocuments(rootDir);\n const normalizedWebDocuments = webDocuments.map((document) => ({ ...document, repoPath: canonicalControlPlaneRepoPath(document.repoPath) }));\n const webByDocumentId = new Map(normalizedWebDocuments.map((document) => [document.documentId, document]));\n const pullableWebDocuments = normalizedWebDocuments.filter((document) => !isControlPlaneTemplateRepoPath(document.repoPath) && (document.status === \"approved\" || document.syncState === \"approved\" || document.syncState === \"synced\"));\n const localByDocumentId = new Map(localDocuments.map((document) => [document.frontmatter.amistioDocumentId, document]));\n const items: SyncStatusItem[] = [];\n\n for (const localDocument of localDocuments) {\n const webDocument = webByDocumentId.get(localDocument.frontmatter.amistioDocumentId);\n const localDirty = localDocument.contentHash !== localDocument.frontmatter.amistioContentHash;\n const webHash = webDocument?.contentHash;\n const decision = decideSyncState({\n lastSyncedHash: localDocument.frontmatter.amistioContentHash,\n repoHash: localDocument.contentHash,\n ...(webHash ? { webHash } : {})\n });\n\n if (decision === \"conflict\") {\n items.push({\n repoPath: localDocument.repoPath,\n documentId: localDocument.frontmatter.amistioDocumentId,\n status: \"conflicted\",\n reason: \"web and repository revisions both changed\"\n });\n } else if (localDirty || decision === \"pushRepo\") {\n items.push({\n repoPath: localDocument.repoPath,\n documentId: localDocument.frontmatter.amistioDocumentId,\n status: \"dirty\",\n reason: \"repository content changed since last synced hash\"\n });\n } else if (decision === \"pullWeb\") {\n items.push({\n repoPath: localDocument.repoPath,\n documentId: localDocument.frontmatter.amistioDocumentId,\n status: \"pending\",\n reason: \"approved web revision is newer\"\n });\n } else if (localDocument.frontmatter.status && ![\"approved\", \"synced\"].includes(localDocument.frontmatter.status)) {\n items.push({\n repoPath: localDocument.repoPath,\n documentId: localDocument.frontmatter.amistioDocumentId,\n status: \"pending\",\n reason: `local document is ${localDocument.frontmatter.status}`\n });\n } else {\n items.push({\n repoPath: localDocument.repoPath,\n documentId: localDocument.frontmatter.amistioDocumentId,\n status: \"clean\",\n reason: \"repository and web hashes match\"\n });\n }\n }\n\n for (const webDocument of pullableWebDocuments) {\n if (!localByDocumentId.has(webDocument.documentId)) {\n items.push({\n repoPath: webDocument.repoPath,\n documentId: webDocument.documentId,\n status: \"pending\",\n reason: \"approved web document has not been pulled\"\n });\n }\n }\n\n const counts = {\n clean: items.filter((item) => item.status === \"clean\").length,\n pending: items.filter((item) => item.status === \"pending\").length,\n dirty: items.filter((item) => item.status === \"dirty\").length,\n conflicted: items.filter((item) => item.status === \"conflicted\").length\n } satisfies Record<SyncStatus, number>;\n const status: SyncStatus = counts.conflicted ? \"conflicted\" : counts.dirty ? \"dirty\" : counts.pending ? \"pending\" : \"clean\";\n return { status, items, counts };\n}\n\nexport async function readLocalSyncedDocuments(rootDir: string): Promise<LocalSyncedDocument[]> {\n const markdownFiles = await findMarkdownFiles(rootDir);\n const documents: LocalSyncedDocument[] = [];\n for (const fullPath of markdownFiles) {\n const raw = await readFile(fullPath, \"utf8\");\n const parsed = parseSyncedMarkdown(raw);\n if (!parsed) {\n continue;\n }\n\n const repoPath = toRepoPath(rootDir, fullPath);\n if (isControlPlaneTemplateRepoPath(repoPath)) {\n continue;\n }\n\n documents.push({\n fullPath,\n repoPath,\n frontmatter: parsed.frontmatter,\n content: parsed.content,\n contentHash: sha256ContentHash(parsed.content)\n });\n }\n\n return documents;\n}\n\nexport async function materializeBrainDocuments(rootDir: string, documents: BrainDocumentItem[], options: { allowDirtyOverwrite?: boolean } = {}): Promise<MaterializeResult> {\n const result: MaterializeResult = { written: [], skipped: [], conflicts: [] };\n for (const inputDocument of documents) {\n const parsedDocument = brainDocumentItemSchema.parse(inputDocument);\n const document = { ...parsedDocument, repoPath: canonicalControlPlaneRepoPath(parsedDocument.repoPath) };\n const fullPath = safeRepoPath(rootDir, document.repoPath);\n if (isControlPlaneTemplateRepoPath(document.repoPath)) {\n result.skipped.push(document.repoPath);\n continue;\n }\n if (!isControlPlanePath(document.repoPath)) {\n result.conflicts.push(`${document.repoPath}: refusing to write outside docs control-plane folders`);\n continue;\n }\n\n const existing = await readExistingSyncedDocument(fullPath);\n if (existing.exists && !existing.document) {\n result.conflicts.push(`${document.repoPath}: file exists without Amistio document metadata`);\n continue;\n }\n if (existing.document && existing.document.frontmatter.amistioDocumentId !== document.documentId) {\n result.conflicts.push(`${document.repoPath}: file belongs to ${existing.document.frontmatter.amistioDocumentId}`);\n continue;\n }\n if (existing.document && existing.document.contentHash !== existing.document.frontmatter.amistioContentHash && !options.allowDirtyOverwrite) {\n result.conflicts.push(`${document.repoPath}: local edits would be overwritten`);\n continue;\n }\n if (existing.document && existing.document.frontmatter.amistioRevision >= document.revision && existing.document.contentHash === document.contentHash) {\n result.skipped.push(document.repoPath);\n continue;\n }\n\n await mkdir(path.dirname(fullPath), { recursive: true });\n await writeFile(fullPath, createSyncedDocumentMarkdown(document), \"utf8\");\n result.written.push(document.repoPath);\n }\n\n return result;\n}\n\nexport async function collectDirtyDocumentsForPush(rootDir: string, metadata: RepoLinkMetadata): Promise<BrainDocumentItem[]> {\n const localDocuments = await readLocalSyncedDocuments(rootDir);\n const now = new Date().toISOString();\n return localDocuments\n .filter((document) => document.contentHash !== document.frontmatter.amistioContentHash)\n .map((document) => {\n const documentType = documentTypeSchema.parse(document.frontmatter.amistioDocumentType);\n return brainDocumentItemSchema.parse({\n id: document.frontmatter.amistioDocumentId,\n type: \"brainDocument\",\n schemaVersion: 1,\n accountId: metadata.amistioAccountId,\n projectId: metadata.amistioProjectId,\n documentId: document.frontmatter.amistioDocumentId,\n documentType,\n title: inferTitle(document.content, document.repoPath),\n status: \"reviewing\",\n repoPath: document.repoPath,\n content: document.content,\n contentHash: document.contentHash,\n frontmatter: parseFrontmatterFromSyncedDocument(document.frontmatter),\n revision: document.frontmatter.amistioRevision + 1,\n source: \"repo\",\n syncState: \"dirtyInRepo\",\n createdAt: now,\n updatedAt: now\n });\n });\n}\n\nexport function createSyncedDocumentMarkdown(document: BrainDocumentItem): string {\n return [\n \"---\",\n `amistioDocumentId: ${document.documentId}`,\n `amistioDocumentType: ${document.documentType}`,\n `amistioRevision: ${document.revision}`,\n `amistioContentHash: ${document.contentHash}`,\n `status: ${document.status}`,\n \"---\",\n document.content,\n \"\"\n ].join(\"\\n\");\n}\n\nfunction parseSyncedMarkdown(content: string): { frontmatter: SyncedDocumentFrontmatter; content: string } | undefined {\n const rawFrontmatter = parseFrontmatter(content);\n const frontmatter = syncedDocumentFrontmatterSchema.safeParse(rawFrontmatter);\n if (!frontmatter.success) {\n return undefined;\n }\n\n const closingMarker = content.indexOf(\"\\n---\", 4);\n if (closingMarker === -1) {\n return undefined;\n }\n const closingLineEnd = content.indexOf(\"\\n\", closingMarker + 4);\n const bodyStart = closingLineEnd === -1 ? content.length : closingLineEnd + 1;\n return { frontmatter: frontmatter.data, content: content.slice(bodyStart).replace(/\\n$/, \"\") };\n}\n\nasync function readExistingSyncedDocument(fullPath: string): Promise<{ exists: boolean; document?: LocalSyncedDocument }> {\n try {\n const raw = await readFile(fullPath, \"utf8\");\n const parsed = parseSyncedMarkdown(raw);\n if (!parsed) {\n return { exists: true };\n }\n\n return {\n exists: true,\n document: {\n fullPath,\n repoPath: fullPath,\n frontmatter: parsed.frontmatter,\n content: parsed.content,\n contentHash: sha256ContentHash(parsed.content)\n }\n };\n } catch (error: unknown) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { exists: false };\n }\n throw error;\n }\n}\n\nasync function findMarkdownFiles(rootDir: string): Promise<string[]> {\n const files: string[] = [];\n for (const syncRoot of syncRoots) {\n const fullRoot = path.join(rootDir, syncRoot);\n if (!(await exists(fullRoot))) {\n continue;\n }\n await walkMarkdownFiles(fullRoot, files);\n }\n return files;\n}\n\nasync function walkMarkdownFiles(directory: string, files: string[]): Promise<void> {\n for (const entry of await readdir(directory, { withFileTypes: true })) {\n const fullPath = path.join(directory, entry.name);\n if (entry.isDirectory()) {\n await walkMarkdownFiles(fullPath, files);\n } else if (entry.isFile() && entry.name.endsWith(\".md\")) {\n files.push(fullPath);\n }\n }\n}\n\nfunction safeRepoPath(rootDir: string, repoPath: string): string {\n if (path.isAbsolute(repoPath)) {\n throw new Error(`Refusing to use absolute repo path: ${repoPath}`);\n }\n const normalized = path.normalize(repoPath);\n if (normalized === \"..\" || normalized.startsWith(`..${path.sep}`)) {\n throw new Error(`Refusing to use path outside the repository: ${repoPath}`);\n }\n const root = path.resolve(rootDir);\n const fullPath = path.resolve(root, normalized);\n if (!fullPath.startsWith(`${root}${path.sep}`)) {\n throw new Error(`Refusing to use path outside the repository: ${repoPath}`);\n }\n return fullPath;\n}\n\nfunction isControlPlanePath(repoPath: string): boolean {\n const normalized = path.normalize(repoPath);\n return syncRoots.some((syncRoot) => normalized === syncRoot || normalized.startsWith(`${syncRoot}${path.sep}`));\n}\n\nfunction canonicalControlPlaneRepoPath(repoPath: string): string {\n const normalized = repoPath.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\").replace(/^\\/+/, \"\");\n const [firstSegment] = normalized.split(\"/\");\n if (firstSegment && legacySyncRoots.includes(firstSegment)) {\n return `docs/${normalized}`;\n }\n return normalized;\n}\n\nfunction toRepoPath(rootDir: string, fullPath: string): string {\n return path.relative(rootDir, fullPath).split(path.sep).join(\"/\");\n}\n\nfunction inferTitle(content: string, repoPath: string): string {\n const heading = content.split(\"\\n\").find((line) => line.startsWith(\"# \"))?.replace(/^#\\s+/, \"\").trim();\n return heading || path.basename(repoPath, path.extname(repoPath));\n}\n\nfunction parseFrontmatterFromSyncedDocument(frontmatter: SyncedDocumentFrontmatter): Record<string, unknown> {\n return {\n amistioDocumentId: frontmatter.amistioDocumentId,\n amistioDocumentType: frontmatter.amistioDocumentType,\n amistioRevision: frontmatter.amistioRevision,\n amistioContentHash: frontmatter.amistioContentHash,\n ...(frontmatter.status ? { status: frontmatter.status } : {})\n };\n}\n\nasync function exists(filePath: string): Promise<boolean> {\n try {\n await stat(filePath);\n return true;\n } catch {\n return false;\n }\n}", "import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\ninterface ProviderSessionRecord {\n toolName: string;\n providerSessionId: string;\n updatedAt: string;\n}\n\ntype ProviderSessionFile = Record<string, ProviderSessionRecord>;\n\nexport class LocalToolSessionStore {\n constructor(private readonly filePath = defaultSessionStorePath()) { }\n\n async getProviderSessionId(toolSessionId: string, toolName: string): Promise<string | undefined> {\n const data = await this.read();\n const record = data[toolSessionId];\n return record?.toolName === toolName ? record.providerSessionId : undefined;\n }\n\n async setProviderSessionId(toolSessionId: string, toolName: string, providerSessionId: string): Promise<void> {\n const data = await this.read();\n data[toolSessionId] = { toolName, providerSessionId, updatedAt: new Date().toISOString() };\n await mkdir(path.dirname(this.filePath), { recursive: true });\n await writeFile(this.filePath, JSON.stringify(data, null, 2), \"utf8\");\n }\n\n private async read(): Promise<ProviderSessionFile> {\n try {\n return JSON.parse(await readFile(this.filePath, \"utf8\")) as ProviderSessionFile;\n } catch {\n return {};\n }\n }\n}\n\nfunction defaultSessionStorePath() {\n if (process.platform === \"darwin\") {\n return path.join(os.homedir(), \"Library\", \"Application Support\", \"Amistio\", \"tool-sessions.json\");\n }\n if (process.platform === \"win32\") {\n return path.join(process.env.APPDATA ?? os.homedir(), \"Amistio\", \"tool-sessions.json\");\n }\n return path.join(process.env.XDG_STATE_HOME ?? path.join(os.homedir(), \".local\", \"state\"), \"amistio\", \"tool-sessions.json\");\n}", "import { assistantAnswerResultSchema, brainGenerationResultSchema, impactPreviewResultSchema, type AssistantAnswerResult, type AssistantMessageItem, type BrainDocumentItem, type GeneratedBrainArtifact, type ImpactPreviewResult, type PlanReviewMessageItem, type WorkItem } from \"@amistio/shared\";\n\nconst generationResultStart = \"AMISTIO_BRAIN_GENERATION_RESULT_START\";\nconst generationResultEnd = \"AMISTIO_BRAIN_GENERATION_RESULT_END\";\nconst assistantAnswerStart = \"AMISTIO_ASSISTANT_ANSWER_START\";\nconst assistantAnswerEnd = \"AMISTIO_ASSISTANT_ANSWER_END\";\nconst impactPreviewStart = \"AMISTIO_IMPACT_PREVIEW_START\";\nconst impactPreviewEnd = \"AMISTIO_IMPACT_PREVIEW_END\";\n\ninterface PlanRevisionPromptContext {\n planDocument: BrainDocumentItem;\n messages: PlanReviewMessageItem[];\n}\n\ninterface AssistantQuestionPromptContext {\n question: AssistantMessageItem;\n messages: AssistantMessageItem[];\n documents: BrainDocumentItem[];\n}\n\ninterface ImpactPreviewPromptContext {\n implementationPrompt?: BrainDocumentItem;\n documents: BrainDocumentItem[];\n analyzedRepoRevision?: number;\n}\n\nexport function createWorkExecutionPrompt(workItem: WorkItem, context?: { planRevision?: PlanRevisionPromptContext; assistantQuestion?: AssistantQuestionPromptContext; impactPreview?: ImpactPreviewPromptContext }): string {\n if (workItem.workKind === \"brainGeneration\") {\n return createBrainGenerationPrompt(workItem);\n }\n\n if (workItem.workKind === \"planRevision\") {\n return createPlanRevisionPrompt(workItem, context?.planRevision);\n }\n\n if (workItem.workKind === \"assistantQuestion\") {\n return createAssistantQuestionPrompt(workItem, context?.assistantQuestion);\n }\n\n if (workItem.workKind === \"impactPreview\") {\n return createImpactPreviewPrompt(workItem, context?.impactPreview);\n }\n\n return [\n \"# Amistio Work Execution\",\n \"\",\n \"You are running locally through the Amistio CLI inside the user's repository.\",\n \"Execute the approved work item below using the repository's existing orchestration files, instructions, and constraints.\",\n \"\",\n \"## Work Item\",\n \"\",\n `Title: ${workItem.title}`,\n `Work item ID: ${workItem.workItemId}`,\n `Project ID: ${workItem.projectId}`,\n `Implementation scope: ${workItem.implementationScopeId ?? workItem.controllingAdrId ?? \"work-item\"}`,\n `Execution branch: ${workItem.executionBranch ?? \"managed by Amistio CLI\"}`,\n `Execution worktree key: ${workItem.executionWorktreeKey ?? \"managed by Amistio CLI\"}`,\n \"\",\n \"## Rules\",\n \"\",\n \"- Read AGENTS.md first when it exists.\",\n \"- Read AGENTS.md and the relevant docs/ control-plane files before implementation so the work stays aligned with existing direction.\",\n \"- Treat the current working directory as the Amistio-managed implementation worktree; do not switch back to the paired primary checkout for mutating work.\",\n \"- Keep changes focused on this work item.\",\n \"- Preserve old decisions, plans, memory, and prompts unless the work item explicitly supersedes them.\",\n \"- Do not commit changes.\",\n \"- Do not write secrets into the repository.\",\n \"- Do not create a repo-local .amistio folder.\",\n \"- Run relevant verification commands when feasible and summarize results.\"\n ].join(\"\\n\");\n}\n\nfunction createImpactPreviewPrompt(workItem: WorkItem, context: ImpactPreviewPromptContext | undefined): string {\n const implementationPrompt = context?.implementationPrompt;\n const approvedContext = (context?.documents ?? [])\n .filter((document) => document.status === \"approved\" || document.syncState === \"approved\" || document.syncState === \"synced\")\n .slice(0, 16)\n .map((document) => [\n `### ${document.title}`,\n `documentId: ${document.documentId}`,\n `documentType: ${document.documentType}`,\n `repoPath: ${document.repoPath}`,\n `revision: ${document.revision}`,\n document.content.slice(0, 3000)\n ].join(\"\\n\"))\n .join(\"\\n\\n\");\n\n return [\n \"# Amistio Implementation Impact Preview\",\n \"\",\n \"You are running locally through the Amistio CLI inside the user's repository.\",\n \"Analyze the likely impact of the approved implementation prompt. This is a preview-only task.\",\n \"Do not modify files, do not create branches, do not run implementation commands, and do not commit changes.\",\n \"\",\n \"## Work Item\",\n \"\",\n `Title: ${workItem.title}`,\n `Work item ID: ${workItem.workItemId}`,\n `Project ID: ${workItem.projectId}`,\n `Generated draft ID: ${workItem.generatedDraftId ?? \"unknown\"}`,\n `Impact report ID: ${workItem.impactReportId ?? \"unknown\"}`,\n `Analyzed repo revision: ${context?.analyzedRepoRevision ?? \"unknown\"}`,\n \"\",\n \"## Approved Implementation Prompt\",\n \"\",\n implementationPrompt ? implementationPrompt.content : workItem.sourceWish ?? workItem.title,\n \"\",\n \"## Approved Project Brain Context\",\n \"\",\n approvedContext || \"No approved project-brain records were loaded. Inspect the local repository and explain the gap in the report.\",\n \"\",\n \"## Report Requirements\",\n \"\",\n \"- Identify affected product areas and likely modules/files using safe path summaries.\",\n \"- Assign riskLevel as low, medium, high, or critical with operational reasoning in summary.\",\n \"- Include data/schema/migration impact, security/privacy/access-control considerations, verification plan, and rollback plan.\",\n \"- Keep repository source and secrets local. Do not include raw source dumps, credentials, local secret paths, or provider session references.\",\n \"- If you inspect files, cite paths only through likelyPaths and concise reasons.\",\n \"\",\n \"## Output Contract\",\n \"\",\n \"Print exactly one JSON object between the markers below. The CLI will submit only this structured report back to Amistio.\",\n \"\",\n impactPreviewStart,\n '{\"riskLevel\":\"medium\",\"summary\":\"Touches the workspace command flow and runner claim gate.\",\"affectedAreas\":[{\"name\":\"Workspace UI\",\"description\":\"Shows impact before execution\"}],\"likelyPaths\":[{\"repoPath\":\"src/apps/web/components/workspace-client.tsx\",\"reason\":\"Workspace action wiring\"}],\"dependencies\":[\"local runner\"],\"dataSchemaImpact\":\"Adds an impact report project item.\",\"securityPrivacyImpact\":\"Source remains local; SaaS stores summaries and paths only.\",\"verificationPlan\":[\"Run shared, web, and CLI tests\",\"Run root verify\"],\"rollbackPlan\":\"Disable the impact gate and remove queued preview work if needed.\"}',\n impactPreviewEnd,\n \"\",\n \"Do not put Markdown fences around the markers. Do not implement the work.\"\n ].join(\"\\n\");\n}\n\nfunction createAssistantQuestionPrompt(workItem: WorkItem, context: AssistantQuestionPromptContext | undefined): string {\n const question = context?.question.content ?? workItem.sourceWish ?? workItem.title;\n const priorMessages = (context?.messages ?? [])\n .filter((message) => message.messageId !== context?.question.messageId)\n .slice(-12)\n .map((message) => `- ${message.role} / ${message.status}: ${message.content}`)\n .join(\"\\n\");\n const brainContext = (context?.documents ?? [])\n .filter((document) => document.status === \"approved\" || document.syncState === \"approved\" || document.syncState === \"synced\")\n .slice(0, 12)\n .map((document) => [\n `### ${document.title}`,\n `documentId: ${document.documentId}`,\n `repoPath: ${document.repoPath}`,\n `revision: ${document.revision}`,\n document.content.slice(0, 2400)\n ].join(\"\\n\"))\n .join(\"\\n\\n\");\n\n return [\n \"# Amistio Project Knowledge Assistant\",\n \"\",\n \"You are running locally through the Amistio CLI inside the user's repository.\",\n \"Answer the user's project question using approved project-brain context and local repository inspection when useful.\",\n \"This is an answer-only task. Do not modify files, do not create branches, and do not commit changes.\",\n \"\",\n \"## User Question\",\n \"\",\n question,\n \"\",\n \"## Work Item\",\n \"\",\n `Title: ${workItem.title}`,\n `Work item ID: ${workItem.workItemId}`,\n `Project ID: ${workItem.projectId}`,\n `Assistant message ID: ${workItem.assistantMessageId ?? context?.question.messageId ?? \"unknown\"}`,\n \"\",\n \"## Approved Project Brain Context\",\n \"\",\n brainContext || \"No approved project-brain records were loaded. Say what you inspected locally and avoid pretending citations exist.\",\n \"\",\n \"## Recent Assistant Conversation\",\n \"\",\n priorMessages || \"No prior assistant messages were loaded.\",\n \"\",\n \"## Source Boundary Rules\",\n \"\",\n \"- Keep repository source, secrets, tokens, local credential paths, and provider session references local.\",\n \"- Summarize findings instead of dumping source code. Tiny identifiers, filenames, and short excerpts are acceptable when necessary.\",\n \"- Use sourceBoundary \\\"projectBrain\\\" when the answer only uses project-brain records.\",\n \"- Use sourceBoundary \\\"localSource\\\" when you inspected local repository files.\",\n \"- Use sourceBoundary \\\"mixed\\\" when both project-brain records and local files shaped the answer.\",\n \"- Include citations for project-brain records with documentId/title/repoPath where relevant.\",\n \"- Include local file citations with repoPath only; do not include raw source dumps.\",\n \"\",\n \"## Output Contract\",\n \"\",\n \"Print exactly one JSON object between the markers below. The CLI will submit only this structured answer back to Amistio.\",\n \"\",\n assistantAnswerStart,\n '{\"answer\":\"Concise answer with concrete next steps.\",\"sourceBoundary\":\"mixed\",\"citations\":[{\"source\":\"projectBrain\",\"documentId\":\"doc_123\",\"title\":\"ADR-001\",\"repoPath\":\"docs/decisions/ADR-001.md\",\"excerpt\":\"Short supporting excerpt\"},{\"source\":\"localSource\",\"repoPath\":\"src/apps/web/example.ts\",\"excerpt\":\"Short local finding\"}]}',\n assistantAnswerEnd,\n \"\",\n \"Do not put Markdown fences around the markers. Do not include implementation diffs.\"\n ].join(\"\\n\");\n}\n\nfunction createPlanRevisionPrompt(workItem: WorkItem, context: PlanRevisionPromptContext | undefined): string {\n const messages = context?.messages ?? [];\n return [\n \"# Amistio Plan Revision\",\n \"\",\n \"You are running locally through the Amistio CLI inside the user's repository.\",\n \"Revise the selected generated plan using the user's conversation. Do not implement product/source code changes in this pass.\",\n \"\",\n \"## Work Item\",\n \"\",\n `Title: ${workItem.title}`,\n `Work item ID: ${workItem.workItemId}`,\n `Project ID: ${workItem.projectId}`,\n `Document ID: ${workItem.reviewDocumentId ?? \"unknown\"}`,\n `Document revision: ${workItem.reviewDocumentRevision ?? \"unknown\"}`,\n \"\",\n \"## Current Plan\",\n \"\",\n context?.planDocument.content ?? \"The current plan document could not be loaded. Explain the blocker in the result summary.\",\n \"\",\n \"## Conversation\",\n \"\",\n messages.length ? messages.map((message) => `- ${message.role} / ${message.intent} / ${message.status} / rev ${message.documentRevision}: ${message.content}`).join(\"\\n\") : \"No conversation messages were loaded.\",\n \"\",\n \"## Output Contract\",\n \"\",\n \"Print exactly one JSON object between the markers below with an artifacts array containing one revised plan artifact.\",\n \"The artifact must use documentType \\\"plan\\\", keep the plan under docs/plans/, and include the complete revised plan content.\",\n \"\",\n generationResultStart,\n '{\"artifacts\":[{\"documentType\":\"plan\",\"title\":\"Revised Plan\",\"repoPath\":\"docs/plans/PLAN-revised.md\",\"content\":\"# Revised Plan\\\\n\\\\n## Goal\\\\n...\"}]}',\n generationResultEnd,\n \"\",\n \"Do not put Markdown fences around the markers. Do not claim implementation is complete.\"\n ].join(\"\\n\");\n}\n\nexport function parseBrainGenerationArtifacts(output: string): GeneratedBrainArtifact[] {\n const start = output.indexOf(generationResultStart);\n const end = output.indexOf(generationResultEnd, start + generationResultStart.length);\n if (start === -1 || end === -1 || end <= start) {\n throw new Error(\"Local AI generation did not return an Amistio brain generation result block.\");\n }\n\n const payload = output.slice(start + generationResultStart.length, end).trim();\n const parsed = JSON.parse(stripJsonFence(payload)) as unknown;\n return brainGenerationResultSchema.parse(parsed).artifacts;\n}\n\nexport function parseAssistantAnswerResult(output: string): AssistantAnswerResult {\n const start = output.indexOf(assistantAnswerStart);\n const end = output.indexOf(assistantAnswerEnd, start + assistantAnswerStart.length);\n if (start === -1 || end === -1 || end <= start) {\n throw new Error(\"Local AI answer did not return an Amistio assistant answer block.\");\n }\n\n const payload = output.slice(start + assistantAnswerStart.length, end).trim();\n const parsed = JSON.parse(stripJsonFence(payload)) as unknown;\n return assistantAnswerResultSchema.parse(parsed);\n}\n\nexport function parseImpactPreviewResult(output: string): ImpactPreviewResult {\n const start = output.indexOf(impactPreviewStart);\n const end = output.indexOf(impactPreviewEnd, start + impactPreviewStart.length);\n if (start === -1 || end === -1 || end <= start) {\n throw new Error(\"Local AI preview did not return an Amistio impact preview block.\");\n }\n\n const payload = output.slice(start + impactPreviewStart.length, end).trim();\n const parsed = JSON.parse(stripJsonFence(payload)) as unknown;\n return impactPreviewResultSchema.parse(parsed);\n}\n\nfunction createBrainGenerationPrompt(workItem: WorkItem): string {\n const wish = workItem.sourceWish ?? workItem.title;\n return [\n \"# Amistio Brain Generation\",\n \"\",\n \"You are running locally through the Amistio CLI inside the user's repository.\",\n \"Generate reviewable project-brain artifacts from the submitted wish. Do not implement product/source code changes in this pass.\",\n \"\",\n \"## Submitted Wish\",\n \"\",\n wish,\n \"\",\n \"## Work Item\",\n \"\",\n `Title: ${workItem.title}`,\n `Work item ID: ${workItem.workItemId}`,\n `Project ID: ${workItem.projectId}`,\n `Generated draft ID: ${workItem.generatedDraftId ?? \"unknown\"}`,\n \"\",\n \"## Read First\",\n \"\",\n \"- Read AGENTS.md first when it exists.\",\n \"- Read relevant files under docs/architecture/, docs/context/, docs/decisions/, docs/features/, docs/memory/, docs/plans/, docs/prompts/, and docs/workflows/ before drafting.\",\n \"- Keep source code and secrets local. Do not include source-code payloads, access tokens, API keys, local credential paths, or provider session references in the result.\",\n \"\",\n \"## Generate Artifacts\",\n \"\",\n \"Return Markdown artifacts that should enter human review before implementation. Use only these document types and matching repo roots:\",\n \"\",\n \"- architecture -> docs/architecture/\",\n \"- context -> docs/context/\",\n \"- decision -> docs/decisions/\",\n \"- feature -> docs/features/\",\n \"- memory -> docs/memory/\",\n \"- plan -> docs/plans/\",\n \"- prompt -> docs/prompts/\",\n \"- workflow -> docs/workflows/\",\n \"\",\n \"Each artifact needs documentType, title, repoPath, and content. Include at least a plan and an implementation prompt when implementation work is implied. Use model-agnostic prompt wording.\",\n \"\",\n \"## Output Contract\",\n \"\",\n \"Print exactly one JSON object between the markers below. The CLI will submit only this structured result back to Amistio.\",\n \"\",\n generationResultStart,\n '{\"artifacts\":[{\"documentType\":\"plan\",\"title\":\"Plan: Example\",\"repoPath\":\"docs/plans/PLAN-example.md\",\"content\":\"# Plan: Example\\\\n\\\\n## Goal\\\\n...\"}]}',\n generationResultEnd,\n \"\",\n \"Do not put Markdown fences around the markers. Do not claim implementation is complete.\"\n ].join(\"\\n\");\n}\n\nfunction stripJsonFence(value: string): string {\n const trimmed = value.trim();\n if (!trimmed.startsWith(\"```\")) {\n return trimmed;\n }\n\n return trimmed.replace(/^```(?:json)?\\s*/i, \"\").replace(/```$/i, \"\").trim();\n}", "import { createHash } from \"node:crypto\";\nimport { formatProjectNextAction, type ProjectNextAction } from \"@amistio/shared\";\n\nexport const watchStateReminderMs = 60 * 1000;\n\nexport interface WatchStateLog {\n key: string;\n printedAtMs: number;\n}\n\nexport function formatWatchStartupContext(input: { runnerId: string; projectId: string; repositoryLinkId: string; apiUrl: string; intervalSeconds: number }): string[] {\n return [\n `Runner ${input.runnerId} is watching project ${input.projectId}.`,\n `Repository link: ${input.repositoryLinkId}`,\n `API: ${input.apiUrl}`,\n `Polling interval: ${input.intervalSeconds}s. Press Ctrl+C to stop.`\n ];\n}\n\nexport function formatWatchIdleLine(action: ProjectNextAction, intervalSeconds: number): string {\n return `${formatProjectNextAction(action)} Checking again in ${intervalSeconds}s.`;\n}\n\nexport function shouldPrintWatchState(action: ProjectNextAction, previous: WatchStateLog | undefined, nowMs: number, reminderMs = watchStateReminderMs): boolean {\n const key = watchStateKey(action);\n return !previous || previous.key !== key || nowMs - previous.printedAtMs >= reminderMs;\n}\n\nexport function watchStateKey(action: ProjectNextAction): string {\n return [action.kind, action.message, action.workItemId, action.documentId, action.runnerId].filter(Boolean).join(\":\");\n}\n\nexport function stableRunnerId(input: { accountId: string; projectId: string; repositoryLinkId: string; machineId: string }): string {\n const digest = createHash(\"sha256\")\n .update(`${input.accountId}:${input.projectId}:${input.repositoryLinkId}:${input.machineId}`)\n .digest(\"hex\")\n .slice(0, 20);\n return `runner_${digest}`;\n}\n", "import { execFile } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { readdir, readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { isControlPlaneTemplateRepoPath, parseRepositoryCloneUrl, sha256ContentHash, type BrainDocumentItem, type DocumentType, type ParsedRepositoryCloneUrl } from \"@amistio/shared\";\nimport { parseFrontmatter } from \"./control-plane.js\";\n\nconst execFileAsync = promisify(execFile);\nconst defaultMaxFileKb = 256;\n\nconst controlPlaneRoots = [\"architecture\", \"context\", \"decisions\", \"features\", \"memory\", \"plans\", \"prompts\", \"workflows\"] as const;\nconst excludedDirectoryNames = new Set([\".git\", \"node_modules\", \".pnpm-store\", \".next\", \"dist\", \"build\", \"coverage\", \".cache\", \"cache\", \"tmp\", \"temp\", \"vendor\"]);\nconst excludedFileNames = new Set([\"docs/context/amistio-project.md\", \"context/amistio-project.md\"]);\nconst generatedPathSegments = new Set([\"generated\", \"__generated__\", \"vendor\", \"vendors\"]);\n\nconst documentFolderByType: Record<DocumentType, string> = {\n architecture: \"docs/architecture\",\n context: \"docs/context\",\n decision: \"docs/decisions\",\n feature: \"docs/features\",\n memory: \"docs/memory\",\n plan: \"docs/plans\",\n prompt: \"docs/prompts/shared\",\n workflow: \"docs/workflows\"\n};\n\nexport interface LocalRepositoryMetadata {\n rootDir: string;\n repoName: string;\n defaultBranch: string;\n repoFingerprint: string;\n originRemoteWarning?: string;\n parsedCloneUrl?: ParsedRepositoryCloneUrl;\n}\n\nexport interface LegacyDocumentCandidate {\n sourcePath: string;\n repoPath: string;\n documentType: DocumentType;\n title: string;\n content: string;\n contentHash: string;\n}\n\nexport interface ImportSkippedDocument {\n repoPath: string;\n reason: \"notMarkdown\" | \"excluded\" | \"tooLarge\" | \"alreadyManaged\" | \"unreadable\";\n}\n\nexport interface LegacyDocumentScanResult {\n candidates: LegacyDocumentCandidate[];\n skipped: ImportSkippedDocument[];\n}\n\nexport interface ScanLegacyDocumentsOptions {\n rootDir: string;\n include?: string[];\n exclude?: string[];\n maxFileKb?: number;\n}\n\nexport interface BuildImportedDocumentsOptions {\n accountId: string;\n projectId: string;\n repositoryLinkId: string;\n candidates: LegacyDocumentCandidate[];\n existingDocuments?: BrainDocumentItem[];\n importedAt?: string;\n}\n\nexport async function inspectLocalRepository(rootDir: string, defaultBranch: string): Promise<LocalRepositoryMetadata> {\n const requestedRoot = path.resolve(rootDir);\n const root = await runGit([\"-C\", requestedRoot, \"rev-parse\", \"--show-toplevel\"]).catch(() => requestedRoot);\n const detectedBranch = await runGit([\"-C\", root, \"symbolic-ref\", \"--quiet\", \"--short\", \"HEAD\"]).catch(() => defaultBranch);\n const originUrl = await runGit([\"-C\", root, \"remote\", \"get-url\", \"origin\"]).catch(() => undefined);\n const parsedCloneUrl = originUrl ? parseOptionalOriginCloneUrl(originUrl) : undefined;\n const repoName = (parsedCloneUrl?.repoName ?? path.basename(root)) || \"repository\";\n const fingerprintSeed = parsedCloneUrl ? `origin:${parsedCloneUrl.normalizedKey}` : `repo:${repoName}:${detectedBranch || defaultBranch}`;\n\n return {\n rootDir: root,\n repoName,\n defaultBranch: detectedBranch || defaultBranch,\n repoFingerprint: `import_${hashText(fingerprintSeed, 24)}`,\n ...(parsedCloneUrl ? { parsedCloneUrl } : {}),\n ...(!parsedCloneUrl && originUrl ? { originRemoteWarning: \"Origin remote is not a supported hosted HTTPS or SSH clone URL, so no clone URL will be stored.\" } : {})\n };\n}\n\nexport async function scanLegacyDocuments(options: ScanLegacyDocumentsOptions): Promise<LegacyDocumentScanResult> {\n const rootDir = path.resolve(options.rootDir);\n const maxBytes = (options.maxFileKb ?? defaultMaxFileKb) * 1024;\n const skipped: ImportSkippedDocument[] = [];\n const candidates: LegacyDocumentCandidate[] = [];\n const usedDestinationPaths = new Set<string>();\n const repoPaths = (await listRepositoryPaths(rootDir)).sort((first, second) => first.localeCompare(second));\n\n for (const repoPath of repoPaths) {\n if (!matchesIncludeExclude(repoPath, options.include, options.exclude)) {\n skipped.push({ repoPath, reason: \"excluded\" });\n continue;\n }\n if (!isMarkdownDocument(repoPath)) {\n skipped.push({ repoPath, reason: \"notMarkdown\" });\n continue;\n }\n if (isExcludedRepoPath(repoPath)) {\n skipped.push({ repoPath, reason: \"excluded\" });\n continue;\n }\n\n const fullPath = path.join(rootDir, ...repoPath.split(\"/\"));\n const fileStat = await stat(fullPath).catch(() => undefined);\n if (!fileStat?.isFile()) {\n skipped.push({ repoPath, reason: \"unreadable\" });\n continue;\n }\n if (fileStat.size > maxBytes) {\n skipped.push({ repoPath, reason: \"tooLarge\" });\n continue;\n }\n\n const content = await readFile(fullPath, \"utf8\").catch(() => undefined);\n if (content === undefined) {\n skipped.push({ repoPath, reason: \"unreadable\" });\n continue;\n }\n if (isAmistioManagedMarkdown(content)) {\n skipped.push({ repoPath, reason: \"alreadyManaged\" });\n continue;\n }\n\n const documentType = classifyLegacyDocument(repoPath, content);\n const destinationPath = uniqueDestinationPath(canonicalImportPath(repoPath, documentType), repoPath, usedDestinationPaths);\n candidates.push({\n sourcePath: repoPath,\n repoPath: destinationPath,\n documentType,\n title: inferTitle(content, repoPath),\n content,\n contentHash: sha256ContentHash(content)\n });\n }\n\n return { candidates, skipped };\n}\n\nexport function buildImportedBrainDocuments(options: BuildImportedDocumentsOptions): BrainDocumentItem[] {\n const importedAt = options.importedAt ?? new Date().toISOString();\n const existingById = new Map((options.existingDocuments ?? []).map((document) => [document.documentId, document]));\n\n return options.candidates.map((candidate) => {\n const documentId = stableImportDocumentId(options.accountId, options.projectId, options.repositoryLinkId, candidate.sourcePath);\n const existing = existingById.get(documentId);\n const revision = existing ? (existing.contentHash === candidate.contentHash ? existing.revision : existing.revision + 1) : 0;\n return {\n id: documentId,\n type: \"brainDocument\",\n schemaVersion: 1,\n accountId: options.accountId,\n projectId: options.projectId,\n documentId,\n documentType: candidate.documentType,\n title: candidate.title,\n status: \"approved\",\n repoPath: candidate.repoPath,\n content: candidate.content,\n contentHash: candidate.contentHash,\n frontmatter: {\n ...(existing?.frontmatter ?? {}),\n legacySourcePath: candidate.sourcePath,\n importedByCommand: \"amistio import\",\n importedAt,\n importedSourceHash: candidate.contentHash\n },\n revision,\n source: \"repo\",\n syncState: \"approved\",\n createdAt: existing?.createdAt ?? importedAt,\n updatedAt: importedAt,\n approvedRevision: revision\n } satisfies BrainDocumentItem;\n });\n}\n\nexport function importSkipCounts(skipped: ImportSkippedDocument[]): Record<ImportSkippedDocument[\"reason\"], number> {\n return {\n notMarkdown: skipped.filter((item) => item.reason === \"notMarkdown\").length,\n excluded: skipped.filter((item) => item.reason === \"excluded\").length,\n tooLarge: skipped.filter((item) => item.reason === \"tooLarge\").length,\n alreadyManaged: skipped.filter((item) => item.reason === \"alreadyManaged\").length,\n unreadable: skipped.filter((item) => item.reason === \"unreadable\").length\n };\n}\n\nfunction parseOptionalOriginCloneUrl(originUrl: string): ParsedRepositoryCloneUrl | undefined {\n try {\n return parseRepositoryCloneUrl(originUrl);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.toLowerCase().includes(\"credential\") || message.toLowerCase().includes(\"password\")) {\n throw new Error(\"Repository origin remote contains embedded credentials. Remove credentials from the remote URL before importing.\");\n }\n return undefined;\n }\n}\n\nasync function listRepositoryPaths(rootDir: string): Promise<string[]> {\n const gitFiles = await runGit([\"-C\", rootDir, \"ls-files\", \"--cached\", \"--others\", \"--exclude-standard\"]).catch(() => undefined);\n if (gitFiles !== undefined) {\n return gitFiles.split(\"\\n\").map((line) => normalizeRepoPath(line)).filter((line) => line.length > 0);\n }\n\n const files: string[] = [];\n await walkRepository(rootDir, rootDir, files);\n return files;\n}\n\nasync function walkRepository(rootDir: string, directory: string, files: string[]): Promise<void> {\n const entries = await readdir(directory, { withFileTypes: true }).catch(() => []);\n for (const entry of entries) {\n const fullPath = path.join(directory, entry.name);\n const repoPath = normalizeRepoPath(path.relative(rootDir, fullPath));\n if (entry.isDirectory()) {\n if (!excludedDirectoryNames.has(entry.name)) {\n await walkRepository(rootDir, fullPath, files);\n }\n } else if (entry.isFile() && !isExcludedRepoPath(repoPath)) {\n files.push(repoPath);\n }\n }\n}\n\nfunction matchesIncludeExclude(repoPath: string, include: string[] | undefined, exclude: string[] | undefined): boolean {\n if (include?.length && !include.some((pattern) => wildcardMatch(pattern, repoPath))) {\n return false;\n }\n if (exclude?.some((pattern) => wildcardMatch(pattern, repoPath))) {\n return false;\n }\n return true;\n}\n\nfunction wildcardMatch(pattern: string, repoPath: string): boolean {\n const normalizedPattern = normalizeRepoPath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\").replace(/\\*\\*\\//g, \"::DOUBLE_STAR_SLASH::\").replace(/\\*\\*/g, \"::DOUBLE_STAR::\").replace(/\\?/g, \"[^/]\").replace(/\\*/g, \"[^/]*\").replace(/::DOUBLE_STAR_SLASH::/g, \"(?:.*/)?\").replace(/::DOUBLE_STAR::/g, \".*\");\n return new RegExp(`^${escaped}$`).test(repoPath);\n}\n\nfunction isMarkdownDocument(repoPath: string): boolean {\n return /\\.(md|mdx)$/i.test(repoPath);\n}\n\nfunction isExcludedRepoPath(repoPath: string): boolean {\n if (isControlPlaneTemplateRepoPath(repoPath)) return true;\n if (excludedFileNames.has(repoPath)) return true;\n const segments = repoPath.split(\"/\");\n if (segments.some((segment) => excludedDirectoryNames.has(segment) || generatedPathSegments.has(segment))) return true;\n const basename = segments[segments.length - 1]?.toLowerCase() ?? \"\";\n return basename.startsWith(\".env\") || basename.includes(\"secret\") || basename.includes(\"token\") || basename.includes(\"credential\") || basename.endsWith(\".lock\");\n}\n\nfunction isAmistioManagedMarkdown(content: string): boolean {\n const frontmatter = parseFrontmatter(content);\n return typeof frontmatter.amistioDocumentId === \"string\" && frontmatter.amistioDocumentId.trim().length > 0;\n}\n\nfunction classifyLegacyDocument(repoPath: string, content: string): DocumentType {\n const haystack = `${repoPath} ${inferTitle(content, repoPath)}`.toLowerCase();\n if (/\\b(prompt|prompts|instruction|instructions|copilot|agent|skill)\\b/.test(haystack)) return \"prompt\";\n if (/\\b(adr|decision|decisions|rfc)\\b/.test(haystack)) return \"decision\";\n if (/\\b(architecture|architectural|design|system|technical|tech-spec)\\b/.test(haystack)) return \"architecture\";\n if (/\\b(feature|features|spec|requirements|prd|story|stories)\\b/.test(haystack)) return \"feature\";\n if (/\\b(memory|memories|lesson|lessons|mistake|mistakes|learning|retro|retrospective)\\b/.test(haystack)) return \"memory\";\n if (/\\b(plan|plans|roadmap|milestone|todo|task|tasks)\\b/.test(haystack)) return \"plan\";\n if (/\\b(workflow|workflows|runbook|playbook|process|procedure|ops)\\b/.test(haystack)) return \"workflow\";\n return \"context\";\n}\n\nfunction canonicalImportPath(sourcePath: string, documentType: DocumentType): string {\n if (isCanonicalControlPlanePath(sourcePath)) {\n return sourcePath;\n }\n if (isLegacyControlPlanePath(sourcePath)) {\n return `docs/${sourcePath}`;\n }\n const baseSlug = slugFromPath(sourcePath);\n return `${documentFolderByType[documentType]}/imported/${baseSlug}.md`;\n}\n\nfunction uniqueDestinationPath(basePath: string, sourcePath: string, usedPaths: Set<string>): string {\n if (!usedPaths.has(basePath)) {\n usedPaths.add(basePath);\n return basePath;\n }\n const extension = path.posix.extname(basePath) || \".md\";\n const directory = path.posix.dirname(basePath);\n const basename = path.posix.basename(basePath, extension);\n const uniquePath = `${directory}/${basename}-${hashText(sourcePath, 8)}${extension}`;\n usedPaths.add(uniquePath);\n return uniquePath;\n}\n\nfunction isControlPlanePath(repoPath: string): boolean {\n return isCanonicalControlPlanePath(repoPath) || isLegacyControlPlanePath(repoPath);\n}\n\nfunction isCanonicalControlPlanePath(repoPath: string): boolean {\n const [firstSegment, secondSegment] = normalizeRepoPath(repoPath).split(\"/\");\n return firstSegment === \"docs\" && Boolean(secondSegment && (controlPlaneRoots as readonly string[]).includes(secondSegment));\n}\n\nfunction isLegacyControlPlanePath(repoPath: string): boolean {\n const [firstSegment] = repoPath.split(\"/\");\n return Boolean(firstSegment && (controlPlaneRoots as readonly string[]).includes(firstSegment));\n}\n\nfunction inferTitle(content: string, repoPath: string): string {\n const body = stripFrontmatter(content);\n const heading = body.split(\"\\n\").find((line) => /^#\\s+/.test(line))?.replace(/^#\\s+/, \"\").trim();\n if (heading) return heading;\n const basename = path.posix.basename(repoPath, path.posix.extname(repoPath)).replace(/[-_]+/g, \" \").trim();\n return titleCase(basename || \"Imported Document\");\n}\n\nfunction stripFrontmatter(content: string): string {\n if (!content.startsWith(\"---\\n\")) return content;\n const end = content.indexOf(\"\\n---\", 4);\n if (end === -1) return content;\n const closingLineEnd = content.indexOf(\"\\n\", end + 4);\n return closingLineEnd === -1 ? \"\" : content.slice(closingLineEnd + 1);\n}\n\nfunction slugFromPath(repoPath: string): string {\n const withoutExtension = repoPath.replace(/\\.(md|mdx)$/i, \"\");\n const slug = withoutExtension.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\").slice(0, 90);\n return slug || \"imported-document\";\n}\n\nfunction titleCase(value: string): string {\n return value.replace(/\\b\\w/g, (match) => match.toUpperCase());\n}\n\nfunction stableImportDocumentId(accountId: string, projectId: string, repositoryLinkId: string, sourcePath: string): string {\n return `doc_import_${hashText(`${accountId}\\0${projectId}\\0${repositoryLinkId}\\0${sourcePath}`, 24)}`;\n}\n\nfunction hashText(value: string, length: number): string {\n return createHash(\"sha256\").update(value).digest(\"hex\").slice(0, length);\n}\n\nfunction normalizeRepoPath(value: string): string {\n return value.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\").replace(/^\\/+/, \"\");\n}\n\nasync function runGit(args: string[]): Promise<string> {\n const { stdout } = await execFileAsync(\"git\", args, { maxBuffer: 10 * 1024 * 1024 });\n return stdout.trim();\n}", "import { spawn } from \"node:child_process\";\nimport path from \"node:path\";\nimport type { RunnerInvocationChannel } from \"@amistio/shared\";\n\nexport interface BackgroundRunnerArgsOptions {\n apiUrl: string;\n runnerId: string;\n root: string;\n tool?: string;\n invocationChannel?: RunnerInvocationChannel;\n toolCommand?: string;\n model?: string;\n session: string;\n intervalSeconds: number;\n maxIterations?: number;\n stream: boolean;\n verbose?: boolean;\n}\n\nexport interface RunnerActionResult {\n succeeded: boolean;\n message: string;\n error?: string;\n}\n\nexport function buildBackgroundRunnerArgs(options: BackgroundRunnerArgsOptions): string[] {\n const args = [\n \"run\",\n \"--watch\",\n \"--api-url\",\n options.apiUrl,\n \"--runner-id\",\n options.runnerId,\n \"--root\",\n path.resolve(options.root),\n \"--session\",\n options.session,\n \"--interval-seconds\",\n String(options.intervalSeconds)\n ];\n if (options.tool) {\n args.push(\"--tool\", options.tool);\n }\n if (options.invocationChannel) {\n args.push(\"--invocation-channel\", options.invocationChannel);\n }\n if (options.toolCommand) {\n args.push(\"--tool-command\", options.toolCommand);\n }\n if (options.model) {\n args.push(\"--model\", options.model);\n }\n if (options.maxIterations !== undefined) {\n args.push(\"--max-iterations\", String(options.maxIterations));\n }\n if (!options.stream) {\n args.push(\"--no-stream\");\n }\n if (options.verbose) {\n args.push(\"--verbose\");\n }\n return args;\n}\n\nexport async function runOfficialCliUpdate(): Promise<RunnerActionResult> {\n const result = await runOfficialUpdateProcess(\"npm\", [\"install\", \"-g\", \"@amistio/cli\"], 120_000);\n if (result.exitCode === 0) {\n return { succeeded: true, message: \"Official Amistio CLI update command completed.\" };\n }\n return { succeeded: false, message: \"Official Amistio CLI update command failed.\", error: result.output || `npm exited with code ${result.exitCode}.` };\n}\n\nexport function runOfficialUpdateProcess(command: string, args: string[], timeoutMs: number): Promise<{ exitCode: number; output: string }> {\n return new Promise((resolve) => {\n const child = spawn(command, args, { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n let output = \"\";\n const updateTimeout = setTimeout(() => {\n output += \"Timed out while running official CLI update.\\n\";\n child.kill(\"SIGTERM\");\n }, timeoutMs);\n child.stdout?.on(\"data\", (chunk: Buffer) => { output += chunk.toString(\"utf8\"); });\n child.stderr?.on(\"data\", (chunk: Buffer) => { output += chunk.toString(\"utf8\"); });\n child.on(\"error\", (error) => {\n clearTimeout(updateTimeout);\n resolve({ exitCode: 1, output: error.message });\n });\n child.on(\"close\", (code) => {\n clearTimeout(updateTimeout);\n resolve({ exitCode: code ?? 1, output: truncateProcessOutput(output) });\n });\n });\n}\n\nfunction truncateProcessOutput(value: string): string {\n const trimmed = value.trim();\n return trimmed.length > 1200 ? `${trimmed.slice(0, 1200)}...` : trimmed;\n}", "import { execFile } from \"node:child_process\";\nimport { mkdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport type { WorkItem } from \"@amistio/shared\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface GitWorktreeIsolation {\n branch: string;\n baseRevision: string;\n implementationScopeId: string;\n repositoryLockId?: string;\n worktreeKey: string;\n worktreePath: string;\n}\n\nexport function needsGitWorktreeIsolation(workItem: WorkItem): boolean {\n return (workItem.workKind ?? \"implementation\") === \"implementation\";\n}\n\nexport function resolveWorktreeIdentity(workItem: WorkItem): Pick<GitWorktreeIsolation, \"branch\" | \"implementationScopeId\" | \"repositoryLockId\" | \"worktreeKey\"> {\n const implementationScopeId = workItem.controllingAdrId ?? workItem.implementationScopeId ?? workItem.impactDocumentId ?? workItem.reviewDocumentId ?? workItem.generatedDraftId ?? workItem.workItemId;\n const slug = workIsolationSlug(implementationScopeId, workItem.title);\n return {\n implementationScopeId,\n branch: workItem.executionBranch ?? `amistio/work/${slug}`,\n worktreeKey: workItem.executionWorktreeKey ?? `amistio/worktrees/${slug}`,\n ...(workItem.repositoryLockId ? { repositoryLockId: workItem.repositoryLockId } : {})\n };\n}\n\nexport async function prepareGitWorktreeIsolation(rootDir: string, workItem: WorkItem): Promise<GitWorktreeIsolation> {\n const identity = resolveWorktreeIdentity(workItem);\n const repoRoot = await gitOutput(rootDir, [\"rev-parse\", \"--show-toplevel\"]).catch((error: unknown) => {\n throw new Error(`Git worktree isolation requires a paired Git checkout: ${errorMessage(error)}`);\n });\n const currentHead = await gitOutput(repoRoot, [\"rev-parse\", \"HEAD\"]);\n await assertBaseRevision(repoRoot, workItem.baseRevision, currentHead);\n const baseRevision = currentHead;\n const worktreePath = localWorktreePath(repoRoot, identity.worktreeKey);\n\n if (await pathExists(worktreePath)) {\n await assertExistingWorktree(worktreePath, identity.branch);\n return { ...identity, baseRevision, worktreePath };\n }\n\n await mkdir(path.dirname(worktreePath), { recursive: true });\n const branchExists = await gitCommandSucceeds(repoRoot, [\"show-ref\", \"--verify\", \"--quiet\", `refs/heads/${identity.branch}`]);\n const worktreeArgs = branchExists ? [\"worktree\", \"add\", worktreePath, identity.branch] : [\"worktree\", \"add\", \"-b\", identity.branch, worktreePath, baseRevision];\n await gitOutput(repoRoot, worktreeArgs).catch((error: unknown) => {\n throw new Error(`Could not create Git worktree ${identity.worktreeKey} on ${identity.branch}: ${errorMessage(error)}`);\n });\n\n return { ...identity, baseRevision, worktreePath };\n}\n\nfunction localWorktreePath(repoRoot: string, worktreeKey: string): string {\n const repoName = path.basename(repoRoot);\n const worktreeSlug = worktreeKey.split(\"/\").filter(Boolean).pop() ?? \"work\";\n return path.join(path.dirname(repoRoot), `${repoName}.worktrees`, worktreeSlug);\n}\n\nasync function assertExistingWorktree(worktreePath: string, branch: string): Promise<void> {\n await gitOutput(worktreePath, [\"rev-parse\", \"--is-inside-work-tree\"]);\n const currentBranch = await gitOutput(worktreePath, [\"branch\", \"--show-current\"]);\n if (currentBranch && currentBranch !== branch) {\n throw new Error(`Existing worktree is on ${currentBranch}; expected ${branch}.`);\n }\n}\n\nasync function assertBaseRevision(repoRoot: string, baseRevision: string | undefined, currentHead: string): Promise<void> {\n if (!baseRevision || baseRevision === currentHead) {\n return;\n }\n\n const revisionExists = await gitCommandSucceeds(repoRoot, [\"cat-file\", \"-e\", `${baseRevision}^{commit}`]);\n if (!revisionExists) {\n throw new Error(`Work item base revision ${baseRevision} is not available in this checkout; sync the repository before running implementation work.`);\n }\n\n const isAncestor = await gitCommandSucceeds(repoRoot, [\"merge-base\", \"--is-ancestor\", baseRevision, currentHead]);\n if (!isAncestor) {\n throw new Error(`Work item base revision ${baseRevision} is not an ancestor of ${currentHead}; refresh the work item before implementation.`);\n }\n}\n\nasync function gitOutput(cwd: string, args: string[]): Promise<string> {\n const { stdout } = await execFileAsync(\"git\", args, { cwd, maxBuffer: 1024 * 1024 });\n return stdout.trim();\n}\n\nasync function gitCommandSucceeds(cwd: string, args: string[]): Promise<boolean> {\n return execFileAsync(\"git\", args, { cwd }).then(() => true, () => false);\n}\n\nasync function pathExists(value: string): Promise<boolean> {\n return stat(value).then(() => true, () => false);\n}\n\nfunction workIsolationSlug(scopeId: string, title: string): string {\n const scopeSlug = slugify(scopeId);\n const titleSlug = slugify(title).slice(0, 32);\n const combined = titleSlug && !scopeSlug.includes(titleSlug) ? `${scopeSlug}-${titleSlug}` : scopeSlug;\n return combined.slice(0, 96).replace(/-+$/g, \"\") || \"work\";\n}\n\nfunction slugify(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\") || \"work\";\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}", "import { readFileSync } from \"node:fs\";\n\ninterface CliPackageJson {\n version?: unknown;\n}\n\nexport function readCliPackageVersion(): string {\n const packageJson = JSON.parse(readFileSync(new URL(\"../package.json\", import.meta.url), \"utf8\")) as CliPackageJson;\n if (typeof packageJson.version !== \"string\" || !packageJson.version.trim()) {\n throw new Error(\"@amistio/cli package version is missing.\");\n }\n return packageJson.version.trim();\n}\n\nexport const CLI_VERSION = readCliPackageVersion();"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["createHash", "writeFile", "os", "path", "z", "normalizeRepoPath", "mkdir", "path", "mkdir", "readFile", "stat", "writeFile", "path", "path", "mkdir", "writeFile", "readFile", "stat", "z", "path", "mkdir", "writeFile", "path", "mkdir", "path", "writeFile", "writeFile", "os", "path", "path", "os", "writeFile", "runner", "spawn", "createHash", "mkdir", "readdir", "readFile", "writeFile", "os", "path", "mkdir", "readdir", "readFile", "stat", "writeFile", "path", "readFile", "mkdir", "path", "writeFile", "exists", "readdir", "stat", "mkdir", "readFile", "writeFile", "os", "path", "createHash", "createHash", "execFile", "createHash", "readdir", "readFile", "stat", "path", "promisify", "execFileAsync", "promisify", "execFile", "controlPlaneRoots", "path", "runGit", "stat", "readFile", "inferTitle", "normalizeRepoPath", "readdir", "normalizeRepoPath", "controlPlaneRoots", "inferTitle", "path", "createHash", "runGit", "execFileAsync", "spawn", "path", "execFile", "mkdir", "stat", "path", "promisify", "execFileAsync", "errorMessage", "writeFile", "path", "record", "
|
|
3
|
+
"sources": ["../src/index.ts", "../../shared/src/schemas.ts", "../../shared/src/api-url.ts", "../../shared/src/brain-documents.ts", "../../shared/src/repo-metadata.ts", "../../shared/src/repository-link.ts", "../../shared/src/sync.ts", "../../shared/src/next-action.ts", "../src/bootstrap.ts", "../src/credential-store.ts", "../src/control-plane.ts", "../src/api-client.ts", "../src/orchestrator.ts", "../src/local-tool-runner.ts", "../src/runner-daemon.ts", "../src/runner-service.ts", "../src/session-policy.ts", "../src/sync.ts", "../src/tool-session-store.ts", "../src/work-runner.ts", "../src/runner-status.ts", "../src/runner-resources.ts", "../src/importer.ts", "../src/runner-actions.ts", "../src/git-worktree.ts", "../src/version.ts"],
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env node\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { AMISTIO_API_URL_ENV, computeProjectNextAction, formatProjectNextAction, isOfficialAmistioApiUrl, officialAmistioApiUrl, parseRepositoryCloneUrl, type GeneratedBrainArtifact, type ProjectNextAction, type RepoLinkMetadata, type RepositoryLinkItem, type RunnerCommandItem, type RunnerCommandKind, type RunnerEffectiveInvocationChannel, type RunnerInvocationChannel, type RunnerPreferenceSource, type RunnerPreferenceStatus, type RunnerToolCapability, type RunnerToolName, type RunnerToolSelection, type SessionDecision, type SessionPolicy, type SessionResumabilityScope, type ToolSessionItem, type WorkItem, type WorkStatus } from \"@amistio/shared\";\nimport { cloneOrValidateRepository } from \"./bootstrap.js\";\nimport { credentialKey, LocalCredentialStore } from \"./credential-store.js\";\nimport { initControlPlane, inspectControlPlane, readProjectLink, resolvePairingRoot, writeProjectLink } from \"./control-plane.js\";\nimport { ApiClient, type ActivityEventMutation, type RunnerHeartbeatMetadata, type WorkStatusTelemetry } from \"./api-client.js\";\nimport { createOrchestrationPrompt, writePromptFile } from \"./orchestrator.js\";\nimport { createToolRunPreview, detectLocalTools, isLocalToolName, runLocalTool, type DetectedLocalTool, type LocalToolRunResult } from \"./local-tool-runner.js\";\nimport { currentRunnerMode, listRunnerDaemonMetadata, markRunnerDaemonStopped, restartRunnerDaemonProcess, runnerDaemonRuntimeStatus, runnerDaemonUptime, startRunnerDaemon, stopRunnerDaemonProcess } from \"./runner-daemon.js\";\nimport { createRunnerServiceDescriptor, detectRunnerServicePlatform, installRunnerService, readRunnerServiceMetadata, removeRunnerService, runnerServiceRuntimeStatus } from \"./runner-service.js\";\nimport { normalizeSessionPolicy, selectToolSession } from \"./session-policy.js\";\nimport { collectDirtyDocumentsForPush, collectSyncStatus, materializeBrainDocuments } from \"./sync.js\";\nimport { LocalToolSessionStore } from \"./tool-session-store.js\";\nimport { createWorkExecutionPrompt, parseAssistantAnswerResult, parseBrainGenerationArtifacts, parseImpactPreviewResult } from \"./work-runner.js\";\nimport { formatWatchIdleLine, formatWatchStartupContext, shouldPrintWatchState, stableRunnerId, watchStateKey, type WatchStateLog } from \"./runner-status.js\";\nimport { formatRunnerResourceUsage, sampleCurrentRunnerResourceUsage } from \"./runner-resources.js\";\nimport { buildImportedBrainDocuments, importSkipCounts, inspectLocalRepository, scanLegacyDocuments } from \"./importer.js\";\nimport { buildBackgroundRunnerArgs, runOfficialCliUpdate } from \"./runner-actions.js\";\nimport { needsGitWorktreeIsolation, prepareGitWorktreeIsolation, resolveWorktreeIdentity, type GitWorktreeIsolation } from \"./git-worktree.js\";\nimport { CLI_VERSION } from \"./version.js\";\n\nconst program = new Command();\nconst defaultRoot = process.env.INIT_CWD ?? process.cwd();\nconst apiUrlOptionDescription = `Amistio API URL override (or ${AMISTIO_API_URL_ENV})`;\n\nprogram.name(\"amistio\").description(\"Amistio project brain CLI\").version(CLI_VERSION);\n\nprogram\n .command(\"init\")\n .description(\"Create Amistio control-plane folders for a new project\")\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { root: string }) => {\n const created = await initControlPlane(options.root);\n console.log(created.length ? `Created ${created.length} control-plane folders.` : \"Control-plane folders already exist.\");\n });\n\nprogram\n .command(\"onboard\")\n .description(\"Inspect and prepare an existing repository for Amistio\")\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { root: string }) => {\n const result = await inspectControlPlane(options.root);\n console.log(`Present: ${result.present.length ? result.present.join(\", \") : \"none\"}`);\n console.log(`Missing: ${result.missing.length ? result.missing.join(\", \") : \"none\"}`);\n if (result.missing.length) {\n console.log(\"Run `amistio init` to create missing control-plane folders without overwriting existing files.\");\n }\n });\n\nprogram\n .command(\"bootstrap\")\n .description(\"Clone a linked repository locally, prepare the control plane, and pair it with Amistio\")\n .requiredOption(\"--repo-url <url>\", \"Linked repository clone URL\")\n .requiredOption(\"--target <path>\", \"Local checkout target path\")\n .requiredOption(\"--account <accountId>\", \"Amistio account ID\")\n .requiredOption(\"--project <projectId>\", \"Amistio project ID\")\n .requiredOption(\"--repository-link <repositoryLinkId>\", \"Existing repository link ID\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .requiredOption(\"--pairing-code <code>\", \"Short-lived pairing code from the Amistio app\")\n .option(\"--default-branch <branch>\", \"Default branch\", \"main\")\n .action(async (options: { repoUrl: string; target: string; account: string; project: string; repositoryLink: string; apiUrl: string; pairingCode: string; defaultBranch: string }) => {\n const parsedRepoUrl = parseRepositoryCloneUrl(options.repoUrl);\n const checkout = await cloneOrValidateRepository({ repoUrl: parsedRepoUrl.cloneUrl, targetDir: options.target });\n await initControlPlane(checkout.targetDir);\n\n const pairing = await new ApiClient({\n apiUrl: options.apiUrl,\n accountId: options.account\n }).consumePairingSession({\n projectId: options.project,\n pairingCode: options.pairingCode,\n repositoryLinkId: options.repositoryLink,\n repoName: parsedRepoUrl.repoName,\n repoFingerprint: createRepoFingerprint(options.account, options.project, options.repositoryLink),\n defaultBranch: options.defaultBranch\n });\n\n const filePath = await writeProjectLink(checkout.targetDir, {\n amistioAccountId: options.account,\n amistioProjectId: options.project,\n repositoryLinkId: pairing.repositoryLink.repositoryLinkId,\n defaultBranch: options.defaultBranch,\n lastSyncedRevision: 0\n });\n\n await new LocalCredentialStore().set(credentialKey(options.account, options.project, pairing.repositoryLink.repositoryLinkId), pairing.token);\n\n console.log(checkout.status === \"cloned\" ? `Cloned repository to ${checkout.targetDir}.` : `Validated existing checkout at ${checkout.targetDir}.`);\n console.log(`Pairing confirmed for ${pairing.repositoryLink.repoName}.`);\n console.log(`Wrote non-secret project metadata to ${filePath}.`);\n console.log(`Next: cd ${formatShellArg(checkout.targetDir)} && amistio run${formatApiUrlFlag(options.apiUrl)} --watch`);\n });\n\nprogram\n .command(\"import\")\n .description(\"Pair an existing checkout and import legacy Markdown docs as accepted brain records\")\n .argument(\"[code]\", \"Short-lived pairing code from the Amistio app\")\n .option(\"--pairing-code <code>\", \"Short-lived pairing code from the Amistio app\")\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--default-branch <branch>\", \"Default branch fallback\", \"main\")\n .option(\"--include <glob>\", \"Only import files matching a repo-relative glob\", collectRepeatedOption, [] as string[])\n .option(\"--exclude <glob>\", \"Exclude files matching a repo-relative glob\", collectRepeatedOption, [] as string[])\n .option(\"--max-file-kb <kb>\", \"Maximum Markdown file size to import\", parsePositiveInteger, 256)\n .option(\"--dry-run\", \"Inspect and print import candidates without consuming the code or uploading documents\")\n .action(async (code: string | undefined, options: { pairingCode?: string; root: string; apiUrl: string; defaultBranch: string; include: string[]; exclude: string[]; maxFileKb: number; dryRun?: boolean }) => {\n const pairingCode = (options.pairingCode ?? code)?.trim();\n if (!pairingCode) {\n throw new Error(\"Provide a pairing code as `amistio import <code>` or with `--pairing-code <code>`.\");\n }\n\n const repository = await inspectLocalRepository(options.root, options.defaultBranch);\n const scan = await scanLegacyDocuments({\n rootDir: repository.rootDir,\n include: options.include,\n exclude: options.exclude,\n maxFileKb: options.maxFileKb\n });\n const skipCounts = importSkipCounts(scan.skipped);\n\n console.log(`Repository: ${repository.repoName}`);\n console.log(`Root: ${repository.rootDir}`);\n console.log(`Default branch: ${repository.defaultBranch}`);\n if (repository.originRemoteWarning) {\n console.log(repository.originRemoteWarning);\n }\n console.log(`Import candidates: ${scan.candidates.length}`);\n console.log(formatImportSkipSummary(skipCounts));\n for (const candidate of scan.candidates.slice(0, 12)) {\n console.log(`- ${candidate.sourcePath} -> ${candidate.repoPath} (${candidate.documentType})`);\n }\n if (scan.candidates.length > 12) {\n console.log(`...and ${scan.candidates.length - 12} more.`);\n }\n\n if (options.dryRun) {\n console.log(\"Dry run complete. No pairing code was consumed and no files or Amistio records were written.\");\n return;\n }\n\n const parsedCloneUrl = repository.parsedCloneUrl;\n const pairing = await new ApiClient({ apiUrl: options.apiUrl }).importPairingSession({\n pairingCode,\n repoName: repository.repoName,\n repoFingerprint: repository.repoFingerprint,\n defaultBranch: repository.defaultBranch,\n ...(parsedCloneUrl ? { cloneUrl: parsedCloneUrl.cloneUrl } : {}),\n ...(parsedCloneUrl?.provider ? { provider: parsedCloneUrl.provider } : {}),\n ...(parsedCloneUrl?.repoOwner ? { repoOwner: parsedCloneUrl.repoOwner } : {}),\n ...(parsedCloneUrl?.repoFullName ? { repoFullName: parsedCloneUrl.repoFullName } : {})\n });\n\n await initControlPlane(repository.rootDir);\n const metadataFilePath = await writeProjectLink(repository.rootDir, {\n amistioAccountId: pairing.accountId,\n amistioProjectId: pairing.projectId,\n repositoryLinkId: pairing.repositoryLink.repositoryLinkId,\n defaultBranch: repository.defaultBranch,\n lastSyncedRevision: 0\n });\n await new LocalCredentialStore().set(credentialKey(pairing.accountId, pairing.projectId, pairing.repositoryLink.repositoryLinkId), pairing.token);\n\n const authenticatedClient = new ApiClient({ apiUrl: options.apiUrl, accountId: pairing.accountId, token: pairing.token });\n const { documents: existingDocuments } = await authenticatedClient.listBrainDocuments(pairing.projectId);\n const documents = buildImportedBrainDocuments({\n accountId: pairing.accountId,\n projectId: pairing.projectId,\n repositoryLinkId: pairing.repositoryLink.repositoryLinkId,\n candidates: scan.candidates,\n existingDocuments\n });\n\n if (documents.length) {\n await authenticatedClient.pushBrainDocuments(pairing.projectId, documents);\n }\n\n console.log(`Pairing confirmed for ${pairing.repositoryLink.repoName}; repository link ${pairing.repositoryLinkAction}.`);\n console.log(`Wrote non-secret project metadata to ${metadataFilePath}.`);\n console.log(`Imported ${documents.length} legacy document${documents.length === 1 ? \"\" : \"s\"} as accepted brain record${documents.length === 1 ? \"\" : \"s\"}.`);\n console.log(`Next: amistio sync status${formatApiUrlFlag(options.apiUrl)}`);\n });\n\nprogram\n .command(\"pair\")\n .description(\"Pair this repository with an Amistio web project\")\n .requiredOption(\"--account <accountId>\", \"Amistio account ID\")\n .requiredOption(\"--project <projectId>\", \"Amistio project ID\")\n .option(\"--repository-link <repositoryLinkId>\", \"Existing repository link ID\")\n .option(\"--default-branch <branch>\", \"Default branch\", \"main\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--pairing-code <code>\", \"Short-lived pairing code from the Amistio app\")\n .option(\"--token <token>\", \"Runner/device credential to store outside the repository\")\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { account: string; project: string; repositoryLink?: string; defaultBranch: string; apiUrl: string; pairingCode?: string; token?: string; root: string }, command: Command) => {\n const pairingRoot = await resolvePairingRoot(options.root, { explicitRoot: command.getOptionValueSource(\"root\") === \"cli\" });\n let repositoryLinkId = options.repositoryLink ?? `repo_${randomUUID()}`;\n let credential = options.token;\n\n if (options.pairingCode) {\n const pairing = await new ApiClient({\n apiUrl: options.apiUrl,\n accountId: options.account,\n ...(credential ? { token: credential } : {})\n }).consumePairingSession({\n projectId: options.project,\n pairingCode: options.pairingCode,\n repositoryLinkId,\n repoName: inferRepoName(pairingRoot),\n repoFingerprint: createRepoFingerprint(options.account, options.project, repositoryLinkId),\n defaultBranch: options.defaultBranch\n });\n repositoryLinkId = pairing.repositoryLink.repositoryLinkId;\n credential = credential ?? pairing.token;\n console.log(`Pairing confirmed for ${pairing.repositoryLink.repoName}.`);\n }\n\n const filePath = await writeProjectLink(pairingRoot, {\n amistioAccountId: options.account,\n amistioProjectId: options.project,\n repositoryLinkId,\n defaultBranch: options.defaultBranch,\n lastSyncedRevision: 0\n });\n\n if (credential) {\n await new LocalCredentialStore().set(credentialKey(options.account, options.project, repositoryLinkId), credential);\n }\n\n if (!options.pairingCode && apiUrlOverrideWasRequested(command)) {\n const session = await new ApiClient({\n apiUrl: options.apiUrl,\n accountId: options.account,\n ...(credential ? { token: credential } : {})\n }).createPairingSession(options.project);\n console.log(`Pairing code: ${session.pairingCode}`);\n console.log(`Expires at: ${session.expiresAt}`);\n }\n\n console.log(`Wrote non-secret project metadata to ${filePath}.`);\n });\n\nconst sync = program.command(\"sync\").description(\"Inspect or move project brain changes between the repo and Amistio\");\n\nsync\n .command(\"status\")\n .description(\"Show local sync status\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { apiUrl: string; root: string }) => {\n const metadata = await readProjectLink(options.root);\n if (!metadata) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n const webDocuments = context ? await context.client.listBrainDocuments(metadata.amistioProjectId).then((result) => result.documents).catch(() => []) : [];\n const report = await collectSyncStatus(options.root, webDocuments);\n console.log(`Paired project: ${metadata.amistioProjectId}`);\n console.log(`Repository link: ${metadata.repositoryLinkId}`);\n console.log(`Last synced revision: ${metadata.lastSyncedRevision}`);\n console.log(`Sync status: ${report.status}`);\n console.log(`Clean: ${report.counts.clean}; Pending: ${report.counts.pending}; Dirty: ${report.counts.dirty}; Conflicted: ${report.counts.conflicted}`);\n for (const item of report.items.filter((entry) => entry.status !== \"clean\")) {\n console.log(`${item.status}: ${item.repoPath} - ${item.reason}`);\n }\n });\n\nsync\n .command(\"pull\")\n .description(\"Pull approved web changes into the repository\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { apiUrl: string; root: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n\n const { documents } = await context.client.listBrainDocuments(context.metadata.amistioProjectId);\n const approvedDocuments = documents.filter((document) => document.syncState === \"approved\" || document.syncState === \"synced\");\n const result = await materializeBrainDocuments(options.root, approvedDocuments);\n for (const conflict of result.conflicts) {\n console.log(`conflicted: ${conflict}`);\n }\n if (result.conflicts.length) {\n process.exitCode = 1;\n return;\n }\n\n const latestRevision = Math.max(context.metadata.lastSyncedRevision, ...approvedDocuments.map((document) => document.revision));\n if (latestRevision !== context.metadata.lastSyncedRevision) {\n await writeProjectLink(options.root, { ...context.metadata, lastSyncedRevision: latestRevision });\n }\n console.log(result.written.length ? `Pulled ${result.written.length} approved document${result.written.length === 1 ? \"\" : \"s\"}.` : \"No approved web changes were pulled.\");\n });\n\nsync\n .command(\"push\")\n .description(\"Push local brain changes to Amistio for review\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { apiUrl: string; root: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n\n const dirtyDocuments = await collectDirtyDocumentsForPush(options.root, context.metadata);\n if (!dirtyDocuments.length) {\n console.log(\"No local brain changes were pushed.\");\n return;\n }\n\n const { documents } = await context.client.pushBrainDocuments(context.metadata.amistioProjectId, dirtyDocuments);\n const conflictedDocuments = documents.filter((document) => document.syncState === \"conflicted\" || document.status === \"conflicted\");\n if (conflictedDocuments.length) {\n for (const document of conflictedDocuments) {\n console.log(`conflicted: ${document.repoPath} - web and repository revisions both changed`);\n }\n process.exitCode = 1;\n return;\n }\n await materializeBrainDocuments(options.root, documents, { allowDirtyOverwrite: true });\n console.log(`Pushed ${documents.length} local document${documents.length === 1 ? \"\" : \"s\"} for web review.`);\n });\n\nconst work = program.command(\"work\").description(\"Inspect approved work items\");\n\nwork\n .command(\"list\")\n .description(\"List queued work without claiming it\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .action(async (options: { apiUrl: string; root: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n\n const [{ workItems }, { documents }, { runners }] = await Promise.all([\n context.client.listWorkItems(context.metadata.amistioProjectId),\n context.client.listBrainDocuments(context.metadata.amistioProjectId),\n context.client.listRunners(context.metadata.amistioProjectId).catch(() => ({ runners: [] }))\n ]);\n const nextAction = computeProjectNextAction({\n projectId: context.metadata.amistioProjectId,\n repositoryLinks: [createCliRepositoryLink(context.metadata, options.root)],\n documents,\n workItems,\n runnerHeartbeats: runners\n });\n console.log(`Next action: ${formatProjectNextAction(nextAction)}`);\n if (!workItems.length) {\n console.log(\"No work items are queued for this project.\");\n return;\n }\n\n for (const item of workItems) {\n console.log(`${item.workItemId} [${item.status}] ${item.title}`);\n }\n });\n\nwork\n .command(\"prompt\")\n .description(\"Print or write an approved work prompt without claiming a runner lease\")\n .argument(\"[workItemId]\", \"Work item ID. Defaults to the newest approved work item.\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--out <path>\", \"Write the prompt to a file instead of stdout\")\n .action(async (workItemId: string | undefined, options: { apiUrl: string; root: string; out?: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n\n const { workItems } = await context.client.listWorkItems(context.metadata.amistioProjectId);\n const workItem = selectPromptWorkItem(workItems, workItemId);\n if (!workItem) {\n console.log(workItemId ? `No work item found for ${workItemId}.` : \"No approved work item is ready for prompt export.\");\n return;\n }\n\n const prompt = await createRunnerWorkPrompt(context.client, context.metadata.amistioProjectId, workItem);\n if (options.out) {\n await writeFile(options.out, prompt, \"utf8\");\n console.log(`Wrote work prompt to ${options.out}.`);\n } else {\n console.log(prompt);\n }\n });\n\nprogram\n .command(\"tools\")\n .description(\"List local AI coding tools that the Amistio CLI can use\")\n .action(async () => {\n const tools = await detectLocalTools();\n for (const tool of tools) {\n const mode = tool.execution === \"sdk\" ? \"sdk\" : tool.execution === \"command\" ? \"cli\" : \"--\";\n console.log(`${tool.available ? \"yes\" : \"no \"} ${mode} ${tool.name} - ${tool.description}`);\n }\n console.log(\"custom - pass --tool-command to use any other local runner command.\");\n });\n\nprogram\n .command(\"orchestrate\")\n .description(\"Update the Amistio control plane through a user-installed local AI tool\")\n .argument(\"[goal...]\", \"Goal or next-step instruction for the orchestration pass\")\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--tool <name>\", \"Local tool to use: auto, none, opencode, claude, codex, copilot, gemini, aider, cursor-agent\", \"auto\")\n .option(\"--invocation-channel <channel>\", \"Local invocation channel: auto, sdk, or command\", parseInvocationChannel, \"auto\")\n .option(\"--model <model>\", \"Model to request when the selected local tool supports model selection\")\n .option(\"--tool-command <command>\", \"Custom local command. Use {promptFile} and {root} placeholders when supported\")\n .option(\"--session <policy>\", \"Tool session policy: auto, new, continue:<toolSessionId>, or none\", \"auto\")\n .option(\"--prompt-out <path>\", \"Write the generated orchestration prompt to a file before running\")\n .option(\"--dry-run\", \"Print the generated orchestration prompt without running a tool\")\n .option(\"--no-stream\", \"Capture local tool output instead of streaming it\")\n .action(async (goalParts: string[] | undefined, options: { root: string; tool: string; invocationChannel: RunnerInvocationChannel; toolCommand?: string; model?: string; session: string; promptOut?: string; dryRun?: boolean; stream: boolean }) => {\n const goal = goalParts?.join(\" \").trim() || \"Review the current repository state and update the Amistio control plane with the next useful orchestration steps.\";\n const prompt = await createOrchestrationPrompt({ rootDir: options.root, goal });\n\n if (options.promptOut) {\n const promptPath = await writePromptFile(options.promptOut, prompt);\n console.log(`Wrote orchestration prompt to ${promptPath}.`);\n }\n\n if (options.dryRun || options.tool === \"none\") {\n console.log(prompt);\n return;\n }\n\n const sessionPolicy = normalizeSessionPolicy(options.session);\n const preview = await createToolRunPreview({ rootDir: options.root, prompt, tool: options.tool, invocationChannel: options.invocationChannel, ...(options.toolCommand ? { toolCommand: options.toolCommand } : {}), ...(options.model ? { model: options.model } : {}) });\n console.log(`Running ${preview.toolName}: ${preview.displayCommand}`);\n const result = await runLocalTool({\n rootDir: options.root,\n prompt,\n tool: options.tool,\n invocationChannel: options.invocationChannel,\n ...(options.toolCommand ? { toolCommand: options.toolCommand } : {}),\n ...(options.model ? { model: options.model } : {}),\n streamOutput: options.stream,\n ...(sessionPolicy === \"none\" ? {} : { session: { toolSessionId: `local_orchestration_${randomUUID()}`, policy: sessionPolicy, decision: localSessionDecision(sessionPolicy) } })\n });\n if (!options.stream && result.stdout.trim()) {\n console.log(result.stdout.trim());\n }\n if (!options.stream && result.stderr.trim()) {\n console.error(result.stderr.trim());\n }\n if (result.exitCode !== 0) {\n process.exitCode = result.exitCode;\n }\n });\n\nprogram\n .command(\"run\")\n .description(\"Claim and run approved Amistio work locally\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--runner-id <runnerId>\", \"Stable runner ID\")\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--tool <name>\", \"Local tool to use: auto, none, opencode, claude, codex, copilot, gemini, aider, cursor-agent\")\n .option(\"--invocation-channel <channel>\", \"Local invocation channel: auto, sdk, or command\", parseInvocationChannel)\n .option(\"--model <model>\", \"Model to request when the selected local tool supports model selection\")\n .option(\"--tool-command <command>\", \"Custom local command. Use {promptFile} and {root} placeholders when supported\")\n .option(\"--session <policy>\", \"Tool session policy: auto, new, continue:<toolSessionId>, or none\", \"auto\")\n .option(\"--dry-run\", \"Claim work and print the generated execution prompt without running a tool\")\n .option(\"--watch\", \"Keep polling for approved work until stopped\")\n .option(\"--background\", \"Start a detached background runner that watches for approved work\")\n .option(\"--interval-seconds <seconds>\", \"Polling interval for --watch\", parsePositiveInteger, 10)\n .option(\"--max-iterations <count>\", \"Stop watch mode after this many polling attempts\", parsePositiveInteger)\n .option(\"--no-stream\", \"Capture local tool output instead of streaming it\")\n .option(\"--verbose\", \"Print detailed runner errors while watching\")\n .action(async (options: RunCommandOptions, command: Command) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n if (!context.token) {\n console.log(\"No local runner credential found. Run `amistio pair --pairing-code <code>` to store this machine credential.\");\n process.exitCode = 1;\n return;\n }\n\n const runnerId = options.runnerId ?? stableRunnerId({\n accountId: context.metadata.amistioAccountId,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n machineId: runnerMachineId()\n });\n const resolvedOptions = { ...options, runnerId };\n\n if (options.background) {\n if (options.dryRun) {\n console.log(\"Background runners cannot be started in dry-run mode.\");\n process.exitCode = 1;\n return;\n }\n\n const metadata = await startRunnerDaemon({\n accountId: context.metadata.amistioAccountId,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n runnerId,\n rootDir: path.resolve(options.root),\n apiUrl: options.apiUrl,\n args: buildBackgroundRunnerArgs(resolvedOptions)\n });\n console.log(`Started background runner ${metadata.runnerId} with PID ${metadata.pid}.`);\n if (metadata.logPath) {\n console.log(`Log: ${metadata.logPath}`);\n }\n return;\n }\n\n if (options.watch) {\n for (const line of formatWatchStartupContext({ runnerId, projectId: context.metadata.amistioProjectId, repositoryLinkId: context.metadata.repositoryLinkId, apiUrl: options.apiUrl, intervalSeconds: options.intervalSeconds })) {\n console.log(line);\n }\n }\n\n let offlineSent = false;\n const sendOfflineHeartbeat = async (message?: string) => {\n if (offlineSent || options.dryRun) return;\n offlineSent = true;\n await context.client.sendRunnerHeartbeat(context.metadata.amistioProjectId, runnerId, context.metadata.repositoryLinkId, \"offline\", { ...runnerHeartbeatMetadata(), ...(message ? { preferenceMessage: message } : {}) }).catch(() => undefined);\n };\n const handleShutdownSignal = (signal: NodeJS.Signals) => {\n void sendOfflineHeartbeat(`Runner stopped by ${signal}.`).finally(() => {\n process.exit(signal === \"SIGINT\" ? 130 : 143);\n });\n };\n process.once(\"SIGINT\", handleShutdownSignal);\n process.once(\"SIGTERM\", handleShutdownSignal);\n\n let iterations = 0;\n let lastWatchStateLog: WatchStateLog | undefined;\n try {\n while (true) {\n iterations += 1;\n const result = await runWatchIteration({\n command,\n context,\n options: resolvedOptions,\n runnerId\n });\n\n if (!options.watch || options.dryRun) {\n if (result.exitCode !== 0) {\n process.exitCode = result.exitCode;\n }\n return;\n }\n\n if (result.status === \"idle\" && result.nextAction) {\n const nowMs = Date.now();\n if (shouldPrintWatchState(result.nextAction, lastWatchStateLog, nowMs)) {\n console.log(formatWatchIdleLine(result.nextAction, options.intervalSeconds));\n lastWatchStateLog = { key: watchStateKey(result.nextAction), printedAtMs: nowMs };\n }\n }\n\n if (result.stopRunner) {\n return;\n }\n\n if (options.maxIterations !== undefined && iterations >= options.maxIterations) {\n console.log(`Runner stopped after ${iterations} polling attempt${iterations === 1 ? \"\" : \"s\"}.`);\n return;\n }\n await delay(options.intervalSeconds * 1000);\n }\n } finally {\n process.off(\"SIGINT\", handleShutdownSignal);\n process.off(\"SIGTERM\", handleShutdownSignal);\n await sendOfflineHeartbeat(\"Runner stopped.\");\n }\n });\n\nconst runner = program.command(\"runner\").description(\"Manage local Amistio runner processes\");\n\nrunner\n .command(\"status\")\n .description(\"Show background runner status for the paired repository\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--runner-id <runnerId>\", \"Limit status to one runner ID\")\n .action(async (options: { apiUrl: string; root: string; runnerId?: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n\n const records = await listRunnerDaemonMetadata({\n accountId: context.metadata.amistioAccountId,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n ...(options.runnerId ? { runnerId: options.runnerId } : {})\n });\n const runners = await context.client.listRunners(context.metadata.amistioProjectId).then((result) => result.runners).catch(() => []);\n if (!records.length) {\n console.log(\"No background runner metadata found for this paired repository.\");\n if (runners.length) {\n console.log(`Last runner heartbeat: ${runners[0]!.runnerId} ${runners[0]!.status} at ${runners[0]!.lastSeenAt}.`);\n console.log(`Resource usage: ${formatRunnerResourceUsage(runners[0]!.resourceUsage)}`);\n }\n return;\n }\n\n for (const record of records) {\n const runtimeStatus = runnerDaemonRuntimeStatus(record);\n const heartbeat = runners.find((item) => item.runnerId === record.runnerId);\n console.log(`Runner ${record.runnerId}: ${runtimeStatus}`);\n console.log(` PID: ${record.pid}`);\n console.log(` Uptime: ${runtimeStatus === \"running\" ? runnerDaemonUptime(record) : \"not running\"}`);\n console.log(` Project: ${record.projectId}`);\n console.log(` Repository link: ${record.repositoryLinkId}`);\n console.log(` Root: ${record.rootDir}`);\n console.log(` API: ${record.apiUrl}`);\n console.log(` Host: ${record.hostname}`);\n if (record.logPath) {\n console.log(` Log: ${record.logPath}`);\n }\n if (heartbeat) {\n console.log(` Last heartbeat: ${heartbeat.status} at ${heartbeat.lastSeenAt}${heartbeat.version ? ` (${heartbeat.version})` : \"\"}`);\n }\n console.log(` Resource usage: ${formatRunnerResourceUsage(heartbeat?.resourceUsage)}`);\n }\n });\n\nrunner\n .command(\"stop\")\n .description(\"Stop a background runner for the paired repository\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--runner-id <runnerId>\", \"Runner ID to stop when multiple background runners exist\")\n .action(async (options: { apiUrl: string; root: string; runnerId?: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n\n const records = await listRunnerDaemonMetadata({\n accountId: context.metadata.amistioAccountId,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n ...(options.runnerId ? { runnerId: options.runnerId } : {})\n });\n if (!records.length) {\n console.log(\"No background runner metadata found for this paired repository.\");\n return;\n }\n if (records.length > 1 && !options.runnerId) {\n console.log(`Multiple background runners found: ${records.map((record) => record.runnerId).join(\", \")}. Pass --runner-id to stop one.`);\n process.exitCode = 1;\n return;\n }\n\n const record = records[0]!;\n const existingRunner = await context.client.listRunners(context.metadata.amistioProjectId).then((result) => result.runners.find((runner) => runner.runnerId === record.runnerId && runner.repositoryLinkId === context.metadata.repositoryLinkId)).catch(() => undefined);\n const stopResult = await stopRunnerDaemonProcess(record);\n await markRunnerDaemonStopped(record);\n await context.client.sendRunnerHeartbeat(context.metadata.amistioProjectId, record.runnerId, context.metadata.repositoryLinkId, \"offline\", {\n version: CLI_VERSION,\n mode: \"background\",\n hostname: record.hostname,\n ...(existingRunner?.resourceUsage ? { resourceUsage: existingRunner.resourceUsage } : {})\n }).catch(() => undefined);\n console.log(stopResult === \"stopped\" ? `Stopped background runner ${record.runnerId}.` : `Marked background runner ${record.runnerId} stopped; process was not running.`);\n });\n\nconst runnerService = runner.command(\"service\").description(\"Manage a user-level startup service for the paired runner\");\n\nrunnerService\n .command(\"install\")\n .description(\"Install a user-level startup service for this paired repository runner\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--runner-id <runnerId>\", \"Stable runner ID\")\n .option(\"--tool <name>\", \"Local tool to use: auto, opencode, claude, codex, copilot, gemini, aider, cursor-agent\")\n .option(\"--invocation-channel <channel>\", \"Local invocation channel: auto, sdk, or command\", parseInvocationChannel)\n .option(\"--model <model>\", \"Model to request when the selected local tool supports model selection\")\n .option(\"--session <policy>\", \"Tool session policy: auto, new, continue:<toolSessionId>, or none\", \"auto\")\n .option(\"--interval-seconds <seconds>\", \"Polling interval for the service runner\", parsePositiveInteger, 10)\n .option(\"--no-stream\", \"Capture local tool output instead of streaming it\")\n .option(\"--verbose\", \"Print detailed runner errors\")\n .option(\"--dry-run\", \"Print the startup service descriptor without installing it\")\n .action(async (options: { apiUrl: string; root: string; runnerId?: string; tool?: string; invocationChannel?: RunnerInvocationChannel; model?: string; session: string; intervalSeconds: number; stream: boolean; verbose?: boolean; dryRun?: boolean }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n if (!context.token) {\n console.log(\"No local runner credential found. Run `amistio pair --pairing-code <code>` to store this machine credential.\");\n process.exitCode = 1;\n return;\n }\n\n const platform = detectRunnerServicePlatform();\n if (platform === \"unsupported\") {\n console.log(\"Startup services are supported for user-level launchd on macOS and systemd user services on Linux.\");\n process.exitCode = 1;\n return;\n }\n\n const runnerId = options.runnerId ?? stableRunnerId({\n accountId: context.metadata.amistioAccountId,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n machineId: runnerMachineId()\n });\n const args = buildBackgroundRunnerArgs({ ...options, runnerId, apiUrl: options.apiUrl, root: options.root });\n const serviceInput = {\n accountId: context.metadata.amistioAccountId,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n runnerId,\n rootDir: path.resolve(options.root),\n apiUrl: options.apiUrl,\n args,\n platform\n };\n\n if (options.dryRun) {\n const descriptor = createRunnerServiceDescriptor(serviceInput);\n console.log(`Startup service file: ${descriptor.metadata.serviceFilePath}`);\n console.log(descriptor.content.trim());\n return;\n }\n\n try {\n const metadata = await installRunnerService(serviceInput);\n console.log(`Installed startup service ${metadata.serviceName}.`);\n console.log(`Service file: ${metadata.serviceFilePath}`);\n } catch (error) {\n console.error(errorMessage(error));\n process.exitCode = 1;\n }\n });\n\nrunnerService\n .command(\"status\")\n .description(\"Show the startup service status for this paired repository runner\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--runner-id <runnerId>\", \"Stable runner ID\")\n .action(async (options: { apiUrl: string; root: string; runnerId?: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n const runnerId = options.runnerId ?? stableRunnerId({\n accountId: context.metadata.amistioAccountId,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n machineId: runnerMachineId()\n });\n const metadata = await readRunnerServiceMetadata({ accountId: context.metadata.amistioAccountId, projectId: context.metadata.amistioProjectId, repositoryLinkId: context.metadata.repositoryLinkId, runnerId });\n if (!metadata) {\n console.log(\"No startup service metadata found for this paired repository runner.\");\n return;\n }\n const runtimeStatus = await runnerServiceRuntimeStatus(metadata);\n console.log(`Startup service ${metadata.serviceName}: ${runtimeStatus}`);\n console.log(` Platform: ${metadata.platform}`);\n console.log(` File: ${metadata.serviceFilePath}`);\n console.log(` Root: ${metadata.rootDir}`);\n console.log(` API: ${metadata.apiUrl}`);\n });\n\nrunnerService\n .command(\"remove\")\n .description(\"Remove the startup service for this paired repository runner\")\n .option(\"--api-url <url>\", apiUrlOptionDescription, defaultApiUrl())\n .option(\"--root <path>\", \"Repository root\", defaultRoot)\n .option(\"--runner-id <runnerId>\", \"Stable runner ID\")\n .action(async (options: { apiUrl: string; root: string; runnerId?: string }) => {\n const context = await loadPairedApiContext(options.root, options.apiUrl);\n if (!context) {\n console.log(\"Repository is not paired. Run `amistio pair` first.\");\n return;\n }\n const runnerId = options.runnerId ?? stableRunnerId({\n accountId: context.metadata.amistioAccountId,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n machineId: runnerMachineId()\n });\n const removed = await removeRunnerService({ accountId: context.metadata.amistioAccountId, projectId: context.metadata.amistioProjectId, repositoryLinkId: context.metadata.repositoryLinkId, runnerId });\n console.log(removed ? `Removed startup service ${removed.serviceName}.` : \"No startup service metadata found for this paired repository runner.\");\n });\n\ninterface RunCommandOptions {\n apiUrl: string;\n runnerId?: string;\n root: string;\n tool?: string;\n invocationChannel?: RunnerInvocationChannel;\n toolCommand?: string;\n model?: string;\n session: string;\n dryRun?: boolean;\n watch?: boolean;\n background?: boolean;\n intervalSeconds: number;\n maxIterations?: number;\n stream: boolean;\n verbose?: boolean;\n}\n\ntype ResolvedRunCommandOptions = RunCommandOptions & { runnerId: string };\n\nasync function runWatchIteration({ command, context, options, runnerId }: { command: Command; context: PairedApiContext; options: ResolvedRunCommandOptions; runnerId: string }): ReturnType<typeof runNextWorkItem> {\n try {\n return await runNextWorkItem({\n apiClient: context.client,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n runnerId,\n root: options.root,\n sessionPolicy: normalizeSessionPolicy(options.session),\n ...(command.getOptionValueSource(\"tool\") === \"cli\" && options.tool ? { explicitTool: options.tool } : {}),\n ...(command.getOptionValueSource(\"invocationChannel\") === \"cli\" && options.invocationChannel ? { explicitInvocationChannel: options.invocationChannel } : {}),\n ...(command.getOptionValueSource(\"model\") === \"cli\" && options.model ? { explicitModel: options.model } : {}),\n ...(options.toolCommand ? { toolCommand: options.toolCommand } : {}),\n dryRun: Boolean(options.dryRun),\n stream: options.stream,\n commandContext: {\n accountId: context.metadata.amistioAccountId,\n apiUrl: options.apiUrl,\n backgroundArgs: buildBackgroundRunnerArgs(options),\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n root: options.root,\n runnerId\n },\n suppressIdleOutput: Boolean(options.watch),\n verbose: Boolean(options.verbose)\n });\n } catch (error) {\n if (!options.watch) {\n throw error;\n }\n const detail = truncateLogExcerpt(errorDetail(error));\n const message = \"Runner hit an error while watching and will keep listening.\";\n if (options.verbose) {\n console.error(`${message}\\n${detail}`);\n } else {\n console.error(`${message} Run with --verbose for details.`);\n }\n await Promise.allSettled([\n context.client.sendRunnerHeartbeat(context.metadata.amistioProjectId, runnerId, context.metadata.repositoryLinkId, \"blocked\", { ...runnerHeartbeatMetadata(), preferenceMessage: message }),\n context.client.recordRunnerLog(context.metadata.amistioProjectId, {\n runnerId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n status: \"failed\",\n message,\n error: detail,\n machineId: runnerMachineId()\n })\n ]);\n return { status: \"failed\", exitCode: 1, message };\n }\n}\n\nasync function runNextWorkItem({\n apiClient,\n dryRun,\n projectId,\n repositoryLinkId,\n root,\n runnerId,\n sessionPolicy,\n stream,\n explicitModel,\n explicitInvocationChannel,\n explicitTool,\n toolCommand,\n commandContext,\n suppressIdleOutput,\n verbose\n}: {\n apiClient: ApiClient;\n dryRun: boolean;\n projectId: string;\n repositoryLinkId: string;\n root: string;\n runnerId: string;\n sessionPolicy: SessionPolicy;\n stream: boolean;\n explicitModel?: string;\n explicitInvocationChannel?: RunnerInvocationChannel;\n explicitTool?: string;\n suppressIdleOutput?: boolean;\n verbose?: boolean;\n commandContext: RunnerCommandExecutionContext;\n toolCommand?: string;\n}): Promise<{ status: \"completed\" | \"failed\" | \"idle\" | \"preview\" | \"blocked\"; exitCode: number; nextAction?: ProjectNextAction; message?: string; stopRunner?: boolean }> {\n const toolConfig = await resolveRunnerToolConfig({\n apiClient,\n projectId,\n ...(explicitInvocationChannel ? { explicitInvocationChannel } : {}),\n ...(explicitModel ? { explicitModel } : {}),\n ...(explicitTool ? { explicitTool } : {}),\n ...(toolCommand ? { toolCommand } : {})\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, toolConfig.ready ? \"online\" : \"blocked\", runnerHeartbeatMetadata(toolConfig));\n const commandResult = await runPendingRunnerCommand(apiClient, commandContext, runnerHeartbeatMetadata(toolConfig));\n if (commandResult.handled) {\n if (commandResult.message) {\n console.log(commandResult.message);\n }\n return { status: commandResult.succeeded ? \"completed\" : \"failed\", exitCode: commandResult.succeeded ? 0 : 1, ...(commandResult.stopRunner ? { stopRunner: true } : {}) };\n }\n if (!toolConfig.ready) {\n console.log(toolConfig.message);\n return { status: \"blocked\", exitCode: 1 };\n }\n const result = await apiClient.claimWork(projectId, runnerId, repositoryLinkId, 300, runnerIsolationCapabilityMetadata());\n if (!result.workItem) {\n const nextAction = await loadProjectNextAction(apiClient, projectId, repositoryLinkId, root);\n const message = formatProjectNextAction(nextAction);\n if (!suppressIdleOutput) {\n console.log(message);\n }\n return { status: \"idle\", exitCode: 0, nextAction, message };\n }\n\n const prompt = await createRunnerWorkPrompt(apiClient, projectId, result.workItem);\n if (dryRun || toolConfig.tool === \"none\") {\n console.log(prompt);\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n return { status: \"preview\", exitCode: 0 };\n }\n\n const worktreeIsolation = await prepareWorktreeForClaimedItem({ apiClient, projectId, repositoryLinkId, root, runnerId, toolConfig, workItem: result.workItem });\n if (worktreeIsolation.status === \"blocked\") {\n return { status: \"blocked\", exitCode: 1, message: worktreeIsolation.message };\n }\n const executionRoot = worktreeIsolation.isolation?.worktreePath ?? root;\n const isolationTelemetry = workItemIsolationTelemetry(result.workItem, worktreeIsolation.isolation);\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"running\", {\n ...runnerHeartbeatMetadata(toolConfig),\n currentWorkItemId: result.workItem.workItemId,\n ...(isolationTelemetry.implementationScopeId ? { currentImplementationScopeId: isolationTelemetry.implementationScopeId } : {}),\n ...(isolationTelemetry.executionWorktreeKey ? { currentWorktreeKey: isolationTelemetry.executionWorktreeKey } : {}),\n ...(isolationTelemetry.executionBranch ? { currentBranch: isolationTelemetry.executionBranch } : {})\n });\n\n const preview = await createToolRunPreview({ rootDir: executionRoot, prompt, tool: toolConfig.tool, invocationChannel: toolConfig.requestedInvocationChannel ?? \"auto\", ...(toolCommand ? { toolCommand } : {}), ...(toolConfig.model ? { model: toolConfig.model } : {}) });\n const sessionContext = await prepareToolSession({\n apiClient,\n projectId,\n repositoryLinkId,\n runnerId,\n machineId: runnerMachineId(),\n sessionPolicy: result.workItem.sessionPolicy ?? sessionPolicy,\n toolName: preview.toolName,\n ...(toolConfig.model ? { model: toolConfig.model } : {}),\n supportsSessionReuse: preview.supportsSessionReuse,\n resumabilityScope: preview.resumabilityScope,\n workItem: result.workItem,\n isolationTelemetry\n });\n console.log(`Claimed ${result.workItem.workItemId}. Running ${preview.toolName}: ${preview.displayCommand}`);\n await recordRunnerMilestone(apiClient, projectId, result.workItem, runnerId, repositoryLinkId, {\n status: \"running\",\n summary: `Local runner started ${preview.toolName} execution.`,\n idempotencyKey: `runner_milestone_started_${result.workItem.workItemId}_${result.workItem.attempt}`,\n metadata: { tool: preview.toolName, invocationChannel: toolConfig.requestedInvocationChannel ?? \"auto\" }\n });\n const startedAt = Date.now();\n const providerSessionStore = new LocalToolSessionStore();\n const providerSessionId = sessionContext.toolSession\n ? await providerSessionStore.getProviderSessionId(sessionContext.toolSession.toolSessionId, preview.toolName)\n : undefined;\n let toolResult: LocalToolRunResult;\n try {\n toolResult = await runLocalTool({\n rootDir: executionRoot,\n prompt,\n tool: toolConfig.tool,\n invocationChannel: toolConfig.requestedInvocationChannel ?? \"auto\",\n ...(toolCommand ? { toolCommand } : {}),\n ...(toolConfig.model ? { model: toolConfig.model } : {}),\n streamOutput: stream,\n ...(sessionContext.toolSession\n ? {\n session: {\n toolSessionId: sessionContext.toolSession.toolSessionId,\n policy: sessionContext.policy,\n decision: sessionContext.decision,\n ...(providerSessionId ? { providerSessionId } : {})\n }\n }\n : {})\n });\n } catch (error) {\n const detail = truncateLogExcerpt(errorDetail(error));\n const durationMs = Date.now() - startedAt;\n const message = `${preview.toolName} failed before returning a result.`;\n await Promise.allSettled([\n apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig)),\n markToolSessionBlocked(apiClient, projectId, sessionContext.toolSession, errorMessage(error)),\n apiClient.updateWorkStatus(projectId, result.workItem.workItemId, \"failed\", `run_failed_${result.workItem.workItemId}_${result.workItem.attempt}_${runnerId}`, runnerId, {\n ...isolationTelemetry,\n tool: preview.toolName,\n ...(toolConfig.model ? { model: toolConfig.model } : {}),\n durationMs,\n message,\n error: detail,\n ...(sessionContext.toolSession ? { toolSessionId: sessionContext.toolSession.toolSessionId } : {}),\n sessionPolicy: sessionContext.policy,\n sessionDecision: sessionContext.decision,\n sessionDecisionReason: sessionContext.reason\n }),\n recordRunnerMilestone(apiClient, projectId, result.workItem, runnerId, repositoryLinkId, {\n status: \"failed\",\n summary: message,\n idempotencyKey: `runner_milestone_tool_throw_${result.workItem.workItemId}_${result.workItem.attempt}`,\n metadata: { tool: preview.toolName, error: detail }\n })\n ]);\n if (verbose || !stream) {\n console.error(detail);\n }\n return { status: \"failed\", exitCode: 1, message };\n }\n if (sessionContext.toolSession && toolResult.providerSessionId) {\n await providerSessionStore.setProviderSessionId(sessionContext.toolSession.toolSessionId, preview.toolName, toolResult.providerSessionId);\n }\n if (!stream && toolResult.stdout.trim()) {\n console.log(toolResult.stdout.trim());\n }\n if (!stream && toolResult.stderr.trim()) {\n console.error(toolResult.stderr.trim());\n }\n\n if (result.workItem.workKind === \"brainGeneration\" || result.workItem.workKind === \"planRevision\") {\n return finalizeBrainGenerationWork({\n apiClient,\n durationMs: Date.now() - startedAt,\n projectId,\n repositoryLinkId,\n runnerId,\n sessionContext,\n toolConfig,\n toolName: preview.toolName,\n toolResult,\n workItem: result.workItem\n });\n }\n\n if (result.workItem.workKind === \"assistantQuestion\") {\n return finalizeAssistantQuestionWork({\n apiClient,\n durationMs: Date.now() - startedAt,\n projectId,\n repositoryLinkId,\n runnerId,\n sessionContext,\n toolConfig,\n toolName: preview.toolName,\n toolResult,\n workItem: result.workItem\n });\n }\n\n if (result.workItem.workKind === \"impactPreview\") {\n return finalizeImpactPreviewWork({\n apiClient,\n durationMs: Date.now() - startedAt,\n projectId,\n repositoryLinkId,\n root,\n runnerId,\n sessionContext,\n toolConfig,\n toolName: preview.toolName,\n toolResult,\n workItem: result.workItem\n });\n }\n\n const finalStatus = toolResult.exitCode === 0 ? \"completed\" : \"failed\";\n const durationMs = Date.now() - startedAt;\n const failureExcerpt = toolResult.exitCode === 0 ? undefined : truncateLogExcerpt(toolResult.stderr || toolResult.stdout);\n const updatedToolSession = await finalizeToolSession({\n apiClient,\n projectId,\n status: finalStatus,\n runnerId,\n workItemId: result.workItem.workItemId,\n stdout: toolResult.stdout,\n ...(sessionContext.toolSession ? { session: sessionContext.toolSession } : {}),\n ...(toolResult.messageCount !== undefined ? { messageCount: toolResult.messageCount } : {}),\n ...(toolResult.tokensIn !== undefined ? { tokensIn: toolResult.tokensIn } : {}),\n ...(toolResult.tokensOut !== undefined ? { tokensOut: toolResult.tokensOut } : {}),\n ...(toolResult.costUsd !== undefined ? { costUsd: toolResult.costUsd } : {})\n });\n const statusResult = await apiClient.updateWorkStatus(\n projectId,\n result.workItem.workItemId,\n finalStatus,\n `run_${result.workItem.workItemId}_${randomUUID()}`,\n runnerId,\n {\n tool: preview.toolName,\n ...(toolResult.model ? { model: toolResult.model } : {}),\n durationMs,\n message: `${preview.toolName} exited with code ${toolResult.exitCode}.`,\n ...isolationTelemetry,\n sessionPolicy: sessionContext.policy,\n sessionDecision: sessionContext.decision,\n sessionDecisionReason: sessionContext.reason,\n ...(updatedToolSession ? { toolSessionId: updatedToolSession.toolSessionId } : {}),\n ...(updatedToolSession?.sessionGroupKey ? { sessionGroupKey: updatedToolSession.sessionGroupKey } : {}),\n ...(toolResult.tokensIn !== undefined ? { tokensIn: toolResult.tokensIn } : {}),\n ...(toolResult.tokensOut !== undefined ? { tokensOut: toolResult.tokensOut } : {}),\n ...(toolResult.costUsd !== undefined ? { costUsd: toolResult.costUsd } : {}),\n ...(failureExcerpt ? { error: failureExcerpt } : {})\n }\n );\n await recordRunnerMilestone(apiClient, projectId, result.workItem, runnerId, repositoryLinkId, {\n status: finalStatus,\n summary: `${preview.toolName} exited with code ${toolResult.exitCode}.`,\n idempotencyKey: `runner_milestone_finished_${result.workItem.workItemId}_${statusResult.workItem.idempotencyKey}`,\n metadata: { tool: preview.toolName, durationMs, exitCode: toolResult.exitCode, verificationSummary: finalStatus === \"completed\" ? \"Local execution reported completion.\" : \"Local execution reported failure.\", executionWorktreeKey: isolationTelemetry.executionWorktreeKey ?? \"\", executionBranch: isolationTelemetry.executionBranch ?? \"\" }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n const durationSeconds = Math.round(durationMs / 1000);\n console.log(`Marked ${statusResult.workItem.workItemId} ${statusResult.workItem.status} after ${durationSeconds}s.`);\n\n return { status: finalStatus, exitCode: toolResult.exitCode };\n}\n\nasync function prepareWorktreeForClaimedItem({ apiClient, projectId, repositoryLinkId, root, runnerId, toolConfig, workItem }: {\n apiClient: ApiClient;\n projectId: string;\n repositoryLinkId: string;\n root: string;\n runnerId: string;\n toolConfig: RunnerToolConfig;\n workItem: WorkItem;\n}): Promise<{ status: \"ready\"; isolation?: GitWorktreeIsolation } | { status: \"blocked\"; message: string }> {\n if (!needsGitWorktreeIsolation(workItem)) {\n return { status: \"ready\" };\n }\n\n const identity = resolveWorktreeIdentity(workItem);\n try {\n const isolation = await prepareGitWorktreeIsolation(root, workItem);\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"running\",\n summary: `Prepared Git worktree ${isolation.worktreeKey} on ${isolation.branch}.`,\n idempotencyKey: `runner_milestone_worktree_${workItem.workItemId}_${workItem.attempt}`,\n metadata: { executionWorktreeKey: isolation.worktreeKey, executionBranch: isolation.branch, implementationScopeId: isolation.implementationScopeId }\n });\n return { status: \"ready\", isolation };\n } catch (error) {\n const message = errorMessage(error);\n const telemetry = workItemIsolationTelemetry(workItem, { ...identity, baseRevision: workItem.baseRevision ?? \"unknown\", worktreePath: \"\" });\n const statusResult = await apiClient.updateWorkStatus(projectId, workItem.workItemId, \"blocked\", `worktree_${workItem.workItemId}_${randomUUID()}`, runnerId, {\n ...telemetry,\n message,\n blockerReason: message,\n error: message\n });\n await recordRunnerMilestone(apiClient, projectId, statusResult.workItem, runnerId, repositoryLinkId, {\n status: \"blocked\",\n summary: message,\n idempotencyKey: `runner_milestone_worktree_blocked_${workItem.workItemId}_${statusResult.workItem.idempotencyKey}`,\n metadata: { executionWorktreeKey: telemetry.executionWorktreeKey ?? \"\", executionBranch: telemetry.executionBranch ?? \"\", implementationScopeId: telemetry.implementationScopeId ?? \"\" }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"blocked\", {\n ...runnerHeartbeatMetadata(toolConfig),\n currentWorkItemId: workItem.workItemId,\n ...(telemetry.implementationScopeId ? { currentImplementationScopeId: telemetry.implementationScopeId } : {}),\n ...(telemetry.executionWorktreeKey ? { currentWorktreeKey: telemetry.executionWorktreeKey } : {}),\n ...(telemetry.executionBranch ? { currentBranch: telemetry.executionBranch } : {})\n });\n console.error(message);\n return { status: \"blocked\", message };\n }\n}\n\nfunction workItemIsolationTelemetry(workItem: WorkItem, isolation: GitWorktreeIsolation | undefined): WorkStatusTelemetryLike {\n const implementationScopeId = isolation?.implementationScopeId ?? workItem.implementationScopeId;\n const executionBranch = isolation?.branch ?? workItem.executionBranch;\n const executionWorktreeKey = isolation?.worktreeKey ?? workItem.executionWorktreeKey;\n const repositoryLockId = isolation?.repositoryLockId ?? workItem.repositoryLockId;\n return {\n ...(needsGitWorktreeIsolation(workItem) ? { isolationMode: \"gitWorktree\" as const } : workItem.isolationMode ? { isolationMode: workItem.isolationMode } : {}),\n ...(workItem.claimLeaseId ? { claimLeaseId: workItem.claimLeaseId } : {}),\n ...(workItem.controllingAdrId ? { controllingAdrId: workItem.controllingAdrId } : {}),\n ...(implementationScopeId ? { implementationScopeId } : {}),\n ...(executionBranch ? { executionBranch } : {}),\n ...(executionWorktreeKey ? { executionWorktreeKey } : {}),\n ...(repositoryLockId ? { repositoryLockId } : {}),\n ...(isolation?.baseRevision && isolation.baseRevision !== \"unknown\" ? { baseRevision: isolation.baseRevision } : {}),\n machineId: runnerMachineId()\n };\n}\n\ntype WorkStatusTelemetryLike = Pick<WorkStatusTelemetry, \"baseRevision\" | \"claimLeaseId\" | \"controllingAdrId\" | \"executionBranch\" | \"executionWorktreeKey\" | \"implementationScopeId\" | \"isolationMode\" | \"machineId\" | \"repositoryLockId\">;\n\nasync function recordRunnerMilestone(apiClient: ApiClient, projectId: string, workItem: WorkItem, runnerId: string, repositoryLinkId: string, input: Omit<ActivityEventMutation, \"eventType\" | \"runnerId\" | \"repositoryLinkId\" | \"relatedWorkItemId\" | \"relatedDocumentId\" | \"generatedDraftId\">): Promise<void> {\n await apiClient.recordActivityEvent(projectId, {\n eventType: \"runnerMilestone\",\n runnerId,\n repositoryLinkId,\n relatedWorkItemId: workItem.workItemId,\n ...(workItem.reviewDocumentId ? { relatedDocumentId: workItem.reviewDocumentId } : workItem.impactDocumentId ? { relatedDocumentId: workItem.impactDocumentId } : {}),\n ...(workItem.generatedDraftId ? { generatedDraftId: workItem.generatedDraftId } : {}),\n ...input\n }).catch(() => undefined);\n}\n\ninterface RunnerCommandExecutionContext {\n accountId: string;\n apiUrl: string;\n backgroundArgs: string[];\n projectId: string;\n repositoryLinkId: string;\n root: string;\n runnerId: string;\n}\n\ninterface RunnerCommandExecutionResult {\n handled: boolean;\n succeeded: boolean;\n stopRunner?: boolean;\n message?: string;\n}\n\nasync function runPendingRunnerCommand(apiClient: ApiClient, context: RunnerCommandExecutionContext, heartbeatMetadata: RunnerHeartbeatMetadata): Promise<RunnerCommandExecutionResult> {\n const { commands } = await apiClient.listRunnerCommands(context.projectId, context.runnerId, context.repositoryLinkId).catch(() => ({ commands: [] }));\n const command = commands\n .filter((item) => item.status === \"pending\" || item.status === \"acknowledged\" || item.status === \"running\")\n .sort((first, second) => Date.parse(first.createdAt) - Date.parse(second.createdAt))[0];\n if (!command) {\n return { handled: false, succeeded: true };\n }\n\n await updateRunnerCommandStatus(apiClient, context, command, \"acknowledged\", \"Command acknowledged by local runner.\");\n await updateRunnerCommandStatus(apiClient, context, command, \"running\", `Running ${runnerCommandLabel(command.commandKind)} command.`);\n\n const result = await executeRunnerCommand(command, context);\n await updateRunnerCommandStatus(apiClient, context, command, result.succeeded ? \"completed\" : \"failed\", result.message, result.error);\n if (command.commandKind === \"remove\" && result.succeeded) {\n await new LocalCredentialStore().delete(credentialKey(context.accountId, context.projectId, context.repositoryLinkId));\n }\n if (result.stopRunner && command.commandKind === \"remove\") {\n await apiClient.sendRunnerHeartbeat(context.projectId, context.runnerId, context.repositoryLinkId, \"offline\", heartbeatMetadata).catch(() => undefined);\n }\n\n return { handled: true, succeeded: result.succeeded, message: result.message, ...(result.stopRunner ? { stopRunner: true } : {}) };\n}\n\nasync function updateRunnerCommandStatus(apiClient: ApiClient, context: RunnerCommandExecutionContext, command: RunnerCommandItem, status: \"acknowledged\" | \"running\" | \"completed\" | \"failed\", message: string, error?: string): Promise<RunnerCommandItem> {\n const result = await apiClient.updateRunnerCommand(context.projectId, command.commandId, {\n runnerId: context.runnerId,\n repositoryLinkId: context.repositoryLinkId,\n status,\n idempotencyKey: `runner_command_${command.commandId}_${status}_${randomUUID()}`,\n message,\n ...(error ? { error } : {})\n });\n return result.command;\n}\n\nasync function executeRunnerCommand(command: RunnerCommandItem, context: RunnerCommandExecutionContext): Promise<{ succeeded: boolean; stopRunner?: boolean; message: string; error?: string }> {\n if (command.commandKind === \"remove\") {\n return { succeeded: true, stopRunner: true, message: \"Runner credential revoked. This local runner will stop after removing its stored credential.\" };\n }\n\n if (command.commandKind === \"restart\") {\n return restartCurrentRunner(context);\n }\n\n return runOfficialCliUpdate();\n}\n\nasync function restartCurrentRunner(context: RunnerCommandExecutionContext): Promise<{ succeeded: boolean; stopRunner?: boolean; message: string; error?: string }> {\n if (currentRunnerMode() !== \"background\") {\n return { succeeded: false, message: \"Foreground runners cannot be restarted remotely. Stop and start the local command manually.\" };\n }\n\n const [metadata] = await listRunnerDaemonMetadata({ accountId: context.accountId, projectId: context.projectId, repositoryLinkId: context.repositoryLinkId, runnerId: context.runnerId });\n if (!metadata) {\n return { succeeded: false, message: \"Background runner metadata was not found, so restart needs manual action.\" };\n }\n\n try {\n const replacement = await restartRunnerDaemonProcess(metadata, context.backgroundArgs);\n return { succeeded: true, stopRunner: true, message: `Replacement background runner started with PID ${replacement.pid}.` };\n } catch (error) {\n return { succeeded: false, message: \"Background restart failed.\", error: errorMessage(error) };\n }\n}\n\nfunction runnerCommandLabel(commandKind: RunnerCommandKind): string {\n if (commandKind === \"update\") return \"update\";\n if (commandKind === \"restart\") return \"restart\";\n return \"remove\";\n}\n\nasync function finalizeBrainGenerationWork({\n apiClient,\n durationMs,\n projectId,\n repositoryLinkId,\n runnerId,\n sessionContext,\n toolConfig,\n toolName,\n toolResult,\n workItem\n}: {\n apiClient: ApiClient;\n durationMs: number;\n projectId: string;\n repositoryLinkId: string;\n runnerId: string;\n sessionContext: PreparedToolSession;\n toolConfig: RunnerToolConfig;\n toolName: string;\n toolResult: LocalToolRunResult;\n workItem: WorkItem;\n}): Promise<{ status: \"completed\" | \"failed\"; exitCode: number }> {\n let artifacts: GeneratedBrainArtifact[] | undefined;\n let generationError: string | undefined;\n if (toolResult.exitCode === 0) {\n try {\n artifacts = parseBrainGenerationArtifacts(`${toolResult.stdout}\\n${toolResult.stderr}`);\n } catch (error) {\n generationError = errorMessage(error);\n }\n } else {\n generationError = truncateLogExcerpt(toolResult.stderr || toolResult.stdout) || `${toolName} exited with code ${toolResult.exitCode}.`;\n }\n\n const finalStatus = artifacts ? \"completed\" : \"failed\";\n const updatedToolSession = await finalizeToolSession({\n apiClient,\n projectId,\n status: finalStatus,\n runnerId,\n workItemId: workItem.workItemId,\n stdout: toolResult.stdout,\n ...(sessionContext.toolSession ? { session: sessionContext.toolSession } : {}),\n ...(toolResult.messageCount !== undefined ? { messageCount: toolResult.messageCount } : {}),\n ...(toolResult.tokensIn !== undefined ? { tokensIn: toolResult.tokensIn } : {}),\n ...(toolResult.tokensOut !== undefined ? { tokensOut: toolResult.tokensOut } : {}),\n ...(toolResult.costUsd !== undefined ? { costUsd: toolResult.costUsd } : {})\n });\n const sessionTelemetry = {\n sessionPolicy: sessionContext.policy,\n sessionDecision: sessionContext.decision,\n sessionDecisionReason: sessionContext.reason,\n ...(updatedToolSession ? { toolSessionId: updatedToolSession.toolSessionId } : {}),\n ...(updatedToolSession?.sessionGroupKey ? { sessionGroupKey: updatedToolSession.sessionGroupKey } : {})\n };\n\n if (artifacts) {\n const completionMessage = workItem.workKind === \"planRevision\" ? `${toolName} returned a revised plan for review.` : `${toolName} generated ${artifacts.length} brain artifact${artifacts.length === 1 ? \"\" : \"s\"}.`;\n const result = await apiClient.submitBrainGenerationResult(projectId, workItem.workItemId, {\n status: \"completed\",\n runnerId,\n idempotencyKey: `generation_${workItem.workItemId}_${randomUUID()}`,\n artifacts,\n tool: toolName,\n durationMs,\n ...sessionTelemetry,\n message: completionMessage\n });\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"completed\",\n summary: completionMessage,\n idempotencyKey: `runner_milestone_generation_completed_${workItem.workItemId}_${result.workItem.idempotencyKey}`,\n metadata: { tool: toolName, durationMs, artifactCount: result.documents.length, verificationSummary: \"Generated artifacts were accepted by the Amistio API for review.\" }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n console.log(workItem.workKind === \"planRevision\" ? \"Revised plan returned for review.\" : `Generated ${result.documents.length} brain artifact${result.documents.length === 1 ? \"\" : \"s\"} for review.`);\n return { status: \"completed\", exitCode: 0 };\n }\n\n const failedResult = await apiClient.submitBrainGenerationResult(projectId, workItem.workItemId, {\n status: \"failed\",\n runnerId,\n idempotencyKey: `generation_${workItem.workItemId}_${randomUUID()}`,\n tool: toolName,\n durationMs,\n ...sessionTelemetry,\n message: `${toolName} did not produce valid brain artifacts.`,\n ...(generationError ? { error: generationError } : {})\n });\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"failed\",\n summary: generationError ?? `${toolName} did not produce valid brain artifacts.`,\n idempotencyKey: `runner_milestone_generation_failed_${workItem.workItemId}_${failedResult.workItem.idempotencyKey}`,\n metadata: { tool: toolName, durationMs, verificationSummary: \"Generation output could not be parsed into approved artifact JSON.\" }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n console.error(generationError ?? \"Local runner generation failed.\");\n return { status: \"failed\", exitCode: toolResult.exitCode || 1 };\n}\n\nasync function finalizeAssistantQuestionWork({\n apiClient,\n durationMs,\n projectId,\n repositoryLinkId,\n runnerId,\n sessionContext,\n toolConfig,\n toolName,\n toolResult,\n workItem\n}: {\n apiClient: ApiClient;\n durationMs: number;\n projectId: string;\n repositoryLinkId: string;\n runnerId: string;\n sessionContext: PreparedToolSession;\n toolConfig: RunnerToolConfig;\n toolName: string;\n toolResult: LocalToolRunResult;\n workItem: WorkItem;\n}): Promise<{ status: \"completed\" | \"failed\"; exitCode: number }> {\n let answerResult: ReturnType<typeof parseAssistantAnswerResult> | undefined;\n let answerError: string | undefined;\n if (toolResult.exitCode === 0) {\n try {\n answerResult = parseAssistantAnswerResult(`${toolResult.stdout}\\n${toolResult.stderr}`);\n } catch (error) {\n answerError = errorMessage(error);\n }\n } else {\n answerError = truncateLogExcerpt(toolResult.stderr || toolResult.stdout) || `${toolName} exited with code ${toolResult.exitCode}.`;\n }\n\n const finalStatus = answerResult ? \"completed\" : \"failed\";\n const updatedToolSession = await finalizeToolSession({\n apiClient,\n projectId,\n status: finalStatus,\n runnerId,\n workItemId: workItem.workItemId,\n stdout: toolResult.stdout,\n ...(sessionContext.toolSession ? { session: sessionContext.toolSession } : {}),\n ...(toolResult.messageCount !== undefined ? { messageCount: toolResult.messageCount } : {}),\n ...(toolResult.tokensIn !== undefined ? { tokensIn: toolResult.tokensIn } : {}),\n ...(toolResult.tokensOut !== undefined ? { tokensOut: toolResult.tokensOut } : {}),\n ...(toolResult.costUsd !== undefined ? { costUsd: toolResult.costUsd } : {})\n });\n const sessionTelemetry = {\n sessionPolicy: sessionContext.policy,\n sessionDecision: sessionContext.decision,\n sessionDecisionReason: sessionContext.reason,\n ...(updatedToolSession ? { toolSessionId: updatedToolSession.toolSessionId } : {}),\n ...(updatedToolSession?.sessionGroupKey ? { sessionGroupKey: updatedToolSession.sessionGroupKey } : {})\n };\n\n if (answerResult) {\n const result = await apiClient.submitAssistantResult(projectId, workItem.workItemId, {\n status: \"completed\",\n runnerId,\n idempotencyKey: `assistant_${workItem.workItemId}_${randomUUID()}`,\n answer: answerResult.answer,\n sourceBoundary: answerResult.sourceBoundary,\n citations: answerResult.citations,\n tool: toolName,\n durationMs,\n ...sessionTelemetry,\n message: `${toolName} returned a project knowledge answer.`\n });\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"completed\",\n summary: `${toolName} returned a project knowledge answer.`,\n idempotencyKey: `runner_milestone_assistant_completed_${workItem.workItemId}_${result.workItem.idempotencyKey}`,\n metadata: { tool: toolName, durationMs, sourceBoundary: answerResult.sourceBoundary, citationCount: answerResult.citations.length }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n console.log(\"Project knowledge answer returned.\");\n return { status: \"completed\", exitCode: 0 };\n }\n\n const failedResult = await apiClient.submitAssistantResult(projectId, workItem.workItemId, {\n status: \"failed\",\n runnerId,\n idempotencyKey: `assistant_${workItem.workItemId}_${randomUUID()}`,\n tool: toolName,\n durationMs,\n ...sessionTelemetry,\n message: `${toolName} did not produce a valid project knowledge answer.`,\n ...(answerError ? { error: answerError } : {})\n });\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"failed\",\n summary: answerError ?? `${toolName} did not produce a valid project knowledge answer.`,\n idempotencyKey: `runner_milestone_assistant_failed_${workItem.workItemId}_${failedResult.workItem.idempotencyKey}`,\n metadata: { tool: toolName, durationMs, verificationSummary: \"Assistant output did not include a valid structured answer.\" }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n console.error(answerError ?? \"Local runner assistant answer failed.\");\n return { status: \"failed\", exitCode: toolResult.exitCode || 1 };\n}\n\nasync function finalizeImpactPreviewWork({\n apiClient,\n durationMs,\n projectId,\n repositoryLinkId,\n root,\n runnerId,\n sessionContext,\n toolConfig,\n toolName,\n toolResult,\n workItem\n}: {\n apiClient: ApiClient;\n durationMs: number;\n projectId: string;\n repositoryLinkId: string;\n root: string;\n runnerId: string;\n sessionContext: PreparedToolSession;\n toolConfig: RunnerToolConfig;\n toolName: string;\n toolResult: LocalToolRunResult;\n workItem: WorkItem;\n}): Promise<{ status: \"completed\" | \"failed\"; exitCode: number }> {\n let report = undefined as ReturnType<typeof parseImpactPreviewResult> | undefined;\n let previewError: string | undefined;\n if (toolResult.exitCode === 0) {\n try {\n report = parseImpactPreviewResult(`${toolResult.stdout}\\n${toolResult.stderr}`);\n } catch (error) {\n previewError = errorMessage(error);\n }\n } else {\n previewError = truncateLogExcerpt(toolResult.stderr || toolResult.stdout) || `${toolName} exited with code ${toolResult.exitCode}.`;\n }\n\n const finalStatus = report ? \"completed\" : \"failed\";\n const updatedToolSession = await finalizeToolSession({\n apiClient,\n projectId,\n status: finalStatus,\n runnerId,\n workItemId: workItem.workItemId,\n stdout: toolResult.stdout,\n ...(sessionContext.toolSession ? { session: sessionContext.toolSession } : {}),\n ...(toolResult.messageCount !== undefined ? { messageCount: toolResult.messageCount } : {}),\n ...(toolResult.tokensIn !== undefined ? { tokensIn: toolResult.tokensIn } : {}),\n ...(toolResult.tokensOut !== undefined ? { tokensOut: toolResult.tokensOut } : {}),\n ...(toolResult.costUsd !== undefined ? { costUsd: toolResult.costUsd } : {})\n });\n const sessionTelemetry = {\n sessionPolicy: sessionContext.policy,\n sessionDecision: sessionContext.decision,\n sessionDecisionReason: sessionContext.reason,\n ...(updatedToolSession ? { toolSessionId: updatedToolSession.toolSessionId } : {}),\n ...(updatedToolSession?.sessionGroupKey ? { sessionGroupKey: updatedToolSession.sessionGroupKey } : {})\n };\n\n if (report) {\n const metadata = await readProjectLink(root).catch(() => undefined);\n const result = await apiClient.submitImpactPreviewResult(projectId, workItem.workItemId, {\n status: \"completed\",\n runnerId,\n idempotencyKey: `impact_${workItem.workItemId}_${randomUUID()}`,\n report: {\n ...report,\n analyzedRepoRevision: report.analyzedRepoRevision ?? metadata?.lastSyncedRevision\n },\n tool: toolName,\n durationMs,\n ...sessionTelemetry,\n message: `${toolName} returned an implementation impact preview.`\n });\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"completed\",\n summary: `${toolName} returned an implementation impact preview.`,\n idempotencyKey: `runner_milestone_impact_completed_${workItem.workItemId}_${result.workItem.idempotencyKey}`,\n metadata: { tool: toolName, durationMs, riskLevel: report.riskLevel, likelyPathCount: report.likelyPaths.length, verificationSummary: report.verificationPlan }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n console.log(result.implementationWorkItem ? \"Impact preview returned; implementation work is now queued.\" : \"Impact preview returned.\");\n return { status: \"completed\", exitCode: 0 };\n }\n\n const failedResult = await apiClient.submitImpactPreviewResult(projectId, workItem.workItemId, {\n status: \"failed\",\n runnerId,\n idempotencyKey: `impact_${workItem.workItemId}_${randomUUID()}`,\n tool: toolName,\n durationMs,\n ...sessionTelemetry,\n message: `${toolName} did not produce a valid impact preview.`,\n ...(previewError ? { error: previewError } : {})\n });\n await recordRunnerMilestone(apiClient, projectId, workItem, runnerId, repositoryLinkId, {\n status: \"failed\",\n summary: previewError ?? `${toolName} did not produce a valid impact preview.`,\n idempotencyKey: `runner_milestone_impact_failed_${workItem.workItemId}_${failedResult.workItem.idempotencyKey}`,\n metadata: { tool: toolName, durationMs, verificationSummary: \"Impact preview output did not include valid structured JSON.\" }\n });\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"online\", runnerHeartbeatMetadata(toolConfig));\n console.error(previewError ?? \"Local runner impact preview failed.\");\n return { status: \"failed\", exitCode: toolResult.exitCode || 1 };\n}\n\nasync function createRunnerWorkPrompt(apiClient: ApiClient, projectId: string, workItem: WorkItem): Promise<string> {\n if (workItem.workKind === \"assistantQuestion\") {\n const [{ documents }, { messages }] = await Promise.all([\n apiClient.listBrainDocuments(projectId),\n apiClient.listAssistantMessages(projectId)\n ]);\n const question = messages.find((message) => message.messageId === workItem.assistantMessageId || message.id === workItem.assistantMessageId)\n ?? messages.filter((message) => message.workItemId === workItem.workItemId).sort((first, second) => Date.parse(first.createdAt) - Date.parse(second.createdAt))[0];\n return createWorkExecutionPrompt(workItem, {\n ...(question ? { assistantQuestion: { question, messages, documents } } : {})\n });\n }\n\n if (workItem.workKind === \"impactPreview\") {\n const { documents } = await apiClient.listBrainDocuments(projectId);\n const implementationPrompt = workItem.impactDocumentId\n ? documents.find((document) => document.documentId === workItem.impactDocumentId || document.id === workItem.impactDocumentId)\n : documents.find((document) => document.frontmatter.generatedDraftId === workItem.generatedDraftId && (document.frontmatter.createsWorkItem === true || document.documentType === \"prompt\"));\n return createWorkExecutionPrompt(workItem, {\n impactPreview: {\n documents,\n ...(implementationPrompt ? { implementationPrompt } : {})\n }\n });\n }\n\n if (workItem.workKind !== \"planRevision\" || !workItem.reviewDocumentId) {\n return createWorkExecutionPrompt(workItem);\n }\n\n const [{ documents }, { messages }] = await Promise.all([\n apiClient.listBrainDocuments(projectId),\n apiClient.listPlanReviewMessages(projectId, workItem.reviewDocumentId)\n ]);\n const planDocument = documents.find((document) => document.documentId === workItem.reviewDocumentId || document.id === workItem.reviewDocumentId);\n return createWorkExecutionPrompt(workItem, {\n ...(planDocument ? { planRevision: { planDocument, messages } } : {})\n });\n}\n\ninterface PairedApiContext {\n client: ApiClient;\n metadata: RepoLinkMetadata;\n token?: string;\n}\n\nasync function loadPairedApiContext(root: string, apiUrl: string): Promise<PairedApiContext | undefined> {\n const metadata = await readProjectLink(root);\n if (!metadata) {\n return undefined;\n }\n\n const token = await new LocalCredentialStore().get(\n credentialKey(metadata.amistioAccountId, metadata.amistioProjectId, metadata.repositoryLinkId)\n );\n return {\n metadata,\n ...(token ? { token } : {}),\n client: new ApiClient({\n apiUrl,\n accountId: metadata.amistioAccountId,\n ...(token ? { token } : {})\n })\n };\n}\n\nasync function loadProjectNextAction(apiClient: ApiClient, projectId: string, repositoryLinkId: string, root: string): Promise<ProjectNextAction> {\n const [{ workItems }, { documents }, { runners }] = await Promise.all([\n apiClient.listWorkItems(projectId),\n apiClient.listBrainDocuments(projectId),\n apiClient.listRunners(projectId).catch(() => ({ runners: [] }))\n ]);\n\n return computeProjectNextAction({\n projectId,\n repositoryLinks: [createCliRepositoryLink({ amistioAccountId: \"local_runner\", amistioProjectId: projectId, repositoryLinkId, defaultBranch: \"main\", lastSyncedRevision: 0 }, root)],\n documents,\n workItems,\n runnerHeartbeats: runners\n });\n}\n\nfunction createCliRepositoryLink(metadata: RepoLinkMetadata, root: string): RepositoryLinkItem {\n const now = new Date().toISOString();\n return {\n id: metadata.repositoryLinkId,\n type: \"repositoryLink\",\n schemaVersion: 1,\n accountId: metadata.amistioAccountId,\n projectId: metadata.amistioProjectId,\n repositoryLinkId: metadata.repositoryLinkId,\n repoName: inferRepoName(root),\n repoFingerprint: createRepoFingerprint(metadata.amistioAccountId, metadata.amistioProjectId, metadata.repositoryLinkId),\n defaultBranch: metadata.defaultBranch,\n status: \"active\",\n createdAt: now,\n updatedAt: now\n };\n}\n\nfunction selectPromptWorkItem(workItems: WorkItem[], workItemId: string | undefined): WorkItem | undefined {\n if (workItemId) {\n return workItems.find((item) => item.workItemId === workItemId || item.id === workItemId);\n }\n\n return workItems.find((item) => isPromptReadyStatus(item.status));\n}\n\nfunction isPromptReadyStatus(status: WorkStatus): boolean {\n return status === \"approved\" || status === \"running\" || status === \"blocked\" || status === \"changesRequested\";\n}\n\ninterface PreparedToolSession {\n policy: SessionPolicy;\n decision: SessionDecision;\n reason: string;\n toolSession?: ToolSessionItem;\n}\n\nasync function prepareToolSession({\n apiClient,\n isolationTelemetry,\n machineId,\n projectId,\n repositoryLinkId,\n runnerId,\n sessionPolicy,\n supportsSessionReuse,\n resumabilityScope,\n toolName,\n model,\n workItem\n}: {\n apiClient: ApiClient;\n isolationTelemetry: WorkStatusTelemetryLike;\n machineId: string;\n projectId: string;\n repositoryLinkId: string;\n runnerId: string;\n sessionPolicy: SessionPolicy;\n supportsSessionReuse: boolean;\n resumabilityScope: SessionResumabilityScope;\n toolName: string;\n model?: string;\n workItem: WorkItem;\n}): Promise<PreparedToolSession> {\n const { toolSessions } = await apiClient.listToolSessions(projectId);\n const selection = selectToolSession({\n policy: sessionPolicy,\n workItem,\n sessions: toolSessions,\n toolName,\n runnerId,\n repositoryLinkId,\n machineId,\n supportsSessionReuse\n });\n\n if (selection.decision === \"skipped\") {\n return selection;\n }\n\n if (selection.toolSession) {\n const { toolSession } = await apiClient.updateToolSession(projectId, selection.toolSession.toolSessionId, {\n status: \"active\",\n runnerId,\n machineId,\n lastWorkItemId: workItem.workItemId,\n reusePolicy: sessionPolicy,\n ...(isolationTelemetry.implementationScopeId ? { implementationScopeId: isolationTelemetry.implementationScopeId } : {}),\n ...(isolationTelemetry.executionWorktreeKey ? { executionWorktreeKey: isolationTelemetry.executionWorktreeKey } : {}),\n ...(isolationTelemetry.isolationMode ? { isolationMode: isolationTelemetry.isolationMode } : {})\n });\n return { ...selection, toolSession };\n }\n\n const toolSessionId = `tool_session_${randomUUID()}`;\n const { toolSession } = await apiClient.createToolSession(projectId, {\n toolSessionId,\n repositoryLinkId,\n tool: toolName,\n provider: toolName,\n ...(model ? { model } : {}),\n resumabilityScope: supportsSessionReuse ? resumabilityScope : \"none\",\n title: workItem.title,\n summary: selection.reason,\n status: \"active\",\n runnerId,\n machineId,\n lastWorkItemId: workItem.workItemId,\n messageCount: 0,\n reusePolicy: sessionPolicy,\n ...(workItem.requestedByUserId ?? workItem.requestedBy ? { createdByUserId: workItem.requestedByUserId ?? workItem.requestedBy } : {}),\n ...(isolationTelemetry.implementationScopeId ? { implementationScopeId: isolationTelemetry.implementationScopeId } : {}),\n ...(isolationTelemetry.executionWorktreeKey ? { executionWorktreeKey: isolationTelemetry.executionWorktreeKey } : {}),\n ...(isolationTelemetry.isolationMode ? { isolationMode: isolationTelemetry.isolationMode } : {}),\n ...(workItem.sessionGroupKey ? { sessionGroupKey: workItem.sessionGroupKey } : {})\n });\n\n return { ...selection, toolSession };\n}\n\nasync function finalizeToolSession({\n apiClient,\n costUsd,\n messageCount,\n projectId,\n runnerId,\n session,\n status,\n stdout,\n tokensIn,\n tokensOut,\n workItemId\n}: {\n apiClient: ApiClient;\n costUsd?: number;\n messageCount?: number;\n projectId: string;\n runnerId: string;\n session?: ToolSessionItem;\n status: \"completed\" | \"failed\";\n stdout: string;\n tokensIn?: number;\n tokensOut?: number;\n workItemId: string;\n}): Promise<ToolSessionItem | undefined> {\n if (!session) {\n return undefined;\n }\n\n const summary = summarizeToolOutput(stdout) ?? session.summary;\n const { toolSession } = await apiClient.updateToolSession(projectId, session.toolSessionId, {\n status: status === \"completed\" ? \"open\" : \"blocked\",\n runnerId,\n lastWorkItemId: workItemId,\n messageCount: (session.messageCount ?? 0) + (messageCount ?? 1),\n ...(summary ? { summary } : {}),\n ...(tokensIn !== undefined ? { estimatedInputTokens: (session.estimatedInputTokens ?? 0) + tokensIn } : {}),\n ...(tokensOut !== undefined ? { estimatedOutputTokens: (session.estimatedOutputTokens ?? 0) + tokensOut } : {}),\n ...(costUsd !== undefined ? { costUsd: (session.costUsd ?? 0) + costUsd } : {}),\n ...(status === \"failed\" ? { closedReason: \"Last run failed or returned a non-zero exit code.\" } : {})\n });\n return toolSession;\n}\n\nasync function markToolSessionBlocked(apiClient: ApiClient, projectId: string, session: ToolSessionItem | undefined, reason: string) {\n if (!session) {\n return;\n }\n\n await apiClient.updateToolSession(projectId, session.toolSessionId, {\n status: \"blocked\",\n summary: reason,\n closedReason: reason\n });\n}\n\nfunction localSessionDecision(policy: SessionPolicy): SessionDecision {\n if (policy === \"new\") {\n return \"forcedNew\";\n }\n if (typeof policy === \"string\" && policy.startsWith(\"continue:\")) {\n return \"forcedContinue\";\n }\n return \"created\";\n}\n\nfunction summarizeToolOutput(value: string): string | undefined {\n const trimmed = value.trim();\n if (!trimmed) {\n return undefined;\n }\n return trimmed.length > 300 ? `${trimmed.slice(0, 300)}...` : trimmed;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction errorDetail(error: unknown): string {\n return error instanceof Error ? error.stack ?? error.message : String(error);\n}\n\nfunction truncateLogExcerpt(value: string) {\n const trimmed = value.trim();\n return trimmed.length > 1200 ? `${trimmed.slice(0, 1200)}...` : trimmed;\n}\n\nfunction collectRepeatedOption(value: string, previous: string[]): string[] {\n return [...previous, value];\n}\n\nfunction formatImportSkipSummary(counts: Record<\"notMarkdown\" | \"excluded\" | \"tooLarge\" | \"alreadyManaged\" | \"unreadable\", number>): string {\n return `Skipped: ${counts.excluded} excluded, ${counts.tooLarge} too large, ${counts.alreadyManaged} already managed, ${counts.unreadable} unreadable, ${counts.notMarkdown} non-Markdown.`;\n}\n\nfunction parsePositiveInteger(value: string) {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new Error(`Expected a positive integer, received ${value}.`);\n }\n\n return parsed;\n}\n\nfunction parseInvocationChannel(value: string): RunnerInvocationChannel {\n if (value === \"auto\" || value === \"sdk\" || value === \"command\") {\n return value;\n }\n throw new Error(`Expected invocation channel auto, sdk, or command; received ${value}.`);\n}\n\nfunction inferRepoName(root: string): string {\n return path.basename(path.resolve(root)) || \"repository\";\n}\n\nfunction createRepoFingerprint(accountId: string, projectId: string, repositoryLinkId: string): string {\n return createHash(\"sha256\").update(`${accountId}:${projectId}:${repositoryLinkId}`).digest(\"hex\");\n}\n\nfunction defaultApiUrl(): string {\n const envApiUrl = process.env[AMISTIO_API_URL_ENV]?.trim();\n return envApiUrl || officialAmistioApiUrl;\n}\n\nfunction apiUrlOverrideWasRequested(command: Command): boolean {\n return command.getOptionValueSource(\"apiUrl\") === \"cli\" || Boolean(process.env[AMISTIO_API_URL_ENV]?.trim());\n}\n\nfunction formatApiUrlFlag(apiUrl: string): string {\n return isOfficialAmistioApiUrl(apiUrl) ? \"\" : ` --api-url ${formatShellArg(apiUrl)}`;\n}\n\nfunction formatShellArg(value: string): string {\n return /^[A-Za-z0-9_./:@-]+$/.test(value) ? value : `'${value.replace(/'/g, \"'\\\\''\")}'`;\n}\n\ntype RunnerToolConfig =\n | {\n ready: true;\n tool: string;\n capabilities: RunnerToolCapability[];\n source: RunnerPreferenceSource;\n status: RunnerPreferenceStatus;\n requestedTool?: RunnerToolSelection;\n requestedInvocationChannel?: RunnerInvocationChannel;\n effectiveTool?: RunnerToolName | \"custom\";\n effectiveInvocationChannel?: RunnerEffectiveInvocationChannel;\n model?: string;\n message?: string;\n }\n | {\n ready: false;\n tool: string;\n capabilities: RunnerToolCapability[];\n source: RunnerPreferenceSource;\n status: RunnerPreferenceStatus;\n requestedTool?: RunnerToolSelection;\n requestedInvocationChannel?: RunnerInvocationChannel;\n effectiveTool?: RunnerToolName | \"custom\";\n effectiveInvocationChannel?: RunnerEffectiveInvocationChannel;\n model?: string;\n message: string;\n };\n\nasync function resolveRunnerToolConfig({ apiClient, explicitInvocationChannel, explicitModel, explicitTool, projectId, toolCommand }: { apiClient: ApiClient; explicitInvocationChannel?: RunnerInvocationChannel; explicitModel?: string; explicitTool?: string; projectId: string; toolCommand?: string }): Promise<RunnerToolConfig> {\n const capabilities = toRunnerToolCapabilities(await detectLocalTools());\n\n if (toolCommand) {\n return {\n ready: true,\n tool: explicitTool ?? \"auto\",\n capabilities,\n source: \"cli\",\n status: \"custom\",\n effectiveTool: \"custom\",\n requestedInvocationChannel: explicitInvocationChannel ?? \"command\",\n effectiveInvocationChannel: \"command\",\n ...(explicitTool && explicitTool !== \"none\" && explicitTool !== \"auto\" && isLocalToolName(explicitTool) ? { requestedTool: explicitTool } : explicitTool === \"auto\" ? { requestedTool: \"auto\" } : {}),\n ...(explicitModel ? { model: explicitModel } : {}),\n message: \"Using local custom tool command.\"\n };\n }\n\n if (explicitTool === \"none\") {\n if (explicitModel) {\n return unavailableToolConfig({ capabilities, source: \"cli\", status: \"modelUnsupported\", message: \"--model cannot be used with --tool none.\", tool: \"none\", requestedInvocationChannel: explicitInvocationChannel ?? \"auto\", model: explicitModel });\n }\n return { ready: true, tool: \"none\", capabilities, source: \"cli\", status: \"none\", requestedInvocationChannel: explicitInvocationChannel ?? \"auto\", message: \"No local tool selected.\" };\n }\n\n if (explicitTool && explicitTool !== \"auto\" && !isLocalToolName(explicitTool)) {\n return unavailableToolConfig({ capabilities, source: \"cli\", status: \"unavailable\", message: `Unsupported local tool: ${explicitTool}.`, tool: explicitTool, requestedInvocationChannel: explicitInvocationChannel ?? \"auto\", ...(explicitModel ? { model: explicitModel } : {}) });\n }\n\n const remotePreference = await apiClient.getRunnerPreferences(projectId).then((response) => response.effective).catch(() => undefined);\n const requestedTool = (explicitTool as RunnerToolSelection | undefined) ?? remotePreference?.tool ?? \"auto\";\n const requestedInvocationChannel = explicitInvocationChannel ?? remotePreference?.invocationChannel ?? \"auto\";\n const model = explicitModel ?? remotePreference?.model;\n const source: RunnerPreferenceSource = explicitTool || explicitInvocationChannel || explicitModel ? \"cli\" : remotePreference?.source ?? \"default\";\n\n return resolveRequestedTool({ capabilities, requestedInvocationChannel, requestedTool, source, ...(model ? { model } : {}) });\n}\n\nfunction resolveRequestedTool({ capabilities, model, requestedInvocationChannel, requestedTool, source }: { capabilities: RunnerToolCapability[]; model?: string; requestedInvocationChannel: RunnerInvocationChannel; requestedTool: RunnerToolSelection; source: RunnerPreferenceSource }): RunnerToolConfig {\n if (requestedTool === \"auto\") {\n const candidate = capabilities.find((capability) => capability.available && capabilitySupportsInvocationChannel(capability, requestedInvocationChannel) && (!model || capability.supportsModelSelection));\n if (!candidate) {\n const anyAvailable = capabilities.some((capability) => capability.available);\n const anyChannelAvailable = capabilities.some((capability) => capability.available && capabilitySupportsInvocationChannel(capability, requestedInvocationChannel));\n const status: RunnerPreferenceStatus = !anyAvailable ? \"unavailable\" : requestedInvocationChannel !== \"auto\" && !anyChannelAvailable ? \"channelUnsupported\" : model ? \"modelUnsupported\" : \"unavailable\";\n return unavailableToolConfig({\n capabilities,\n source,\n status,\n requestedTool,\n requestedInvocationChannel,\n tool: \"auto\",\n ...(model ? { model } : {}),\n message: status === \"channelUnsupported\" ? `No installed local AI tool can honor ${requestedInvocationChannel} invocation.` : model ? \"No installed local tool can honor the selected model.\" : \"No supported local AI tool is installed.\"\n });\n }\n return { ready: true, tool: \"auto\", capabilities, source, status: \"resolved\", requestedTool, requestedInvocationChannel, effectiveTool: candidate.name, effectiveInvocationChannel: effectiveInvocationChannel(candidate, requestedInvocationChannel), ...(model ? { model } : {}) };\n }\n\n const capability = capabilities.find((candidate) => candidate.name === requestedTool);\n if (!capability?.available) {\n return unavailableToolConfig({ capabilities, source, status: \"unavailable\", requestedTool, requestedInvocationChannel, tool: requestedTool, ...(model ? { model } : {}), message: `${requestedTool} is selected but is not available on this runner.` });\n }\n if (!capabilitySupportsInvocationChannel(capability, requestedInvocationChannel)) {\n return unavailableToolConfig({ capabilities, source, status: \"channelUnsupported\", requestedTool, requestedInvocationChannel, effectiveTool: requestedTool, tool: requestedTool, ...(model ? { model } : {}), message: `${requestedTool} is available but does not support ${requestedInvocationChannel} invocation on this runner.` });\n }\n if (model && !capability.supportsModelSelection) {\n return unavailableToolConfig({ capabilities, source, status: \"modelUnsupported\", requestedTool, requestedInvocationChannel, effectiveTool: requestedTool, effectiveInvocationChannel: effectiveInvocationChannel(capability, requestedInvocationChannel), tool: requestedTool, model, message: `${requestedTool} is available but does not support Amistio model selection yet.` });\n }\n\n return { ready: true, tool: requestedTool, capabilities, source, status: \"resolved\", requestedTool, requestedInvocationChannel, effectiveTool: requestedTool, effectiveInvocationChannel: effectiveInvocationChannel(capability, requestedInvocationChannel), ...(model ? { model } : {}) };\n}\n\nfunction unavailableToolConfig(input: { capabilities: RunnerToolCapability[]; source: RunnerPreferenceSource; status: RunnerPreferenceStatus; tool: string; message: string; requestedTool?: RunnerToolSelection; requestedInvocationChannel?: RunnerInvocationChannel; effectiveTool?: RunnerToolName | \"custom\"; effectiveInvocationChannel?: RunnerEffectiveInvocationChannel; model?: string }): RunnerToolConfig {\n return {\n ready: false,\n tool: input.tool,\n capabilities: input.capabilities,\n source: input.source,\n status: input.status,\n message: input.message,\n ...(input.requestedTool ? { requestedTool: input.requestedTool } : {}),\n ...(input.requestedInvocationChannel ? { requestedInvocationChannel: input.requestedInvocationChannel } : {}),\n ...(input.effectiveTool ? { effectiveTool: input.effectiveTool } : {}),\n ...(input.effectiveInvocationChannel ? { effectiveInvocationChannel: input.effectiveInvocationChannel } : {}),\n ...(input.model ? { model: input.model } : {})\n };\n}\n\nfunction capabilitySupportsInvocationChannel(capability: RunnerToolCapability, channel: RunnerInvocationChannel): boolean {\n if (channel === \"auto\") return capability.available;\n if (channel === \"sdk\") return capability.sdkAvailable;\n return capability.commandAvailable;\n}\n\nfunction effectiveInvocationChannel(capability: RunnerToolCapability, channel: RunnerInvocationChannel): RunnerEffectiveInvocationChannel {\n if (channel === \"sdk\" || channel === \"command\") return channel;\n return capability.sdkAvailable ? \"sdk\" : \"command\";\n}\n\nfunction toRunnerToolCapabilities(tools: DetectedLocalTool[]): RunnerToolCapability[] {\n return tools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n available: tool.available,\n sdkAvailable: tool.sdkAvailable,\n commandAvailable: tool.commandAvailable,\n execution: tool.execution,\n supportsSessionReuse: tool.supportsSessionReuse,\n resumabilityScope: tool.resumabilityScope,\n supportsModelSelection: tool.supportsModelSelection,\n supportsBranchIsolation: true,\n supportsGitWorktreeIsolation: true\n }));\n}\n\nfunction runnerIsolationCapabilityMetadata() {\n return {\n machineId: runnerMachineId(),\n supportsBranchIsolation: true,\n supportsGitWorktreeIsolation: true\n };\n}\n\nfunction runnerHeartbeatMetadata(toolConfig?: RunnerToolConfig, mode = currentRunnerMode()) {\n return {\n version: CLI_VERSION,\n mode,\n hostname: os.hostname(),\n ...runnerIsolationCapabilityMetadata(),\n resourceUsage: sampleCurrentRunnerResourceUsage(),\n ...(toolConfig?.capabilities ? { capabilities: toolConfig.capabilities } : {}),\n ...(toolConfig?.requestedTool ? { requestedTool: toolConfig.requestedTool } : {}),\n ...(toolConfig?.requestedInvocationChannel ? { requestedInvocationChannel: toolConfig.requestedInvocationChannel } : {}),\n ...(toolConfig?.effectiveTool ? { effectiveTool: toolConfig.effectiveTool } : {}),\n ...(toolConfig?.effectiveInvocationChannel ? { effectiveInvocationChannel: toolConfig.effectiveInvocationChannel } : {}),\n ...(toolConfig?.model ? { effectiveModel: toolConfig.model } : {}),\n ...(toolConfig?.source ? { preferenceSource: toolConfig.source } : {}),\n ...(toolConfig?.status ? { preferenceStatus: toolConfig.status } : {}),\n ...(toolConfig?.message ? { preferenceMessage: toolConfig.message } : {})\n };\n}\n\nfunction runnerMachineId(): string {\n return createHash(\"sha256\").update(`${os.hostname()}:${os.platform()}:${os.arch()}`).digest(\"hex\").slice(0, 20);\n}\n\nasync function delay(milliseconds: number) {\n await new Promise((resolve) => setTimeout(resolve, milliseconds));\n}\n\nprogram.parseAsync().catch((error: unknown) => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exitCode = 1;\n});", "import { z } from \"zod\";\n\nexport const isoDateTimeSchema = z.string().datetime({ offset: true });\n\nexport const itemTypeSchema = z.enum([\n \"account\",\n \"accountUser\",\n \"accountInvite\",\n \"accountSettings\",\n \"user\",\n \"project\",\n \"repositoryLink\",\n \"brainDocument\",\n \"generatedDraft\",\n \"syncCursor\",\n \"syncConflict\",\n \"workItem\",\n \"runnerHeartbeat\",\n \"runnerExecutionLog\",\n \"runnerCredential\",\n \"runnerCommand\",\n \"planReviewMessage\",\n \"assistantMessage\",\n \"impactReport\",\n \"toolSession\",\n \"activityEvent\",\n \"pairingSession\"\n]);\n\nexport const documentTypeSchema = z.enum([\n \"architecture\",\n \"context\",\n \"decision\",\n \"feature\",\n \"memory\",\n \"plan\",\n \"prompt\",\n \"workflow\"\n]);\n\nexport const syncStateSchema = z.enum([\n \"draft\",\n \"approved\",\n \"synced\",\n \"dirtyInRepo\",\n \"dirtyInWeb\",\n \"conflicted\",\n \"archived\"\n]);\n\nexport const workStatusSchema = z.enum([\n \"drafted\",\n \"approved\",\n \"synced\",\n \"running\",\n \"blocked\",\n \"completed\",\n \"changesRequested\",\n \"failed\",\n \"conflicted\"\n]);\n\nexport const sourceSchema = z.enum([\"web\", \"repo\", \"generated\", \"runner\"]);\n\nexport const executionModeSchema = z.enum([\"localRunner\", \"cloudSandbox\"]);\n\nexport const workKindSchema = z.enum([\"brainGeneration\", \"implementation\", \"planRevision\", \"assistantQuestion\", \"impactPreview\"]);\n\nexport const generatedDraftStatusSchema = z.enum([\"queued\", \"generating\", \"reviewing\", \"approved\", \"rejected\", \"changesRequested\", \"failed\"]);\n\nexport const assistantQuestionModeSchema = z.enum([\"brainOnly\", \"sourceAware\"]);\n\nexport const impactRiskLevelSchema = z.enum([\"low\", \"medium\", \"high\", \"critical\"]);\n\nexport const impactReportStatusSchema = z.enum([\"queued\", \"running\", \"completed\", \"failed\", \"stale\"]);\n\nexport const activityEventTypeSchema = z.enum([\n \"commandSubmitted\",\n \"generationQueued\",\n \"generationCompleted\",\n \"generationFailed\",\n \"documentGenerated\",\n \"documentReview\",\n \"documentSync\",\n \"workQueued\",\n \"workClaimed\",\n \"workStatusChanged\",\n \"runnerMilestone\",\n \"assistantAnswered\",\n \"assistantFailed\",\n \"impactPreviewQueued\",\n \"impactPreviewCompleted\",\n \"impactPreviewFailed\",\n \"impactPreviewStale\",\n \"handoffExported\"\n]);\n\nexport const activityEventActorSchema = z.enum([\"webUser\", \"runner\", \"cli\", \"system\"]);\n\nexport const activityEventStatusSchema = z.enum([\"info\", \"queued\", \"running\", \"completed\", \"failed\", \"blocked\", \"warning\"]);\n\nconst activityMetadataValueSchema = z.union([\n z.string().max(600),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(z.string().max(200)).max(20)\n]);\n\nexport const activityMetadataSchema = z.record(z.string().min(1).max(80), activityMetadataValueSchema).default({});\n\nexport const generatedBrainArtifactSchema = z.object({\n documentType: documentTypeSchema,\n title: z.string().trim().min(1),\n repoPath: z.string().trim().min(1),\n content: z.string().min(1)\n});\n\nexport const brainGenerationResultSchema = z.object({\n artifacts: z.array(generatedBrainArtifactSchema).min(1),\n summary: z.string().optional()\n});\n\nexport const sessionPolicySchema = z.union([z.enum([\"auto\", \"new\", \"none\"]), z.string().regex(/^continue:[A-Za-z0-9_.:-]+$/)]);\n\nexport const sessionDecisionSchema = z.enum([\"created\", \"continued\", \"forcedNew\", \"forcedContinue\", \"notSupported\", \"skipped\"]);\n\nexport const toolSessionStatusSchema = z.enum([\"open\", \"active\", \"closed\", \"archived\", \"blocked\", \"unavailable\"]);\n\nexport const sessionResumabilityScopeSchema = z.enum([\"none\", \"localMachine\", \"repository\", \"account\", \"providerCloud\"]);\n\nexport const runnerToolNames = [\"opencode\", \"claude\", \"codex\", \"copilot\", \"gemini\", \"aider\", \"cursor-agent\"] as const;\n\nexport const runnerToolNameSchema = z.enum(runnerToolNames);\n\nexport const runnerToolSelectionSchema = z.union([runnerToolNameSchema, z.literal(\"auto\")]);\n\nexport const runnerPreferenceScopeSchema = z.enum([\"account\", \"project\"]);\n\nexport const runnerPreferenceSourceSchema = z.enum([\"cli\", \"project\", \"account\", \"default\"]);\n\nexport const runnerPreferenceStatusSchema = z.enum([\"resolved\", \"unavailable\", \"modelUnsupported\", \"channelUnsupported\", \"custom\", \"none\"]);\n\nexport const runnerInvocationChannelSchema = z.enum([\"auto\", \"sdk\", \"command\"]);\n\nexport const runnerEffectiveInvocationChannelSchema = z.enum([\"sdk\", \"command\"]);\n\nexport const runnerToolModelPreferenceSchema = z.object({\n tool: runnerToolSelectionSchema.optional(),\n invocationChannel: runnerInvocationChannelSchema.optional(),\n model: z.string().trim().min(1).max(160).optional()\n});\n\nexport const runnerToolCapabilitySchema = z.object({\n name: runnerToolNameSchema,\n description: z.string().min(1),\n available: z.boolean(),\n sdkAvailable: z.boolean(),\n commandAvailable: z.boolean(),\n execution: z.enum([\"sdk\", \"command\", \"unavailable\"]),\n supportsSessionReuse: z.boolean(),\n resumabilityScope: sessionResumabilityScopeSchema,\n supportsModelSelection: z.boolean(),\n supportsBranchIsolation: z.boolean().optional(),\n supportsGitWorktreeIsolation: z.boolean().optional()\n});\n\nexport const runnerResourceUsageSchema = z.object({\n sampledAt: isoDateTimeSchema,\n processUptimeSeconds: z.number().nonnegative().optional(),\n processMemoryRssBytes: z.number().int().nonnegative().optional(),\n processMemoryHeapUsedBytes: z.number().int().nonnegative().optional(),\n processMemoryHeapTotalBytes: z.number().int().nonnegative().optional(),\n processCpuUserMicros: z.number().int().nonnegative().optional(),\n processCpuSystemMicros: z.number().int().nonnegative().optional(),\n processCpuPercent: z.number().nonnegative().optional(),\n systemMemoryTotalBytes: z.number().int().nonnegative().optional(),\n systemMemoryFreeBytes: z.number().int().nonnegative().optional(),\n systemLoadAverage1m: z.number().nonnegative().optional(),\n systemLoadAverage5m: z.number().nonnegative().optional(),\n systemLoadAverage15m: z.number().nonnegative().optional()\n});\n\nexport const workIsolationModeSchema = z.enum([\"none\", \"primaryCheckout\", \"branch\", \"gitWorktree\"]);\n\nexport const repositoryLinkSourceSchema = z.enum([\"web\", \"cli\"]);\n\nexport const repositoryCloneStatusSchema = z.enum([\"notCloned\", \"cloned\", \"validated\", \"failed\"]);\n\nexport const projectStatusSchema = z.enum([\"active\", \"archived\"]);\n\nexport const workspaceScopeKindSchema = z.enum([\"personal\", \"organization\"]);\n\nexport const personalWorkspaceScopeSchema = z.object({\n kind: z.literal(\"personal\"),\n accountId: z.string().min(1),\n userId: z.string().min(1),\n label: z.string().trim().min(1).default(\"Personal workspace\")\n});\n\nexport const organizationWorkspaceScopeSchema = z.object({\n kind: z.literal(\"organization\"),\n accountId: z.string().min(1),\n organizationId: z.string().min(1),\n organizationSlug: z.string().trim().min(1).optional(),\n organizationRole: z.string().trim().min(1).optional(),\n label: z.string().trim().min(1).default(\"Organization workspace\")\n});\n\nexport const activeWorkspaceScopeSchema = z.discriminatedUnion(\"kind\", [personalWorkspaceScopeSchema, organizationWorkspaceScopeSchema]);\n\nexport const organizationWorkspaceOnboardingStatusSchema = z.enum([\"available\", \"upgradeRequired\", \"authRequired\", \"unconfigured\"]);\n\nexport const organizationWorkspaceOnboardingSchema = z.object({\n enabled: z.boolean(),\n canCreate: z.boolean(),\n status: organizationWorkspaceOnboardingStatusSchema,\n reason: z.string().trim().min(1).optional()\n});\n\nexport const baseItemSchema = z.object({\n id: z.string().min(1),\n type: itemTypeSchema,\n schemaVersion: z.number().int().positive().default(1),\n accountId: z.string().min(1),\n projectId: z.string().min(1).optional(),\n createdAt: isoDateTimeSchema,\n updatedAt: isoDateTimeSchema\n});\n\nexport const accountItemSchema = baseItemSchema.extend({\n type: z.literal(\"account\"),\n name: z.string().min(1),\n slug: z.string().min(1)\n});\n\nexport const userItemSchema = baseItemSchema.extend({\n type: z.literal(\"user\"),\n userId: z.string().min(1),\n email: z.string().email(),\n firstName: z.string(),\n lastName: z.string()\n});\n\nexport const projectItemSchema = baseItemSchema.extend({\n type: z.literal(\"project\"),\n projectId: z.string().min(1),\n name: z.string().min(1),\n slug: z.string().min(1),\n description: z.string().optional(),\n status: projectStatusSchema.default(\"active\"),\n archivedAt: isoDateTimeSchema.optional(),\n archivedByUserId: z.string().min(1).optional(),\n archiveReason: z.string().min(1).optional()\n});\n\nexport const repositoryLinkItemSchema = baseItemSchema.extend({\n type: z.literal(\"repositoryLink\"),\n projectId: z.string().min(1),\n repositoryLinkId: z.string().min(1),\n repoName: z.string().min(1),\n repoFingerprint: z.string().min(1).optional(),\n defaultBranch: z.string().min(1),\n cloneUrl: z.string().min(1).optional(),\n provider: z.string().min(1).optional(),\n repoOwner: z.string().min(1).optional(),\n repoFullName: z.string().min(1).optional(),\n linkedByUserId: z.string().min(1).optional(),\n linkSource: repositoryLinkSourceSchema.optional(),\n cloneStatus: repositoryCloneStatusSchema.optional(),\n lastValidatedAt: isoDateTimeSchema.optional(),\n status: z.enum([\"active\", \"revoked\"]).default(\"active\")\n});\n\nexport const brainDocumentItemSchema = baseItemSchema.extend({\n type: z.literal(\"brainDocument\"),\n projectId: z.string().min(1),\n documentId: z.string().min(1),\n documentType: documentTypeSchema,\n title: z.string().min(1),\n status: z.string().min(1),\n repoPath: z.string().min(1),\n content: z.string(),\n contentHash: z.string().min(1),\n frontmatter: z.record(z.string(), z.unknown()).default({}),\n revision: z.number().int().nonnegative(),\n approvedRevision: z.number().int().nonnegative().optional(),\n source: sourceSchema,\n syncState: syncStateSchema\n});\n\nexport const generatedDraftItemSchema = baseItemSchema.extend({\n type: z.literal(\"generatedDraft\"),\n projectId: z.string().min(1),\n wishId: z.string().min(1),\n title: z.string().min(1),\n status: generatedDraftStatusSchema,\n documentIds: z.array(z.string()).default([]),\n wish: z.string().min(1).optional(),\n requestedByUserId: z.string().min(1).optional(),\n workItemId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional(),\n generationAttempt: z.number().int().nonnegative().optional(),\n lastGenerationError: z.string().optional()\n});\n\nexport const syncCursorItemSchema = baseItemSchema.extend({\n type: z.literal(\"syncCursor\"),\n projectId: z.string().min(1),\n repositoryLinkId: z.string().min(1),\n lastSyncedRevision: z.number().int().nonnegative(),\n lastSyncedAt: isoDateTimeSchema.optional()\n});\n\nexport const syncConflictItemSchema = baseItemSchema.extend({\n type: z.literal(\"syncConflict\"),\n projectId: z.string().min(1),\n conflictId: z.string().min(1),\n documentId: z.string().min(1),\n repoPath: z.string().min(1),\n webRevision: z.number().int().nonnegative(),\n repoContentHash: z.string().min(1),\n status: z.enum([\"open\", \"resolved\", \"ignored\"])\n});\n\nexport const workItemSchema = baseItemSchema.extend({\n type: z.literal(\"workItem\"),\n projectId: z.string().min(1),\n workItemId: z.string().min(1),\n workKind: workKindSchema.optional(),\n status: workStatusSchema,\n executionMode: executionModeSchema.optional(),\n title: z.string().min(1),\n requestedBy: z.string().min(1),\n requestedByUserId: z.string().min(1).optional(),\n approvedBy: z.string().min(1).optional(),\n approvedByUserId: z.string().min(1).optional(),\n sourceWish: z.string().min(1).optional(),\n generatedDraftId: z.string().min(1).optional(),\n repositoryLinkId: z.string().min(1).optional(),\n reviewThreadId: z.string().min(1).optional(),\n reviewDocumentId: z.string().min(1).optional(),\n reviewDocumentRevision: z.number().int().nonnegative().optional(),\n reviewMessageId: z.string().min(1).optional(),\n assistantMessageId: z.string().min(1).optional(),\n assistantQuestionMode: assistantQuestionModeSchema.optional(),\n impactReportId: z.string().min(1).optional(),\n impactDocumentId: z.string().min(1).optional(),\n impactDocumentRevision: z.number().int().nonnegative().optional(),\n claimedByRunnerId: z.string().optional(),\n pairedByUserId: z.string().min(1).optional(),\n machineId: z.string().min(1).optional(),\n claimLeaseId: z.string().min(1).optional(),\n claimAttempt: z.number().int().nonnegative().optional(),\n leaseExpiresAt: isoDateTimeSchema.optional(),\n controllingAdrId: z.string().min(1).optional(),\n implementationScopeId: z.string().min(1).optional(),\n executionBranch: z.string().min(1).optional(),\n executionWorktreeKey: z.string().min(1).optional(),\n isolationMode: workIsolationModeSchema.optional(),\n repositoryLockId: z.string().min(1).optional(),\n baseRevision: z.string().min(1).optional(),\n baseContentHash: z.string().min(1).optional(),\n blockerReason: z.string().min(1).optional(),\n attempt: z.number().int().nonnegative().default(0),\n idempotencyKey: z.string().min(1),\n sessionPolicy: sessionPolicySchema.optional(),\n sessionGroupKey: z.string().min(1).optional(),\n toolSessionId: z.string().min(1).optional(),\n sessionDecision: sessionDecisionSchema.optional(),\n sessionDecisionReason: z.string().min(1).optional(),\n lastStatusMessage: z.string().optional(),\n lastStatusAt: isoDateTimeSchema\n});\n\nexport const runnerHeartbeatItemSchema = baseItemSchema.extend({\n type: z.literal(\"runnerHeartbeat\"),\n projectId: z.string().min(1),\n runnerId: z.string().min(1),\n repositoryLinkId: z.string().min(1),\n status: z.enum([\"online\", \"offline\", \"running\", \"blocked\", \"removed\"]),\n workspaceId: z.string().min(1).optional(),\n pairedByUserId: z.string().min(1).optional(),\n machineId: z.string().min(1).optional(),\n version: z.string().optional(),\n mode: z.enum([\"foreground\", \"background\"]).optional(),\n hostname: z.string().min(1).optional(),\n runnerName: z.string().min(1).optional(),\n supportsBranchIsolation: z.boolean().optional(),\n supportsGitWorktreeIsolation: z.boolean().optional(),\n currentWorkItemId: z.string().min(1).optional(),\n currentImplementationScopeId: z.string().min(1).optional(),\n currentWorktreeKey: z.string().min(1).optional(),\n currentBranch: z.string().min(1).optional(),\n capabilities: z.array(runnerToolCapabilitySchema).optional(),\n requestedTool: runnerToolSelectionSchema.optional(),\n requestedInvocationChannel: runnerInvocationChannelSchema.optional(),\n effectiveTool: z.union([runnerToolNameSchema, z.literal(\"custom\")]).optional(),\n effectiveInvocationChannel: runnerEffectiveInvocationChannelSchema.optional(),\n effectiveModel: z.string().min(1).optional(),\n preferenceSource: runnerPreferenceSourceSchema.optional(),\n preferenceStatus: runnerPreferenceStatusSchema.optional(),\n preferenceMessage: z.string().optional(),\n resourceUsage: runnerResourceUsageSchema.optional(),\n lastSeenAt: isoDateTimeSchema\n});\n\nexport const runnerSettingsItemSchema = baseItemSchema.extend({\n type: z.literal(\"accountSettings\"),\n projectId: z.string().min(1),\n settingsType: z.literal(\"runnerPreferences\"),\n scope: runnerPreferenceScopeSchema,\n preferences: runnerToolModelPreferenceSchema\n});\n\nexport const runnerExecutionLogItemSchema = baseItemSchema.extend({\n type: z.literal(\"runnerExecutionLog\"),\n projectId: z.string().min(1),\n runnerLogId: z.string().min(1),\n runnerId: z.string().min(1),\n workKind: workKindSchema.optional(),\n workItemId: z.string().min(1).optional(),\n workTitle: z.string().min(1).optional(),\n initiatedBy: z.string().min(1).optional(),\n approvedBy: z.string().min(1).optional(),\n repositoryLinkId: z.string().min(1).optional(),\n pairedByUserId: z.string().min(1).optional(),\n machineId: z.string().min(1).optional(),\n controllingAdrId: z.string().min(1).optional(),\n implementationScopeId: z.string().min(1).optional(),\n executionBranch: z.string().min(1).optional(),\n executionWorktreeKey: z.string().min(1).optional(),\n isolationMode: workIsolationModeSchema.optional(),\n repositoryLockId: z.string().min(1).optional(),\n claimLeaseId: z.string().min(1).optional(),\n status: z.enum([\"claimed\", \"running\", \"completed\", \"failed\", \"blocked\", \"idle\"]),\n executionMode: executionModeSchema.optional(),\n tool: z.string().min(1).optional(),\n model: z.string().min(1).optional(),\n attempt: z.number().int().nonnegative().optional(),\n startedAt: isoDateTimeSchema.optional(),\n endedAt: isoDateTimeSchema.optional(),\n durationMs: z.number().int().nonnegative().optional(),\n costUsd: z.number().nonnegative().optional(),\n tokensIn: z.number().int().nonnegative().optional(),\n tokensOut: z.number().int().nonnegative().optional(),\n sessionPolicy: sessionPolicySchema.optional(),\n sessionGroupKey: z.string().min(1).optional(),\n toolSessionId: z.string().min(1).optional(),\n sessionDecision: sessionDecisionSchema.optional(),\n sessionDecisionReason: z.string().min(1).optional(),\n message: z.string().optional(),\n error: z.string().optional()\n});\n\nexport const runnerCredentialItemSchema = baseItemSchema.extend({\n type: z.literal(\"runnerCredential\"),\n projectId: z.string().min(1),\n runnerCredentialId: z.string().min(1),\n repositoryLinkId: z.string().min(1),\n pairedByUserId: z.string().min(1).optional(),\n machineId: z.string().min(1).optional(),\n tokenHash: z.string().min(32),\n issuedAt: isoDateTimeSchema,\n lastUsedAt: isoDateTimeSchema.optional(),\n status: z.enum([\"active\", \"revoked\"]).default(\"active\")\n});\n\nexport const runnerCommandKindSchema = z.enum([\"update\", \"restart\", \"remove\"]);\n\nexport const runnerCommandStatusSchema = z.enum([\"pending\", \"acknowledged\", \"running\", \"completed\", \"failed\", \"expired\", \"cancelled\"]);\n\nexport const runnerCommandItemSchema = baseItemSchema.extend({\n type: z.literal(\"runnerCommand\"),\n projectId: z.string().min(1),\n commandId: z.string().min(1),\n commandKind: runnerCommandKindSchema,\n status: runnerCommandStatusSchema,\n runnerId: z.string().min(1),\n repositoryLinkId: z.string().min(1),\n requestedByUserId: z.string().min(1),\n idempotencyKey: z.string().min(1),\n lastStatusIdempotencyKey: z.string().min(1).optional(),\n expiresAt: isoDateTimeSchema,\n acknowledgedAt: isoDateTimeSchema.optional(),\n startedAt: isoDateTimeSchema.optional(),\n completedAt: isoDateTimeSchema.optional(),\n cancelledAt: isoDateTimeSchema.optional(),\n message: z.string().optional(),\n error: z.string().optional()\n});\n\nexport const planReviewMessageRoleSchema = z.enum([\"user\", \"assistant\", \"system\"]);\n\nexport const planReviewMessageIntentSchema = z.enum([\"ask\", \"revisionRequest\", \"revisionResult\"]);\n\nexport const planReviewMessageStatusSchema = z.enum([\"posted\", \"queued\", \"running\", \"completed\", \"failed\"]);\n\nexport const planReviewMessageItemSchema = baseItemSchema.extend({\n type: z.literal(\"planReviewMessage\"),\n projectId: z.string().min(1),\n messageId: z.string().min(1),\n threadId: z.string().min(1),\n generatedDraftId: z.string().min(1),\n documentId: z.string().min(1),\n documentRevision: z.number().int().nonnegative(),\n role: planReviewMessageRoleSchema,\n intent: planReviewMessageIntentSchema,\n status: planReviewMessageStatusSchema,\n content: z.string().min(1),\n workItemId: z.string().min(1).optional(),\n responseToMessageId: z.string().min(1).optional(),\n createdByUserId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional()\n});\n\nexport const assistantMessageRoleSchema = z.enum([\"user\", \"assistant\", \"system\"]);\n\nexport const assistantMessageStatusSchema = z.enum([\"posted\", \"queued\", \"running\", \"completed\", \"failed\"]);\n\nexport const assistantSourceBoundarySchema = z.enum([\"projectBrain\", \"localSource\", \"runnerState\", \"mixed\"]);\n\nexport const assistantCitationSchema = z.object({\n source: assistantSourceBoundarySchema,\n documentId: z.string().min(1).optional(),\n title: z.string().min(1).optional(),\n repoPath: z.string().min(1).optional(),\n documentRevision: z.number().int().nonnegative().optional(),\n excerpt: z.string().max(600).optional()\n});\n\nexport const assistantMessageItemSchema = baseItemSchema.extend({\n type: z.literal(\"assistantMessage\"),\n projectId: z.string().min(1),\n messageId: z.string().min(1),\n threadId: z.string().min(1),\n role: assistantMessageRoleSchema,\n status: assistantMessageStatusSchema,\n content: z.string().min(1),\n questionMode: assistantQuestionModeSchema.optional(),\n sourceBoundary: assistantSourceBoundarySchema.optional(),\n citations: z.array(assistantCitationSchema).default([]),\n relatedDocumentIds: z.array(z.string().min(1)).default([]),\n workItemId: z.string().min(1).optional(),\n responseToMessageId: z.string().min(1).optional(),\n createdByUserId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional(),\n repositoryLinkId: z.string().min(1).optional(),\n repoFingerprint: z.string().min(1).optional(),\n answeredAt: isoDateTimeSchema.optional(),\n error: z.string().optional()\n});\n\nexport const assistantAnswerResultSchema = z.object({\n answer: z.string().trim().min(1),\n sourceBoundary: assistantSourceBoundarySchema.default(\"localSource\"),\n citations: z.array(assistantCitationSchema).default([]),\n summary: z.string().optional()\n});\n\nexport const knowledgeSearchScopeSchema = z.enum([\"project\", \"organization\"]);\n\nexport const knowledgeSourceTypeSchema = z.enum([\"brainDocument\", \"generatedArtifact\", \"runnerSummary\", \"knowledgeEntity\", \"knowledgeRelation\"]);\n\nexport const knowledgeChunkStatusSchema = z.enum([\"approved\", \"synced\", \"stale\"]);\n\nexport const knowledgeEntityTypeSchema = z.enum([\"project\", \"system\", \"component\", \"domain\", \"tool\", \"decision\", \"feature\", \"risk\", \"team\", \"workflow\", \"unknown\"]);\n\nexport const knowledgeRelationTypeSchema = z.enum([\"uses\", \"depends_on\", \"decides\", \"supersedes\", \"touches\", \"blocks\", \"implements\", \"mentions\"]);\n\nexport const knowledgeIndexFreshnessSchema = z.object({\n status: z.enum([\"disabled\", \"fresh\", \"stale\", \"indexing\", \"degraded\"]),\n indexedAt: isoDateTimeSchema.optional(),\n staleReason: z.string().trim().min(1).optional(),\n failedChunkCount: z.number().int().nonnegative().default(0),\n indexedChunkCount: z.number().int().nonnegative().default(0)\n});\n\nexport const knowledgeSearchChunkSchema = z.object({\n chunkId: z.string().min(1),\n accountId: z.string().min(1),\n projectId: z.string().min(1),\n sourceType: knowledgeSourceTypeSchema.default(\"brainDocument\"),\n documentId: z.string().min(1),\n documentType: documentTypeSchema,\n title: z.string().min(1),\n repoPath: z.string().min(1),\n revision: z.number().int().nonnegative(),\n sectionHeading: z.string().trim().min(1).optional(),\n chunkText: z.string().trim().min(1).max(12000),\n chunkHash: z.string().min(1),\n contentHash: z.string().min(1),\n sourceBoundary: assistantSourceBoundarySchema.default(\"projectBrain\"),\n status: knowledgeChunkStatusSchema,\n embeddingModel: z.string().trim().min(1).optional(),\n embedding: z.array(z.number()).max(8192).optional(),\n indexedAt: isoDateTimeSchema.optional(),\n createdAt: isoDateTimeSchema,\n updatedAt: isoDateTimeSchema\n});\n\nexport const knowledgeEntitySchema = z.object({\n entityId: z.string().min(1),\n accountId: z.string().min(1),\n projectIds: z.array(z.string().min(1)).min(1),\n name: z.string().trim().min(1).max(200),\n entityType: knowledgeEntityTypeSchema,\n aliases: z.array(z.string().trim().min(1).max(200)).default([]),\n description: z.string().trim().min(1).max(1200).optional(),\n sourceDocumentIds: z.array(z.string().min(1)).default([]),\n confidence: z.number().min(0).max(1).default(0.6),\n createdAt: isoDateTimeSchema,\n updatedAt: isoDateTimeSchema\n});\n\nexport const knowledgeRelationEndpointSchema = z.object({\n entityId: z.string().min(1),\n name: z.string().trim().min(1).max(200),\n entityType: knowledgeEntityTypeSchema.default(\"unknown\")\n});\n\nexport const knowledgeRelationSchema = z.object({\n relationId: z.string().min(1),\n accountId: z.string().min(1),\n projectIds: z.array(z.string().min(1)).min(1),\n relationType: knowledgeRelationTypeSchema,\n from: knowledgeRelationEndpointSchema,\n to: knowledgeRelationEndpointSchema,\n summary: z.string().trim().min(1).max(1200),\n citations: z.array(assistantCitationSchema).default([]),\n confidence: z.number().min(0).max(1).default(0.6),\n createdAt: isoDateTimeSchema,\n updatedAt: isoDateTimeSchema\n});\n\nexport const knowledgeSearchRequestSchema = z.object({\n query: z.string().trim().min(1).max(2000),\n scope: knowledgeSearchScopeSchema.default(\"project\"),\n projectIds: z.array(z.string().min(1)).max(100).optional(),\n topK: z.number().int().min(1).max(20).default(6),\n includeRelations: z.boolean().default(true),\n useSemanticRanking: z.boolean().default(false)\n});\n\nexport const knowledgeSearchResultSchema = z.object({\n chunkId: z.string().min(1),\n accountId: z.string().min(1),\n projectId: z.string().min(1),\n documentId: z.string().min(1),\n documentType: documentTypeSchema,\n title: z.string().min(1),\n repoPath: z.string().min(1),\n revision: z.number().int().nonnegative(),\n sectionHeading: z.string().trim().min(1).optional(),\n excerpt: z.string().trim().min(1).max(1200),\n sourceBoundary: assistantSourceBoundarySchema.default(\"projectBrain\"),\n score: z.number().optional(),\n citation: assistantCitationSchema\n});\n\nexport const knowledgeSearchResponseSchema = z.object({\n query: z.string().trim().min(1),\n scope: knowledgeSearchScopeSchema,\n results: z.array(knowledgeSearchResultSchema).default([]),\n relations: z.array(knowledgeRelationSchema).default([]),\n freshness: knowledgeIndexFreshnessSchema,\n degradedReason: z.string().trim().min(1).optional()\n});\n\nexport const knowledgeDiagramFormatSchema = z.enum([\"mermaid\"]);\n\nexport const knowledgeDiagramRequestSchema = knowledgeSearchRequestSchema.extend({\n format: knowledgeDiagramFormatSchema.default(\"mermaid\"),\n saveAsDocument: z.boolean().default(false),\n title: z.string().trim().min(1).max(160).optional()\n});\n\nexport const knowledgeDiagramResultSchema = z.object({\n diagramId: z.string().min(1),\n title: z.string().trim().min(1).max(160),\n format: knowledgeDiagramFormatSchema,\n content: z.string().trim().min(1),\n citations: z.array(assistantCitationSchema).default([]),\n sourceResultIds: z.array(z.string().min(1)).default([]),\n documentId: z.string().min(1).optional(),\n freshness: knowledgeIndexFreshnessSchema,\n warnings: z.array(z.string().trim().min(1).max(600)).default([])\n});\n\nexport const impactAffectedAreaSchema = z.object({\n name: z.string().trim().min(1),\n description: z.string().trim().min(1).optional()\n});\n\nexport const impactPathSchema = z.object({\n repoPath: z.string().trim().min(1),\n reason: z.string().trim().min(1).optional()\n});\n\nexport const impactReportItemSchema = baseItemSchema.extend({\n type: z.literal(\"impactReport\"),\n projectId: z.string().min(1),\n impactReportId: z.string().min(1),\n status: impactReportStatusSchema,\n riskLevel: impactRiskLevelSchema.optional(),\n summary: z.string().trim().min(1).optional(),\n affectedAreas: z.array(impactAffectedAreaSchema).default([]),\n likelyPaths: z.array(impactPathSchema).default([]),\n dependencies: z.array(z.string().trim().min(1)).default([]),\n dataSchemaImpact: z.string().trim().min(1).optional(),\n securityPrivacyImpact: z.string().trim().min(1).optional(),\n verificationPlan: z.array(z.string().trim().min(1)).default([]),\n rollbackPlan: z.string().trim().min(1).optional(),\n generatedDraftId: z.string().min(1).optional(),\n sourceWorkItemId: z.string().min(1).optional(),\n documentId: z.string().min(1).optional(),\n documentRevision: z.number().int().nonnegative().optional(),\n repositoryLinkId: z.string().min(1).optional(),\n repoFingerprint: z.string().min(1).optional(),\n analyzedRepoRevision: z.number().int().nonnegative().optional(),\n workItemId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional(),\n createdByUserId: z.string().min(1).optional(),\n completedAt: isoDateTimeSchema.optional(),\n staleReason: z.string().optional(),\n error: z.string().optional()\n});\n\nexport const impactPreviewResultSchema = z.object({\n riskLevel: impactRiskLevelSchema,\n summary: z.string().trim().min(1),\n affectedAreas: z.array(impactAffectedAreaSchema).min(1),\n likelyPaths: z.array(impactPathSchema).default([]),\n dependencies: z.array(z.string().trim().min(1)).default([]),\n dataSchemaImpact: z.string().trim().min(1),\n securityPrivacyImpact: z.string().trim().min(1),\n verificationPlan: z.array(z.string().trim().min(1)).min(1),\n rollbackPlan: z.string().trim().min(1),\n analyzedRepoRevision: z.number().int().nonnegative().optional(),\n repoFingerprint: z.string().min(1).optional()\n});\n\nexport const activityEventItemSchema = baseItemSchema.extend({\n type: z.literal(\"activityEvent\"),\n projectId: z.string().min(1),\n activityEventId: z.string().min(1),\n eventType: activityEventTypeSchema,\n actorType: activityEventActorSchema,\n actorId: z.string().min(1).optional(),\n status: activityEventStatusSchema,\n summary: z.string().trim().min(1).max(600),\n metadata: activityMetadataSchema,\n idempotencyKey: z.string().min(1),\n occurredAt: isoDateTimeSchema,\n relatedWorkItemId: z.string().min(1).optional(),\n relatedDocumentId: z.string().min(1).optional(),\n generatedDraftId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional(),\n repositoryLinkId: z.string().min(1).optional(),\n runnerLogId: z.string().min(1).optional(),\n commandId: z.string().min(1).optional()\n});\n\nexport const activityHandoffExportSchema = z.object({\n markdown: z.string().min(1),\n generatedAt: isoDateTimeSchema,\n eventCount: z.number().int().nonnegative()\n});\n\nexport const toolSessionItemSchema = baseItemSchema.extend({\n type: z.literal(\"toolSession\"),\n projectId: z.string().min(1),\n toolSessionId: z.string().min(1),\n repositoryLinkId: z.string().min(1).optional(),\n tool: z.string().min(1),\n provider: z.string().min(1).optional(),\n model: z.string().min(1).optional(),\n resumabilityScope: sessionResumabilityScopeSchema,\n title: z.string().min(1),\n summary: z.string().optional(),\n tags: z.array(z.string().min(1)).default([]),\n relatedDocumentIds: z.array(z.string().min(1)).default([]),\n status: toolSessionStatusSchema,\n createdByUserId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional(),\n machineId: z.string().min(1).optional(),\n implementationScopeId: z.string().min(1).optional(),\n executionWorktreeKey: z.string().min(1).optional(),\n isolationMode: workIsolationModeSchema.optional(),\n lastWorkItemId: z.string().min(1).optional(),\n lastActivityAt: isoDateTimeSchema,\n messageCount: z.number().int().nonnegative().optional(),\n estimatedInputTokens: z.number().int().nonnegative().optional(),\n estimatedOutputTokens: z.number().int().nonnegative().optional(),\n costUsd: z.number().nonnegative().optional(),\n sessionGroupKey: z.string().min(1).optional(),\n reusePolicy: sessionPolicySchema.optional(),\n closedReason: z.string().optional()\n});\n\nexport const pairingSessionItemSchema = baseItemSchema.extend({\n type: z.literal(\"pairingSession\"),\n pairingCodeHash: z.string().min(1),\n projectId: z.string().min(1),\n createdByUserId: z.string().min(1),\n expiresAt: isoDateTimeSchema,\n status: z.enum([\"pending\", \"confirmed\", \"expired\", \"revoked\"])\n});\n\nexport const projectItemUnionSchema = z.discriminatedUnion(\"type\", [\n projectItemSchema,\n repositoryLinkItemSchema,\n brainDocumentItemSchema,\n generatedDraftItemSchema,\n syncCursorItemSchema,\n syncConflictItemSchema,\n workItemSchema,\n runnerHeartbeatItemSchema,\n runnerSettingsItemSchema,\n runnerExecutionLogItemSchema,\n runnerCredentialItemSchema,\n runnerCommandItemSchema,\n planReviewMessageItemSchema,\n assistantMessageItemSchema,\n impactReportItemSchema,\n activityEventItemSchema,\n toolSessionItemSchema\n]);\n\nexport type ItemType = z.infer<typeof itemTypeSchema>;\nexport type DocumentType = z.infer<typeof documentTypeSchema>;\nexport type SyncState = z.infer<typeof syncStateSchema>;\nexport type WorkStatus = z.infer<typeof workStatusSchema>;\nexport type ExecutionMode = z.infer<typeof executionModeSchema>;\nexport type WorkKind = z.infer<typeof workKindSchema>;\nexport type GeneratedDraftStatus = z.infer<typeof generatedDraftStatusSchema>;\nexport type GeneratedBrainArtifact = z.infer<typeof generatedBrainArtifactSchema>;\nexport type BrainGenerationResult = z.infer<typeof brainGenerationResultSchema>;\nexport type SessionPolicy = z.infer<typeof sessionPolicySchema>;\nexport type SessionDecision = z.infer<typeof sessionDecisionSchema>;\nexport type ToolSessionStatus = z.infer<typeof toolSessionStatusSchema>;\nexport type SessionResumabilityScope = z.infer<typeof sessionResumabilityScopeSchema>;\nexport type RunnerToolName = z.infer<typeof runnerToolNameSchema>;\nexport type RunnerToolSelection = z.infer<typeof runnerToolSelectionSchema>;\nexport type RunnerPreferenceScope = z.infer<typeof runnerPreferenceScopeSchema>;\nexport type RunnerPreferenceSource = z.infer<typeof runnerPreferenceSourceSchema>;\nexport type RunnerPreferenceStatus = z.infer<typeof runnerPreferenceStatusSchema>;\nexport type RunnerInvocationChannel = z.infer<typeof runnerInvocationChannelSchema>;\nexport type RunnerEffectiveInvocationChannel = z.infer<typeof runnerEffectiveInvocationChannelSchema>;\nexport type RunnerToolModelPreference = z.infer<typeof runnerToolModelPreferenceSchema>;\nexport type RunnerToolCapability = z.infer<typeof runnerToolCapabilitySchema>;\nexport type RunnerResourceUsage = z.infer<typeof runnerResourceUsageSchema>;\nexport type WorkIsolationMode = z.infer<typeof workIsolationModeSchema>;\nexport type RepositoryLinkSource = z.infer<typeof repositoryLinkSourceSchema>;\nexport type RepositoryCloneStatus = z.infer<typeof repositoryCloneStatusSchema>;\nexport type ProjectStatus = z.infer<typeof projectStatusSchema>;\nexport type WorkspaceScopeKind = z.infer<typeof workspaceScopeKindSchema>;\nexport type PersonalWorkspaceScope = z.infer<typeof personalWorkspaceScopeSchema>;\nexport type OrganizationWorkspaceScope = z.infer<typeof organizationWorkspaceScopeSchema>;\nexport type ActiveWorkspaceScope = z.infer<typeof activeWorkspaceScopeSchema>;\nexport type OrganizationWorkspaceOnboardingStatus = z.infer<typeof organizationWorkspaceOnboardingStatusSchema>;\nexport type OrganizationWorkspaceOnboarding = z.infer<typeof organizationWorkspaceOnboardingSchema>;\nexport type AccountItem = z.infer<typeof accountItemSchema>;\nexport type UserItem = z.infer<typeof userItemSchema>;\nexport type ProjectItem = z.infer<typeof projectItemSchema>;\nexport type RepositoryLinkItem = z.infer<typeof repositoryLinkItemSchema>;\nexport type BrainDocumentItem = z.infer<typeof brainDocumentItemSchema>;\nexport type GeneratedDraftItem = z.infer<typeof generatedDraftItemSchema>;\nexport type SyncCursorItem = z.infer<typeof syncCursorItemSchema>;\nexport type SyncConflictItem = z.infer<typeof syncConflictItemSchema>;\nexport type WorkItem = z.infer<typeof workItemSchema>;\nexport type RunnerHeartbeatItem = z.infer<typeof runnerHeartbeatItemSchema>;\nexport type RunnerSettingsItem = z.infer<typeof runnerSettingsItemSchema>;\nexport type RunnerExecutionLogItem = z.infer<typeof runnerExecutionLogItemSchema>;\nexport type RunnerCredentialItem = z.infer<typeof runnerCredentialItemSchema>;\nexport type RunnerCommandKind = z.infer<typeof runnerCommandKindSchema>;\nexport type RunnerCommandStatus = z.infer<typeof runnerCommandStatusSchema>;\nexport type RunnerCommandItem = z.infer<typeof runnerCommandItemSchema>;\nexport type PlanReviewMessageRole = z.infer<typeof planReviewMessageRoleSchema>;\nexport type PlanReviewMessageIntent = z.infer<typeof planReviewMessageIntentSchema>;\nexport type PlanReviewMessageStatus = z.infer<typeof planReviewMessageStatusSchema>;\nexport type PlanReviewMessageItem = z.infer<typeof planReviewMessageItemSchema>;\nexport type AssistantMessageRole = z.infer<typeof assistantMessageRoleSchema>;\nexport type AssistantMessageStatus = z.infer<typeof assistantMessageStatusSchema>;\nexport type AssistantQuestionMode = z.infer<typeof assistantQuestionModeSchema>;\nexport type AssistantSourceBoundary = z.infer<typeof assistantSourceBoundarySchema>;\nexport type AssistantCitation = z.infer<typeof assistantCitationSchema>;\nexport type AssistantMessageItem = z.infer<typeof assistantMessageItemSchema>;\nexport type AssistantAnswerResult = z.infer<typeof assistantAnswerResultSchema>;\nexport type KnowledgeSearchScope = z.infer<typeof knowledgeSearchScopeSchema>;\nexport type KnowledgeSourceType = z.infer<typeof knowledgeSourceTypeSchema>;\nexport type KnowledgeChunkStatus = z.infer<typeof knowledgeChunkStatusSchema>;\nexport type KnowledgeEntityType = z.infer<typeof knowledgeEntityTypeSchema>;\nexport type KnowledgeRelationType = z.infer<typeof knowledgeRelationTypeSchema>;\nexport type KnowledgeIndexFreshness = z.infer<typeof knowledgeIndexFreshnessSchema>;\nexport type KnowledgeSearchChunk = z.infer<typeof knowledgeSearchChunkSchema>;\nexport type KnowledgeEntity = z.infer<typeof knowledgeEntitySchema>;\nexport type KnowledgeRelation = z.infer<typeof knowledgeRelationSchema>;\nexport type KnowledgeSearchRequest = z.infer<typeof knowledgeSearchRequestSchema>;\nexport type KnowledgeSearchResult = z.infer<typeof knowledgeSearchResultSchema>;\nexport type KnowledgeSearchResponse = z.infer<typeof knowledgeSearchResponseSchema>;\nexport type KnowledgeDiagramFormat = z.infer<typeof knowledgeDiagramFormatSchema>;\nexport type KnowledgeDiagramRequest = z.infer<typeof knowledgeDiagramRequestSchema>;\nexport type KnowledgeDiagramResult = z.infer<typeof knowledgeDiagramResultSchema>;\nexport type ImpactRiskLevel = z.infer<typeof impactRiskLevelSchema>;\nexport type ImpactReportStatus = z.infer<typeof impactReportStatusSchema>;\nexport type ImpactAffectedArea = z.infer<typeof impactAffectedAreaSchema>;\nexport type ImpactPath = z.infer<typeof impactPathSchema>;\nexport type ImpactReportItem = z.infer<typeof impactReportItemSchema>;\nexport type ImpactPreviewResult = z.infer<typeof impactPreviewResultSchema>;\nexport type ActivityEventType = z.infer<typeof activityEventTypeSchema>;\nexport type ActivityEventActor = z.infer<typeof activityEventActorSchema>;\nexport type ActivityEventStatus = z.infer<typeof activityEventStatusSchema>;\nexport type ActivityMetadata = z.infer<typeof activityMetadataSchema>;\nexport type ActivityEventItem = z.infer<typeof activityEventItemSchema>;\nexport type ActivityHandoffExport = z.infer<typeof activityHandoffExportSchema>;\nexport type ToolSessionItem = z.infer<typeof toolSessionItemSchema>;\nexport type PairingSessionItem = z.infer<typeof pairingSessionItemSchema>;", "export const AMISTIO_API_URL_ENV = \"AMISTIO_API_URL\";\nexport const OFFICIAL_AMISTIO_WEB_ORIGIN = \"https://www.amistio.com\";\n\nconst API_PATH = \"/api\";\n\nexport const officialAmistioApiUrl = normalizeAmistioApiUrl(new URL(API_PATH, OFFICIAL_AMISTIO_WEB_ORIGIN).toString());\n\nexport function normalizeAmistioApiUrl(value: string): string {\n const parsed = new URL(value);\n parsed.hash = \"\";\n parsed.search = \"\";\n if (parsed.pathname.length > 1 && parsed.pathname.endsWith(\"/\")) {\n parsed.pathname = parsed.pathname.slice(0, -1);\n }\n return parsed.toString().replace(/\\/$/, \"\");\n}\n\nexport function isOfficialAmistioApiUrl(value: string): boolean {\n try {\n return normalizeAmistioApiUrl(value) === officialAmistioApiUrl;\n } catch {\n return false;\n }\n}", "const controlPlaneRoots = new Set([\"architecture\", \"context\", \"decisions\", \"features\", \"memory\", \"plans\", \"prompts\", \"workflows\"]);\n\nexport function isControlPlaneTemplateRepoPath(repoPath: string): boolean {\n const normalized = normalizeRepoPath(repoPath);\n const segments = normalized.split(\"/\").filter(Boolean);\n const root = segments[0] === \"docs\" ? segments[1] : segments[0];\n const basename = segments[segments.length - 1]?.toLowerCase();\n return Boolean(root && controlPlaneRoots.has(root) && (basename === \"_template.md\" || basename === \"_template.mdx\"));\n}\n\nfunction normalizeRepoPath(repoPath: string): string {\n return repoPath.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\").replace(/^\\/+/, \"\");\n}", "import { z } from \"zod\";\n\nexport const repoLinkMetadataSchema = z.object({\n amistioProjectId: z.string().min(1),\n amistioAccountId: z.string().min(1),\n repositoryLinkId: z.string().min(1),\n defaultBranch: z.string().min(1).default(\"main\"),\n lastSyncedRevision: z.coerce.number().int().nonnegative().default(0)\n});\n\nexport type RepoLinkMetadata = z.infer<typeof repoLinkMetadataSchema>;\n\nexport const syncedDocumentFrontmatterSchema = z.object({\n amistioDocumentId: z.string().min(1),\n amistioDocumentType: z.string().min(1),\n amistioRevision: z.coerce.number().int().nonnegative(),\n amistioContentHash: z.string().min(1),\n status: z.string().optional()\n});\n\nexport type SyncedDocumentFrontmatter = z.infer<typeof syncedDocumentFrontmatterSchema>;\n\nexport function createProjectLinkMarkdown(metadata: RepoLinkMetadata): string {\n return [\n \"---\",\n `amistioProjectId: ${metadata.amistioProjectId}`,\n `amistioAccountId: ${metadata.amistioAccountId}`,\n `repositoryLinkId: ${metadata.repositoryLinkId}`,\n `defaultBranch: ${metadata.defaultBranch}`,\n `lastSyncedRevision: ${metadata.lastSyncedRevision}`,\n \"---\",\n \"\",\n \"# Amistio Project Link\",\n \"\",\n \"This repository is paired with an Amistio project. Credentials are stored outside the repository on each user's machine.\",\n \"\"\n ].join(\"\\n\");\n}", "export type RepositoryCloneProtocol = \"https\" | \"ssh\";\n\nexport interface ParsedRepositoryCloneUrl {\n cloneUrl: string;\n protocol: RepositoryCloneProtocol;\n host: string;\n path: string;\n repoName: string;\n normalizedKey: string;\n provider?: string;\n repoOwner?: string;\n repoFullName?: string;\n}\n\nconst scpStyleSshPattern = /^([A-Za-z0-9._-]+)@([A-Za-z0-9.-]+):(.+)$/;\n\nexport function parseRepositoryCloneUrl(input: string): ParsedRepositoryCloneUrl {\n const cloneUrl = input.trim();\n if (!cloneUrl) {\n throw new Error(\"Repository URL is required.\");\n }\n\n if (isLocalPathLike(cloneUrl)) {\n throw new Error(\"Use an HTTPS or SSH repository clone URL, not a local path.\");\n }\n\n const scpMatch = scpStyleSshPattern.exec(cloneUrl);\n if (scpMatch) {\n const host = scpMatch[2];\n const rawPath = scpMatch[3];\n if (!host || !rawPath) {\n throw new Error(\"Repository URL must include an owner and repository name.\");\n }\n return buildParsedRepositoryCloneUrl({ cloneUrl, protocol: \"ssh\", host, rawPath });\n }\n\n let url: URL;\n try {\n url = new URL(cloneUrl);\n } catch {\n throw new Error(\"Repository URL must be a valid HTTPS or SSH clone URL.\");\n }\n\n if (url.protocol === \"file:\") {\n throw new Error(\"Use an HTTPS or SSH repository clone URL, not a local path.\");\n }\n\n if (url.protocol !== \"https:\" && url.protocol !== \"ssh:\") {\n throw new Error(\"Repository URL must use HTTPS or SSH.\");\n }\n\n if (url.protocol === \"https:\" && (url.username || url.password)) {\n throw new Error(\"Repository URL must not include embedded credentials.\");\n }\n\n if (url.protocol === \"ssh:\" && url.password) {\n throw new Error(\"Repository SSH URL must not include a password.\");\n }\n\n if (url.search || url.hash) {\n throw new Error(\"Repository URL must not include query strings or fragments.\");\n }\n\n return buildParsedRepositoryCloneUrl({\n cloneUrl,\n protocol: url.protocol === \"https:\" ? \"https\" : \"ssh\",\n host: url.hostname,\n rawPath: url.pathname\n });\n}\n\nexport function repositoryCloneUrlsMatch(firstUrl: string, secondUrl: string): boolean {\n try {\n return parseRepositoryCloneUrl(firstUrl).normalizedKey === parseRepositoryCloneUrl(secondUrl).normalizedKey;\n } catch {\n return false;\n }\n}\n\nexport function redactRepositoryCloneUrl(input: string): string {\n try {\n const url = new URL(input);\n if (url.username || url.password) {\n url.username = \"redacted\";\n url.password = \"redacted\";\n return url.toString();\n }\n } catch {\n // Non-URL SSH forms do not carry password userinfo.\n }\n return input;\n}\n\nfunction buildParsedRepositoryCloneUrl({ cloneUrl, host, protocol, rawPath }: { cloneUrl: string; host: string; protocol: RepositoryCloneProtocol; rawPath: string }): ParsedRepositoryCloneUrl {\n const normalizedHost = host.trim().toLowerCase();\n if (!normalizedHost) {\n throw new Error(\"Repository URL must include a host.\");\n }\n\n const pathWithoutSlash = normalizeRepoPath(rawPath);\n const segments = pathWithoutSlash.split(\"/\").filter(Boolean);\n if (segments.length < 2) {\n throw new Error(\"Repository URL must include an owner and repository name.\");\n }\n\n const repoSegment = segments[segments.length - 1];\n const ownerSegment = segments[segments.length - 2];\n const repoName = stripGitSuffix(repoSegment ?? \"\");\n if (!repoName || !ownerSegment) {\n throw new Error(\"Repository URL must include an owner and repository name.\");\n }\n\n const normalizedSegments = [...segments.slice(0, -1), repoName].map((segment) => segment.toLowerCase());\n const provider = inferRepositoryProvider(normalizedHost);\n const repoOwner = ownerSegment;\n const repoFullName = `${repoOwner}/${repoName}`;\n\n return {\n cloneUrl,\n protocol,\n host: normalizedHost,\n path: pathWithoutSlash,\n repoName,\n normalizedKey: `${normalizedHost}/${normalizedSegments.join(\"/\")}`,\n ...(provider ? { provider } : {}),\n repoOwner,\n repoFullName\n };\n}\n\nfunction normalizeRepoPath(rawPath: string): string {\n const withoutLeadingSlash = rawPath.trim().replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n if (!withoutLeadingSlash || withoutLeadingSlash.includes(\"..\")) {\n throw new Error(\"Repository URL path is not supported.\");\n }\n return withoutLeadingSlash;\n}\n\nfunction stripGitSuffix(value: string): string {\n return value.replace(/\\.git$/i, \"\");\n}\n\nfunction inferRepositoryProvider(host: string): string | undefined {\n if (host === \"github.com\" || host.endsWith(\".github.com\")) return \"github\";\n if (host === \"gitlab.com\" || host.endsWith(\".gitlab.com\")) return \"gitlab\";\n if (host === \"bitbucket.org\" || host.endsWith(\".bitbucket.org\")) return \"bitbucket\";\n if (host.endsWith(\"dev.azure.com\") || host.endsWith(\"visualstudio.com\")) return \"azureDevOps\";\n return \"other\";\n}\n\nfunction isLocalPathLike(value: string): boolean {\n return (\n value.startsWith(\"/\") ||\n value.startsWith(\"./\") ||\n value.startsWith(\"../\") ||\n value.startsWith(\"~/\") ||\n /^[A-Za-z]:[\\\\/]/.test(value)\n );\n}", "import { createHash } from \"node:crypto\";\n\nexport type SyncDecision = \"clean\" | \"pullWeb\" | \"pushRepo\" | \"conflict\";\n\nexport interface SyncRevisionState {\n lastSyncedHash?: string;\n webHash?: string;\n repoHash?: string;\n}\n\nexport function sha256ContentHash(content: string): string {\n return createHash(\"sha256\").update(content, \"utf8\").digest(\"hex\");\n}\n\nexport function decideSyncState(state: SyncRevisionState): SyncDecision {\n const webChanged = Boolean(state.webHash && state.webHash !== state.lastSyncedHash);\n const repoChanged = Boolean(state.repoHash && state.repoHash !== state.lastSyncedHash);\n\n if (webChanged && repoChanged && state.webHash !== state.repoHash) {\n return \"conflict\";\n }\n\n if (webChanged) {\n return \"pullWeb\";\n }\n\n if (repoChanged) {\n return \"pushRepo\";\n }\n\n return \"clean\";\n}", "import type { BrainDocumentItem, RepositoryLinkItem, RunnerHeartbeatItem, WorkItem } from \"./schemas.js\";\n\nexport const projectNextActionKinds = [\n \"noProject\",\n \"linkRepository\",\n \"pairRepository\",\n \"runnerMissing\",\n \"runnerOffline\",\n \"runnerStale\",\n \"brainGenerationQueued\",\n \"brainGenerationRunning\",\n \"brainGenerationFailed\",\n \"planRevisionQueued\",\n \"planRevisionRunning\",\n \"planRevisionFailed\",\n \"generatedArtifactsReview\",\n \"generatedArtifactsPartiallyApproved\",\n \"implementationQueued\",\n \"runnerRunningWork\",\n \"workBlocked\",\n \"workFailed\",\n \"workCompleted\",\n \"idle\"\n] as const;\n\nexport type ProjectNextActionKind = (typeof projectNextActionKinds)[number];\nexport type ProjectNextActionActor = \"user\" | \"runner\" | \"system\" | \"none\";\nexport type ProjectNextActionTone = \"neutral\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface ProjectNextAction {\n kind: ProjectNextActionKind;\n actor: ProjectNextActionActor;\n tone: ProjectNextActionTone;\n title: string;\n message: string;\n detail?: string;\n count?: number;\n documentId?: string;\n repositoryLinkId?: string;\n runnerId?: string;\n updatedAt?: string;\n workItemId?: string;\n}\n\nexport interface ProjectNextActionInput {\n projectId?: string;\n projectName?: string;\n repositoryLinks: RepositoryLinkItem[];\n documents: BrainDocumentItem[];\n workItems: WorkItem[];\n runnerHeartbeats: RunnerHeartbeatItem[];\n nowMs?: number;\n}\n\nexport const nextActionRunnerHeartbeatFreshMs = 15 * 60 * 1000;\n\nexport function computeProjectNextAction(input: ProjectNextActionInput): ProjectNextAction {\n const nowMs = input.nowMs ?? Date.now();\n if (!input.projectId) {\n return {\n kind: \"noProject\",\n actor: \"user\",\n tone: \"neutral\",\n title: \"Create a project\",\n message: \"Create a project before linking a repository or starting runner work.\"\n };\n }\n\n const activeRepositoryLinks = input.repositoryLinks.filter((link) => link.status !== \"revoked\");\n const repositoryLink = activeRepositoryLinks[0];\n if (!repositoryLink) {\n return {\n kind: \"linkRepository\",\n actor: \"user\",\n tone: \"warning\",\n title: \"Link a repository\",\n message: \"Add the project repository so Amistio can pair a local runner.\"\n };\n }\n\n const pairedRepositoryLinks = activeRepositoryLinks.filter((link) => Boolean(link.repoFingerprint));\n if (!pairedRepositoryLinks.length) {\n return {\n kind: \"pairRepository\",\n actor: \"user\",\n tone: \"warning\",\n title: \"Pair the repository\",\n message: `Run the pairing command from ${repositoryLink.repoName} before queueing runner work.`,\n repositoryLinkId: repositoryLink.repositoryLinkId,\n updatedAt: repositoryLink.updatedAt\n };\n }\n\n const runningWork = latestWorkItem(input.workItems.filter((item) => item.status === \"running\"));\n if (runningWork) {\n if (runningWork.workKind === \"brainGeneration\") {\n return workAction(runningWork, \"brainGenerationRunning\", \"runner\", \"warning\", \"Generating project brain\", \"The local runner is generating draft brain artifacts for review.\");\n }\n if (runningWork.workKind === \"planRevision\") {\n return workAction(runningWork, \"planRevisionRunning\", \"runner\", \"warning\", \"Revising the plan\", \"The local runner is revising the generated plan from the conversation.\");\n }\n return workAction(runningWork, \"runnerRunningWork\", \"runner\", \"warning\", \"Runner is working\", \"The local runner has claimed approved implementation work.\");\n }\n\n const generatedReview = generatedReviewState(input.documents);\n if (generatedReview.unapproved.length > 0) {\n const partial = generatedReview.approved.length > 0;\n const title = partial ? \"Finish generated review\" : \"Review generated artifacts\";\n const message = partial\n ? `${generatedReview.unapproved.length} generated artifact${generatedReview.unapproved.length === 1 ? \"\" : \"s\"} still need approval before implementation work can queue.`\n : `${generatedReview.unapproved.length} generated artifact${generatedReview.unapproved.length === 1 ? \"\" : \"s\"} need approval in the web app before the runner can implement them.`;\n return {\n kind: partial ? \"generatedArtifactsPartiallyApproved\" : \"generatedArtifactsReview\",\n actor: \"user\",\n tone: \"warning\",\n title,\n message,\n count: generatedReview.unapproved.length,\n ...(generatedReview.unapproved[0]?.documentId ? { documentId: generatedReview.unapproved[0].documentId } : {}),\n ...(latestTimestamp(generatedReview.unapproved.map((document) => document.updatedAt)) ? { updatedAt: latestTimestamp(generatedReview.unapproved.map((document) => document.updatedAt))! } : {})\n };\n }\n\n const failedBrainGeneration = latestWorkItem(input.workItems.filter((item) => item.workKind === \"brainGeneration\" && item.status === \"failed\"));\n if (failedBrainGeneration) {\n return workAction(failedBrainGeneration, \"brainGenerationFailed\", \"user\", \"danger\", \"Brain generation failed\", failedBrainGeneration.lastStatusMessage ?? \"Retry generation after checking the runner output.\");\n }\n\n const failedPlanRevision = latestWorkItem(input.workItems.filter((item) => item.workKind === \"planRevision\" && item.status === \"failed\"));\n if (failedPlanRevision) {\n return workAction(failedPlanRevision, \"planRevisionFailed\", \"user\", \"danger\", \"Plan revision failed\", failedPlanRevision.lastStatusMessage ?? \"Review the conversation and request another revision if needed.\");\n }\n\n const blockedWork = latestWorkItem(input.workItems.filter((item) => item.status === \"blocked\" || item.status === \"changesRequested\"));\n if (blockedWork) {\n return workAction(blockedWork, \"workBlocked\", \"user\", \"danger\", \"Work is blocked\", blockedWork.lastStatusMessage ?? \"Review the blocked work item before the runner can continue.\");\n }\n\n const failedWork = latestWorkItem(input.workItems.filter((item) => item.status === \"failed\"));\n if (failedWork) {\n return workAction(failedWork, \"workFailed\", \"user\", \"danger\", \"Work failed\", failedWork.lastStatusMessage ?? \"Review the failure and retry or update the plan.\");\n }\n\n const queuedBrainGeneration = latestWorkItem(input.workItems.filter((item) => item.workKind === \"brainGeneration\" && item.status === \"approved\"));\n const queuedPlanRevision = latestWorkItem(input.workItems.filter((item) => item.workKind === \"planRevision\" && item.status === \"approved\"));\n const queuedImplementation = latestWorkItem(input.workItems.filter((item) => item.workKind !== \"brainGeneration\" && item.workKind !== \"planRevision\" && item.status === \"approved\"));\n const queuedWork = queuedBrainGeneration ?? queuedPlanRevision ?? queuedImplementation;\n const readiness = getSharedRunnerReadiness(pairedRepositoryLinks, input.runnerHeartbeats, nowMs);\n\n if (queuedWork && !readiness.ready) {\n const title = queuedWork.workKind === \"brainGeneration\" ? \"Brain generation is queued\" : queuedWork.workKind === \"planRevision\" ? \"Plan revision is queued\" : \"Implementation is queued\";\n return runnerWaitAction(readiness, title);\n }\n\n if (queuedBrainGeneration) {\n return workAction(queuedBrainGeneration, \"brainGenerationQueued\", \"runner\", \"warning\", \"Brain generation queued\", \"The local runner can claim this queued brain-generation work.\");\n }\n\n if (queuedPlanRevision) {\n return workAction(queuedPlanRevision, \"planRevisionQueued\", \"runner\", \"warning\", \"Plan revision queued\", \"The local runner can claim the requested plan revision.\");\n }\n\n if (queuedImplementation) {\n return workAction(queuedImplementation, \"implementationQueued\", \"runner\", \"warning\", \"Implementation queued\", \"The local runner can claim approved implementation work.\");\n }\n\n if (!readiness.ready) {\n return runnerWaitAction(readiness, \"Runner setup needed\");\n }\n\n const completedWork = latestWorkItem(input.workItems.filter((item) => item.status === \"completed\"));\n if (completedWork) {\n return workAction(completedWork, \"workCompleted\", \"none\", \"success\", \"Work completed\", completedWork.lastStatusMessage ?? \"The latest runner work is complete.\");\n }\n\n return {\n kind: \"idle\",\n actor: \"user\",\n tone: \"success\",\n title: \"Ready for the next task\",\n message: \"The repository and runner are ready for a new project-brain request.\",\n ...(readiness.repositoryLink?.repositoryLinkId ? { repositoryLinkId: readiness.repositoryLink.repositoryLinkId } : {}),\n ...(readiness.heartbeat?.runnerId ? { runnerId: readiness.heartbeat.runnerId } : {}),\n ...(readiness.heartbeat?.lastSeenAt ? { updatedAt: readiness.heartbeat.lastSeenAt } : {})\n };\n}\n\nexport function formatProjectNextAction(action: ProjectNextAction): string {\n return `${action.title}: ${action.message}`;\n}\n\ninterface SharedRunnerReadiness {\n ready: boolean;\n reason: \"ready\" | \"runnerMissing\" | \"runnerOffline\" | \"runnerStale\";\n repositoryLink?: RepositoryLinkItem;\n heartbeat?: RunnerHeartbeatItem;\n}\n\nfunction runnerWaitAction(readiness: SharedRunnerReadiness, fallbackTitle: string): ProjectNextAction {\n const repositoryName = readiness.repositoryLink?.repoName ?? \"the paired repository\";\n if (readiness.reason === \"runnerOffline\") {\n return {\n kind: \"runnerOffline\",\n actor: \"user\",\n tone: \"danger\",\n title: \"Restart the runner\",\n message: `The runner for ${repositoryName} is offline. Start amistio run --watch from the paired checkout.`,\n ...(readiness.repositoryLink?.repositoryLinkId ? { repositoryLinkId: readiness.repositoryLink.repositoryLinkId } : {}),\n ...(readiness.heartbeat?.runnerId ? { runnerId: readiness.heartbeat.runnerId } : {}),\n ...(readiness.heartbeat?.lastSeenAt ? { updatedAt: readiness.heartbeat.lastSeenAt } : {})\n };\n }\n if (readiness.reason === \"runnerStale\") {\n return {\n kind: \"runnerStale\",\n actor: \"user\",\n tone: \"warning\",\n title: \"Refresh the runner\",\n message: `The runner for ${repositoryName} has not checked in recently. Restart amistio run --watch from the paired checkout.`,\n ...(readiness.repositoryLink?.repositoryLinkId ? { repositoryLinkId: readiness.repositoryLink.repositoryLinkId } : {}),\n ...(readiness.heartbeat?.runnerId ? { runnerId: readiness.heartbeat.runnerId } : {}),\n ...(readiness.heartbeat?.lastSeenAt ? { updatedAt: readiness.heartbeat.lastSeenAt } : {})\n };\n }\n\n return {\n kind: \"runnerMissing\",\n actor: \"user\",\n tone: \"warning\",\n title: fallbackTitle,\n message: `Start amistio run --watch from ${repositoryName} so the local runner can claim work.`,\n ...(readiness.repositoryLink?.repositoryLinkId ? { repositoryLinkId: readiness.repositoryLink.repositoryLinkId } : {})\n };\n}\n\nfunction getSharedRunnerReadiness(repositoryLinks: RepositoryLinkItem[], runnerHeartbeats: RunnerHeartbeatItem[], nowMs: number): SharedRunnerReadiness {\n const repositoryLinkIds = new Set(repositoryLinks.map((link) => link.repositoryLinkId));\n const latestHeartbeat = runnerHeartbeats\n .filter((heartbeat) => repositoryLinkIds.has(heartbeat.repositoryLinkId) && heartbeat.status !== \"removed\")\n .sort((first, second) => heartbeatTime(second) - heartbeatTime(first))[0];\n const repositoryLink = latestHeartbeat\n ? repositoryLinks.find((link) => link.repositoryLinkId === latestHeartbeat.repositoryLinkId) ?? repositoryLinks[0]\n : repositoryLinks[0];\n\n if (!latestHeartbeat) {\n return { ready: false, reason: \"runnerMissing\", ...(repositoryLink ? { repositoryLink } : {}) };\n }\n if (latestHeartbeat.status === \"offline\") {\n return { ready: false, reason: \"runnerOffline\", ...(repositoryLink ? { repositoryLink } : {}), heartbeat: latestHeartbeat };\n }\n if (!isFreshHeartbeat(latestHeartbeat, nowMs)) {\n return { ready: false, reason: \"runnerStale\", ...(repositoryLink ? { repositoryLink } : {}), heartbeat: latestHeartbeat };\n }\n\n return { ready: true, reason: \"ready\", ...(repositoryLink ? { repositoryLink } : {}), heartbeat: latestHeartbeat };\n}\n\nfunction generatedReviewState(documents: BrainDocumentItem[]) {\n const generated = documents.filter(isGeneratedDocument);\n return {\n approved: generated.filter((document) => document.status === \"approved\"),\n unapproved: generated.filter((document) => document.status !== \"approved\" && document.status !== \"rejected\" && document.syncState !== \"archived\")\n };\n}\n\nfunction isGeneratedDocument(document: BrainDocumentItem): boolean {\n const generatedDraftId = document.frontmatter.generatedDraftId;\n return typeof generatedDraftId === \"string\" && generatedDraftId.length > 0;\n}\n\nfunction workAction(workItem: WorkItem, kind: ProjectNextActionKind, actor: ProjectNextActionActor, tone: ProjectNextActionTone, title: string, message: string): ProjectNextAction {\n return {\n kind,\n actor,\n tone,\n title,\n message,\n workItemId: workItem.workItemId,\n ...(workItem.claimedByRunnerId ? { runnerId: workItem.claimedByRunnerId } : {}),\n updatedAt: workItem.lastStatusAt\n };\n}\n\nfunction latestWorkItem(workItems: WorkItem[]): WorkItem | undefined {\n return [...workItems].sort((first, second) => Date.parse(second.updatedAt) - Date.parse(first.updatedAt))[0];\n}\n\nfunction latestTimestamp(values: string[]): string | undefined {\n return values.sort((first, second) => Date.parse(second) - Date.parse(first))[0];\n}\n\nfunction heartbeatTime(heartbeat: RunnerHeartbeatItem): number {\n const timestamp = Date.parse(heartbeat.lastSeenAt);\n return Number.isNaN(timestamp) ? 0 : timestamp;\n}\n\nfunction isFreshHeartbeat(heartbeat: RunnerHeartbeatItem, nowMs: number): boolean {\n const lastSeenMs = heartbeatTime(heartbeat);\n return lastSeenMs > 0 && nowMs - lastSeenMs <= nextActionRunnerHeartbeatFreshMs;\n}\n", "import { execFile } from \"node:child_process\";\nimport { mkdir, readdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { repositoryCloneUrlsMatch } from \"@amistio/shared\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface BootstrapCheckoutResult {\n status: \"cloned\" | \"validated\";\n targetDir: string;\n originUrl?: string;\n}\n\nexport function buildGitCloneArgs(repoUrl: string, targetDir: string): string[] {\n return [\"clone\", repoUrl, targetDir];\n}\n\nexport async function cloneOrValidateRepository({ repoUrl, targetDir }: { repoUrl: string; targetDir: string }): Promise<BootstrapCheckoutResult> {\n const resolvedTarget = path.resolve(targetDir);\n const targetStat = await stat(resolvedTarget).catch((error: unknown) => {\n if (isNotFoundError(error)) return undefined;\n throw error;\n });\n\n if (!targetStat) {\n await mkdir(path.dirname(resolvedTarget), { recursive: true });\n await runGit(buildGitCloneArgs(repoUrl, resolvedTarget), \"clone\");\n return { status: \"cloned\", targetDir: resolvedTarget };\n }\n\n if (!targetStat.isDirectory()) {\n throw new Error(\"Bootstrap target exists and is not a directory.\");\n }\n\n if (await isGitCheckout(resolvedTarget)) {\n const originUrl = await runGit([\"-C\", resolvedTarget, \"remote\", \"get-url\", \"origin\"], \"remote\");\n if (!repositoryCloneUrlsMatch(repoUrl, originUrl)) {\n throw new Error(\"Bootstrap target is a Git checkout for a different repository.\");\n }\n return { status: \"validated\", targetDir: resolvedTarget, originUrl };\n }\n\n const entries = await readdir(resolvedTarget);\n if (entries.length > 0) {\n throw new Error(\"Bootstrap target exists, is not empty, and is not the linked repository checkout.\");\n }\n\n await runGit(buildGitCloneArgs(repoUrl, resolvedTarget), \"clone\");\n return { status: \"cloned\", targetDir: resolvedTarget };\n}\n\nasync function isGitCheckout(targetDir: string): Promise<boolean> {\n try {\n const result = await runGit([\"-C\", targetDir, \"rev-parse\", \"--is-inside-work-tree\"], \"rev-parse\");\n return result.trim() === \"true\";\n } catch {\n return false;\n }\n}\n\nasync function runGit(args: string[], operation: \"clone\" | \"remote\" | \"rev-parse\"): Promise<string> {\n try {\n const { stdout } = await execFileAsync(\"git\", args, { maxBuffer: 1024 * 1024 });\n return stdout.trim();\n } catch {\n if (operation === \"clone\") {\n throw new Error(\"git clone failed. Confirm local Git credentials can access the repository.\");\n }\n if (operation === \"remote\") {\n throw new Error(\"Could not read the target checkout origin remote.\");\n }\n throw new Error(\"Could not inspect the target Git checkout.\");\n }\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n return Boolean(error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\");\n}", "import { chmod, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\ninterface StoredCredentialFile {\n credentials: Record<string, string>;\n}\n\nexport class LocalCredentialStore {\n constructor(private readonly filePath = path.join(os.homedir(), \".config\", \"amistio\", \"credentials.json\")) { }\n\n async set(key: string, value: string): Promise<void> {\n const data = await this.read();\n data.credentials[key] = value;\n await mkdir(path.dirname(this.filePath), { recursive: true });\n await writeFile(this.filePath, JSON.stringify(data, null, 2), { encoding: \"utf8\", mode: 0o600 });\n await chmod(this.filePath, 0o600);\n }\n\n async get(key: string): Promise<string | undefined> {\n const data = await this.read();\n return data.credentials[key];\n }\n\n async delete(key: string): Promise<void> {\n const data = await this.read();\n if (!(key in data.credentials)) {\n return;\n }\n delete data.credentials[key];\n await mkdir(path.dirname(this.filePath), { recursive: true });\n await writeFile(this.filePath, JSON.stringify(data, null, 2), { encoding: \"utf8\", mode: 0o600 });\n await chmod(this.filePath, 0o600);\n }\n\n private async read(): Promise<StoredCredentialFile> {\n try {\n return JSON.parse(await readFile(this.filePath, \"utf8\")) as StoredCredentialFile;\n } catch {\n return { credentials: {} };\n }\n }\n}\n\nexport function credentialKey(accountId: string, projectId: string, repositoryLinkId: string): string {\n return `${accountId}:${projectId}:${repositoryLinkId}`;\n}", "import { execFile } from \"node:child_process\";\nimport { mkdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { createProjectLinkMarkdown, repoLinkMetadataSchema, type RepoLinkMetadata } from \"@amistio/shared\";\n\nconst execFileAsync = promisify(execFile);\n\nexport const controlPlaneFolders = [\n path.join(\"docs\", \"architecture\"),\n path.join(\"docs\", \"context\"),\n path.join(\"docs\", \"decisions\"),\n path.join(\"docs\", \"features\"),\n path.join(\"docs\", \"memory\"),\n path.join(\"docs\", \"plans\"),\n path.join(\"docs\", \"prompts\", \"shared\"),\n path.join(\"docs\", \"workflows\")\n] as const;\n\nexport async function initControlPlane(rootDir: string): Promise<string[]> {\n const created: string[] = [];\n\n for (const folder of controlPlaneFolders) {\n const fullPath = path.join(rootDir, folder);\n if (!(await exists(fullPath))) {\n await mkdir(fullPath, { recursive: true });\n created.push(folder);\n }\n }\n\n await writeIfMissing(\n path.join(rootDir, \"AGENTS.md\"),\n \"# Agents\\n\\nThe docs/ control-plane folders are the project brain. Keep docs/architecture, docs/context, docs/decisions, docs/features, docs/memory, docs/plans, docs/prompts, and docs/workflows in sync with product intent.\\n\"\n );\n await writeIfMissing(path.join(rootDir, \"docs\", \"context\", \"product.md\"), \"# Product Context\\n\\nDescribe the product direction here.\\n\");\n await writeIfMissing(path.join(rootDir, \"docs\", \"architecture\", \"overview.md\"), \"# Architecture Overview\\n\\nDescribe the system shape here.\\n\");\n\n return created;\n}\n\nexport async function inspectControlPlane(rootDir: string): Promise<{ present: string[]; missing: string[] }> {\n const present: string[] = [];\n const missing: string[] = [];\n\n for (const folder of controlPlaneFolders) {\n if (await exists(path.join(rootDir, folder))) {\n present.push(folder);\n } else {\n missing.push(folder);\n }\n }\n\n return { present, missing };\n}\n\nexport async function writeProjectLink(rootDir: string, metadata: RepoLinkMetadata): Promise<string> {\n const contextDir = path.join(rootDir, \"docs\", \"context\");\n await mkdir(contextDir, { recursive: true });\n const filePath = path.join(contextDir, \"amistio-project.md\");\n await writeFile(filePath, createProjectLinkMarkdown(metadata), \"utf8\");\n return filePath;\n}\n\nexport async function resolvePairingRoot(rootDir: string, options: { explicitRoot?: boolean } = {}): Promise<string> {\n const requestedRoot = path.resolve(rootDir);\n const gitRoot = await readGitTopLevel(requestedRoot).catch(() => undefined);\n if (gitRoot) {\n return gitRoot;\n }\n if (options.explicitRoot) {\n return requestedRoot;\n }\n throw new Error(\"Run `amistio pair` from inside the repository checkout, or pass --root <repo-root> explicitly.\");\n}\n\nexport async function readProjectLink(rootDir: string): Promise<RepoLinkMetadata | undefined> {\n const candidatePaths = [\n path.join(rootDir, \"docs\", \"context\", \"amistio-project.md\"),\n path.join(rootDir, \"context\", \"amistio-project.md\")\n ];\n\n for (const filePath of candidatePaths) {\n if (!(await exists(filePath))) {\n continue;\n }\n\n const content = await readFile(filePath, \"utf8\");\n const frontmatter = parseFrontmatter(content);\n return repoLinkMetadataSchema.parse(frontmatter);\n }\n\n return undefined;\n}\n\nexport function parseFrontmatter(content: string): Record<string, string> {\n if (!content.startsWith(\"---\\n\")) {\n return {};\n }\n\n const end = content.indexOf(\"\\n---\", 4);\n if (end === -1) {\n return {};\n }\n\n const lines = content.slice(4, end).split(\"\\n\");\n return Object.fromEntries(\n lines\n .map((line) => {\n const separator = line.indexOf(\":\");\n if (separator === -1) {\n return undefined;\n }\n return [line.slice(0, separator).trim(), line.slice(separator + 1).trim()] as const;\n })\n .filter((entry): entry is readonly [string, string] => Boolean(entry))\n );\n}\n\nasync function writeIfMissing(filePath: string, content: string): Promise<void> {\n if (await exists(filePath)) {\n return;\n }\n await writeFile(filePath, content, \"utf8\");\n}\n\nasync function exists(filePath: string): Promise<boolean> {\n try {\n await stat(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function readGitTopLevel(rootDir: string): Promise<string> {\n const { stdout } = await execFileAsync(\"git\", [\"-C\", rootDir, \"rev-parse\", \"--show-toplevel\"], { maxBuffer: 1024 * 1024 });\n const gitRoot = stdout.trim();\n if (!gitRoot) {\n throw new Error(\"Git top-level path was empty.\");\n }\n return path.resolve(gitRoot);\n}", "import {\n activityEventItemSchema,\n assistantMessageItemSchema,\n brainDocumentItemSchema,\n generatedDraftItemSchema,\n impactReportItemSchema,\n planReviewMessageItemSchema,\n repositoryLinkItemSchema,\n runnerInvocationChannelSchema,\n runnerPreferenceSourceSchema,\n runnerCommandItemSchema,\n runnerExecutionLogItemSchema,\n runnerHeartbeatItemSchema,\n runnerSettingsItemSchema,\n runnerToolSelectionSchema,\n type BrainDocumentItem,\n type ActivityEventItem,\n type AssistantAnswerResult,\n type AssistantMessageItem,\n type GeneratedBrainArtifact,\n type GeneratedDraftItem,\n type ImpactPreviewResult,\n type ImpactReportItem,\n type RepositoryLinkItem,\n type RunnerCommandItem,\n type RunnerExecutionLogItem,\n sessionDecisionSchema,\n sessionPolicySchema,\n sessionResumabilityScopeSchema,\n toolSessionItemSchema,\n toolSessionStatusSchema,\n workIsolationModeSchema,\n workItemSchema,\n type ExecutionMode,\n type RunnerHeartbeatItem,\n type PlanReviewMessageItem,\n type RunnerPreferenceSource,\n type RunnerPreferenceStatus,\n type RunnerCommandStatus,\n type RunnerEffectiveInvocationChannel,\n type RunnerSettingsItem,\n type RunnerInvocationChannel,\n type RunnerResourceUsage,\n type RunnerToolCapability,\n type RunnerToolModelPreference,\n type RunnerToolName,\n type RunnerToolSelection,\n type SessionDecision,\n type SessionPolicy,\n type SessionResumabilityScope,\n type ToolSessionItem,\n type WorkItem,\n type WorkStatus\n} from \"@amistio/shared\";\nimport { z } from \"zod\";\n\nexport interface ApiClientOptions {\n apiUrl: string;\n accountId?: string;\n token?: string;\n}\n\nexport interface ImportPairingInput {\n pairingCode: string;\n repoName: string;\n repoFingerprint: string;\n defaultBranch: string;\n cloneUrl?: string;\n provider?: string;\n repoOwner?: string;\n repoFullName?: string;\n}\n\nexport interface ImportPairingResponse {\n accountId: string;\n projectId: string;\n repositoryLink: RepositoryLinkItem;\n repositoryLinkAction: \"created\" | \"reused\";\n token: string;\n}\n\nexport interface WorkStatusTelemetry {\n executionMode?: ExecutionMode;\n message?: string;\n tool?: string;\n model?: string;\n durationMs?: number;\n costUsd?: number;\n tokensIn?: number;\n tokensOut?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n pairedByUserId?: string;\n machineId?: string;\n claimLeaseId?: string;\n controllingAdrId?: string;\n implementationScopeId?: string;\n executionBranch?: string;\n executionWorktreeKey?: string;\n isolationMode?: WorkItem[\"isolationMode\"];\n repositoryLockId?: string;\n baseRevision?: string;\n baseContentHash?: string;\n blockerReason?: string;\n error?: string;\n}\n\nexport type BrainGenerationResultMutation =\n | {\n status: \"completed\";\n runnerId: string;\n idempotencyKey: string;\n artifacts: GeneratedBrainArtifact[];\n tool?: string;\n durationMs?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n message?: string;\n }\n | {\n status: \"failed\";\n runnerId: string;\n idempotencyKey: string;\n tool?: string;\n durationMs?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n message?: string;\n error?: string;\n };\n\nexport type AssistantResultMutation =\n | {\n status: \"completed\";\n runnerId: string;\n idempotencyKey: string;\n answer: string;\n sourceBoundary?: AssistantAnswerResult[\"sourceBoundary\"];\n citations?: AssistantAnswerResult[\"citations\"];\n tool?: string;\n durationMs?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n message?: string;\n }\n | {\n status: \"failed\";\n runnerId: string;\n idempotencyKey: string;\n tool?: string;\n durationMs?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n message?: string;\n error?: string;\n };\n\nexport type ImpactPreviewResultMutation =\n | {\n status: \"completed\";\n runnerId: string;\n idempotencyKey: string;\n report: ImpactPreviewResult;\n tool?: string;\n durationMs?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n message?: string;\n }\n | {\n status: \"failed\";\n runnerId: string;\n idempotencyKey: string;\n tool?: string;\n durationMs?: number;\n sessionPolicy?: SessionPolicy;\n sessionGroupKey?: string;\n toolSessionId?: string;\n sessionDecision?: SessionDecision;\n sessionDecisionReason?: string;\n message?: string;\n error?: string;\n };\n\nexport interface ToolSessionMutation {\n toolSessionId?: string;\n repositoryLinkId?: string;\n tool?: string;\n provider?: string;\n model?: string;\n resumabilityScope?: SessionResumabilityScope;\n title?: string;\n summary?: string;\n tags?: string[];\n relatedDocumentIds?: string[];\n status?: ToolSessionItem[\"status\"];\n createdByUserId?: string;\n runnerId?: string;\n lastWorkItemId?: string;\n messageCount?: number;\n estimatedInputTokens?: number;\n estimatedOutputTokens?: number;\n costUsd?: number;\n sessionGroupKey?: string;\n reusePolicy?: SessionPolicy;\n closedReason?: string;\n machineId?: string;\n implementationScopeId?: string;\n executionWorktreeKey?: string;\n isolationMode?: ToolSessionItem[\"isolationMode\"];\n}\n\nexport interface ActivityEventMutation {\n eventType: \"runnerMilestone\";\n status: \"running\" | \"completed\" | \"failed\" | \"blocked\" | \"warning\" | \"info\" | \"queued\";\n summary: string;\n idempotencyKey: string;\n metadata?: Record<string, unknown>;\n relatedWorkItemId?: string;\n relatedDocumentId?: string;\n generatedDraftId?: string;\n runnerId?: string;\n repositoryLinkId?: string;\n}\n\nexport type RunnerHeartbeatStatus = \"online\" | \"offline\" | \"running\" | \"blocked\";\n\nexport type RunnerCommandUpdateStatus = Extract<RunnerCommandStatus, \"acknowledged\" | \"running\" | \"completed\" | \"failed\">;\n\nexport interface RunnerHeartbeatMetadata {\n version?: string;\n mode?: \"foreground\" | \"background\";\n hostname?: string;\n runnerName?: string;\n machineId?: string;\n supportsBranchIsolation?: boolean;\n supportsGitWorktreeIsolation?: boolean;\n currentWorkItemId?: string;\n currentImplementationScopeId?: string;\n currentWorktreeKey?: string;\n currentBranch?: string;\n capabilities?: RunnerToolCapability[];\n requestedTool?: RunnerToolSelection;\n requestedInvocationChannel?: RunnerInvocationChannel;\n effectiveTool?: RunnerToolName | \"custom\";\n effectiveInvocationChannel?: RunnerEffectiveInvocationChannel;\n effectiveModel?: string;\n preferenceSource?: RunnerPreferenceSource;\n preferenceStatus?: RunnerPreferenceStatus;\n preferenceMessage?: string;\n resourceUsage?: RunnerResourceUsage;\n}\n\nexport interface RunnerLogMutation {\n runnerId: string;\n repositoryLinkId: string;\n status: RunnerExecutionLogItem[\"status\"];\n message?: string;\n error?: string;\n workItemId?: string;\n workTitle?: string;\n workKind?: RunnerExecutionLogItem[\"workKind\"];\n tool?: string;\n model?: string;\n durationMs?: number;\n machineId?: string;\n}\n\nexport interface RunnerPreferencesResponse {\n account?: RunnerSettingsItem;\n project?: RunnerSettingsItem;\n effective: RunnerToolModelPreference & { tool: RunnerToolSelection; invocationChannel: RunnerInvocationChannel; source: RunnerPreferenceSource };\n}\n\nexport class ApiClient {\n constructor(private readonly options: ApiClientOptions) { }\n\n async createPairingSession(projectId: string): Promise<{ pairingCode: string; expiresAt: string }> {\n return this.request(\n \"pairing-sessions\",\n z.object({ pairingCode: z.string(), expiresAt: z.string() }),\n {\n method: \"POST\",\n body: JSON.stringify({ projectId })\n }\n );\n }\n\n async consumePairingSession(input: { projectId: string; pairingCode: string; repositoryLinkId: string; repoName: string; repoFingerprint: string; defaultBranch: string }): Promise<{ repositoryLink: RepositoryLinkItem; token: string }> {\n return this.request(\n \"pairing-sessions\",\n z.object({ repositoryLink: repositoryLinkItemSchema, token: z.string().min(1) }),\n {\n method: \"PATCH\",\n body: JSON.stringify(input)\n }\n );\n }\n\n async importPairingSession(input: ImportPairingInput): Promise<ImportPairingResponse> {\n return this.request(\n \"pairing-sessions\",\n z.object({\n accountId: z.string().min(1),\n projectId: z.string().min(1),\n repositoryLink: repositoryLinkItemSchema,\n repositoryLinkAction: z.enum([\"created\", \"reused\"]),\n token: z.string().min(1)\n }),\n {\n method: \"PATCH\",\n body: JSON.stringify(input)\n }\n );\n }\n\n async claimWork(projectId: string, runnerId: string, repositoryLinkId: string, leaseSeconds = 300, metadata: Pick<RunnerHeartbeatMetadata, \"machineId\" | \"supportsBranchIsolation\" | \"supportsGitWorktreeIsolation\"> = {}): Promise<{ workItem: WorkItem | undefined }> {\n return this.request(\n `/projects/${projectId}/work-items/claim`,\n z.object({ workItem: workItemSchema.optional() }).transform(({ workItem }) => ({ workItem })),\n {\n method: \"POST\",\n body: JSON.stringify({ runnerId, repositoryLinkId, leaseSeconds, ...metadata })\n }\n );\n }\n\n async listWorkItems(projectId: string): Promise<{ workItems: WorkItem[] }> {\n return this.request(\n `/projects/${projectId}/work-items`,\n z.object({ workItems: z.array(workItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async listBrainDocuments(projectId: string): Promise<{ documents: BrainDocumentItem[] }> {\n return this.request(\n `/projects/${projectId}/brain-documents`,\n z.object({ documents: z.array(brainDocumentItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async listPlanReviewMessages(projectId: string, documentId?: string): Promise<{ messages: PlanReviewMessageItem[] }> {\n const suffix = documentId ? `?documentId=${encodeURIComponent(documentId)}` : \"\";\n return this.request(\n `/projects/${projectId}/plan-review-messages${suffix}`,\n z.object({ messages: z.array(planReviewMessageItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async listAssistantMessages(projectId: string): Promise<{ messages: AssistantMessageItem[] }> {\n return this.request(\n `/projects/${projectId}/assistant-messages`,\n z.object({ messages: z.array(assistantMessageItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async listImpactReports(projectId: string, generatedDraftId?: string): Promise<{ reports: ImpactReportItem[] }> {\n const query = generatedDraftId ? `?generatedDraftId=${encodeURIComponent(generatedDraftId)}` : \"\";\n return this.request(\n `/projects/${projectId}/impact-reports${query}`,\n z.object({ reports: z.array(impactReportItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async pushBrainDocuments(projectId: string, documents: BrainDocumentItem[]): Promise<{ documents: BrainDocumentItem[] }> {\n return this.request(\n `/projects/${projectId}/brain-documents`,\n z.object({ documents: z.array(brainDocumentItemSchema) }),\n {\n method: \"POST\",\n body: JSON.stringify({ documents })\n }\n );\n }\n\n async listRunners(projectId: string): Promise<{ runners: RunnerHeartbeatItem[] }> {\n return this.request(\n `/projects/${projectId}/runners`,\n z.object({ runners: z.array(runnerHeartbeatItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async listRunnerCommands(projectId: string, runnerId: string, repositoryLinkId: string): Promise<{ commands: RunnerCommandItem[] }> {\n return this.request(\n `/projects/${projectId}/runner-commands?runnerId=${encodeURIComponent(runnerId)}&repositoryLinkId=${encodeURIComponent(repositoryLinkId)}`,\n z.object({ commands: z.array(runnerCommandItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async updateRunnerCommand(projectId: string, commandId: string, input: { runnerId: string; repositoryLinkId: string; status: RunnerCommandUpdateStatus; idempotencyKey: string; message?: string; error?: string }): Promise<{ command: RunnerCommandItem }> {\n return this.request(\n `/projects/${projectId}/runner-commands/${commandId}`,\n z.object({ command: runnerCommandItemSchema }),\n {\n method: \"PATCH\",\n body: JSON.stringify(input)\n }\n );\n }\n\n async getRunnerPreferences(projectId: string): Promise<RunnerPreferencesResponse> {\n const response = await this.request(\n `/projects/${projectId}/runner-preferences`,\n z.object({\n account: runnerSettingsItemSchema.optional(),\n project: runnerSettingsItemSchema.optional(),\n effective: z.object({\n tool: runnerToolSelectionSchema,\n invocationChannel: runnerInvocationChannelSchema,\n model: z.string().optional(),\n source: runnerPreferenceSourceSchema\n })\n }),\n { method: \"GET\" }\n );\n return {\n ...(response.account ? { account: response.account } : {}),\n ...(response.project ? { project: response.project } : {}),\n effective: response.effective\n };\n }\n\n async sendRunnerHeartbeat(projectId: string, runnerId: string, repositoryLinkId: string, status: RunnerHeartbeatStatus, metadata?: string | RunnerHeartbeatMetadata): Promise<{ runner: RunnerHeartbeatItem }> {\n const heartbeatMetadata = typeof metadata === \"string\" ? { version: metadata } : metadata ?? {};\n return this.request(\n `/projects/${projectId}/runners`,\n z.object({ runner: runnerHeartbeatItemSchema }),\n {\n method: \"POST\",\n body: JSON.stringify({ runnerId, repositoryLinkId, status, ...heartbeatMetadata, lastSeenAt: new Date().toISOString() })\n }\n );\n }\n\n async recordRunnerLog(projectId: string, input: RunnerLogMutation): Promise<{ runnerLog: RunnerExecutionLogItem }> {\n return this.request(\n `/projects/${projectId}/runner-logs`,\n z.object({ runnerLog: runnerExecutionLogItemSchema }),\n {\n method: \"POST\",\n body: JSON.stringify(input)\n }\n );\n }\n\n async listToolSessions(projectId: string): Promise<{ toolSessions: ToolSessionItem[] }> {\n return this.request(\n `/projects/${projectId}/tool-sessions`,\n z.object({ toolSessions: z.array(toolSessionItemSchema) }),\n { method: \"GET\" }\n );\n }\n\n async createToolSession(projectId: string, session: Required<Pick<ToolSessionMutation, \"tool\" | \"title\">> & ToolSessionMutation): Promise<{ toolSession: ToolSessionItem }> {\n return this.request(\n `/projects/${projectId}/tool-sessions`,\n z.object({ toolSession: toolSessionItemSchema }),\n {\n method: \"POST\",\n body: JSON.stringify(session)\n }\n );\n }\n\n async updateToolSession(projectId: string, toolSessionId: string, session: ToolSessionMutation): Promise<{ toolSession: ToolSessionItem }> {\n return this.request(\n `/projects/${projectId}/tool-sessions/${toolSessionId}`,\n z.object({ toolSession: toolSessionItemSchema }),\n {\n method: \"PATCH\",\n body: JSON.stringify(session)\n }\n );\n }\n\n async recordActivityEvent(projectId: string, event: ActivityEventMutation): Promise<{ event: ActivityEventItem }> {\n return this.request(\n `/projects/${projectId}/activity-events`,\n z.object({ event: activityEventItemSchema }),\n {\n method: \"POST\",\n body: JSON.stringify(event)\n }\n );\n }\n\n async updateWorkStatus(projectId: string, workItemId: string, status: WorkStatus, idempotencyKey: string, runnerId?: string, telemetry: WorkStatusTelemetry = {}): Promise<{ workItem: WorkItem }> {\n return this.request(\n `/projects/${projectId}/work-items/${workItemId}/status`,\n z.object({ workItem: workItemSchema }),\n {\n method: \"PATCH\",\n body: JSON.stringify({ status, idempotencyKey, ...(runnerId ? { runnerId } : {}), ...telemetry })\n }\n );\n }\n\n async submitBrainGenerationResult(projectId: string, workItemId: string, result: BrainGenerationResultMutation): Promise<{ draft: GeneratedDraftItem; documents: BrainDocumentItem[]; workItem: WorkItem }> {\n return this.request(\n `/projects/${projectId}/work-items/${workItemId}/generation-result`,\n z.object({ draft: generatedDraftItemSchema, documents: z.array(brainDocumentItemSchema), workItem: workItemSchema }),\n {\n method: \"POST\",\n body: JSON.stringify(result)\n }\n );\n }\n\n async submitAssistantResult(projectId: string, workItemId: string, result: AssistantResultMutation): Promise<{ message: AssistantMessageItem; answer?: AssistantMessageItem | undefined; workItem: WorkItem }> {\n return this.request(\n `/projects/${projectId}/work-items/${workItemId}/assistant-result`,\n z.object({ message: assistantMessageItemSchema, answer: assistantMessageItemSchema.optional(), workItem: workItemSchema }),\n {\n method: \"POST\",\n body: JSON.stringify(result)\n }\n );\n }\n\n async submitImpactPreviewResult(projectId: string, workItemId: string, result: ImpactPreviewResultMutation): Promise<{ report: ImpactReportItem; workItem: WorkItem; implementationWorkItem?: WorkItem | undefined }> {\n return this.request(\n `/projects/${projectId}/work-items/${workItemId}/impact-result`,\n z.object({ report: impactReportItemSchema, workItem: workItemSchema, implementationWorkItem: workItemSchema.optional() }),\n {\n method: \"POST\",\n body: JSON.stringify(result)\n }\n );\n }\n\n private async request<T>(urlPath: string, schema: z.ZodSchema<T>, init: RequestInit): Promise<T> {\n const response = await fetch(resolveApiUrl(this.options.apiUrl, urlPath), {\n ...init,\n headers: {\n \"content-type\": \"application/json\",\n ...(this.options.accountId ? { \"x-amistio-account-id\": this.options.accountId } : {}),\n ...(this.options.token ? { authorization: `Bearer ${this.options.token}` } : {})\n }\n });\n\n if (!response.ok) {\n const detail = await response.text().catch(() => \"\");\n throw new Error(`Amistio API request failed: ${response.status} ${response.statusText}${detail ? ` - ${detail}` : \"\"}`);\n }\n\n return schema.parse(await response.json());\n }\n}\n\nexport const toolSessionMutationSchema = z.object({\n toolSessionId: z.string().min(1).optional(),\n repositoryLinkId: z.string().min(1).optional(),\n tool: z.string().min(1).optional(),\n provider: z.string().min(1).optional(),\n model: z.string().min(1).optional(),\n resumabilityScope: sessionResumabilityScopeSchema.optional(),\n title: z.string().min(1).optional(),\n summary: z.string().optional(),\n tags: z.array(z.string()).optional(),\n relatedDocumentIds: z.array(z.string()).optional(),\n status: toolSessionStatusSchema.optional(),\n createdByUserId: z.string().min(1).optional(),\n runnerId: z.string().min(1).optional(),\n lastWorkItemId: z.string().min(1).optional(),\n messageCount: z.number().int().nonnegative().optional(),\n estimatedInputTokens: z.number().int().nonnegative().optional(),\n estimatedOutputTokens: z.number().int().nonnegative().optional(),\n costUsd: z.number().nonnegative().optional(),\n sessionGroupKey: z.string().min(1).optional(),\n reusePolicy: sessionPolicySchema.optional(),\n sessionDecision: sessionDecisionSchema.optional(),\n closedReason: z.string().optional(),\n machineId: z.string().min(1).optional(),\n implementationScopeId: z.string().min(1).optional(),\n executionWorktreeKey: z.string().min(1).optional(),\n isolationMode: workIsolationModeSchema.optional()\n});\n\nfunction resolveApiUrl(apiUrl: string, urlPath: string): URL {\n const base = apiUrl.endsWith(\"/\") ? apiUrl.slice(0, -1) : apiUrl;\n const path = urlPath.startsWith(\"/\") ? urlPath : `/${urlPath}`;\n return new URL(`${base}${path}`);\n}", "import { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { inspectControlPlane } from \"./control-plane.js\";\n\nexport interface OrchestrationPromptOptions {\n rootDir: string;\n goal: string;\n}\n\nexport async function createOrchestrationPrompt(options: OrchestrationPromptOptions): Promise<string> {\n const controlPlane = await inspectControlPlane(options.rootDir);\n return [\n \"# Amistio Orchestration Task\",\n \"\",\n \"You are running locally through the Amistio CLI inside the user's repository.\",\n \"Your job is to keep future agents on the same track by updating the Amistio control plane, not by rewriting the project from scratch.\",\n \"\",\n \"## Goal\",\n \"\",\n options.goal,\n \"\",\n \"## Orchestrator Principle\",\n \"\",\n \"The docs/ control-plane files are the project brain. They exist so agentic coding sessions can continue from established context, decisions, memory, plans, workflows, and prompts instead of drifting into a fresh interpretation each time.\",\n \"\",\n \"## Repository Rules\",\n \"\",\n \"- Read AGENTS.md first when it exists.\",\n \"- Read existing docs/architecture, docs/context, docs/decisions, docs/features, docs/memory, docs/plans, docs/prompts, and docs/workflows files before proposing changes.\",\n \"- Preserve existing intent. Add the next useful orchestration layer instead of replacing old content wholesale.\",\n \"- Prefer small additive edits, dated notes, explicit decisions, focused plans, and executable prompts.\",\n \"- Do not modify product source code unless the user's goal explicitly asks for implementation.\",\n \"- Do not create a repo-local .amistio folder.\",\n \"- Do not write access tokens, API keys, refresh tokens, local filesystem secrets, or machine-specific credentials into the repository.\",\n \"- Do not commit changes.\",\n \"\",\n \"## Control-Plane Areas\",\n \"\",\n \"- AGENTS.md for agent operating rules.\",\n \"- docs/architecture/**/*.md for system shape and boundaries.\",\n \"- docs/context/**/*.md for product, stack, and implementation context.\",\n \"- docs/decisions/**/*.md for ADRs and durable choices.\",\n \"- docs/features/**/*.md for behavior specs and acceptance criteria.\",\n \"- docs/memory/**/*.md for lessons, patterns, and known pitfalls.\",\n \"- docs/plans/**/*.md for near-term execution plans.\",\n \"- docs/prompts/**/*.md for model-agnostic implementation prompts.\",\n \"- docs/workflows/**/*.md for repeatable procedures.\",\n \"\",\n \"## Current Control-Plane Folder Status\",\n \"\",\n `Present: ${controlPlane.present.length ? controlPlane.present.join(\", \") : \"none\"}`,\n `Missing: ${controlPlane.missing.length ? controlPlane.missing.join(\", \") : \"none\"}`,\n \"\",\n \"## Expected Result\",\n \"\",\n \"- Update the smallest useful set of control-plane files needed to orient the next coding agent.\",\n \"- Record any new decision, plan, prompt, workflow, memory, or context that prevents future drift.\",\n \"- Keep old decisions visible. If something is superseded, say so explicitly instead of silently deleting it.\",\n \"- Summarize changed files, why they changed, and the recommended next agent action.\"\n ].join(\"\\n\");\n}\n\nexport async function writePromptFile(filePath: string, prompt: string): Promise<string> {\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(filePath, prompt, \"utf8\");\n return filePath;\n}", "import { spawn } from \"node:child_process\";\nimport { mkdtemp, rm, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { runnerToolNames, type RunnerInvocationChannel, type RunnerToolName, type SessionDecision, type SessionPolicy, type SessionResumabilityScope } from \"@amistio/shared\";\n\nexport const localToolNames = runnerToolNames;\n\nexport type LocalToolName = RunnerToolName;\nexport type ToolRequest = LocalToolName | \"auto\" | \"none\";\n\nexport interface LocalToolAdapter {\n name: LocalToolName;\n description: string;\n sdkPackageName?: string;\n sdkDisplayCommand?: string;\n sdkRequiresExecutable?: boolean;\n executable?: string;\n supportsSessionReuse?: boolean;\n resumabilityScope?: SessionResumabilityScope;\n supportsModelSelection?: boolean;\n buildInvocation?: (input: ToolInvocationInput) => ToolInvocation;\n runWithSdk?: (input: ToolExecutionInput) => Promise<ToolExecutionResult>;\n}\n\nexport interface DetectedLocalTool {\n name: LocalToolName;\n description: string;\n available: boolean;\n sdkAvailable: boolean;\n commandAvailable: boolean;\n execution: \"sdk\" | \"command\" | \"unavailable\";\n supportsSessionReuse: boolean;\n resumabilityScope: SessionResumabilityScope;\n supportsModelSelection: boolean;\n}\n\nexport interface ToolInvocationInput {\n prompt: string;\n promptFilePath: string;\n rootDir: string;\n model?: string;\n}\n\nexport interface ToolExecutionInput extends ToolInvocationInput {\n streamOutput: boolean;\n session?: ToolExecutionSession;\n}\n\nexport interface ToolExecutionSession {\n toolSessionId: string;\n policy: SessionPolicy;\n decision: SessionDecision;\n providerSessionId?: string;\n}\n\nexport interface ToolInvocation {\n command: string;\n args: string[];\n displayCommand: string;\n shell?: boolean;\n stdin?: string;\n}\n\nexport interface RunLocalToolOptions {\n rootDir: string;\n prompt: string;\n tool?: string;\n toolCommand?: string;\n invocationChannel?: RunnerInvocationChannel;\n model?: string;\n streamOutput?: boolean;\n session?: ToolExecutionSession;\n}\n\nexport interface LocalToolRunResult {\n toolName: string;\n displayCommand: string;\n exitCode: number;\n stdout: string;\n stderr: string;\n supportsSessionReuse: boolean;\n resumabilityScope: SessionResumabilityScope;\n model?: string;\n providerSessionId?: string;\n messageCount?: number;\n tokensIn?: number;\n tokensOut?: number;\n costUsd?: number;\n}\n\ninterface ToolExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n providerSessionId?: string;\n messageCount?: number;\n tokensIn?: number;\n tokensOut?: number;\n costUsd?: number;\n}\n\ntype ResolvedToolRunner =\n | {\n toolName: string;\n kind: \"sdk\";\n displayCommand: string;\n adapter: LocalToolAdapter;\n allowCommandFallback: boolean;\n }\n | {\n toolName: string;\n kind: \"command\";\n invocation: ToolInvocation;\n };\n\nexport const localToolAdapters: readonly LocalToolAdapter[] = [\n {\n name: \"opencode\",\n description: \"opencode SDK adapter using @opencode-ai/sdk, with CLI fallback.\",\n sdkPackageName: \"@opencode-ai/sdk\",\n sdkDisplayCommand: \"@opencode-ai/sdk createOpencode().client.session.prompt()\",\n sdkRequiresExecutable: true,\n executable: \"opencode\",\n supportsSessionReuse: true,\n resumabilityScope: \"localMachine\",\n runWithSdk: runOpencodeSdk,\n buildInvocation: ({ prompt }) => ({\n command: \"opencode\",\n args: [\"run\", prompt],\n displayCommand: \"opencode run <generated prompt>\"\n })\n },\n {\n name: \"claude\",\n description: \"Claude Agent SDK adapter using @anthropic-ai/claude-agent-sdk, with CLI fallback.\",\n sdkPackageName: \"@anthropic-ai/claude-agent-sdk\",\n sdkDisplayCommand: \"@anthropic-ai/claude-agent-sdk query()\",\n executable: \"claude\",\n supportsSessionReuse: false,\n resumabilityScope: \"none\",\n runWithSdk: runClaudeSdk,\n buildInvocation: ({ prompt }) => ({\n command: \"claude\",\n args: [\"-p\", prompt],\n displayCommand: \"claude -p <generated prompt>\"\n })\n },\n {\n name: \"codex\",\n description: \"Codex SDK adapter using @openai/codex-sdk, with CLI fallback.\",\n sdkPackageName: \"@openai/codex-sdk\",\n sdkDisplayCommand: \"@openai/codex-sdk Codex.startThread().run()\",\n executable: \"codex\",\n supportsSessionReuse: false,\n resumabilityScope: \"none\",\n runWithSdk: runCodexSdk,\n buildInvocation: ({ prompt }) => ({\n command: \"codex\",\n args: [\"exec\", prompt],\n displayCommand: \"codex exec <generated prompt>\"\n })\n },\n {\n name: \"copilot\",\n description: \"GitHub Copilot SDK adapter using @github/copilot-sdk.\",\n sdkPackageName: \"@github/copilot-sdk\",\n sdkDisplayCommand: \"@github/copilot-sdk CopilotClient.createSession().sendAndWait()\",\n supportsModelSelection: true,\n supportsSessionReuse: false,\n resumabilityScope: \"none\",\n runWithSdk: runCopilotSdk\n },\n {\n name: \"gemini\",\n description: \"Gemini CLI adapter using prompt mode.\",\n executable: \"gemini\",\n supportsSessionReuse: false,\n resumabilityScope: \"none\",\n buildInvocation: ({ prompt }) => ({\n command: \"gemini\",\n args: [\"-p\", prompt],\n displayCommand: \"gemini -p <generated prompt>\"\n })\n },\n {\n name: \"aider\",\n description: \"Aider CLI adapter using a one-shot message.\",\n executable: \"aider\",\n supportsSessionReuse: false,\n resumabilityScope: \"none\",\n buildInvocation: ({ prompt }) => ({\n command: \"aider\",\n args: [\"--yes\", \"--message\", prompt],\n displayCommand: \"aider --yes --message <generated prompt>\"\n })\n },\n {\n name: \"cursor-agent\",\n description: \"Cursor agent CLI adapter using prompt mode when installed.\",\n executable: \"cursor-agent\",\n supportsSessionReuse: false,\n resumabilityScope: \"none\",\n buildInvocation: ({ prompt }) => ({\n command: \"cursor-agent\",\n args: [\"-p\", prompt],\n displayCommand: \"cursor-agent -p <generated prompt>\"\n })\n }\n];\n\nexport function isLocalToolName(value: string): value is LocalToolName {\n return localToolNames.includes(value as LocalToolName);\n}\n\nexport async function detectLocalTools(): Promise<DetectedLocalTool[]> {\n return Promise.all(\n localToolAdapters.map(async (adapter) => {\n const sdkAvailable = await isSdkAvailable(adapter);\n const commandAvailable = adapter.executable ? await commandExists(adapter.executable) : false;\n return {\n name: adapter.name,\n description: adapter.description,\n available: sdkAvailable || commandAvailable,\n sdkAvailable,\n commandAvailable,\n execution: sdkAvailable ? \"sdk\" : commandAvailable ? \"command\" : \"unavailable\",\n supportsSessionReuse: Boolean(adapter.supportsSessionReuse),\n resumabilityScope: adapter.resumabilityScope ?? \"none\",\n supportsModelSelection: Boolean(adapter.supportsModelSelection)\n };\n })\n );\n}\n\nexport async function runLocalTool(options: RunLocalToolOptions): Promise<LocalToolRunResult> {\n const promptTempDir = await mkdtemp(path.join(os.tmpdir(), \"amistio-prompt-\"));\n const promptFilePath = path.join(promptTempDir, \"prompt.md\");\n await writeFile(promptFilePath, options.prompt, \"utf8\");\n\n try {\n const runnerOptions: CreateToolRunnerOptions = {\n rootDir: options.rootDir,\n prompt: options.prompt,\n promptFilePath,\n tool: options.tool ?? \"auto\",\n invocationChannel: options.invocationChannel ?? \"auto\",\n ...(options.model ? { model: options.model } : {})\n };\n if (options.toolCommand) {\n runnerOptions.toolCommand = options.toolCommand;\n }\n const runner = await createToolRunner(runnerOptions);\n const result = await executeToolRunner(runner, {\n rootDir: options.rootDir,\n prompt: options.prompt,\n promptFilePath,\n streamOutput: Boolean(options.streamOutput),\n ...(options.session ? { session: options.session } : {})\n });\n return {\n toolName: runner.toolName,\n displayCommand: runner.kind === \"sdk\" ? runner.displayCommand : runner.invocation.displayCommand,\n supportsSessionReuse: runner.kind === \"sdk\" ? Boolean(runner.adapter.supportsSessionReuse) : false,\n resumabilityScope: runner.kind === \"sdk\" ? runner.adapter.resumabilityScope ?? \"none\" : \"none\",\n ...(options.model ? { model: options.model } : {}),\n ...result\n };\n } finally {\n await rm(promptTempDir, { recursive: true, force: true });\n }\n}\n\nexport async function createToolRunPreview(options: RunLocalToolOptions): Promise<{ toolName: string; displayCommand: string; supportsSessionReuse: boolean; resumabilityScope: SessionResumabilityScope; model?: string }> {\n const promptFilePath = path.join(os.tmpdir(), \"amistio-generated-prompt.md\");\n const runnerOptions: CreateToolRunnerOptions = {\n rootDir: options.rootDir,\n prompt: options.prompt,\n promptFilePath,\n tool: options.tool ?? \"auto\",\n invocationChannel: options.invocationChannel ?? \"auto\",\n ...(options.model ? { model: options.model } : {})\n };\n if (options.toolCommand) {\n runnerOptions.toolCommand = options.toolCommand;\n }\n const runner = await createToolRunner(runnerOptions);\n return {\n toolName: runner.toolName,\n displayCommand: runner.kind === \"sdk\" ? runner.displayCommand : runner.invocation.displayCommand,\n supportsSessionReuse: runner.kind === \"sdk\" ? Boolean(runner.adapter.supportsSessionReuse) : false,\n resumabilityScope: runner.kind === \"sdk\" ? runner.adapter.resumabilityScope ?? \"none\" : \"none\",\n ...(options.model ? { model: options.model } : {})\n };\n}\n\nexport function createCustomToolInvocation(commandTemplate: string, input: ToolInvocationInput): ToolInvocation {\n const displayCommand = commandTemplate\n .replaceAll(\"{promptFile}\", shellQuote(input.promptFilePath))\n .replaceAll(\"{root}\", shellQuote(input.rootDir));\n\n return {\n command: displayCommand,\n args: [],\n displayCommand,\n shell: true,\n ...(commandTemplate.includes(\"{promptFile}\") ? {} : { stdin: input.prompt })\n };\n}\n\ninterface CreateToolRunnerOptions extends ToolInvocationInput {\n tool: string;\n toolCommand?: string;\n invocationChannel: RunnerInvocationChannel;\n}\n\nasync function createToolRunner(options: CreateToolRunnerOptions): Promise<ResolvedToolRunner> {\n if (options.toolCommand) {\n return {\n toolName: \"custom\",\n kind: \"command\",\n invocation: createCustomToolInvocation(options.toolCommand, options)\n };\n }\n\n const tool = normalizeToolRequest(options.tool);\n if (tool === \"none\") {\n throw new Error(\"No local tool selected. Use --tool auto, a supported tool name, or --tool-command.\");\n }\n\n const adapter = tool === \"auto\" ? await selectFirstAvailableAdapter(Boolean(options.model), options.invocationChannel) : await selectRequestedAdapter(tool, options.invocationChannel);\n if (options.model && !adapter.supportsModelSelection) {\n throw new Error(`Model selection is not supported by ${adapter.name}. Remove --model or choose a model-aware adapter.`);\n }\n if (options.invocationChannel !== \"command\" && adapter.runWithSdk && (await isSdkAvailable(adapter))) {\n return {\n toolName: adapter.name,\n kind: \"sdk\",\n displayCommand: adapter.sdkDisplayCommand ?? `${adapter.name} SDK`,\n adapter,\n allowCommandFallback: options.invocationChannel === \"auto\"\n };\n }\n\n if (options.invocationChannel !== \"sdk\" && adapter.buildInvocation && adapter.executable && (await commandExists(adapter.executable))) {\n return {\n toolName: adapter.name,\n kind: \"command\",\n invocation: adapter.buildInvocation(options)\n };\n }\n\n if (options.invocationChannel === \"sdk\") {\n throw new Error(`The ${adapter.name} SDK was not found. Select Auto or Command invocation, install the SDK/runtime, or pass --tool-command locally.`);\n }\n if (options.invocationChannel === \"command\") {\n throw new Error(`The ${adapter.name} executable was not found. Select Auto or SDK invocation, install the command, or pass --tool-command locally.`);\n }\n throw new Error(`The ${adapter.name} SDK or executable was not found. Install the SDK/runtime or pass --tool-command.`);\n}\n\nasync function executeToolRunner(runner: ResolvedToolRunner, input: ToolExecutionInput): Promise<ToolExecutionResult> {\n if (runner.kind === \"command\") {\n return executeToolInvocation(runner.invocation, input.rootDir, input.streamOutput);\n }\n\n try {\n return await runner.adapter.runWithSdk!(input);\n } catch (error) {\n if (runner.allowCommandFallback && runner.adapter.buildInvocation && runner.adapter.executable && (await commandExists(runner.adapter.executable))) {\n const fallback = runner.adapter.buildInvocation(input);\n const result = await executeToolInvocation(fallback, input.rootDir, input.streamOutput);\n const sdkFailure = `SDK execution for ${runner.adapter.name} failed, fell back to ${fallback.displayCommand}: ${errorMessage(error)}`;\n return {\n ...result,\n stderr: result.stderr ? `${sdkFailure}\\n${result.stderr}` : sdkFailure\n };\n }\n\n throw error;\n }\n}\n\nfunction normalizeToolRequest(value: string): ToolRequest {\n if (value === \"auto\" || value === \"none\" || isLocalToolName(value)) {\n return value;\n }\n\n throw new Error(`Unsupported local tool: ${value}. Supported tools: auto, none, ${localToolNames.join(\", \")}.`);\n}\n\nasync function selectFirstAvailableAdapter(requiresModelSelection = false, invocationChannel: RunnerInvocationChannel = \"auto\"): Promise<LocalToolAdapter> {\n for (const adapter of localToolAdapters) {\n if (requiresModelSelection && !adapter.supportsModelSelection) {\n continue;\n }\n const sdkAvailable = await isSdkAvailable(adapter);\n const commandAvailable = adapter.executable ? await commandExists(adapter.executable) : false;\n if (supportsRequestedInvocationChannel({ sdkAvailable, commandAvailable }, invocationChannel)) {\n return adapter;\n }\n }\n\n if (invocationChannel !== \"auto\") {\n throw new Error(`No installed local AI tool supports ${invocationChannel} invocation${requiresModelSelection ? \" with model selection\" : \"\"}. Select Auto or install a compatible tool.`);\n }\n throw new Error(\n requiresModelSelection\n ? \"No installed local AI tool supports model selection. Remove --model or choose a model-aware adapter.\"\n : `No supported local AI tool was found. Install one of ${localToolNames.join(\", \")} or pass --tool-command \"your-tool --prompt-file {promptFile}\".`\n );\n}\n\nasync function selectRequestedAdapter(tool: LocalToolName, invocationChannel: RunnerInvocationChannel = \"auto\"): Promise<LocalToolAdapter> {\n const adapter = localToolAdapters.find((candidate) => candidate.name === tool);\n if (!adapter) {\n throw new Error(`Unsupported local tool: ${tool}.`);\n }\n const sdkAvailable = await isSdkAvailable(adapter);\n const commandAvailable = adapter.executable ? await commandExists(adapter.executable) : false;\n if (!supportsRequestedInvocationChannel({ sdkAvailable, commandAvailable }, invocationChannel)) {\n if (invocationChannel === \"sdk\") {\n throw new Error(`The ${tool} SDK was not found. Select Auto or Command invocation, install it, or pass --tool-command locally.`);\n }\n if (invocationChannel === \"command\") {\n throw new Error(`The ${tool} executable was not found. Select Auto or SDK invocation, install it, or pass --tool-command locally.`);\n }\n throw new Error(`The ${tool} SDK or executable was not found. Install it or pass --tool-command.`);\n }\n if (invocationChannel !== \"command\" && sdkAvailable) {\n return adapter;\n }\n if (invocationChannel !== \"sdk\" && commandAvailable) {\n return adapter;\n }\n throw new Error(`The ${tool} SDK or executable was not found. Install it or pass --tool-command.`);\n}\n\nfunction supportsRequestedInvocationChannel(capability: { sdkAvailable: boolean; commandAvailable: boolean }, invocationChannel: RunnerInvocationChannel): boolean {\n if (invocationChannel === \"auto\") return capability.sdkAvailable || capability.commandAvailable;\n if (invocationChannel === \"sdk\") return capability.sdkAvailable;\n return capability.commandAvailable;\n}\n\nasync function isSdkAvailable(adapter: LocalToolAdapter): Promise<boolean> {\n if (!adapter.sdkPackageName || !adapter.runWithSdk) {\n return false;\n }\n if (adapter.sdkRequiresExecutable && adapter.executable && !(await commandExists(adapter.executable))) {\n return false;\n }\n\n return packageAvailable(adapter.sdkPackageName);\n}\n\nasync function packageAvailable(packageName: string): Promise<boolean> {\n try {\n await import(packageName);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function commandExists(command: string): Promise<boolean> {\n const lookupCommand = process.platform === \"win32\" ? \"where\" : \"which\";\n return new Promise((resolve) => {\n const lookup = spawn(lookupCommand, [command], { stdio: \"ignore\" });\n lookup.on(\"error\", () => resolve(false));\n lookup.on(\"close\", (exitCode) => resolve(exitCode === 0));\n });\n}\n\nasync function executeToolInvocation(\n invocation: ToolInvocation,\n rootDir: string,\n streamOutput: boolean\n): Promise<{ exitCode: number; stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n const child = spawn(invocation.command, invocation.args, {\n cwd: rootDir,\n env: process.env,\n shell: invocation.shell ?? false,\n stdio: [\"pipe\", \"pipe\", \"pipe\"]\n });\n let stdout = \"\";\n let stderr = \"\";\n\n child.on(\"error\", reject);\n child.stdout.setEncoding(\"utf8\");\n child.stderr.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (chunk: string) => {\n stdout += chunk;\n if (streamOutput) {\n process.stdout.write(chunk);\n }\n });\n child.stderr.on(\"data\", (chunk: string) => {\n stderr += chunk;\n if (streamOutput) {\n process.stderr.write(chunk);\n }\n });\n child.stdin.on(\"error\", () => undefined);\n if (invocation.stdin) {\n child.stdin.write(invocation.stdin);\n }\n child.stdin.end();\n child.on(\"close\", (exitCode) => {\n resolve({ exitCode: exitCode ?? 1, stdout, stderr });\n });\n });\n}\n\nasync function runOpencodeSdk(input: ToolExecutionInput): Promise<ToolExecutionResult> {\n const { createOpencode } = await import(\"@opencode-ai/sdk\");\n const previousDirectory = process.cwd();\n process.chdir(input.rootDir);\n try {\n const opencode = await createOpencode({ timeout: 10_000 });\n try {\n let providerSessionId = input.session?.providerSessionId;\n if (!providerSessionId) {\n const sessionResult = (await opencode.client.session.create({\n query: { directory: input.rootDir },\n body: { title: \"Amistio orchestration\" }\n })) as OpencodeResult<{ id: string }>;\n if (sessionResult.error || !sessionResult.data) {\n throw new Error(`opencode session create failed: ${JSON.stringify(sessionResult.error ?? \"missing data\")}`);\n }\n providerSessionId = sessionResult.data.id;\n }\n\n const promptResult = (await opencode.client.session.prompt({\n path: { id: providerSessionId },\n query: { directory: input.rootDir },\n body: { parts: [{ type: \"text\", text: input.prompt }] }\n })) as OpencodeResult<{ parts?: unknown[] }>;\n if (promptResult.error || !promptResult.data) {\n throw new Error(`opencode prompt failed: ${JSON.stringify(promptResult.error ?? \"missing data\")}`);\n }\n\n const stdout = extractTextParts(promptResult.data.parts);\n if (input.streamOutput && stdout) {\n process.stdout.write(stdout);\n }\n return { exitCode: 0, stdout, stderr: \"\", providerSessionId, messageCount: 1 };\n } finally {\n opencode.server.close();\n }\n } finally {\n process.chdir(previousDirectory);\n }\n}\n\nasync function runClaudeSdk(input: ToolExecutionInput): Promise<ToolExecutionResult> {\n const { query } = await import(\"@anthropic-ai/claude-agent-sdk\");\n let stdout = \"\";\n let stderr = \"\";\n let exitCode = 0;\n\n for await (const message of query({\n prompt: input.prompt,\n options: {\n cwd: input.rootDir,\n permissionMode: \"default\",\n tools: { type: \"preset\", preset: \"claude_code\" },\n env: {\n ...process.env,\n CLAUDE_AGENT_SDK_CLIENT_APP: \"amistio-cli/0.1.0\"\n }\n }\n })) {\n if (isRecord(message) && message.type === \"result\") {\n if (message.subtype === \"success\" && typeof message.result === \"string\") {\n stdout += message.result;\n if (input.streamOutput) {\n process.stdout.write(message.result);\n }\n } else {\n exitCode = 1;\n const resultMessage = message as Record<string, unknown>;\n const errors = Array.isArray(resultMessage.errors) ? resultMessage.errors.map(String).join(\"\\n\") : \"Claude Agent SDK execution failed.\";\n stderr += errors;\n }\n }\n }\n\n return { exitCode, stdout, stderr };\n}\n\nasync function runCodexSdk(input: ToolExecutionInput): Promise<ToolExecutionResult> {\n const { Codex } = await import(\"@openai/codex-sdk\");\n const codex = new Codex();\n const thread = codex.startThread({\n workingDirectory: input.rootDir,\n sandboxMode: \"workspace-write\",\n approvalPolicy: \"on-request\",\n skipGitRepoCheck: true\n });\n const result = await thread.run(input.prompt);\n if (input.streamOutput && result.finalResponse) {\n process.stdout.write(result.finalResponse);\n }\n return { exitCode: 0, stdout: result.finalResponse, stderr: \"\" };\n}\n\nasync function runCopilotSdk(input: ToolExecutionInput): Promise<ToolExecutionResult> {\n const { CopilotClient, approveAll } = await import(\"@github/copilot-sdk\");\n const client = new CopilotClient({\n cwd: input.rootDir,\n logLevel: \"error\"\n });\n try {\n await client.start();\n const session = await client.createSession({\n clientName: \"amistio-cli\",\n model: input.model ?? process.env.AMISTIO_COPILOT_MODEL ?? \"gpt-5\",\n workingDirectory: input.rootDir,\n enableConfigDiscovery: true,\n streaming: input.streamOutput,\n onPermissionRequest: approveAll\n });\n\n try {\n let streamedOutput = \"\";\n const unsubscribe = input.streamOutput\n ? session.on(\"assistant.message_delta\", (event) => {\n streamedOutput += event.data.deltaContent;\n process.stdout.write(event.data.deltaContent);\n })\n : undefined;\n try {\n const response = await session.sendAndWait({ prompt: input.prompt }, 10 * 60 * 1000);\n const stdout = response?.data.content ?? streamedOutput;\n return { exitCode: 0, stdout, stderr: \"\" };\n } finally {\n unsubscribe?.();\n }\n } finally {\n await session.disconnect();\n }\n } finally {\n await client.stop();\n }\n}\n\ninterface OpencodeResult<TData> {\n data?: TData;\n error?: unknown;\n}\n\nfunction extractTextParts(parts: unknown): string {\n if (!Array.isArray(parts)) {\n return \"\";\n }\n\n return parts\n .filter(isRecord)\n .map((part) => (part.type === \"text\" && typeof part.text === \"string\" ? part.text : \"\"))\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n}", "import { spawn } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { openSync } from \"node:fs\";\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport type RunnerProcessMode = \"foreground\" | \"background\";\nexport type RunnerDaemonStatus = \"running\" | \"stopped\";\n\nexport interface RunnerDaemonMetadata {\n schemaVersion: 1;\n accountId: string;\n projectId: string;\n repositoryLinkId: string;\n runnerId: string;\n rootDir: string;\n apiUrl: string;\n pid: number;\n status: RunnerDaemonStatus;\n startedAt: string;\n updatedAt: string;\n hostname: string;\n logPath?: string;\n stoppedAt?: string;\n}\n\nexport interface StartRunnerDaemonInput {\n accountId: string;\n projectId: string;\n repositoryLinkId: string;\n runnerId: string;\n rootDir: string;\n apiUrl: string;\n args: string[];\n executablePath?: string;\n scriptPath?: string;\n metadataDir?: string;\n}\n\nexport function currentRunnerMode(): RunnerProcessMode {\n return process.env.AMISTIO_RUNNER_MODE === \"background\" ? \"background\" : \"foreground\";\n}\n\nexport function defaultRunnerMetadataDir(): string {\n return path.join(os.homedir(), \".config\", \"amistio\", \"runners\");\n}\n\nexport async function startRunnerDaemon(input: StartRunnerDaemonInput): Promise<RunnerDaemonMetadata> {\n const metadataDir = input.metadataDir ?? defaultRunnerMetadataDir();\n const existing = await readRunnerDaemonMetadata(input, metadataDir);\n if (existing?.status === \"running\" && isProcessRunning(existing.pid)) {\n throw new Error(`Background runner ${existing.runnerId} is already running with PID ${existing.pid}.`);\n }\n\n await mkdir(metadataDir, { recursive: true });\n const logPath = path.join(metadataDir, `${runnerDaemonKey(input)}.log`);\n const logFd = openSync(logPath, \"a\");\n const child = spawn(input.executablePath ?? process.execPath, [input.scriptPath ?? process.argv[1]!, ...input.args], {\n cwd: input.rootDir,\n detached: true,\n env: {\n ...process.env,\n AMISTIO_RUNNER_MODE: \"background\"\n },\n stdio: [\"ignore\", logFd, logFd]\n });\n\n if (!child.pid) {\n throw new Error(\"Failed to start background runner process.\");\n }\n\n child.unref();\n\n const now = new Date().toISOString();\n const metadata: RunnerDaemonMetadata = {\n schemaVersion: 1,\n accountId: input.accountId,\n projectId: input.projectId,\n repositoryLinkId: input.repositoryLinkId,\n runnerId: input.runnerId,\n rootDir: path.resolve(input.rootDir),\n apiUrl: input.apiUrl,\n pid: child.pid,\n status: \"running\",\n startedAt: now,\n updatedAt: now,\n hostname: os.hostname(),\n logPath\n };\n await writeRunnerDaemonMetadata(metadata, metadataDir);\n return metadata;\n}\n\nexport async function restartRunnerDaemonProcess(metadata: RunnerDaemonMetadata, args: string[], input: { executablePath?: string; scriptPath?: string; metadataDir?: string } = {}): Promise<RunnerDaemonMetadata> {\n const metadataDir = input.metadataDir ?? defaultRunnerMetadataDir();\n await mkdir(metadataDir, { recursive: true });\n const logPath = metadata.logPath ?? path.join(metadataDir, `${runnerDaemonKey(metadata)}.log`);\n const logFd = openSync(logPath, \"a\");\n const child = spawn(input.executablePath ?? process.execPath, [input.scriptPath ?? process.argv[1]!, ...args], {\n cwd: metadata.rootDir,\n detached: true,\n env: {\n ...process.env,\n AMISTIO_RUNNER_MODE: \"background\"\n },\n stdio: [\"ignore\", logFd, logFd]\n });\n\n if (!child.pid) {\n throw new Error(\"Failed to start replacement background runner process.\");\n }\n\n child.unref();\n const now = new Date().toISOString();\n const replacement: RunnerDaemonMetadata = {\n ...metadata,\n pid: child.pid,\n status: \"running\",\n startedAt: now,\n updatedAt: now,\n hostname: os.hostname(),\n logPath\n };\n await writeRunnerDaemonMetadata(replacement, metadataDir);\n return replacement;\n}\n\nexport async function listRunnerDaemonMetadata(input: { accountId: string; projectId: string; repositoryLinkId: string; runnerId?: string }, metadataDir = defaultRunnerMetadataDir()): Promise<RunnerDaemonMetadata[]> {\n let entries: string[];\n try {\n entries = await readdir(metadataDir);\n } catch {\n return [];\n }\n\n const records = await Promise.all(\n entries\n .filter((entry) => entry.endsWith(\".json\"))\n .map(async (entry) => readRunnerDaemonMetadataFile(path.join(metadataDir, entry)))\n );\n\n return records\n .filter((record): record is RunnerDaemonMetadata => Boolean(record))\n .filter((record) => record.accountId === input.accountId && record.projectId === input.projectId && record.repositoryLinkId === input.repositoryLinkId)\n .filter((record) => !input.runnerId || record.runnerId === input.runnerId)\n .sort((a, b) => Date.parse(b.updatedAt) - Date.parse(a.updatedAt));\n}\n\nexport async function readRunnerDaemonMetadata(input: { accountId: string; projectId: string; repositoryLinkId: string; runnerId: string }, metadataDir = defaultRunnerMetadataDir()): Promise<RunnerDaemonMetadata | undefined> {\n return readRunnerDaemonMetadataFile(runnerDaemonMetadataPath(input, metadataDir));\n}\n\nexport async function writeRunnerDaemonMetadata(metadata: RunnerDaemonMetadata, metadataDir = defaultRunnerMetadataDir()): Promise<void> {\n await mkdir(metadataDir, { recursive: true });\n await writeFile(runnerDaemonMetadataPath(metadata, metadataDir), JSON.stringify(metadata, null, 2), { encoding: \"utf8\", mode: 0o600 });\n}\n\nexport async function markRunnerDaemonStopped(metadata: RunnerDaemonMetadata, metadataDir = defaultRunnerMetadataDir()): Promise<RunnerDaemonMetadata> {\n const now = new Date().toISOString();\n const stopped: RunnerDaemonMetadata = {\n ...metadata,\n status: \"stopped\",\n stoppedAt: now,\n updatedAt: now\n };\n await writeRunnerDaemonMetadata(stopped, metadataDir);\n return stopped;\n}\n\nexport async function stopRunnerDaemonProcess(metadata: RunnerDaemonMetadata): Promise<\"stopped\" | \"not-running\"> {\n if (!isProcessRunning(metadata.pid)) {\n return \"not-running\";\n }\n\n process.kill(metadata.pid, \"SIGTERM\");\n for (let attempt = 0; attempt < 30; attempt += 1) {\n if (!isProcessRunning(metadata.pid)) {\n return \"stopped\";\n }\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n return isProcessRunning(metadata.pid) ? \"not-running\" : \"stopped\";\n}\n\nexport function isProcessRunning(pid: number): boolean {\n if (!Number.isInteger(pid) || pid <= 0) {\n return false;\n }\n\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n const code = typeof error === \"object\" && error && \"code\" in error ? (error as { code?: string }).code : undefined;\n return code === \"EPERM\";\n }\n}\n\nexport function runnerDaemonRuntimeStatus(metadata: RunnerDaemonMetadata): \"running\" | \"stale\" | \"stopped\" {\n if (metadata.status === \"stopped\") {\n return \"stopped\";\n }\n return isProcessRunning(metadata.pid) ? \"running\" : \"stale\";\n}\n\nexport function runnerDaemonUptime(metadata: RunnerDaemonMetadata, now = Date.now()): string {\n const startedAt = Date.parse(metadata.startedAt);\n if (!Number.isFinite(startedAt)) {\n return \"unknown\";\n }\n const totalSeconds = Math.max(0, Math.floor((now - startedAt) / 1000));\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n if (hours > 0) {\n return `${hours}h ${minutes}m`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds}s`;\n }\n return `${seconds}s`;\n}\n\nfunction runnerDaemonMetadataPath(input: { accountId: string; projectId: string; repositoryLinkId: string; runnerId: string }, metadataDir: string): string {\n return path.join(metadataDir, `${runnerDaemonKey(input)}.json`);\n}\n\nfunction runnerDaemonKey(input: { accountId: string; projectId: string; repositoryLinkId: string; runnerId: string }): string {\n return createHash(\"sha256\").update(`${input.accountId}:${input.projectId}:${input.repositoryLinkId}:${input.runnerId}`).digest(\"hex\");\n}\n\nasync function readRunnerDaemonMetadataFile(filePath: string): Promise<RunnerDaemonMetadata | undefined> {\n try {\n const parsed = JSON.parse(await readFile(filePath, \"utf8\")) as RunnerDaemonMetadata;\n if (parsed.schemaVersion !== 1 || !parsed.runnerId || !parsed.projectId || !parsed.repositoryLinkId) {\n return undefined;\n }\n return parsed;\n } catch {\n return undefined;\n }\n}\n", "import { spawn } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { defaultRunnerMetadataDir } from \"./runner-daemon.js\";\n\nexport type RunnerServicePlatform = \"launchd\" | \"systemd\" | \"unsupported\";\nexport type RunnerServiceStatus = \"installed\" | \"removed\";\n\nexport interface RunnerServiceMetadata {\n schemaVersion: 1;\n accountId: string;\n projectId: string;\n repositoryLinkId: string;\n runnerId: string;\n rootDir: string;\n apiUrl: string;\n serviceName: string;\n serviceFilePath: string;\n platform: Exclude<RunnerServicePlatform, \"unsupported\">;\n status: RunnerServiceStatus;\n createdAt: string;\n updatedAt: string;\n args: string[];\n}\n\nexport interface RunnerServiceDescriptor {\n metadata: RunnerServiceMetadata;\n content: string;\n}\n\nexport interface RunnerServiceInput {\n accountId: string;\n projectId: string;\n repositoryLinkId: string;\n runnerId: string;\n rootDir: string;\n apiUrl: string;\n args: string[];\n executablePath?: string;\n scriptPath?: string;\n homeDir?: string;\n metadataDir?: string;\n platform?: RunnerServicePlatform;\n}\n\nexport function detectRunnerServicePlatform(platform = process.platform): RunnerServicePlatform {\n if (platform === \"darwin\") return \"launchd\";\n if (platform === \"linux\") return \"systemd\";\n return \"unsupported\";\n}\n\nexport function createRunnerServiceDescriptor(input: RunnerServiceInput): RunnerServiceDescriptor {\n const platform = input.platform ?? detectRunnerServicePlatform();\n if (platform === \"unsupported\") {\n throw new Error(\"Startup services are supported for user-level launchd on macOS and systemd user services on Linux.\");\n }\n\n const homeDir = input.homeDir ?? os.homedir();\n const serviceName = runnerServiceName(input);\n const serviceFilePath = runnerServiceFilePath(platform, serviceName, homeDir);\n const now = new Date().toISOString();\n const command = [input.executablePath ?? process.execPath, input.scriptPath ?? process.argv[1]!, ...input.args];\n const logPath = path.join(input.metadataDir ?? defaultRunnerMetadataDir(), `${runnerServiceKey(input)}.service.log`);\n const metadata: RunnerServiceMetadata = {\n schemaVersion: 1,\n accountId: input.accountId,\n projectId: input.projectId,\n repositoryLinkId: input.repositoryLinkId,\n runnerId: input.runnerId,\n rootDir: path.resolve(input.rootDir),\n apiUrl: input.apiUrl,\n serviceName,\n serviceFilePath,\n platform,\n status: \"installed\",\n createdAt: now,\n updatedAt: now,\n args: input.args\n };\n\n return {\n metadata,\n content: platform === \"launchd\"\n ? createLaunchdPlist({ command, label: serviceName, logPath, rootDir: metadata.rootDir })\n : createSystemdUnit({ command, description: `Amistio runner ${input.runnerId}`, logPath, rootDir: metadata.rootDir })\n };\n}\n\nexport async function installRunnerService(input: RunnerServiceInput, options: { activate?: boolean } = {}): Promise<RunnerServiceMetadata> {\n const descriptor = createRunnerServiceDescriptor(input);\n await mkdir(path.dirname(descriptor.metadata.serviceFilePath), { recursive: true });\n await mkdir(input.metadataDir ?? defaultRunnerMetadataDir(), { recursive: true });\n await writeFile(descriptor.metadata.serviceFilePath, descriptor.content, { encoding: \"utf8\", mode: 0o600 });\n await writeRunnerServiceMetadata(descriptor.metadata, input.metadataDir);\n\n if (options.activate !== false) {\n const activation = await activateRunnerService(descriptor.metadata);\n if (!activation.succeeded) {\n throw new Error(`Startup service file was written to ${descriptor.metadata.serviceFilePath}, but activation failed: ${activation.message}`);\n }\n }\n\n return descriptor.metadata;\n}\n\nexport async function removeRunnerService(input: { accountId: string; projectId: string; repositoryLinkId: string; runnerId: string; metadataDir?: string }): Promise<RunnerServiceMetadata | undefined> {\n const metadata = await readRunnerServiceMetadata(input, input.metadataDir);\n if (!metadata) {\n return undefined;\n }\n\n await deactivateRunnerService(metadata).catch(() => undefined);\n await rm(metadata.serviceFilePath, { force: true });\n await rm(runnerServiceMetadataPath(input, input.metadataDir ?? defaultRunnerMetadataDir()), { force: true });\n return { ...metadata, status: \"removed\", updatedAt: new Date().toISOString() };\n}\n\nexport async function readRunnerServiceMetadata(input: { accountId: string; projectId: string; repositoryLinkId: string; runnerId: string }, metadataDir = defaultRunnerMetadataDir()): Promise<RunnerServiceMetadata | undefined> {\n try {\n const parsed = JSON.parse(await readFile(runnerServiceMetadataPath(input, metadataDir), \"utf8\")) as RunnerServiceMetadata;\n if (parsed.schemaVersion !== 1 || !parsed.serviceName || !parsed.serviceFilePath) {\n return undefined;\n }\n return parsed;\n } catch {\n return undefined;\n }\n}\n\nexport async function writeRunnerServiceMetadata(metadata: RunnerServiceMetadata, metadataDir = defaultRunnerMetadataDir()): Promise<void> {\n await mkdir(metadataDir, { recursive: true });\n await writeFile(runnerServiceMetadataPath(metadata, metadataDir), JSON.stringify(metadata, null, 2), { encoding: \"utf8\", mode: 0o600 });\n}\n\nexport async function runnerServiceRuntimeStatus(metadata: RunnerServiceMetadata): Promise<string> {\n if (metadata.platform === \"launchd\") {\n const target = launchdTarget(metadata);\n const result = await runProcess(\"launchctl\", [\"print\", target], 5_000);\n return result.exitCode === 0 ? \"loaded\" : \"not loaded\";\n }\n\n const result = await runProcess(\"systemctl\", [\"--user\", \"is-active\", metadata.serviceName], 5_000);\n return result.exitCode === 0 ? result.output.trim() || \"active\" : \"not active\";\n}\n\nasync function activateRunnerService(metadata: RunnerServiceMetadata): Promise<{ succeeded: boolean; message: string }> {\n if (metadata.platform === \"launchd\") {\n await runProcess(\"launchctl\", [\"bootout\", launchdDomain(), metadata.serviceFilePath], 5_000).catch(() => undefined);\n const result = await runProcess(\"launchctl\", [\"bootstrap\", launchdDomain(), metadata.serviceFilePath], 10_000);\n return result.exitCode === 0 ? { succeeded: true, message: \"launchd service loaded.\" } : { succeeded: false, message: result.output || `launchctl exited with ${result.exitCode}.` };\n }\n\n const reload = await runProcess(\"systemctl\", [\"--user\", \"daemon-reload\"], 10_000);\n if (reload.exitCode !== 0) {\n return { succeeded: false, message: reload.output || `systemctl daemon-reload exited with ${reload.exitCode}.` };\n }\n const enable = await runProcess(\"systemctl\", [\"--user\", \"enable\", \"--now\", metadata.serviceName], 20_000);\n return enable.exitCode === 0 ? { succeeded: true, message: \"systemd user service enabled.\" } : { succeeded: false, message: enable.output || `systemctl enable exited with ${enable.exitCode}.` };\n}\n\nasync function deactivateRunnerService(metadata: RunnerServiceMetadata): Promise<void> {\n if (metadata.platform === \"launchd\") {\n await runProcess(\"launchctl\", [\"bootout\", launchdDomain(), metadata.serviceFilePath], 10_000);\n return;\n }\n\n await runProcess(\"systemctl\", [\"--user\", \"disable\", \"--now\", metadata.serviceName], 20_000);\n await runProcess(\"systemctl\", [\"--user\", \"daemon-reload\"], 10_000).catch(() => undefined);\n}\n\nfunction createLaunchdPlist(input: { command: string[]; label: string; logPath: string; rootDir: string }): string {\n const commandItems = input.command.map((item) => ` <string>${xmlEscape(item)}</string>`).join(\"\\n\");\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>Label</key>\n <string>${xmlEscape(input.label)}</string>\n <key>ProgramArguments</key>\n <array>\n${commandItems}\n </array>\n <key>WorkingDirectory</key>\n <string>${xmlEscape(input.rootDir)}</string>\n <key>EnvironmentVariables</key>\n <dict>\n <key>AMISTIO_RUNNER_MODE</key>\n <string>background</string>\n </dict>\n <key>RunAtLoad</key>\n <true/>\n <key>KeepAlive</key>\n <true/>\n <key>StandardOutPath</key>\n <string>${xmlEscape(input.logPath)}</string>\n <key>StandardErrorPath</key>\n <string>${xmlEscape(input.logPath)}</string>\n</dict>\n</plist>\n`;\n}\n\nfunction createSystemdUnit(input: { command: string[]; description: string; logPath: string; rootDir: string }): string {\n return `[Unit]\nDescription=${input.description}\n\n[Service]\nType=simple\nWorkingDirectory=${systemdEscape(input.rootDir)}\nEnvironment=AMISTIO_RUNNER_MODE=background\nExecStart=${input.command.map(systemdEscape).join(\" \")}\nRestart=always\nRestartSec=5\nStandardOutput=append:${systemdEscape(input.logPath)}\nStandardError=append:${systemdEscape(input.logPath)}\n\n[Install]\nWantedBy=default.target\n`;\n}\n\nfunction runnerServiceFilePath(platform: Exclude<RunnerServicePlatform, \"unsupported\">, serviceName: string, homeDir: string): string {\n if (platform === \"launchd\") {\n return path.join(homeDir, \"Library\", \"LaunchAgents\", `${serviceName}.plist`);\n }\n return path.join(homeDir, \".config\", \"systemd\", \"user\", `${serviceName}.service`);\n}\n\nfunction runnerServiceMetadataPath(input: { accountId: string; projectId: string; repositoryLinkId: string; runnerId: string }, metadataDir: string): string {\n return path.join(metadataDir, `${runnerServiceKey(input)}.service.json`);\n}\n\nfunction runnerServiceName(input: { accountId: string; projectId: string; repositoryLinkId: string; runnerId: string }): string {\n return `com.amistio.runner.${runnerServiceKey(input).slice(0, 20)}`;\n}\n\nfunction runnerServiceKey(input: { accountId: string; projectId: string; repositoryLinkId: string; runnerId: string }): string {\n return createHash(\"sha256\").update(`${input.accountId}:${input.projectId}:${input.repositoryLinkId}:${input.runnerId}`).digest(\"hex\");\n}\n\nfunction launchdDomain(): string {\n const uid = typeof process.getuid === \"function\" ? process.getuid() : undefined;\n return uid === undefined ? \"gui/0\" : `gui/${uid}`;\n}\n\nfunction launchdTarget(metadata: RunnerServiceMetadata): string {\n return `${launchdDomain()}/${metadata.serviceName}`;\n}\n\nfunction xmlEscape(value: string): string {\n return value.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\\\"/g, \""\").replace(/'/g, \"'\");\n}\n\nfunction systemdEscape(value: string): string {\n return value.includes(\" \") || value.includes(\"\\t\") || value.includes(\"\\\"\") ? `\"${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\\"/g, \"\\\\\\\"\")}\"` : value;\n}\n\nfunction runProcess(command: string, args: string[], timeoutMs: number): Promise<{ exitCode: number; output: string }> {\n return new Promise((resolve) => {\n const child = spawn(command, args, { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n let output = \"\";\n const timeout = setTimeout(() => {\n output += `Timed out while running ${command}.\\n`;\n child.kill(\"SIGTERM\");\n }, timeoutMs);\n child.stdout?.on(\"data\", (chunk: Buffer) => { output += chunk.toString(\"utf8\"); });\n child.stderr?.on(\"data\", (chunk: Buffer) => { output += chunk.toString(\"utf8\"); });\n child.on(\"error\", (error) => {\n clearTimeout(timeout);\n resolve({ exitCode: 1, output: error.message });\n });\n child.on(\"close\", (code) => {\n clearTimeout(timeout);\n resolve({ exitCode: code ?? 1, output: output.trim() });\n });\n });\n}\n", "import type { SessionDecision, SessionPolicy, ToolSessionItem, WorkItem } from \"@amistio/shared\";\n\nconst maxIdleMs = 24 * 60 * 60 * 1000;\nconst maxTotalMs = 7 * 24 * 60 * 60 * 1000;\nconst maxMessageCount = 80;\nconst maxEstimatedTokens = 120_000;\nconst maxCostUsd = 25;\nconst relatednessThreshold = 20;\n\nexport interface SessionSelectionInput {\n policy: SessionPolicy;\n workItem: WorkItem;\n sessions: ToolSessionItem[];\n toolName: string;\n runnerId: string;\n repositoryLinkId: string;\n machineId: string;\n supportsSessionReuse: boolean;\n now?: Date;\n}\n\nexport interface SessionSelection {\n policy: SessionPolicy;\n decision: SessionDecision;\n reason: string;\n toolSession?: ToolSessionItem;\n}\n\nexport function normalizeSessionPolicy(value: string | undefined): SessionPolicy {\n if (!value || value === \"auto\" || value === \"new\" || value === \"none\") {\n return (value ?? \"auto\") as SessionPolicy;\n }\n\n if (/^continue:[A-Za-z0-9_.:-]+$/.test(value)) {\n return value as SessionPolicy;\n }\n\n throw new Error(`Unsupported session policy: ${value}. Use auto, new, continue:<toolSessionId>, or none.`);\n}\n\nexport function selectToolSession(input: SessionSelectionInput): SessionSelection {\n if (input.policy === \"none\") {\n return { policy: input.policy, decision: \"skipped\", reason: \"Session reuse was disabled for this run.\" };\n }\n\n if (!input.supportsSessionReuse) {\n return {\n policy: input.policy,\n decision: \"notSupported\",\n reason: `${input.toolName} does not expose reusable provider sessions; Amistio will record this as a one-shot tool session.`\n };\n }\n\n if (input.policy === \"new\") {\n return { policy: input.policy, decision: \"forcedNew\", reason: \"The user requested a fresh tool session.\" };\n }\n\n const forcedSessionId = forcedContinueSessionId(input.policy);\n if (forcedSessionId) {\n const forced = input.sessions.find((session) => session.toolSessionId === forcedSessionId);\n if (!forced) {\n return { policy: input.policy, decision: \"forcedNew\", reason: `Requested session ${forcedSessionId} was not found; creating a fresh session.` };\n }\n\n const ineligibleReason = sessionIneligibleReason(forced, input, input.now ?? new Date());\n if (ineligibleReason) {\n return { policy: input.policy, decision: \"forcedNew\", reason: `Requested session ${forcedSessionId} cannot be resumed: ${ineligibleReason}` };\n }\n\n return { policy: input.policy, decision: \"forcedContinue\", reason: `The user requested session ${forcedSessionId}.`, toolSession: forced };\n }\n\n const now = input.now ?? new Date();\n const candidates = input.sessions\n .map((session) => ({ session, ineligibleReason: sessionIneligibleReason(session, input, now), score: relatednessScore(session, input.workItem) }))\n .filter((candidate) => !candidate.ineligibleReason)\n .sort((a, b) => b.score - a.score || Date.parse(b.session.lastActivityAt) - Date.parse(a.session.lastActivityAt));\n\n const best = candidates[0];\n if (!best || best.score < relatednessThreshold) {\n return {\n policy: input.policy,\n decision: \"created\",\n reason: best ? `Best related session score ${best.score} was below ${relatednessThreshold}; creating a fresh session.` : \"No eligible related session was found.\"\n };\n }\n\n return {\n policy: input.policy,\n decision: \"continued\",\n reason: `Reusing ${best.session.toolSessionId}; relatedness score ${best.score}.`,\n toolSession: best.session\n };\n}\n\nfunction forcedContinueSessionId(policy: SessionPolicy) {\n return typeof policy === \"string\" && policy.startsWith(\"continue:\") ? policy.slice(\"continue:\".length) : undefined;\n}\n\nfunction sessionIneligibleReason(session: ToolSessionItem, input: SessionSelectionInput, now: Date): string | undefined {\n if (session.tool !== input.toolName) {\n return `tool mismatch (${session.tool} != ${input.toolName})`;\n }\n if (session.repositoryLinkId && session.repositoryLinkId !== input.repositoryLinkId) {\n return \"repository link mismatch\";\n }\n if (session.machineId && session.machineId !== input.machineId) {\n return \"session is scoped to another machine\";\n }\n if (session.resumabilityScope === \"localMachine\" && session.runnerId && session.runnerId !== input.runnerId) {\n return \"session is scoped to another runner machine\";\n }\n const requestedByUserId = input.workItem.requestedByUserId ?? input.workItem.requestedBy;\n if (session.createdByUserId && session.createdByUserId !== requestedByUserId) {\n return \"session belongs to another requester\";\n }\n if (input.workItem.implementationScopeId && session.implementationScopeId !== input.workItem.implementationScopeId) {\n return \"implementation scope mismatch\";\n }\n if (input.workItem.executionWorktreeKey && session.executionWorktreeKey !== input.workItem.executionWorktreeKey) {\n return \"worktree scope mismatch\";\n }\n if (session.status === \"closed\" || session.status === \"archived\" || session.status === \"blocked\" || session.status === \"unavailable\") {\n return `session is ${session.status}`;\n }\n if (Date.parse(session.lastActivityAt) + maxIdleMs < now.getTime()) {\n return \"session is idle past the reuse window\";\n }\n if (Date.parse(session.createdAt) + maxTotalMs < now.getTime()) {\n return \"session is older than the reuse window\";\n }\n if ((session.messageCount ?? 0) >= maxMessageCount) {\n return \"session message count is too high\";\n }\n if ((session.estimatedInputTokens ?? 0) + (session.estimatedOutputTokens ?? 0) >= maxEstimatedTokens) {\n return \"session token estimate is too high\";\n }\n if ((session.costUsd ?? 0) >= maxCostUsd) {\n return \"session cost is too high\";\n }\n\n return undefined;\n}\n\nfunction relatednessScore(session: ToolSessionItem, workItem: WorkItem): number {\n let score = 0;\n if (session.sessionGroupKey && workItem.sessionGroupKey && session.sessionGroupKey === workItem.sessionGroupKey) {\n score += 60;\n }\n if (session.lastWorkItemId && session.lastWorkItemId === workItem.workItemId) {\n score += 40;\n }\n\n const titleOverlap = tokenOverlap(session.title, workItem.title);\n score += titleOverlap * 8;\n\n if (session.summary) {\n score += tokenOverlap(session.summary, workItem.title) * 4;\n }\n\n for (const tag of session.tags) {\n if (workItem.title.toLowerCase().includes(tag.toLowerCase())) {\n score += 10;\n }\n }\n\n return score;\n}\n\nfunction tokenOverlap(firstValue: string, secondValue: string): number {\n const firstTokens = new Set(tokens(firstValue));\n return tokens(secondValue).filter((token) => firstTokens.has(token)).length;\n}\n\nfunction tokens(value: string): string[] {\n return value\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter((token) => token.length >= 4);\n}", "import { mkdir, readdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n brainDocumentItemSchema,\n decideSyncState,\n documentTypeSchema,\n isControlPlaneTemplateRepoPath,\n sha256ContentHash,\n syncedDocumentFrontmatterSchema,\n type BrainDocumentItem,\n type RepoLinkMetadata,\n type SyncedDocumentFrontmatter\n} from \"@amistio/shared\";\nimport { parseFrontmatter } from \"./control-plane.js\";\n\nconst legacySyncRoots = [\"architecture\", \"context\", \"decisions\", \"features\", \"memory\", \"plans\", \"prompts\", \"workflows\"];\nconst syncRoots = legacySyncRoots.map((syncRoot) => `docs/${syncRoot}`);\n\nexport type SyncStatus = \"clean\" | \"pending\" | \"dirty\" | \"conflicted\";\n\nexport interface LocalSyncedDocument {\n fullPath: string;\n repoPath: string;\n frontmatter: SyncedDocumentFrontmatter;\n content: string;\n contentHash: string;\n}\n\nexport interface SyncStatusItem {\n repoPath: string;\n documentId?: string;\n status: SyncStatus;\n reason: string;\n}\n\nexport interface SyncStatusReport {\n status: SyncStatus;\n items: SyncStatusItem[];\n counts: Record<SyncStatus, number>;\n}\n\nexport interface MaterializeResult {\n written: string[];\n skipped: string[];\n conflicts: string[];\n}\n\nexport async function collectSyncStatus(rootDir: string, webDocuments: BrainDocumentItem[] = []): Promise<SyncStatusReport> {\n const localDocuments = await readLocalSyncedDocuments(rootDir);\n const normalizedWebDocuments = webDocuments.map((document) => ({ ...document, repoPath: canonicalControlPlaneRepoPath(document.repoPath) }));\n const webByDocumentId = new Map(normalizedWebDocuments.map((document) => [document.documentId, document]));\n const pullableWebDocuments = normalizedWebDocuments.filter((document) => !isControlPlaneTemplateRepoPath(document.repoPath) && (document.status === \"approved\" || document.syncState === \"approved\" || document.syncState === \"synced\"));\n const localByDocumentId = new Map(localDocuments.map((document) => [document.frontmatter.amistioDocumentId, document]));\n const items: SyncStatusItem[] = [];\n\n for (const localDocument of localDocuments) {\n const webDocument = webByDocumentId.get(localDocument.frontmatter.amistioDocumentId);\n const localDirty = localDocument.contentHash !== localDocument.frontmatter.amistioContentHash;\n const webHash = webDocument?.contentHash;\n const decision = decideSyncState({\n lastSyncedHash: localDocument.frontmatter.amistioContentHash,\n repoHash: localDocument.contentHash,\n ...(webHash ? { webHash } : {})\n });\n\n if (decision === \"conflict\") {\n items.push({\n repoPath: localDocument.repoPath,\n documentId: localDocument.frontmatter.amistioDocumentId,\n status: \"conflicted\",\n reason: \"web and repository revisions both changed\"\n });\n } else if (localDirty || decision === \"pushRepo\") {\n items.push({\n repoPath: localDocument.repoPath,\n documentId: localDocument.frontmatter.amistioDocumentId,\n status: \"dirty\",\n reason: \"repository content changed since last synced hash\"\n });\n } else if (decision === \"pullWeb\") {\n items.push({\n repoPath: localDocument.repoPath,\n documentId: localDocument.frontmatter.amistioDocumentId,\n status: \"pending\",\n reason: \"approved web revision is newer\"\n });\n } else if (localDocument.frontmatter.status && ![\"approved\", \"synced\"].includes(localDocument.frontmatter.status)) {\n items.push({\n repoPath: localDocument.repoPath,\n documentId: localDocument.frontmatter.amistioDocumentId,\n status: \"pending\",\n reason: `local document is ${localDocument.frontmatter.status}`\n });\n } else {\n items.push({\n repoPath: localDocument.repoPath,\n documentId: localDocument.frontmatter.amistioDocumentId,\n status: \"clean\",\n reason: \"repository and web hashes match\"\n });\n }\n }\n\n for (const webDocument of pullableWebDocuments) {\n if (!localByDocumentId.has(webDocument.documentId)) {\n items.push({\n repoPath: webDocument.repoPath,\n documentId: webDocument.documentId,\n status: \"pending\",\n reason: \"approved web document has not been pulled\"\n });\n }\n }\n\n const counts = {\n clean: items.filter((item) => item.status === \"clean\").length,\n pending: items.filter((item) => item.status === \"pending\").length,\n dirty: items.filter((item) => item.status === \"dirty\").length,\n conflicted: items.filter((item) => item.status === \"conflicted\").length\n } satisfies Record<SyncStatus, number>;\n const status: SyncStatus = counts.conflicted ? \"conflicted\" : counts.dirty ? \"dirty\" : counts.pending ? \"pending\" : \"clean\";\n return { status, items, counts };\n}\n\nexport async function readLocalSyncedDocuments(rootDir: string): Promise<LocalSyncedDocument[]> {\n const markdownFiles = await findMarkdownFiles(rootDir);\n const documents: LocalSyncedDocument[] = [];\n for (const fullPath of markdownFiles) {\n const raw = await readFile(fullPath, \"utf8\");\n const parsed = parseSyncedMarkdown(raw);\n if (!parsed) {\n continue;\n }\n\n const repoPath = toRepoPath(rootDir, fullPath);\n if (isControlPlaneTemplateRepoPath(repoPath)) {\n continue;\n }\n\n documents.push({\n fullPath,\n repoPath,\n frontmatter: parsed.frontmatter,\n content: parsed.content,\n contentHash: sha256ContentHash(parsed.content)\n });\n }\n\n return documents;\n}\n\nexport async function materializeBrainDocuments(rootDir: string, documents: BrainDocumentItem[], options: { allowDirtyOverwrite?: boolean } = {}): Promise<MaterializeResult> {\n const result: MaterializeResult = { written: [], skipped: [], conflicts: [] };\n for (const inputDocument of documents) {\n const parsedDocument = brainDocumentItemSchema.parse(inputDocument);\n const document = { ...parsedDocument, repoPath: canonicalControlPlaneRepoPath(parsedDocument.repoPath) };\n const fullPath = safeRepoPath(rootDir, document.repoPath);\n if (isControlPlaneTemplateRepoPath(document.repoPath)) {\n result.skipped.push(document.repoPath);\n continue;\n }\n if (!isControlPlanePath(document.repoPath)) {\n result.conflicts.push(`${document.repoPath}: refusing to write outside docs control-plane folders`);\n continue;\n }\n\n const existing = await readExistingSyncedDocument(fullPath);\n if (existing.exists && !existing.document) {\n result.conflicts.push(`${document.repoPath}: file exists without Amistio document metadata`);\n continue;\n }\n if (existing.document && existing.document.frontmatter.amistioDocumentId !== document.documentId) {\n result.conflicts.push(`${document.repoPath}: file belongs to ${existing.document.frontmatter.amistioDocumentId}`);\n continue;\n }\n if (existing.document && existing.document.contentHash !== existing.document.frontmatter.amistioContentHash && !options.allowDirtyOverwrite) {\n result.conflicts.push(`${document.repoPath}: local edits would be overwritten`);\n continue;\n }\n if (existing.document && existing.document.frontmatter.amistioRevision >= document.revision && existing.document.contentHash === document.contentHash) {\n result.skipped.push(document.repoPath);\n continue;\n }\n\n await mkdir(path.dirname(fullPath), { recursive: true });\n await writeFile(fullPath, createSyncedDocumentMarkdown(document), \"utf8\");\n result.written.push(document.repoPath);\n }\n\n return result;\n}\n\nexport async function collectDirtyDocumentsForPush(rootDir: string, metadata: RepoLinkMetadata): Promise<BrainDocumentItem[]> {\n const localDocuments = await readLocalSyncedDocuments(rootDir);\n const now = new Date().toISOString();\n return localDocuments\n .filter((document) => document.contentHash !== document.frontmatter.amistioContentHash)\n .map((document) => {\n const documentType = documentTypeSchema.parse(document.frontmatter.amistioDocumentType);\n return brainDocumentItemSchema.parse({\n id: document.frontmatter.amistioDocumentId,\n type: \"brainDocument\",\n schemaVersion: 1,\n accountId: metadata.amistioAccountId,\n projectId: metadata.amistioProjectId,\n documentId: document.frontmatter.amistioDocumentId,\n documentType,\n title: inferTitle(document.content, document.repoPath),\n status: \"reviewing\",\n repoPath: document.repoPath,\n content: document.content,\n contentHash: document.contentHash,\n frontmatter: parseFrontmatterFromSyncedDocument(document.frontmatter),\n revision: document.frontmatter.amistioRevision + 1,\n source: \"repo\",\n syncState: \"dirtyInRepo\",\n createdAt: now,\n updatedAt: now\n });\n });\n}\n\nexport function createSyncedDocumentMarkdown(document: BrainDocumentItem): string {\n return [\n \"---\",\n `amistioDocumentId: ${document.documentId}`,\n `amistioDocumentType: ${document.documentType}`,\n `amistioRevision: ${document.revision}`,\n `amistioContentHash: ${document.contentHash}`,\n `status: ${document.status}`,\n \"---\",\n document.content,\n \"\"\n ].join(\"\\n\");\n}\n\nfunction parseSyncedMarkdown(content: string): { frontmatter: SyncedDocumentFrontmatter; content: string } | undefined {\n const rawFrontmatter = parseFrontmatter(content);\n const frontmatter = syncedDocumentFrontmatterSchema.safeParse(rawFrontmatter);\n if (!frontmatter.success) {\n return undefined;\n }\n\n const closingMarker = content.indexOf(\"\\n---\", 4);\n if (closingMarker === -1) {\n return undefined;\n }\n const closingLineEnd = content.indexOf(\"\\n\", closingMarker + 4);\n const bodyStart = closingLineEnd === -1 ? content.length : closingLineEnd + 1;\n return { frontmatter: frontmatter.data, content: content.slice(bodyStart).replace(/\\n$/, \"\") };\n}\n\nasync function readExistingSyncedDocument(fullPath: string): Promise<{ exists: boolean; document?: LocalSyncedDocument }> {\n try {\n const raw = await readFile(fullPath, \"utf8\");\n const parsed = parseSyncedMarkdown(raw);\n if (!parsed) {\n return { exists: true };\n }\n\n return {\n exists: true,\n document: {\n fullPath,\n repoPath: fullPath,\n frontmatter: parsed.frontmatter,\n content: parsed.content,\n contentHash: sha256ContentHash(parsed.content)\n }\n };\n } catch (error: unknown) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { exists: false };\n }\n throw error;\n }\n}\n\nasync function findMarkdownFiles(rootDir: string): Promise<string[]> {\n const files: string[] = [];\n for (const syncRoot of syncRoots) {\n const fullRoot = path.join(rootDir, syncRoot);\n if (!(await exists(fullRoot))) {\n continue;\n }\n await walkMarkdownFiles(fullRoot, files);\n }\n return files;\n}\n\nasync function walkMarkdownFiles(directory: string, files: string[]): Promise<void> {\n for (const entry of await readdir(directory, { withFileTypes: true })) {\n const fullPath = path.join(directory, entry.name);\n if (entry.isDirectory()) {\n await walkMarkdownFiles(fullPath, files);\n } else if (entry.isFile() && entry.name.endsWith(\".md\")) {\n files.push(fullPath);\n }\n }\n}\n\nfunction safeRepoPath(rootDir: string, repoPath: string): string {\n if (path.isAbsolute(repoPath)) {\n throw new Error(`Refusing to use absolute repo path: ${repoPath}`);\n }\n const normalized = path.normalize(repoPath);\n if (normalized === \"..\" || normalized.startsWith(`..${path.sep}`)) {\n throw new Error(`Refusing to use path outside the repository: ${repoPath}`);\n }\n const root = path.resolve(rootDir);\n const fullPath = path.resolve(root, normalized);\n if (!fullPath.startsWith(`${root}${path.sep}`)) {\n throw new Error(`Refusing to use path outside the repository: ${repoPath}`);\n }\n return fullPath;\n}\n\nfunction isControlPlanePath(repoPath: string): boolean {\n const normalized = path.normalize(repoPath);\n return syncRoots.some((syncRoot) => normalized === syncRoot || normalized.startsWith(`${syncRoot}${path.sep}`));\n}\n\nfunction canonicalControlPlaneRepoPath(repoPath: string): string {\n const normalized = repoPath.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\").replace(/^\\/+/, \"\");\n const [firstSegment] = normalized.split(\"/\");\n if (firstSegment && legacySyncRoots.includes(firstSegment)) {\n return `docs/${normalized}`;\n }\n return normalized;\n}\n\nfunction toRepoPath(rootDir: string, fullPath: string): string {\n return path.relative(rootDir, fullPath).split(path.sep).join(\"/\");\n}\n\nfunction inferTitle(content: string, repoPath: string): string {\n const heading = content.split(\"\\n\").find((line) => line.startsWith(\"# \"))?.replace(/^#\\s+/, \"\").trim();\n return heading || path.basename(repoPath, path.extname(repoPath));\n}\n\nfunction parseFrontmatterFromSyncedDocument(frontmatter: SyncedDocumentFrontmatter): Record<string, unknown> {\n return {\n amistioDocumentId: frontmatter.amistioDocumentId,\n amistioDocumentType: frontmatter.amistioDocumentType,\n amistioRevision: frontmatter.amistioRevision,\n amistioContentHash: frontmatter.amistioContentHash,\n ...(frontmatter.status ? { status: frontmatter.status } : {})\n };\n}\n\nasync function exists(filePath: string): Promise<boolean> {\n try {\n await stat(filePath);\n return true;\n } catch {\n return false;\n }\n}", "import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\ninterface ProviderSessionRecord {\n toolName: string;\n providerSessionId: string;\n updatedAt: string;\n}\n\ntype ProviderSessionFile = Record<string, ProviderSessionRecord>;\n\nexport class LocalToolSessionStore {\n constructor(private readonly filePath = defaultSessionStorePath()) { }\n\n async getProviderSessionId(toolSessionId: string, toolName: string): Promise<string | undefined> {\n const data = await this.read();\n const record = data[toolSessionId];\n return record?.toolName === toolName ? record.providerSessionId : undefined;\n }\n\n async setProviderSessionId(toolSessionId: string, toolName: string, providerSessionId: string): Promise<void> {\n const data = await this.read();\n data[toolSessionId] = { toolName, providerSessionId, updatedAt: new Date().toISOString() };\n await mkdir(path.dirname(this.filePath), { recursive: true });\n await writeFile(this.filePath, JSON.stringify(data, null, 2), \"utf8\");\n }\n\n private async read(): Promise<ProviderSessionFile> {\n try {\n return JSON.parse(await readFile(this.filePath, \"utf8\")) as ProviderSessionFile;\n } catch {\n return {};\n }\n }\n}\n\nfunction defaultSessionStorePath() {\n if (process.platform === \"darwin\") {\n return path.join(os.homedir(), \"Library\", \"Application Support\", \"Amistio\", \"tool-sessions.json\");\n }\n if (process.platform === \"win32\") {\n return path.join(process.env.APPDATA ?? os.homedir(), \"Amistio\", \"tool-sessions.json\");\n }\n return path.join(process.env.XDG_STATE_HOME ?? path.join(os.homedir(), \".local\", \"state\"), \"amistio\", \"tool-sessions.json\");\n}", "import { assistantAnswerResultSchema, brainGenerationResultSchema, impactPreviewResultSchema, type AssistantAnswerResult, type AssistantMessageItem, type BrainDocumentItem, type GeneratedBrainArtifact, type ImpactPreviewResult, type PlanReviewMessageItem, type WorkItem } from \"@amistio/shared\";\n\nconst generationResultStart = \"AMISTIO_BRAIN_GENERATION_RESULT_START\";\nconst generationResultEnd = \"AMISTIO_BRAIN_GENERATION_RESULT_END\";\nconst assistantAnswerStart = \"AMISTIO_ASSISTANT_ANSWER_START\";\nconst assistantAnswerEnd = \"AMISTIO_ASSISTANT_ANSWER_END\";\nconst impactPreviewStart = \"AMISTIO_IMPACT_PREVIEW_START\";\nconst impactPreviewEnd = \"AMISTIO_IMPACT_PREVIEW_END\";\n\ninterface PlanRevisionPromptContext {\n planDocument: BrainDocumentItem;\n messages: PlanReviewMessageItem[];\n}\n\ninterface AssistantQuestionPromptContext {\n question: AssistantMessageItem;\n messages: AssistantMessageItem[];\n documents: BrainDocumentItem[];\n}\n\ninterface ImpactPreviewPromptContext {\n implementationPrompt?: BrainDocumentItem;\n documents: BrainDocumentItem[];\n analyzedRepoRevision?: number;\n}\n\nexport function createWorkExecutionPrompt(workItem: WorkItem, context?: { planRevision?: PlanRevisionPromptContext; assistantQuestion?: AssistantQuestionPromptContext; impactPreview?: ImpactPreviewPromptContext }): string {\n if (workItem.workKind === \"brainGeneration\") {\n return createBrainGenerationPrompt(workItem);\n }\n\n if (workItem.workKind === \"planRevision\") {\n return createPlanRevisionPrompt(workItem, context?.planRevision);\n }\n\n if (workItem.workKind === \"assistantQuestion\") {\n return createAssistantQuestionPrompt(workItem, context?.assistantQuestion);\n }\n\n if (workItem.workKind === \"impactPreview\") {\n return createImpactPreviewPrompt(workItem, context?.impactPreview);\n }\n\n return [\n \"# Amistio Work Execution\",\n \"\",\n \"You are running locally through the Amistio CLI inside the user's repository.\",\n \"Execute the approved work item below using the repository's existing orchestration files, instructions, and constraints.\",\n \"\",\n \"## Work Item\",\n \"\",\n `Title: ${workItem.title}`,\n `Work item ID: ${workItem.workItemId}`,\n `Project ID: ${workItem.projectId}`,\n `Implementation scope: ${workItem.implementationScopeId ?? workItem.controllingAdrId ?? \"work-item\"}`,\n `Execution branch: ${workItem.executionBranch ?? \"managed by Amistio CLI\"}`,\n `Execution worktree key: ${workItem.executionWorktreeKey ?? \"managed by Amistio CLI\"}`,\n \"\",\n \"## Rules\",\n \"\",\n \"- Read AGENTS.md first when it exists.\",\n \"- Read AGENTS.md and the relevant docs/ control-plane files before implementation so the work stays aligned with existing direction.\",\n \"- Treat the current working directory as the Amistio-managed implementation worktree; do not switch back to the paired primary checkout for mutating work.\",\n \"- Keep changes focused on this work item.\",\n \"- Preserve old decisions, plans, memory, and prompts unless the work item explicitly supersedes them.\",\n \"- Do not commit changes.\",\n \"- Do not write secrets into the repository.\",\n \"- Do not create a repo-local .amistio folder.\",\n \"- Run relevant verification commands when feasible and summarize results.\"\n ].join(\"\\n\");\n}\n\nfunction createImpactPreviewPrompt(workItem: WorkItem, context: ImpactPreviewPromptContext | undefined): string {\n const implementationPrompt = context?.implementationPrompt;\n const approvedContext = (context?.documents ?? [])\n .filter((document) => document.status === \"approved\" || document.syncState === \"approved\" || document.syncState === \"synced\")\n .slice(0, 16)\n .map((document) => [\n `### ${document.title}`,\n `documentId: ${document.documentId}`,\n `documentType: ${document.documentType}`,\n `repoPath: ${document.repoPath}`,\n `revision: ${document.revision}`,\n document.content.slice(0, 3000)\n ].join(\"\\n\"))\n .join(\"\\n\\n\");\n\n return [\n \"# Amistio Implementation Impact Preview\",\n \"\",\n \"You are running locally through the Amistio CLI inside the user's repository.\",\n \"Analyze the likely impact of the approved implementation prompt. This is a preview-only task.\",\n \"Do not modify files, do not create branches, do not run implementation commands, and do not commit changes.\",\n \"\",\n \"## Work Item\",\n \"\",\n `Title: ${workItem.title}`,\n `Work item ID: ${workItem.workItemId}`,\n `Project ID: ${workItem.projectId}`,\n `Generated draft ID: ${workItem.generatedDraftId ?? \"unknown\"}`,\n `Impact report ID: ${workItem.impactReportId ?? \"unknown\"}`,\n `Analyzed repo revision: ${context?.analyzedRepoRevision ?? \"unknown\"}`,\n \"\",\n \"## Approved Implementation Prompt\",\n \"\",\n implementationPrompt ? implementationPrompt.content : workItem.sourceWish ?? workItem.title,\n \"\",\n \"## Approved Project Brain Context\",\n \"\",\n approvedContext || \"No approved project-brain records were loaded. Inspect the local repository and explain the gap in the report.\",\n \"\",\n \"## Report Requirements\",\n \"\",\n \"- Identify affected product areas and likely modules/files using safe path summaries.\",\n \"- Assign riskLevel as low, medium, high, or critical with operational reasoning in summary.\",\n \"- Include data/schema/migration impact, security/privacy/access-control considerations, verification plan, and rollback plan.\",\n \"- Keep repository source and secrets local. Do not include raw source dumps, credentials, local secret paths, or provider session references.\",\n \"- If you inspect files, cite paths only through likelyPaths and concise reasons.\",\n \"\",\n \"## Output Contract\",\n \"\",\n \"Print exactly one JSON object between the markers below. The CLI will submit only this structured report back to Amistio.\",\n \"\",\n impactPreviewStart,\n '{\"riskLevel\":\"medium\",\"summary\":\"Touches the workspace command flow and runner claim gate.\",\"affectedAreas\":[{\"name\":\"Workspace UI\",\"description\":\"Shows impact before execution\"}],\"likelyPaths\":[{\"repoPath\":\"src/apps/web/components/workspace-client.tsx\",\"reason\":\"Workspace action wiring\"}],\"dependencies\":[\"local runner\"],\"dataSchemaImpact\":\"Adds an impact report project item.\",\"securityPrivacyImpact\":\"Source remains local; SaaS stores summaries and paths only.\",\"verificationPlan\":[\"Run shared, web, and CLI tests\",\"Run root verify\"],\"rollbackPlan\":\"Disable the impact gate and remove queued preview work if needed.\"}',\n impactPreviewEnd,\n \"\",\n \"Do not put Markdown fences around the markers. Do not implement the work.\"\n ].join(\"\\n\");\n}\n\nfunction createAssistantQuestionPrompt(workItem: WorkItem, context: AssistantQuestionPromptContext | undefined): string {\n const question = context?.question.content ?? workItem.sourceWish ?? workItem.title;\n const priorMessages = (context?.messages ?? [])\n .filter((message) => message.messageId !== context?.question.messageId)\n .slice(-12)\n .map((message) => `- ${message.role} / ${message.status}: ${message.content}`)\n .join(\"\\n\");\n const brainContext = (context?.documents ?? [])\n .filter((document) => document.status === \"approved\" || document.syncState === \"approved\" || document.syncState === \"synced\")\n .slice(0, 12)\n .map((document) => [\n `### ${document.title}`,\n `documentId: ${document.documentId}`,\n `repoPath: ${document.repoPath}`,\n `revision: ${document.revision}`,\n document.content.slice(0, 2400)\n ].join(\"\\n\"))\n .join(\"\\n\\n\");\n\n return [\n \"# Amistio Project Knowledge Assistant\",\n \"\",\n \"You are running locally through the Amistio CLI inside the user's repository.\",\n \"Answer the user's project question using approved project-brain context and local repository inspection when useful.\",\n \"This is an answer-only task. Do not modify files, do not create branches, and do not commit changes.\",\n \"\",\n \"## User Question\",\n \"\",\n question,\n \"\",\n \"## Work Item\",\n \"\",\n `Title: ${workItem.title}`,\n `Work item ID: ${workItem.workItemId}`,\n `Project ID: ${workItem.projectId}`,\n `Assistant message ID: ${workItem.assistantMessageId ?? context?.question.messageId ?? \"unknown\"}`,\n \"\",\n \"## Approved Project Brain Context\",\n \"\",\n brainContext || \"No approved project-brain records were loaded. Say what you inspected locally and avoid pretending citations exist.\",\n \"\",\n \"## Recent Assistant Conversation\",\n \"\",\n priorMessages || \"No prior assistant messages were loaded.\",\n \"\",\n \"## Source Boundary Rules\",\n \"\",\n \"- Keep repository source, secrets, tokens, local credential paths, and provider session references local.\",\n \"- Summarize findings instead of dumping source code. Tiny identifiers, filenames, and short excerpts are acceptable when necessary.\",\n \"- Use sourceBoundary \\\"projectBrain\\\" when the answer only uses project-brain records.\",\n \"- Use sourceBoundary \\\"localSource\\\" when you inspected local repository files.\",\n \"- Use sourceBoundary \\\"mixed\\\" when both project-brain records and local files shaped the answer.\",\n \"- Include citations for project-brain records with documentId/title/repoPath where relevant.\",\n \"- Include local file citations with repoPath only; do not include raw source dumps.\",\n \"\",\n \"## Output Contract\",\n \"\",\n \"Print exactly one JSON object between the markers below. The CLI will submit only this structured answer back to Amistio.\",\n \"\",\n assistantAnswerStart,\n '{\"answer\":\"Concise answer with concrete next steps.\",\"sourceBoundary\":\"mixed\",\"citations\":[{\"source\":\"projectBrain\",\"documentId\":\"doc_123\",\"title\":\"ADR-001\",\"repoPath\":\"docs/decisions/ADR-001.md\",\"excerpt\":\"Short supporting excerpt\"},{\"source\":\"localSource\",\"repoPath\":\"src/apps/web/example.ts\",\"excerpt\":\"Short local finding\"}]}',\n assistantAnswerEnd,\n \"\",\n \"Do not put Markdown fences around the markers. Do not include implementation diffs.\"\n ].join(\"\\n\");\n}\n\nfunction createPlanRevisionPrompt(workItem: WorkItem, context: PlanRevisionPromptContext | undefined): string {\n const messages = context?.messages ?? [];\n return [\n \"# Amistio Plan Revision\",\n \"\",\n \"You are running locally through the Amistio CLI inside the user's repository.\",\n \"Revise the selected generated plan using the user's conversation. Do not implement product/source code changes in this pass.\",\n \"\",\n \"## Work Item\",\n \"\",\n `Title: ${workItem.title}`,\n `Work item ID: ${workItem.workItemId}`,\n `Project ID: ${workItem.projectId}`,\n `Document ID: ${workItem.reviewDocumentId ?? \"unknown\"}`,\n `Document revision: ${workItem.reviewDocumentRevision ?? \"unknown\"}`,\n \"\",\n \"## Current Plan\",\n \"\",\n context?.planDocument.content ?? \"The current plan document could not be loaded. Explain the blocker in the result summary.\",\n \"\",\n \"## Conversation\",\n \"\",\n messages.length ? messages.map((message) => `- ${message.role} / ${message.intent} / ${message.status} / rev ${message.documentRevision}: ${message.content}`).join(\"\\n\") : \"No conversation messages were loaded.\",\n \"\",\n \"## Output Contract\",\n \"\",\n \"Print exactly one JSON object between the markers below with an artifacts array containing one revised plan artifact.\",\n \"The artifact must use documentType \\\"plan\\\", keep the plan under docs/plans/, and include the complete revised plan content.\",\n \"\",\n generationResultStart,\n '{\"artifacts\":[{\"documentType\":\"plan\",\"title\":\"Revised Plan\",\"repoPath\":\"docs/plans/PLAN-revised.md\",\"content\":\"# Revised Plan\\\\n\\\\n## Goal\\\\n...\"}]}',\n generationResultEnd,\n \"\",\n \"Do not put Markdown fences around the markers. Do not claim implementation is complete.\"\n ].join(\"\\n\");\n}\n\nexport function parseBrainGenerationArtifacts(output: string): GeneratedBrainArtifact[] {\n const start = output.indexOf(generationResultStart);\n const end = output.indexOf(generationResultEnd, start + generationResultStart.length);\n if (start === -1 || end === -1 || end <= start) {\n throw new Error(\"Local AI generation did not return an Amistio brain generation result block.\");\n }\n\n const payload = output.slice(start + generationResultStart.length, end).trim();\n const parsed = JSON.parse(stripJsonFence(payload)) as unknown;\n return brainGenerationResultSchema.parse(parsed).artifacts;\n}\n\nexport function parseAssistantAnswerResult(output: string): AssistantAnswerResult {\n const start = output.indexOf(assistantAnswerStart);\n const end = output.indexOf(assistantAnswerEnd, start + assistantAnswerStart.length);\n if (start === -1 || end === -1 || end <= start) {\n throw new Error(\"Local AI answer did not return an Amistio assistant answer block.\");\n }\n\n const payload = output.slice(start + assistantAnswerStart.length, end).trim();\n const parsed = JSON.parse(stripJsonFence(payload)) as unknown;\n return assistantAnswerResultSchema.parse(parsed);\n}\n\nexport function parseImpactPreviewResult(output: string): ImpactPreviewResult {\n const start = output.indexOf(impactPreviewStart);\n const end = output.indexOf(impactPreviewEnd, start + impactPreviewStart.length);\n if (start === -1 || end === -1 || end <= start) {\n throw new Error(\"Local AI preview did not return an Amistio impact preview block.\");\n }\n\n const payload = output.slice(start + impactPreviewStart.length, end).trim();\n const parsed = JSON.parse(stripJsonFence(payload)) as unknown;\n return impactPreviewResultSchema.parse(parsed);\n}\n\nfunction createBrainGenerationPrompt(workItem: WorkItem): string {\n const wish = workItem.sourceWish ?? workItem.title;\n return [\n \"# Amistio Brain Generation\",\n \"\",\n \"You are running locally through the Amistio CLI inside the user's repository.\",\n \"Generate reviewable project-brain artifacts from the submitted wish. Do not implement product/source code changes in this pass.\",\n \"\",\n \"## Submitted Wish\",\n \"\",\n wish,\n \"\",\n \"## Work Item\",\n \"\",\n `Title: ${workItem.title}`,\n `Work item ID: ${workItem.workItemId}`,\n `Project ID: ${workItem.projectId}`,\n `Generated draft ID: ${workItem.generatedDraftId ?? \"unknown\"}`,\n \"\",\n \"## Read First\",\n \"\",\n \"- Read AGENTS.md first when it exists.\",\n \"- Read relevant files under docs/architecture/, docs/context/, docs/decisions/, docs/features/, docs/memory/, docs/plans/, docs/prompts/, and docs/workflows/ before drafting.\",\n \"- Keep source code and secrets local. Do not include source-code payloads, access tokens, API keys, local credential paths, or provider session references in the result.\",\n \"\",\n \"## Generate Artifacts\",\n \"\",\n \"Return Markdown artifacts that should enter human review before implementation. Use only these document types and matching repo roots:\",\n \"\",\n \"- architecture -> docs/architecture/\",\n \"- context -> docs/context/\",\n \"- decision -> docs/decisions/\",\n \"- feature -> docs/features/\",\n \"- memory -> docs/memory/\",\n \"- plan -> docs/plans/\",\n \"- prompt -> docs/prompts/\",\n \"- workflow -> docs/workflows/\",\n \"\",\n \"Each artifact needs documentType, title, repoPath, and content. Include at least a plan and an implementation prompt when implementation work is implied. Use model-agnostic prompt wording.\",\n \"\",\n \"## Output Contract\",\n \"\",\n \"Print exactly one JSON object between the markers below. The CLI will submit only this structured result back to Amistio.\",\n \"\",\n generationResultStart,\n '{\"artifacts\":[{\"documentType\":\"plan\",\"title\":\"Plan: Example\",\"repoPath\":\"docs/plans/PLAN-example.md\",\"content\":\"# Plan: Example\\\\n\\\\n## Goal\\\\n...\"}]}',\n generationResultEnd,\n \"\",\n \"Do not put Markdown fences around the markers. Do not claim implementation is complete.\"\n ].join(\"\\n\");\n}\n\nfunction stripJsonFence(value: string): string {\n const trimmed = value.trim();\n if (!trimmed.startsWith(\"```\")) {\n return trimmed;\n }\n\n return trimmed.replace(/^```(?:json)?\\s*/i, \"\").replace(/```$/i, \"\").trim();\n}", "import { createHash } from \"node:crypto\";\nimport { formatProjectNextAction, type ProjectNextAction } from \"@amistio/shared\";\n\nexport const watchStateReminderMs = 60 * 1000;\n\nexport interface WatchStateLog {\n key: string;\n printedAtMs: number;\n}\n\nexport function formatWatchStartupContext(input: { runnerId: string; projectId: string; repositoryLinkId: string; apiUrl: string; intervalSeconds: number }): string[] {\n return [\n `Runner ${input.runnerId} is watching project ${input.projectId}.`,\n `Repository link: ${input.repositoryLinkId}`,\n `API: ${input.apiUrl}`,\n `Polling interval: ${input.intervalSeconds}s. Press Ctrl+C to stop.`\n ];\n}\n\nexport function formatWatchIdleLine(action: ProjectNextAction, intervalSeconds: number): string {\n return `${formatProjectNextAction(action)} Checking again in ${intervalSeconds}s.`;\n}\n\nexport function shouldPrintWatchState(action: ProjectNextAction, previous: WatchStateLog | undefined, nowMs: number, reminderMs = watchStateReminderMs): boolean {\n const key = watchStateKey(action);\n return !previous || previous.key !== key || nowMs - previous.printedAtMs >= reminderMs;\n}\n\nexport function watchStateKey(action: ProjectNextAction): string {\n return [action.kind, action.message, action.workItemId, action.documentId, action.runnerId].filter(Boolean).join(\":\");\n}\n\nexport function stableRunnerId(input: { accountId: string; projectId: string; repositoryLinkId: string; machineId: string }): string {\n const digest = createHash(\"sha256\")\n .update(`${input.accountId}:${input.projectId}:${input.repositoryLinkId}:${input.machineId}`)\n .digest(\"hex\")\n .slice(0, 20);\n return `runner_${digest}`;\n}\n", "import os from \"node:os\";\nimport type { RunnerResourceUsage } from \"@amistio/shared\";\n\nexport interface RunnerResourceSampleState {\n sampledAtMs: number;\n processCpuUserMicros: number;\n processCpuSystemMicros: number;\n}\n\nexport interface RunnerResourceRuntime {\n nowMs: () => number;\n memoryUsage: () => { rss: number; heapUsed: number; heapTotal: number };\n uptime: () => number;\n cpuUsage: () => { user: number; system: number };\n totalmem: () => number;\n freemem: () => number;\n loadavg: () => number[];\n}\n\nconst defaultRuntime: RunnerResourceRuntime = {\n nowMs: () => Date.now(),\n memoryUsage: () => process.memoryUsage(),\n uptime: () => process.uptime(),\n cpuUsage: () => process.cpuUsage(),\n totalmem: () => os.totalmem(),\n freemem: () => os.freemem(),\n loadavg: () => os.loadavg()\n};\n\nlet previousRunnerResourceSample: RunnerResourceSampleState | undefined;\n\nexport function sampleCurrentRunnerResourceUsage(): RunnerResourceUsage {\n const sample = collectRunnerResourceUsage(previousRunnerResourceSample);\n previousRunnerResourceSample = sample.state;\n return sample.resourceUsage;\n}\n\nexport function collectRunnerResourceUsage(previous: RunnerResourceSampleState | undefined, runtime: RunnerResourceRuntime = defaultRuntime): { resourceUsage: RunnerResourceUsage; state: RunnerResourceSampleState } {\n const sampledAtMs = runtime.nowMs();\n const memory = runtime.memoryUsage();\n const cpu = runtime.cpuUsage();\n const load = runtime.loadavg();\n const totalMemory = runtime.totalmem();\n const freeMemory = runtime.freemem();\n\n const resourceUsage: RunnerResourceUsage = {\n sampledAt: new Date(sampledAtMs).toISOString(),\n processUptimeSeconds: roundNumber(runtime.uptime(), 3),\n processMemoryRssBytes: Math.round(memory.rss),\n processMemoryHeapUsedBytes: Math.round(memory.heapUsed),\n processMemoryHeapTotalBytes: Math.round(memory.heapTotal),\n processCpuUserMicros: Math.round(cpu.user),\n processCpuSystemMicros: Math.round(cpu.system),\n systemMemoryTotalBytes: Math.round(totalMemory),\n systemMemoryFreeBytes: Math.round(freeMemory)\n };\n\n const cpuPercent = processCpuPercent(previous, { sampledAtMs, processCpuUserMicros: cpu.user, processCpuSystemMicros: cpu.system });\n if (cpuPercent !== undefined) {\n resourceUsage.processCpuPercent = cpuPercent;\n }\n\n if (load.length >= 3) {\n resourceUsage.systemLoadAverage1m = roundNumber(load[0]!, 2);\n resourceUsage.systemLoadAverage5m = roundNumber(load[1]!, 2);\n resourceUsage.systemLoadAverage15m = roundNumber(load[2]!, 2);\n }\n\n return {\n resourceUsage,\n state: {\n sampledAtMs,\n processCpuUserMicros: cpu.user,\n processCpuSystemMicros: cpu.system\n }\n };\n}\n\nexport function formatRunnerResourceUsage(resourceUsage: RunnerResourceUsage | undefined): string {\n if (!resourceUsage) {\n return \"unavailable until this runner reports a sample.\";\n }\n\n const parts = [\n resourceUsage.processMemoryRssBytes !== undefined ? `RSS ${formatBytes(resourceUsage.processMemoryRssBytes)}` : undefined,\n heapSummary(resourceUsage),\n resourceUsage.processCpuPercent !== undefined ? `CPU ${formatPercent(resourceUsage.processCpuPercent)}` : \"CPU warming up\",\n systemMemorySummary(resourceUsage),\n loadSummary(resourceUsage),\n `sampled ${resourceUsage.sampledAt}`\n ].filter(Boolean);\n\n return parts.length ? parts.join(\"; \") : \"unavailable until this runner reports a complete sample.\";\n}\n\nexport function formatBytes(bytes: number | undefined): string {\n if (bytes === undefined || !Number.isFinite(bytes)) {\n return \"unknown\";\n }\n const units = [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\"];\n let value = Math.max(0, bytes);\n let unitIndex = 0;\n while (value >= 1024 && unitIndex < units.length - 1) {\n value /= 1024;\n unitIndex += 1;\n }\n const digits = Number.isInteger(value) || value >= 10 || unitIndex === 0 ? 0 : 1;\n return `${value.toFixed(digits)} ${units[unitIndex]}`;\n}\n\nexport function formatPercent(value: number | undefined): string {\n if (value === undefined || !Number.isFinite(value)) {\n return \"unknown\";\n }\n return `${roundNumber(value, 1).toFixed(1)}%`;\n}\n\nfunction processCpuPercent(previous: RunnerResourceSampleState | undefined, current: RunnerResourceSampleState): number | undefined {\n if (!previous) return undefined;\n const elapsedMicros = (current.sampledAtMs - previous.sampledAtMs) * 1000;\n const cpuDeltaMicros = current.processCpuUserMicros + current.processCpuSystemMicros - previous.processCpuUserMicros - previous.processCpuSystemMicros;\n if (elapsedMicros <= 0 || cpuDeltaMicros < 0) return undefined;\n return roundNumber((cpuDeltaMicros / elapsedMicros) * 100, 1);\n}\n\nfunction heapSummary(resourceUsage: RunnerResourceUsage): string | undefined {\n if (resourceUsage.processMemoryHeapUsedBytes === undefined && resourceUsage.processMemoryHeapTotalBytes === undefined) {\n return undefined;\n }\n return `heap ${formatBytes(resourceUsage.processMemoryHeapUsedBytes)} / ${formatBytes(resourceUsage.processMemoryHeapTotalBytes)}`;\n}\n\nfunction systemMemorySummary(resourceUsage: RunnerResourceUsage): string | undefined {\n if (resourceUsage.systemMemoryTotalBytes === undefined || resourceUsage.systemMemoryFreeBytes === undefined || resourceUsage.systemMemoryTotalBytes <= 0) {\n return undefined;\n }\n const usedBytes = Math.max(0, resourceUsage.systemMemoryTotalBytes - resourceUsage.systemMemoryFreeBytes);\n const usedPercent = (usedBytes / resourceUsage.systemMemoryTotalBytes) * 100;\n return `system memory ${formatBytes(usedBytes)} / ${formatBytes(resourceUsage.systemMemoryTotalBytes)} used (${formatPercent(usedPercent)})`;\n}\n\nfunction loadSummary(resourceUsage: RunnerResourceUsage): string | undefined {\n if (resourceUsage.systemLoadAverage1m === undefined || resourceUsage.systemLoadAverage5m === undefined || resourceUsage.systemLoadAverage15m === undefined) {\n return undefined;\n }\n return `load ${resourceUsage.systemLoadAverage1m.toFixed(2)} / ${resourceUsage.systemLoadAverage5m.toFixed(2)} / ${resourceUsage.systemLoadAverage15m.toFixed(2)}`;\n}\n\nfunction roundNumber(value: number, digits: number): number {\n const factor = 10 ** digits;\n return Math.round(value * factor) / factor;\n}", "import { execFile } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { readdir, readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { isControlPlaneTemplateRepoPath, parseRepositoryCloneUrl, sha256ContentHash, type BrainDocumentItem, type DocumentType, type ParsedRepositoryCloneUrl } from \"@amistio/shared\";\nimport { parseFrontmatter } from \"./control-plane.js\";\n\nconst execFileAsync = promisify(execFile);\nconst defaultMaxFileKb = 256;\n\nconst controlPlaneRoots = [\"architecture\", \"context\", \"decisions\", \"features\", \"memory\", \"plans\", \"prompts\", \"workflows\"] as const;\nconst excludedDirectoryNames = new Set([\".git\", \"node_modules\", \".pnpm-store\", \".next\", \"dist\", \"build\", \"coverage\", \".cache\", \"cache\", \"tmp\", \"temp\", \"vendor\"]);\nconst excludedFileNames = new Set([\"docs/context/amistio-project.md\", \"context/amistio-project.md\"]);\nconst generatedPathSegments = new Set([\"generated\", \"__generated__\", \"vendor\", \"vendors\"]);\n\nconst documentFolderByType: Record<DocumentType, string> = {\n architecture: \"docs/architecture\",\n context: \"docs/context\",\n decision: \"docs/decisions\",\n feature: \"docs/features\",\n memory: \"docs/memory\",\n plan: \"docs/plans\",\n prompt: \"docs/prompts/shared\",\n workflow: \"docs/workflows\"\n};\n\nexport interface LocalRepositoryMetadata {\n rootDir: string;\n repoName: string;\n defaultBranch: string;\n repoFingerprint: string;\n originRemoteWarning?: string;\n parsedCloneUrl?: ParsedRepositoryCloneUrl;\n}\n\nexport interface LegacyDocumentCandidate {\n sourcePath: string;\n repoPath: string;\n documentType: DocumentType;\n title: string;\n content: string;\n contentHash: string;\n}\n\nexport interface ImportSkippedDocument {\n repoPath: string;\n reason: \"notMarkdown\" | \"excluded\" | \"tooLarge\" | \"alreadyManaged\" | \"unreadable\";\n}\n\nexport interface LegacyDocumentScanResult {\n candidates: LegacyDocumentCandidate[];\n skipped: ImportSkippedDocument[];\n}\n\nexport interface ScanLegacyDocumentsOptions {\n rootDir: string;\n include?: string[];\n exclude?: string[];\n maxFileKb?: number;\n}\n\nexport interface BuildImportedDocumentsOptions {\n accountId: string;\n projectId: string;\n repositoryLinkId: string;\n candidates: LegacyDocumentCandidate[];\n existingDocuments?: BrainDocumentItem[];\n importedAt?: string;\n}\n\nexport async function inspectLocalRepository(rootDir: string, defaultBranch: string): Promise<LocalRepositoryMetadata> {\n const requestedRoot = path.resolve(rootDir);\n const root = await runGit([\"-C\", requestedRoot, \"rev-parse\", \"--show-toplevel\"]).catch(() => requestedRoot);\n const detectedBranch = await runGit([\"-C\", root, \"symbolic-ref\", \"--quiet\", \"--short\", \"HEAD\"]).catch(() => defaultBranch);\n const originUrl = await runGit([\"-C\", root, \"remote\", \"get-url\", \"origin\"]).catch(() => undefined);\n const parsedCloneUrl = originUrl ? parseOptionalOriginCloneUrl(originUrl) : undefined;\n const repoName = (parsedCloneUrl?.repoName ?? path.basename(root)) || \"repository\";\n const fingerprintSeed = parsedCloneUrl ? `origin:${parsedCloneUrl.normalizedKey}` : `repo:${repoName}:${detectedBranch || defaultBranch}`;\n\n return {\n rootDir: root,\n repoName,\n defaultBranch: detectedBranch || defaultBranch,\n repoFingerprint: `import_${hashText(fingerprintSeed, 24)}`,\n ...(parsedCloneUrl ? { parsedCloneUrl } : {}),\n ...(!parsedCloneUrl && originUrl ? { originRemoteWarning: \"Origin remote is not a supported hosted HTTPS or SSH clone URL, so no clone URL will be stored.\" } : {})\n };\n}\n\nexport async function scanLegacyDocuments(options: ScanLegacyDocumentsOptions): Promise<LegacyDocumentScanResult> {\n const rootDir = path.resolve(options.rootDir);\n const maxBytes = (options.maxFileKb ?? defaultMaxFileKb) * 1024;\n const skipped: ImportSkippedDocument[] = [];\n const candidates: LegacyDocumentCandidate[] = [];\n const usedDestinationPaths = new Set<string>();\n const repoPaths = (await listRepositoryPaths(rootDir)).sort((first, second) => first.localeCompare(second));\n\n for (const repoPath of repoPaths) {\n if (!matchesIncludeExclude(repoPath, options.include, options.exclude)) {\n skipped.push({ repoPath, reason: \"excluded\" });\n continue;\n }\n if (!isMarkdownDocument(repoPath)) {\n skipped.push({ repoPath, reason: \"notMarkdown\" });\n continue;\n }\n if (isExcludedRepoPath(repoPath)) {\n skipped.push({ repoPath, reason: \"excluded\" });\n continue;\n }\n\n const fullPath = path.join(rootDir, ...repoPath.split(\"/\"));\n const fileStat = await stat(fullPath).catch(() => undefined);\n if (!fileStat?.isFile()) {\n skipped.push({ repoPath, reason: \"unreadable\" });\n continue;\n }\n if (fileStat.size > maxBytes) {\n skipped.push({ repoPath, reason: \"tooLarge\" });\n continue;\n }\n\n const content = await readFile(fullPath, \"utf8\").catch(() => undefined);\n if (content === undefined) {\n skipped.push({ repoPath, reason: \"unreadable\" });\n continue;\n }\n if (isAmistioManagedMarkdown(content)) {\n skipped.push({ repoPath, reason: \"alreadyManaged\" });\n continue;\n }\n\n const documentType = classifyLegacyDocument(repoPath, content);\n const destinationPath = uniqueDestinationPath(canonicalImportPath(repoPath, documentType), repoPath, usedDestinationPaths);\n candidates.push({\n sourcePath: repoPath,\n repoPath: destinationPath,\n documentType,\n title: inferTitle(content, repoPath),\n content,\n contentHash: sha256ContentHash(content)\n });\n }\n\n return { candidates, skipped };\n}\n\nexport function buildImportedBrainDocuments(options: BuildImportedDocumentsOptions): BrainDocumentItem[] {\n const importedAt = options.importedAt ?? new Date().toISOString();\n const existingById = new Map((options.existingDocuments ?? []).map((document) => [document.documentId, document]));\n\n return options.candidates.map((candidate) => {\n const documentId = stableImportDocumentId(options.accountId, options.projectId, options.repositoryLinkId, candidate.sourcePath);\n const existing = existingById.get(documentId);\n const revision = existing ? (existing.contentHash === candidate.contentHash ? existing.revision : existing.revision + 1) : 0;\n return {\n id: documentId,\n type: \"brainDocument\",\n schemaVersion: 1,\n accountId: options.accountId,\n projectId: options.projectId,\n documentId,\n documentType: candidate.documentType,\n title: candidate.title,\n status: \"approved\",\n repoPath: candidate.repoPath,\n content: candidate.content,\n contentHash: candidate.contentHash,\n frontmatter: {\n ...(existing?.frontmatter ?? {}),\n legacySourcePath: candidate.sourcePath,\n importedByCommand: \"amistio import\",\n importedAt,\n importedSourceHash: candidate.contentHash\n },\n revision,\n source: \"repo\",\n syncState: \"approved\",\n createdAt: existing?.createdAt ?? importedAt,\n updatedAt: importedAt,\n approvedRevision: revision\n } satisfies BrainDocumentItem;\n });\n}\n\nexport function importSkipCounts(skipped: ImportSkippedDocument[]): Record<ImportSkippedDocument[\"reason\"], number> {\n return {\n notMarkdown: skipped.filter((item) => item.reason === \"notMarkdown\").length,\n excluded: skipped.filter((item) => item.reason === \"excluded\").length,\n tooLarge: skipped.filter((item) => item.reason === \"tooLarge\").length,\n alreadyManaged: skipped.filter((item) => item.reason === \"alreadyManaged\").length,\n unreadable: skipped.filter((item) => item.reason === \"unreadable\").length\n };\n}\n\nfunction parseOptionalOriginCloneUrl(originUrl: string): ParsedRepositoryCloneUrl | undefined {\n try {\n return parseRepositoryCloneUrl(originUrl);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.toLowerCase().includes(\"credential\") || message.toLowerCase().includes(\"password\")) {\n throw new Error(\"Repository origin remote contains embedded credentials. Remove credentials from the remote URL before importing.\");\n }\n return undefined;\n }\n}\n\nasync function listRepositoryPaths(rootDir: string): Promise<string[]> {\n const gitFiles = await runGit([\"-C\", rootDir, \"ls-files\", \"--cached\", \"--others\", \"--exclude-standard\"]).catch(() => undefined);\n if (gitFiles !== undefined) {\n return gitFiles.split(\"\\n\").map((line) => normalizeRepoPath(line)).filter((line) => line.length > 0);\n }\n\n const files: string[] = [];\n await walkRepository(rootDir, rootDir, files);\n return files;\n}\n\nasync function walkRepository(rootDir: string, directory: string, files: string[]): Promise<void> {\n const entries = await readdir(directory, { withFileTypes: true }).catch(() => []);\n for (const entry of entries) {\n const fullPath = path.join(directory, entry.name);\n const repoPath = normalizeRepoPath(path.relative(rootDir, fullPath));\n if (entry.isDirectory()) {\n if (!excludedDirectoryNames.has(entry.name)) {\n await walkRepository(rootDir, fullPath, files);\n }\n } else if (entry.isFile() && !isExcludedRepoPath(repoPath)) {\n files.push(repoPath);\n }\n }\n}\n\nfunction matchesIncludeExclude(repoPath: string, include: string[] | undefined, exclude: string[] | undefined): boolean {\n if (include?.length && !include.some((pattern) => wildcardMatch(pattern, repoPath))) {\n return false;\n }\n if (exclude?.some((pattern) => wildcardMatch(pattern, repoPath))) {\n return false;\n }\n return true;\n}\n\nfunction wildcardMatch(pattern: string, repoPath: string): boolean {\n const normalizedPattern = normalizeRepoPath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\").replace(/\\*\\*\\//g, \"::DOUBLE_STAR_SLASH::\").replace(/\\*\\*/g, \"::DOUBLE_STAR::\").replace(/\\?/g, \"[^/]\").replace(/\\*/g, \"[^/]*\").replace(/::DOUBLE_STAR_SLASH::/g, \"(?:.*/)?\").replace(/::DOUBLE_STAR::/g, \".*\");\n return new RegExp(`^${escaped}$`).test(repoPath);\n}\n\nfunction isMarkdownDocument(repoPath: string): boolean {\n return /\\.(md|mdx)$/i.test(repoPath);\n}\n\nfunction isExcludedRepoPath(repoPath: string): boolean {\n if (isControlPlaneTemplateRepoPath(repoPath)) return true;\n if (excludedFileNames.has(repoPath)) return true;\n const segments = repoPath.split(\"/\");\n if (segments.some((segment) => excludedDirectoryNames.has(segment) || generatedPathSegments.has(segment))) return true;\n const basename = segments[segments.length - 1]?.toLowerCase() ?? \"\";\n return basename.startsWith(\".env\") || basename.includes(\"secret\") || basename.includes(\"token\") || basename.includes(\"credential\") || basename.endsWith(\".lock\");\n}\n\nfunction isAmistioManagedMarkdown(content: string): boolean {\n const frontmatter = parseFrontmatter(content);\n return typeof frontmatter.amistioDocumentId === \"string\" && frontmatter.amistioDocumentId.trim().length > 0;\n}\n\nfunction classifyLegacyDocument(repoPath: string, content: string): DocumentType {\n const haystack = `${repoPath} ${inferTitle(content, repoPath)}`.toLowerCase();\n if (/\\b(prompt|prompts|instruction|instructions|copilot|agent|skill)\\b/.test(haystack)) return \"prompt\";\n if (/\\b(adr|decision|decisions|rfc)\\b/.test(haystack)) return \"decision\";\n if (/\\b(architecture|architectural|design|system|technical|tech-spec)\\b/.test(haystack)) return \"architecture\";\n if (/\\b(feature|features|spec|requirements|prd|story|stories)\\b/.test(haystack)) return \"feature\";\n if (/\\b(memory|memories|lesson|lessons|mistake|mistakes|learning|retro|retrospective)\\b/.test(haystack)) return \"memory\";\n if (/\\b(plan|plans|roadmap|milestone|todo|task|tasks)\\b/.test(haystack)) return \"plan\";\n if (/\\b(workflow|workflows|runbook|playbook|process|procedure|ops)\\b/.test(haystack)) return \"workflow\";\n return \"context\";\n}\n\nfunction canonicalImportPath(sourcePath: string, documentType: DocumentType): string {\n if (isCanonicalControlPlanePath(sourcePath)) {\n return sourcePath;\n }\n if (isLegacyControlPlanePath(sourcePath)) {\n return `docs/${sourcePath}`;\n }\n const baseSlug = slugFromPath(sourcePath);\n return `${documentFolderByType[documentType]}/imported/${baseSlug}.md`;\n}\n\nfunction uniqueDestinationPath(basePath: string, sourcePath: string, usedPaths: Set<string>): string {\n if (!usedPaths.has(basePath)) {\n usedPaths.add(basePath);\n return basePath;\n }\n const extension = path.posix.extname(basePath) || \".md\";\n const directory = path.posix.dirname(basePath);\n const basename = path.posix.basename(basePath, extension);\n const uniquePath = `${directory}/${basename}-${hashText(sourcePath, 8)}${extension}`;\n usedPaths.add(uniquePath);\n return uniquePath;\n}\n\nfunction isControlPlanePath(repoPath: string): boolean {\n return isCanonicalControlPlanePath(repoPath) || isLegacyControlPlanePath(repoPath);\n}\n\nfunction isCanonicalControlPlanePath(repoPath: string): boolean {\n const [firstSegment, secondSegment] = normalizeRepoPath(repoPath).split(\"/\");\n return firstSegment === \"docs\" && Boolean(secondSegment && (controlPlaneRoots as readonly string[]).includes(secondSegment));\n}\n\nfunction isLegacyControlPlanePath(repoPath: string): boolean {\n const [firstSegment] = repoPath.split(\"/\");\n return Boolean(firstSegment && (controlPlaneRoots as readonly string[]).includes(firstSegment));\n}\n\nfunction inferTitle(content: string, repoPath: string): string {\n const body = stripFrontmatter(content);\n const heading = body.split(\"\\n\").find((line) => /^#\\s+/.test(line))?.replace(/^#\\s+/, \"\").trim();\n if (heading) return heading;\n const basename = path.posix.basename(repoPath, path.posix.extname(repoPath)).replace(/[-_]+/g, \" \").trim();\n return titleCase(basename || \"Imported Document\");\n}\n\nfunction stripFrontmatter(content: string): string {\n if (!content.startsWith(\"---\\n\")) return content;\n const end = content.indexOf(\"\\n---\", 4);\n if (end === -1) return content;\n const closingLineEnd = content.indexOf(\"\\n\", end + 4);\n return closingLineEnd === -1 ? \"\" : content.slice(closingLineEnd + 1);\n}\n\nfunction slugFromPath(repoPath: string): string {\n const withoutExtension = repoPath.replace(/\\.(md|mdx)$/i, \"\");\n const slug = withoutExtension.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\").slice(0, 90);\n return slug || \"imported-document\";\n}\n\nfunction titleCase(value: string): string {\n return value.replace(/\\b\\w/g, (match) => match.toUpperCase());\n}\n\nfunction stableImportDocumentId(accountId: string, projectId: string, repositoryLinkId: string, sourcePath: string): string {\n return `doc_import_${hashText(`${accountId}\\0${projectId}\\0${repositoryLinkId}\\0${sourcePath}`, 24)}`;\n}\n\nfunction hashText(value: string, length: number): string {\n return createHash(\"sha256\").update(value).digest(\"hex\").slice(0, length);\n}\n\nfunction normalizeRepoPath(value: string): string {\n return value.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\").replace(/^\\/+/, \"\");\n}\n\nasync function runGit(args: string[]): Promise<string> {\n const { stdout } = await execFileAsync(\"git\", args, { maxBuffer: 10 * 1024 * 1024 });\n return stdout.trim();\n}", "import { spawn } from \"node:child_process\";\nimport path from \"node:path\";\nimport type { RunnerInvocationChannel } from \"@amistio/shared\";\n\nexport interface BackgroundRunnerArgsOptions {\n apiUrl: string;\n runnerId: string;\n root: string;\n tool?: string;\n invocationChannel?: RunnerInvocationChannel;\n toolCommand?: string;\n model?: string;\n session: string;\n intervalSeconds: number;\n maxIterations?: number;\n stream: boolean;\n verbose?: boolean;\n}\n\nexport interface RunnerActionResult {\n succeeded: boolean;\n message: string;\n error?: string;\n}\n\nexport function buildBackgroundRunnerArgs(options: BackgroundRunnerArgsOptions): string[] {\n const args = [\n \"run\",\n \"--watch\",\n \"--api-url\",\n options.apiUrl,\n \"--runner-id\",\n options.runnerId,\n \"--root\",\n path.resolve(options.root),\n \"--session\",\n options.session,\n \"--interval-seconds\",\n String(options.intervalSeconds)\n ];\n if (options.tool) {\n args.push(\"--tool\", options.tool);\n }\n if (options.invocationChannel) {\n args.push(\"--invocation-channel\", options.invocationChannel);\n }\n if (options.toolCommand) {\n args.push(\"--tool-command\", options.toolCommand);\n }\n if (options.model) {\n args.push(\"--model\", options.model);\n }\n if (options.maxIterations !== undefined) {\n args.push(\"--max-iterations\", String(options.maxIterations));\n }\n if (!options.stream) {\n args.push(\"--no-stream\");\n }\n if (options.verbose) {\n args.push(\"--verbose\");\n }\n return args;\n}\n\nexport async function runOfficialCliUpdate(): Promise<RunnerActionResult> {\n const result = await runOfficialUpdateProcess(\"npm\", [\"install\", \"-g\", \"@amistio/cli\"], 120_000);\n if (result.exitCode === 0) {\n return { succeeded: true, message: \"Official Amistio CLI update command completed.\" };\n }\n return { succeeded: false, message: \"Official Amistio CLI update command failed.\", error: result.output || `npm exited with code ${result.exitCode}.` };\n}\n\nexport function runOfficialUpdateProcess(command: string, args: string[], timeoutMs: number): Promise<{ exitCode: number; output: string }> {\n return new Promise((resolve) => {\n const child = spawn(command, args, { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n let output = \"\";\n const updateTimeout = setTimeout(() => {\n output += \"Timed out while running official CLI update.\\n\";\n child.kill(\"SIGTERM\");\n }, timeoutMs);\n child.stdout?.on(\"data\", (chunk: Buffer) => { output += chunk.toString(\"utf8\"); });\n child.stderr?.on(\"data\", (chunk: Buffer) => { output += chunk.toString(\"utf8\"); });\n child.on(\"error\", (error) => {\n clearTimeout(updateTimeout);\n resolve({ exitCode: 1, output: error.message });\n });\n child.on(\"close\", (code) => {\n clearTimeout(updateTimeout);\n resolve({ exitCode: code ?? 1, output: truncateProcessOutput(output) });\n });\n });\n}\n\nfunction truncateProcessOutput(value: string): string {\n const trimmed = value.trim();\n return trimmed.length > 1200 ? `${trimmed.slice(0, 1200)}...` : trimmed;\n}", "import { execFile } from \"node:child_process\";\nimport { mkdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport type { WorkItem } from \"@amistio/shared\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface GitWorktreeIsolation {\n branch: string;\n baseRevision: string;\n implementationScopeId: string;\n repositoryLockId?: string;\n worktreeKey: string;\n worktreePath: string;\n}\n\nexport function needsGitWorktreeIsolation(workItem: WorkItem): boolean {\n return (workItem.workKind ?? \"implementation\") === \"implementation\";\n}\n\nexport function resolveWorktreeIdentity(workItem: WorkItem): Pick<GitWorktreeIsolation, \"branch\" | \"implementationScopeId\" | \"repositoryLockId\" | \"worktreeKey\"> {\n const implementationScopeId = workItem.controllingAdrId ?? workItem.implementationScopeId ?? workItem.impactDocumentId ?? workItem.reviewDocumentId ?? workItem.generatedDraftId ?? workItem.workItemId;\n const slug = workIsolationSlug(implementationScopeId, workItem.title);\n return {\n implementationScopeId,\n branch: workItem.executionBranch ?? `amistio/work/${slug}`,\n worktreeKey: workItem.executionWorktreeKey ?? `amistio/worktrees/${slug}`,\n ...(workItem.repositoryLockId ? { repositoryLockId: workItem.repositoryLockId } : {})\n };\n}\n\nexport async function prepareGitWorktreeIsolation(rootDir: string, workItem: WorkItem): Promise<GitWorktreeIsolation> {\n const identity = resolveWorktreeIdentity(workItem);\n const repoRoot = await gitOutput(rootDir, [\"rev-parse\", \"--show-toplevel\"]).catch((error: unknown) => {\n throw new Error(`Git worktree isolation requires a paired Git checkout: ${errorMessage(error)}`);\n });\n const currentHead = await gitOutput(repoRoot, [\"rev-parse\", \"HEAD\"]);\n await assertBaseRevision(repoRoot, workItem.baseRevision, currentHead);\n const baseRevision = currentHead;\n const worktreePath = localWorktreePath(repoRoot, identity.worktreeKey);\n\n if (await pathExists(worktreePath)) {\n await assertExistingWorktree(worktreePath, identity.branch);\n return { ...identity, baseRevision, worktreePath };\n }\n\n await mkdir(path.dirname(worktreePath), { recursive: true });\n const branchExists = await gitCommandSucceeds(repoRoot, [\"show-ref\", \"--verify\", \"--quiet\", `refs/heads/${identity.branch}`]);\n const worktreeArgs = branchExists ? [\"worktree\", \"add\", worktreePath, identity.branch] : [\"worktree\", \"add\", \"-b\", identity.branch, worktreePath, baseRevision];\n await gitOutput(repoRoot, worktreeArgs).catch((error: unknown) => {\n throw new Error(`Could not create Git worktree ${identity.worktreeKey} on ${identity.branch}: ${errorMessage(error)}`);\n });\n\n return { ...identity, baseRevision, worktreePath };\n}\n\nfunction localWorktreePath(repoRoot: string, worktreeKey: string): string {\n const repoName = path.basename(repoRoot);\n const worktreeSlug = worktreeKey.split(\"/\").filter(Boolean).pop() ?? \"work\";\n return path.join(path.dirname(repoRoot), `${repoName}.worktrees`, worktreeSlug);\n}\n\nasync function assertExistingWorktree(worktreePath: string, branch: string): Promise<void> {\n await gitOutput(worktreePath, [\"rev-parse\", \"--is-inside-work-tree\"]);\n const currentBranch = await gitOutput(worktreePath, [\"branch\", \"--show-current\"]);\n if (currentBranch && currentBranch !== branch) {\n throw new Error(`Existing worktree is on ${currentBranch}; expected ${branch}.`);\n }\n}\n\nasync function assertBaseRevision(repoRoot: string, baseRevision: string | undefined, currentHead: string): Promise<void> {\n if (!baseRevision || baseRevision === currentHead) {\n return;\n }\n\n const revisionExists = await gitCommandSucceeds(repoRoot, [\"cat-file\", \"-e\", `${baseRevision}^{commit}`]);\n if (!revisionExists) {\n throw new Error(`Work item base revision ${baseRevision} is not available in this checkout; sync the repository before running implementation work.`);\n }\n\n const isAncestor = await gitCommandSucceeds(repoRoot, [\"merge-base\", \"--is-ancestor\", baseRevision, currentHead]);\n if (!isAncestor) {\n throw new Error(`Work item base revision ${baseRevision} is not an ancestor of ${currentHead}; refresh the work item before implementation.`);\n }\n}\n\nasync function gitOutput(cwd: string, args: string[]): Promise<string> {\n const { stdout } = await execFileAsync(\"git\", args, { cwd, maxBuffer: 1024 * 1024 });\n return stdout.trim();\n}\n\nasync function gitCommandSucceeds(cwd: string, args: string[]): Promise<boolean> {\n return execFileAsync(\"git\", args, { cwd }).then(() => true, () => false);\n}\n\nasync function pathExists(value: string): Promise<boolean> {\n return stat(value).then(() => true, () => false);\n}\n\nfunction workIsolationSlug(scopeId: string, title: string): string {\n const scopeSlug = slugify(scopeId);\n const titleSlug = slugify(title).slice(0, 32);\n const combined = titleSlug && !scopeSlug.includes(titleSlug) ? `${scopeSlug}-${titleSlug}` : scopeSlug;\n return combined.slice(0, 96).replace(/-+$/g, \"\") || \"work\";\n}\n\nfunction slugify(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\") || \"work\";\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}", "import { readFileSync } from \"node:fs\";\n\ninterface CliPackageJson {\n version?: unknown;\n}\n\nexport function readCliPackageVersion(): string {\n const packageJson = JSON.parse(readFileSync(new URL(\"../package.json\", import.meta.url), \"utf8\")) as CliPackageJson;\n if (typeof packageJson.version !== \"string\" || !packageJson.version.trim()) {\n throw new Error(\"@amistio/cli package version is missing.\");\n }\n return packageJson.version.trim();\n}\n\nexport const CLI_VERSION = readCliPackageVersion();"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["createHash", "writeFile", "os", "path", "z", "normalizeRepoPath", "mkdir", "path", "execFile", "mkdir", "readFile", "stat", "writeFile", "path", "promisify", "execFileAsync", "promisify", "execFile", "path", "mkdir", "writeFile", "readFile", "stat", "z", "path", "mkdir", "writeFile", "path", "mkdir", "path", "writeFile", "writeFile", "os", "path", "path", "os", "writeFile", "runner", "spawn", "createHash", "mkdir", "readdir", "readFile", "writeFile", "os", "path", "spawn", "createHash", "mkdir", "readFile", "rm", "writeFile", "os", "path", "os", "path", "mkdir", "writeFile", "rm", "readFile", "result", "createHash", "spawn", "mkdir", "readdir", "readFile", "stat", "writeFile", "path", "readFile", "mkdir", "path", "writeFile", "exists", "readdir", "stat", "mkdir", "readFile", "writeFile", "os", "path", "createHash", "createHash", "os", "execFile", "createHash", "readdir", "readFile", "stat", "path", "promisify", "execFileAsync", "promisify", "execFile", "controlPlaneRoots", "path", "runGit", "stat", "readFile", "inferTitle", "normalizeRepoPath", "readdir", "normalizeRepoPath", "controlPlaneRoots", "inferTitle", "path", "createHash", "runGit", "execFileAsync", "spawn", "path", "execFile", "mkdir", "stat", "path", "promisify", "execFileAsync", "errorMessage", "writeFile", "path", "record", "runner", "errorMessage", "durationMs", "documents", "messages", "toolSession", "createHash", "capability", "os"]
|
|
7
7
|
}
|