@amistio/cli 0.1.0 → 0.1.2
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 +2 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.js +3493 -642
- package/dist/index.js.map +7 -1
- package/package.json +9 -6
- package/dist/api-client.d.ts +0 -175
- package/dist/api-client.d.ts.map +0 -1
- package/dist/api-client.js +0 -116
- package/dist/api-client.js.map +0 -1
- package/dist/bootstrap.d.ts +0 -11
- package/dist/bootstrap.d.ts.map +0 -1
- package/dist/bootstrap.js +0 -66
- package/dist/bootstrap.js.map +0 -1
- package/dist/control-plane.d.ts +0 -11
- package/dist/control-plane.d.ts.map +0 -1
- package/dist/control-plane.js +0 -91
- package/dist/control-plane.js.map +0 -1
- package/dist/credential-store.d.ts +0 -9
- package/dist/credential-store.d.ts.map +0 -1
- package/dist/credential-store.js +0 -32
- package/dist/credential-store.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/local-tool-runner.d.ts +0 -93
- package/dist/local-tool-runner.d.ts.map +0 -1
- package/dist/local-tool-runner.js +0 -472
- package/dist/local-tool-runner.js.map +0 -1
- package/dist/orchestrator.d.ts +0 -7
- package/dist/orchestrator.d.ts.map +0 -1
- package/dist/orchestrator.js +0 -61
- package/dist/orchestrator.js.map +0 -1
- package/dist/session-policy.d.ts +0 -20
- package/dist/session-policy.d.ts.map +0 -1
- package/dist/session-policy.js +0 -125
- package/dist/session-policy.js.map +0 -1
- package/dist/sync.d.ts +0 -33
- package/dist/sync.d.ts.map +0 -1
- package/dist/sync.js +0 -279
- package/dist/sync.js.map +0 -1
- package/dist/tool-session-store.d.ts +0 -8
- package/dist/tool-session-store.d.ts.map +0 -1
- package/dist/tool-session-store.js +0 -38
- package/dist/tool-session-store.js.map +0 -1
- package/dist/work-runner.d.ts +0 -4
- package/dist/work-runner.d.ts.map +0 -1
- package/dist/work-runner.js +0 -100
- package/dist/work-runner.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts", "../../shared/src/schemas.ts", "../../shared/src/api-url.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"],
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env node\nimport { spawn } from \"node:child_process\";\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 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 RunnerHeartbeatMetadata } 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, parseBrainGenerationArtifacts } from \"./work-runner.js\";\nimport { formatWatchIdleLine, formatWatchStartupContext, shouldPrintWatchState, watchStateKey, type WatchStateLog } from \"./runner-status.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(\"0.1.2\");\n\nconst CLI_VERSION = \"0.1.2\";\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(\"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 = createWorkExecutionPrompt(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(\"--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; 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, ...(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 ...(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\", `runner_${randomUUID()}`)\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(\"--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 .action(async (options: { apiUrl: string; runnerId: string; root: string; tool?: string; toolCommand?: string; model?: string; session: string; dryRun?: boolean; watch?: boolean; background?: boolean; intervalSeconds: number; maxIterations?: number; stream: boolean }, 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 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: options.runnerId,\n rootDir: path.resolve(options.root),\n apiUrl: options.apiUrl,\n args: buildBackgroundRunnerArgs(options)\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: options.runnerId, projectId: context.metadata.amistioProjectId, repositoryLinkId: context.metadata.repositoryLinkId, apiUrl: options.apiUrl, intervalSeconds: options.intervalSeconds })) {\n console.log(line);\n }\n }\n\n let iterations = 0;\n let lastWatchStateLog: WatchStateLog | undefined;\n while (true) {\n iterations += 1;\n const result = await runNextWorkItem({\n apiClient: context.client,\n projectId: context.metadata.amistioProjectId,\n repositoryLinkId: context.metadata.repositoryLinkId,\n runnerId: options.runnerId,\n root: options.root,\n sessionPolicy: normalizeSessionPolicy(options.session),\n ...(command.getOptionValueSource(\"tool\") === \"cli\" && options.tool ? { explicitTool: options.tool } : {}),\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: options.runnerId\n },\n suppressIdleOutput: Boolean(options.watch)\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 });\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\nasync function runNextWorkItem({\n apiClient,\n dryRun,\n projectId,\n repositoryLinkId,\n root,\n runnerId,\n sessionPolicy,\n stream,\n explicitModel,\n explicitTool,\n toolCommand,\n commandContext,\n suppressIdleOutput\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 explicitTool?: string;\n suppressIdleOutput?: 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 ...(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);\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 await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"running\", runnerHeartbeatMetadata(toolConfig));\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 preview = await createToolRunPreview({ rootDir: root, prompt, tool: toolConfig.tool, ...(toolCommand ? { toolCommand } : {}), ...(toolConfig.model ? { model: toolConfig.model } : {}) });\n const sessionContext = await prepareToolSession({\n apiClient,\n projectId,\n repositoryLinkId,\n runnerId,\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 });\n console.log(`Claimed ${result.workItem.workItemId}. Running ${preview.toolName}: ${preview.displayCommand}`);\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 const toolResult = await runLocalTool({\n rootDir: root,\n prompt,\n tool: toolConfig.tool,\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 }).catch(async (error: unknown) => {\n await apiClient.sendRunnerHeartbeat(projectId, runnerId, repositoryLinkId, \"blocked\", runnerHeartbeatMetadata(toolConfig));\n await markToolSessionBlocked(apiClient, projectId, sessionContext.toolSession, errorMessage(error));\n throw error;\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 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 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 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\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\nasync function runOfficialCliUpdate(): Promise<{ succeeded: boolean; message: string; error?: string }> {\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\nfunction 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 timer = 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(timer);\n resolve({ exitCode: 1, output: error.message });\n });\n child.on(\"close\", (code) => {\n clearTimeout(timer);\n resolve({ exitCode: code ?? 1, output: truncateLogExcerpt(output) });\n });\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 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 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 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 createRunnerWorkPrompt(apiClient: ApiClient, projectId: string, workItem: WorkItem): Promise<string> {\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 projectId,\n repositoryLinkId,\n runnerId,\n sessionPolicy,\n supportsSessionReuse,\n resumabilityScope,\n toolName,\n model,\n workItem\n}: {\n apiClient: ApiClient;\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 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 lastWorkItemId: workItem.workItemId,\n reusePolicy: sessionPolicy\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 lastWorkItemId: workItem.workItemId,\n messageCount: 0,\n reusePolicy: sessionPolicy,\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 truncateLogExcerpt(value: string) {\n const trimmed = value.trim();\n return trimmed.length > 1200 ? `${trimmed.slice(0, 1200)}...` : trimmed;\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 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 effectiveTool?: RunnerToolName | \"custom\";\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 effectiveTool?: RunnerToolName | \"custom\";\n model?: string;\n message: string;\n };\n\nasync function resolveRunnerToolConfig({ apiClient, explicitModel, explicitTool, projectId, toolCommand }: { apiClient: ApiClient; 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 ...(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\", model: explicitModel });\n }\n return { ready: true, tool: \"none\", capabilities, source: \"cli\", status: \"none\", 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, ...(explicitModel ? { model: explicitModel } : {}) });\n }\n\n const remotePreference = explicitTool || explicitModel\n ? undefined\n : await apiClient.getRunnerPreferences(projectId).then((response) => response.effective).catch(() => undefined);\n const requestedTool = (explicitTool as RunnerToolSelection | undefined) ?? remotePreference?.tool ?? \"auto\";\n const model = explicitModel ?? remotePreference?.model;\n const source: RunnerPreferenceSource = explicitTool || explicitModel ? \"cli\" : remotePreference?.source ?? \"default\";\n\n return resolveRequestedTool({ capabilities, requestedTool, source, ...(model ? { model } : {}) });\n}\n\nfunction resolveRequestedTool({ capabilities, model, requestedTool, source }: { capabilities: RunnerToolCapability[]; model?: string; requestedTool: RunnerToolSelection; source: RunnerPreferenceSource }): RunnerToolConfig {\n if (requestedTool === \"auto\") {\n const candidate = capabilities.find((capability) => capability.available && (!model || capability.supportsModelSelection));\n if (!candidate) {\n return unavailableToolConfig({\n capabilities,\n source,\n status: model ? \"modelUnsupported\" : \"unavailable\",\n requestedTool,\n tool: \"auto\",\n ...(model ? { model } : {}),\n message: 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, effectiveTool: candidate.name, ...(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, tool: requestedTool, ...(model ? { model } : {}), message: `${requestedTool} is selected but is not available on this runner.` });\n }\n if (model && !capability.supportsModelSelection) {\n return unavailableToolConfig({ capabilities, source, status: \"modelUnsupported\", requestedTool, effectiveTool: requestedTool, 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, effectiveTool: requestedTool, ...(model ? { model } : {}) };\n}\n\nfunction unavailableToolConfig(input: { capabilities: RunnerToolCapability[]; source: RunnerPreferenceSource; status: RunnerPreferenceStatus; tool: string; message: string; requestedTool?: RunnerToolSelection; effectiveTool?: RunnerToolName | \"custom\"; 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.effectiveTool ? { effectiveTool: input.effectiveTool } : {}),\n ...(input.model ? { model: input.model } : {})\n };\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 }));\n}\n\nfunction buildBackgroundRunnerArgs(options: { apiUrl: string; runnerId: string; root: string; tool?: string; toolCommand?: string; model?: string; session: string; intervalSeconds: number; maxIterations?: number; stream: boolean }): 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.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 return args;\n}\n\nfunction runnerHeartbeatMetadata(toolConfig?: RunnerToolConfig, mode = currentRunnerMode()) {\n return {\n version: CLI_VERSION,\n mode,\n hostname: os.hostname(),\n ...(toolConfig?.capabilities ? { capabilities: toolConfig.capabilities } : {}),\n ...(toolConfig?.requestedTool ? { requestedTool: toolConfig.requestedTool } : {}),\n ...(toolConfig?.effectiveTool ? { effectiveTool: toolConfig.effectiveTool } : {}),\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\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 \"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\"]);\n\nexport const generatedDraftStatusSchema = z.enum([\"queued\", \"generating\", \"reviewing\", \"approved\", \"rejected\", \"changesRequested\", \"failed\"]);\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\", \"custom\", \"none\"]);\n\nexport const runnerToolModelPreferenceSchema = z.object({\n tool: runnerToolSelectionSchema.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});\n\nexport const repositoryLinkSourceSchema = z.enum([\"web\", \"cli\"]);\n\nexport const repositoryCloneStatusSchema = z.enum([\"notCloned\", \"cloned\", \"validated\", \"failed\"]);\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});\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 approvedBy: z.string().min(1).optional(),\n sourceWish: z.string().min(1).optional(),\n generatedDraftId: 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 claimedByRunnerId: z.string().optional(),\n leaseExpiresAt: isoDateTimeSchema.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\"]),\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 capabilities: z.array(runnerToolCapabilitySchema).optional(),\n requestedTool: runnerToolSelectionSchema.optional(),\n effectiveTool: z.union([runnerToolNameSchema, z.literal(\"custom\")]).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 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 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 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 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 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 RunnerToolModelPreference = z.infer<typeof runnerToolModelPreferenceSchema>;\nexport type RunnerToolCapability = z.infer<typeof runnerToolCapabilitySchema>;\nexport type RepositoryLinkSource = z.infer<typeof repositoryLinkSourceSchema>;\nexport type RepositoryCloneStatus = z.infer<typeof repositoryCloneStatusSchema>;\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 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}", "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))\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 \"architecture\",\n \"context\",\n \"decisions\",\n \"features\",\n \"memory\",\n \"plans\",\n path.join(\"prompts\", \"shared\"),\n \"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\\nRoot control-plane folders are the project brain. Keep architecture, context, decisions, features, memory, plans, prompts, and workflows in sync with product intent.\\n\"\n );\n await writeIfMissing(path.join(rootDir, \"context\", \"product.md\"), \"# Product Context\\n\\nDescribe the product direction here.\\n\");\n await writeIfMissing(path.join(rootDir, \"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, \"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 filePath = path.join(rootDir, \"context\", \"amistio-project.md\");\n if (!(await exists(filePath))) {\n return undefined;\n }\n\n const content = await readFile(filePath, \"utf8\");\n const frontmatter = parseFrontmatter(content);\n return repoLinkMetadataSchema.parse(frontmatter);\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 brainDocumentItemSchema,\n generatedDraftItemSchema,\n planReviewMessageItemSchema,\n repositoryLinkItemSchema,\n runnerPreferenceSourceSchema,\n runnerCommandItemSchema,\n runnerHeartbeatItemSchema,\n runnerSettingsItemSchema,\n runnerToolSelectionSchema,\n type BrainDocumentItem,\n type GeneratedBrainArtifact,\n type GeneratedDraftItem,\n type RepositoryLinkItem,\n type RunnerCommandItem,\n sessionDecisionSchema,\n sessionPolicySchema,\n sessionResumabilityScopeSchema,\n toolSessionItemSchema,\n toolSessionStatusSchema,\n workItemSchema,\n type ExecutionMode,\n type RunnerHeartbeatItem,\n type PlanReviewMessageItem,\n type RunnerPreferenceSource,\n type RunnerPreferenceStatus,\n type RunnerCommandStatus,\n type RunnerSettingsItem,\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 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 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 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}\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 capabilities?: RunnerToolCapability[];\n requestedTool?: RunnerToolSelection;\n effectiveTool?: RunnerToolName | \"custom\";\n effectiveModel?: string;\n preferenceSource?: RunnerPreferenceSource;\n preferenceStatus?: RunnerPreferenceStatus;\n preferenceMessage?: string;\n}\n\nexport interface RunnerPreferencesResponse {\n account?: RunnerSettingsItem;\n project?: RunnerSettingsItem;\n effective: RunnerToolModelPreference & { tool: RunnerToolSelection; 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 claimWork(projectId: string, runnerId: string, repositoryLinkId: string, leaseSeconds = 300): 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 })\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 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 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 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 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 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 \"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});\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 root 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 architecture, context, decisions, features, memory, plans, prompts, and workflows 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 \"- architecture/**/*.md for system shape and boundaries.\",\n \"- context/**/*.md for product, stack, and implementation context.\",\n \"- decisions/**/*.md for ADRs and durable choices.\",\n \"- features/**/*.md for behavior specs and acceptance criteria.\",\n \"- memory/**/*.md for lessons, patterns, and known pitfalls.\",\n \"- plans/**/*.md for near-term execution plans.\",\n \"- prompts/**/*.md for model-agnostic implementation prompts.\",\n \"- 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 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 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 }\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 ...(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 ...(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}\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)) : await selectRequestedAdapter(tool);\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 (adapter.runWithSdk && (await isSdkAvailable(adapter))) {\n return {\n toolName: adapter.name,\n kind: \"sdk\",\n displayCommand: adapter.sdkDisplayCommand ?? `${adapter.name} SDK`,\n adapter\n };\n }\n\n if (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 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.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): 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 (sdkAvailable || commandAvailable) {\n return adapter;\n }\n }\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): Promise<LocalToolAdapter> {\n const adapter = localToolAdapters.find((candidate) => candidate.name === tool);\n if (!adapter) {\n throw new Error(`Unsupported local tool: ${tool}.`);\n }\n if (await isSdkAvailable(adapter)) {\n return adapter;\n }\n if (adapter.executable && (await commandExists(adapter.executable))) {\n return adapter;\n }\n throw new Error(`The ${tool} SDK or executable was not found. Install it or pass --tool-command.`);\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 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.resumabilityScope === \"localMachine\" && session.runnerId && session.runnerId !== input.runnerId) {\n return \"session is scoped to another runner machine\";\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 sha256ContentHash,\n syncedDocumentFrontmatterSchema,\n type BrainDocumentItem,\n type RepoLinkMetadata,\n type SyncedDocumentFrontmatter\n} from \"@amistio/shared\";\nimport { parseFrontmatter } from \"./control-plane.js\";\n\nconst syncRoots = [\"architecture\", \"context\", \"decisions\", \"features\", \"memory\", \"plans\", \"prompts\", \"workflows\"];\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 webByDocumentId = new Map(webDocuments.map((document) => [document.documentId, document]));\n const pullableWebDocuments = webDocuments.filter((document) => 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 documents.push({\n fullPath,\n repoPath: toRepoPath(rootDir, fullPath),\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 document = brainDocumentItemSchema.parse(inputDocument);\n const fullPath = safeRepoPath(rootDir, document.repoPath);\n if (!isControlPlanePath(document.repoPath)) {\n result.conflicts.push(`${document.repoPath}: refusing to write outside root 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 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 { brainGenerationResultSchema, type BrainDocumentItem, type GeneratedBrainArtifact, type PlanReviewMessageItem, type WorkItem } from \"@amistio/shared\";\n\nconst generationResultStart = \"AMISTIO_BRAIN_GENERATION_RESULT_START\";\nconst generationResultEnd = \"AMISTIO_BRAIN_GENERATION_RESULT_END\";\n\ninterface PlanRevisionPromptContext {\n planDocument: BrainDocumentItem;\n messages: PlanReviewMessageItem[];\n}\n\nexport function createWorkExecutionPrompt(workItem: WorkItem, context?: { planRevision?: PlanRevisionPromptContext }): 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 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 \"\",\n \"## Rules\",\n \"\",\n \"- Read AGENTS.md first when it exists.\",\n \"- Read the relevant root control-plane files before implementation so the work stays aligned with existing direction.\",\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 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 plans/, and include the complete revised plan content.\",\n \"\",\n generationResultStart,\n '{\"artifacts\":[{\"documentType\":\"plan\",\"title\":\"Revised Plan\",\"repoPath\":\"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\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 architecture/, context/, decisions/, features/, memory/, plans/, prompts/, and 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 -> architecture/\",\n \"- context -> context/\",\n \"- decision -> decisions/\",\n \"- feature -> features/\",\n \"- memory -> memory/\",\n \"- plan -> plans/\",\n \"- prompt -> prompts/\",\n \"- workflow -> 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\":\"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 { 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"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["spawn", "createHash", "writeFile", "os", "path", "z", "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", "writeFile", "path", "record", "errorMessage", "spawn", "toolSession", "createHash", "capability", "os"]
|
|
7
|
+
}
|