@odla-ai/harness 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +178 -0
- package/dist/chunk-ATKV6VTU.js +168 -0
- package/dist/chunk-ATKV6VTU.js.map +1 -0
- package/dist/chunk-GE6CCN7W.js +93 -0
- package/dist/chunk-GE6CCN7W.js.map +1 -0
- package/dist/chunk-GMVZ4LZH.js +1769 -0
- package/dist/chunk-GMVZ4LZH.js.map +1 -0
- package/dist/chunk-PHXQH4YM.js +550 -0
- package/dist/chunk-PHXQH4YM.js.map +1 -0
- package/dist/chunk-PTXZVYD4.js +81 -0
- package/dist/chunk-PTXZVYD4.js.map +1 -0
- package/dist/chunk-QTUEF2HZ.js +9 -0
- package/dist/chunk-QTUEF2HZ.js.map +1 -0
- package/dist/cli.cjs +795 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.cts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +98 -0
- package/dist/cli.js.map +1 -0
- package/dist/code-runtime-cli.cjs +2341 -0
- package/dist/code-runtime-cli.cjs.map +1 -0
- package/dist/code-runtime-cli.d.cts +1 -0
- package/dist/code-runtime-cli.d.ts +1 -0
- package/dist/code-runtime-cli.js +133 -0
- package/dist/code-runtime-cli.js.map +1 -0
- package/dist/index.cjs +228 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +44 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/node.cjs +2580 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.d.cts +544 -0
- package/dist/node.d.ts +544 -0
- package/dist/node.js +71 -0
- package/dist/node.js.map +1 -0
- package/dist/testing.cjs +106 -0
- package/dist/testing.cjs.map +1 -0
- package/dist/testing.d.cts +25 -0
- package/dist/testing.d.ts +25 -0
- package/dist/testing.js +79 -0
- package/dist/testing.js.map +1 -0
- package/dist/types-D12vK3K9.d.cts +249 -0
- package/dist/types-D12vK3K9.d.ts +249 -0
- package/package.json +84 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/workspace-digest.ts","../src/code-runtime-client.ts","../src/code-runtime.ts","../src/code-checkpoint.ts","../src/code-patch.ts","../src/recipe-container.ts","../src/code-verifier.ts","../src/code-runtime-checkpoint.ts","../src/code-runtime-checkpoint-manager.ts","../src/code-runtime-source.ts","../src/code-tool-broker.ts","../src/code-tool-policy.ts","../src/code-runtime-task.ts","../src/code-runtime-local-source.ts","../src/code-runtime-broker.ts","../src/code-runtime-inference.ts","../src/code-runtime-events.ts","../src/code-runtime-engine.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { readFile, readdir } from \"node:fs/promises\";\nimport { relative, resolve } from \"node:path\";\n\n/** Digest every regular path and byte in a staged workspace under fixed bounds. */\nexport async function digestStagedWorkspace(\n root: string,\n limits: { maxFiles: number; maxBytes: number },\n): Promise<`sha256:${string}`> {\n const files: Array<{ path: string; target: string }> = [];\n const walk = async (directory: string): Promise<void> => {\n const entries = await readdir(directory, { withFileTypes: true });\n for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {\n if (entry.isSymbolicLink()) throw new TypeError(\"workspace digest refuses symbolic links\");\n const target = resolve(directory, entry.name);\n if (entry.isDirectory()) await walk(target);\n else if (entry.isFile()) {\n files.push({ path: relative(root, target).split(\"\\\\\").join(\"/\"), target });\n if (files.length > limits.maxFiles) throw new TypeError(\"workspace digest exceeds its file bound\");\n }\n }\n };\n await walk(resolve(root));\n const hash = createHash(\"sha256\");\n let bytes = 0;\n for (const file of files.sort((left, right) => left.path.localeCompare(right.path))) {\n const content = await readFile(file.target);\n bytes += Buffer.byteLength(file.path) + content.byteLength;\n if (bytes > limits.maxBytes) throw new TypeError(\"workspace digest exceeds its byte bound\");\n hash.update(`${Buffer.byteLength(file.path)}:${file.path}:${content.byteLength}:`);\n hash.update(content);\n }\n return `sha256:${hash.digest(\"hex\")}`;\n}\n","import { digestCodeRepositorySnapshot } from \"@odla-ai/camel/code\";\nimport {\n CODE_RUNTIME_PROTOCOL_VERSION, type CodeRuntimeAgentControlPlane, type CodeRuntimeBinding,\n type CodeRuntimeCandidateResponse, type CodeRuntimeCapabilities, type CodeRuntimeCommand, type CodeRuntimeSnapshot,\n type CodeRuntimeReviewResponse, type CodeRuntimeSourceSnapshot,\n} from \"./code-runtime\";\nimport type { HarnessInferenceResponse } from \"./types\";\n\n/** Stable HTTP and transport error returned by the remote Code control plane. */\nexport class CodeRuntimeControlError extends Error {\n override readonly name = \"CodeRuntimeControlError\";\n constructor(message: string, readonly status: number, readonly code = \"control_error\") { super(message); }\n}\n\n/** Endpoint, host credential, timeout, and cancellation settings for a Code runtime client. */\nexport interface CodeRuntimeClientOptions {\n endpoint: string; token: string; fetch?: typeof fetch;\n /** Timeout for short control-plane operations such as heartbeats and events. */\n requestTimeoutMs?: number;\n /** Timeout for provider-backed inference and review calls. */\n modelRequestTimeoutMs?: number;\n signal?: AbortSignal;\n}\n\n/** Create the credentialed, outbound-only Code host control client. */\nexport function createCodeRuntimeControlClient(options: CodeRuntimeClientOptions): CodeRuntimeAgentControlPlane {\n const endpoint = validatedEndpoint(options.endpoint);\n if (!/^odla_code_host_[0-9a-f]{64}$/.test(options.token)) throw new TypeError(\"invalid Code host credential\");\n const requestTimeoutMs = options.requestTimeoutMs ?? 30_000;\n if (!Number.isSafeInteger(requestTimeoutMs) || requestTimeoutMs < 1_000 || requestTimeoutMs > 120_000) {\n throw new TypeError(\"requestTimeoutMs must be an integer from 1000 to 120000\");\n }\n const modelRequestTimeoutMs = options.modelRequestTimeoutMs ?? 15 * 60_000;\n if (!Number.isSafeInteger(modelRequestTimeoutMs)\n || modelRequestTimeoutMs < 30_000 || modelRequestTimeoutMs > 30 * 60_000) {\n throw new TypeError(\"modelRequestTimeoutMs must be an integer from 30000 to 1800000\");\n }\n const request = options.fetch ?? fetch;\n const call = async (path: string, body: unknown, timeoutMs = requestTimeoutMs): Promise<unknown> => {\n const timeout = AbortSignal.timeout(timeoutMs);\n const signal = options.signal ? AbortSignal.any([options.signal, timeout]) : timeout;\n let response: Response;\n try {\n response = await request(`${endpoint}${path}`, {\n method: \"POST\", headers: { authorization: `Bearer ${options.token}`, \"content-type\": \"application/json\" },\n body: JSON.stringify(body), redirect: \"error\", signal,\n });\n } catch (cause) {\n if (options.signal?.aborted) throw cause;\n throw new CodeRuntimeControlError(\"Code runtime control plane is unavailable\", 503, \"transport_unavailable\");\n }\n const value = await response.json().catch(() => null);\n if (!response.ok) {\n const problem = record(record(value)?.error);\n throw new CodeRuntimeControlError(\n typeof problem?.message === \"string\" ? problem.message : `Code runtime request failed (${response.status})`,\n response.status, typeof problem?.code === \"string\" ? problem.code : undefined,\n );\n }\n return value;\n };\n return {\n heartbeat: async (version, capabilities) => {\n validateHeartbeat(version, capabilities);\n return parseSnapshot(await call(\"/registry/code/runtime/heartbeat\", { runtimeVersion: version, capabilities }));\n },\n acknowledge: async (commandId, result) => {\n if (!/^ccmd_[0-9a-f]{32}$/.test(commandId)) throw new TypeError(\"invalid Code runtime command id\");\n await call(`/registry/code/runtime/commands/${commandId}/ack`, result);\n },\n source: async (sessionId) => parseSource(\n await call(`/registry/code/runtime/sessions/${validSessionId(sessionId)}/source`, {}),\n ),\n infer: async (sessionId, inference) => {\n const value = record(await call(\n `/registry/code/runtime/sessions/${validSessionId(sessionId)}/inference`, inference, modelRequestTimeoutMs,\n ));\n if (!value || value.requestId !== inference.requestId || !record(value.response) || !record(value.receipt)) {\n throw new CodeRuntimeControlError(\"invalid Code inference response\", 502, \"invalid_response\");\n }\n return value as unknown as HarnessInferenceResponse;\n },\n review: async (sessionId, review) => parseReview(\n await call(`/registry/code/runtime/sessions/${validSessionId(sessionId)}/review`, review, modelRequestTimeoutMs),\n ),\n submitCandidate: async (sessionId, checkpointId, verification) => {\n if (!/^cpoint_[0-9a-f]{32}$/.test(checkpointId)) throw new TypeError(\"invalid Code checkpoint id\");\n return parseCandidate(await call(\n `/registry/code/runtime/sessions/${validSessionId(sessionId)}/candidates`,\n { checkpointId, verification },\n ));\n },\n appendSessionEvent: async (sessionId, eventId, event) => {\n const serialized = JSON.stringify(event);\n if (!/^[A-Za-z0-9._:-]{1,120}$/.test(eventId) || !event || typeof event !== \"object\"\n || new TextEncoder().encode(serialized).byteLength > 24_000) {\n throw new TypeError(\"invalid Code session event\");\n }\n await call(`/registry/code/runtime/sessions/${validSessionId(sessionId)}/chat/events`, { eventId, event });\n },\n reportSessionFailure: async (sessionId, message) => {\n if (!message.trim() || message.length > 2_000) throw new TypeError(\"invalid Code session failure\");\n await call(`/registry/code/runtime/sessions/${validSessionId(sessionId)}/failure`, { message });\n },\n };\n}\n\nfunction validatedEndpoint(value: string): string {\n const endpoint = value.replace(/\\/+$/, \"\");\n let url: URL;\n try { url = new URL(endpoint); } catch { throw new TypeError(\"endpoint must be an HTTPS URL\"); }\n const loopback = url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\" || url.hostname === \"[::1]\";\n if (url.username || url.password || (url.protocol !== \"https:\" && !(loopback && url.protocol === \"http:\"))) {\n throw new TypeError(\"endpoint must use HTTPS (HTTP is allowed only for loopback testing)\");\n }\n return endpoint;\n}\n\nfunction validSessionId(value: string): string {\n if (!/^csess_[0-9a-f]{32}$/.test(value)) throw new TypeError(\"invalid Code session id\");\n return value;\n}\n\nfunction validateHeartbeat(version: string, capabilities: CodeRuntimeCapabilities): void {\n if (!version.trim() || version.length > 80) throw new TypeError(\"runtimeVersion is required and at most 80 characters\");\n if (capabilities.protocolVersion !== CODE_RUNTIME_PROTOCOL_VERSION) throw new TypeError(\"unsupported Code runtime protocol version\");\n if (capabilities.platform !== \"macos\" && capabilities.platform !== \"linux\") throw new TypeError(\"invalid runtime platform\");\n if (!capabilities.arch || !capabilities.engines.length\n || !capabilities.engines.every((engine) => [\"container\", \"podman\", \"docker\"].includes(engine))) {\n throw new TypeError(\"runtime arch and supported engine are required\");\n }\n if (!Number.isSafeInteger(capabilities.cpuCount) || capabilities.cpuCount < 1\n || !Number.isSafeInteger(capabilities.memoryBytes) || capabilities.memoryBytes < 1) {\n throw new TypeError(\"runtime resources must be positive integers\");\n }\n}\n\nfunction parseSnapshot(value: unknown): CodeRuntimeSnapshot {\n const root = record(value);\n const host = record(root?.host);\n if (!host || typeof host.hostId !== \"string\" || typeof host.runtimeVersion !== \"string\"\n || !Number.isSafeInteger(host.lastSeenAt) || host.revokedAt !== null\n || !Array.isArray(root?.bindings) || root.bindings.length > 1_024\n || !Array.isArray(root?.commands) || root.commands.length > 64) throw invalid(\"heartbeat\");\n const bindingIds = new Set<string>();\n const bindings = root.bindings.map((item) => {\n const binding = record(item);\n if (!binding || typeof binding.bindingId !== \"string\" || typeof binding.appId !== \"string\"\n || (binding.env !== \"dev\" && binding.env !== \"prod\")\n || typeof binding.offerId !== \"string\" || binding.hostId !== host.hostId\n || !Number.isSafeInteger(binding.generation) || Number(binding.generation) < 1 || binding.revokedAt !== null\n || bindingIds.has(binding.bindingId)) {\n throw invalid(\"binding\");\n }\n bindingIds.add(binding.bindingId);\n return binding as unknown as CodeRuntimeBinding;\n });\n const commandIds = new Set<string>();\n const commandSequences = new Set<string>();\n const commands = root.commands.map((item) => {\n const command = record(item);\n const binding = bindings.find((candidate) => candidate.bindingId === command?.bindingId);\n const sequenceKey = `${String(command?.instanceId)}:${String(command?.sequence)}`;\n if (!command || typeof command.commandId !== \"string\" || !/^ccmd_[0-9a-f]{32}$/.test(command.commandId)\n || typeof command.instanceId !== \"string\" || typeof command.sessionId !== \"string\"\n || !/^csess_[0-9a-f]{32}$/.test(command.sessionId)\n || typeof command.appId !== \"string\" || (command.env !== \"dev\" && command.env !== \"prod\")\n || command.hostId !== host.hostId || !binding || binding.appId !== command.appId\n || binding.generation !== command.bindingGeneration || !Number.isSafeInteger(command.sequence)\n || Number(command.sequence) < 1 || commandIds.has(command.commandId) || commandSequences.has(sequenceKey)\n || ![\"start\", \"prompt\", \"checkpoint_stop\", \"resume\"].includes(String(command.kind))\n || !record(command.payload) || !Number.isSafeInteger(command.createdAt)) throw invalid(\"command\");\n commandIds.add(command.commandId);\n commandSequences.add(sequenceKey);\n return command as unknown as CodeRuntimeCommand;\n });\n return { host: host as unknown as CodeRuntimeSnapshot[\"host\"], bindings, commands };\n}\n\nasync function parseSource(value: unknown): Promise<CodeRuntimeSourceSnapshot> {\n const snapshot = record(record(value)?.snapshot);\n if (!snapshot || typeof snapshot.repository !== \"string\" || typeof snapshot.commitSha !== \"string\"\n || typeof snapshot.treeDigest !== \"string\" || !Array.isArray(snapshot.files)) throw invalid(\"source\");\n const files = snapshot.files.map((value) => {\n const file = record(value);\n if (!file || typeof file.path !== \"string\" || typeof file.content !== \"string\") throw invalid(\"source file\");\n return { path: file.path, content: file.content };\n });\n const referencesValue = snapshot.references === undefined ? [] : snapshot.references;\n if (!Array.isArray(referencesValue) || referencesValue.length > 5) throw invalid(\"reference sources\");\n const aliases = new Set<string>();\n const references = [];\n for (const item of referencesValue) {\n const reference = record(item);\n if (!reference || typeof reference.alias !== \"string\" || !/^[a-z][a-z0-9-]{0,39}$/.test(reference.alias)\n || aliases.has(reference.alias) || reference.alias === \"primary\"\n || typeof reference.repository !== \"string\" || typeof reference.commitSha !== \"string\"\n || typeof reference.treeDigest !== \"string\" || !Array.isArray(reference.files)) throw invalid(\"reference source\");\n aliases.add(reference.alias);\n const referenceFiles = reference.files.map((entry) => {\n const file = record(entry);\n if (!file || typeof file.path !== \"string\" || typeof file.content !== \"string\") throw invalid(\"reference source file\");\n return { path: file.path, content: file.content };\n });\n const source = { repository: reference.repository, commitSha: reference.commitSha, files: referenceFiles };\n const referenceDigest = await digestCodeRepositorySnapshot(source, { maximumFiles: 10_000, maximumBytes: 16 * 1024 * 1024 });\n if (referenceDigest !== reference.treeDigest) throw invalid(\"reference source digest\");\n references.push({ alias: reference.alias, ...source, treeDigest: referenceDigest });\n }\n const source = { repository: snapshot.repository, commitSha: snapshot.commitSha, files };\n const digest = await digestCodeRepositorySnapshot(source, { maximumFiles: 10_000, maximumBytes: 16 * 1024 * 1024 });\n if (digest !== snapshot.treeDigest) throw invalid(\"source digest\");\n return { ...source, treeDigest: digest, ...(references.length ? { references } : {}) };\n}\n\nfunction parseReview(value: unknown): CodeRuntimeReviewResponse {\n const review = record(record(value)?.review);\n if (!review || ![\"approved\", \"rejected\"].includes(String(review.verdict))\n || typeof review.reviewDigest !== \"string\" || !/^sha256:[0-9a-f]{64}$/.test(review.reviewDigest)\n || typeof review.provider !== \"string\" || !review.provider\n || typeof review.model !== \"string\" || !review.model\n || !Number.isSafeInteger(review.policyVersion) || Number(review.policyVersion) < 1) throw invalid(\"review\");\n return review as unknown as CodeRuntimeReviewResponse;\n}\n\nfunction parseCandidate(value: unknown): CodeRuntimeCandidateResponse {\n const candidate = record(record(value)?.candidate);\n if (!candidate || typeof candidate.candidateId !== \"string\" || !/^ccand_[0-9a-f]{32}$/.test(candidate.candidateId)\n || ![\"submitted\", \"approved\", \"published\", \"failed\"].includes(String(candidate.status))) {\n throw invalid(\"candidate\");\n }\n return { candidateId: candidate.candidateId, status: candidate.status as CodeRuntimeCandidateResponse[\"status\"] };\n}\n\nconst record = (value: unknown): Record<string, unknown> | null => value && typeof value === \"object\" && !Array.isArray(value)\n ? value as Record<string, unknown> : null;\nconst invalid = (part: string) => new CodeRuntimeControlError(`invalid Code runtime ${part} response`, 502, \"invalid_response\");\n","import type { CodePortableCheckpoint, CodeSourceFile, CodeVerificationReceipt } from \"@odla-ai/camel/code\";\nimport type { CodeSessionEventData, HarnessInferenceRequest, HarnessInferenceResponse } from \"./types\";\n\n/** Version of the outbound Code host heartbeat contract. */\nexport const CODE_RUNTIME_PROTOCOL_VERSION = 1 as const;\n\n/** Frozen, secret-filtered view of the checkout from which a terminal connected. */\nexport interface CodeLocalSourceDescriptor {\n kind: \"local_checkout\";\n repository: string;\n headCommitSha: string;\n trustedBaseDigest: `sha256:${string}`;\n developerPatchDigest: `sha256:${string}`;\n snapshotDigest: `sha256:${string}`;\n modified: boolean;\n fileCount: number;\n byteCount: number;\n capturedAt: number;\n}\n\n/** Host resources and supported isolation engines advertised on heartbeat. */\nexport interface CodeRuntimeCapabilities {\n protocolVersion: typeof CODE_RUNTIME_PROTOCOL_VERSION;\n platform: \"macos\" | \"linux\";\n arch: string;\n engines: Array<\"container\" | \"podman\" | \"docker\">;\n cpuCount: number;\n memoryBytes: number;\n source?: CodeLocalSourceDescriptor;\n images?: { ready: boolean; pi: string; recipes: Array<{ id: string; image: string }> };\n}\n\n/** A generation-fenced assignment of one app environment to one Code host. */\nexport interface CodeRuntimeBinding {\n bindingId: string;\n appId: string;\n env: \"dev\" | \"prod\";\n offerId: string;\n hostId: string;\n generation: number;\n revokedAt: number | null;\n}\n\n/** Authoritative heartbeat response for a live host and its pending work. */\nexport interface CodeRuntimeSnapshot {\n host: {\n hostId: string;\n runtimeVersion: string;\n lastSeenAt: number;\n revokedAt: null;\n };\n bindings: CodeRuntimeBinding[];\n commands: CodeRuntimeCommand[];\n}\n\n/** Commands accepted by the outbound Code runtime. */\nexport type CodeRuntimeCommandKind = \"start\" | \"prompt\" | \"checkpoint_stop\" | \"resume\";\n/** One sequenced command fenced to an exact host-binding generation. */\nexport interface CodeRuntimeCommand {\n commandId: string; instanceId: string; sessionId: string; appId: string; env: \"dev\" | \"prod\";\n bindingId: string; hostId: string; bindingGeneration: number; sequence: number;\n kind: CodeRuntimeCommandKind; payload: Record<string, unknown>; createdAt: number;\n}\n\n/** Terminal or continuing state acknowledged for a runtime command. */\nexport interface CodeRuntimeCommandResult {\n status: \"running\" | \"checkpointed\" | \"failed\";\n checkpoint?: CodePortableCheckpoint;\n message?: string;\n}\n\n/** Minimal control-plane operations used by an outbound Code host. */\nexport interface CodeRuntimeControlPlane {\n heartbeat(runtimeVersion: string, capabilities: CodeRuntimeCapabilities): Promise<CodeRuntimeSnapshot>;\n acknowledge(commandId: string, result: CodeRuntimeCommandResult): Promise<void>;\n}\n\n/** Credentialless agent operations brokered over the same outbound host identity. */\nexport interface CodeRuntimeAgentControlPlane extends CodeRuntimeControlPlane {\n source(sessionId: string): Promise<CodeRuntimeSourceSnapshot>;\n infer(sessionId: string, request: HarnessInferenceRequest): Promise<HarnessInferenceResponse>;\n review(sessionId: string, request: CodeRuntimeReviewRequest): Promise<CodeRuntimeReviewResponse>;\n submitCandidate(\n sessionId: string, checkpointId: string, verification: CodeVerificationReceipt,\n ): Promise<CodeRuntimeCandidateResponse>;\n appendSessionEvent(\n sessionId: string, eventId: string, event: CodeSessionEventData,\n ): Promise<void>;\n reportSessionFailure(sessionId: string, message: string): Promise<void>;\n}\n\n/** Untrusted candidate material available only to the independent review route. */\nexport interface CodeRuntimeReviewRequest {\n patch: string;\n verification: CodeVerificationReceipt;\n}\n\n/** Closed review result. Only an exact approved verdict can enter a reviewed checkpoint. */\nexport interface CodeRuntimeReviewResponse {\n verdict: \"approved\" | \"rejected\";\n reviewDigest: `sha256:${string}`;\n provider: string;\n model: string;\n policyVersion: number;\n}\n\n/** Owner-private candidate admitted after checkpoint, verifier, and review evidence agree. */\nexport interface CodeRuntimeCandidateResponse {\n candidateId: string;\n status: \"submitted\" | \"approved\" | \"published\" | \"failed\";\n}\n\n/** Exact, attestation-matched GitHub source returned to one assigned runtime. */\nexport interface CodeRuntimeSourceSnapshot {\n repository: string;\n commitSha: string;\n treeDigest: `sha256:${string}`;\n files: CodeSourceFile[];\n references?: Array<{\n alias: string; repository: string; commitSha: string;\n treeDigest: `sha256:${string}`; files: CodeSourceFile[];\n }>;\n}\n\nexport {\n CodeRuntimeControlError, createCodeRuntimeControlClient,\n type CodeRuntimeClientOptions,\n} from \"./code-runtime-client\";\n\n/** Presence-loop settings and an optional callback for each heartbeat snapshot. */\nexport interface CodeRuntimeLoopOptions {\n control: CodeRuntimeControlPlane;\n runtimeVersion: string;\n capabilities: CodeRuntimeCapabilities;\n heartbeatMs?: number;\n once?: boolean;\n signal?: AbortSignal;\n onSnapshot?(snapshot: CodeRuntimeSnapshot): Promise<void> | void;\n onRetry?(error: unknown, delayMs: number): Promise<void> | void;\n}\n\n/** Maintain presence without opening a listener or accepting inbound traffic. */\nexport async function runCodeRuntimeHeartbeatLoop(options: CodeRuntimeLoopOptions): Promise<void> {\n const heartbeatMs = options.heartbeatMs ?? 15_000;\n if (!Number.isSafeInteger(heartbeatMs) || heartbeatMs < 1_000 || heartbeatMs > 300_000) {\n throw new TypeError(\"heartbeatMs must be an integer from 1000 to 300000\");\n }\n let retryMs = 1_000;\n do {\n if (options.signal?.aborted) return;\n try {\n const snapshot = await options.control.heartbeat(options.runtimeVersion, options.capabilities);\n await options.onSnapshot?.(snapshot);\n retryMs = 1_000;\n if (options.once) return;\n await wait(heartbeatMs, options.signal);\n } catch (error) {\n if (options.signal?.aborted) return;\n if (options.once || !retryableControlFailure(error)) throw error;\n await options.onRetry?.(error, retryMs);\n await wait(retryMs, options.signal);\n retryMs = Math.min(retryMs * 2, 30_000);\n }\n } while (!options.signal?.aborted);\n}\n\n/** Executes one fenced runtime command and returns its acknowledgement payload. */\nexport interface CodeRuntimeCommandEngine {\n execute(command: CodeRuntimeCommand): Promise<CodeRuntimeCommandResult>;\n acknowledged?(command: CodeRuntimeCommand, result: CodeRuntimeCommandResult): Promise<void> | void;\n}\n\n/** Executes each command id at most once in-process and safely retries only its\n * acknowledgement after a transient control-plane failure. */\nexport class CodeRuntimeReconciler {\n private readonly results = new Map<string, { result: CodeRuntimeCommandResult; notified: boolean }>();\n constructor(private readonly control: CodeRuntimeControlPlane, private readonly engine: CodeRuntimeCommandEngine) {}\n\n async reconcile(snapshot: CodeRuntimeSnapshot): Promise<void> {\n for (const command of snapshot.commands) {\n let completed = this.results.get(command.commandId);\n if (!completed) {\n let result: CodeRuntimeCommandResult;\n try { result = await this.engine.execute(command); }\n catch (error) {\n result = { status: \"failed\", message: (error instanceof Error ? error.message : String(error)).slice(0, 2_000) };\n }\n completed = { result, notified: false };\n this.results.set(command.commandId, completed);\n if (this.results.size > 1_024) this.results.delete(this.results.keys().next().value!);\n }\n await this.control.acknowledge(command.commandId, completed.result);\n if (!completed.notified) {\n await this.engine.acknowledged?.(command, completed.result);\n completed.notified = true;\n }\n }\n }\n}\n\nfunction retryableControlFailure(value: unknown): boolean {\n if (!value || typeof value !== \"object\") return false;\n const failure = value as { status?: unknown; code?: unknown };\n if (failure.code === \"invalid_response\" || typeof failure.status !== \"number\") return false;\n return failure.status === 408 || failure.status === 425 || failure.status === 429 || failure.status >= 500;\n}\n\nfunction wait(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve) => {\n if (signal?.aborted) return resolve();\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\"abort\", () => { clearTimeout(timer); resolve(); }, { once: true });\n });\n}\n","import {\n createCodePortableCheckpoint,\n verifyCodePortableCheckpoint,\n type CodeCheckpointState,\n type CodePortableCheckpoint,\n} from \"@odla-ai/camel/code\";\nimport { applyCodePatch, validateCodePatch } from \"./code-patch\";\nimport { stageWorkspace, type StagedWorkspace, type StageWorkspaceOptions } from \"./workspace\";\n\n/** Inputs for capturing one running staged workspace as a portable checkpoint. */\nexport interface CreateCodeWorkspaceCheckpointInput {\n workspace: StagedWorkspace;\n baseCommitSha: string;\n state: CodeCheckpointState;\n maximumPatchBytes?: number;\n}\n\n/** Inputs for reconstructing a checkpoint on any compatible bound host. */\nexport interface RestoreCodeWorkspaceCheckpointInput {\n trustedBaseDir: string;\n trustedBaseCommitSha: string;\n checkpoint: unknown;\n stage?: StageWorkspaceOptions;\n}\n\n/** Fresh staged workspace plus its verified portable checkpoint state. */\nexport interface RestoredCodeWorkspaceCheckpoint {\n workspace: StagedWorkspace;\n checkpoint: CodePortableCheckpoint;\n}\n\n/** Capture a bounded, text-only candidate patch and closed resume state. */\nexport async function createCodeWorkspaceCheckpoint(\n input: CreateCodeWorkspaceCheckpointInput,\n): Promise<CodePortableCheckpoint> {\n const maximum = input.maximumPatchBytes ?? 256 * 1024;\n if (!Number.isSafeInteger(maximum) || maximum < 1 || maximum > 256 * 1024) {\n throw new TypeError(\"checkpoint patch bound must be from 1 to 262144 bytes\");\n }\n const patch = await input.workspace.patch(maximum);\n if (patch) validateCodePatch(patch, maximum);\n return createCodePortableCheckpoint({ baseCommitSha: input.baseCommitSha, patch, state: input.state });\n}\n\n/** Reconstruct a verified candidate from a fresh copy of its exact trusted base. */\nexport async function restoreCodeWorkspaceCheckpoint(\n input: RestoreCodeWorkspaceCheckpointInput,\n): Promise<RestoredCodeWorkspaceCheckpoint> {\n const checkpoint = await verifyCodePortableCheckpoint(input.checkpoint);\n if (checkpoint.baseCommitSha !== input.trustedBaseCommitSha) {\n throw new TypeError(\"checkpoint trusted base does not match the fetched commit\");\n }\n const workspace = await stageWorkspace(input.trustedBaseDir, input.stage);\n try {\n if (checkpoint.patch) {\n const paths = validateCodePatch(checkpoint.patch, 256 * 1024);\n await applyCodePatch(workspace.workspaceDir, checkpoint.patch, paths);\n }\n return { workspace, checkpoint };\n } catch (error) {\n await workspace.cleanup();\n throw error;\n }\n}\n\n/** Return whether the exact effect already completed; reject an ID rebound to another action. */\nexport function isCheckpointEffectCompleted(\n checkpoint: CodePortableCheckpoint,\n effectId: string,\n actionDigest: `sha256:${string}`,\n): boolean {\n const completed = checkpoint.state.completedEffects.find((effect) => effect.effectId === effectId);\n if (!completed) return false;\n if (completed.actionDigest !== actionDigest) throw new TypeError(\"completed checkpoint effect id has another action digest\");\n return true;\n}\n","import { spawn } from \"node:child_process\";\nimport { lstat } from \"node:fs/promises\";\nimport { resolve, sep } from \"node:path\";\n\nconst RESERVED = new Set([\".git\", \".odla\", \".wrangler\", \"node_modules\", \"dist\", \"coverage\"]);\nconst SECRET = /^(?:\\.env(?:\\..+)?|\\.dev\\.vars|credentials(?:\\..+)?\\.json|dev-token(?:\\..+)?\\.json)$/i;\nconst PATH = /^[A-Za-z0-9_@+.,-]+(?:\\/[A-Za-z0-9_@+.,-]+)*$/;\nconst FORBIDDEN = /^(?:GIT binary patch|Binary files |rename (?:from|to) |copy (?:from|to) |similarity index |old mode |new mode |deleted file mode 160000|new file mode 160000)/m;\n\n/** Validate a text-only, same-path unified patch and return every affected path. */\nexport function validateCodePatch(patch: string, maxBytes: number): string[] {\n if (!patch || Buffer.byteLength(patch) > maxBytes || patch.includes(\"\\0\") || patch.includes(\"\\r\")) {\n throw new TypeError(\"patch is empty, malformed, or exceeds its byte limit\");\n }\n if (FORBIDDEN.test(patch) || /(?:old|new)(?: file)? mode 120000/.test(patch)) {\n throw new TypeError(\"patch uses a forbidden binary, link, mode, rename, or copy operation\");\n }\n const paths: string[] = [];\n const lines = patch.split(\"\\n\");\n for (let index = 0; index < lines.length; index += 1) {\n const line = lines[index]!;\n if (!line.startsWith(\"diff --git \")) continue;\n const match = /^diff --git a\\/(\\S+) b\\/(\\S+)$/.exec(line);\n const path = match?.[1];\n if (!path || !match?.[2] || path !== match[2]) throw new TypeError(\"patch must use one unquoted relative path per diff\");\n validateRelativePath(path);\n const header = lines.slice(index + 1).findIndex((candidate) => candidate.startsWith(\"diff --git \"));\n const section = lines.slice(index + 1, header < 0 ? lines.length : index + 1 + header);\n const oldPath = section.find((candidate) => candidate.startsWith(\"--- \"))?.slice(4);\n const newPath = section.find((candidate) => candidate.startsWith(\"+++ \"))?.slice(4);\n if (!validHeaderPath(oldPath, path, \"a\") || !validHeaderPath(newPath, path, \"b\")) {\n throw new TypeError(\"patch file headers do not match the declared path\");\n }\n paths.push(path);\n }\n if (!paths.length || new Set(paths).size !== paths.length) throw new TypeError(\"patch has no diffs or repeats a path\");\n return paths;\n}\n\nfunction validHeaderPath(value: string | undefined, path: string, prefix: \"a\" | \"b\"): boolean {\n return value === \"/dev/null\" || value === `${prefix}/${path}`;\n}\n\n/** Restrict Code tool paths to ordinary files outside filtered/secret trees. */\nexport function validateRelativePath(path: string): void {\n const parts = path.split(\"/\");\n if (!PATH.test(path) || parts.some((part) => part === \".\" || part === \"..\" || RESERVED.has(part))\n || parts.some((part) => SECRET.test(part))) {\n throw new TypeError(\"path is outside the allowed staged source tree\");\n }\n}\n\n/** Resolve a validated relative path without permitting a root escape. */\nexport function resolveCodePath(workspaceDir: string, path: string): string {\n validateRelativePath(path);\n const root = resolve(workspaceDir);\n const target = resolve(root, path);\n if (target !== root && !target.startsWith(`${root}${sep}`)) throw new TypeError(\"path escapes the staged workspace\");\n return target;\n}\n\n/** Apply a previously validated patch without invoking a shell or repository hooks. */\nexport async function applyCodePatch(workspaceDir: string, patch: string, paths: readonly string[]): Promise<void> {\n await gitApply(workspaceDir, patch, true);\n await gitApply(workspaceDir, patch, false);\n for (const path of paths) {\n try {\n const info = await lstat(resolveCodePath(workspaceDir, path));\n if (info.isSymbolicLink() || (!info.isFile() && !info.isDirectory())) {\n throw new TypeError(\"patch created a non-regular workspace entry\");\n }\n } catch (reason) {\n if ((reason as NodeJS.ErrnoException).code !== \"ENOENT\") throw reason;\n }\n }\n}\n\nfunction gitApply(cwd: string, patch: string, check: boolean): Promise<void> {\n return new Promise((accept, reject) => {\n const args = [\"apply\", \"--recount\", \"--whitespace=nowarn\", ...(check ? [\"--check\"] : []), \"-\"];\n const child = spawn(\"git\", args, {\n cwd, shell: false, stdio: [\"pipe\", \"ignore\", \"pipe\"],\n env: { PATH: process.env.PATH ?? \"\", GIT_CONFIG_NOSYSTEM: \"1\", GIT_CONFIG_GLOBAL: \"/dev/null\" },\n });\n let stderr = \"\";\n child.stderr.setEncoding(\"utf8\");\n child.stderr.on(\"data\", (text: string) => { if (stderr.length < 4_000) stderr += text.slice(0, 4_000); });\n child.once(\"error\", reject);\n child.once(\"exit\", (code) => code === 0 ? accept() : reject(new TypeError(`patch did not apply: ${stderr.trim().slice(0, 500)}`)));\n child.stdin.end(patch);\n });\n}\n","import { spawn } from \"node:child_process\";\nimport { getgid, getuid } from \"node:process\";\nimport { randomUUID } from \"node:crypto\";\nimport { assertPinnedImage, verifyContainerEngineBoundary, type ContainerEngine } from \"./container\";\nimport type { CodeBuildRecipe, CodeRecipeExecutor, CodeRecipeResult } from \"./code-tool-types\";\n\nconst ARTIFACT_PATH = /^[A-Za-z0-9_@+.,-]+(?:\\/[A-Za-z0-9_@+.,-]+)*$/;\nconst PRIVATE_ARTIFACT_PART = /^(?:\\.git|\\.odla|\\.wrangler|\\.env(?:\\..+)?|\\.dev\\.vars|credentials(?:\\..+)?\\.json)$/i;\n\n/** Build a trusted, fixed command for an isolated and networkless recipe container. */\nexport function buildRecipeContainerArgs(\n engine: ContainerEngine,\n workspaceDir: string,\n recipe: CodeBuildRecipe,\n name = `odla-recipe-${randomUUID().slice(0, 12)}`,\n): string[] {\n assertCodeBuildRecipe(recipe);\n if (/[,\\r\\n]/.test(workspaceDir)) throw new TypeError(\"workspace path contains unsupported mount characters\");\n const uid = typeof getuid === \"function\" ? getuid() : 1000;\n const gid = typeof getgid === \"function\" ? getgid() : 1000;\n const limits = {\n cpus: recipe.cpus ?? 1,\n memory: recipe.memory ?? \"1g\",\n pids: recipe.pids ?? 256,\n tmpfs: recipe.tmpfsBytes ?? 64 * 1024 * 1024,\n };\n if (engine === \"container\") {\n return [\n \"run\", \"--rm\", `--name=${name}`, \"--network=none\", \"--read-only\", \"--cap-drop=ALL\",\n `--memory=${limits.memory}`, `--cpus=${limits.cpus}`, `--user=${uid}:${gid}`, \"--tmpfs=/tmp\",\n `--mount=type=bind,source=${workspaceDir},target=/workspace`, \"--workdir=/workspace\",\n \"--env=CI=1\", recipe.image, ...recipe.command,\n ];\n }\n return [\n \"run\", \"--rm\", `--name=${name}`, \"--pull=never\", \"--network=none\", \"--read-only\", \"--cap-drop=ALL\",\n \"--security-opt=no-new-privileges\", `--pids-limit=${limits.pids}`,\n `--memory=${limits.memory}`, `--cpus=${limits.cpus}`, `--user=${uid}:${gid}`,\n `--tmpfs=/tmp:rw,noexec,nosuid,nodev,size=${limits.tmpfs}`,\n `--mount=type=bind,src=${workspaceDir},dst=/workspace`, \"--workdir=/workspace\",\n \"--env=CI=1\", recipe.image, ...recipe.command,\n ];\n}\n\n/** Create a recipe executor that never invokes a shell and never mounts credentials. */\nexport function createContainerRecipeExecutor(engine: ContainerEngine): CodeRecipeExecutor {\n return {\n async run(input): Promise<CodeRecipeResult> {\n await verifyContainerEngineBoundary(engine);\n const name = `odla-recipe-${randomUUID().slice(0, 12)}`;\n const args = buildRecipeContainerArgs(engine, input.workspaceDir, input.recipe, name);\n return execute(engine, args, name, input.recipe, input.signal);\n },\n };\n}\n\n/** Validate immutable recipe identity, digest image, command, and resource bounds. */\nexport function assertCodeBuildRecipe(recipe: CodeBuildRecipe): void {\n const memoryBytes = parseMemory(recipe.memory ?? \"1g\");\n const tmpfsBytes = recipe.tmpfsBytes ?? 64 * 1024 * 1024;\n const artifacts = recipe.expectedArtifacts ?? [];\n assertPinnedImage(recipe.image);\n if (!/^[A-Za-z0-9._:-]{1,120}$/.test(recipe.id) || recipe.command.length < 1\n || recipe.command.length > 64 || recipe.command.some((part) => !part || part.length > 4_096 || /[\\0\\r\\n]/.test(part))\n || !Number.isSafeInteger(recipe.timeoutMs) || recipe.timeoutMs < 1 || recipe.timeoutMs > 30 * 60_000\n || !Number.isSafeInteger(recipe.maxOutputBytes) || recipe.maxOutputBytes < 1 || recipe.maxOutputBytes > 16 * 1024 * 1024\n || !Number.isFinite(recipe.cpus ?? 1) || (recipe.cpus ?? 1) < 0.1 || (recipe.cpus ?? 1) > 32\n || memoryBytes < 64 * 1024 * 1024 || memoryBytes > 32 * 1024 * 1024 * 1024\n || !Number.isSafeInteger(recipe.pids ?? 256) || (recipe.pids ?? 256) < 16 || (recipe.pids ?? 256) > 4_096\n || !Number.isSafeInteger(tmpfsBytes)\n || tmpfsBytes < 1024 * 1024 || tmpfsBytes > 1024 * 1024 * 1024\n || artifacts.length > 64 || new Set(artifacts.map((item) => item.id)).size !== artifacts.length\n || artifacts.some((item) => !/^[A-Za-z0-9._:-]{1,120}$/.test(item.id)\n || !ARTIFACT_PATH.test(item.path) || item.path.split(\"/\").some((part) => PRIVATE_ARTIFACT_PART.test(part))\n || !Number.isSafeInteger(item.maximumBytes) || item.maximumBytes < 1\n || item.maximumBytes > 512 * 1024 * 1024)) {\n throw new TypeError(\"build recipe is malformed or exceeds its control bounds\");\n }\n}\n\nfunction parseMemory(value: string): number {\n const match = /^([1-9][0-9]{0,4})([kmg])$/.exec(value.toLowerCase());\n if (!match?.[1] || !match[2]) return 0;\n const scale = match[2] === \"k\" ? 1024 : match[2] === \"m\" ? 1024 ** 2 : 1024 ** 3;\n return Number(match[1]) * scale;\n}\n\nfunction execute(\n engine: ContainerEngine,\n args: string[],\n name: string,\n recipe: CodeBuildRecipe,\n signal?: AbortSignal,\n): Promise<CodeRecipeResult> {\n return new Promise((accept, reject) => {\n const started = Date.now();\n const child = spawn(engine, args, { shell: false, stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n const stdout: Buffer[] = [];\n const stderr: Buffer[] = [];\n let bytes = 0;\n let outputLimitExceeded = false;\n let timedOut = false;\n let stopping = false;\n const stop = (reason: \"timeout\" | \"output\" | \"abort\") => {\n if (stopping) return;\n stopping = true;\n timedOut = reason === \"timeout\";\n outputLimitExceeded = reason === \"output\";\n const remove = engine === \"container\" ? [\"delete\", \"--force\", name] : [\"rm\", \"-f\", name];\n const killer = spawn(engine, remove, { shell: false, stdio: \"ignore\" });\n killer.unref();\n child.kill(\"SIGTERM\");\n };\n const collect = (target: Buffer[]) => (chunk: Buffer) => {\n bytes += chunk.byteLength;\n if (bytes > recipe.maxOutputBytes) stop(\"output\");\n else target.push(chunk);\n };\n child.stdout.on(\"data\", collect(stdout));\n child.stderr.on(\"data\", collect(stderr));\n const abort = () => stop(\"abort\");\n signal?.addEventListener(\"abort\", abort, { once: true });\n if (signal?.aborted) abort();\n const timer = setTimeout(() => stop(\"timeout\"), recipe.timeoutMs);\n child.once(\"error\", (error) => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", abort);\n reject(error);\n });\n child.once(\"exit\", (code) => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", abort);\n accept({\n exitCode: code ?? 1,\n stdout: Buffer.concat(stdout).toString(\"utf8\"), stderr: Buffer.concat(stderr).toString(\"utf8\"),\n durationMs: Date.now() - started, outputLimitExceeded, timedOut,\n });\n });\n });\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport { createReadStream } from \"node:fs\";\nimport { lstat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n digestCodeVerificationReceipt,\n type CodeVerificationArtifactReceipt,\n type CodeVerificationRecipeReceipt,\n} from \"@odla-ai/camel/code\";\nimport { applyCodePatch, validateCodePatch } from \"./code-patch\";\nimport { assertCodeBuildRecipe } from \"./recipe-container\";\nimport { stageWorkspace } from \"./workspace\";\nimport { digestStagedWorkspace } from \"./workspace-digest\";\nimport type { CodeBuildRecipe, CodeRecipeResult } from \"./code-tool-types\";\nimport type {\n CodeVerificationEvidence, CodeVerificationPolicy, VerifyCodeCandidateInput,\n} from \"./code-verifier-types\";\n\nexport type {\n CodeVerificationEvidence, CodeVerificationLog, CodeVerificationPolicy, VerifyCodeCandidateInput,\n} from \"./code-verifier-types\";\n\nconst SHA = /^[0-9a-f]{40}(?:[0-9a-f]{24})?$/;\nconst DIGEST = /^sha256:[0-9a-f]{64}$/;\nconst ID = /^[A-Za-z0-9._:-]{1,160}$/;\nconst RULE = /^[A-Za-z0-9_@+.,/-]{1,160}$/;\nconst DEFAULT_PREFIXES = [\"test/\", \"tests/\", \"__tests__/\"];\nconst DEFAULT_SUFFIXES = [\".test.js\", \".test.ts\", \".test.tsx\", \".spec.js\", \".spec.ts\", \".spec.tsx\"];\n\n/** Rebuild a candidate from an exact trusted base and emit a prose-free clean-verifier receipt. */\nexport async function verifyCodeCandidate(input: VerifyCodeCandidateInput): Promise<CodeVerificationEvidence> {\n const policy = validate(input);\n const limits = { maxFiles: policy.maximumFiles, maxBytes: policy.maximumBytes };\n const staged = await stageWorkspace(input.trustedBaseDir, limits);\n try {\n const baseDigest = await digestStagedWorkspace(staged.workspaceDir, limits);\n if (baseDigest !== input.trustedBaseDigest) throw new TypeError(\"trusted base does not match its registered digest\");\n const paths = validateCodePatch(input.candidatePatch, policy.maximumPatchBytes);\n await applyCodePatch(staged.workspaceDir, input.candidatePatch, paths);\n const sourceDigest = await digestStagedWorkspace(staged.workspaceDir, limits);\n const policyDigest = digestPolicy(policy);\n const patchDigest = digestBytes(input.candidatePatch);\n const candidateDigest = digestJson({\n trustedBaseCommitSha: input.trustedBaseCommitSha,\n trustedBaseDigest: input.trustedBaseDigest,\n patchDigest,\n });\n const changedTests = changedTestPaths(paths, policy);\n if (changedTests.length > policy.maximumChangedTests) throw new TypeError(\"candidate changes too many test files\");\n const recipes: CodeVerificationRecipeReceipt[] = [];\n const logs: CodeVerificationEvidence[\"logs\"][number][] = [];\n for (const recipe of policy.recipes) {\n const clean = await stageWorkspace(staged.workspaceDir, limits);\n try {\n if (await digestStagedWorkspace(clean.workspaceDir, limits) !== sourceDigest) {\n throw new TypeError(\"clean verifier source changed before execution\");\n }\n const result = checkedResult(await input.recipeExecutor.run({\n workspaceDir: clean.workspaceDir, recipe, signal: input.signal,\n }), recipe.maxOutputBytes);\n const artifacts = await inspectArtifacts(clean.workspaceDir, recipe);\n recipes.push(recipeReceipt(recipe, result, artifacts));\n logs.push({ recipeId: recipe.id, ...boundedLogs(result, recipe.maxOutputBytes) });\n } finally {\n await clean.cleanup();\n }\n }\n const fields = {\n schemaVersion: 1 as const,\n verificationId: input.verificationId ?? `verify-${randomUUID()}`,\n trustedBaseCommitSha: input.trustedBaseCommitSha,\n trustedBaseDigest: input.trustedBaseDigest,\n patchDigest,\n candidateDigest,\n sourceDigest,\n policyDigest,\n recipes,\n changedTestCount: changedTests.length,\n changedTestSetDigest: digestJson(changedTests),\n changedTestsRequireReview: changedTests.length > 0,\n outcome: recipes.every((recipe) => recipe.status === \"passed\") ? \"passed\" as const : \"failed\" as const,\n };\n return {\n receipt: { ...fields, receiptDigest: await digestCodeVerificationReceipt(fields) },\n changedTests: Object.freeze(changedTests),\n logs: Object.freeze(logs),\n };\n } finally {\n await staged.cleanup();\n }\n}\n\nfunction validate(input: VerifyCodeCandidateInput): Required<CodeVerificationPolicy> {\n const policy = input.policy;\n if (!SHA.test(input.trustedBaseCommitSha) || !DIGEST.test(input.trustedBaseDigest)\n || !ID.test(input.verificationId ?? \"verify-generated\") || !ID.test(policy.policyId)\n || policy.recipes.length < 1 || policy.recipes.length > 64\n || new Set(policy.recipes.map((recipe) => recipe.id)).size !== policy.recipes.length) {\n throw new TypeError(\"clean verification input is malformed\");\n }\n for (const recipe of policy.recipes) assertCodeBuildRecipe(recipe);\n const result: Required<CodeVerificationPolicy> = {\n policyId: policy.policyId,\n recipes: policy.recipes,\n testPathPrefixes: policy.testPathPrefixes ?? DEFAULT_PREFIXES,\n testPathSuffixes: policy.testPathSuffixes ?? DEFAULT_SUFFIXES,\n maximumChangedTests: policy.maximumChangedTests ?? 1_000,\n maximumPatchBytes: policy.maximumPatchBytes ?? 256 * 1024,\n maximumFiles: policy.maximumFiles ?? 20_000,\n maximumBytes: policy.maximumBytes ?? 512 * 1024 * 1024,\n };\n if ([...result.testPathPrefixes, ...result.testPathSuffixes].some((rule) => !RULE.test(rule))\n || !integer(result.maximumChangedTests, 0, 10_000)\n || !integer(result.maximumPatchBytes, 1, 4 * 1024 * 1024)\n || !integer(result.maximumFiles, 1, 100_000)\n || !integer(result.maximumBytes, 1, 2 * 1024 * 1024 * 1024)) {\n throw new TypeError(\"clean verification policy exceeds its bounds\");\n }\n return result;\n}\n\nfunction changedTestPaths(paths: readonly string[], policy: Required<CodeVerificationPolicy>): string[] {\n return paths.filter((path) => policy.testPathSuffixes.some((suffix) => path.endsWith(suffix))\n || policy.testPathPrefixes.some((prefix) => path.startsWith(prefix) || path.includes(`/${prefix}`))).sort();\n}\n\nfunction recipeReceipt(\n recipe: CodeBuildRecipe,\n result: CodeRecipeResult,\n artifacts: readonly CodeVerificationArtifactReceipt[],\n): CodeVerificationRecipeReceipt {\n const status = result.timedOut ? \"timed_out\" : result.outputLimitExceeded ? \"output_limited\"\n : result.exitCode === 0 && artifacts.every((item) => item.status === \"verified\") ? \"passed\" : \"failed\";\n return {\n recipeId: recipe.id,\n recipeDigest: digestRecipe(recipe),\n status,\n exitCode: result.exitCode,\n durationMs: result.durationMs,\n artifacts,\n };\n}\n\nasync function inspectArtifacts(\n workspaceDir: string,\n recipe: CodeBuildRecipe,\n): Promise<CodeVerificationArtifactReceipt[]> {\n const receipts: CodeVerificationArtifactReceipt[] = [];\n for (const artifact of recipe.expectedArtifacts ?? []) {\n try {\n const path = join(workspaceDir, artifact.path);\n const info = await lstat(path);\n if (!info.isFile() || info.isSymbolicLink()) {\n receipts.push({ artifactId: artifact.id, status: \"invalid\", bytes: null, digest: null });\n } else if (info.size > artifact.maximumBytes) {\n receipts.push({ artifactId: artifact.id, status: \"too_large\", bytes: info.size, digest: null });\n } else {\n receipts.push({ artifactId: artifact.id, status: \"verified\", bytes: info.size, digest: await hashFile(path) });\n }\n } catch (reason) {\n if ((reason as NodeJS.ErrnoException).code !== \"ENOENT\") throw reason;\n receipts.push({ artifactId: artifact.id, status: \"missing\", bytes: null, digest: null });\n }\n }\n return receipts;\n}\n\nfunction hashFile(path: string): Promise<`sha256:${string}`> {\n return new Promise((accept, reject) => {\n const hash = createHash(\"sha256\");\n const stream = createReadStream(path);\n stream.on(\"data\", (chunk) => { hash.update(chunk); });\n stream.once(\"error\", reject);\n stream.once(\"end\", () => accept(`sha256:${hash.digest(\"hex\")}`));\n });\n}\n\nfunction checkedResult(result: CodeRecipeResult, maximumOutputBytes: number): CodeRecipeResult {\n if (!integer(result.exitCode, 0, 255) || !integer(result.durationMs, 0, 30 * 60_000)\n || typeof result.stdout !== \"string\" || typeof result.stderr !== \"string\"\n || typeof result.outputLimitExceeded !== \"boolean\" || typeof result.timedOut !== \"boolean\") {\n throw new TypeError(\"recipe executor returned an invalid result\");\n }\n const bytes = Buffer.byteLength(result.stdout) + Buffer.byteLength(result.stderr);\n return bytes > maximumOutputBytes ? { ...result, outputLimitExceeded: true } : result;\n}\n\nfunction boundedLogs(result: CodeRecipeResult, maximum: number): { stdout: string; stderr: string } {\n const stdout = Buffer.from(result.stdout);\n const stderr = Buffer.from(result.stderr);\n const first = stdout.subarray(0, maximum);\n return {\n stdout: first.toString(\"utf8\"),\n stderr: stderr.subarray(0, Math.max(0, maximum - first.byteLength)).toString(\"utf8\"),\n };\n}\n\nfunction digestPolicy(policy: Required<CodeVerificationPolicy>): `sha256:${string}` {\n return digestJson({\n policyId: policy.policyId,\n recipes: policy.recipes.map((recipe) => normalizedRecipe(recipe)),\n testPathPrefixes: [...policy.testPathPrefixes].sort(),\n testPathSuffixes: [...policy.testPathSuffixes].sort(),\n maximumChangedTests: policy.maximumChangedTests,\n maximumPatchBytes: policy.maximumPatchBytes,\n maximumFiles: policy.maximumFiles,\n maximumBytes: policy.maximumBytes,\n });\n}\n\nfunction digestRecipe(recipe: CodeBuildRecipe): `sha256:${string}` {\n return digestJson(normalizedRecipe(recipe));\n}\n\nfunction normalizedRecipe(recipe: CodeBuildRecipe) {\n return {\n id: recipe.id, image: recipe.image, command: [...recipe.command], timeoutMs: recipe.timeoutMs,\n maxOutputBytes: recipe.maxOutputBytes, cpus: recipe.cpus ?? 1, memory: recipe.memory ?? \"1g\",\n pids: recipe.pids ?? 256, tmpfsBytes: recipe.tmpfsBytes ?? 64 * 1024 * 1024,\n expectedArtifacts: [...(recipe.expectedArtifacts ?? [])]\n .sort((left, right) => left.id.localeCompare(right.id))\n .map((artifact) => ({ id: artifact.id, path: artifact.path, maximumBytes: artifact.maximumBytes })),\n };\n}\n\nfunction digestJson(value: unknown): `sha256:${string}` {\n return digestBytes(JSON.stringify(value));\n}\n\nfunction digestBytes(value: string): `sha256:${string}` {\n return `sha256:${createHash(\"sha256\").update(value).digest(\"hex\")}`;\n}\n\nfunction integer(value: number, minimum: number, maximum: number): boolean {\n return Number.isSafeInteger(value) && value >= minimum && value <= maximum;\n}\n","import type { CodeVerificationReceipt } from \"@odla-ai/camel/code\";\nimport { createCodeWorkspaceCheckpoint } from \"./code-checkpoint\";\nimport type { CodeRuntimeReviewResponse } from \"./code-runtime\";\nimport type { CodeBuildRecipe, CodeRecipeExecutor } from \"./code-tool-types\";\nimport { verifyCodeCandidate } from \"./code-verifier\";\nimport type { StagedWorkspace } from \"./workspace\";\n\n/** Trusted session state, verification policy, and review callback used to stop at a portable checkpoint. */\nexport interface PrepareRuntimeCheckpointInput {\n sessionId: string; role: \"coding\" | \"review\"; workspace: StagedWorkspace;\n baseCommitSha: string; trustedBaseDigest: `sha256:${string}`;\n planningInputDigest: `sha256:${string}`; conversationRefs: readonly string[];\n fallbackPolicyDigest: `sha256:${string}`; recipes: readonly CodeBuildRecipe[];\n recipeExecutor: CodeRecipeExecutor;\n review(patch: string, verification: CodeVerificationReceipt): Promise<CodeRuntimeReviewResponse>;\n}\n\n/** Portable checkpoint plus the optional clean-build and independent-review evidence that produced it. */\nexport interface PreparedRuntimeCheckpoint {\n checkpoint: Awaited<ReturnType<typeof createCodeWorkspaceCheckpoint>>;\n verification: CodeVerificationReceipt | null;\n review: CodeRuntimeReviewResponse | null;\n note: string;\n}\n\n/** Verify and independently review a stopped workspace without exposing raw build output to planning. */\nexport async function prepareRuntimeCheckpoint(\n input: PrepareRuntimeCheckpointInput,\n): Promise<PreparedRuntimeCheckpoint> {\n const patch = await input.workspace.patch(256 * 1024);\n let verification: CodeVerificationReceipt | null = null;\n let review: CodeRuntimeReviewResponse | null = null;\n let note = patch ? \"Candidate remains untrusted\" : \"Checkpoint has no source changes\";\n if (patch && input.role === \"coding\") {\n try {\n const evidence = await verifyCodeCandidate({\n verificationId: `verify-${input.sessionId.slice(\"csess_\".length)}`,\n trustedBaseDir: input.workspace.baselineDir, trustedBaseCommitSha: input.baseCommitSha,\n trustedBaseDigest: input.trustedBaseDigest, candidatePatch: patch,\n policy: { policyId: \"code.runtime\", recipes: input.recipes,\n maximumFiles: 20_000, maximumBytes: 512 * 1024 * 1024 },\n recipeExecutor: input.recipeExecutor,\n });\n if (evidence.receipt.outcome === \"passed\") {\n verification = evidence.receipt;\n review = await input.review(patch, verification);\n note = review.verdict === \"approved\" ? \"Clean verification and independent review passed\"\n : \"Clean verification passed; independent review rejected the candidate\";\n } else {\n note = `Clean verification failed: ${evidence.receipt.recipes\n .filter((recipe) => recipe.status !== \"passed\").map((recipe) => `${recipe.recipeId}=${recipe.status}`).join(\", \")}`;\n }\n } catch (cause) {\n note = `Candidate verification or review failed closed: ${message(cause)}`;\n }\n }\n const reviewed = verification && review?.verdict === \"approved\";\n const checkpoint = await createCodeWorkspaceCheckpoint({\n workspace: input.workspace, baseCommitSha: input.baseCommitSha,\n state: { planCursor: null, conversationRefs: input.conversationRefs,\n planningInputDigest: input.planningInputDigest,\n buildPolicyDigest: verification?.policyDigest ?? input.fallbackPolicyDigest,\n dependencyLayerDigest: null, verificationDigest: verification?.receiptDigest ?? null,\n reviewDigest: reviewed && review ? review.reviewDigest : null,\n completedEffects: [], unresolvedApprovals: [],\n trustStatus: reviewed ? \"reviewed\" : verification ? \"verified\" : \"candidate_untrusted\" },\n });\n return { checkpoint, verification, review, note };\n}\n\nconst message = (value: unknown): string => (value instanceof Error ? value.message : String(value)).slice(0, 500);\n","import type { CodeVerificationReceipt } from \"@odla-ai/camel/code\";\nimport { prepareRuntimeCheckpoint } from \"./code-runtime-checkpoint\";\nimport type {\n CodeRuntimeAgentControlPlane, CodeRuntimeCommand, CodeRuntimeCommandResult,\n} from \"./code-runtime\";\nimport type { CodeBuildRecipe, CodeRecipeExecutor } from \"./code-tool-types\";\nimport type { ContainerRunResult } from \"./container\";\nimport type { CodeSessionEventData } from \"./types\";\nimport type { StagedWorkspace } from \"./workspace\";\n\n/** Active isolated workspace state required to prepare and publish a Code checkpoint candidate. */\nexport interface RuntimeCheckpointSession {\n workspace: StagedWorkspace; done: Promise<ContainerRunResult | null>; abort: AbortController;\n baseCommitSha: string; trustedBaseDigest: `sha256:${string}`; planningInputDigest: `sha256:${string}`;\n conversationRefs: string[]; role: \"coding\" | \"review\";\n}\n\ninterface Options {\n control: CodeRuntimeAgentControlPlane; recipes: readonly CodeBuildRecipe[];\n recipeExecutor: CodeRecipeExecutor; fallbackPolicyDigest: `sha256:${string}`;\n event(command: CodeRuntimeCommand, event: CodeSessionEventData, refs: string[]): Promise<void>;\n}\n\n/** Own checkpoint evidence and candidate admission retries outside the Pi process lifecycle. */\nexport class CodeRuntimeCheckpointManager {\n readonly #pending = new Map<string, { verification: CodeVerificationReceipt; refs: string[] }>();\n constructor(private readonly options: Options) {}\n\n async prepare(command: CodeRuntimeCommand, active: RuntimeCheckpointSession): Promise<CodeRuntimeCommandResult> {\n active.abort.abort(\"checkpoint_stop\");\n await active.done;\n const prepared = await prepareRuntimeCheckpoint({\n sessionId: command.sessionId, role: active.role, workspace: active.workspace,\n baseCommitSha: active.baseCommitSha, trustedBaseDigest: active.trustedBaseDigest,\n planningInputDigest: active.planningInputDigest, conversationRefs: active.conversationRefs,\n fallbackPolicyDigest: this.options.fallbackPolicyDigest, recipes: this.options.recipes,\n recipeExecutor: this.options.recipeExecutor,\n review: (patch, verification) => this.options.control.review(command.sessionId, { patch, verification }),\n });\n if (prepared.review?.verdict === \"approved\" && prepared.verification) {\n this.#pending.set(command.commandId, { verification: prepared.verification, refs: active.conversationRefs });\n }\n await this.options.event(command, { type: \"message\", actor: \"system\", body: prepared.note }, active.conversationRefs)\n .catch(() => undefined);\n await active.workspace.cleanup();\n await this.options.event(command, { type: \"status\", status: \"checkpointed\" }, active.conversationRefs)\n .catch(() => undefined);\n return { status: \"checkpointed\", checkpoint: prepared.checkpoint, message: \"Pi stopped at a portable checkpoint\" };\n }\n\n async acknowledged(command: CodeRuntimeCommand, result: CodeRuntimeCommandResult): Promise<boolean> {\n if (command.kind !== \"checkpoint_stop\" || result.status !== \"checkpointed\") return false;\n const pending = this.#pending.get(command.commandId);\n if (!pending) return true;\n const checkpointId = `cpoint_${command.commandId.slice(\"ccmd_\".length)}`;\n const candidate = await this.options.control.submitCandidate(command.sessionId, checkpointId, pending.verification);\n await this.options.event(command, { type: \"message\", actor: \"system\",\n body: command.payload.sourceSet\n ? `Candidate ${candidate.candidateId} was verified and delivered to the session PR branch`\n : `Candidate ${candidate.candidateId} is ready for legacy owner publication approval` }, pending.refs);\n this.#pending.delete(command.commandId);\n return true;\n }\n}\n","import type { CodeRuntimeSourceSnapshot } from \"./code-runtime\";\nimport type { StagedWorkspace } from \"./workspace\";\nimport { mkdir, mkdtemp, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join, resolve, sep } from \"node:path\";\n\nconst RESERVED = new Set([\".git\", \".odla\", \".wrangler\", \"node_modules\", \"dist\", \"coverage\"]);\nconst SECRET = /^(?:\\.env(?:\\..+)?|\\.dev\\.vars|credentials(?:\\..+)?\\.json|dev-token(?:\\..+)?\\.json)$/i;\n\n/** Disposable local source tree materialized from an exact, validated Code snapshot. */\nexport interface MaterializedCodeSource {\n sourceDir: string;\n cleanup(): Promise<void>;\n}\n\n/** Materialize only ordinary, relative snapshot files into a disposable source tree. */\nexport async function materializeCodeRuntimeSource(\n snapshot: CodeRuntimeSourceSnapshot, tempRoot = tmpdir(),\n): Promise<MaterializedCodeSource> {\n if (!snapshot.files.length || snapshot.files.length > 10_000) throw new TypeError(\"Code source file count is invalid\");\n const root = await mkdtemp(join(tempRoot, \"odla-code-source-\"));\n const sourceDir = join(root, \"source\");\n await mkdir(sourceDir);\n const seen = new Set<string>();\n let bytes = 0;\n try {\n for (const file of snapshot.files) {\n validatePath(file.path);\n if (seen.has(file.path)) throw new TypeError(\"Code source repeats a path\");\n seen.add(file.path);\n bytes += Buffer.byteLength(file.path) + Buffer.byteLength(file.content);\n if (bytes > 16 * 1024 * 1024) throw new TypeError(\"Code source exceeds its byte bound\");\n const target = resolve(sourceDir, file.path);\n if (!target.startsWith(`${resolve(sourceDir)}${sep}`)) throw new TypeError(\"Code source path escapes its root\");\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, file.content, { flag: \"wx\", mode: 0o644 });\n }\n for (const reference of snapshot.references ?? []) {\n validateAlias(reference.alias);\n if (!reference.files.length || reference.files.length > 10_000) throw new TypeError(\"Code reference file count is invalid\");\n for (const file of reference.files) {\n validatePath(file.path);\n const path = `.odla-references/${reference.alias}/${file.path}`;\n if (seen.has(path)) throw new TypeError(\"Code reference repeats a path\");\n seen.add(path);\n bytes += Buffer.byteLength(path) + Buffer.byteLength(file.content);\n if (bytes > 80 * 1024 * 1024) throw new TypeError(\"Code source set exceeds its byte bound\");\n const target = resolve(sourceDir, path);\n if (!target.startsWith(`${resolve(sourceDir)}${sep}`)) throw new TypeError(\"Code reference path escapes its root\");\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, file.content, { flag: \"wx\", mode: 0o444 });\n }\n }\n return { sourceDir, cleanup: () => rm(root, { recursive: true, force: true }) };\n } catch (cause) {\n await rm(root, { recursive: true, force: true });\n throw cause;\n }\n}\n\nfunction validateAlias(alias: string): void {\n if (!/^[a-z][a-z0-9-]{0,39}$/.test(alias) || alias === \"primary\") {\n throw new TypeError(\"Code reference alias is invalid\");\n }\n}\n\n/** Add server-resolved reference trees to both sides of a staged local\n * checkout. They remain outside the candidate diff and the tool broker denies\n * every write beneath the reference root. */\nexport async function attachCodeRuntimeReferences(\n workspace: StagedWorkspace, references: NonNullable<CodeRuntimeSourceSnapshot[\"references\"]>,\n): Promise<void> {\n let bytes = 0;\n for (const reference of references) {\n validateAlias(reference.alias);\n for (const file of reference.files) {\n validatePath(file.path);\n const path = `.odla-references/${reference.alias}/${file.path}`;\n bytes += Buffer.byteLength(path) + Buffer.byteLength(file.content);\n if (bytes > 64 * 1024 * 1024) throw new TypeError(\"Code reference set exceeds its byte bound\");\n for (const root of [workspace.baselineDir, workspace.workspaceDir]) {\n const target = resolve(root, path);\n if (!target.startsWith(`${resolve(root)}${sep}`)) throw new TypeError(\"Code reference path escapes its root\");\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, file.content, { flag: \"wx\", mode: 0o444 });\n }\n }\n }\n}\n\nfunction validatePath(path: string): void {\n const parts = path.split(\"/\");\n if (!path || path.startsWith(\"/\") || path.includes(\"\\\\\") || path.includes(\"\\0\")\n || parts.some((part) => !part || part === \".\" || part === \"..\" || RESERVED.has(part) || SECRET.test(part))) {\n throw new TypeError(\"Code source contains an unsafe path\");\n }\n}\n","import { readFile, readdir, stat } from \"node:fs/promises\";\nimport { relative, resolve } from \"node:path\";\nimport { createCodePolicyGate } from \"./code-tool-policy\";\nimport { applyCodePatch, resolveCodePath, validateCodePatch, validateRelativePath } from \"./code-patch\";\nimport { stageWorkspace } from \"./workspace\";\nimport { assertCodeBuildRecipe } from \"./recipe-container\";\nimport { digestStagedWorkspace } from \"./workspace-digest\";\nimport type { HarnessToolBroker, HarnessToolRequest, HarnessToolResponse } from \"./types\";\nimport type { CodeBuildRecipe, CodeToolBrokerOptions } from \"./code-tool-types\";\n\nexport type {\n CodeBuildRecipe,\n CodeRecipeExecutor,\n CodeRecipeResult,\n CodeToolBrokerOptions,\n CodeToolDecision,\n} from \"./code-tool-types\";\n\n/** Create the trusted CaMeL boundary for all Pi filesystem and build effects. */\nexport function createCodeToolBroker(options: CodeToolBrokerOptions): HarnessToolBroker {\n validateOptions(options);\n const recipes = new Map(options.recipes.map((recipe) => [recipe.id, recipe]));\n const policy = createCodePolicyGate(options);\n let tail = Promise.resolve();\n return {\n execute(context, request) {\n const result = tail.then(() => route(context, request, options, recipes, policy));\n tail = result.then(() => undefined, () => undefined);\n return result;\n },\n };\n}\n\nasync function route(\n context: Parameters<HarnessToolBroker[\"execute\"]>[0],\n request: HarnessToolRequest,\n options: CodeToolBrokerOptions,\n recipes: ReadonlyMap<string, CodeBuildRecipe>,\n policy: ReturnType<typeof createCodePolicyGate>,\n): Promise<HarnessToolResponse> {\n try {\n if (context.signal?.aborted) throw new TypeError(\"tool request was cancelled\");\n if (request.tool === \"sandbox.read\") return await read(context, request, options, policy);\n if (request.tool === \"sandbox.apply_patch\") return await patch(context, request, options, policy);\n return await recipe(context, request, options, recipes, policy);\n } catch (reason) {\n return response(request, false, reason instanceof TypeError ? reason.message : \"tool failed closed\");\n }\n}\n\nasync function read(\n context: Parameters<HarnessToolBroker[\"execute\"]>[0],\n request: HarnessToolRequest,\n options: CodeToolBrokerOptions,\n policy: ReturnType<typeof createCodePolicyGate>,\n): Promise<HarnessToolResponse> {\n exactKeys(request.input, [\"path\", \"startLine\", \"endLine\"]);\n const path = stringField(request.input, \"path\");\n const startLine = optionalInteger(request.input.startLine) ?? 1;\n const endLine = optionalInteger(request.input.endLine) ?? startLine + (options.maxReadLines ?? 2_000) - 1;\n if (endLine < startLine || endLine - startLine + 1 > (options.maxReadLines ?? 2_000)) {\n throw new TypeError(\"requested line range exceeds its bound\");\n }\n const paths = await registeredFiles(context.workspaceDir, 20_000);\n const allowed = await policy.read(policyContext(context, request, options, { paths, path, startLine, endLine }));\n if (!allowed) return response(request, false, \"tool denied by CaMeL policy\");\n const target = resolveCodePath(context.workspaceDir, path);\n const info = await stat(target);\n if (!info.isFile() || info.size > Math.max(options.maxReadBytes ?? 128 * 1024, 2 * 1024 * 1024)) {\n throw new TypeError(\"file is not a bounded regular source file\");\n }\n const source = await readFile(target);\n if (source.includes(0)) throw new TypeError(\"binary files are not readable through this tool\");\n const lines = source.toString(\"utf8\").split(\"\\n\");\n const content = lines.slice(startLine - 1, endLine).join(\"\\n\");\n if (Buffer.byteLength(content) > (options.maxReadBytes ?? 128 * 1024)) {\n throw new TypeError(\"read result exceeds its byte bound\");\n }\n return response(request, true, content, { path, startLine, endLine: Math.min(endLine, lines.length) });\n}\n\nasync function patch(\n context: Parameters<HarnessToolBroker[\"execute\"]>[0],\n request: HarnessToolRequest,\n options: CodeToolBrokerOptions,\n policy: ReturnType<typeof createCodePolicyGate>,\n): Promise<HarnessToolResponse> {\n exactKeys(request.input, [\"patch\"]);\n const value = stringField(request.input, \"patch\");\n const paths = validateCodePatch(value, options.maxPatchBytes ?? 256 * 1024);\n if (paths.some((path) => options.readOnlyPrefixes?.some((prefix) => path === prefix || path.startsWith(`${prefix}/`)))) {\n throw new TypeError(\"patch targets a read-only reference source\");\n }\n const allowed = await policy.patch(policyContext(context, request, options, { patch: value }));\n if (!allowed) return response(request, false, \"tool denied by CaMeL policy\");\n await applyCodePatch(context.workspaceDir, value, paths);\n return response(request, true, `Applied patch to ${paths.length} file(s).`, { paths });\n}\n\nasync function recipe(\n context: Parameters<HarnessToolBroker[\"execute\"]>[0],\n request: HarnessToolRequest,\n options: CodeToolBrokerOptions,\n recipes: ReadonlyMap<string, CodeBuildRecipe>,\n policy: ReturnType<typeof createCodePolicyGate>,\n): Promise<HarnessToolResponse> {\n exactKeys(request.input, [\"recipeId\"]);\n const recipeId = stringField(request.input, \"recipeId\");\n const digestLimits = {\n maxFiles: options.maxRecipeWorkspaceFiles ?? 20_000,\n maxBytes: options.maxRecipeWorkspaceBytes ?? 512 * 1024 * 1024,\n };\n const sourceDigest = await digestStagedWorkspace(context.workspaceDir, digestLimits);\n const allowed = await policy.recipe(policyContext(context, request, options, {\n recipeIds: [...recipes.keys()].sort(), recipeId, sourceDigest,\n }));\n if (!allowed) return response(request, false, \"tool denied by CaMeL policy\");\n const selected = recipes.get(recipeId);\n if (!selected) return response(request, false, \"build recipe is not registered\");\n const staged = await stageWorkspace(context.workspaceDir, {\n maxFiles: digestLimits.maxFiles,\n maxBytes: digestLimits.maxBytes,\n });\n try {\n if (await digestStagedWorkspace(staged.workspaceDir, digestLimits) !== sourceDigest) {\n throw new TypeError(\"workspace changed after recipe authorization\");\n }\n const result = await options.recipeExecutor.run({\n workspaceDir: staged.workspaceDir, recipe: selected, signal: context.signal,\n });\n const output = [result.stdout, result.stderr].filter(Boolean).join(\"\\n\");\n const ok = result.exitCode === 0 && !result.outputLimitExceeded && !result.timedOut;\n const status = result.timedOut ? \"timed out\" : result.outputLimitExceeded ? \"exceeded output limit\"\n : ok ? \"passed\" : `failed with exit ${result.exitCode}`;\n return response(request, ok, `Recipe ${recipeId} ${status}.${output ? `\\n${output}` : \"\"}`, {\n recipeId, exitCode: result.exitCode, durationMs: result.durationMs,\n outputLimitExceeded: result.outputLimitExceeded, timedOut: result.timedOut,\n });\n } finally {\n await staged.cleanup();\n }\n}\n\nfunction policyContext<T extends object>(\n context: Parameters<HarnessToolBroker[\"execute\"]>[0],\n request: HarnessToolRequest,\n options: CodeToolBrokerOptions,\n extra: T,\n) {\n return {\n lease: context.lease, request, workspaceId: `workspace:${context.lease.task.attemptId}`,\n readers: { kind: \"principals\", principalIds: [options.readerId] } as const, ...extra,\n };\n}\n\nasync function registeredFiles(root: string, limit: number): Promise<string[]> {\n const paths: string[] = [];\n const walk = async (directory: string): Promise<void> => {\n for (const entry of await readdir(directory, { withFileTypes: true })) {\n if (entry.isSymbolicLink()) throw new TypeError(\"workspace contains a symbolic link\");\n const target = resolve(directory, entry.name);\n if (entry.isDirectory()) await walk(target);\n else if (entry.isFile()) {\n const path = relative(root, target).split(\"\\\\\").join(\"/\");\n try { validateRelativePath(path); } catch { continue; }\n paths.push(path);\n if (paths.length > limit) throw new TypeError(\"workspace file registry exceeds its bound\");\n }\n }\n };\n await walk(resolve(root));\n return paths.sort();\n}\n\nfunction validateOptions(options: CodeToolBrokerOptions): void {\n if (!options.readerId || !options.recipes.length || new Set(options.recipes.map((item) => item.id)).size !== options.recipes.length) {\n throw new TypeError(\"Code tool broker requires a reader and unique registered recipes\");\n }\n for (const recipe of options.recipes) assertCodeBuildRecipe(recipe);\n if (options.readOnlyPrefixes?.some((prefix) => !/^[A-Za-z0-9_.-]+$/.test(prefix) || prefix === \".\" || prefix === \"..\")) {\n throw new TypeError(\"Code tool broker read-only prefix is invalid\");\n }\n}\n\nfunction exactKeys(input: Record<string, unknown>, allowed: readonly string[]): void {\n if (Object.keys(input).some((key) => !allowed.includes(key))) throw new TypeError(\"tool input contains an unsupported field\");\n}\n\nfunction stringField(input: Record<string, unknown>, name: string): string {\n const value = input[name];\n if (typeof value !== \"string\" || !value) throw new TypeError(`${name} must be a non-empty string`);\n return value;\n}\n\nfunction optionalInteger(value: unknown): number | undefined {\n if (value === undefined) return undefined;\n if (!Number.isSafeInteger(value) || (value as number) < 1) throw new TypeError(\"line bounds must be positive integers\");\n return value as number;\n}\n\nfunction response(\n request: HarnessToolRequest,\n ok: boolean,\n content: string,\n details?: Record<string, unknown>,\n): HarnessToolResponse {\n return { requestId: request.requestId, ok, content, ...(details ? { details } : {}) };\n}\n","import {\n conversionPolicyDigest,\n createCamelIngress,\n createConversionRegistry,\n registeredIdRegistryDigest,\n type ReaderSet,\n type SafeConversionPolicy,\n type SafeConversionSpec,\n} from \"@odla-ai/camel\";\nimport {\n createEffectPolicy,\n destinationRegistryDigest,\n type EffectClass,\n type PolicyInput,\n type PolicyOutcome,\n type ToolArgument,\n type ToolDescriptor,\n} from \"@odla-ai/camel/policy\";\nimport type { HarnessLease, HarnessToolRequest } from \"./types\";\nimport type { CodeToolBrokerOptions, CodeToolDecision } from \"./code-tool-types\";\n\nconst DESTINATIONS = \"code-workspaces.v1\";\nconst READ: ToolDescriptor = descriptor(\"sandbox.read\", \"scoped_data_read\", {\n workspace: \"destination\", authority: \"authority\", path: \"selector\",\n startLine: \"selector\", endLine: \"selector\",\n});\nconst PATCH: ToolDescriptor = descriptor(\"sandbox.apply_patch\", \"reversible_mutation\", {\n workspace: \"destination\", authority: \"authority\", patch: \"payload\",\n});\nconst RECIPE: ToolDescriptor = descriptor(\"sandbox.run_recipe\", \"code_execution\", {\n workspace: \"destination\", authority: \"authority\", recipeId: \"selector\", sourceDigest: \"payload\",\n});\n\ninterface PolicyContext {\n lease: HarnessLease;\n request: HarnessToolRequest;\n workspaceId: string;\n readers: ReaderSet;\n}\n\nexport interface CodePolicyGate {\n read(input: PolicyContext & { paths: readonly string[]; path: string; startLine: number; endLine: number }): Promise<boolean>;\n patch(input: PolicyContext & { patch: string }): Promise<boolean>;\n recipe(input: PolicyContext & { recipeIds: readonly string[]; recipeId: string; sourceDigest: string }): Promise<boolean>;\n}\n\n/** Create CaMeL argument labelling and effect authorization for Code tools. */\nexport function createCodePolicyGate(options: CodeToolBrokerOptions): CodePolicyGate {\n return {\n read: async (input) => {\n const base = await environment(input, options, \"sandbox.read\");\n const conversions = await conversionRegistry([\n await registeredPolicy(\"code.path.v1\", \"code.paths.v1\", input.paths),\n await conversionPolicy(\"code.line.v1\", { kind: \"integer\", minimum: 1, maximum: 1_000_000 }),\n ], { \"code.paths.v1\": input.paths });\n const path = await conversions.operations.registeredId(unsafe(base, input.path, \"path\"), \"code.path.v1\");\n const start = await conversions.operations.integer(unsafe(base, input.startLine, \"start\"), \"code.line.v1\");\n const end = await conversions.operations.integer(unsafe(base, input.endLine, \"end\"), \"code.line.v1\");\n if (end.value < start.value) return false;\n return authorize(input, options, base, READ, {\n ...base.fixedArgs,\n path: { role: \"selector\", value: path },\n startLine: { role: \"selector\", value: start },\n endLine: { role: \"selector\", value: end },\n }, [path, start, end]);\n },\n patch: async (input) => {\n const base = await environment(input, options, \"sandbox.apply_patch\");\n const patch = unsafe(base, input.patch, \"patch\");\n return authorize(input, options, base, PATCH, {\n ...base.fixedArgs, patch: { role: \"payload\", value: patch },\n }, []);\n },\n recipe: async (input) => {\n const base = await environment(input, options, \"sandbox.run_recipe\");\n const conversions = await conversionRegistry([\n await registeredPolicy(\"code.recipe.v1\", \"code.recipes.v1\", input.recipeIds),\n ], { \"code.recipes.v1\": input.recipeIds });\n const recipe = await conversions.operations.registeredId(unsafe(base, input.recipeId, \"recipe\"), \"code.recipe.v1\");\n const source = unsafe(base, input.sourceDigest, \"source\");\n return authorize(input, options, base, RECIPE, {\n ...base.fixedArgs, recipeId: { role: \"selector\", value: recipe },\n sourceDigest: { role: \"payload\", value: source },\n }, [recipe]);\n },\n };\n}\n\nfunction descriptor(name: string, effect: EffectClass, argumentRoles: ToolDescriptor[\"argumentRoles\"]): ToolDescriptor {\n return { name, version: 1, effect, inputSchema: { type: \"object\" }, argumentRoles, policyId: `odla.code.${name}.v1` };\n}\n\nasync function conversionPolicy(id: string, output: SafeConversionSpec): Promise<SafeConversionPolicy> {\n const definition = {\n conversionId: id, version: 1, output, maximumSourceBytes: 1_000_000,\n maximumOutputsPerArtifact: 4, presentation: \"json_scalar\" as const,\n };\n return { ...definition, digest: await conversionPolicyDigest(definition) };\n}\n\nasync function registeredPolicy(id: string, registryId: string, values: readonly string[]) {\n const mapping = Object.fromEntries(values.map((value) => [value, value]));\n return conversionPolicy(id, {\n kind: \"registered_id\", registryId, registryDigest: await registeredIdRegistryDigest(mapping),\n });\n}\n\nasync function conversionRegistry(policies: SafeConversionPolicy[], values: Record<string, readonly string[]>) {\n const registeredIds = Object.fromEntries(await Promise.all(Object.entries(values).map(async ([id, entries]) => {\n const mapping = Object.fromEntries(entries.map((value) => [value, value]));\n return [id, { values: mapping, digest: await registeredIdRegistryDigest(mapping) }];\n })));\n return createConversionRegistry({ policies, registeredIds });\n}\n\nasync function environment(input: PolicyContext, options: CodeToolBrokerOptions, tool: string) {\n const ingress = createCamelIngress([\n { id: \"workspace\", value: input.workspaceId, readers: input.readers },\n { id: \"authority\", value: `lease:${input.lease.leaseId}`, readers: input.readers },\n { id: \"reader\", value: options.readerId, readers: input.readers },\n ] as const);\n const digest = await destinationRegistryDigest([input.workspaceId]);\n const approvals: EffectClass[] = [\"irreversible_mutation\", \"external_send\", \"financial\", \"secret_read\"];\n if (options.recipeAuthorization === \"exact_approval\") approvals.push(\"code_execution\");\n const policy = createEffectPolicy({\n destinationRegistries: { [DESTINATIONS]: { digest, values: [input.workspaceId] } },\n approvalEffects: approvals,\n });\n const fixedArgs: Record<string, ToolArgument> = {\n workspace: { role: \"destination\", value: ingress.control(\"workspace\"), registryId: DESTINATIONS, registryDigest: digest },\n authority: { role: \"authority\", value: ingress.control(\"authority\") },\n };\n return { ingress, policy, fixedArgs, reader: ingress.control(\"reader\"), runId: `${input.request.requestId}:${tool}` };\n}\n\nfunction unsafe(base: Awaited<ReturnType<typeof environment>>, value: unknown, field: string) {\n return base.ingress.quarantinedOutput(value, {\n readers: base.reader.label.readers, runId: `${base.runId}:${field}`,\n });\n}\n\nasync function authorize(\n input: PolicyContext,\n options: CodeToolBrokerOptions,\n base: Awaited<ReturnType<typeof environment>>,\n tool: ToolDescriptor,\n args: Record<string, ToolArgument>,\n controlDependencies: PolicyInput[\"controlDependencies\"],\n): Promise<boolean> {\n const policy = await base.policy.evaluate({\n planId: input.lease.task.taskId, tool, args, controlDependencies,\n intendedReaderIds: [base.reader],\n });\n let approvalConsumed = false;\n if (policy.outcome === \"require_approval\" && options.consumeApproval) {\n approvalConsumed = await options.consumeApproval(decision(input, policy, false, tool.name, policy.actionDigest));\n }\n await options.onDecision?.(decision(input, policy, approvalConsumed, tool.name));\n return policy.outcome === \"allow\" || approvalConsumed;\n}\n\nfunction decision(\n input: PolicyContext,\n policy: PolicyOutcome,\n approvalConsumed: boolean,\n tool: string,\n actionDigest?: string,\n): CodeToolDecision & { actionDigest: string } {\n return {\n lease: input.lease, request: input.request, tool: tool as CodeToolDecision[\"tool\"],\n policy, approvalConsumed, actionDigest: actionDigest ?? (policy.outcome === \"require_approval\" ? policy.actionDigest : \"\"),\n };\n}\n","import type { CodePortableCheckpoint } from \"@odla-ai/camel/code\";\nimport type { CodeLocalSourceDescriptor, CodeRuntimeCommand } from \"./code-runtime\";\nimport { HARNESS_PROTOCOL_VERSION, type HarnessLease } from \"./types\";\n\nexport interface CodeCommandMetadata {\n role: \"coding\" | \"review\"; title: string; prompt: string;\n maxTokensPerInteraction: number;\n planningInputDigest: `sha256:${string}` | null; attestationDigest: string;\n repository: string; baseCommitSha: string; sourceTreeDigest: `sha256:${string}`;\n}\n\nexport function codeCommandMetadata(payload: Record<string, unknown>, resume: boolean): CodeCommandMetadata {\n const trusted = record(payload.trustedBase);\n const role = payload.role;\n const title = payload.title;\n const prompt = payload.prompt;\n const maxTokensPerInteraction = payload.maxTokensPerInteraction ?? 32_000;\n if ((role !== \"coding\" && role !== \"review\") || typeof title !== \"string\" || typeof prompt !== \"string\") {\n throw new TypeError(`invalid Code ${resume ? \"resume\" : \"start\"} metadata`);\n }\n const planning = trusted?.planningInputDigest;\n const attestation = trusted?.attestationDigest;\n const repository = trusted?.repository;\n const baseCommitSha = trusted?.commitSha;\n const sourceTreeDigest = trusted?.treeDigest;\n if (typeof repository !== \"string\" || !repository.includes(\"/\")\n || typeof baseCommitSha !== \"string\" || !/^[0-9a-f]{40}$/.test(baseCommitSha)\n || typeof sourceTreeDigest !== \"string\" || !/^sha256:[0-9a-f]{64}$/.test(sourceTreeDigest)) {\n throw new TypeError(`invalid Code ${resume ? \"resume\" : \"start\"} trusted base`);\n }\n if (!Number.isSafeInteger(maxTokensPerInteraction) || Number(maxTokensPerInteraction) < 4_000\n || Number(maxTokensPerInteraction) > 200_000) {\n throw new TypeError(`invalid Code ${resume ? \"resume\" : \"start\"} interaction token limit`);\n }\n return { role, title, prompt,\n maxTokensPerInteraction: Number(maxTokensPerInteraction),\n planningInputDigest: typeof planning === \"string\" && /^sha256:[0-9a-f]{64}$/.test(planning)\n ? planning as `sha256:${string}` : null,\n attestationDigest: typeof attestation === \"string\" ? attestation : \"resume\",\n repository, baseCommitSha, sourceTreeDigest: sourceTreeDigest as `sha256:${string}` };\n}\n\nexport function codeLocalSource(payload: Record<string, unknown>): CodeLocalSourceDescriptor | null {\n const source = record(payload.source);\n if (!source) return null;\n if (source.kind !== \"local_checkout\" || typeof source.repository !== \"string\"\n || typeof source.headCommitSha !== \"string\" || !/^[0-9a-f]{40}$/.test(source.headCommitSha)\n || typeof source.trustedBaseDigest !== \"string\" || !/^sha256:[0-9a-f]{64}$/.test(source.trustedBaseDigest)\n || typeof source.developerPatchDigest !== \"string\" || !/^sha256:[0-9a-f]{64}$/.test(source.developerPatchDigest)\n || typeof source.snapshotDigest !== \"string\" || !/^sha256:[0-9a-f]{64}$/.test(source.snapshotDigest)\n || typeof source.modified !== \"boolean\"\n || !Number.isSafeInteger(source.fileCount) || Number(source.fileCount) < 1 || Number(source.fileCount) > 20_000\n || !Number.isSafeInteger(source.byteCount) || Number(source.byteCount) < 1 || Number(source.byteCount) > 512 * 1024 * 1024\n || !Number.isSafeInteger(source.capturedAt) || Number(source.capturedAt) < 1) {\n throw new TypeError(\"invalid local checkout source descriptor\");\n }\n return source as unknown as CodeLocalSourceDescriptor;\n}\n\nexport function codeCheckpointPayload(payload: Record<string, unknown>): CodePortableCheckpoint {\n const value = payload.checkpoint;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new TypeError(\"resume checkpoint is missing\");\n return value as CodePortableCheckpoint;\n}\n\nexport function fakeCodeLease(command: CodeRuntimeCommand, metadata: CodeCommandMetadata): HarnessLease {\n return { protocolVersion: HARNESS_PROTOCOL_VERSION, leaseId: `code:${command.commandId}`,\n generation: command.bindingGeneration, expiresAt: Date.now() + 24 * 60 * 60_000,\n task: { taskId: command.sessionId, attemptId: command.instanceId, title: metadata.title,\n prompt: metadata.prompt, workspace: command.appId, aiRoute: metadata.role,\n policy: { network: \"none\", timeoutMs: 30 * 60_000, maxOutputBytes: 4 * 1024 * 1024,\n maxPatchBytes: 256 * 1024 } } };\n}\n\nconst record = (value: unknown) => value && typeof value === \"object\" && !Array.isArray(value)\n ? value as Record<string, unknown> : null;\n","import { restoreCodeWorkspaceCheckpoint } from \"./code-checkpoint\";\nimport type { CodeLocalSourceDescriptor, CodeRuntimeCommand } from \"./code-runtime\";\nimport { codeCheckpointPayload } from \"./code-runtime-task\";\nimport { stageWorkspacePair, type StagedWorkspace } from \"./workspace\";\nimport { digestStagedWorkspace } from \"./workspace-digest\";\n\nconst SOURCE_LIMITS = { maxFiles: 20_000, maxBytes: 512 * 1024 * 1024 } as const;\n\nexport interface FrozenCodeLocalSource {\n descriptor: CodeLocalSourceDescriptor;\n trustedBaseDir: string;\n sourceDir: string;\n}\n\n/** Reconstruct a fenced local session only from its frozen terminal-held\n * source and exact Git base. */\nexport async function prepareRuntimeLocalSource(input: {\n command: CodeRuntimeCommand;\n descriptor: CodeLocalSourceDescriptor;\n available?: FrozenCodeLocalSource;\n repository: string;\n baseCommitSha: string;\n resume: boolean;\n}): Promise<{ workspace: StagedWorkspace; sourceDigest: `sha256:${string}`; trustedBaseDigest: `sha256:${string}` }> {\n const { command, descriptor, available, repository, baseCommitSha, resume } = input;\n if (!available || JSON.stringify(available.descriptor) !== JSON.stringify(descriptor)\n || descriptor.repository.toLowerCase() !== repository.toLowerCase()\n || descriptor.headCommitSha !== baseCommitSha) {\n throw new TypeError(\"the session's local checkout snapshot is not available on this terminal\");\n }\n const workspace = resume\n ? (await restoreCodeWorkspaceCheckpoint({\n trustedBaseDir: available.trustedBaseDir, trustedBaseCommitSha: baseCommitSha,\n checkpoint: codeCheckpointPayload(command.payload),\n })).workspace\n : await stageWorkspacePair(available.trustedBaseDir, available.sourceDir, SOURCE_LIMITS);\n const trustedBaseDigest = await digestStagedWorkspace(workspace.baselineDir, SOURCE_LIMITS);\n if (trustedBaseDigest !== descriptor.trustedBaseDigest) {\n await workspace.cleanup();\n throw new TypeError(\"trusted Git base digest changed after connection\");\n }\n if (!resume && await digestStagedWorkspace(workspace.workspaceDir, SOURCE_LIMITS) !== descriptor.snapshotDigest) {\n await workspace.cleanup();\n throw new TypeError(\"local checkout snapshot digest changed after connection\");\n }\n return { workspace, sourceDigest: descriptor.snapshotDigest, trustedBaseDigest };\n}\n","import { createCodeToolBroker } from \"./code-tool-broker\";\nimport type { CodeBuildRecipe } from \"./code-tool-types\";\nimport type { ContainerEngine } from \"./container\";\nimport { createContainerRecipeExecutor } from \"./recipe-container\";\nimport type { HarnessLease, HarnessToolBroker } from \"./types\";\n\n/** Build the role-limited broker for one Pi attempt. */\nexport function createCodeRuntimeToolBroker(\n input: {\n recipes: readonly CodeBuildRecipe[];\n engine: ContainerEngine;\n recipeAuthorization?: \"registered_recipe\" | \"exact_approval\";\n },\n lease: HarnessLease,\n role: \"coding\" | \"review\",\n): HarnessToolBroker {\n const broker = createCodeToolBroker({\n recipes: input.recipes, recipeExecutor: createContainerRecipeExecutor(input.engine),\n recipeAuthorization: input.recipeAuthorization ?? \"registered_recipe\",\n readerId: `code-session:${lease.task.taskId}`,\n readOnlyPrefixes: [\".odla-references\"],\n });\n return role === \"coding\" ? broker : { execute: (context, request) => request.tool === \"sandbox.read\"\n ? broker.execute(context, request)\n : Promise.resolve({ requestId: request.requestId, ok: false, content: \"review sessions are read-only\" }) };\n}\n","import type { CodeRuntimeAgentControlPlane, CodeRuntimeCommand } from \"./code-runtime\";\nimport type { CodeCommandMetadata } from \"./code-runtime-task\";\nimport {\n HARNESS_PROTOCOL_VERSION, type CodeSessionEventData, type HarnessAgentInput, type HarnessAgentOutput,\n} from \"./types\";\n\ntype InferenceRequest = Extract<HarnessAgentOutput, { type: \"inference.request\" }>;\nexport interface CodeInteractionBudgetState { tokens: number; noticeEmitted: boolean }\n\n/** Broker one model call while keeping per-owner-interaction accounting and\n * graceful pause behavior out of the main container lifecycle engine. */\nexport async function handleCodeRuntimeInference(input: {\n command: CodeRuntimeCommand; metadata: CodeCommandMetadata; request: InferenceRequest;\n state: CodeInteractionBudgetState; control: CodeRuntimeAgentControlPlane;\n event(value: CodeSessionEventData): Promise<void>;\n}): Promise<HarnessAgentInput> {\n const { command, metadata, request, state } = input;\n if (state.tokens >= metadata.maxTokensPerInteraction) {\n if (!state.noticeEmitted) {\n state.noticeEmitted = true;\n await input.event({ type: \"message\", actor: \"system\",\n body: `Pi paused at the ${metadata.maxTokensPerInteraction.toLocaleString(\"en-US\")}-token per-interaction limit. Send a new instruction to continue.`,\n }).catch(() => undefined);\n }\n return { protocolVersion: HARNESS_PROTOCOL_VERSION, type: \"inference.response\",\n requestId: request.requestId, response: {\n id: `budget:${command.commandId}`, provider: \"openai\", model: \"interaction-budget\",\n role: \"assistant\", content: [{ type: \"text\", text: \"Pause now. The owner-set token limit for this interaction has been reached.\" }],\n stopReason: \"end_turn\", usage: { inputTokens: 0, outputTokens: 0 },\n } };\n }\n const startedAt = Date.now();\n const response = await input.control.infer(command.sessionId, {\n requestId: request.requestId, interactionId: command.commandId, call: request.call,\n });\n state.tokens += response.receipt.inputTokens + response.receipt.outputTokens;\n await input.event({ type: \"usage\", provider: response.receipt.provider,\n model: response.receipt.model, inputTokens: response.receipt.inputTokens,\n outputTokens: response.receipt.outputTokens, durationMs: Date.now() - startedAt,\n interactionId: command.commandId, interactionTokens: state.tokens,\n interactionMaxTokens: metadata.maxTokensPerInteraction,\n }).catch(() => undefined);\n return { protocolVersion: HARNESS_PROTOCOL_VERSION, type: \"inference.response\",\n requestId: request.requestId, response: response.response };\n}\n","import { createHash } from \"node:crypto\";\nimport type { CodeRuntimeAgentControlPlane, CodeRuntimeCommand } from \"./code-runtime\";\nimport type { CodeSessionEventData } from \"./types\";\n\nexport async function appendCodeRuntimeEvent(\n control: CodeRuntimeAgentControlPlane, command: CodeRuntimeCommand,\n event: CodeSessionEventData, refs: string[],\n): Promise<void> {\n const eventId = `${command.commandId.slice(0, 45)}:${refs.length + 1}`;\n refs.push(eventId);\n const bounded = event.type === \"message\"\n ? { ...event, body: event.body.trim().slice(0, 20_000) || `${event.actor} event` }\n : event;\n await control.appendSessionEvent(command.sessionId, eventId, bounded);\n}\n\nexport const digestRuntimeValue = (value: string): `sha256:${string}` =>\n `sha256:${createHash(\"sha256\").update(value).digest(\"hex\")}`;\nexport const runtimeErrorMessage = (value: unknown): string => value instanceof Error ? value.message : String(value);\nexport const runtimeRecord = (value: unknown): Record<string, unknown> | null =>\n value && typeof value === \"object\" && !Array.isArray(value) ? value as Record<string, unknown> : null;\nexport const safeRuntimeJson = (value: unknown): string => {\n try { return JSON.stringify(value).slice(0, 10_000); } catch { return \"[event]\"; }\n};\nexport function runtimeResultText(value: unknown): string | null {\n const record = runtimeRecord(value);\n if (record && typeof record.text === \"string\") return record.text.slice(0, 20_000);\n if (record && typeof record.error === \"string\") return `Pi failed: ${record.error.slice(0, 19_989)}`;\n return null;\n}\n\nexport function runtimeResultError(value: unknown): string | null {\n const record = runtimeRecord(value);\n return record && typeof record.error === \"string\" && record.error.trim()\n ? record.error.trim().slice(0, 2_000) : null;\n}\n","import { restoreCodeWorkspaceCheckpoint } from \"./code-checkpoint\";\nimport { CodeRuntimeCheckpointManager } from \"./code-runtime-checkpoint-manager\";\nimport { attachCodeRuntimeReferences, materializeCodeRuntimeSource } from \"./code-runtime-source\";\nimport { type CodeRuntimeCommand, type CodeRuntimeCommandEngine, type CodeRuntimeCommandResult } from \"./code-runtime\";\nimport type { ActiveCodeRuntimeSession as ActiveSession, CodePiRuntimeEngineOptions } from \"./code-runtime-engine-types\";\nexport type { CodePiRuntimeEngineOptions } from \"./code-runtime-engine-types\";\nimport {\n codeCheckpointPayload, codeCommandMetadata, codeLocalSource, fakeCodeLease, type CodeCommandMetadata,\n} from \"./code-runtime-task\";\nimport { runContainerAttempt, type ContainerRunOptions, type ContainerRunResult } from \"./container\";\nimport { createContainerRecipeExecutor } from \"./recipe-container\";\nimport { prepareRuntimeLocalSource } from \"./code-runtime-local-source\";\nimport { HARNESS_PROTOCOL_VERSION, type CodeSessionEventData } from \"./types\";\nimport { stageWorkspace, type StagedWorkspace } from \"./workspace\";\nimport { digestStagedWorkspace } from \"./workspace-digest\";\nimport { createCodeRuntimeToolBroker } from \"./code-runtime-broker\";\nimport { handleCodeRuntimeInference } from \"./code-runtime-inference\";\nimport { appendCodeRuntimeEvent, digestRuntimeValue as digest, runtimeErrorMessage as message,\n runtimeRecord as object, runtimeResultError as resultError, runtimeResultText as resultText,\n safeRuntimeJson as json } from \"./code-runtime-events\";\n\n/** Execute fenced Code commands with real Pi in a credentialless, networkless container. */\nexport class CodePiRuntimeEngine implements CodeRuntimeCommandEngine {\n readonly #active = new Map<string, ActiveSession>();\n readonly #run: (options: ContainerRunOptions) => Promise<ContainerRunResult>;\n readonly #buildPolicyDigest: `sha256:${string}`;\n readonly #checkpoints: CodeRuntimeCheckpointManager;\n\n constructor(private readonly options: CodePiRuntimeEngineOptions) {\n if (options.imageAuthorization === \"cli_embedded\" && !/^odla-ai\\/pi-agent:embedded-sha256-[0-9a-f]{64}$/.test(options.image)) throw new TypeError(\"CLI-embedded Pi image must use its content-addressed local tag\");\n this.#run = options.runAttempt ?? runContainerAttempt; this.#buildPolicyDigest = digest(JSON.stringify(options.recipes));\n this.#checkpoints = new CodeRuntimeCheckpointManager({\n control: options.control, recipes: options.recipes,\n recipeExecutor: options.recipeExecutor ?? createContainerRecipeExecutor(options.engine),\n fallbackPolicyDigest: this.#buildPolicyDigest,\n event: (command, event, refs) => this.#event(command, event, refs),\n });\n }\n\n execute(command: CodeRuntimeCommand): Promise<CodeRuntimeCommandResult> {\n if (command.kind === \"checkpoint_stop\") return this.#checkpoint(command);\n if (command.kind === \"prompt\") return this.#prompt(command);\n return this.#start(command, command.kind === \"resume\");\n }\n\n async acknowledged(command: CodeRuntimeCommand, result: CodeRuntimeCommandResult): Promise<void> {\n if (await this.#checkpoints.acknowledged(command, result)) return;\n const active = this.#active.get(command.sessionId);\n if (!active || result.status !== \"running\") return;\n active.acknowledged = true;\n if (active.failure) await this.options.control.reportSessionFailure(command.sessionId, active.failure).catch(() => undefined);\n }\n\n async close(): Promise<void> {\n const sessions = [...this.#active.values()];\n for (const session of sessions) session.abort.abort(\"runtime_shutdown\");\n await Promise.allSettled(sessions.map((session) => session.done));\n await Promise.allSettled(sessions.map((session) => session.workspace.cleanup()));\n this.#active.clear();\n }\n\n async #start(command: CodeRuntimeCommand, resume: boolean): Promise<CodeRuntimeCommandResult> {\n if (this.#active.has(command.sessionId)) throw new TypeError(\"Code session is already active on this runtime\");\n const metadata = codeCommandMetadata(command.payload, resume);\n const requestedLocal = codeLocalSource(command.payload);\n let workspace: StagedWorkspace;\n let sourceDigest: `sha256:${string}`;\n let localTrustedBaseDigest: `sha256:${string}` | undefined;\n if (requestedLocal) {\n const prepared = await prepareRuntimeLocalSource({\n command, descriptor: requestedLocal, available: this.options.localSource,\n repository: metadata.repository, baseCommitSha: metadata.baseCommitSha, resume,\n });\n ({ workspace, sourceDigest, trustedBaseDigest: localTrustedBaseDigest } = prepared);\n if (command.payload.sourceSet) {\n const selected = await this.options.control.source(command.sessionId);\n if (selected.repository !== metadata.repository || selected.commitSha !== metadata.baseCommitSha\n || selected.treeDigest !== metadata.sourceTreeDigest) {\n await workspace.cleanup();\n throw new TypeError(\"Code local source does not match the selected GitHub primary source\");\n }\n await attachCodeRuntimeReferences(workspace, selected.references ?? []);\n }\n } else {\n const source = await this.options.control.source(command.sessionId);\n const materialized = await materializeCodeRuntimeSource(source);\n try {\n workspace = resume\n ? (await restoreCodeWorkspaceCheckpoint({\n trustedBaseDir: materialized.sourceDir, trustedBaseCommitSha: source.commitSha,\n checkpoint: codeCheckpointPayload(command.payload),\n })).workspace\n : await stageWorkspace(materialized.sourceDir);\n } finally { await materialized.cleanup(); }\n sourceDigest = source.treeDigest;\n }\n const abort = new AbortController();\n const conversationRefs: string[] = [];\n const active: ActiveSession = {\n workspace, abort, conversationRefs, acknowledged: false, role: metadata.role, title: metadata.title,\n maxTokensPerInteraction: metadata.maxTokensPerInteraction,\n baseCommitSha: metadata.baseCommitSha, repository: metadata.repository, sourceTreeDigest: metadata.sourceTreeDigest,\n trustedBaseDigest: requestedLocal ? localTrustedBaseDigest! : await digestStagedWorkspace(workspace.baselineDir, {\n maxFiles: 20_000, maxBytes: 512 * 1024 * 1024,\n }),\n planningInputDigest: metadata.planningInputDigest ?? digest(\n JSON.stringify({ attestation: metadata.attestationDigest, prompt: metadata.prompt, tree: sourceDigest }),\n ),\n done: Promise.resolve(null),\n };\n this.#active.set(command.sessionId, active);\n if (requestedLocal) {\n await this.#event(command, {\n type: \"message\", actor: \"system\",\n body: `Source snapshot: local checkout ${requestedLocal.snapshotDigest} · ${requestedLocal.modified ? \"modified\" : \"clean\"} · Git ${requestedLocal.headCommitSha}`,\n }, conversationRefs);\n }\n active.done = this.#runAttempt(command, metadata, active).catch(async (cause) => {\n const detail = message(cause);\n await this.#event(command, { type: \"message\", actor: \"system\", body: `Pi failed: ${detail}` }, conversationRefs).catch(() => undefined);\n await this.#diagnostic(command, active, detail);\n await this.#event(command, { type: \"status\", status: \"failed\" }, conversationRefs).catch(() => undefined);\n await this.#failure(command, active, detail);\n return null;\n });\n return { status: \"running\", message: resume ? \"Pi resumed from a portable checkpoint\" : \"Pi started\" };\n }\n\n async #prompt(command: CodeRuntimeCommand): Promise<CodeRuntimeCommandResult> {\n const active = this.#active.get(command.sessionId);\n const prompt = command.payload.prompt;\n if (!active || typeof prompt !== \"string\" || !prompt.trim() || prompt.length > 20_000) {\n throw new TypeError(\"prompt requires an active Code session and bounded text\");\n }\n const requestedLimit = command.payload.maxTokensPerInteraction ?? active.maxTokensPerInteraction;\n if (!Number.isSafeInteger(requestedLimit) || Number(requestedLimit) < 4_000 || Number(requestedLimit) > 200_000) {\n throw new TypeError(\"prompt requires a valid interaction token limit\");\n }\n active.maxTokensPerInteraction = Number(requestedLimit);\n await active.done;\n active.abort = new AbortController();\n active.acknowledged = false;\n active.failure = undefined;\n active.done = this.#runAttempt(command, {\n role: active.role, title: active.title, prompt,\n maxTokensPerInteraction: active.maxTokensPerInteraction,\n planningInputDigest: active.planningInputDigest, attestationDigest: \"follow-up\",\n repository: active.repository, baseCommitSha: active.baseCommitSha, sourceTreeDigest: active.sourceTreeDigest,\n }, active).catch(async (cause) => {\n const detail = message(cause);\n await this.#event(command, { type: \"message\", actor: \"system\", body: `Pi failed: ${detail}` },\n active.conversationRefs).catch(() => undefined);\n await this.#diagnostic(command, active, detail);\n await this.#event(command, { type: \"status\", status: \"failed\" }, active.conversationRefs).catch(() => undefined);\n await this.#failure(command, active, detail);\n return null;\n });\n return { status: \"running\", message: \"Pi accepted the owner prompt\" };\n }\n\n async #runAttempt(\n command: CodeRuntimeCommand, metadata: CodeCommandMetadata, active: ActiveSession,\n ): Promise<ContainerRunResult> {\n const lease = fakeCodeLease(command, metadata);\n const broker = createCodeRuntimeToolBroker({\n recipes: this.options.recipes, engine: this.options.engine,\n recipeAuthorization: this.options.recipeAuthorization,\n }, lease, metadata.role);\n const startedAt = Date.now();\n let completionSeen = false;\n const interaction = { tokens: 0, noticeEmitted: false };\n const result = await this.#run({\n engine: this.options.engine, image: this.options.image, allowUnpinnedImage: this.options.imageAuthorization === \"cli_embedded\", workspaceDir: active.workspace.workspaceDir,\n workspaceAccess: \"none\", task: lease.task, limits: this.options.limits, signal: active.abort.signal,\n onStderr: (text) => this.#event(command, {\n type: \"message\", actor: \"system\", body: text.slice(0, 4_000),\n }, active.conversationRefs),\n onMessage: async (output) => {\n if (output.type === \"inference.request\") {\n return handleCodeRuntimeInference({ command, metadata, request: output, state: interaction,\n control: this.options.control, event: (event) => this.#event(\n command, event, active.conversationRefs,\n ),\n });\n }\n if (output.type === \"tool.request\") {\n const toolStarted = Date.now();\n await this.#event(command, { type: \"tool\", phase: \"started\", tool: output.tool },\n active.conversationRefs).catch(() => undefined);\n const response = await broker.execute({\n lease, workspaceDir: active.workspace.workspaceDir, signal: active.abort.signal,\n }, output);\n await this.#event(command, { type: \"tool\", phase: \"completed\", tool: output.tool,\n ok: response.ok, durationMs: Date.now() - toolStarted,\n }, active.conversationRefs).catch(() => undefined);\n return { protocolVersion: HARNESS_PROTOCOL_VERSION, type: \"tool.response\" as const, ...response };\n }\n if (output.type === \"event\") {\n const payload = object(output.payload);\n if (output.kind === \"pi.started\") {\n await this.#event(command, { type: \"status\", status: \"running\" }, active.conversationRefs);\n } else if (output.kind === \"pi.thinking\" && payload?.available === true\n && Number.isSafeInteger(payload.durationMs) && Number(payload.durationMs) >= 0) {\n await this.#event(command, { type: \"thinking\", available: true,\n durationMs: Math.min(Number(payload.durationMs), 86_400_000),\n }, active.conversationRefs);\n } else {\n await this.#event(command, { type: \"message\", actor: \"system\",\n body: `${output.kind}${output.payload === undefined ? \"\" : ` ${json(output.payload)}`}`,\n }, active.conversationRefs);\n }\n } else if (output.type === \"attempt.complete\") {\n completionSeen = true;\n const body = resultText(output.result) ?? `Pi ${output.status}.`;\n await this.#event(command, { type: \"message\",\n actor: output.status === \"completed\" ? \"agent\" : \"system\", body,\n }, active.conversationRefs);\n await this.#event(command, { type: \"status\", status: output.status === \"completed\" ? \"idle\" : \"failed\",\n durationMs: Date.now() - startedAt,\n }, active.conversationRefs);\n }\n },\n });\n if (result.status === \"failed\" && result.stderr) {\n await this.#event(command, { type: \"message\", actor: \"system\", body: result.stderr.slice(0, 4_000) }, active.conversationRefs);\n }\n if (!completionSeen) await this.#event(command, { type: \"status\",\n status: result.status === \"completed\" ? \"idle\" : \"failed\", durationMs: Date.now() - startedAt,\n }, active.conversationRefs).catch(() => undefined);\n if (result.status === \"failed\") {\n const detail = (resultError(result.result) ?? result.stderr.trim()) || \"Pi container failed\";\n await this.#diagnostic(command, active, detail);\n await this.#failure(command, active, detail);\n }\n return result;\n }\n\n async #checkpoint(command: CodeRuntimeCommand): Promise<CodeRuntimeCommandResult> {\n const active = this.#active.get(command.sessionId);\n if (!active) throw new TypeError(\"Code session workspace is not active on this runtime\");\n const result = await this.#checkpoints.prepare(command, active);\n this.#active.delete(command.sessionId);\n return result;\n }\n\n async #failure(command: CodeRuntimeCommand, active: ActiveSession, value: string): Promise<void> {\n active.failure = value.slice(0, 2_000);\n if (active.acknowledged) {\n await this.options.control.reportSessionFailure(command.sessionId, active.failure).catch(() => undefined);\n }\n }\n\n async #diagnostic(command: CodeRuntimeCommand, active: ActiveSession, value: string): Promise<void> {\n const detail = value.trim().slice(0, 2_000) || \"Pi runtime failed\";\n this.options.onDiagnostic?.(detail);\n await this.#event(command, { type: \"diagnostic\", level: \"error\", message: detail },\n active.conversationRefs).catch(() => undefined);\n }\n\n async #event(command: CodeRuntimeCommand, event: CodeSessionEventData, refs: string[]): Promise<void> {\n await appendCodeRuntimeEvent(this.options.control, command, event, refs);\n }\n}\n"],"mappings":"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","names":["resolve","message","response","value","source","resolve","patch","patch","spawn","recipe","spawn","createHash","randomUUID","lstat","recipe","randomUUID","lstat","createHash","patch","recipe","patch","join","resolve","sep","RESERVED","SECRET","readFile","readdir","relative","resolve","patch","recipe","recipe","readFile","readdir","resolve","relative","record","descriptor","response","createHash","record","response"]}
|