@agentskit/harness 0.1.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -32
- package/CONTRIBUTING.md +60 -12
- package/MANIFESTO.md +23 -0
- package/README.md +276 -144
- package/capabilities/public-surface.json +668 -0
- package/compatibility/manifest.json +17 -0
- package/compatibility/migration.md +10 -0
- package/compatibility/report.json +23 -0
- package/compatibility/report.md +22 -0
- package/compatibility/rollback.md +8 -0
- package/dist/cli.js +958 -239
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1338 -122
- package/dist/index.js +2273 -353
- package/dist/index.js.map +1 -1
- package/docs/ADR-0025-portable-orchestration-controls.md +27 -0
- package/docs/ADR-0026-kernel-adapters-boundary.md +82 -0
- package/docs/GETTING-STARTED.md +18 -0
- package/docs/MODULE-BOUNDARIES.md +143 -0
- package/docs/ORGANIZATION.md +46 -0
- package/docs/TROUBLESHOOTING.md +24 -0
- package/examples/minimum-profile.mjs +27 -0
- package/package.json +52 -34
- package/release/manifest.json +14 -0
- package/release/notes.md +10 -0
- package/release/qualification.json +14 -0
- package/docs/ADR-0025-ci-dogfood.md +0 -22
- package/docs/ADR-0026-ci-evidence-artifact.md +0 -22
- package/docs/ADR-0027-portable-evidence.md +0 -19
- package/docs/ADR-0028-effective-metrics.md +0 -20
- package/docs/ADR-0029-honest-ci-preparation.md +0 -20
- package/docs/ADR-0030-agentskit-os-benchmark-bridge.md +0 -20
- package/docs/ADR-0031-real-provider-baseline.md +0 -18
- package/docs/ADR-0032-harness-equivalent-benchmark.md +0 -25
- package/docs/ADR-0033-portable-agent-gate.md +0 -25
- package/docs/ADR-0034-measurement-quality-gates.md +0 -25
- package/docs/ADR-0035-reproducible-benchmark-samples.md +0 -20
- package/docs/ADR-0036-comparable-baseline-samples.md +0 -20
- package/docs/ADR-0037-replicated-baseline-collection.md +0 -27
- package/docs/ADR-0038-end-to-end-benchmark-boundary.md +0 -28
- package/docs/ADR-0039-artifact-and-protocol-metrics.md +0 -39
- package/docs/ADR-0040-benchmark-corpus-surfaces.md +0 -32
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/errors.ts","../src/profiles.ts","../src/hash.ts","../src/files.ts","../src/types.ts","../src/config.ts","../src/state-machine.ts","../src/events.ts","../src/plugins.ts","../src/context.ts","../src/runs.ts","../src/evidence.ts","../src/source.ts","../src/verification.ts","../src/adapters/doc-bridge.ts","../src/metrics.ts","../src/coding-benchmark.ts","../src/agent.ts","../src/policy.ts","../src/runtime.ts","../src/bundle.ts"],"names":["index","resolve","isRecord","record","id","dirname","join","existsSync","readFileSync","body","mkdirSync","sourceHash","saveRun","transition","relative","now","writeFileSync","digest","rate","duration","readdirSync","sha256","surface","artifactAcceptanceRate","reviewMinutes","item","observation","rmSync","text","event","required","promisify","execFile","spawn","requireRun","sep"],"mappings":"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","file":"index.js","sourcesContent":["import type { RunState } from './types.js'\n\nexport const STATES = [\n 'CLARIFYING', 'PLANNED', 'IMPLEMENTING', 'VERIFYING',\n 'AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE',\n 'BLOCKED', 'STALE', 'CANCELLED', 'SUPERSEDED',\n] as const satisfies readonly RunState[]\n\nexport const LEGAL_TRANSITIONS = {\n CLARIFYING: ['PLANNED', 'BLOCKED', 'CANCELLED'],\n PLANNED: ['IMPLEMENTING', 'CLARIFYING', 'STALE', 'CANCELLED'],\n IMPLEMENTING: ['VERIFYING', 'CLARIFYING', 'STALE', 'CANCELLED'],\n VERIFYING: ['AWAITING_HUMAN_APPROVAL', 'BLOCKED', 'STALE', 'CANCELLED'],\n AWAITING_HUMAN_APPROVAL: ['AWAITING_AUTHORIZATION', 'COMPLETE', 'BLOCKED', 'IMPLEMENTING', 'STALE', 'CANCELLED'],\n AWAITING_AUTHORIZATION: ['COMPLETE', 'BLOCKED', 'IMPLEMENTING', 'STALE', 'CANCELLED'],\n COMPLETE: ['STALE', 'SUPERSEDED'],\n BLOCKED: ['SUPERSEDED'],\n STALE: ['SUPERSEDED', 'PLANNED'],\n CANCELLED: ['SUPERSEDED'],\n SUPERSEDED: [],\n} as const satisfies Readonly<Record<RunState, readonly RunState[]>>\n\nexport const REAL_CATEGORIES: ReadonlySet<string> = new Set(['endpoint', 'database', 'cli', 'mcp', 'ui'])\nexport const DECISIONS: ReadonlySet<string> = new Set(['approved', 'approve', 'yes', 'ok', 'rejected', 'reject', 'no'])\n","export type HarnessErrorCode = 'HARNESS_ERROR' | 'INVALID_CONFIG' | 'INVALID_INPUT' | 'INVALID_STATE' | 'POLICY_BLOCKED' | 'CLARIFYING' | 'STALE' | 'WORKTREE_DIRTY' | 'ACTIVE_RUN' | 'NO_RUN' | 'HUMAN_APPROVAL_REQUIRED'\n\nexport class HarnessError extends Error {\n public readonly code: HarnessErrorCode\n\n public constructor(message: string, code: HarnessErrorCode = 'HARNESS_ERROR') {\n super(message)\n this.name = 'HarnessError'\n this.code = code\n }\n}\n\nexport const fail = (message: string, code: HarnessErrorCode = 'HARNESS_ERROR'): never => {\n throw new HarnessError(message, code)\n}\n","import { fail } from './errors.js'\n\ntype RawRecord = Record<string, unknown>\n\nconst isRecord = (value: unknown): value is RawRecord => typeof value === 'object' && value !== null && !Array.isArray(value)\nconst record = (value: unknown, label: string): RawRecord => {\n if (!isRecord(value)) fail(`${label} must be an object.`, 'INVALID_CONFIG')\n return value as RawRecord\n}\nconst id = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} must be a non-empty string.`, 'INVALID_CONFIG')\n return value as string\n}\nconst parents = (value: unknown, label: string): string[] => value === undefined ? [] : Array.isArray(value) ? value.map((item, index) => id(item, `${label}[${index}]`)) : [id(value, label)]\n\nconst merge = (base: RawRecord, overlay: RawRecord): RawRecord => {\n const result: RawRecord = { ...base }\n for (const key of ['surfaces', 'budget', 'cleanup'] as const) {\n if (overlay[key] !== undefined) result[key] = { ...(isRecord(result[key]) ? result[key] : {}), ...record(overlay[key], `profile.${key}`) }\n }\n if (overlay['checkOverrides'] !== undefined) {\n if (!Array.isArray(overlay['checkOverrides'])) fail('profile.checkOverrides must be an array.', 'INVALID_CONFIG')\n const checks = Array.isArray(result['checks']) ? [...result['checks']] : []\n for (const [index, value] of (overlay['checkOverrides'] as unknown[]).entries()) {\n const override = record(value, `profile.checkOverrides[${index}]`)\n const checkId = id(override['id'], `profile.checkOverrides[${index}].id`)\n const checkIndex = checks.findIndex((check) => isRecord(check) && check['id'] === checkId)\n if (checkIndex < 0) fail(`profile.checkOverrides references unknown check: ${checkId}.`, 'INVALID_CONFIG')\n checks[checkIndex] = { ...(checks[checkIndex] as RawRecord), ...override }\n }\n result['checks'] = checks\n }\n return result\n}\n\nexport const resolveProfile = (root: RawRecord): RawRecord => {\n if (root['profiles'] === undefined) return root\n const profileMap = record(root['profiles'], 'profiles')\n const selected = id(root['profile'], 'profile')\n const visiting = new Set<string>()\n const visited = new Map<string, RawRecord>()\n const resolve = (name: string): RawRecord => {\n const cached = visited.get(name)\n if (cached) return cached\n if (visiting.has(name)) fail(`Profile inheritance cycle includes ${name}.`, 'INVALID_CONFIG')\n const definition = record(profileMap[name], `profiles.${name}`)\n visiting.add(name)\n let result: RawRecord = { ...root }\n for (const parent of parents(definition['extends'], `profiles.${name}.extends`)) result = merge(result, resolve(parent))\n result = merge(result, definition)\n visiting.delete(name); visited.set(name, result)\n return result\n }\n return resolve(selected)\n}\n","import { createHash } from 'node:crypto'\n\nexport const sha256 = (value: string | NodeJS.ArrayBufferView): string => createHash('sha256').update(value).digest('hex')\nexport const hashJson = (value: unknown): string => sha256(JSON.stringify(value))\n","import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs'\nimport { dirname, join, relative, resolve, sep } from 'node:path'\nimport { fail } from './errors.js'\nimport type { LoadedConfig, VerificationRun } from './types.js'\n\nexport const readJson = (path: string): unknown => JSON.parse(readFileSync(path, 'utf8')) as unknown\nexport const writeJson = (path: string, value: unknown): void => {\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, `${JSON.stringify(value, null, 2)}\\n`, 'utf8')\n}\n\nexport const pathInside = (root: string, candidate: string): boolean => {\n const rel = relative(resolve(root), resolve(candidate))\n return rel === '' || (!rel.startsWith(`..${sep}`) && rel !== '..' && !rel.startsWith(sep))\n}\n\nexport const latestPath = (stateDir: string): string => join(stateDir, 'latest.json')\nexport const runPath = (stateDir: string, runId: string): string => join(stateDir, 'runs', runId, 'run.json')\nexport const saveRun = (stateDir: string, run: VerificationRun): void => writeJson(runPath(stateDir, run.runId), run)\nexport const readRun = (stateDir: string, runId: string): VerificationRun => readJson(runPath(stateDir, runId)) as VerificationRun\n\nexport const loadLatestRun = (stateDir: string): VerificationRun | null => {\n if (!existsSync(latestPath(stateDir))) return null\n const pointer = readJson(latestPath(stateDir)) as { readonly runId: string }\n return readRun(stateDir, pointer.runId)\n}\n\nexport const setLatest = (stateDir: string, run: VerificationRun): void => writeJson(latestPath(stateDir), {\n runId: run.runId,\n path: relative(resolve(stateDir, '..', '..'), runPath(stateDir, run.runId)),\n updatedAt: new Date().toISOString(),\n})\n\nexport const cleanConfiguredArtifacts = (loaded: LoadedConfig): { readonly cleaned: readonly string[] } => {\n const roots = loaded.config.cleanup?.roots ?? []\n for (const root of roots) {\n const target = resolve(loaded.root, root)\n if (!pathInside(loaded.root, target)) fail(`Cleanup root escapes project root: ${root}`, 'INVALID_CONFIG')\n if (existsSync(target)) for (const entry of readdirSync(target)) rmSync(join(target, entry), { recursive: true, force: true })\n }\n return { cleaned: roots }\n}\n\nexport const fileContents = (path: string): string => readFileSync(path, 'utf8')\n","import type { ContextSnapshot } from './context.js'\n\nexport const SURFACE_NAMES = ['logic', 'endpoint', 'database', 'cli', 'mcp', 'ui', 'docs'] as const\nexport type SurfaceName = typeof SURFACE_NAMES[number]\n\nexport const CHECK_CATEGORIES = ['build', 'test', 'lint', ...SURFACE_NAMES, 'custom'] as const\nexport type CheckCategory = typeof CHECK_CATEGORIES[number]\n\nexport const RUN_STATES = [\n 'CLARIFYING', 'PLANNED', 'IMPLEMENTING', 'VERIFYING',\n 'AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE',\n 'BLOCKED', 'STALE', 'CANCELLED', 'SUPERSEDED',\n] as const\nexport type RunState = typeof RUN_STATES[number]\n\nexport interface SurfaceRequirement {\n readonly required: boolean\n readonly reason?: string\n}\n\nexport interface ContractScope {\n readonly inScope: readonly string[]\n readonly outOfScope: readonly string[]\n}\n\nexport interface ContractOutcome {\n readonly id: string\n readonly statement: string\n readonly checks: readonly string[]\n}\n\nexport interface TaskContract {\n readonly intent: string\n readonly scope: ContractScope\n readonly ambiguities: readonly string[]\n readonly outcomes: readonly ContractOutcome[]\n}\n\nexport interface VerificationCheck {\n readonly id: string\n readonly category: CheckCategory\n readonly command: string\n readonly required: boolean\n readonly timeoutMs: number\n readonly execution?: 'real'\n readonly capabilities?: readonly string[]\n readonly evidence: 'structured'\n}\n\nexport interface TrackingConfig {\n readonly required: boolean\n readonly target?: string\n readonly reason?: string\n}\n\nexport interface BenchmarkBinding {\n readonly suiteId: string\n readonly taskId: string\n readonly mode: 'harness'\n}\n\nexport interface VerificationConfig {\n readonly schemaVersion: 1\n readonly project: string\n readonly root?: string\n readonly stateDir?: string\n readonly profile: string\n readonly contract: TaskContract\n readonly surfaces: Readonly<Record<SurfaceName, SurfaceRequirement>>\n readonly checks: readonly VerificationCheck[]\n readonly tracking: TrackingConfig\n readonly budget?: { readonly maxDurationMs?: number }\n readonly cleanup?: { readonly roots?: readonly string[] }\n readonly benchmark?: BenchmarkBinding\n}\n\nexport interface LoadedConfig {\n readonly absolute: string\n readonly root: string\n readonly stateDir: string\n readonly config: VerificationConfig\n readonly configHash: string\n}\n\nexport interface SourceSnapshot {\n readonly revision: string\n readonly status: string\n readonly statusHash: string\n}\n\nexport interface EvidenceArtifact {\n readonly type?: string\n readonly path: string\n readonly sha256: string\n readonly viewport?: { readonly width: number; readonly height: number } | string\n}\n\nexport interface StructuredEvidence {\n readonly status: string\n readonly criteria: readonly string[]\n readonly capability?: string\n readonly artifacts?: readonly EvidenceArtifact[]\n readonly [key: string]: unknown\n}\n\nexport interface CheckResult {\n readonly id: string\n readonly category: CheckCategory\n readonly status: 'pending' | 'passed' | 'failed'\n readonly exitCode?: number\n readonly durationMs?: number\n readonly evidence?: StructuredEvidence\n readonly failures?: readonly string[]\n}\n\nexport interface RunOutcome extends ContractOutcome {\n readonly status: 'pending' | 'passed' | 'failed'\n}\n\nexport interface EvidenceReference {\n readonly checkId: string\n readonly stdout: string\n readonly stderr: string\n}\n\nexport interface VerificationRun {\n readonly type: 'agentskit-harness-run'\n readonly schemaVersion: 1\n readonly runId: string\n readonly project: string\n readonly state: RunState\n readonly configHash: string\n readonly contractHash: string\n readonly sourceRevision: string\n readonly sourceStatusHash: string\n readonly baseline: SourceSnapshot\n /** A human-approved plan, retained for backwards compatibility with v1 runs. */\n readonly contractApproval?: { readonly actor: 'human'; readonly at: string; readonly contractHash: string }\n /** An automated preparation is never an approval and cannot complete a run. */\n readonly contractPreparation?: { readonly actor: 'ci'; readonly at: string; readonly contractHash: string }\n readonly checks: readonly CheckResult[]\n readonly outcomes: readonly RunOutcome[]\n readonly transitions: readonly StateTransition[]\n readonly evidenceReferences: readonly EvidenceReference[]\n readonly contextSnapshots: readonly ContextSnapshot[]\n readonly contextHash?: string\n readonly verificationDigest?: string\n readonly benchmark?: BenchmarkBinding\n readonly supersedes?: string\n readonly dirtyBaselineAuthorized?: boolean\n readonly metrics?: { readonly totalDurationMs: number; readonly budgetExceeded: boolean }\n readonly humanApproval?: { readonly actor: 'human'; readonly at: string; readonly sourceRevision: string; readonly contractHash: string; readonly verificationDigest?: string }\n readonly authorization?: { readonly actor: 'human'; readonly at: string; readonly target: string; readonly sourceRevision: string; readonly contractHash: string; readonly verificationDigest?: string }\n}\n\nexport interface RunReconciliation {\n readonly status: 'verified'\n readonly runId: string\n readonly state: RunState\n readonly eventCount: number\n readonly headHash?: string\n readonly verificationDigest?: string\n}\n\nexport interface StateTransition {\n readonly from: RunState | null\n readonly to: RunState\n readonly at: string\n readonly actor?: string\n readonly reason?: string\n}\n","import { dirname, resolve } from 'node:path'\nimport { REAL_CATEGORIES } from './constants.js'\nimport { resolveProfile } from './profiles.js'\nimport { fail } from './errors.js'\nimport { hashJson } from './hash.js'\nimport { pathInside, readJson } from './files.js'\nimport type { CheckCategory, ContractOutcome, LoadedConfig, SurfaceName, SurfaceRequirement, TaskContract, TrackingConfig, VerificationCheck, VerificationConfig } from './types.js'\nimport { CHECK_CATEGORIES, SURFACE_NAMES } from './types.js'\n\ninterface RawRecord { readonly [key: string]: unknown }\ninterface RawScope extends RawRecord { readonly inScope?: unknown; readonly outOfScope?: unknown }\ninterface RawContract extends RawRecord { readonly intent?: unknown; readonly scope?: unknown; readonly ambiguities?: unknown; readonly outcomes?: unknown }\ninterface RawCheck extends RawRecord { readonly id?: unknown; readonly category?: unknown; readonly command?: unknown; readonly required?: unknown; readonly timeoutMs?: unknown; readonly execution?: unknown; readonly capabilities?: unknown; readonly evidence?: unknown }\ninterface RawTracking extends RawRecord { readonly required?: unknown; readonly target?: unknown; readonly reason?: unknown }\ninterface RawConfig extends RawRecord { readonly schemaVersion?: unknown; readonly project?: unknown; readonly root?: unknown; readonly stateDir?: unknown; readonly profile?: unknown; readonly profiles?: unknown; readonly contract?: unknown; readonly checks?: unknown; readonly surfaces?: unknown; readonly tracking?: unknown; readonly budget?: unknown; readonly cleanup?: unknown }\ninterface RawBudget extends RawRecord { readonly maxDurationMs?: unknown }\ninterface RawCleanup extends RawRecord { readonly roots?: unknown }\ninterface RawBenchmark extends RawRecord { readonly suiteId?: unknown; readonly taskId?: unknown; readonly mode?: unknown }\n\nconst isRecord = (value: unknown): value is RawRecord => typeof value === 'object' && value !== null && !Array.isArray(value)\nconst stringValue = (value: unknown, label: string): string => {\n if (typeof value !== 'string') return fail(`${label} is required.`, 'INVALID_CONFIG')\n const result = value.trim()\n if (!result) return fail(`${label} is required.`, 'INVALID_CONFIG')\n return result\n}\nconst stringArray = (value: unknown, label: string): string[] => {\n if (!Array.isArray(value)) fail(`${label} must be an array of non-empty strings.`, 'INVALID_CONFIG')\n const items: unknown[] = value as unknown[]\n if (!items.every((item: unknown): item is string => typeof item === 'string' && Boolean(item.trim()))) fail(`${label} must be an array of non-empty strings.`, 'INVALID_CONFIG')\n return items.map((item: unknown) => stringValue(item, label))\n}\nconst asRecord = (value: unknown, label: string): RawRecord => {\n if (!isRecord(value)) fail(`${label} must be an object.`, 'INVALID_CONFIG')\n return value as RawRecord\n}\nconst surface = (value: unknown, name: SurfaceName): SurfaceRequirement => {\n if (typeof value === 'boolean') return value ? { required: true } : { required: false, reason: `${name} is not applicable.` }\n const record = asRecord(value, `surfaces.${name}`)\n if (typeof record['required'] !== 'boolean') fail(`surfaces.${name}.required must be boolean.`, 'INVALID_CONFIG')\n if (!record['required'] && typeof record['reason'] !== 'string') fail(`surfaces.${name}.reason is required when not applicable.`, 'INVALID_CONFIG')\n return { required: record['required'] as boolean, ...(typeof record['reason'] === 'string' ? { reason: record['reason'] } : {}) }\n}\n\nconst parseCheck = (value: unknown, index: number): VerificationCheck => {\n const record = asRecord(value, `checks[${index}]`) as RawCheck\n const id = stringValue(record['id'], `checks[${index}].id`)\n const category = stringValue(record['category'], `checks[${index}].category`)\n if (!(CHECK_CATEGORIES as readonly string[]).includes(category)) fail(`checks[${index}].category is invalid.`, 'INVALID_CONFIG')\n const command = stringValue(record['command'], `checks[${index}].command`)\n if (REAL_CATEGORIES.has(category) && record['execution'] !== 'real') fail(`checks[${index}] must declare execution: real.`, 'INVALID_CONFIG')\n if (record['evidence'] !== 'structured') fail(`checks[${index}] must declare evidence: structured.`, 'INVALID_CONFIG')\n if (record['capabilities'] !== undefined && (!Array.isArray(record['capabilities']) || !record['capabilities'].every((item: unknown) => typeof item === 'string'))) fail(`checks[${index}].capabilities must be strings.`, 'INVALID_CONFIG')\n const capabilities = Array.isArray(record['capabilities']) ? record['capabilities'].filter((item): item is string => typeof item === 'string') : undefined\n if (category === 'ui' && !capabilities?.includes('real-browser')) fail(`checks[${index}] must declare real-browser.`, 'INVALID_CONFIG')\n if (category === 'ui' && !capabilities?.includes('screenshot')) fail(`checks[${index}] must declare screenshot.`, 'INVALID_CONFIG')\n if (record['required'] !== undefined && typeof record['required'] !== 'boolean') fail(`checks[${index}].required must be boolean.`, 'INVALID_CONFIG')\n if (record['timeoutMs'] !== undefined && (!Number.isInteger(record['timeoutMs']) || typeof record['timeoutMs'] !== 'number' || record['timeoutMs'] < 1)) fail(`checks[${index}].timeoutMs must be positive.`, 'INVALID_CONFIG')\n return { id, category: category as CheckCategory, command, required: record['required'] !== false, timeoutMs: typeof record['timeoutMs'] === 'number' ? record['timeoutMs'] : 120_000, ...(record['execution'] === 'real' ? { execution: 'real' } : {}), ...(capabilities ? { capabilities } : {}), evidence: 'structured' }\n}\n\nconst parseOutcome = (value: unknown, index: number, checks: readonly VerificationCheck[]): ContractOutcome => {\n const record = asRecord(value, `contract.outcomes[${index}]`)\n const id = stringValue(record['id'], `contract.outcomes[${index}].id`)\n const statement = stringValue(record['statement'], `contract.outcomes[${index}].statement`)\n const ids = stringArray(record['checks'], `contract.outcomes[${index}].checks`)\n if (ids.some((checkId) => !checks.some((check) => check.id === checkId))) fail(`contract.outcomes[${index}] references an unknown check.`, 'INVALID_CONFIG')\n return { id, statement, checks: [...new Set(ids)] }\n}\n\nexport const validateConfig = (rawValue: unknown): VerificationConfig => {\n const raw = resolveProfile(asRecord(rawValue, 'verification config')) as RawConfig\n if (raw['schemaVersion'] !== 1) fail('verification config schemaVersion must be 1.', 'INVALID_CONFIG')\n const project = stringValue(raw['project'], 'verification config project')\n const contractRaw = asRecord(raw['contract'], 'contract') as RawContract\n const rawChecks = raw['checks']\n const checks = Array.isArray(rawChecks) ? rawChecks.map(parseCheck) : fail('checks must be a non-empty array.', 'INVALID_CONFIG')\n if (!checks.length || new Set(checks.map((check) => check.id)).size !== checks.length) fail('check ids must be unique.', 'INVALID_CONFIG')\n const scopeRaw = asRecord(contractRaw['scope'], 'contract.scope') as RawScope\n const scope = { inScope: stringArray(scopeRaw['inScope'], 'contract.scope.inScope'), outOfScope: stringArray(scopeRaw['outOfScope'], 'contract.scope.outOfScope') }\n const ambiguities = stringArray(contractRaw['ambiguities'], 'contract.ambiguities')\n const rawOutcomes = contractRaw['outcomes']\n const outcomes = Array.isArray(rawOutcomes) ? rawOutcomes.map((outcome, index) => parseOutcome(outcome, index, checks)) : fail('contract.outcomes must be a non-empty array.', 'INVALID_CONFIG')\n if (!outcomes.length || new Set(outcomes.map((outcome) => outcome.id)).size !== outcomes.length) fail('outcome ids must be unique.', 'INVALID_CONFIG')\n const mapped = new Set(outcomes.flatMap((outcome) => outcome.checks))\n if (checks.some((check) => check.required && !mapped.has(check.id))) fail('every required check must map to an outcome.', 'INVALID_CONFIG')\n const rawSurfaces = isRecord(raw['surfaces']) ? raw['surfaces'] : undefined\n const surfaces = Object.fromEntries(SURFACE_NAMES.map((name) => [name, surface(rawSurfaces?.[name] ?? (name === 'logic'), name)])) as Record<SurfaceName, SurfaceRequirement>\n for (const name of SURFACE_NAMES) if (surfaces[name].required && !checks.some((check) => check.required && check.category === name)) fail(`required surface ${name} has no required check.`, 'INVALID_CONFIG')\n const trackingRaw = isRecord(raw['tracking']) ? raw['tracking'] as RawTracking : { required: false, reason: 'tracking is not configured for this run.' }\n if (trackingRaw['required'] === true && typeof trackingRaw['target'] !== 'string') fail('tracking.target is required when tracking is enabled.', 'INVALID_CONFIG')\n if (trackingRaw['required'] !== true && typeof trackingRaw['reason'] !== 'string') fail('tracking.reason is required when tracking is disabled.', 'INVALID_CONFIG')\n const budgetRaw = raw['budget'] === undefined ? undefined : asRecord(raw['budget'], 'budget') as RawBudget\n if (budgetRaw && budgetRaw['maxDurationMs'] !== undefined && (!Number.isInteger(budgetRaw['maxDurationMs']) || typeof budgetRaw['maxDurationMs'] !== 'number' || budgetRaw['maxDurationMs'] < 1)) fail('budget.maxDurationMs must be positive.', 'INVALID_CONFIG')\n const cleanupRaw = raw['cleanup'] === undefined ? undefined : asRecord(raw['cleanup'], 'cleanup') as RawCleanup\n const cleanup = cleanupRaw ? { roots: cleanupRaw['roots'] === undefined ? undefined : stringArray(cleanupRaw['roots'], 'cleanup.roots') } : undefined\n const benchmarkRaw = raw['benchmark'] === undefined ? undefined : asRecord(raw['benchmark'], 'benchmark') as RawBenchmark\n const benchmark = benchmarkRaw ? { suiteId: stringValue(benchmarkRaw['suiteId'], 'benchmark.suiteId'), taskId: stringValue(benchmarkRaw['taskId'], 'benchmark.taskId'), mode: benchmarkRaw['mode'] === 'harness' ? 'harness' as const : fail('benchmark.mode must be harness.', 'INVALID_CONFIG') } : undefined\n const contract: TaskContract = { intent: stringValue(contractRaw['intent'], 'contract.intent'), scope, ambiguities, outcomes }\n const tracking: TrackingConfig = { required: trackingRaw['required'] === true, ...(typeof trackingRaw['target'] === 'string' ? { target: trackingRaw['target'] } : {}), ...(typeof trackingRaw['reason'] === 'string' ? { reason: trackingRaw['reason'] } : {}) }\n return { schemaVersion: 1, project, ...(typeof raw['root'] === 'string' ? { root: raw['root'] } : {}), ...(typeof raw['stateDir'] === 'string' ? { stateDir: raw['stateDir'] } : {}), profile: typeof raw['profile'] === 'string' ? raw['profile'] : 'strict', contract, surfaces, checks, tracking, ...(budgetRaw ? { budget: { maxDurationMs: budgetRaw['maxDurationMs'] as number | undefined } } : {}), ...(cleanup ? { cleanup } : {}), ...(benchmark ? { benchmark } : {}) }\n}\n\nexport const loadConfig = (configPath = '.codex/verification.json'): LoadedConfig => {\n const absolute = resolve(configPath)\n const raw = readJson(absolute)\n const rawRecord = asRecord(raw, 'verification config')\n const root = resolve(dirname(absolute), typeof rawRecord['root'] === 'string' ? rawRecord['root'] : '.')\n const stateDir = resolve(root, typeof rawRecord['stateDir'] === 'string' ? rawRecord['stateDir'] : '.codex/verification')\n if (!pathInside(root, stateDir)) fail('stateDir must be inside the project root.', 'INVALID_CONFIG')\n const config = validateConfig(raw)\n return { absolute, root, stateDir, config, configHash: hashJson(config) }\n}\n","import { DECISIONS, LEGAL_TRANSITIONS, STATES } from './constants.js'\nimport { fail } from './errors.js'\nimport type { RunState, StateTransition, VerificationRun } from './types.js'\n\nexport const transition = (run: Pick<VerificationRun, 'state' | 'transitions'>, to: RunState, reason?: string, actor = 'harness'): Pick<VerificationRun, 'state' | 'transitions'> => {\n if (!STATES.includes(to)) fail(`Unknown state ${to}.`, 'INVALID_STATE')\n if (run.state !== to && !LEGAL_TRANSITIONS[run.state].some((state) => state === to)) fail(`Illegal transition ${run.state} -> ${to}.`, 'INVALID_STATE')\n const event: StateTransition = { from: run.state, to, at: new Date().toISOString(), actor, ...(reason ? { reason } : {}) }\n return { ...run, state: to, transitions: [...run.transitions, event] }\n}\n\nexport const assertHuman = (actor: string): void => {\n if (actor !== 'human') fail('This action requires --by human.', 'HUMAN_APPROVAL_REQUIRED')\n}\n\nexport const approvedDecision = (decision: string): boolean => {\n if (!DECISIONS.has(decision)) fail('Decision must be approved or rejected.', 'INVALID_INPUT')\n return ['approved', 'approve', 'yes', 'ok'].includes(decision)\n}\n","import { appendFileSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, unlinkSync, writeSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { fail } from './errors.js'\nimport { sha256 } from './hash.js'\nimport type { ContextQuery } from './context.js'\nimport type { RunState } from './types.js'\nimport type { DockerRuntimeEvidence } from './runtime.js'\n\nexport const HARNESS_EVENT_SCHEMA_VERSION = 1 as const\nexport const EVENT_LOG_GENESIS = 'GENESIS' as const\nexport const HARNESS_EVENT_TYPES = ['run.created', 'state.transitioned', 'context.attached', 'verification.completed', 'approval.recorded', 'authorization.recorded', 'session.started', 'session.resumed', 'agent.turn.started', 'policy.evaluated', 'tool.approval.requested', 'tool.approval.recorded', 'tool.requested', 'tool.execution.started', 'tool.recovery.recorded', 'tool.blocked', 'tool.completed', 'tool.failed', 'session.ended'] as const\nexport type HarnessEventType = typeof HARNESS_EVENT_TYPES[number]\nconst SESSION_EVENT_TYPES = new Set<HarnessEventType>(['session.started', 'session.resumed', 'agent.turn.started', 'policy.evaluated', 'tool.approval.requested', 'tool.approval.recorded', 'tool.requested', 'tool.execution.started', 'tool.recovery.recorded', 'tool.blocked', 'tool.completed', 'tool.failed', 'session.ended'])\n\nexport interface HarnessEventPayloads {\n readonly 'run.created': { readonly project: string; readonly baselineRevision: string; readonly baselineStatusHash: string }\n readonly 'state.transitioned': { readonly from: RunState | null; readonly to: RunState; readonly actor: string; readonly reason?: string; readonly transitionIndex: number }\n readonly 'context.attached': { readonly providerId: string; readonly sourceHash: string; readonly snapshotHash: string; readonly query: ContextQuery }\n readonly 'verification.completed': { readonly verificationDigest: string; readonly checkCount: number; readonly outcomeCount: number; readonly totalDurationMs: number; readonly budgetExceeded: boolean }\n readonly 'approval.recorded': { readonly decision: 'approved' | 'rejected'; readonly resultingState: RunState; readonly verificationDigest: string; readonly actor: 'human'; readonly sourceRevision: string; readonly contractHash: string }\n readonly 'authorization.recorded': { readonly decision: 'approved' | 'rejected'; readonly resultingState: RunState; readonly verificationDigest: string; readonly actor: 'human'; readonly target: string; readonly sourceRevision: string; readonly contractHash: string }\n readonly 'session.started': { readonly adapterId: string; readonly adapterVersion: string; readonly capabilities: readonly string[] }\n readonly 'session.resumed': { readonly recovery: 'event-log' }\n readonly 'agent.turn.started': { readonly turnId: string; readonly inputHash: string }\n readonly 'policy.evaluated': { readonly actionId: string; readonly turnId: string; readonly toolId: string; readonly decision: 'allow' | 'block' | 'approve'; readonly policyId: string; readonly reason: string }\n readonly 'tool.approval.requested': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly argumentsHash: string; readonly policyId: string; readonly reason: string }\n readonly 'tool.approval.recorded': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly argumentsHash: string; readonly decision: 'approved' | 'rejected'; readonly actor: 'human'; readonly policyId: string; readonly reason: string }\n readonly 'tool.requested': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly argumentsHash: string }\n readonly 'tool.execution.started': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly attempt: number }\n readonly 'tool.recovery.recorded': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly decision: 'retry' | 'abandon'; readonly actor: 'human'; readonly reason: string }\n readonly 'tool.blocked': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly policyId: string; readonly reason: string }\n readonly 'tool.completed': { readonly actionId: string; readonly resultHash: string; readonly durationMs: number; readonly runtimeEvidence?: DockerRuntimeEvidence }\n readonly 'tool.failed': { readonly actionId: string; readonly errorCode: string; readonly retryable: boolean; readonly durationMs: number; readonly runtimeEvidence?: DockerRuntimeEvidence }\n readonly 'session.ended': { readonly status: 'completed' | 'failed' | 'cancelled' }\n}\n\nexport type HarnessEvent<K extends HarnessEventType = HarnessEventType> = K extends HarnessEventType ? {\n readonly schemaVersion: typeof HARNESS_EVENT_SCHEMA_VERSION\n readonly runId: string\n readonly sequence: number\n readonly at: string\n readonly sourceRevision: string\n readonly configHash: string\n readonly previousHash?: string\n readonly eventHash?: string\n readonly sessionId?: string\n readonly type: K\n readonly payload: HarnessEventPayloads[K]\n } : never\n\nexport type HarnessEventInput<K extends HarnessEventType = HarnessEventType> = Omit<HarnessEvent<K>, 'schemaVersion' | 'sequence' | 'at'>\nexport type HarnessEventListener<K extends HarnessEventType> = (event: HarnessEvent<K>) => void\n\nexport interface EventStore {\n append<K extends HarnessEventType>(event: HarnessEventInput<K>): HarnessEvent<K>\n read(runId: string): readonly HarnessEvent[]\n verify(runId: string): EventLogVerification\n}\n\nexport interface EventLogVerification {\n readonly status: 'verified' | 'legacy'\n readonly eventCount: number\n readonly headHash?: string\n}\n\nexport interface EventLogLock {\n readonly pid: number\n readonly at: string\n}\n\nexport interface EventLogLockStatus {\n readonly status: 'locked' | 'unlocked'\n readonly path: string\n readonly lock?: EventLogLock\n}\n\nexport interface EventLogLockRecovery {\n readonly status: 'recovered' | 'unlocked'\n readonly path: string\n readonly lock?: EventLogLock\n}\n\nconst eventPath = (stateDir: string, runId: string): string => join(stateDir, 'runs', runId, 'events.ndjson')\nconst lockPath = (stateDir: string, runId: string): string => `${eventPath(stateDir, runId)}.lock`\nconst parseLock = (value: string): EventLogLock => {\n try {\n const record = JSON.parse(value) as Record<string, unknown>\n if (!Number.isInteger(record['pid']) || (record['pid'] as number) <= 0 || typeof record['at'] !== 'string' || !Number.isFinite(Date.parse(record['at']))) fail('Event log lock metadata is invalid.', 'HARNESS_ERROR')\n return { pid: record['pid'] as number, at: record['at'] as string }\n } catch (error) {\n if (error instanceof SyntaxError) fail('Event log lock metadata is invalid.', 'HARNESS_ERROR')\n throw error\n }\n}\nconst readLock = (stateDir: string, runId: string): EventLogLock | null => {\n const path = lockPath(stateDir, runId)\n return existsSync(path) ? parseLock(readFileSync(path, 'utf8')) : null\n}\nconst isEventType = (value: unknown): value is HarnessEventType => typeof value === 'string' && (HARNESS_EVENT_TYPES as readonly string[]).includes(value)\nconst digest = (value: string): boolean => /^[a-f0-9]{64}$/.test(value)\nconst eventBody = (event: HarnessEvent): Omit<HarnessEvent, 'eventHash'> => {\n const { eventHash: _eventHash, ...body } = event\n return body\n}\nconst eventDigest = (event: HarnessEvent): string => sha256(JSON.stringify(eventBody(event)))\n\nconst parseEvent = (value: unknown, expectedSequence: number): HarnessEvent => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('Event log contains a non-object record.', 'HARNESS_ERROR')\n const record = value as Record<string, unknown>\n if (record['schemaVersion'] !== HARNESS_EVENT_SCHEMA_VERSION || typeof record['runId'] !== 'string' || typeof record['sequence'] !== 'number' || record['sequence'] !== expectedSequence || typeof record['at'] !== 'string' || typeof record['sourceRevision'] !== 'string' || typeof record['configHash'] !== 'string' || !isEventType(record['type']) || typeof record['payload'] !== 'object' || record['payload'] === null || (record['sessionId'] !== undefined && (typeof record['sessionId'] !== 'string' || !record['sessionId'].trim())) || (SESSION_EVENT_TYPES.has(record['type']) && typeof record['sessionId'] !== 'string')) fail('Event log is invalid or out of order.', 'HARNESS_ERROR')\n const hasPreviousHash = record['previousHash'] !== undefined\n const hasEventHash = record['eventHash'] !== undefined\n if (hasPreviousHash !== hasEventHash || (hasPreviousHash && (typeof record['previousHash'] !== 'string' || (record['previousHash'] !== EVENT_LOG_GENESIS && !digest(record['previousHash'] as string)) || typeof record['eventHash'] !== 'string' || !digest(record['eventHash'] as string)))) fail('Event log integrity metadata is invalid.', 'HARNESS_ERROR')\n return record as unknown as HarnessEvent\n}\n\nconst validateChain = (events: readonly HarnessEvent[]): EventLogVerification => {\n const current = events.filter((event) => event.eventHash !== undefined)\n if (!current.length) return { status: 'legacy', eventCount: events.length }\n if (current.length !== events.length) fail('Event log mixes legacy and hashed records.', 'HARNESS_ERROR')\n let previous: string = EVENT_LOG_GENESIS\n for (const event of events) {\n const eventHash = event.eventHash ?? fail('Event log hash chain is invalid.', 'HARNESS_ERROR')\n if (event.previousHash !== previous || eventHash !== eventDigest(event)) fail('Event log hash chain is invalid.', 'HARNESS_ERROR')\n previous = eventHash\n }\n return { status: 'verified', eventCount: events.length, ...(events.length ? { headHash: previous } : {}) }\n}\n\nexport class FileEventStore implements EventStore {\n public constructor(private readonly stateDir: string) {}\n\n public append<K extends HarnessEventType>(event: HarnessEventInput<K>): HarnessEvent<K> {\n if (!event.runId.trim()) fail('Event runId is required.', 'INVALID_INPUT')\n if (!event.sourceRevision.trim() || !event.configHash.trim()) fail('Event sourceRevision and configHash are required.', 'INVALID_INPUT')\n if (!isEventType(event.type)) fail('Event type is invalid.', 'INVALID_INPUT')\n if (SESSION_EVENT_TYPES.has(event.type) && (!event.sessionId || !event.sessionId.trim())) fail('Session events require a sessionId.', 'INVALID_INPUT')\n if (event.sessionId !== undefined && !event.sessionId.trim()) fail('Event sessionId cannot be empty.', 'INVALID_INPUT')\n const path = eventPath(this.stateDir, event.runId)\n const lock = lockPath(this.stateDir, event.runId)\n mkdirSync(join(this.stateDir, 'runs', event.runId), { recursive: true })\n let lockFd: number\n try { lockFd = openSync(lock, 'wx'); writeSync(lockFd, JSON.stringify({ pid: process.pid, at: new Date().toISOString() })) } catch (error) { if ((error as NodeJS.ErrnoException).code === 'EEXIST') fail('Event log is busy; retry the operation.', 'HARNESS_ERROR'); throw error }\n try {\n const events = this.readUnlocked(event.runId)\n const previous = events.at(-1)\n const body = { schemaVersion: HARNESS_EVENT_SCHEMA_VERSION, sequence: events.length + 1, at: new Date().toISOString(), runId: event.runId, sourceRevision: event.sourceRevision, configHash: event.configHash, ...(event.sessionId ? { sessionId: event.sessionId } : {}), ...(previous?.eventHash ? { previousHash: previous.eventHash } : events.length ? {} : { previousHash: EVENT_LOG_GENESIS }), type: event.type, payload: event.payload } as HarnessEvent<K>\n const record = (events.length && !previous?.eventHash ? body : { ...body, eventHash: eventDigest(body) }) as HarnessEvent<K>\n appendFileSync(path, `${JSON.stringify(record)}\\n`, 'utf8')\n return record\n } finally {\n closeSync(lockFd)\n unlinkSync(lock)\n }\n }\n\n private readUnlocked(runId: string): readonly HarnessEvent[] {\n const path = eventPath(this.stateDir, runId)\n if (!existsSync(path)) return []\n const events = readFileSync(path, 'utf8').split(/\\r?\\n/).map((line) => line.trim()).filter(Boolean).map((line, index) => {\n try { return parseEvent(JSON.parse(line) as unknown, index + 1) } catch (error) { if (error instanceof SyntaxError) fail('Event log contains invalid JSON.', 'HARNESS_ERROR'); throw error }\n })\n validateChain(events)\n return events\n }\n\n public read(runId: string): readonly HarnessEvent[] {\n if (existsSync(lockPath(this.stateDir, runId))) fail('Event log is busy; retry the operation.', 'HARNESS_ERROR')\n return this.readUnlocked(runId)\n }\n\n public verify(runId: string): EventLogVerification {\n return validateChain(this.read(runId))\n }\n}\n\nexport const inspectEventLogLock = (stateDir: string, runId: string): EventLogLockStatus => {\n const path = lockPath(stateDir, runId)\n const lock = readLock(stateDir, runId)\n return lock ? { status: 'locked', path, lock } : { status: 'unlocked', path }\n}\n\nexport const recoverEventLogLock = ({ stateDir, runId, actor, maxAgeMs = 300_000 }: { readonly stateDir: string; readonly runId: string; readonly actor: string; readonly maxAgeMs?: number }): EventLogLockRecovery => {\n if (actor !== 'human') fail('Event log lock recovery requires a human actor.', 'HUMAN_APPROVAL_REQUIRED')\n if (!Number.isInteger(maxAgeMs) || maxAgeMs < 0) fail('maxAgeMs must be a non-negative integer.', 'INVALID_INPUT')\n const path = lockPath(stateDir, runId)\n const lock = readLock(stateDir, runId)\n if (!lock) return { status: 'unlocked', path }\n const ageMs = Date.now() - Date.parse(lock.at)\n if (ageMs < maxAgeMs) fail('Event log lock is not old enough to recover.', 'HARNESS_ERROR')\n try { process.kill(lock.pid, 0) } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ESRCH') fail('Event log lock owner cannot be proven dead.', 'HARNESS_ERROR')\n unlinkSync(path)\n return { status: 'recovered', path, lock }\n }\n return fail('Event log lock owner is still alive.', 'HARNESS_ERROR')\n}\n","import { fail } from './errors.js'\nimport type { HarnessEvent, HarnessEventListener, HarnessEventType } from './events.js'\n\nexport const HARNESS_PLUGIN_API_VERSION = 1 as const\nexport type Disposer = () => void\n\nexport interface PluginSlot<T> { readonly id: string }\nexport const createPluginSlot = <T>(id: string): PluginSlot<T> => {\n if (!id.trim()) fail('Plugin slot id is required.', 'INVALID_INPUT')\n return { id }\n}\n\nexport interface HarnessPluginContext {\n readonly apiVersion: typeof HARNESS_PLUGIN_API_VERSION\n register<T>(slot: PluginSlot<T>, id: string, value: T): Disposer\n effect(disposer: Disposer): void\n on<K extends HarnessEventType>(type: K, listener: HarnessEventListener<K>): Disposer\n}\n\nexport interface HarnessPlugin {\n readonly id: string\n readonly version: string\n readonly apiVersion: typeof HARNESS_PLUGIN_API_VERSION\n readonly requires?: readonly string[]\n readonly apply: (context: HarnessPluginContext) => void | Disposer\n}\n\nexport interface PluginContribution<T> { readonly pluginId: string; readonly id: string; readonly value: T }\n\nexport interface PluginRegistry {\n register(plugin: HarnessPlugin): void\n mount(): void\n emit<K extends HarnessEventType>(event: HarnessEvent<K>): void\n on<K extends HarnessEventType>(type: K, listener: HarnessEventListener<K>): Disposer\n contributions<T>(slot: PluginSlot<T>): readonly PluginContribution<T>[]\n dispose(): void\n}\n\nconst validId = (value: string, label: string): string => {\n if (!value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value\n}\n\nexport const createPluginRegistry = (): PluginRegistry => {\n const plugins = new Map<string, HarnessPlugin>()\n const contributions = new Map<string, Map<string, PluginContribution<unknown>>>()\n const listeners = new Map<HarnessEventType, Set<HarnessEventListener<HarnessEventType>>>()\n const cleanups: Disposer[] = []\n let mounted = false\n let disposed = false\n\n const ensureOpen = (): void => { if (disposed) fail('Plugin registry has been disposed.', 'HARNESS_ERROR') }\n const removeContribution = (slot: PluginSlot<unknown>, id: string, pluginId: string): void => {\n const entries = contributions.get(slot.id)\n if (entries?.get(id)?.pluginId === pluginId) entries.delete(id)\n }\n const registerContribution = <T>(pluginId: string, slot: PluginSlot<T>, id: string, value: T): Disposer => {\n const entries = contributions.get(slot.id) ?? new Map<string, PluginContribution<unknown>>()\n if (entries.has(id)) fail(`Plugin contribution already exists: ${slot.id}/${id}.`, 'INVALID_INPUT')\n entries.set(id, { pluginId, id, value })\n contributions.set(slot.id, entries)\n const disposer = (): void => removeContribution(slot as PluginSlot<unknown>, id, pluginId)\n cleanups.push(disposer)\n return disposer\n }\n const order = (): HarnessPlugin[] => {\n const result: HarnessPlugin[] = []\n const visiting = new Set<string>()\n const visited = new Set<string>()\n const visit = (id: string): void => {\n if (visited.has(id)) return\n if (visiting.has(id)) fail(`Plugin dependency cycle includes ${id}.`, 'INVALID_INPUT')\n const candidate = plugins.get(id)\n if (!candidate) fail(`Plugin dependency is missing: ${id}.`, 'INVALID_INPUT')\n const plugin = candidate as HarnessPlugin\n visiting.add(id)\n for (const dependency of plugin.requires ?? []) visit(dependency)\n visiting.delete(id); visited.add(id); result.push(plugin)\n }\n for (const id of plugins.keys()) visit(id)\n return result\n }\n const registry: PluginRegistry = {\n register(plugin) {\n ensureOpen()\n if (mounted) fail('Plugins cannot be registered after mount.', 'HARNESS_ERROR')\n validId(plugin.id, 'Plugin id'); validId(plugin.version, 'Plugin version')\n if (plugin.apiVersion !== HARNESS_PLUGIN_API_VERSION) fail(`Unsupported plugin API version: ${String(plugin.apiVersion)}.`, 'INVALID_INPUT')\n if (plugins.has(plugin.id)) fail(`Plugin already registered: ${plugin.id}.`, 'INVALID_INPUT')\n plugins.set(plugin.id, plugin)\n },\n mount() {\n ensureOpen()\n if (mounted) return\n try {\n for (const plugin of order()) {\n const context: HarnessPluginContext = {\n apiVersion: HARNESS_PLUGIN_API_VERSION,\n register: (slot, id, value) => registerContribution(plugin.id, slot, validId(id, 'Plugin contribution id'), value),\n effect: (disposer) => { cleanups.push(disposer) },\n on: (type, listener) => {\n const handlers = listeners.get(type) ?? new Set<HarnessEventListener<HarnessEventType>>()\n handlers.add(listener as HarnessEventListener<HarnessEventType>); listeners.set(type, handlers)\n const disposer = (): void => { handlers.delete(listener as HarnessEventListener<HarnessEventType>) }\n cleanups.push(disposer); return disposer\n },\n }\n const cleanup = plugin.apply(context)\n if (cleanup) cleanups.push(cleanup)\n }\n mounted = true\n } catch (error) { registry.dispose(); throw error }\n },\n emit(event) {\n ensureOpen()\n for (const listener of listeners.get(event.type) ?? []) listener(event as HarnessEvent<HarnessEventType>)\n },\n on(type, listener) {\n ensureOpen()\n const handlers = listeners.get(type) ?? new Set<HarnessEventListener<HarnessEventType>>()\n handlers.add(listener as HarnessEventListener<HarnessEventType>); listeners.set(type, handlers)\n return (): void => { handlers.delete(listener as HarnessEventListener<HarnessEventType>) }\n },\n contributions: <T>(slot: PluginSlot<T>): readonly PluginContribution<T>[] => [...(contributions.get(slot.id)?.values() ?? [])] as readonly PluginContribution<T>[],\n dispose() {\n if (disposed) return\n let firstError: unknown\n for (const cleanup of cleanups.splice(0).reverse()) { try { cleanup() } catch (error) { firstError ??= error } }\n contributions.clear(); listeners.clear(); disposed = true; mounted = false\n if (firstError) throw firstError\n },\n }\n return registry\n}\n","import { readFileSync } from 'node:fs'\nimport { createPluginSlot } from './plugins.js'\nimport { hashJson } from './hash.js'\nimport { fail } from './errors.js'\n\nexport interface ContextQuery {\n readonly query: string\n readonly scope?: readonly string[]\n readonly sourceRevision?: string\n}\n\nexport interface ContextReference {\n readonly id: string\n readonly uri: string\n readonly title?: string\n readonly version?: string\n readonly contentHash?: string\n}\n\nexport interface ContextSnapshot {\n readonly providerId: string\n readonly query: ContextQuery\n readonly references: readonly ContextReference[]\n readonly sourceHash: string\n readonly snapshotHash: string\n readonly resolvedAt: string\n}\n\nexport interface ContextProvider {\n readonly id: string\n readonly version: string\n readonly resolve: (query: ContextQuery) => Promise<ContextSnapshot>\n}\n\nexport const hashContextSnapshot = ({ providerId, query, references, sourceHash }: Pick<ContextSnapshot, 'providerId' | 'query' | 'references' | 'sourceHash'>): string => hashJson({ providerId, query, references, sourceHash })\nexport const hashContextSnapshots = (snapshots: readonly ContextSnapshot[]): string => hashJson(snapshots.map(({ providerId, query, references, sourceHash, snapshotHash }) => ({ providerId, query, references, sourceHash, snapshotHash })))\n\nconst record = (value: unknown, label: string): Record<string, unknown> => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail(`${label} must be an object.`, 'INVALID_INPUT')\n return value as Record<string, unknown>\n}\nconst requiredString = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n return value as string\n}\nexport const validateContextSnapshot = (value: unknown, index = 0): ContextSnapshot => {\n const raw = record(value, `context snapshot ${index}`)\n const rawQuery = record(raw['query'], `context snapshot ${index}.query`)\n const rawReferences = raw['references']\n if (!Array.isArray(rawReferences)) fail(`context snapshot ${index}.references must be an array.`, 'INVALID_INPUT')\n const references = (rawReferences as unknown[]).map((reference: unknown, referenceIndex: number) => {\n const rawReference = record(reference, `context snapshot ${index}.references[${referenceIndex}]`)\n return {\n id: requiredString(rawReference['id'], `context snapshot ${index}.references[${referenceIndex}].id`),\n uri: requiredString(rawReference['uri'], `context snapshot ${index}.references[${referenceIndex}].uri`),\n ...(typeof rawReference['title'] === 'string' ? { title: rawReference['title'] } : {}),\n ...(typeof rawReference['version'] === 'string' ? { version: rawReference['version'] } : {}),\n ...(typeof rawReference['contentHash'] === 'string' ? { contentHash: rawReference['contentHash'] } : {}),\n }\n })\n const scope = rawQuery['scope'] === undefined ? undefined : Array.isArray(rawQuery['scope']) && rawQuery['scope'].every((item) => typeof item === 'string') ? rawQuery['scope'] : fail(`context snapshot ${index}.query.scope must be an array of strings.`, 'INVALID_INPUT')\n const snapshot = {\n providerId: requiredString(raw['providerId'], `context snapshot ${index}.providerId`),\n query: { query: requiredString(rawQuery['query'], `context snapshot ${index}.query.query`), ...(scope ? { scope } : {}), ...(typeof rawQuery['sourceRevision'] === 'string' ? { sourceRevision: rawQuery['sourceRevision'] } : {}) },\n references,\n sourceHash: requiredString(raw['sourceHash'], `context snapshot ${index}.sourceHash`),\n snapshotHash: requiredString(raw['snapshotHash'], `context snapshot ${index}.snapshotHash`),\n resolvedAt: requiredString(raw['resolvedAt'], `context snapshot ${index}.resolvedAt`),\n }\n if (snapshot.snapshotHash !== hashContextSnapshot(snapshot)) fail(`context snapshot ${index}.snapshotHash does not match its contents.`, 'INVALID_INPUT')\n return snapshot\n}\n\nexport const readContextSnapshots = (path: string): readonly ContextSnapshot[] => {\n const value = JSON.parse(readFileSync(path, 'utf8')) as unknown\n return (Array.isArray(value) ? value : [value]).map((snapshot, index) => validateContextSnapshot(snapshot, index))\n}\n\nexport const validateContextSnapshots = (snapshots: readonly ContextSnapshot[]): readonly ContextSnapshot[] => snapshots.map((snapshot, index) => validateContextSnapshot(snapshot, index))\n\nexport const CONTEXT_PROVIDER_SLOT = createPluginSlot<ContextProvider>('context.provider')\n","import { hashJson } from './hash.js'\nimport { saveRun as persistRun, setLatest } from './files.js'\nimport { FileEventStore } from './events.js'\nimport { hashContextSnapshots } from './context.js'\nimport type { ContextSnapshot } from './context.js'\nimport type { LoadedConfig, SourceSnapshot, VerificationRun } from './types.js'\n\nconst now = (): string => new Date().toISOString()\nconst newRunId = (): string => `${Date.now()}-${process.pid}-${Math.random().toString(36).slice(2, 8)}`\n\nexport const saveRun = (stateDir: string, run: VerificationRun): void => {\n persistRun(stateDir, run)\n const store = new FileEventStore(stateDir)\n const events = store.read(run.runId)\n if (!events.some((event) => event.type === 'run.created')) store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type: 'run.created', payload: { project: run.project, baselineRevision: run.baseline.revision, baselineStatusHash: run.baseline.statusHash } })\n const loggedTransitions = new Set(events.filter((event) => event.type === 'state.transitioned').map((event) => event.payload.transitionIndex))\n run.transitions.forEach((transition, transitionIndex) => {\n if (loggedTransitions.has(transitionIndex)) return\n store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type: 'state.transitioned', payload: { from: transition.from, to: transition.to, actor: transition.actor ?? 'harness', ...(transition.reason ? { reason: transition.reason } : {}), transitionIndex } })\n })\n const loggedSnapshots = new Set(events.filter((event) => event.type === 'context.attached').map((event) => event.payload.snapshotHash))\n for (const snapshot of run.contextSnapshots ?? []) {\n if (loggedSnapshots.has(snapshot.snapshotHash)) continue\n store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type: 'context.attached', payload: { providerId: snapshot.providerId, sourceHash: snapshot.sourceHash, snapshotHash: snapshot.snapshotHash, query: snapshot.query } })\n }\n}\nexport { setLatest }\n\nexport const createRun = async ({ loaded, baseline, supersedes, dirtyBaselineAuthorized, contextSnapshots = [], planner = 'human' }: { readonly loaded: LoadedConfig; readonly baseline: SourceSnapshot; readonly supersedes?: string; readonly dirtyBaselineAuthorized?: boolean; readonly contextSnapshots?: readonly ContextSnapshot[]; readonly planner?: 'human' | 'ci' }): Promise<VerificationRun> => {\n const contractHash = hashJson(loaded.config.contract)\n const run: VerificationRun = {\n type: 'agentskit-harness-run', schemaVersion: 1, runId: newRunId(), project: loaded.config.project, state: 'PLANNED', configHash: loaded.configHash, contractHash, sourceRevision: baseline.revision, sourceStatusHash: baseline.statusHash, baseline,\n ...(planner === 'human' ? { contractApproval: { actor: 'human' as const, at: now(), contractHash } } : { contractPreparation: { actor: 'ci' as const, at: now(), contractHash } }),\n checks: loaded.config.checks.map(({ id, category }) => ({ id, category, status: 'pending' })), contextSnapshots, ...(contextSnapshots.length ? { contextHash: hashContextSnapshots(contextSnapshots) } : {}), ...(loaded.config.benchmark ? { benchmark: loaded.config.benchmark } : {}),\n outcomes: loaded.config.contract.outcomes.map(({ id, statement, checks }) => ({ id, statement, checks, status: 'pending' })),\n transitions: [{ from: null, to: 'PLANNED', at: now(), actor: planner }], evidenceReferences: [],\n ...(supersedes ? { supersedes } : {}), ...(dirtyBaselineAuthorized ? { dirtyBaselineAuthorized: true } : {}),\n }\n saveRun(loaded.stateDir, run); setLatest(loaded.stateDir, run); return run\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { sha256 } from './hash.js'\nimport { pathInside } from './files.js'\nimport type { EvidenceArtifact, StructuredEvidence, VerificationCheck } from './types.js'\n\nexport const parseStructuredEvidence = (stdout: string): StructuredEvidence | null => {\n for (const line of stdout.split(/\\r?\\n/).map((item) => item.trim()).filter(Boolean).reverse()) {\n try {\n const value: unknown = JSON.parse(line)\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof (value as Record<string, unknown>)['status'] === 'string') return value as StructuredEvidence\n } catch {}\n }\n return null\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null && !Array.isArray(value)\nconst viewportValid = (viewport: unknown): boolean => typeof viewport === 'string' || (isRecord(viewport) && typeof viewport['width'] === 'number' && viewport['width'] > 0 && typeof viewport['height'] === 'number' && viewport['height'] > 0)\n\nexport const validateEvidence = (root: string, check: VerificationCheck, evidence: StructuredEvidence | null, outcomeIds: readonly string[]): string[] => {\n if (!evidence || evidence.status !== 'passed') return ['structured evidence did not pass']\n if (!Array.isArray(evidence.criteria) || !evidence.criteria.every((id): id is string => typeof id === 'string') || outcomeIds.some((id) => !evidence.criteria.includes(id))) return [`evidence must map criteria: ${outcomeIds.join(', ')}`]\n const failures: string[] = []\n if (check.category === 'ui') {\n if (evidence.capability !== 'real-browser') failures.push('UI evidence must declare capability real-browser')\n if (!Array.isArray(evidence.artifacts) || evidence.artifacts.length === 0) failures.push('UI evidence requires screenshot artifacts')\n }\n const artifacts = Array.isArray(evidence.artifacts) ? evidence.artifacts : []\n for (const artifactValue of artifacts) {\n if (!isRecord(artifactValue) || typeof artifactValue['path'] !== 'string' || typeof artifactValue['sha256'] !== 'string') {\n failures.push('artifact requires string path and sha256')\n continue\n }\n const artifact = artifactValue as unknown as EvidenceArtifact\n const artifactPath = join(root, artifact.path)\n if (!pathInside(root, artifactPath)) failures.push(`artifact path escapes project root: ${artifact.path}`)\n else if (!existsSync(artifactPath) || sha256(readFileSync(artifactPath)) !== artifact.sha256) failures.push(`artifact hash mismatch: ${artifact.path}`)\n if (check.category === 'ui' && (artifact.type !== 'screenshot' || !viewportValid(artifact.viewport))) failures.push(`UI artifact requires type=screenshot and viewport: ${artifact.path}`)\n }\n return failures\n}\n","import { execFile } from 'node:child_process'\nimport { lstatSync, readFileSync } from 'node:fs'\nimport { relative, resolve } from 'node:path'\nimport { promisify } from 'node:util'\nimport { hashJson, sha256 } from './hash.js'\nimport type { SourceSnapshot } from './types.js'\n\nconst execFileAsync = promisify(execFile)\nconst git = async (root: string, args: readonly string[]): Promise<string> => {\n try { return (await execFileAsync('git', ['-C', root, ...args], { encoding: 'utf8' })).stdout.trim() } catch { return '' }\n}\n\nexport const sourceSnapshot = async (root: string, stateDir: string): Promise<SourceSnapshot> => {\n const revision = await git(root, ['rev-parse', 'HEAD'])\n const stateRelative = relative(root, stateDir).replaceAll('\\\\', '/')\n const pathspec = ['--', '.']\n if (stateRelative && stateRelative !== '..' && !stateRelative.startsWith('../')) pathspec.push(`:(exclude)${stateRelative}`)\n const status = await git(root, ['status', '--porcelain=v1', '--untracked-files=all', ...pathspec])\n const diff = await git(root, ['diff', '--no-ext-diff', '--binary', 'HEAD', ...pathspec])\n const untrackedPaths = (await git(root, ['ls-files', '--others', '--exclude-standard', '-z'])).split('\\0').filter(Boolean).filter((path) => !stateRelative || (path !== stateRelative && !path.startsWith(`${stateRelative}/`)))\n const untracked = untrackedPaths.flatMap((path) => {\n const absolute = resolve(root, path)\n try { return lstatSync(absolute).isFile() ? [{ path, hash: sha256(readFileSync(absolute)) }] : [] } catch { return [] }\n })\n const fingerprint = { revision, status, diff, untracked }\n return { revision: revision || `content:${hashJson(fingerprint)}`, status, statusHash: hashJson(fingerprint) }\n}\n","import { spawn } from 'node:child_process'\nimport { mkdirSync, writeFileSync } from 'node:fs'\nimport { join, relative } from 'node:path'\nimport { createRun, saveRun, setLatest } from './runs.js'\nimport { loadConfig } from './config.js'\nimport { fail } from './errors.js'\nimport { parseStructuredEvidence, validateEvidence } from './evidence.js'\nimport { assertHuman, approvedDecision, transition } from './state-machine.js'\nimport { sourceSnapshot } from './source.js'\nimport { cleanConfiguredArtifacts, loadLatestRun, readRun } from './files.js'\nimport { validateContextSnapshots } from './context.js'\nimport { hashJson } from './hash.js'\nimport type { ContextSnapshot } from './context.js'\nimport type { CheckResult, LoadedConfig, VerificationCheck, VerificationRun } from './types.js'\nimport { FileEventStore } from './events.js'\n\nconst now = (): string => new Date().toISOString()\nconst requireRun = (run: VerificationRun | null): VerificationRun => run ?? fail('No verification run exists.', 'NO_RUN')\nconst verificationProjection = (run: Pick<VerificationRun, 'checks' | 'outcomes' | 'metrics'>): { readonly checks: VerificationRun['checks']; readonly outcomes: VerificationRun['outcomes']; readonly metrics: VerificationRun['metrics'] } => ({ checks: run.checks, outcomes: run.outcomes, metrics: run.metrics })\nconst verificationDigest = (run: Pick<VerificationRun, 'checks' | 'outcomes' | 'metrics'>): string => hashJson(verificationProjection(run))\n\ninterface CommandResult { readonly exitCode: number; readonly timedOut: boolean; readonly stdout: string; readonly stderr: string; readonly durationMs: number }\n\nconst runCommand = (check: VerificationCheck, cwd: string): Promise<CommandResult> => new Promise((resolveResult) => {\n const started = Date.now()\n const child = spawn(check.command, { cwd, shell: true, env: process.env })\n let stdout = ''\n let stderr = ''\n let timedOut = false\n const timer = setTimeout(() => { timedOut = true; child.kill('SIGTERM') }, check.timeoutMs)\n child.stdout.on('data', (chunk: Buffer) => { stdout += chunk.toString() })\n child.stderr.on('data', (chunk: Buffer) => { stderr += chunk.toString() })\n child.on('close', (exitCode) => { clearTimeout(timer); resolveResult({ exitCode: exitCode ?? 1, timedOut, stdout, stderr, durationMs: Date.now() - started }) })\n})\n\nconst currentBinding = async (loaded: LoadedConfig): Promise<{ readonly source: Awaited<ReturnType<typeof sourceSnapshot>>; readonly configHash: string }> => ({ source: await sourceSnapshot(loaded.root, loaded.stateDir), configHash: loaded.configHash })\n\nconst staleRun = (loaded: LoadedConfig, run: VerificationRun, reason: string): never => {\n const stale = transition(run, 'STALE', reason)\n saveRun(loaded.stateDir, stale as VerificationRun); setLatest(loaded.stateDir, stale as VerificationRun)\n return fail(reason, 'STALE')\n}\n\nconst isFresh = async (loaded: LoadedConfig, run: VerificationRun): Promise<boolean> => {\n const current = await currentBinding(loaded)\n return current.configHash === run.configHash && current.source.revision === run.sourceRevision && current.source.statusHash === run.sourceStatusHash\n}\n\nexport const planRun = async ({ configPath, decision, actor = 'human', allowDirty = false, contextSnapshots = [] }: { readonly configPath: string; readonly decision: string; readonly actor?: string; readonly allowDirty?: boolean; readonly contextSnapshots?: readonly ContextSnapshot[] }): Promise<VerificationRun> => {\n const automatedPreparation = actor === 'ci' && decision === 'prepared'\n if (!automatedPreparation) {\n assertHuman(actor)\n if (!approvedDecision(decision)) fail('Contract was not approved.', 'CLARIFYING')\n }\n const loaded = loadConfig(configPath)\n if (loaded.config.contract.ambiguities.length) fail(`Unresolved ambiguities remain: ${loaded.config.contract.ambiguities.join(' | ')}`, 'CLARIFYING')\n const validatedContextSnapshots = validateContextSnapshots(contextSnapshots)\n const baseline = await sourceSnapshot(loaded.root, loaded.stateDir)\n const configRelative = relative(loaded.root, loaded.absolute)\n const meaningful = baseline.status.split('\\n').filter(Boolean).filter((line) => !line.endsWith(` ${configRelative}`) && !line.endsWith(` ${configRelative.replaceAll('/', '\\\\')}`))\n if (meaningful.length && !allowDirty) fail(`Worktree is dirty before planning:\\n${meaningful.join('\\n')}\\nUse --allow-dirty only with explicit human authorization.`, 'WORKTREE_DIRTY')\n const previous = loadLatestRun(loaded.stateDir)\n if (previous && !['STALE', 'SUPERSEDED'].includes(previous.state)) fail(`An active run already exists: ${previous.runId} (${previous.state}).`, 'ACTIVE_RUN')\n return createRun({ loaded, baseline, supersedes: previous?.runId, dirtyBaselineAuthorized: allowDirty, contextSnapshots: validatedContextSnapshots, planner: automatedPreparation ? 'ci' : 'human' })\n}\n\nexport const startRun = (loaded: LoadedConfig): VerificationRun => {\n const run = requireRun(loadLatestRun(loaded.stateDir))\n const next = transition(run, 'IMPLEMENTING', 'Implementation started.', 'agent') as VerificationRun\n saveRun(loaded.stateDir, next); setLatest(loaded.stateDir, next); return next\n}\n\nexport const cancelRun = async ({ configPath, runId, reason = 'Run cancelled by a human.', actor = 'human' }: { readonly configPath: string; readonly runId?: string; readonly reason?: string; readonly actor?: string }): Promise<VerificationRun> => {\n assertHuman(actor)\n const loaded = loadConfig(configPath)\n const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n const next = transition(run, 'CANCELLED', reason, 'human') as VerificationRun\n saveRun(loaded.stateDir, next); setLatest(loaded.stateDir, next); return next\n}\n\nexport const verifyRun = async ({ configPath }: { readonly configPath: string }): Promise<VerificationRun> => {\n const loaded = loadConfig(configPath)\n const run = requireRun(loadLatestRun(loaded.stateDir))\n if (!['IMPLEMENTING', 'VERIFYING'].includes(run.state)) {\n if (['AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE'].includes(run.state) && !(await isFresh(loaded, run))) staleRun(loaded, run, 'Run is stale because source or contract changed.')\n fail(`Cannot verify from ${run.state}.`, 'INVALID_STATE')\n }\n if (run.configHash !== loaded.configHash) staleRun(loaded, run, 'Run is stale because the verification contract changed.')\n const binding = await currentBinding(loaded)\n let current = { ...transition(run, 'VERIFYING', 'Verification started.', 'agent'), sourceRevision: binding.source.revision, sourceStatusHash: binding.source.statusHash } as VerificationRun\n saveRun(loaded.stateDir, current)\n const checkDir = join(loaded.stateDir, 'runs', current.runId, 'checks')\n mkdirSync(checkDir, { recursive: true })\n const outcomesByCheck = new Map(loaded.config.checks.map((check) => [check.id, loaded.config.contract.outcomes.filter((outcome) => outcome.checks.includes(check.id)).map((outcome) => outcome.id)]))\n let totalDurationMs = 0\n for (const check of loaded.config.checks) {\n const result = await runCommand(check, loaded.root)\n totalDurationMs += result.durationMs\n const stdoutPath = join(checkDir, `${check.id}.stdout`)\n const stderrPath = join(checkDir, `${check.id}.stderr`)\n writeFileSync(stdoutPath, result.stdout, 'utf8'); writeFileSync(stderrPath, result.stderr, 'utf8')\n const evidence = parseStructuredEvidence(result.stdout)\n const failures = result.exitCode === 0 && !result.timedOut && evidence ? validateEvidence(loaded.root, check, evidence, outcomesByCheck.get(check.id) ?? []) : [result.timedOut ? 'check timed out' : result.exitCode !== 0 ? `exit code ${result.exitCode}` : 'missing final structured evidence']\n const nextCheck: CheckResult = { id: check.id, category: check.category, status: failures.length ? 'failed' : 'passed', exitCode: result.exitCode, durationMs: result.durationMs, ...(evidence ? { evidence } : {}), ...(failures.length ? { failures } : {}) }\n current = { ...current, evidenceReferences: [...current.evidenceReferences, { checkId: check.id, stdout: relative(loaded.stateDir, stdoutPath), stderr: relative(loaded.stateDir, stderrPath) }], checks: current.checks.map((item) => item.id === check.id ? nextCheck : item) } as VerificationRun\n saveRun(loaded.stateDir, current)\n }\n const statuses = new Map(current.checks.map((check) => [check.id, check.status]))\n const budgetExceeded = loaded.config.budget?.maxDurationMs !== undefined && totalDurationMs > loaded.config.budget.maxDurationMs\n const allPassed = loaded.config.checks.every((check) => statuses.get(check.id) === 'passed') && !budgetExceeded\n current = { ...current, outcomes: current.outcomes.map((outcome) => ({ ...outcome, status: outcome.checks.every((id) => statuses.get(id) === 'passed') ? 'passed' : 'failed' })), metrics: { totalDurationMs, budgetExceeded } } as VerificationRun\n const digest = verificationDigest(current)\n current = { ...current, verificationDigest: digest }\n saveRun(loaded.stateDir, current)\n new FileEventStore(loaded.stateDir).append({ runId: current.runId, sourceRevision: current.sourceRevision, configHash: current.configHash, type: 'verification.completed', payload: { verificationDigest: digest, checkCount: current.checks.length, outcomeCount: current.outcomes.length, totalDurationMs, budgetExceeded } })\n const nextState = allPassed ? 'AWAITING_HUMAN_APPROVAL' : 'BLOCKED'\n current = { ...transition(current, nextState, allPassed ? 'All configured checks passed; human approval is required.' : budgetExceeded ? 'Verification budget was exceeded.' : 'A configured check failed or lacked structured evidence.', 'harness') } as VerificationRun\n saveRun(loaded.stateDir, current); setLatest(loaded.stateDir, current); return current\n}\n\nconst assertFresh = async (loaded: LoadedConfig, run: VerificationRun): Promise<void> => {\n if (!(await isFresh(loaded, run))) staleRun(loaded, run, 'Run is stale because source or worktree changed after verification.')\n}\n\nconst assertVerificationAttestation = (loaded: LoadedConfig, run: VerificationRun): void => {\n const expected = verificationDigest(run)\n if (run.verificationDigest !== expected) fail('Verification projection attestation does not match run.json.', 'HARNESS_ERROR')\n const event = new FileEventStore(loaded.stateDir).read(run.runId).filter((item) => item.type === 'verification.completed').at(-1)\n if (!event || event.payload.verificationDigest !== expected || event.sourceRevision !== run.sourceRevision || event.configHash !== run.configHash) fail('Verification projection attestation is missing from the event log.', 'HARNESS_ERROR')\n}\n\nconst plannerForRetry = (loaded: LoadedConfig, run: VerificationRun): 'human' | 'ci' => {\n if (run.contractPreparation) return 'ci'\n if (!run.supersedes) return 'human'\n return plannerForRetry(loaded, readRun(loaded.stateDir, run.supersedes))\n}\n\nconst recordDecision = (loaded: LoadedConfig, run: VerificationRun, type: 'approval.recorded' | 'authorization.recorded', payload: { readonly decision: 'approved' | 'rejected'; readonly resultingState: VerificationRun['state']; readonly verificationDigest: string; readonly actor: 'human'; readonly sourceRevision: string; readonly contractHash: string; readonly target?: string }): void => {\n new FileEventStore(loaded.stateDir).append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type, payload: type === 'authorization.recorded' ? { ...payload, target: payload.target ?? fail('tracking.target is required when authorizing.', 'INVALID_CONFIG') } : payload })\n}\n\nconst assertDecisionProjection = (run: VerificationRun, decision: { readonly decision: 'approved' | 'rejected'; readonly resultingState: VerificationRun['state']; readonly verificationDigest: string; readonly sourceRevision: string; readonly contractHash: string }, expectedState: VerificationRun['state']): void => {\n if (decision.decision !== 'approved' || decision.resultingState !== expectedState || decision.verificationDigest !== run.verificationDigest || decision.sourceRevision !== run.sourceRevision || decision.contractHash !== run.contractHash) fail('Terminal decision attestation does not match the run projection.', 'HARNESS_ERROR')\n}\n\nexport const reconcileRun = async ({ configPath, runId }: { readonly configPath: string; readonly runId?: string }): Promise<import('./types.js').RunReconciliation> => {\n const loaded = loadConfig(configPath)\n const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n await assertFresh(loaded, run)\n const store = new FileEventStore(loaded.stateDir)\n const eventLog = store.verify(run.runId)\n const events = store.read(run.runId)\n if (events.some((event) => event.runId !== run.runId || event.configHash !== run.configHash)) fail('Run event log is not bound to the current run projection.', 'HARNESS_ERROR')\n const requiresVerification = ['AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE'].includes(run.state)\n if (requiresVerification) {\n if (eventLog.status !== 'verified') fail('Terminal run requires a verified event log.', 'HARNESS_ERROR')\n assertVerificationAttestation(loaded, run)\n }\n if (run.state === 'AWAITING_AUTHORIZATION' || run.state === 'COMPLETE') {\n const approval = events.filter((event) => event.type === 'approval.recorded').at(-1) ?? fail('Terminal run is missing its human approval event.', 'HARNESS_ERROR')\n assertDecisionProjection(run, approval.payload, run.state === 'COMPLETE' && !loaded.config.tracking.required ? 'COMPLETE' : 'AWAITING_AUTHORIZATION')\n if (!run.humanApproval || run.humanApproval.actor !== 'human' || run.humanApproval.verificationDigest !== run.verificationDigest || run.humanApproval.sourceRevision !== run.sourceRevision || run.humanApproval.contractHash !== run.contractHash) fail('Human approval projection is inconsistent with its audit event.', 'HARNESS_ERROR')\n }\n if (run.state === 'COMPLETE' && loaded.config.tracking.required) {\n const authorization = events.filter((event) => event.type === 'authorization.recorded').at(-1) ?? fail('Complete tracked run is missing its authorization event.', 'HARNESS_ERROR')\n assertDecisionProjection(run, authorization.payload, 'COMPLETE')\n if (!run.authorization || run.authorization.actor !== 'human' || run.authorization.verificationDigest !== run.verificationDigest || run.authorization.target !== authorization.payload.target || run.authorization.sourceRevision !== run.sourceRevision || run.authorization.contractHash !== run.contractHash) fail('Authorization projection is inconsistent with its audit event.', 'HARNESS_ERROR')\n }\n return { status: 'verified', runId: run.runId, state: run.state, eventCount: eventLog.eventCount, ...(eventLog.headHash ? { headHash: eventLog.headHash } : {}), ...(run.verificationDigest ? { verificationDigest: run.verificationDigest } : {}) }\n}\n\nexport const approveRun = async ({ configPath, runId, decision, actor = 'human' }: { readonly configPath: string; readonly runId?: string; readonly decision: string; readonly actor?: string }): Promise<VerificationRun> => {\n assertHuman(actor); const loaded = loadConfig(configPath); const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n if (run.state !== 'AWAITING_HUMAN_APPROVAL') fail(`Cannot approve from ${run.state}.`, 'INVALID_STATE')\n await assertFresh(loaded, run); assertVerificationAttestation(loaded, run)\n if (!approvedDecision(decision)) { const blocked = transition(run, 'BLOCKED', 'Human rejected the verification result.', 'human') as VerificationRun; saveRun(loaded.stateDir, blocked); recordDecision(loaded, run, 'approval.recorded', { decision: 'rejected', resultingState: blocked.state, verificationDigest: run.verificationDigest!, actor: 'human', sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, blocked); return blocked }\n const nextState = loaded.config.tracking.required ? 'AWAITING_AUTHORIZATION' : 'COMPLETE'\n const next = { ...transition(run, nextState, 'Human approved the verification result.', 'human'), humanApproval: { actor: 'human', at: now(), sourceRevision: run.sourceRevision, contractHash: run.contractHash, verificationDigest: run.verificationDigest } } as VerificationRun\n saveRun(loaded.stateDir, next); recordDecision(loaded, run, 'approval.recorded', { decision: 'approved', resultingState: nextState, verificationDigest: run.verificationDigest!, actor: 'human', sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, next); return next\n}\n\nexport const authorizeRun = async ({ configPath, runId, decision, actor = 'human' }: { readonly configPath: string; readonly runId?: string; readonly decision: string; readonly actor?: string }): Promise<VerificationRun> => {\n assertHuman(actor); const loaded = loadConfig(configPath); const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n if (run.state !== 'AWAITING_AUTHORIZATION') fail(`Cannot authorize from ${run.state}.`, 'INVALID_STATE')\n await assertFresh(loaded, run); assertVerificationAttestation(loaded, run)\n if (!approvedDecision(decision)) { const blocked = transition(run, 'BLOCKED', 'Human rejected external tracking authorization.', 'human') as VerificationRun; saveRun(loaded.stateDir, blocked); recordDecision(loaded, run, 'authorization.recorded', { decision: 'rejected', resultingState: blocked.state, verificationDigest: run.verificationDigest!, actor: 'human', target: loaded.config.tracking.target ?? '', sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, blocked); return blocked }\n if (!loaded.config.tracking.target) fail('tracking.target is required when authorizing.', 'INVALID_CONFIG')\n const next = { ...transition(run, 'COMPLETE', 'External tracking was authorized.', 'human'), authorization: { actor: 'human', at: now(), target: loaded.config.tracking.target, sourceRevision: run.sourceRevision, contractHash: run.contractHash, verificationDigest: run.verificationDigest } } as VerificationRun\n saveRun(loaded.stateDir, next); recordDecision(loaded, run, 'authorization.recorded', { decision: 'approved', resultingState: 'COMPLETE', verificationDigest: run.verificationDigest!, actor: 'human', target: loaded.config.tracking.target, sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, next); return next\n}\n\nexport const retryRun = async ({ configPath }: { readonly configPath: string }): Promise<VerificationRun> => {\n const loaded = loadConfig(configPath); const previous = loadLatestRun(loaded.stateDir)\n const previousRun = requireRun(previous)\n if (!['BLOCKED', 'STALE', 'CANCELLED'].includes(previousRun.state)) fail(`Cannot retry from ${previousRun.state}.`, 'INVALID_STATE')\n const baseline = await sourceSnapshot(loaded.root, loaded.stateDir)\n const superseded = transition(previousRun, 'SUPERSEDED', 'Retry superseded the previous run.', 'harness') as VerificationRun\n saveRun(loaded.stateDir, superseded)\n const run = await createRun({ loaded, baseline, supersedes: previousRun.runId, dirtyBaselineAuthorized: previousRun.dirtyBaselineAuthorized, planner: plannerForRetry(loaded, previousRun) })\n const next = transition(run, 'IMPLEMENTING', 'Retry started after a previous attempt.', 'agent') as VerificationRun\n saveRun(loaded.stateDir, next); setLatest(loaded.stateDir, next); return next\n}\n\nexport const cleanTaskArtifacts = (configPath: string): { readonly cleaned: readonly string[] } => cleanConfiguredArtifacts(loadConfig(configPath))\n","import { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { hashJson } from '../hash.js'\nimport { hashContextSnapshot } from '../context.js'\nimport type { ContextProvider, ContextQuery, ContextReference } from '../context.js'\n\ninterface IndexEntry { readonly id?: unknown; readonly type?: unknown; readonly title?: unknown; readonly path?: unknown; readonly description?: unknown; readonly body?: unknown; readonly tags?: unknown }\ninterface IndexDocument { readonly contentHash?: unknown; readonly knowledge?: unknown }\n\nconst index = (root: string, indexPath: string): IndexDocument => JSON.parse(readFileSync(resolve(root, indexPath), 'utf8')) as IndexDocument\nconst text = (entry: IndexEntry): string => [entry.id, entry.type, entry.title, entry.path, entry.description, entry.body, ...(Array.isArray(entry.tags) ? entry.tags : [])].filter((value): value is string => typeof value === 'string').join(' ').toLowerCase()\nconst sourceHash = (document: IndexDocument): string => typeof document.contentHash === 'string' && document.contentHash.length > 0 ? document.contentHash : hashJson(document)\nconst matches = (entry: IndexEntry, query: ContextQuery): boolean => {\n const needle = query.query.trim().toLowerCase()\n const scopes = query.scope?.map((scope) => scope.toLowerCase()) ?? []\n const value = text(entry)\n return Boolean(needle && value.includes(needle) && (scopes.length === 0 || scopes.some((scope) => value.includes(scope))))\n}\n\nexport interface DocBridgeContextProviderOptions {\n readonly root: string\n readonly indexPath?: string\n}\n\nexport const createDocBridgeContextProvider = ({ root, indexPath = '.doc-bridge/index.json' }: DocBridgeContextProviderOptions): ContextProvider => ({\n id: 'doc-bridge',\n version: '1.0.0',\n resolve: async (query) => {\n const document = index(root, indexPath)\n const contentHash = sourceHash(document)\n const entries = Array.isArray(document.knowledge) ? document.knowledge.filter((value): value is IndexEntry => typeof value === 'object' && value !== null && !Array.isArray(value)).filter((entry) => matches(entry, query)).sort((left, right) => String(left.id ?? '').localeCompare(String(right.id ?? ''))).slice(0, 8) : []\n const references: ContextReference[] = entries.flatMap((entry) => typeof entry.id === 'string' && typeof entry.path === 'string' ? [{ id: entry.id, uri: `doc-bridge://${entry.path}`, ...(typeof entry.title === 'string' ? { title: entry.title } : {}), contentHash }] : [])\n return { providerId: 'doc-bridge', query, references, sourceHash: contentHash, snapshotHash: hashContextSnapshot({ providerId: 'doc-bridge', query, references, sourceHash: contentHash }), resolvedAt: new Date().toISOString() }\n },\n})\n","import { existsSync, mkdtempSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { tmpdir } from 'node:os'\nimport { fail } from './errors.js'\nimport { readJson, readRun } from './files.js'\nimport { RUN_STATES, SURFACE_NAMES } from './types.js'\nimport type { BenchmarkBinding, RunState, SurfaceName, VerificationRun } from './types.js'\n\nexport const BENCHMARK_SCHEMA_VERSION = 1 as const\n\nexport type BenchmarkObservationStatus = 'passed' | 'failed' | 'blocked' | 'not-run'\nexport type BenchmarkImprovementDirection = 'improved' | 'regressed' | 'unchanged' | 'unavailable'\nexport type BenchmarkConfidence = 'insufficient' | 'directional' | 'reliable'\n\nexport interface BenchmarkPolicy {\n readonly minComparableTasks: number\n readonly maxDurationRegressionRate: number\n readonly minCompletedRunsPerTask: number\n readonly minBaselineSamplesPerTask: number\n readonly requireZeroEscapedIncomplete: boolean\n}\n\nexport interface BenchmarkQualityGate {\n readonly status: 'passed' | 'failed' | 'insufficient-data'\n readonly confidence: BenchmarkConfidence\n readonly comparableTaskCount: number\n readonly policy: BenchmarkPolicy\n readonly durationRegressionTaskIds: readonly string[]\n readonly escapedIncompleteTaskIds: readonly string[]\n readonly reasons: readonly string[]\n}\n\nexport interface BenchmarkTask {\n readonly id: string\n readonly title: string\n readonly acceptanceCriteria: readonly string[]\n /** Product/runtime surfaces exercised by the task. */\n readonly surfaces?: readonly SurfaceName[]\n readonly kind?: string\n readonly prompt?: BenchmarkTaskFile\n readonly source?: BenchmarkTaskSource\n readonly scope?: BenchmarkTaskScope\n}\n\nexport interface BenchmarkTaskFile {\n readonly path: string\n readonly sha256: string\n}\n\nexport interface BenchmarkTaskSource {\n readonly repository: string\n readonly path: string\n readonly revision: string\n}\n\nexport interface BenchmarkSuiteSource {\n readonly repository: string\n readonly revision: string\n readonly taskDefinition: string\n}\n\nexport interface BenchmarkTaskScope {\n readonly read: readonly string[]\n readonly write: readonly string[]\n}\n\nexport interface BenchmarkObservation {\n readonly taskId: string\n readonly mode: 'baseline'\n readonly status: BenchmarkObservationStatus\n readonly source: string\n readonly recordedAt: string\n readonly attempts?: number\n readonly durationMs?: number\n readonly durationSamplesMs?: readonly number[]\n /** Fraction of repeated samples whose task artifact passed acceptance validation. */\n readonly artifactAcceptanceRate?: number\n /** Fraction of repeated samples whose verification protocol completed. */\n readonly protocolCompletionRate?: number\n readonly reviewMinutes?: number\n readonly escapedIncomplete?: number\n readonly evidence?: readonly BenchmarkObservationEvidence[]\n readonly evidenceDigest?: string\n}\n\nexport interface BenchmarkObservationEvidence {\n readonly criterion: string\n readonly status: BenchmarkObservationStatus\n readonly source: string\n}\n\nexport interface BenchmarkManifest {\n readonly type: 'agentskit-harness-benchmark-manifest'\n readonly schemaVersion: typeof BENCHMARK_SCHEMA_VERSION\n readonly suiteId: string\n readonly name: string\n readonly provenance?: BenchmarkSuiteSource\n readonly tasks: readonly BenchmarkTask[]\n readonly observations: readonly BenchmarkObservation[]\n readonly policy?: BenchmarkPolicy\n}\n\nexport interface BenchmarkRun {\n readonly runId: string\n readonly state: RunState\n readonly sourceRevision: string\n readonly configHash: string\n readonly contractHash: string\n readonly supersedes?: string\n readonly durationMs?: number\n readonly checks: { readonly total: number; readonly passed: number; readonly failed: number }\n readonly outcomes: { readonly total: number; readonly passed: number; readonly failed: number }\n readonly evidence: { readonly total: number; readonly attached: number }\n /** Optional artifact outcome emitted by structured benchmark evidence. */\n readonly artifactAcceptanceRate?: number\n readonly escapedIncomplete?: number\n readonly humanApproved: boolean\n readonly humanReviewMinutes?: number\n readonly authorized: boolean\n readonly benchmark?: BenchmarkBinding\n}\n\nexport interface BenchmarkComparison {\n readonly taskId: string\n readonly title: string\n readonly comparability: 'comparable' | 'missing-baseline' | 'baseline-not-run' | 'baseline-evidence-missing' | 'baseline-incomplete' | 'baseline-samples-insufficient' | 'harness-not-run' | 'harness-not-complete'\n readonly comparable: boolean\n readonly baselineDeliveryComplete: boolean\n readonly baseline?: BenchmarkObservation\n readonly baselineEvidenceCoverageRate: number | null\n readonly baselineSampleCount: number\n readonly baselineArtifactAcceptanceRate: number | null\n readonly baselineProtocolCompletionRate: number | null\n readonly baselineMedianDurationMs?: number\n readonly improvement: {\n readonly durationRate: number | null\n readonly duration: BenchmarkImprovementDirection\n readonly attemptsRate: number | null\n readonly attempts: BenchmarkImprovementDirection\n readonly reviewRate: number | null\n readonly review: BenchmarkImprovementDirection\n readonly artifactAcceptanceRate: number | null\n readonly artifactAcceptance: BenchmarkImprovementDirection\n readonly artifactAcceptanceDelta: number | null\n readonly protocolCompletionRate: number | null\n readonly protocolCompletion: BenchmarkImprovementDirection\n readonly protocolCompletionDelta: number | null\n readonly escapedIncompleteRate: number | null\n readonly escapedIncomplete: BenchmarkImprovementDirection\n }\n readonly harness: {\n readonly attempts: number\n readonly retryCount: number\n readonly completedRuns: number\n readonly durationSamplesMs: readonly number[]\n readonly medianDurationMs?: number\n readonly latestState: RunState | 'NOT_RUN'\n readonly latestRunId?: string\n readonly latestDurationMs?: number\n readonly checkPassRate: number | null\n readonly outcomePassRate: number | null\n readonly evidenceCoverageRate: number | null\n readonly artifactAcceptanceRate?: number\n readonly artifactAcceptanceSampleCount: number\n readonly protocolCompletionRate: number | null\n readonly protocolCompletionSampleCount: number\n readonly humanApproved: boolean\n readonly escapedIncomplete?: number\n readonly humanReviewMinutes?: number\n }\n readonly confidence: BenchmarkConfidence\n readonly durationDeltaMs?: number\n readonly attemptDelta?: number\n readonly reviewDeltaMinutes?: number\n readonly escapedIncompleteDelta?: number\n}\n\nexport interface BenchmarkSummary {\n readonly totalRuns: number\n readonly stateCounts: Readonly<Record<RunState, number>>\n readonly completeRuns: number\n readonly retriedRuns: number\n readonly staleRuns: number\n readonly firstAttemptRuns: number\n readonly humanApprovedRuns: number\n readonly authorizedRuns: number\n readonly effectiveRunCount: number\n readonly effectiveCompleteRuns: number\n readonly effectiveCompletionRate: number | null\n readonly effectiveCheckPassRate: number | null\n readonly effectiveOutcomePassRate: number | null\n readonly effectiveEvidenceCoverageRate: number | null\n readonly checkPassRate: number | null\n readonly outcomePassRate: number | null\n readonly evidenceCoverageRate: number | null\n readonly firstAttemptApprovalRate: number | null\n readonly retryRate: number | null\n readonly staleRate: number | null\n readonly averageDurationMs: number | null\n readonly medianDurationMs: number | null\n}\n\nexport interface BenchmarkReport {\n readonly type: 'agentskit-harness-benchmark'\n readonly schemaVersion: typeof BENCHMARK_SCHEMA_VERSION\n readonly stateDir: string\n readonly generatedAt: string\n readonly runs: readonly BenchmarkRun[]\n readonly summary: BenchmarkSummary\n readonly manifest?: { readonly suiteId: string; readonly taskCount: number; readonly baselineCount: number; readonly comparableTaskCount: number }\n readonly comparisons: readonly BenchmarkComparison[]\n readonly qualityGate: BenchmarkQualityGate\n}\n\nexport interface BenchmarkObservationInput {\n readonly taskId: string\n readonly status: BenchmarkObservationStatus\n readonly source: string\n readonly recordedAt?: string\n readonly attempts?: number\n readonly durationMs?: number\n readonly durationSamplesMs?: readonly number[]\n readonly artifactAcceptanceRate?: number\n readonly protocolCompletionRate?: number\n readonly reviewMinutes?: number\n readonly escapedIncomplete?: number\n readonly evidence?: readonly BenchmarkObservationEvidence[]\n readonly evidenceDigest?: string\n}\n\nconst percentage = (part: number, total: number): number | null => total ? Number((part / total).toFixed(4)) : null\nconst DEFAULT_POLICY: BenchmarkPolicy = { minComparableTasks: 3, maxDurationRegressionRate: 0.2, minCompletedRunsPerTask: 3, minBaselineSamplesPerTask: 3, requireZeroEscapedIncomplete: true }\nconst improvementRate = (baseline: number | undefined, current: number | undefined): number | null => baseline === undefined || current === undefined || baseline === 0 ? null : Number(((baseline - current) / baseline).toFixed(4))\nconst increaseRate = (baseline: number | undefined, current: number | undefined): number | null => baseline === undefined || current === undefined || baseline === 0 ? null : Number(((current - baseline) / baseline).toFixed(4))\nconst increaseDelta = (baseline: number | undefined, current: number | null): number | null => baseline === undefined || current === null ? null : Number((current - baseline).toFixed(4))\nconst increaseDirection = (rate: number | null, delta: number | null): BenchmarkImprovementDirection => delta === null ? improvementDirection(rate) : delta > 0 ? 'improved' : delta < 0 ? 'regressed' : 'unchanged'\nconst improvementDirection = (rate: number | null): BenchmarkImprovementDirection => rate === null ? 'unavailable' : rate > 0 ? 'improved' : rate < 0 ? 'regressed' : 'unchanged'\nconst count = <T>(items: readonly T[], predicate: (item: T) => boolean): number => items.filter(predicate).length\nconst median = (values: readonly number[]): number | null => {\n if (!values.length) return null\n const sorted = [...values].sort((left, right) => left - right)\n const middle = Math.floor(sorted.length / 2)\n return sorted.length % 2 ? sorted[middle] ?? null : ((sorted[middle - 1] ?? 0) + (sorted[middle] ?? 0)) / 2\n}\nconst reviewMinutes = (run: VerificationRun): number | undefined => {\n if (!run.humanApproval) return undefined\n const reviewStart = run.transitions.find((transition) => transition.to === 'AWAITING_HUMAN_APPROVAL')?.at\n if (!reviewStart) return undefined\n const elapsed = Date.parse(run.humanApproval.at) - Date.parse(reviewStart)\n return Number.isFinite(elapsed) && elapsed >= 0 ? Number((elapsed / 60_000).toFixed(2)) : undefined\n}\nconst confidence = (comparable: boolean, completedRuns: number, policy: BenchmarkPolicy): BenchmarkConfidence => !comparable ? 'insufficient' : completedRuns >= policy.minCompletedRunsPerTask ? 'reliable' : 'directional'\n\nconst artifactAcceptanceRate = (run: VerificationRun): number | undefined => {\n const rates = run.checks.flatMap((check) => {\n const evidence = check.evidence\n if (!evidence) return []\n const direct = typeof evidence['artifactAcceptanceRate'] === 'number' ? [evidence['artifactAcceptanceRate']] : []\n const reports = Array.isArray(evidence['reports']) ? evidence['reports'].flatMap((report) => typeof report === 'object' && report !== null && typeof report['artifactAcceptanceRate'] === 'number' ? [report['artifactAcceptanceRate']] : []) : []\n return [...direct, ...reports].filter((rate) => Number.isFinite(rate) && rate >= 0 && rate <= 1)\n })\n return rates.length ? Number((rates.reduce((total, rate) => total + rate, 0) / rates.length).toFixed(4)) : undefined\n}\n\nconst projectRun = (run: VerificationRun): BenchmarkRun => {\n const checks = { total: run.checks.length, passed: count(run.checks, (check) => check.status === 'passed'), failed: count(run.checks, (check) => check.status === 'failed') }\n const outcomes = { total: run.outcomes.length, passed: count(run.outcomes, (outcome) => outcome.status === 'passed'), failed: count(run.outcomes, (outcome) => outcome.status === 'failed') }\n const evidence = { total: run.checks.length, attached: count(run.checks, (check) => check.evidence !== undefined) }\n const acceptanceRate = artifactAcceptanceRate(run)\n const humanReviewMinutes = reviewMinutes(run)\n const escapedIncomplete = run.state === 'COMPLETE' && checks.failed === 0 && outcomes.failed === 0 && evidence.attached === evidence.total ? 0 : undefined\n return { runId: run.runId, state: run.state, sourceRevision: run.sourceRevision, configHash: run.configHash, contractHash: run.contractHash, ...(run.supersedes ? { supersedes: run.supersedes } : {}), ...(run.metrics ? { durationMs: run.metrics.totalDurationMs } : {}), checks, outcomes, evidence, ...(acceptanceRate === undefined ? {} : { artifactAcceptanceRate: acceptanceRate }), ...(escapedIncomplete === undefined ? {} : { escapedIncomplete }), humanApproved: run.humanApproval !== undefined, ...(humanReviewMinutes === undefined ? {} : { humanReviewMinutes }), authorized: run.authorization !== undefined, ...(run.benchmark ? { benchmark: run.benchmark } : {}) }\n}\n\nconst summarize = (runs: readonly BenchmarkRun[]): BenchmarkSummary => {\n const stateCounts = Object.fromEntries(RUN_STATES.map((state) => [state, count(runs, (run) => run.state === state)])) as Record<RunState, number>\n const checksTotal = runs.reduce((total, run) => total + run.checks.total, 0)\n const checksPassed = runs.reduce((total, run) => total + run.checks.passed, 0)\n const outcomesTotal = runs.reduce((total, run) => total + run.outcomes.total, 0)\n const outcomesPassed = runs.reduce((total, run) => total + run.outcomes.passed, 0)\n const evidenceTotal = runs.reduce((total, run) => total + run.evidence.total, 0)\n const evidenceAttached = runs.reduce((total, run) => total + run.evidence.attached, 0)\n const firstAttempts = runs.filter((run) => !run.supersedes)\n const superseded = new Set(runs.flatMap((run) => run.supersedes ? [run.supersedes] : []))\n const effectiveRuns = runs.filter((run) => !superseded.has(run.runId))\n const effectiveChecksTotal = effectiveRuns.reduce((total, run) => total + run.checks.total, 0)\n const effectiveChecksPassed = effectiveRuns.reduce((total, run) => total + run.checks.passed, 0)\n const effectiveOutcomesTotal = effectiveRuns.reduce((total, run) => total + run.outcomes.total, 0)\n const effectiveOutcomesPassed = effectiveRuns.reduce((total, run) => total + run.outcomes.passed, 0)\n const effectiveEvidenceTotal = effectiveRuns.reduce((total, run) => total + run.evidence.total, 0)\n const effectiveEvidenceAttached = effectiveRuns.reduce((total, run) => total + run.evidence.attached, 0)\n const durations = runs.flatMap((run) => run.durationMs === undefined ? [] : [run.durationMs])\n return {\n totalRuns: runs.length,\n stateCounts,\n completeRuns: stateCounts.COMPLETE,\n retriedRuns: count(runs, (run) => run.supersedes !== undefined),\n staleRuns: stateCounts.STALE,\n firstAttemptRuns: firstAttempts.length,\n humanApprovedRuns: count(runs, (run) => run.humanApproved),\n authorizedRuns: count(runs, (run) => run.authorized),\n effectiveRunCount: effectiveRuns.length,\n effectiveCompleteRuns: count(effectiveRuns, (run) => run.state === 'COMPLETE'),\n effectiveCompletionRate: percentage(count(effectiveRuns, (run) => run.state === 'COMPLETE'), effectiveRuns.length),\n effectiveCheckPassRate: percentage(effectiveChecksPassed, effectiveChecksTotal),\n effectiveOutcomePassRate: percentage(effectiveOutcomesPassed, effectiveOutcomesTotal),\n effectiveEvidenceCoverageRate: percentage(effectiveEvidenceAttached, effectiveEvidenceTotal),\n checkPassRate: percentage(checksPassed, checksTotal),\n outcomePassRate: percentage(outcomesPassed, outcomesTotal),\n evidenceCoverageRate: percentage(evidenceAttached, evidenceTotal),\n firstAttemptApprovalRate: percentage(count(firstAttempts, (run) => run.humanApproved), firstAttempts.length),\n retryRate: percentage(count(runs, (run) => run.supersedes !== undefined), runs.length),\n staleRate: percentage(stateCounts.STALE, runs.length),\n averageDurationMs: durations.length ? Math.round(durations.reduce((total, duration) => total + duration, 0) / durations.length) : null,\n medianDurationMs: median(durations),\n }\n}\n\nconst readRuns = (stateDir: string): VerificationRun[] => {\n const runsDir = join(stateDir, 'runs')\n if (!existsSync(runsDir)) return []\n return readdirSync(runsDir, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => {\n try {\n const candidate = readJson(join(runsDir, entry.name, 'run.json')) as { readonly type?: unknown }\n return candidate.type === 'agentskit-harness-run' ? readRun(stateDir, entry.name) : undefined\n } catch (error) { return fail(`Benchmark could not read run ${entry.name}: ${error instanceof Error ? error.message : String(error)}`, 'HARNESS_ERROR') }\n }).filter((run): run is VerificationRun => run !== undefined)\n}\n\nconst nonEmptyString = (value: unknown, label: string): string => {\n if (typeof value !== 'string') return fail(`${label} must be a non-empty string.`, 'INVALID_CONFIG')\n const result = value.trim()\n if (!result) return fail(`${label} must be a non-empty string.`, 'INVALID_CONFIG')\n return result\n}\n\nconst sha256 = (value: unknown, label: string): string | undefined => {\n if (value === undefined) return undefined\n const result = nonEmptyString(value, label)\n if (!/^[a-f0-9]{64}$/.test(result)) return fail(`${label} must be a lowercase SHA-256 digest.`, 'INVALID_CONFIG')\n return result\n}\n\nconst stringList = (value: unknown, label: string): string[] => {\n if (!Array.isArray(value)) return fail(`${label} must be a non-empty string array.`, 'INVALID_CONFIG')\n const items = value as unknown[]\n if (!items.length || !items.every((item: unknown) => typeof item === 'string' && Boolean(item.trim()))) return fail(`${label} must be a non-empty string array.`, 'INVALID_CONFIG')\n return items.map((item: unknown) => String(item).trim())\n}\n\nconst nonNegativeNumber = (value: unknown, label: string): number | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'number') return fail(`${label} must be a non-negative number.`, 'INVALID_CONFIG')\n if (!Number.isFinite(value) || value < 0) return fail(`${label} must be a non-negative number.`, 'INVALID_CONFIG')\n const result = value\n return result\n}\n\nconst nonNegativeInteger = (value: unknown, label: string): number | undefined => {\n const result = nonNegativeNumber(value, label)\n if (result !== undefined && !Number.isInteger(result)) return fail(`${label} must be an integer.`, 'INVALID_CONFIG')\n return result\n}\n\nconst rate = (value: unknown, label: string): number | undefined => {\n const result = nonNegativeNumber(value, label)\n if (result !== undefined && result > 1) return fail(`${label} must be between 0 and 1.`, 'INVALID_CONFIG')\n return result\n}\n\nconst timestamp = (value: unknown, label: string): string => {\n const result = nonEmptyString(value, label)\n if (!Number.isFinite(Date.parse(result))) return fail(`${label} must be a valid timestamp.`, 'INVALID_CONFIG')\n return result\n}\n\nconst relativePath = (value: unknown, label: string): string => {\n const result = nonEmptyString(value, label)\n if (result.startsWith('/') || result.split('/').includes('..')) return fail(`${label} must be a repository-relative path.`, 'INVALID_CONFIG')\n return result\n}\n\nconst taskFile = (value: unknown, label: string): BenchmarkTaskFile | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return fail(`${label} must be an object.`, 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n return { path: relativePath(raw['path'], `${label}.path`), sha256: sha256(raw['sha256'], `${label}.sha256`) ?? fail(`${label}.sha256 is required.`, 'INVALID_CONFIG') }\n}\n\nconst taskSource = (value: unknown, label: string): BenchmarkTaskSource | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return fail(`${label} must be an object.`, 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n return { repository: nonEmptyString(raw['repository'], `${label}.repository`), path: relativePath(raw['path'], `${label}.path`), revision: nonEmptyString(raw['revision'], `${label}.revision`) }\n}\n\nconst suiteSource = (value: unknown, label: string): BenchmarkSuiteSource | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return fail(`${label} must be an object.`, 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n return { repository: nonEmptyString(raw['repository'], `${label}.repository`), revision: nonEmptyString(raw['revision'], `${label}.revision`), taskDefinition: relativePath(raw['taskDefinition'], `${label}.taskDefinition`) }\n}\n\nconst taskScope = (value: unknown, label: string): BenchmarkTaskScope | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return fail(`${label} must be an object.`, 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n return { read: stringList(raw['read'], `${label}.read`), write: stringList(raw['write'], `${label}.write`) }\n}\n\nconst taskSurfaces = (value: unknown, label: string): readonly SurfaceName[] | undefined => {\n if (value === undefined) return undefined\n if (!Array.isArray(value) || !value.length) return fail(`${label} must be a non-empty array.`, 'INVALID_CONFIG')\n const surfaces = value.map((item, index) => nonEmptyString(item, `${label}[${index}]`))\n if (surfaces.some((surface) => !(SURFACE_NAMES as readonly string[]).includes(surface))) fail(`${label} contains an unknown surface.`, 'INVALID_CONFIG')\n if (new Set(surfaces).size !== surfaces.length) fail(`${label} must contain unique surfaces.`, 'INVALID_CONFIG')\n return surfaces as SurfaceName[]\n}\n\nconst benchmarkPolicy = (value: unknown): BenchmarkPolicy | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return fail('benchmark.policy must be an object.', 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n const minComparableTasks = nonNegativeInteger(raw['minComparableTasks'], 'benchmark.policy.minComparableTasks')\n const maxDurationRegressionRate = nonNegativeNumber(raw['maxDurationRegressionRate'], 'benchmark.policy.maxDurationRegressionRate')\n const minCompletedRunsPerTask = nonNegativeInteger(raw['minCompletedRunsPerTask'], 'benchmark.policy.minCompletedRunsPerTask')\n const minBaselineSamplesPerTask = nonNegativeInteger(raw['minBaselineSamplesPerTask'] ?? 1, 'benchmark.policy.minBaselineSamplesPerTask')\n if (minComparableTasks === undefined || minComparableTasks < 1) return fail('benchmark.policy.minComparableTasks must be at least 1.', 'INVALID_CONFIG')\n if (maxDurationRegressionRate === undefined || maxDurationRegressionRate > 1) return fail('benchmark.policy.maxDurationRegressionRate must be between 0 and 1.', 'INVALID_CONFIG')\n if (minCompletedRunsPerTask === undefined || minCompletedRunsPerTask < 1) return fail('benchmark.policy.minCompletedRunsPerTask must be at least 1.', 'INVALID_CONFIG')\n if (minBaselineSamplesPerTask === undefined || minBaselineSamplesPerTask < 1) return fail('benchmark.policy.minBaselineSamplesPerTask must be at least 1.', 'INVALID_CONFIG')\n if (typeof raw['requireZeroEscapedIncomplete'] !== 'boolean') return fail('benchmark.policy.requireZeroEscapedIncomplete must be boolean.', 'INVALID_CONFIG')\n return { minComparableTasks, maxDurationRegressionRate, minCompletedRunsPerTask, minBaselineSamplesPerTask, requireZeroEscapedIncomplete: raw['requireZeroEscapedIncomplete'] }\n}\n\nexport const validateBenchmarkManifest = (value: unknown): BenchmarkManifest => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('benchmark manifest must be an object.', 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n if (raw['type'] !== 'agentskit-harness-benchmark-manifest' || raw['schemaVersion'] !== BENCHMARK_SCHEMA_VERSION) fail('benchmark manifest type or schemaVersion is invalid.', 'INVALID_CONFIG')\n const rawTasks = Array.isArray(raw['tasks']) && raw['tasks'].length ? raw['tasks'] : fail('benchmark manifest tasks must be non-empty.', 'INVALID_CONFIG')\n const tasks = rawTasks.map((item, index) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) fail(`benchmark.tasks[${index}] must be an object.`, 'INVALID_CONFIG')\n const task = item as Record<string, unknown>\n const kind = task['kind'] === undefined ? undefined : nonEmptyString(task['kind'], `benchmark.tasks[${index}].kind`)\n const prompt = taskFile(task['prompt'], `benchmark.tasks[${index}].prompt`)\n const source = taskSource(task['source'], `benchmark.tasks[${index}].source`)\n const scope = taskScope(task['scope'], `benchmark.tasks[${index}].scope`)\n const surfaces = taskSurfaces(task['surfaces'], `benchmark.tasks[${index}].surfaces`)\n return { id: nonEmptyString(task['id'], `benchmark.tasks[${index}].id`), title: nonEmptyString(task['title'], `benchmark.tasks[${index}].title`), acceptanceCriteria: stringList(task['acceptanceCriteria'], `benchmark.tasks[${index}].acceptanceCriteria`), ...(surfaces === undefined ? {} : { surfaces }), ...(kind === undefined ? {} : { kind }), ...(prompt === undefined ? {} : { prompt }), ...(source === undefined ? {} : { source }), ...(scope === undefined ? {} : { scope }) }\n })\n if (new Set(tasks.map((task) => task.id)).size !== tasks.length) fail('benchmark task ids must be unique.', 'INVALID_CONFIG')\n const taskIds = new Set(tasks.map((task) => task.id))\n const rawObservations = raw['observations'] === undefined ? [] : Array.isArray(raw['observations']) ? raw['observations'] : fail('benchmark.observations must be an array.', 'INVALID_CONFIG')\n const observations = rawObservations.map((item, index) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) fail(`benchmark.observations[${index}] must be an object.`, 'INVALID_CONFIG')\n const observation = item as Record<string, unknown>\n const status = observation['status']\n if (!['passed', 'failed', 'blocked', 'not-run'].includes(String(status))) fail(`benchmark.observations[${index}].status is invalid.`, 'INVALID_CONFIG')\n const taskId = nonEmptyString(observation['taskId'], `benchmark.observations[${index}].taskId`)\n if (!taskIds.has(taskId)) fail(`benchmark observation references unknown task: ${taskId}.`, 'INVALID_CONFIG')\n const task = tasks.find((candidate) => candidate.id === taskId) ?? fail(`benchmark observation references unknown task: ${taskId}.`, 'INVALID_CONFIG')\n const attempts = nonNegativeInteger(observation['attempts'], `benchmark.observations[${index}].attempts`)\n const durationMs = nonNegativeNumber(observation['durationMs'], `benchmark.observations[${index}].durationMs`)\n const durationSamplesMs = observation['durationSamplesMs'] === undefined ? undefined : Array.isArray(observation['durationSamplesMs']) ? observation['durationSamplesMs'].map((sample, sampleIndex) => nonNegativeNumber(sample, `benchmark.observations[${index}].durationSamplesMs[${sampleIndex}]`) ?? fail(`benchmark.observations[${index}].durationSamplesMs must contain numbers.`, 'INVALID_CONFIG')) : fail(`benchmark.observations[${index}].durationSamplesMs must be an array.`, 'INVALID_CONFIG')\n if (durationSamplesMs && !durationSamplesMs.length) fail(`benchmark.observations[${index}].durationSamplesMs must not be empty.`, 'INVALID_CONFIG')\n const artifactAcceptanceRate = rate(observation['artifactAcceptanceRate'], `benchmark.observations[${index}].artifactAcceptanceRate`)\n const protocolCompletionRate = rate(observation['protocolCompletionRate'], `benchmark.observations[${index}].protocolCompletionRate`)\n const reviewMinutes = nonNegativeNumber(observation['reviewMinutes'], `benchmark.observations[${index}].reviewMinutes`)\n const escapedIncomplete = nonNegativeInteger(observation['escapedIncomplete'], `benchmark.observations[${index}].escapedIncomplete`)\n const evidenceDigest = sha256(observation['evidenceDigest'], `benchmark.observations[${index}].evidenceDigest`)\n const rawEvidence = observation['evidence'] === undefined ? undefined : Array.isArray(observation['evidence']) ? observation['evidence'] : fail(`benchmark.observations[${index}].evidence must be an array.`, 'INVALID_CONFIG')\n const evidence = rawEvidence?.map((item, evidenceIndex) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) fail(`benchmark.observations[${index}].evidence[${evidenceIndex}] must be an object.`, 'INVALID_CONFIG')\n const entry = item as Record<string, unknown>\n const criterion = nonEmptyString(entry['criterion'], `benchmark.observations[${index}].evidence[${evidenceIndex}].criterion`)\n if (!task.acceptanceCriteria.includes(criterion)) fail(`benchmark evidence references unknown criterion: ${criterion}.`, 'INVALID_CONFIG')\n const evidenceStatus = entry['status']\n if (!['passed', 'failed', 'blocked', 'not-run'].includes(String(evidenceStatus))) fail(`benchmark.observations[${index}].evidence[${evidenceIndex}].status is invalid.`, 'INVALID_CONFIG')\n return { criterion, status: evidenceStatus as BenchmarkObservationStatus, source: nonEmptyString(entry['source'], `benchmark.observations[${index}].evidence[${evidenceIndex}].source`) }\n })\n if (evidence && new Set(evidence.map((entry) => entry.criterion)).size !== evidence.length) fail(`benchmark.observations[${index}].evidence criteria must be unique.`, 'INVALID_CONFIG')\n return { taskId, mode: 'baseline' as const, status: status as BenchmarkObservationStatus, source: nonEmptyString(observation['source'], `benchmark.observations[${index}].source`), recordedAt: timestamp(observation['recordedAt'], `benchmark.observations[${index}].recordedAt`), ...(attempts === undefined ? {} : { attempts }), ...(durationMs === undefined ? {} : { durationMs }), ...(durationSamplesMs === undefined ? {} : { durationSamplesMs }), ...(artifactAcceptanceRate === undefined ? {} : { artifactAcceptanceRate }), ...(protocolCompletionRate === undefined ? {} : { protocolCompletionRate }), ...(reviewMinutes === undefined ? {} : { reviewMinutes }), ...(escapedIncomplete === undefined ? {} : { escapedIncomplete }), ...(evidence === undefined ? {} : { evidence }), ...(evidenceDigest === undefined ? {} : { evidenceDigest }) }\n })\n if (new Set(observations.map((observation) => observation.taskId)).size !== observations.length) fail('benchmark allows at most one baseline observation per task.', 'INVALID_CONFIG')\n const provenance = suiteSource(raw['provenance'], 'benchmark.provenance')\n const policy = benchmarkPolicy(raw['policy'])\n return { type: 'agentskit-harness-benchmark-manifest', schemaVersion: BENCHMARK_SCHEMA_VERSION, suiteId: nonEmptyString(raw['suiteId'], 'benchmark.suiteId'), name: nonEmptyString(raw['name'], 'benchmark.name'), ...(provenance === undefined ? {} : { provenance }), tasks, observations, ...(policy === undefined ? {} : { policy }) }\n}\n\nexport const loadBenchmarkManifest = (path: string): BenchmarkManifest => {\n try { return validateBenchmarkManifest(JSON.parse(readFileSync(path, 'utf8')) as unknown) } catch (error) { if (error instanceof SyntaxError) return fail(`Invalid benchmark manifest JSON: ${error.message}`, 'INVALID_CONFIG'); throw error }\n}\n\nexport const recordBenchmarkObservation = (path: string, input: BenchmarkObservationInput): BenchmarkManifest => {\n const originalContent = readFileSync(path, 'utf8')\n const manifest = loadBenchmarkManifest(path)\n const taskId = nonEmptyString(input.taskId, 'benchmark observation.taskId')\n if (!manifest.tasks.some((task) => task.id === taskId)) fail(`benchmark observation references unknown task: ${taskId}.`, 'INVALID_INPUT')\n if (manifest.observations.some((observation) => observation.taskId === taskId)) fail(`benchmark already has an observation for task: ${taskId}.`, 'INVALID_INPUT')\n const observation = validateBenchmarkManifest({\n ...manifest,\n observations: [...manifest.observations, {\n taskId,\n mode: 'baseline',\n status: input.status,\n source: input.source,\n recordedAt: input.recordedAt ?? new Date().toISOString(),\n ...(input.attempts === undefined ? {} : { attempts: input.attempts }),\n ...(input.durationMs === undefined ? {} : { durationMs: input.durationMs }),\n ...(input.durationSamplesMs === undefined ? {} : { durationSamplesMs: input.durationSamplesMs }),\n ...(input.artifactAcceptanceRate === undefined ? {} : { artifactAcceptanceRate: input.artifactAcceptanceRate }),\n ...(input.protocolCompletionRate === undefined ? {} : { protocolCompletionRate: input.protocolCompletionRate }),\n ...(input.reviewMinutes === undefined ? {} : { reviewMinutes: input.reviewMinutes }),\n ...(input.escapedIncomplete === undefined ? {} : { escapedIncomplete: input.escapedIncomplete }),\n ...(input.evidence === undefined ? {} : { evidence: input.evidence }),\n ...(input.evidenceDigest === undefined ? {} : { evidenceDigest: input.evidenceDigest }),\n }],\n })\n const temporaryRoot = mkdtempSync(join(tmpdir(), 'agentskit-harness-baseline-'))\n const temporaryPath = join(temporaryRoot, 'manifest.json')\n try {\n writeFileSync(temporaryPath, `${JSON.stringify(observation, null, 2)}\\n`, 'utf8')\n if (readFileSync(path, 'utf8') !== originalContent) fail('benchmark manifest changed while recording an observation.', 'STALE')\n renameSync(temporaryPath, path)\n } finally {\n rmSync(temporaryRoot, { recursive: true, force: true })\n }\n return observation\n}\n\nconst comparisons = (runs: readonly BenchmarkRun[], manifest: BenchmarkManifest, policy: BenchmarkPolicy): readonly BenchmarkComparison[] => manifest.tasks.map((task) => {\n const taskRuns = runs.filter((run) => run.benchmark?.suiteId === manifest.suiteId && run.benchmark.taskId === task.id)\n const latest = taskRuns.at(-1)\n const baseline = manifest.observations.find((observation) => observation.taskId === task.id)\n const coveredCriteria = new Set((baseline?.evidence ?? []).map((entry) => entry.criterion))\n const baselineEvidenceCoverageRate = baseline ? percentage(coveredCriteria.size, task.acceptanceCriteria.length) : null\n const baselineEvidenceComplete = baselineEvidenceCoverageRate === 1\n const baselineEvidencePassed = baselineEvidenceComplete && (baseline?.evidence?.every((entry) => entry.status === 'passed') ?? false)\n const baselineDeliveryComplete = baseline?.status === 'passed' && baselineEvidencePassed\n const baselineDurationSamples = baseline?.durationSamplesMs ?? (baseline?.durationMs === undefined ? [] : [baseline.durationMs])\n const baselineMedianDurationMs = median(baselineDurationSamples)\n const baselineSamplesSufficient = baselineDurationSamples.length >= policy.minBaselineSamplesPerTask\n const comparable = baseline !== undefined && baseline.status !== 'not-run' && baselineEvidenceComplete && baselineDeliveryComplete && baselineSamplesSufficient && latest?.state === 'COMPLETE'\n const comparability = comparable ? 'comparable' : baseline === undefined ? 'missing-baseline' : baseline.status === 'not-run' ? 'baseline-not-run' : !baselineEvidenceComplete ? 'baseline-evidence-missing' : latest === undefined ? 'harness-not-run' : latest.state !== 'COMPLETE' ? 'harness-not-complete' : !baselineDeliveryComplete ? 'baseline-incomplete' : 'baseline-samples-insufficient'\n const completedTaskRuns = taskRuns.filter((run) => run.state === 'COMPLETE')\n const durationSamplesMs = completedTaskRuns.flatMap((run) => run.durationMs === undefined ? [] : [run.durationMs])\n const medianDurationMs = median(durationSamplesMs)\n const retryCount = count(taskRuns, (run) => run.supersedes !== undefined)\n const attempts = retryCount + (taskRuns.length ? 1 : 0)\n const durationRate = comparable ? improvementRate(baselineMedianDurationMs ?? undefined, medianDurationMs ?? undefined) : null\n const attemptsRate = comparable ? improvementRate(baseline?.attempts, attempts) : null\n const reviewRate = comparable ? improvementRate(baseline?.reviewMinutes, latest?.humanReviewMinutes) : null\n const acceptanceSamples = taskRuns.flatMap((run) => run.artifactAcceptanceRate === undefined ? [] : [run.artifactAcceptanceRate])\n const harnessArtifactAcceptanceRate = acceptanceSamples.length ? Number((acceptanceSamples.reduce((total, rate) => total + rate, 0) / acceptanceSamples.length).toFixed(4)) : null\n const artifactAcceptanceImprovementRate = increaseRate(baseline?.artifactAcceptanceRate, harnessArtifactAcceptanceRate ?? undefined)\n const artifactAcceptanceDelta = increaseDelta(baseline?.artifactAcceptanceRate, harnessArtifactAcceptanceRate)\n const completedRuns = completedTaskRuns.length\n const harnessProtocolCompletionRate = taskRuns.length ? percentage(completedRuns, taskRuns.length) : null\n const protocolCompletionImprovementRate = increaseRate(baseline?.protocolCompletionRate, harnessProtocolCompletionRate ?? undefined)\n const protocolCompletionDelta = increaseDelta(baseline?.protocolCompletionRate, harnessProtocolCompletionRate)\n const escapedIncompleteRate = improvementRate(baseline?.escapedIncomplete, latest?.escapedIncomplete)\n return { taskId: task.id, title: task.title, comparability, comparable, baselineDeliveryComplete, baselineEvidenceCoverageRate, baselineSampleCount: baselineDurationSamples.length, baselineArtifactAcceptanceRate: baseline?.artifactAcceptanceRate ?? null, baselineProtocolCompletionRate: baseline?.protocolCompletionRate ?? null, ...(baselineMedianDurationMs === null ? {} : { baselineMedianDurationMs }), improvement: { durationRate, duration: improvementDirection(durationRate), attemptsRate, attempts: improvementDirection(attemptsRate), reviewRate, review: improvementDirection(reviewRate), artifactAcceptanceRate: artifactAcceptanceImprovementRate, artifactAcceptance: increaseDirection(artifactAcceptanceImprovementRate, artifactAcceptanceDelta), artifactAcceptanceDelta, protocolCompletionRate: protocolCompletionImprovementRate, protocolCompletion: increaseDirection(protocolCompletionImprovementRate, protocolCompletionDelta), protocolCompletionDelta, escapedIncompleteRate, escapedIncomplete: improvementDirection(escapedIncompleteRate) }, ...(baseline ? { baseline } : {}), harness: { attempts, retryCount, completedRuns, durationSamplesMs, ...(medianDurationMs === null ? {} : { medianDurationMs }), ...(harnessArtifactAcceptanceRate === null ? {} : { artifactAcceptanceRate: harnessArtifactAcceptanceRate }), artifactAcceptanceSampleCount: acceptanceSamples.length, protocolCompletionRate: harnessProtocolCompletionRate, protocolCompletionSampleCount: taskRuns.length, latestState: latest?.state ?? 'NOT_RUN', ...(latest ? { latestRunId: latest.runId } : {}), ...(latest?.durationMs === undefined ? {} : { latestDurationMs: latest.durationMs }), checkPassRate: latest ? percentage(latest.checks.passed, latest.checks.total) : null, outcomePassRate: latest ? percentage(latest.outcomes.passed, latest.outcomes.total) : null, evidenceCoverageRate: latest ? percentage(latest.evidence.attached, latest.evidence.total) : null, ...(latest?.escapedIncomplete === undefined ? {} : { escapedIncomplete: latest.escapedIncomplete }), ...(latest?.humanReviewMinutes === undefined ? {} : { humanReviewMinutes: latest.humanReviewMinutes }), humanApproved: latest?.humanApproved ?? false }, confidence: confidence(comparable, completedRuns, policy), ...(comparable && baselineMedianDurationMs !== null && medianDurationMs !== null ? { durationDeltaMs: medianDurationMs - baselineMedianDurationMs } : {}), ...(comparable && baseline?.attempts !== undefined ? { attemptDelta: attempts - baseline.attempts } : {}), ...(comparable && baseline?.reviewMinutes !== undefined && latest?.humanReviewMinutes !== undefined ? { reviewDeltaMinutes: latest.humanReviewMinutes - baseline.reviewMinutes } : {}), ...(baseline?.escapedIncomplete !== undefined && latest?.escapedIncomplete !== undefined ? { escapedIncompleteDelta: latest.escapedIncomplete - baseline.escapedIncomplete } : {}) }\n})\n\nexport const benchmarkRuns = (stateDir: string, manifest?: BenchmarkManifest): BenchmarkReport => {\n const runs = readRuns(stateDir).map(projectRun).sort((left, right) => left.runId.localeCompare(right.runId))\n const policy = manifest?.policy ?? DEFAULT_POLICY\n const reportComparisons = manifest ? comparisons(runs, manifest, policy) : []\n const comparable = reportComparisons.filter((comparison) => comparison.comparable)\n const durationRegressionTaskIds = comparable.filter((comparison) => (comparison.improvement.durationRate ?? 0) < -policy.maxDurationRegressionRate).map((comparison) => comparison.taskId)\n const escapedIncompleteTaskIds = comparable.filter((comparison) => comparison.harness.escapedIncomplete !== 0).map((comparison) => comparison.taskId)\n const reasons = []\n if (comparable.length < policy.minComparableTasks) reasons.push(`requires at least ${policy.minComparableTasks} comparable tasks`)\n const incompleteBaselineTaskIds = reportComparisons.filter((comparison) => comparison.comparability === 'baseline-incomplete').map((comparison) => comparison.taskId)\n if (incompleteBaselineTaskIds.length) reasons.push(`baseline delivery incomplete: ${incompleteBaselineTaskIds.join(', ')}`)\n const baselineSampleGaps = reportComparisons.filter((comparison) => comparison.baselineSampleCount < policy.minBaselineSamplesPerTask).map((comparison) => `${comparison.taskId} (${comparison.baselineSampleCount}/${policy.minBaselineSamplesPerTask})`)\n if (baselineSampleGaps.length) reasons.push(`requires ${policy.minBaselineSamplesPerTask} baseline samples per task: ${baselineSampleGaps.join(', ')}`)\n if (durationRegressionTaskIds.length) reasons.push(`duration regression exceeds ${policy.maxDurationRegressionRate * 100}%: ${durationRegressionTaskIds.join(', ')}`)\n if (policy.requireZeroEscapedIncomplete && escapedIncompleteTaskIds.length) reasons.push(`escaped incomplete delivery: ${escapedIncompleteTaskIds.join(', ')}`)\n const confidenceLevel: BenchmarkConfidence = comparable.length < policy.minComparableTasks ? 'insufficient' : comparable.every((comparison) => comparison.confidence === 'reliable') ? 'reliable' : 'directional'\n const qualityGate: BenchmarkQualityGate = { status: comparable.length < policy.minComparableTasks ? 'insufficient-data' : reasons.length ? 'failed' : 'passed', confidence: confidenceLevel, comparableTaskCount: comparable.length, policy, durationRegressionTaskIds, escapedIncompleteTaskIds, reasons }\n return { type: 'agentskit-harness-benchmark', schemaVersion: BENCHMARK_SCHEMA_VERSION, stateDir, generatedAt: new Date().toISOString(), runs, summary: summarize(runs), comparisons: reportComparisons, qualityGate, ...(manifest ? { manifest: { suiteId: manifest.suiteId, taskCount: manifest.tasks.length, baselineCount: manifest.observations.length, comparableTaskCount: comparable.length } } : {}) }\n}\n","import { fail } from './errors.js'\n\nexport type ExternalCodingBenchmarkStatus = 'ok' | 'partial' | 'fail' | 'timeout'\n\nexport interface ExternalCodingBenchmarkRow {\n readonly providerId: string\n readonly status: ExternalCodingBenchmarkStatus\n readonly completenessScore: number\n readonly fileEditCount: number\n readonly summary: string\n readonly durationMs?: number\n readonly inputTokens?: number\n readonly outputTokens?: number\n readonly costUsd?: number\n readonly successPassed?: boolean\n}\n\nexport interface ExternalCodingBenchmarkReport {\n readonly kind: string\n readonly prompt: string\n readonly dryRun: boolean\n readonly isolateWorktrees: boolean\n readonly repoRoot: string\n readonly rows: readonly ExternalCodingBenchmarkRow[]\n}\n\nconst text = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n return (value as string).trim()\n}\n\nconst numberValue = (value: unknown, label: string, integer = false): number => {\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0 || (integer && !Number.isInteger(value))) fail(`${label} must be a non-negative ${integer ? 'integer' : 'number'}.`, 'INVALID_INPUT')\n return value as number\n}\n\n/**\n * Validates the stable report shape emitted by AgentsKit OS coding benchmarks.\n * Provider heuristics remain observations; this function never grants human acceptance.\n */\nexport const validateExternalCodingBenchmarkReport = (value: unknown): ExternalCodingBenchmarkReport => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('coding benchmark report must be an object.', 'INVALID_INPUT')\n const raw = value as Record<string, unknown>\n if (!['edit', 'fix-bug', 'add-feature', 'refactor', 'add-test', 'review-pr', 'free-form'].includes(text(raw['kind'], 'report.kind'))) fail('report.kind is not a supported coding task kind.', 'INVALID_INPUT')\n if (typeof raw['dryRun'] !== 'boolean' || typeof raw['isolateWorktrees'] !== 'boolean') fail('report.dryRun and report.isolateWorktrees must be booleans.', 'INVALID_INPUT')\n if (!Array.isArray(raw['rows']) || raw['rows'].length === 0) fail('report.rows must contain at least one provider result.', 'INVALID_INPUT')\n const rows = (raw['rows'] as unknown[]).map((item: unknown, index: number) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) fail(`report.rows[${index}] must be an object.`, 'INVALID_INPUT')\n const row = item as Record<string, unknown>\n const status = text(row['status'], `report.rows[${index}].status`)\n if (!['ok', 'partial', 'fail', 'timeout'].includes(status)) fail(`report.rows[${index}].status is invalid.`, 'INVALID_INPUT')\n const completenessScore = numberValue(row['completenessScore'], `report.rows[${index}].completenessScore`)\n if (completenessScore > 100) fail(`report.rows[${index}].completenessScore must be between 0 and 100.`, 'INVALID_INPUT')\n const optional = (key: string): number | undefined => row[key] === undefined ? undefined : numberValue(row[key], `report.rows[${index}].${key}`)\n return {\n providerId: text(row['providerId'], `report.rows[${index}].providerId`),\n status: status as ExternalCodingBenchmarkStatus,\n completenessScore,\n fileEditCount: numberValue(row['fileEditCount'], `report.rows[${index}].fileEditCount`, true),\n summary: text(row['summary'], `report.rows[${index}].summary`),\n ...(optional('durationMs') === undefined ? {} : { durationMs: optional('durationMs') }),\n ...(optional('inputTokens') === undefined ? {} : { inputTokens: optional('inputTokens') }),\n ...(optional('outputTokens') === undefined ? {} : { outputTokens: optional('outputTokens') }),\n ...(optional('costUsd') === undefined ? {} : { costUsd: optional('costUsd') }),\n ...(row['successPassed'] === undefined ? {} : typeof row['successPassed'] !== 'boolean' ? fail(`report.rows[${index}].successPassed must be a boolean.`, 'INVALID_INPUT') : { successPassed: row['successPassed'] }),\n }\n })\n if (new Set(rows.map((row) => row.providerId)).size !== rows.length) fail('coding benchmark provider ids must be unique.', 'INVALID_INPUT')\n return { kind: text(raw['kind'], 'report.kind'), prompt: text(raw['prompt'], 'report.prompt'), dryRun: raw['dryRun'] as boolean, isolateWorktrees: raw['isolateWorktrees'] as boolean, repoRoot: text(raw['repoRoot'], 'report.repoRoot'), rows }\n}\n","import { randomUUID } from 'node:crypto'\nimport { FileEventStore } from './events.js'\nimport { fail } from './errors.js'\nimport type { HarnessEvent, HarnessEventInput, HarnessEventPayloads } from './events.js'\nimport type { PolicyGate } from './policy.js'\nimport type { ToolExecutionResult, ToolRuntime } from './runtime.js'\nimport type { VerificationRun } from './types.js'\n\nexport interface AgentAdapter {\n readonly id: string\n readonly version: string\n readonly capabilities: readonly string[]\n}\n\nexport interface AgentSessionOptions {\n readonly stateDir: string\n readonly run: VerificationRun\n readonly adapter: AgentAdapter\n readonly policy: PolicyGate\n readonly runtime: ToolRuntime\n readonly sessionId?: string\n readonly resume?: boolean\n}\n\nexport interface SessionRecorder {\n readonly sessionId: string\n startTurn(inputHash: string, turnId?: string): HarnessEvent<'agent.turn.started'>\n requestTool(input: { readonly turnId: string; readonly toolId: string; readonly argumentsHash: string; readonly actionId?: string }): HarnessEvent<'tool.requested'> | HarnessEvent<'tool.approval.requested'>\n approveTool(input: { readonly actionId: string; readonly decision: 'approved' | 'rejected'; readonly actor?: 'human' }): HarnessEvent<'tool.requested'> | HarnessEvent<'tool.blocked'>\n recoverTool(input: { readonly actionId: string; readonly decision: 'retry' | 'abandon'; readonly actor?: 'human' }): HarnessEvent<'tool.recovery.recorded'> | HarnessEvent<'tool.blocked'>\n completeTool(input: { readonly actionId: string; readonly resultHash: string; readonly durationMs: number; readonly runtimeEvidence?: ToolExecutionResult['runtimeEvidence'] }): HarnessEvent<'tool.completed'>\n failTool(input: { readonly actionId: string; readonly errorCode: string; readonly retryable: boolean; readonly durationMs: number; readonly runtimeEvidence?: ToolExecutionResult['runtimeEvidence'] }): HarnessEvent<'tool.failed'>\n executeTool(input: { readonly actionId: string; readonly arguments: unknown }): Promise<ToolExecutionResult>\n end(status: 'completed' | 'failed' | 'cancelled'): HarnessEvent<'session.ended'>\n}\n\ntype SessionEventType = 'session.started' | 'session.resumed' | 'agent.turn.started' | 'policy.evaluated' | 'tool.approval.requested' | 'tool.approval.recorded' | 'tool.requested' | 'tool.execution.started' | 'tool.recovery.recorded' | 'tool.blocked' | 'tool.completed' | 'tool.failed' | 'session.ended'\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst duration = (value: number): number => {\n if (!Number.isFinite(value) || value < 0) fail('Tool durationMs must be a non-negative number.', 'INVALID_INPUT')\n return value\n}\n\nexport const createSessionRecorder = ({ stateDir, run, adapter, policy, runtime, sessionId = randomUUID(), resume = false }: AgentSessionOptions): SessionRecorder => {\n if (run.state !== 'IMPLEMENTING') fail(`Agent sessions can only start during IMPLEMENTING, not ${run.state}.`, 'INVALID_STATE')\n const id = required(sessionId, 'sessionId')\n const adapterId = required(adapter.id, 'adapter.id')\n const adapterVersion = required(adapter.version, 'adapter.version')\n if (!policy || typeof policy.evaluate !== 'function') fail('policy.evaluate is required.', 'INVALID_INPUT')\n if (!runtime || typeof runtime.execute !== 'function') fail('runtime.execute is required.', 'INVALID_INPUT')\n if (!Array.isArray(adapter.capabilities) || adapter.capabilities.some((capability) => typeof capability !== 'string' || !capability.trim())) fail('adapter.capabilities must contain non-empty strings.', 'INVALID_INPUT')\n const store = new FileEventStore(stateDir)\n const append = <K extends SessionEventType>(type: K, payload: HarnessEventPayloads[K]): HarnessEvent<K> => store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, sessionId: id, type, payload } as unknown as HarnessEventInput<K>)\n const turns = new Set<string>()\n const actions = new Set<string>()\n const pending = new Map<string, { readonly turnId: string; readonly toolId: string; readonly argumentsHash: string; executionStarted: boolean }>()\n const approvals = new Map<string, { readonly turnId: string; readonly toolId: string; readonly argumentsHash: string; readonly policyId: string; readonly reason: string }>()\n const released = new Map<string, { readonly turnId: string; readonly toolId: string; readonly argumentsHash: string; executionStarted: boolean }>()\n const attempts = new Map<string, number>()\n const executing = new Set<string>()\n let ended = false\n if (resume) {\n const prior = store.read(run.runId).filter((event) => event.sessionId === id)\n if (!prior.some((event) => event.type === 'session.started')) fail(`Session does not exist: ${id}.`, 'INVALID_STATE')\n if (prior.some((event) => event.type === 'session.ended')) fail(`Session has already ended: ${id}.`, 'INVALID_STATE')\n for (const event of prior) {\n if (event.type === 'agent.turn.started') turns.add(event.payload.turnId)\n if (event.type === 'tool.approval.requested') { actions.add(event.payload.actionId); approvals.set(event.payload.actionId, { turnId: event.payload.turnId, toolId: event.payload.toolId, argumentsHash: event.payload.argumentsHash, policyId: event.payload.policyId, reason: event.payload.reason }) }\n if (event.type === 'tool.approval.recorded') { approvals.delete(event.payload.actionId); if (event.payload.decision === 'approved') released.set(event.payload.actionId, { turnId: event.payload.turnId, toolId: event.payload.toolId, argumentsHash: event.payload.argumentsHash, executionStarted: false }) }\n if (event.type === 'tool.requested') { actions.add(event.payload.actionId); pending.set(event.payload.actionId, { turnId: event.payload.turnId, toolId: event.payload.toolId, argumentsHash: event.payload.argumentsHash, executionStarted: false }); released.delete(event.payload.actionId) }\n if (event.type === 'tool.execution.started') { const action = pending.get(event.payload.actionId); if (action) action.executionStarted = true; attempts.set(event.payload.actionId, event.payload.attempt) }\n if (event.type === 'tool.recovery.recorded' && event.payload.decision === 'retry') { const action = pending.get(event.payload.actionId); if (action) action.executionStarted = false }\n if (event.type === 'tool.completed' || event.type === 'tool.failed' || event.type === 'tool.blocked') pending.delete(event.payload.actionId)\n }\n for (const [actionId, action] of released) if (!pending.has(actionId)) pending.set(actionId, action)\n }\n const open = (): void => { if (ended) fail('Session has already ended.', 'INVALID_STATE') }\n const complete = (input: { readonly actionId: string; readonly resultHash: string; readonly durationMs: number; readonly runtimeEvidence?: ToolExecutionResult['runtimeEvidence'] }): HarnessEvent<'tool.completed'> => { open(); const actionId = required(input.actionId, 'actionId'); if (!pending.has(actionId)) fail(`Tool action is not pending: ${actionId}.`, 'INVALID_STATE'); const event = append('tool.completed', { actionId, resultHash: required(input.resultHash, 'resultHash'), durationMs: duration(input.durationMs), ...(input.runtimeEvidence ? { runtimeEvidence: input.runtimeEvidence } : {}) }); pending.delete(actionId); return event }\n const failAction = (input: { readonly actionId: string; readonly errorCode: string; readonly retryable: boolean; readonly durationMs: number; readonly runtimeEvidence?: ToolExecutionResult['runtimeEvidence'] }): HarnessEvent<'tool.failed'> => { open(); const actionId = required(input.actionId, 'actionId'); if (!pending.has(actionId)) fail(`Tool action is not pending: ${actionId}.`, 'INVALID_STATE'); if (typeof input.retryable !== 'boolean') fail('retryable must be boolean.', 'INVALID_INPUT'); const event = append('tool.failed', { actionId, errorCode: required(input.errorCode, 'errorCode'), retryable: input.retryable, durationMs: duration(input.durationMs), ...(input.runtimeEvidence ? { runtimeEvidence: input.runtimeEvidence } : {}) }); pending.delete(actionId); return event }\n const recorder: SessionRecorder = {\n sessionId: id,\n startTurn: (inputHash, turnId = randomUUID()) => { open(); const turn = required(turnId, 'turnId'); if (turns.has(turn)) fail(`Turn already exists: ${turn}.`, 'INVALID_STATE'); const event = append('agent.turn.started', { turnId: turn, inputHash: required(inputHash, 'inputHash') }); turns.add(turn); return event },\n requestTool: (input): HarnessEvent<'tool.requested'> | HarnessEvent<'tool.approval.requested'> => { open(); const turnId = required(input.turnId, 'turnId'); if (!turns.has(turnId)) fail(`Turn does not exist: ${turnId}.`, 'INVALID_STATE'); const actionId = required(input.actionId ?? randomUUID(), 'actionId'); if (actions.has(actionId)) fail(`Tool action already exists: ${actionId}.`, 'INVALID_STATE'); const toolId = required(input.toolId, 'toolId'); const argumentsHash = required(input.argumentsHash, 'argumentsHash'); const decision = policy.evaluate({ actionId, turnId, toolId, argumentsHash }); if (!decision || (decision.decision !== 'allow' && decision.decision !== 'block' && decision.decision !== 'approve')) fail('Policy decision is invalid.', 'HARNESS_ERROR'); const policyId = required(decision.policyId, 'policyId'); const reason = required(decision.reason, 'policy reason'); append('policy.evaluated', { actionId, turnId, toolId, decision: decision.decision, policyId, reason }); actions.add(actionId); if (decision.decision === 'block') { append('tool.blocked', { turnId, actionId, toolId, policyId, reason }); fail(`Tool action blocked by policy: ${policyId}.`, 'POLICY_BLOCKED') } if (decision.decision === 'approve') { const event = append('tool.approval.requested', { turnId, actionId, toolId, argumentsHash, policyId, reason }); approvals.set(actionId, { turnId, toolId, argumentsHash, policyId, reason }); return event } const event = append('tool.requested', { turnId, actionId, toolId, argumentsHash }); pending.set(actionId, { turnId, toolId, argumentsHash, executionStarted: false }); return event },\n approveTool: (input) => { open(); const actionId = required(input.actionId, 'actionId'); const approval = approvals.get(actionId) ?? fail(`Tool action is not awaiting human approval: ${actionId}.`, 'INVALID_STATE'); if (input.actor !== undefined && input.actor !== 'human') fail('Tool approval requires a human actor.', 'HUMAN_APPROVAL_REQUIRED'); const decision = input.decision; if (decision !== 'approved' && decision !== 'rejected') fail('Tool approval decision is invalid.', 'INVALID_INPUT'); append('tool.approval.recorded', { turnId: approval.turnId, actionId, toolId: approval.toolId, argumentsHash: approval.argumentsHash, decision, actor: 'human', policyId: approval.policyId, reason: approval.reason }); approvals.delete(actionId); if (decision === 'rejected') return append('tool.blocked', { turnId: approval.turnId, actionId, toolId: approval.toolId, policyId: approval.policyId, reason: 'Human rejected the tool action.' }); const event = append('tool.requested', { turnId: approval.turnId, actionId, toolId: approval.toolId, argumentsHash: approval.argumentsHash }); pending.set(actionId, { turnId: approval.turnId, toolId: approval.toolId, argumentsHash: approval.argumentsHash, executionStarted: false }); return event },\n recoverTool: (input) => { open(); const actionId = required(input.actionId, 'actionId'); const action = pending.get(actionId) ?? fail(`Tool action is not pending: ${actionId}.`, 'INVALID_STATE'); if (!action.executionStarted) fail(`Tool action does not require recovery: ${actionId}.`, 'INVALID_STATE'); if (input.actor !== undefined && input.actor !== 'human') fail('Tool recovery requires a human actor.', 'HUMAN_APPROVAL_REQUIRED'); if (input.decision !== 'retry' && input.decision !== 'abandon') fail('Tool recovery decision is invalid.', 'INVALID_INPUT'); const reason = input.decision === 'retry' ? 'Human authorized a retry after interruption.' : 'Human abandoned the interrupted tool action.'; const recovery = append('tool.recovery.recorded', { turnId: action.turnId, actionId, toolId: action.toolId, decision: input.decision, actor: 'human', reason }); if (input.decision === 'retry') { action.executionStarted = false; return recovery } pending.delete(actionId); return append('tool.blocked', { turnId: action.turnId, actionId, toolId: action.toolId, policyId: 'recovery', reason }) },\n completeTool: complete,\n failTool: failAction,\n executeTool: async (input) => { open(); const actionId = required(input.actionId, 'actionId'); const action = pending.get(actionId) ?? fail(`Tool action is not pending: ${actionId}.`, 'INVALID_STATE'); if (action.executionStarted) fail(`Tool action requires human recovery decision: ${actionId}.`, 'HUMAN_APPROVAL_REQUIRED'); if (executing.has(actionId)) fail(`Tool action is already executing: ${actionId}.`, 'INVALID_STATE'); executing.add(actionId); action.executionStarted = true; const attempt = (attempts.get(actionId) ?? 0) + 1; attempts.set(actionId, attempt); append('tool.execution.started', { actionId, turnId: action.turnId, toolId: action.toolId, attempt }); try { const result = await runtime.execute({ actionId, turnId: action.turnId, toolId: action.toolId, argumentsHash: action.argumentsHash, arguments: input.arguments }); if (result.status === 'completed') { complete({ actionId, resultHash: result.resultHash, durationMs: result.durationMs, runtimeEvidence: result.runtimeEvidence }); return result } if (result.status === 'failed') { failAction({ actionId, errorCode: result.errorCode, retryable: result.retryable, durationMs: result.durationMs, runtimeEvidence: result.runtimeEvidence }); return result } return fail('Runtime returned an invalid execution result.', 'HARNESS_ERROR') } catch { const result = { status: 'failed' as const, errorCode: 'RUNTIME_ERROR', retryable: true, durationMs: 0 }; if (pending.has(actionId)) failAction({ actionId, ...result }); return result } finally { executing.delete(actionId) } },\n end: (status) => { open(); if (!['completed', 'failed', 'cancelled'].includes(status)) fail('Session status is invalid.', 'INVALID_INPUT'); if (pending.size) fail('Session cannot end while tool actions are pending.', 'INVALID_STATE'); if (approvals.size) fail('Session cannot end while tool approvals are pending.', 'HUMAN_APPROVAL_REQUIRED'); const event = append('session.ended', { status }); ended = true; return event },\n }\n if (resume) append('session.resumed', { recovery: 'event-log' })\n else append('session.started', { adapterId, adapterVersion, capabilities: adapter.capabilities.map((capability) => capability.trim()) })\n return recorder\n}\n","import { fail } from './errors.js'\n\nexport interface PolicyRule {\n readonly id: string\n readonly effect: 'allow' | 'block' | 'approve'\n readonly toolIds: readonly string[]\n readonly reason: string\n}\n\nexport interface PolicyRequest {\n readonly actionId: string\n readonly turnId: string\n readonly toolId: string\n readonly argumentsHash: string\n}\n\nexport interface PolicyDecision {\n readonly decision: 'allow' | 'block' | 'approve'\n readonly policyId: string\n readonly reason: string\n}\n\nexport interface PolicyGate {\n evaluate(request: PolicyRequest): PolicyDecision\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nexport const createPolicyGate = ({ rules }: { readonly rules: readonly PolicyRule[] }): PolicyGate => {\n if (!Array.isArray(rules)) fail('Policy rules must be an array.', 'INVALID_INPUT')\n const normalized = rules.map((rule, index) => {\n if (typeof rule !== 'object' || rule === null || Array.isArray(rule)) fail(`rules[${index}] must be an object.`, 'INVALID_INPUT')\n const id = required(rule.id, `rules[${index}].id`)\n if (rule.effect !== 'allow' && rule.effect !== 'block' && rule.effect !== 'approve') fail(`rules[${index}].effect is invalid.`, 'INVALID_INPUT')\n if (!Array.isArray(rule.toolIds) || !rule.toolIds.length || rule.toolIds.some((toolId) => typeof toolId !== 'string' || !toolId.trim())) fail(`rules[${index}].toolIds must contain non-empty strings.`, 'INVALID_INPUT')\n return { id, effect: rule.effect, toolIds: rule.toolIds.map((toolId) => required(toolId, `rules[${index}].toolIds`)), reason: required(rule.reason, `rules[${index}].reason`) }\n })\n if (new Set(normalized.map((rule) => rule.id)).size !== normalized.length) fail('Policy rules must have unique ids.', 'INVALID_INPUT')\n return {\n evaluate: (request) => {\n if (typeof request !== 'object' || request === null || Array.isArray(request)) fail('Policy request must be an object.', 'INVALID_INPUT')\n required(request.actionId, 'request.actionId')\n required(request.turnId, 'request.turnId')\n const toolId = required(request.toolId, 'request.toolId')\n required(request.argumentsHash, 'request.argumentsHash')\n const rule = normalized.find((candidate) => candidate.toolIds.includes(toolId))\n return rule ? { decision: rule.effect, policyId: rule.id, reason: rule.reason } : { decision: 'block', policyId: 'default-deny', reason: `No policy rule allows tool: ${toolId}.` }\n },\n }\n}\n","import { execFile, spawn } from 'node:child_process'\nimport { promisify } from 'node:util'\nimport { hashJson } from './hash.js'\nimport { fail } from './errors.js'\n\nexport interface ToolExecutionRequest {\n readonly actionId: string\n readonly turnId: string\n readonly toolId: string\n readonly argumentsHash: string\n readonly arguments: unknown\n readonly signal: AbortSignal\n}\n\nexport interface ToolDefinition {\n readonly toolId: string\n readonly execute: (request: ToolExecutionRequest) => Promise<unknown> | unknown\n}\n\nexport interface ToolRuntime {\n execute(request: Omit<ToolExecutionRequest, 'signal'>): Promise<ToolExecutionResult>\n}\n\nexport interface ProcessToolDefinition {\n readonly toolId: string\n readonly command: string\n readonly args?: readonly string[]\n readonly cwd?: string\n readonly env?: Readonly<Record<string, string>>\n}\n\nexport interface DockerMount {\n readonly source: string\n readonly target: string\n readonly readOnly?: boolean\n}\n\nexport interface DockerToolDefinition {\n readonly toolId: string\n readonly image: string\n readonly command: readonly string[]\n readonly args?: readonly string[]\n readonly cwd?: string\n readonly env?: Readonly<Record<string, string>>\n readonly mounts?: readonly DockerMount[]\n}\n\nexport interface DockerRuntimeEvidence {\n readonly provider: 'docker'\n readonly profileHash: string\n readonly image: string\n readonly imageDigest?: string\n readonly network: 'none'\n readonly readOnlyRootFilesystem: true\n readonly noNewPrivileges: true\n readonly capabilities: 'drop-all'\n readonly user: string\n readonly memoryLimit: string\n readonly cpus: string\n readonly pidsLimit: number\n}\n\nexport type ToolExecutionResult =\n | { readonly status: 'completed'; readonly resultHash: string; readonly durationMs: number; readonly runtimeEvidence?: DockerRuntimeEvidence }\n | { readonly status: 'failed'; readonly errorCode: string; readonly retryable: boolean; readonly durationMs: number; readonly runtimeEvidence?: DockerRuntimeEvidence }\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst duration = (value: number): number => {\n if (!Number.isFinite(value) || value < 0) fail('Tool durationMs must be a non-negative number.', 'INVALID_INPUT')\n return value\n}\n\nconst positiveNumber = (value: number | string, label: string): string => {\n const normalized = String(value).trim()\n if (!normalized || !/^(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/.test(normalized) || Number(normalized) <= 0) fail(`${label} must be positive.`, 'INVALID_INPUT')\n return normalized\n}\n\nconst absolutePath = (value: string, label: string): string => {\n const normalized = required(value, label)\n if (!normalized.startsWith('/') || normalized.includes(',')) fail(`${label} must be an absolute path without commas.`, 'INVALID_INPUT')\n return normalized\n}\n\nconst dockerEnvironment = (env: Readonly<Record<string, string>> | undefined, label: string): readonly string[] => {\n if (env === undefined) return []\n if (typeof env !== 'object' || env === null || Array.isArray(env)) fail(`${label} must be an object.`, 'INVALID_INPUT')\n return Object.entries(env).map(([key, value]) => {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key) || typeof value !== 'string') fail(`${label} must contain valid string environment entries.`, 'INVALID_INPUT')\n return `${key}=${value}`\n })\n}\n\nconst inspectImage = promisify(execFile)\n\nexport const createToolRuntime = ({ tools, timeoutMs = 30_000 }: { readonly tools: readonly ToolDefinition[]; readonly timeoutMs?: number }): ToolRuntime => {\n if (!Array.isArray(tools)) fail('Runtime tools must be an array.', 'INVALID_INPUT')\n if (!Number.isInteger(timeoutMs) || timeoutMs < 1) fail('Runtime timeoutMs must be a positive integer.', 'INVALID_INPUT')\n const normalized = tools.map((tool, index) => {\n if (typeof tool !== 'object' || tool === null || Array.isArray(tool)) fail(`tools[${index}] must be an object.`, 'INVALID_INPUT')\n const toolId = required(tool.toolId, `tools[${index}].toolId`)\n if (typeof tool.execute !== 'function') fail(`tools[${index}].execute is required.`, 'INVALID_INPUT')\n return { toolId, execute: tool.execute }\n })\n if (new Set(normalized.map((tool) => tool.toolId)).size !== normalized.length) fail('Runtime tools must have unique ids.', 'INVALID_INPUT')\n return {\n execute: async (request) => {\n const started = Date.now()\n const actionId = required(request.actionId, 'request.actionId')\n const turnId = required(request.turnId, 'request.turnId')\n const toolId = required(request.toolId, 'request.toolId')\n const argumentsHash = required(request.argumentsHash, 'request.argumentsHash')\n const tool = normalized.find((candidate) => candidate.toolId === toolId)\n if (!tool) return { status: 'failed', errorCode: 'TOOL_NOT_FOUND', retryable: false, durationMs: duration(Date.now() - started) }\n const controller = new AbortController()\n let timedOut = false\n let timer: NodeJS.Timeout | undefined\n try {\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => { timedOut = true; controller.abort(); reject(new Error('Tool execution timed out.')) }, timeoutMs)\n })\n const result = await Promise.race([Promise.resolve(tool.execute({ actionId, turnId, toolId, argumentsHash, arguments: request.arguments, signal: controller.signal })), timeout])\n return { status: 'completed', resultHash: hashJson(result === undefined ? null : result), durationMs: duration(Date.now() - started) }\n } catch {\n return { status: 'failed', errorCode: timedOut ? 'TIMEOUT' : 'RUNTIME_ERROR', retryable: true, durationMs: duration(Date.now() - started) }\n } finally {\n if (timer) clearTimeout(timer)\n }\n },\n }\n}\n\nexport const createProcessToolRuntime = ({ tools, timeoutMs = 30_000, maxOutputBytes = 1_048_576 }: { readonly tools: readonly ProcessToolDefinition[]; readonly timeoutMs?: number; readonly maxOutputBytes?: number }): ToolRuntime => {\n if (!Array.isArray(tools)) fail('Process runtime tools must be an array.', 'INVALID_INPUT')\n if (!Number.isInteger(timeoutMs) || timeoutMs < 1) fail('Process runtime timeoutMs must be a positive integer.', 'INVALID_INPUT')\n if (!Number.isInteger(maxOutputBytes) || maxOutputBytes < 1) fail('Process runtime maxOutputBytes must be a positive integer.', 'INVALID_INPUT')\n const normalized = tools.map((tool, index) => {\n if (typeof tool !== 'object' || tool === null || Array.isArray(tool)) fail(`tools[${index}] must be an object.`, 'INVALID_INPUT')\n const toolId = required(tool.toolId, `tools[${index}].toolId`)\n const command = required(tool.command, `tools[${index}].command`)\n if (tool.args !== undefined && (!Array.isArray(tool.args) || tool.args.some((arg) => typeof arg !== 'string'))) fail(`tools[${index}].args must contain strings.`, 'INVALID_INPUT')\n if (tool.env !== undefined && (typeof tool.env !== 'object' || tool.env === null || Array.isArray(tool.env) || Object.values(tool.env).some((value) => typeof value !== 'string'))) fail(`tools[${index}].env must contain string values.`, 'INVALID_INPUT')\n return { toolId, command, args: tool.args ? [...tool.args] : [], ...(tool.cwd ? { cwd: tool.cwd } : {}), env: tool.env ? { ...tool.env } : { PATH: process.env['PATH'] ?? '' } }\n })\n if (new Set(normalized.map((tool) => tool.toolId)).size !== normalized.length) fail('Process runtime tools must have unique ids.', 'INVALID_INPUT')\n return {\n execute: async (request) => {\n const started = Date.now()\n const actionId = required(request.actionId, 'request.actionId')\n const turnId = required(request.turnId, 'request.turnId')\n const toolId = required(request.toolId, 'request.toolId')\n const argumentsHash = required(request.argumentsHash, 'request.argumentsHash')\n const tool = normalized.find((candidate) => candidate.toolId === toolId)\n if (!tool) return { status: 'failed', errorCode: 'TOOL_NOT_FOUND', retryable: false, durationMs: Date.now() - started }\n let input: string\n try { input = JSON.stringify({ actionId, turnId, toolId, argumentsHash, arguments: request.arguments }) } catch { return { status: 'failed', errorCode: 'SERIALIZATION_ERROR', retryable: false, durationMs: Date.now() - started } }\n return new Promise((resolve) => {\n const child = spawn(tool.command, tool.args, { cwd: tool.cwd, env: tool.env, shell: false, stdio: ['pipe', 'pipe', 'pipe'] })\n let stdout = ''\n let timedOut = false\n let outputLimit = false\n let spawnError = false\n let settled = false\n const timer = setTimeout(() => { timedOut = true; child.kill('SIGKILL') }, timeoutMs)\n const finish = (result: ToolExecutionResult): void => { if (settled) return; settled = true; clearTimeout(timer); resolve(result) }\n child.stdout.on('data', (chunk: Buffer) => { stdout += chunk.toString(); if (Buffer.byteLength(stdout) > maxOutputBytes) { outputLimit = true; child.kill('SIGKILL') } })\n child.stderr.on('data', (chunk: Buffer) => { if (chunk.length > maxOutputBytes) { outputLimit = true; child.kill('SIGKILL') } })\n child.on('error', () => { spawnError = true })\n child.on('close', (code) => {\n const durationMs = Date.now() - started\n if (timedOut) return finish({ status: 'failed', errorCode: 'TIMEOUT', retryable: true, durationMs })\n if (outputLimit) return finish({ status: 'failed', errorCode: 'OUTPUT_LIMIT', retryable: false, durationMs })\n if (spawnError || code === null) return finish({ status: 'failed', errorCode: 'PROCESS_ERROR', retryable: true, durationMs })\n if (code !== 0) return finish({ status: 'failed', errorCode: 'PROCESS_EXIT', retryable: false, durationMs })\n finish({ status: 'completed', resultHash: hashJson(stdout.trim() || null), durationMs })\n })\n child.stdin.on('error', () => { spawnError = true })\n child.stdin.end(input)\n })\n },\n }\n}\n\nexport const createDockerToolRuntime = ({\n tools,\n timeoutMs = 30_000,\n maxOutputBytes = 1_048_576,\n dockerCommand = 'docker',\n memoryLimit = '512m',\n cpus = 1,\n pidsLimit = 128,\n user = '65532:65532',\n pull = 'never',\n}: {\n readonly tools: readonly DockerToolDefinition[]\n readonly timeoutMs?: number\n readonly maxOutputBytes?: number\n readonly dockerCommand?: string\n readonly memoryLimit?: string\n readonly cpus?: number | string\n readonly pidsLimit?: number\n readonly user?: string\n readonly pull?: 'never' | 'missing' | 'always'\n}): ToolRuntime => {\n if (!Array.isArray(tools)) fail('Docker runtime tools must be an array.', 'INVALID_INPUT')\n const command = required(dockerCommand, 'dockerCommand')\n const memory = required(memoryLimit, 'memoryLimit')\n const cpu = positiveNumber(cpus, 'cpus')\n if (!Number.isInteger(pidsLimit) || pidsLimit < 1) fail('pidsLimit must be a positive integer.', 'INVALID_INPUT')\n const normalizedUser = required(user, 'user')\n if (normalizedUser.includes(' ')) fail('user must not contain spaces.', 'INVALID_INPUT')\n if (pull !== 'never' && pull !== 'missing' && pull !== 'always') fail('pull must be never, missing, or always.', 'INVALID_INPUT')\n const normalized = tools.map((tool, index) => {\n if (typeof tool !== 'object' || tool === null || Array.isArray(tool)) fail(`tools[${index}] must be an object.`, 'INVALID_INPUT')\n const toolId = required(tool.toolId, `tools[${index}].toolId`)\n const image = required(tool.image, `tools[${index}].image`)\n if (!Array.isArray(tool.command) || tool.command.length === 0 || tool.command.some((part) => typeof part !== 'string' || !part.trim())) fail(`tools[${index}].command must be a non-empty string array.`, 'INVALID_INPUT')\n if (tool.args !== undefined && (!Array.isArray(tool.args) || tool.args.some((arg) => typeof arg !== 'string'))) fail(`tools[${index}].args must contain strings.`, 'INVALID_INPUT')\n const env = dockerEnvironment(tool.env, `tools[${index}].env`)\n if (tool.mounts !== undefined && !Array.isArray(tool.mounts)) fail(`tools[${index}].mounts must be an array.`, 'INVALID_INPUT')\n const mounts = (tool.mounts ?? []).map((mount, mountIndex) => {\n if (typeof mount !== 'object' || mount === null || Array.isArray(mount)) fail(`tools[${index}].mounts[${mountIndex}] must be an object.`, 'INVALID_INPUT')\n const source = absolutePath(mount.source, `tools[${index}].mounts[${mountIndex}].source`)\n const target = absolutePath(mount.target, `tools[${index}].mounts[${mountIndex}].target`)\n if (mount.readOnly !== undefined && typeof mount.readOnly !== 'boolean') fail(`tools[${index}].mounts[${mountIndex}].readOnly must be boolean.`, 'INVALID_INPUT')\n return `type=bind,src=${source},dst=${target}${mount.readOnly === false ? '' : ',readonly'}`\n })\n const profileHash = hashJson({ provider: 'docker', toolId, image, command: [...tool.command], args: tool.args ?? [], cwd: tool.cwd ?? null, env, mounts, network: 'none', readOnlyRootFilesystem: true, noNewPrivileges: true, capabilities: 'drop-all', user: normalizedUser, memoryLimit: memory, cpus: cpu, pidsLimit, pull })\n return {\n toolId,\n command,\n image,\n profileHash,\n evidence: { provider: 'docker' as const, profileHash, image, network: 'none' as const, readOnlyRootFilesystem: true as const, noNewPrivileges: true as const, capabilities: 'drop-all' as const, user: normalizedUser, memoryLimit: memory, cpus: cpu, pidsLimit },\n args: [\n 'run', '--rm', '--init', '--pull', pull, '--network', 'none', '--read-only', '--cap-drop', 'ALL', '--security-opt', 'no-new-privileges',\n '--pids-limit', String(pidsLimit), '--memory', memory, '--cpus', cpu, '--user', normalizedUser,\n ...(tool.cwd ? ['--workdir', absolutePath(tool.cwd, `tools[${index}].cwd`)] : []),\n ...env.flatMap((entry) => ['--env', entry]),\n ...mounts.flatMap((mount) => ['--mount', mount]),\n image,\n ...tool.command,\n ...(tool.args ?? []),\n ],\n }\n })\n if (new Set(normalized.map((tool) => tool.toolId)).size !== normalized.length) fail('Docker runtime tools must have unique ids.', 'INVALID_INPUT')\n const processRuntime = createProcessToolRuntime({ tools: normalized, timeoutMs, maxOutputBytes })\n return {\n execute: async (request) => {\n const tool = normalized.find((candidate) => candidate.toolId === request.toolId)\n if (!tool) return processRuntime.execute(request)\n const started = Date.now()\n let imageDigest: string\n try {\n const inspected = await inspectImage(command, ['image', 'inspect', tool.image, '--format', '{{.Id}}'], { shell: false, encoding: 'utf8', maxBuffer: 64 * 1024, env: { PATH: process.env['PATH'] ?? '' } })\n imageDigest = inspected.stdout.trim()\n if (!/^sha256:[a-f0-9]{64}$/.test(imageDigest)) throw new Error('Docker image inspection did not return a digest.')\n } catch {\n return { status: 'failed', errorCode: 'IMAGE_UNAVAILABLE', retryable: true, durationMs: duration(Date.now() - started), runtimeEvidence: tool.evidence }\n }\n const runtimeEvidence = { ...tool.evidence, imageDigest, profileHash: hashJson({ ...tool.evidence, imageDigest }) }\n const result = await processRuntime.execute(request)\n return { ...result, runtimeEvidence }\n },\n }\n}\n","import { createPrivateKey, createPublicKey, sign, verify } from 'node:crypto'\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs'\nimport { join, relative, resolve, sep } from 'node:path'\nimport { fail } from './errors.js'\nimport { fileContents, loadLatestRun, pathInside, readJson } from './files.js'\nimport { sha256 } from './hash.js'\nimport { reconcileRun } from './verification.js'\nimport { FileEventStore } from './events.js'\nimport type { EventLogVerification } from './events.js'\nimport { loadConfig } from './config.js'\nimport type { VerificationRun } from './types.js'\n\nexport const EVIDENCE_BUNDLE_SCHEMA_VERSION = 1 as const\n\nexport interface EvidenceBundleFile {\n readonly path: string\n readonly sha256: string\n readonly contentBase64: string\n}\n\nexport interface EvidenceBundleSignature {\n readonly algorithm: 'ed25519'\n readonly keyId: string\n readonly publicKeyPem: string\n readonly signatureBase64: string\n}\n\nexport interface TrustedEvidenceKey {\n readonly keyId: string\n readonly publicKeyPem: string\n readonly status: 'active' | 'revoked'\n}\n\nexport interface EvidenceBundle {\n readonly type: 'agentskit-harness-evidence-bundle'\n readonly schemaVersion: typeof EVIDENCE_BUNDLE_SCHEMA_VERSION\n readonly runId: string\n readonly signerKeyId: string\n readonly sourceRevision: string\n readonly configHash: string\n readonly contractHash: string\n readonly verificationDigest: string\n readonly eventLog: EventLogVerification\n readonly files: readonly EvidenceBundleFile[]\n readonly payloadHash: string\n readonly signature: EvidenceBundleSignature\n}\n\nexport interface EvidenceBundleVerification {\n readonly status: 'verified'\n readonly runId: string\n readonly payloadHash: string\n readonly fileCount: number\n readonly signed: true\n}\n\nconst body = (bundle: EvidenceBundle): Omit<EvidenceBundle, 'payloadHash' | 'signature'> => {\n const { payloadHash: _payloadHash, signature: _signature, ...unsigned } = bundle\n return unsigned\n}\nconst parseBundle = (path: string): EvidenceBundle => {\n try { return JSON.parse(fileContents(path)) as EvidenceBundle } catch (error) { return fail(`Invalid evidence bundle JSON: ${error instanceof Error ? error.message : String(error)}`, 'INVALID_INPUT') }\n}\nconst validDigest = (value: unknown): value is string => typeof value === 'string' && /^[a-f0-9]{64}$/.test(value)\nconst validKeyId = (value: unknown): value is string => typeof value === 'string' && /^[A-Za-z0-9._:-]{1,128}$/.test(value)\nconst requireRun = (run: VerificationRun | null): VerificationRun => run ?? fail('No verification run exists.', 'NO_RUN')\nconst bundleFile = (stateDir: string, path: string): EvidenceBundleFile => {\n const absolute = resolve(stateDir, path)\n if (!pathInside(stateDir, absolute)) fail(`Evidence path escapes state directory: ${path}`, 'HARNESS_ERROR')\n const content = readFileSync(absolute)\n return { path: relative(stateDir, absolute).split(sep).join('/'), sha256: sha256(content), contentBase64: content.toString('base64') }\n}\n\nexport const exportEvidenceBundle = async ({ configPath, runId, outputPath, privateKeyPath, keyId }: { readonly configPath: string; readonly runId?: string; readonly outputPath: string; readonly privateKeyPath: string; readonly keyId: string }): Promise<EvidenceBundle> => {\n if (!validKeyId(keyId)) fail('keyId must contain only letters, numbers, dot, underscore, colon, or hyphen.', 'INVALID_INPUT')\n const loaded = loadConfig(configPath)\n const run = requireRun((runId ? readJson(join(loaded.stateDir, 'runs', runId, 'run.json')) : loadLatestRun(loaded.stateDir)) as VerificationRun | null)\n const reconciliation = await reconcileRun({ configPath, runId: run.runId })\n const digest = run.verificationDigest ?? fail('Only a reconciled COMPLETE run can be exported.', 'INVALID_STATE')\n if (reconciliation.state !== 'COMPLETE') fail('Only a reconciled COMPLETE run can be exported.', 'INVALID_STATE')\n const eventLog = new FileEventStore(loaded.stateDir)\n eventLog.read(run.runId)\n const eventVerification = eventLog.verify(run.runId)\n const paths = new Set(['runs/' + run.runId + '/run.json', 'runs/' + run.runId + '/events.ndjson'])\n for (const reference of run.evidenceReferences) { paths.add(reference.stdout); paths.add(reference.stderr) }\n const files = [...paths].map((path) => {\n if (!existsSync(resolve(loaded.stateDir, path))) fail(`Evidence file is missing: ${path}`, 'HARNESS_ERROR')\n return bundleFile(loaded.stateDir, path)\n })\n const privateKey = createPrivateKey(readFileSync(privateKeyPath))\n const unsigned = { type: 'agentskit-harness-evidence-bundle' as const, schemaVersion: EVIDENCE_BUNDLE_SCHEMA_VERSION, runId: run.runId, signerKeyId: keyId, sourceRevision: run.sourceRevision, configHash: run.configHash, contractHash: run.contractHash, verificationDigest: digest, eventLog: eventVerification, files }\n const payloadHash = sha256(JSON.stringify(unsigned))\n const publicKeyPem = createPublicKey(privateKey).export({ type: 'spki', format: 'pem' }).toString()\n const bundle = { ...unsigned, payloadHash, signature: { algorithm: 'ed25519' as const, keyId, publicKeyPem, signatureBase64: sign(null, Buffer.from(payloadHash), privateKey).toString('base64') } }\n writeFileSync(outputPath, `${JSON.stringify(bundle, null, 2)}\\n`, 'utf8')\n return bundle\n}\n\nexport const verifyEvidenceBundle = (path: string, { trustedKeys = [] }: { readonly trustedKeys?: readonly TrustedEvidenceKey[] } = {}): EvidenceBundleVerification => {\n const bundle = parseBundle(path)\n if (bundle.type !== 'agentskit-harness-evidence-bundle' || bundle.schemaVersion !== EVIDENCE_BUNDLE_SCHEMA_VERSION || !bundle.runId || !validKeyId(bundle.signerKeyId) || !validDigest(bundle.payloadHash) || bundle.signature?.algorithm !== 'ed25519' || bundle.signature.keyId !== bundle.signerKeyId || typeof bundle.signature.publicKeyPem !== 'string' || typeof bundle.signature.signatureBase64 !== 'string' || !Array.isArray(bundle.files)) fail('Evidence bundle metadata is invalid.', 'HARNESS_ERROR')\n if (trustedKeys.length) {\n const trusted = trustedKeys.find((key) => key.keyId === bundle.signerKeyId)\n if (!trusted) return fail(`Evidence bundle key is not trusted: ${bundle.signerKeyId}`, 'HARNESS_ERROR')\n if (trusted.status === 'revoked') fail(`Evidence bundle key is revoked: ${bundle.signerKeyId}`, 'HARNESS_ERROR')\n if (trusted.publicKeyPem !== bundle.signature.publicKeyPem) fail(`Evidence bundle key does not match trust store: ${bundle.signerKeyId}`, 'HARNESS_ERROR')\n }\n const paths = new Set<string>()\n for (const file of bundle.files) {\n if (!file || typeof file.path !== 'string' || paths.has(file.path) || !validDigest(file.sha256) || typeof file.contentBase64 !== 'string') fail('Evidence bundle file metadata is invalid.', 'HARNESS_ERROR')\n paths.add(file.path)\n const content = Buffer.from(file.contentBase64, 'base64')\n if (sha256(content) !== file.sha256) fail(`Evidence bundle file hash mismatch: ${file.path}`, 'HARNESS_ERROR')\n }\n if (!paths.has(`runs/${bundle.runId}/run.json`) || !paths.has(`runs/${bundle.runId}/events.ndjson`)) fail('Evidence bundle is missing the run projection or event log.', 'HARNESS_ERROR')\n if (sha256(JSON.stringify(body(bundle))) !== bundle.payloadHash) fail('Evidence bundle payload hash mismatch.', 'HARNESS_ERROR')\n let valid = false\n try { valid = verify(null, Buffer.from(bundle.payloadHash), createPublicKey(bundle.signature.publicKeyPem), Buffer.from(bundle.signature.signatureBase64, 'base64')) } catch { valid = false }\n if (!valid) fail('Evidence bundle signature is invalid.', 'HARNESS_ERROR')\n return { status: 'verified', runId: bundle.runId, payloadHash: bundle.payloadHash, fileCount: bundle.files.length, signed: true }\n}\n\nexport const readEvidenceTrustStore = (path: string): readonly TrustedEvidenceKey[] => {\n const value = readJson(path) as { readonly schemaVersion?: unknown; readonly keys?: unknown }\n if (value.schemaVersion !== 1 || !Array.isArray(value.keys)) fail('Evidence trust store must contain schemaVersion 1 and a keys array.', 'INVALID_INPUT')\n return (value.keys as readonly unknown[]).map((key: unknown, index: number) => {\n if (typeof key !== 'object' || key === null || Array.isArray(key) || !validKeyId((key as Record<string, unknown>)['keyId']) || typeof (key as Record<string, unknown>)['publicKeyPem'] !== 'string' || ((key as Record<string, unknown>)['status'] !== 'active' && (key as Record<string, unknown>)['status'] !== 'revoked')) fail(`Invalid evidence trust store key at index ${index}.`, 'INVALID_INPUT')\n return key as TrustedEvidenceKey\n })\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/kernel/constants.ts","../src/kernel/errors.ts","../src/kernel/error-policy.ts","../src/profiles/index.ts","../src/kernel/hash.ts","../src/execution/files.ts","../src/kernel/types.ts","../src/execution/config.ts","../src/kernel/state-machine.ts","../src/kernel/events.ts","../src/kernel/plugins.ts","../src/kernel/adapter-contract.ts","../src/context/index.ts","../src/execution/runs.ts","../src/execution/evidence.ts","../src/execution/source.ts","../src/execution/machine.ts","../src/execution/verification.ts","../src/kernel/capabilities.ts","../src/adapters/doc-bridge.ts","../src/kernel/discovery.ts","../src/kernel/wip.ts","../src/kernel/experiment.ts","../src/kernel/workflow.ts","../src/delivery/review.ts","../src/delivery/index.ts","../src/kernel/pilot.ts","../src/kernel/cycle.ts","../src/kernel/eval.ts","../src/kernel/cache.ts","../src/kernel/optimization.ts","../src/kernel/memory.ts","../src/kernel/phase-executor.ts","../src/kernel/artifacts.ts","../src/kernel/quality.ts","../src/kernel/compatibility.ts","../src/kernel/resilience.ts","../src/adapters/agent.ts","../src/execution/metrics.ts","../src/execution/agent.ts","../src/kernel/policy.ts","../src/execution/runtime.ts","../src/execution/coordination.ts","../src/kernel/preflight.ts","../src/kernel/block.ts","../src/kernel/learning.ts","../src/kernel/status.ts","../src/kernel/model-policy.ts","../src/adapters/orca.ts","../src/adapters/tracking.ts","../src/execution/bundle.ts"],"names":["descriptor","index","resolve","isRecord","record","id","category","dirname","join","existsSync","readFileSync","body","value","mkdirSync","sourceHash","saveRun","transition","relative","cpus","cpuInfo","now","binding","writeFileSync","required","digest","nonEmpty","names","validId","createHash","text","component","manifestBody","thresholds","blockers","nonNegative","matches","phase","levels","readdirSync","score","duration","nonNegativeInteger","timeout","rate","median","sha256","stringList","reviewMinutes","item","observation","rmSync","comparable","event","process","promisify","execFile","spawn","appendFileSync","randomUUID","openSync","closeSync","unlinkSync","unique","requireRun","sep"],"mappings":"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","file":"index.js","sourcesContent":["import type { RunState } from './types.js'\n\nexport const STATES = [\n 'CLARIFYING', 'PLANNED', 'IMPLEMENTING', 'VERIFYING',\n 'AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE',\n 'BLOCKED', 'STALE', 'CANCELLED', 'SUPERSEDED',\n] as const satisfies readonly RunState[]\n\nexport const LEGAL_TRANSITIONS = {\n CLARIFYING: ['PLANNED', 'BLOCKED', 'CANCELLED'],\n PLANNED: ['IMPLEMENTING', 'CLARIFYING', 'STALE', 'CANCELLED'],\n IMPLEMENTING: ['VERIFYING', 'CLARIFYING', 'STALE', 'CANCELLED'],\n VERIFYING: ['AWAITING_HUMAN_APPROVAL', 'COMPLETE', 'BLOCKED', 'STALE', 'CANCELLED'],\n AWAITING_HUMAN_APPROVAL: ['AWAITING_AUTHORIZATION', 'COMPLETE', 'BLOCKED', 'IMPLEMENTING', 'STALE', 'CANCELLED'],\n AWAITING_AUTHORIZATION: ['COMPLETE', 'BLOCKED', 'IMPLEMENTING', 'STALE', 'CANCELLED'],\n COMPLETE: ['STALE', 'SUPERSEDED'],\n BLOCKED: ['SUPERSEDED'],\n STALE: ['SUPERSEDED', 'PLANNED'],\n CANCELLED: ['SUPERSEDED'],\n SUPERSEDED: [],\n} as const satisfies Readonly<Record<RunState, readonly RunState[]>>\n\nexport const REAL_CATEGORIES: ReadonlySet<string> = new Set(['endpoint', 'database', 'cli', 'mcp', 'ui'])\nexport const DECISIONS: ReadonlySet<string> = new Set(['approved', 'approve', 'yes', 'ok', 'rejected', 'reject', 'no'])\n","export const HARNESS_ERROR_CODES = ['HARNESS_ERROR', 'INVALID_CONFIG', 'INVALID_INPUT', 'INVALID_STATE', 'POLICY_BLOCKED', 'CLARIFYING', 'STALE', 'WORKTREE_DIRTY', 'ACTIVE_RUN', 'NO_RUN', 'HUMAN_APPROVAL_REQUIRED', 'GIT_REQUIRED'] as const\nexport type HarnessErrorCode = typeof HARNESS_ERROR_CODES[number]\n\nexport class HarnessError extends Error {\n public readonly code: HarnessErrorCode\n\n public constructor(message: string, code: HarnessErrorCode = 'HARNESS_ERROR') {\n super(message)\n this.name = 'HarnessError'\n this.code = code\n }\n}\n\nexport const fail = (message: string, code: HarnessErrorCode = 'HARNESS_ERROR'): never => {\n throw new HarnessError(message, code)\n}\n","import { HarnessError, HARNESS_ERROR_CODES } from './errors.js'\nimport type { HarnessErrorCode } from './errors.js'\n\nexport type HarnessErrorDisposition = 'retry' | 'block' | 'escalate'\n\nexport interface HarnessErrorClassification {\n readonly code: HarnessErrorCode\n readonly disposition: HarnessErrorDisposition\n readonly retryable: boolean\n readonly message: string\n}\n\ntype ErrorDescriptor = Readonly<Pick<HarnessErrorClassification, 'disposition' | 'retryable'>>\n\nexport const HARNESS_ERROR_CATALOG: Readonly<Record<HarnessErrorCode, ErrorDescriptor>> = {\n HARNESS_ERROR: { disposition: 'escalate', retryable: false },\n INVALID_CONFIG: { disposition: 'block', retryable: false },\n INVALID_INPUT: { disposition: 'block', retryable: false },\n INVALID_STATE: { disposition: 'block', retryable: false },\n POLICY_BLOCKED: { disposition: 'block', retryable: false },\n CLARIFYING: { disposition: 'block', retryable: false },\n STALE: { disposition: 'block', retryable: false },\n WORKTREE_DIRTY: { disposition: 'block', retryable: false },\n ACTIVE_RUN: { disposition: 'retry', retryable: true },\n NO_RUN: { disposition: 'block', retryable: false },\n HUMAN_APPROVAL_REQUIRED: { disposition: 'block', retryable: false },\n GIT_REQUIRED: { disposition: 'block', retryable: false },\n}\n\nconst nonEmpty = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) throw new HarnessError(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nexport const classifyHarnessError = (error: unknown): HarnessErrorClassification => {\n const code = error instanceof HarnessError ? error.code : 'HARNESS_ERROR'\n const descriptor = HARNESS_ERROR_CATALOG[code]\n return { code, ...descriptor, message: error instanceof Error ? error.message : String(error) }\n}\n\nexport const validateHarnessErrorClassification = (value: unknown): HarnessErrorClassification => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) throw new HarnessError('Error classification must be an object.', 'INVALID_INPUT')\n const candidate = value as Record<string, unknown>\n const code = candidate['code']\n if (typeof code !== 'string' || !(HARNESS_ERROR_CODES as readonly string[]).includes(code)) throw new HarnessError('Error classification code is invalid.', 'INVALID_INPUT')\n const expected = HARNESS_ERROR_CATALOG[code as HarnessErrorCode]\n if (candidate['disposition'] !== expected.disposition || candidate['retryable'] !== expected.retryable) throw new HarnessError(`Error classification for ${code} is inconsistent.`, 'INVALID_INPUT')\n return { code: code as HarnessErrorCode, disposition: expected.disposition, retryable: expected.retryable, message: nonEmpty(candidate['message'], 'Error classification message') }\n}\n","import { fail } from '../kernel/errors.js'\n\ntype RawRecord = Record<string, unknown>\n\nconst isRecord = (value: unknown): value is RawRecord => typeof value === 'object' && value !== null && !Array.isArray(value)\nconst record = (value: unknown, label: string): RawRecord => {\n if (!isRecord(value)) fail(`${label} must be an object.`, 'INVALID_CONFIG')\n return value as RawRecord\n}\nconst id = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} must be a non-empty string.`, 'INVALID_CONFIG')\n return value as string\n}\nconst parents = (value: unknown, label: string): string[] => value === undefined ? [] : Array.isArray(value) ? value.map((item, index) => id(item, `${label}[${index}]`)) : [id(value, label)]\n\nconst merge = (base: RawRecord, overlay: RawRecord): RawRecord => {\n const result: RawRecord = { ...base }\n for (const key of ['surfaces', 'budget', 'cleanup', 'runtime', 'verification'] as const) {\n if (overlay[key] !== undefined) result[key] = { ...(isRecord(result[key]) ? result[key] : {}), ...record(overlay[key], `profile.${key}`) }\n }\n if (overlay['autonomy'] !== undefined) result['autonomy'] = overlay['autonomy']\n if (Array.isArray(overlay['checks'])) result['checks'] = overlay['checks']\n if (overlay['checkOverrides'] !== undefined) {\n if (!Array.isArray(overlay['checkOverrides'])) fail('profile.checkOverrides must be an array.', 'INVALID_CONFIG')\n const checks = Array.isArray(result['checks']) ? [...result['checks']] : []\n for (const [index, value] of (overlay['checkOverrides'] as unknown[]).entries()) {\n const override = record(value, `profile.checkOverrides[${index}]`)\n const checkId = id(override['id'], `profile.checkOverrides[${index}].id`)\n const checkIndex = checks.findIndex((check) => isRecord(check) && check['id'] === checkId)\n if (checkIndex < 0) fail(`profile.checkOverrides references unknown check: ${checkId}.`, 'INVALID_CONFIG')\n checks[checkIndex] = { ...(checks[checkIndex] as RawRecord), ...override }\n }\n result['checks'] = checks\n }\n return result\n}\n\nexport const resolveProfile = (root: RawRecord): RawRecord => {\n if (root['profiles'] === undefined) return root\n const profileMap = record(root['profiles'], 'profiles')\n const selected = id(root['profile'], 'profile')\n const visiting = new Set<string>()\n const visited = new Map<string, RawRecord>()\n const resolve = (name: string): RawRecord => {\n const cached = visited.get(name)\n if (cached) return cached\n if (visiting.has(name)) fail(`Profile inheritance cycle includes ${name}.`, 'INVALID_CONFIG')\n const definition = record(profileMap[name], `profiles.${name}`)\n visiting.add(name)\n let result: RawRecord = { ...root }\n for (const parent of parents(definition['extends'], `profiles.${name}.extends`)) result = merge(result, resolve(parent))\n result = merge(result, definition)\n visiting.delete(name); visited.set(name, result)\n return result\n }\n return resolve(selected)\n}\n","import { createHash } from 'node:crypto'\n\nexport const sha256 = (value: string | NodeJS.ArrayBufferView): string => createHash('sha256').update(value).digest('hex')\nexport const hashJson = (value: unknown): string => sha256(JSON.stringify(value))\n","import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs'\nimport { dirname, join, relative, resolve, sep } from 'node:path'\nimport { fail } from '../kernel/errors.js'\nimport type { LoadedConfig, VerificationRun } from '../kernel/types.js'\n\nexport const readJson = (path: string): unknown => JSON.parse(readFileSync(path, 'utf8')) as unknown\nexport const writeJson = (path: string, value: unknown): void => {\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, `${JSON.stringify(value, null, 2)}\\n`, 'utf8')\n}\n\nexport const pathInside = (root: string, candidate: string): boolean => {\n const rel = relative(resolve(root), resolve(candidate))\n return rel === '' || (!rel.startsWith(`..${sep}`) && rel !== '..' && !rel.startsWith(sep))\n}\n\nexport const latestPath = (stateDir: string): string => join(stateDir, 'latest.json')\nexport const runPath = (stateDir: string, runId: string): string => join(stateDir, 'runs', runId, 'run.json')\nexport const saveRun = (stateDir: string, run: VerificationRun): void => writeJson(runPath(stateDir, run.runId), run)\nexport const readRun = (stateDir: string, runId: string): VerificationRun => readJson(runPath(stateDir, runId)) as VerificationRun\n\nexport const loadLatestRun = (stateDir: string): VerificationRun | null => {\n if (!existsSync(latestPath(stateDir))) return null\n const pointer = readJson(latestPath(stateDir)) as { readonly runId: string }\n return readRun(stateDir, pointer.runId)\n}\n\nexport const setLatest = (stateDir: string, run: VerificationRun): void => writeJson(latestPath(stateDir), {\n runId: run.runId,\n path: relative(resolve(stateDir, '..', '..'), runPath(stateDir, run.runId)),\n updatedAt: new Date().toISOString(),\n})\n\nexport const cleanConfiguredArtifacts = (loaded: LoadedConfig): { readonly cleaned: readonly string[] } => {\n const roots = loaded.config.cleanup?.roots ?? []\n for (const root of roots) {\n const target = resolve(loaded.root, root)\n if (!pathInside(loaded.root, target)) fail(`Cleanup root escapes project root: ${root}`, 'INVALID_CONFIG')\n if (existsSync(target)) for (const entry of readdirSync(target)) rmSync(join(target, entry), { recursive: true, force: true })\n }\n return { cleaned: roots }\n}\n\nexport const fileContents = (path: string): string => readFileSync(path, 'utf8')\n","import type { ContextSnapshot } from '../context/index.js'\n\nexport const SURFACE_NAMES = ['logic', 'endpoint', 'database', 'cli', 'mcp', 'ui', 'docs'] as const\nexport type SurfaceName = typeof SURFACE_NAMES[number]\n\nexport const CHECK_CATEGORIES = ['build', 'test', 'lint', ...SURFACE_NAMES, 'custom'] as const\nexport type CheckCategory = typeof CHECK_CATEGORIES[number]\n\nexport const RUN_STATES = [\n 'CLARIFYING', 'PLANNED', 'IMPLEMENTING', 'VERIFYING',\n 'AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE',\n 'BLOCKED', 'STALE', 'CANCELLED', 'SUPERSEDED',\n] as const\nexport type RunState = typeof RUN_STATES[number]\n\nexport interface SurfaceRequirement {\n readonly required: boolean\n readonly reason?: string\n}\n\nexport interface ContractScope {\n readonly inScope: readonly string[]\n readonly outOfScope: readonly string[]\n}\n\nexport interface ContractOutcome {\n readonly id: string\n readonly statement: string\n readonly checks: readonly string[]\n}\n\nexport interface TaskContract {\n readonly intent: string\n readonly scope: ContractScope\n readonly ambiguities: readonly string[]\n readonly outcomes: readonly ContractOutcome[]\n}\n\nexport interface VerificationCheck {\n readonly id: string\n readonly category: CheckCategory\n readonly command: string\n readonly required: boolean\n readonly reason?: string\n readonly timeoutMs: number\n readonly dependsOn?: readonly string[]\n readonly execution?: 'real'\n readonly capabilities?: readonly string[]\n readonly evidence: 'structured'\n}\n\nexport interface TrackingConfig {\n readonly required: boolean\n readonly target?: string\n readonly reason?: string\n}\n\nexport interface BenchmarkBinding {\n readonly suiteId: string\n readonly taskId: string\n readonly mode: 'harness'\n}\n\nexport interface RuntimeConfig {\n readonly kind: 'process' | 'docker'\n}\n\nexport type AutonomyMode = 'controlled' | 'yolo'\n\nexport interface VerificationConfig {\n readonly schemaVersion: 1\n readonly project: string\n readonly root?: string\n readonly stateDir?: string\n readonly profile: string\n readonly autonomy: AutonomyMode\n readonly runtime: RuntimeConfig\n readonly contract: TaskContract\n readonly surfaces: Readonly<Record<SurfaceName, SurfaceRequirement>>\n readonly checks: readonly VerificationCheck[]\n readonly tracking: TrackingConfig\n readonly verification?: { readonly maxConcurrency?: number }\n readonly budget?: { readonly maxDurationMs?: number }\n readonly cleanup?: { readonly roots?: readonly string[] }\n readonly benchmark?: BenchmarkBinding\n}\n\nexport interface LoadedConfig {\n readonly absolute: string\n readonly root: string\n readonly stateDir: string\n readonly config: VerificationConfig\n readonly configHash: string\n}\n\nexport interface SourceSnapshot {\n readonly revision: string\n readonly status: string\n readonly statusHash: string\n}\n\nexport interface EvidenceArtifact {\n readonly type?: string\n readonly path: string\n readonly sha256: string\n readonly viewport?: { readonly width: number; readonly height: number } | string\n}\n\nexport interface StructuredEvidence {\n readonly status: string\n readonly criteria: readonly string[]\n readonly capability?: string\n readonly artifacts?: readonly EvidenceArtifact[]\n readonly [key: string]: unknown\n}\n\nexport interface CheckResult {\n readonly id: string\n readonly category: CheckCategory\n readonly status: 'pending' | 'passed' | 'failed' | 'not-applicable'\n readonly exitCode?: number\n readonly durationMs?: number\n readonly evidence?: StructuredEvidence\n readonly failures?: readonly string[]\n}\n\nexport interface RunOutcome extends ContractOutcome {\n readonly status: 'pending' | 'passed' | 'failed' | 'not-applicable'\n}\n\nexport interface EvidenceReference {\n readonly checkId: string\n readonly stdout: string\n readonly stderr: string\n}\n\nexport interface VerificationRun {\n readonly type: 'agentskit-harness-run'\n readonly schemaVersion: 1\n readonly runId: string\n readonly project: string\n readonly state: RunState\n readonly configHash: string\n readonly contractHash: string\n readonly sourceRevision: string\n readonly sourceStatusHash: string\n readonly baseline: SourceSnapshot\n readonly contractApproval: { readonly actor: 'human'; readonly at: string; readonly contractHash: string }\n readonly checks: readonly CheckResult[]\n readonly outcomes: readonly RunOutcome[]\n readonly transitions: readonly StateTransition[]\n readonly evidenceReferences: readonly EvidenceReference[]\n readonly contextSnapshots: readonly ContextSnapshot[]\n readonly contextHash?: string\n readonly verificationDigest?: string\n readonly benchmark?: BenchmarkBinding\n readonly supersedes?: string\n readonly dirtyBaselineAuthorized?: boolean\n readonly autonomy: AutonomyMode\n readonly metrics?: { readonly totalDurationMs: number; readonly wallDurationMs?: number; readonly peakConcurrency?: number; readonly budgetExceeded: boolean; readonly machine?: MachineMetrics }\n readonly humanApproval?: { readonly actor: 'human'; readonly at: string; readonly sourceRevision: string; readonly contractHash: string; readonly verificationDigest?: string }\n readonly authorization?: { readonly actor: 'human'; readonly at: string; readonly target: string; readonly sourceRevision: string; readonly contractHash: string; readonly verificationDigest?: string }\n}\n\nexport interface MachineSample {\n readonly at: string\n readonly cpus: number\n readonly load1: number\n readonly load1PerCpuPercent: number\n readonly memoryUsedPercent: number\n readonly rssBytes: number\n readonly swapUsedPercent?: number\n readonly memoryPressure?: 'normal' | 'warning' | 'critical'\n readonly interferingProcesses?: readonly string[]\n}\n\nexport interface MachineMetrics {\n readonly sampleIntervalMs: number\n readonly samples: readonly MachineSample[]\n readonly peakLoad1PerCpuPercent: number\n readonly peakMemoryUsedPercent: number\n readonly peakRssBytes: number\n readonly pressureEvents: number\n readonly throttleEvents: number\n readonly minimumEffectiveConcurrency: number\n}\n\nexport interface RunReconciliation {\n readonly status: 'verified'\n readonly runId: string\n readonly state: RunState\n readonly eventCount: number\n readonly headHash?: string\n readonly verificationDigest?: string\n}\n\nexport interface StateTransition {\n readonly from: RunState | null\n readonly to: RunState\n readonly at: string\n readonly actor?: string\n readonly reason?: string\n}\n","import { dirname, resolve } from 'node:path'\nimport { REAL_CATEGORIES } from '../kernel/constants.js'\nimport { resolveProfile } from '../profiles/index.js'\nimport { fail } from '../kernel/errors.js'\nimport { hashJson } from '../kernel/hash.js'\nimport { readJson } from './files.js'\nimport type { CheckCategory, ContractOutcome, LoadedConfig, RuntimeConfig, SurfaceName, SurfaceRequirement, TaskContract, TrackingConfig, VerificationCheck, VerificationConfig } from '../kernel/types.js'\nimport { CHECK_CATEGORIES, SURFACE_NAMES } from '../kernel/types.js'\n\ninterface RawRecord { readonly [key: string]: unknown }\ninterface RawScope extends RawRecord { readonly inScope?: unknown; readonly outOfScope?: unknown }\ninterface RawContract extends RawRecord { readonly intent?: unknown; readonly scope?: unknown; readonly ambiguities?: unknown; readonly outcomes?: unknown }\ninterface RawCheck extends RawRecord { readonly id?: unknown; readonly category?: unknown; readonly command?: unknown; readonly required?: unknown; readonly reason?: unknown; readonly timeoutMs?: unknown; readonly execution?: unknown; readonly capabilities?: unknown; readonly evidence?: unknown; readonly dependsOn?: unknown }\ninterface RawTracking extends RawRecord { readonly required?: unknown; readonly target?: unknown; readonly reason?: unknown }\ninterface RawConfig extends RawRecord { readonly schemaVersion?: unknown; readonly project?: unknown; readonly root?: unknown; readonly stateDir?: unknown; readonly profile?: unknown; readonly profiles?: unknown; readonly runtime?: unknown; readonly autonomy?: unknown; readonly contract?: unknown; readonly checks?: unknown; readonly surfaces?: unknown; readonly tracking?: unknown; readonly verification?: unknown; readonly budget?: unknown; readonly cleanup?: unknown }\ninterface RawBudget extends RawRecord { readonly maxDurationMs?: unknown }\ninterface RawVerification extends RawRecord { readonly maxConcurrency?: unknown }\ninterface RawCleanup extends RawRecord { readonly roots?: unknown }\ninterface RawBenchmark extends RawRecord { readonly suiteId?: unknown; readonly taskId?: unknown; readonly mode?: unknown }\n\nconst isRecord = (value: unknown): value is RawRecord => typeof value === 'object' && value !== null && !Array.isArray(value)\nconst stringValue = (value: unknown, label: string): string => {\n if (typeof value !== 'string') return fail(`${label} is required.`, 'INVALID_CONFIG')\n const result = value.trim()\n if (!result) return fail(`${label} is required.`, 'INVALID_CONFIG')\n return result\n}\nconst stringArray = (value: unknown, label: string): string[] => {\n if (!Array.isArray(value)) fail(`${label} must be an array of non-empty strings.`, 'INVALID_CONFIG')\n const items: unknown[] = value as unknown[]\n if (!items.every((item: unknown): item is string => typeof item === 'string' && Boolean(item.trim()))) fail(`${label} must be an array of non-empty strings.`, 'INVALID_CONFIG')\n return items.map((item: unknown) => stringValue(item, label))\n}\nconst asRecord = (value: unknown, label: string): RawRecord => {\n if (!isRecord(value)) fail(`${label} must be an object.`, 'INVALID_CONFIG')\n return value as RawRecord\n}\nconst surface = (value: unknown, name: SurfaceName): SurfaceRequirement => {\n if (typeof value === 'boolean') return value ? { required: true } : { required: false, reason: `${name} is not applicable.` }\n const record = asRecord(value, `surfaces.${name}`)\n if (typeof record['required'] !== 'boolean') fail(`surfaces.${name}.required must be boolean.`, 'INVALID_CONFIG')\n if (!record['required'] && typeof record['reason'] !== 'string') fail(`surfaces.${name}.reason is required when not applicable.`, 'INVALID_CONFIG')\n return { required: record['required'] as boolean, ...(typeof record['reason'] === 'string' ? { reason: record['reason'] } : {}) }\n}\n\nconst parseCheck = (value: unknown, index: number): VerificationCheck => {\n const record = asRecord(value, `checks[${index}]`) as RawCheck\n const id = stringValue(record['id'], `checks[${index}].id`)\n const category = stringValue(record['category'], `checks[${index}].category`)\n if (!(CHECK_CATEGORIES as readonly string[]).includes(category)) fail(`checks[${index}].category is invalid.`, 'INVALID_CONFIG')\n const command = stringValue(record['command'], `checks[${index}].command`)\n if (REAL_CATEGORIES.has(category) && record['execution'] !== 'real') fail(`checks[${index}] must declare execution: real.`, 'INVALID_CONFIG')\n if (record['evidence'] !== 'structured') fail(`checks[${index}] must declare evidence: structured.`, 'INVALID_CONFIG')\n if (record['capabilities'] !== undefined && (!Array.isArray(record['capabilities']) || !record['capabilities'].every((item: unknown) => typeof item === 'string'))) fail(`checks[${index}].capabilities must be strings.`, 'INVALID_CONFIG')\n const capabilities = Array.isArray(record['capabilities']) ? record['capabilities'].filter((item): item is string => typeof item === 'string') : undefined\n if (category === 'ui' && !capabilities?.includes('real-browser')) fail(`checks[${index}] must declare real-browser.`, 'INVALID_CONFIG')\n if (category === 'ui' && !capabilities?.includes('screenshot')) fail(`checks[${index}] must declare screenshot.`, 'INVALID_CONFIG')\n if (record['required'] !== undefined && typeof record['required'] !== 'boolean') fail(`checks[${index}].required must be boolean.`, 'INVALID_CONFIG')\n if (record['required'] === false && typeof record['reason'] !== 'string') fail(`checks[${index}].reason is required when required is false.`, 'INVALID_CONFIG')\n if (record['timeoutMs'] !== undefined && (!Number.isInteger(record['timeoutMs']) || typeof record['timeoutMs'] !== 'number' || record['timeoutMs'] < 1)) fail(`checks[${index}].timeoutMs must be positive.`, 'INVALID_CONFIG')\n const dependsOn = record['dependsOn'] === undefined ? undefined : stringArray(record['dependsOn'], `checks[${index}].dependsOn`)\n return { id, category: category as CheckCategory, command, required: record['required'] !== false, ...(typeof record['reason'] === 'string' ? { reason: record['reason'] } : {}), timeoutMs: typeof record['timeoutMs'] === 'number' ? record['timeoutMs'] : 120_000, ...(record['execution'] === 'real' ? { execution: 'real' } : {}), ...(capabilities ? { capabilities } : {}), ...(dependsOn ? { dependsOn: [...new Set(dependsOn)] } : {}), evidence: 'structured' }\n}\n\nconst parseOutcome = (value: unknown, index: number, checks: readonly VerificationCheck[]): ContractOutcome => {\n const record = asRecord(value, `contract.outcomes[${index}]`)\n const id = stringValue(record['id'], `contract.outcomes[${index}].id`)\n const statement = stringValue(record['statement'], `contract.outcomes[${index}].statement`)\n const ids = stringArray(record['checks'], `contract.outcomes[${index}].checks`)\n if (ids.some((checkId) => !checks.some((check) => check.id === checkId))) fail(`contract.outcomes[${index}] references an unknown check.`, 'INVALID_CONFIG')\n return { id, statement, checks: [...new Set(ids)] }\n}\n\nexport const validateConfig = (rawValue: unknown): VerificationConfig => {\n const raw = resolveProfile(asRecord(rawValue, 'verification config')) as RawConfig\n if (raw['schemaVersion'] !== 1) fail('verification config schemaVersion must be 1.', 'INVALID_CONFIG')\n const project = stringValue(raw['project'], 'verification config project')\n const runtimeRaw = asRecord(raw['runtime'] ?? { kind: 'process' }, 'runtime')\n if (runtimeRaw['kind'] !== 'process' && runtimeRaw['kind'] !== 'docker') fail('runtime.kind must be process or docker.', 'INVALID_CONFIG')\n const runtime: RuntimeConfig = { kind: runtimeRaw['kind'] as RuntimeConfig['kind'] }\n if (raw['autonomy'] !== undefined && raw['autonomy'] !== 'controlled' && raw['autonomy'] !== 'yolo') fail('autonomy must be controlled or yolo.', 'INVALID_CONFIG')\n const autonomy = (raw['autonomy'] ?? 'controlled') as import('../kernel/types.js').AutonomyMode\n const contractRaw = asRecord(raw['contract'], 'contract') as RawContract\n const rawChecks = raw['checks']\n const checks = Array.isArray(rawChecks) ? rawChecks.map(parseCheck) : fail('checks must be a non-empty array.', 'INVALID_CONFIG')\n if (!checks.length || new Set(checks.map((check) => check.id)).size !== checks.length) fail('check ids must be unique.', 'INVALID_CONFIG')\n const checkIds = new Set(checks.map((check) => check.id))\n for (const check of checks) for (const dependency of check.dependsOn ?? []) if (!checkIds.has(dependency) || dependency === check.id) fail(`check ${check.id} has an invalid dependency: ${dependency}.`, 'INVALID_CONFIG')\n const visiting = new Set<string>(); const visited = new Set<string>()\n const visit = (id: string): void => { if (visiting.has(id)) fail(`check dependency cycle includes ${id}.`, 'INVALID_CONFIG'); if (visited.has(id)) return; visiting.add(id); for (const dependency of checks.find((check) => check.id === id)?.dependsOn ?? []) visit(dependency); visiting.delete(id); visited.add(id) }\n for (const check of checks) visit(check.id)\n const scopeRaw = asRecord(contractRaw['scope'], 'contract.scope') as RawScope\n const scope = { inScope: stringArray(scopeRaw['inScope'], 'contract.scope.inScope'), outOfScope: stringArray(scopeRaw['outOfScope'], 'contract.scope.outOfScope') }\n const ambiguities = stringArray(contractRaw['ambiguities'], 'contract.ambiguities')\n const rawOutcomes = contractRaw['outcomes']\n const outcomes = Array.isArray(rawOutcomes) ? rawOutcomes.map((outcome, index) => parseOutcome(outcome, index, checks)) : fail('contract.outcomes must be a non-empty array.', 'INVALID_CONFIG')\n if (!outcomes.length || new Set(outcomes.map((outcome) => outcome.id)).size !== outcomes.length) fail('outcome ids must be unique.', 'INVALID_CONFIG')\n const mapped = new Set(outcomes.flatMap((outcome) => outcome.checks))\n if (checks.some((check) => check.required && !mapped.has(check.id))) fail('every required check must map to an outcome.', 'INVALID_CONFIG')\n const rawSurfaces = isRecord(raw['surfaces']) ? raw['surfaces'] : undefined\n const surfaces = Object.fromEntries(SURFACE_NAMES.map((name) => [name, surface(rawSurfaces?.[name] ?? (name === 'logic'), name)])) as Record<SurfaceName, SurfaceRequirement>\n for (const name of SURFACE_NAMES) if (surfaces[name].required && !checks.some((check) => check.required && check.category === name)) fail(`required surface ${name} has no required check.`, 'INVALID_CONFIG')\n const trackingRaw = isRecord(raw['tracking']) ? raw['tracking'] as RawTracking : { required: false, reason: 'tracking is not configured for this run.' }\n if (trackingRaw['required'] === true && typeof trackingRaw['target'] !== 'string') fail('tracking.target is required when tracking is enabled.', 'INVALID_CONFIG')\n if (trackingRaw['required'] !== true && typeof trackingRaw['reason'] !== 'string') fail('tracking.reason is required when tracking is disabled.', 'INVALID_CONFIG')\n const budgetRaw = raw['budget'] === undefined ? undefined : asRecord(raw['budget'], 'budget') as RawBudget\n if (budgetRaw && budgetRaw['maxDurationMs'] !== undefined && (!Number.isInteger(budgetRaw['maxDurationMs']) || typeof budgetRaw['maxDurationMs'] !== 'number' || budgetRaw['maxDurationMs'] < 1)) fail('budget.maxDurationMs must be positive.', 'INVALID_CONFIG')\n const verificationRaw = raw['verification'] === undefined ? undefined : asRecord(raw['verification'], 'verification') as RawVerification\n if (verificationRaw && verificationRaw['maxConcurrency'] !== undefined && (!Number.isInteger(verificationRaw['maxConcurrency']) || typeof verificationRaw['maxConcurrency'] !== 'number' || verificationRaw['maxConcurrency'] < 1)) fail('verification.maxConcurrency must be a positive integer.', 'INVALID_CONFIG')\n const cleanupRaw = raw['cleanup'] === undefined ? undefined : asRecord(raw['cleanup'], 'cleanup') as RawCleanup\n const cleanup = cleanupRaw ? { roots: cleanupRaw['roots'] === undefined ? undefined : stringArray(cleanupRaw['roots'], 'cleanup.roots') } : undefined\n const benchmarkRaw = raw['benchmark'] === undefined ? undefined : asRecord(raw['benchmark'], 'benchmark') as RawBenchmark\n const benchmark = benchmarkRaw ? { suiteId: stringValue(benchmarkRaw['suiteId'], 'benchmark.suiteId'), taskId: stringValue(benchmarkRaw['taskId'], 'benchmark.taskId'), mode: benchmarkRaw['mode'] === 'harness' ? 'harness' as const : fail('benchmark.mode must be harness.', 'INVALID_CONFIG') } : undefined\n const contract: TaskContract = { intent: stringValue(contractRaw['intent'], 'contract.intent'), scope, ambiguities, outcomes }\n const tracking: TrackingConfig = { required: trackingRaw['required'] === true, ...(typeof trackingRaw['target'] === 'string' ? { target: trackingRaw['target'] } : {}), ...(typeof trackingRaw['reason'] === 'string' ? { reason: trackingRaw['reason'] } : {}) }\n return { schemaVersion: 1, project, ...(typeof raw['root'] === 'string' ? { root: raw['root'] } : {}), ...(typeof raw['stateDir'] === 'string' ? { stateDir: raw['stateDir'] } : {}), profile: typeof raw['profile'] === 'string' ? raw['profile'] : 'strict', runtime, autonomy, contract, surfaces, checks, tracking, ...(verificationRaw ? { verification: { maxConcurrency: verificationRaw['maxConcurrency'] as number | undefined } } : {}), ...(budgetRaw ? { budget: { maxDurationMs: budgetRaw['maxDurationMs'] as number | undefined } } : {}), ...(cleanup ? { cleanup } : {}), ...(benchmark ? { benchmark } : {}) }\n}\n\nexport const loadConfig = (configPath = '.codex/verification.json'): LoadedConfig => {\n const absolute = resolve(configPath)\n const raw = readJson(absolute)\n const rawRecord = asRecord(raw, 'verification config')\n const root = resolve(dirname(absolute), typeof rawRecord['root'] === 'string' ? rawRecord['root'] : '.')\n const stateDir = resolve(root, typeof rawRecord['stateDir'] === 'string' ? rawRecord['stateDir'] : '.codex/verification')\n if (stateDir === root) fail('stateDir must be separate from the project root.', 'INVALID_CONFIG')\n const config = validateConfig(raw)\n return { absolute, root, stateDir, config, configHash: hashJson(config) }\n}\n","import { DECISIONS, LEGAL_TRANSITIONS, STATES } from './constants.js'\nimport { fail } from './errors.js'\nimport type { RunState, StateTransition, VerificationRun } from './types.js'\n\nexport const transition = (run: Pick<VerificationRun, 'state' | 'transitions'>, to: RunState, reason?: string, actor = 'harness'): Pick<VerificationRun, 'state' | 'transitions'> => {\n if (!STATES.includes(to)) fail(`Unknown state ${to}.`, 'INVALID_STATE')\n if (run.state !== to && !LEGAL_TRANSITIONS[run.state].some((state) => state === to)) fail(`Illegal transition ${run.state} -> ${to}.`, 'INVALID_STATE')\n const event: StateTransition = { from: run.state, to, at: new Date().toISOString(), actor, ...(reason ? { reason } : {}) }\n return { ...run, state: to, transitions: [...run.transitions, event] }\n}\n\nexport const assertHuman = (actor: string): void => {\n if (actor !== 'human') fail('This action requires --by human.', 'HUMAN_APPROVAL_REQUIRED')\n}\n\nexport const approvedDecision = (decision: string): boolean => {\n if (!DECISIONS.has(decision)) fail('Decision must be approved or rejected.', 'INVALID_INPUT')\n return ['approved', 'approve', 'yes', 'ok'].includes(decision)\n}\n","import { appendFileSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, unlinkSync, writeSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { fail } from './errors.js'\nimport { hashJson, sha256 } from './hash.js'\nimport type { ContextQuery } from '../context/index.js'\nimport type { RunState } from './types.js'\nimport type { DockerRuntimeEvidence } from '../execution/runtime.js'\n\nexport const HARNESS_EVENT_SCHEMA_VERSION = 1 as const\nexport const HARNESS_EVENT_ENVELOPE_SCHEMA_VERSION = 2 as const\nexport const EVENT_LOG_GENESIS = 'GENESIS' as const\nexport const HARNESS_EVENT_TYPES = ['run.created', 'state.transitioned', 'context.attached', 'verification.completed', 'artifact.recorded', 'approval.recorded', 'authorization.recorded', 'session.started', 'session.resumed', 'agent.turn.started', 'policy.evaluated', 'tool.approval.requested', 'tool.approval.recorded', 'tool.requested', 'tool.execution.started', 'tool.recovery.recorded', 'tool.blocked', 'tool.completed', 'tool.failed', 'session.ended'] as const\nexport type HarnessEventType = typeof HARNESS_EVENT_TYPES[number]\n\nexport interface HarnessEventProvenance {\n readonly source: string\n readonly component: string\n readonly version: string\n readonly actor?: string\n}\n\nexport interface HarnessEventEnvelope {\n readonly eventId: string\n readonly eventType: string\n readonly schemaVersion: typeof HARNESS_EVENT_ENVELOPE_SCHEMA_VERSION\n readonly occurredAt: string\n readonly runId: string\n readonly issueRef?: string\n readonly sourceRevision: string\n readonly correlationId: string\n readonly payload: Readonly<Record<string, unknown>>\n readonly idempotencyKey: string\n readonly provenance: HarnessEventProvenance\n}\n\nexport type HarnessEventEnvelopeInput = Omit<HarnessEventEnvelope, 'schemaVersion' | 'idempotencyKey'> & { readonly idempotencyKey?: string }\n\nconst envelopeId = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(value)) fail(`${label} is invalid.`, 'INVALID_INPUT')\n return value as string\n}\n\nconst envelopeText = (value: unknown, label: string): string => {\n if (typeof value !== 'string') fail(`${label} is required.`, 'INVALID_INPUT')\n const result = (value as string).trim()\n if (!result) fail(`${label} is required.`, 'INVALID_INPUT')\n return result\n}\n\nconst envelopeDigest = (value: unknown, label: string): string => {\n const result = envelopeText(value, label)\n if (!/^[a-f0-9]{64}$/.test(result)) fail(`${label} must be a lowercase SHA-256 digest.`, 'INVALID_INPUT')\n return result\n}\n\nconst envelopeProvenance = (value: unknown): HarnessEventProvenance => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('Event provenance must be an object.', 'INVALID_INPUT')\n const candidate = value as Record<string, unknown>\n return {\n source: envelopeText(candidate['source'], 'Event provenance source'),\n component: envelopeText(candidate['component'], 'Event provenance component'),\n version: envelopeText(candidate['version'], 'Event provenance version'),\n ...(candidate['actor'] === undefined ? {} : { actor: envelopeText(candidate['actor'], 'Event provenance actor') }),\n }\n}\n\nexport const validateHarnessEventEnvelope = (value: unknown): HarnessEventEnvelope => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('Event envelope must be an object.', 'INVALID_INPUT')\n const candidate = value as Record<string, unknown>\n if (candidate['schemaVersion'] !== HARNESS_EVENT_ENVELOPE_SCHEMA_VERSION) fail('Event envelope schemaVersion is invalid.', 'INVALID_INPUT')\n const payload = candidate['payload']\n if (typeof payload !== 'object' || payload === null || Array.isArray(payload)) fail('Event envelope payload must be an object.', 'INVALID_INPUT')\n const issueRef = candidate['issueRef'] === undefined ? undefined : envelopeText(candidate['issueRef'], 'Event issueRef')\n const occurredAt = envelopeText(candidate['occurredAt'], 'Event occurredAt')\n if (!Number.isFinite(Date.parse(occurredAt))) fail('Event occurredAt must be a valid timestamp.', 'INVALID_INPUT')\n return {\n eventId: envelopeId(candidate['eventId'], 'Event eventId'),\n eventType: envelopeId(candidate['eventType'], 'Event eventType'),\n schemaVersion: HARNESS_EVENT_ENVELOPE_SCHEMA_VERSION,\n occurredAt,\n runId: envelopeText(candidate['runId'], 'Event runId'),\n ...(issueRef === undefined ? {} : { issueRef }),\n sourceRevision: envelopeText(candidate['sourceRevision'], 'Event sourceRevision'),\n correlationId: envelopeId(candidate['correlationId'], 'Event correlationId'),\n payload: payload as Readonly<Record<string, unknown>>,\n idempotencyKey: envelopeDigest(candidate['idempotencyKey'], 'Event idempotencyKey'),\n provenance: envelopeProvenance(candidate['provenance']),\n }\n}\n\nexport const createHarnessEventEnvelope = (input: HarnessEventEnvelopeInput): HarnessEventEnvelope => {\n if (typeof input !== 'object' || input === null || Array.isArray(input)) fail('Event envelope input must be an object.', 'INVALID_INPUT')\n const identity = { eventType: input.eventType, runId: input.runId, ...(input.issueRef === undefined ? {} : { issueRef: input.issueRef }), sourceRevision: input.sourceRevision, correlationId: input.correlationId, payload: input.payload, provenance: input.provenance }\n const candidate = { ...input, schemaVersion: HARNESS_EVENT_ENVELOPE_SCHEMA_VERSION, idempotencyKey: input.idempotencyKey ?? hashJson(identity) }\n return validateHarnessEventEnvelope(candidate)\n}\nconst SESSION_EVENT_TYPES = new Set<HarnessEventType>(['session.started', 'session.resumed', 'agent.turn.started', 'policy.evaluated', 'tool.approval.requested', 'tool.approval.recorded', 'tool.requested', 'tool.execution.started', 'tool.recovery.recorded', 'tool.blocked', 'tool.completed', 'tool.failed', 'session.ended'])\n\nexport interface HarnessEventContext {\n readonly operationId: string\n readonly runId?: string\n readonly sessionId?: string\n readonly turnId?: string\n readonly actionId?: string\n readonly traceId?: string\n}\n\nexport interface HarnessEventPayloads {\n readonly 'run.created': { readonly project: string; readonly baselineRevision: string; readonly baselineStatusHash: string }\n readonly 'state.transitioned': { readonly from: RunState | null; readonly to: RunState; readonly actor: string; readonly reason?: string; readonly transitionIndex: number }\n readonly 'context.attached': { readonly providerId: string; readonly sourceHash: string; readonly snapshotHash: string; readonly query: ContextQuery }\n readonly 'verification.completed': { readonly verificationDigest: string; readonly checkCount: number; readonly outcomeCount: number; readonly totalDurationMs: number; readonly budgetExceeded: boolean }\n readonly 'artifact.recorded': { readonly artifactId: string; readonly artifactType: string; readonly artifactVersion: number; readonly artifactHash: string; readonly phase: string; readonly representation: 'json+markdown' }\n readonly 'approval.recorded': { readonly decision: 'approved' | 'rejected'; readonly resultingState: RunState; readonly verificationDigest: string; readonly actor: 'human'; readonly sourceRevision: string; readonly contractHash: string }\n readonly 'authorization.recorded': { readonly decision: 'approved' | 'rejected'; readonly resultingState: RunState; readonly verificationDigest: string; readonly actor: 'human'; readonly target: string; readonly sourceRevision: string; readonly contractHash: string }\n readonly 'session.started': { readonly adapterId: string; readonly adapterVersion: string; readonly capabilities: readonly string[] }\n readonly 'session.resumed': { readonly recovery: 'event-log' }\n readonly 'agent.turn.started': { readonly turnId: string; readonly inputHash: string }\n readonly 'policy.evaluated': { readonly actionId: string; readonly turnId: string; readonly toolId: string; readonly decision: 'allow' | 'block' | 'approve'; readonly policyId: string; readonly reason: string }\n readonly 'tool.approval.requested': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly argumentsHash: string; readonly policyId: string; readonly reason: string }\n readonly 'tool.approval.recorded': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly argumentsHash: string; readonly decision: 'approved' | 'rejected'; readonly actor: 'human'; readonly policyId: string; readonly reason: string }\n readonly 'tool.requested': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly argumentsHash: string }\n readonly 'tool.execution.started': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly attempt: number }\n readonly 'tool.recovery.recorded': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly decision: 'retry' | 'abandon'; readonly actor: 'human'; readonly reason: string }\n readonly 'tool.blocked': { readonly turnId: string; readonly actionId: string; readonly toolId: string; readonly policyId: string; readonly reason: string }\n readonly 'tool.completed': { readonly actionId: string; readonly resultHash: string; readonly durationMs: number; readonly runtimeEvidence?: DockerRuntimeEvidence }\n readonly 'tool.failed': { readonly actionId: string; readonly errorCode: string; readonly retryable: boolean; readonly durationMs: number; readonly runtimeEvidence?: DockerRuntimeEvidence }\n readonly 'session.ended': { readonly status: 'completed' | 'failed' | 'cancelled' }\n}\n\nexport type HarnessEvent<K extends HarnessEventType = HarnessEventType> = K extends HarnessEventType ? {\n readonly schemaVersion: typeof HARNESS_EVENT_SCHEMA_VERSION\n readonly runId: string\n readonly sequence: number\n readonly at: string\n readonly sourceRevision: string\n readonly configHash: string\n readonly correlation?: HarnessEventContext\n readonly previousHash?: string\n readonly eventHash?: string\n readonly sessionId?: string\n readonly type: K\n readonly payload: HarnessEventPayloads[K]\n } : never\n\nexport type HarnessEventInput<K extends HarnessEventType = HarnessEventType> = Omit<HarnessEvent<K>, 'schemaVersion' | 'sequence' | 'at'>\nexport type HarnessEventListener<K extends HarnessEventType> = (event: HarnessEvent<K>) => void\n\nexport interface EventStore {\n append<K extends HarnessEventType>(event: HarnessEventInput<K>): HarnessEvent<K>\n read(runId: string): readonly HarnessEvent[]\n verify(runId: string): EventLogVerification\n}\n\nexport interface EventLogVerification {\n readonly status: 'verified' | 'legacy'\n readonly eventCount: number\n readonly headHash?: string\n}\n\nexport interface EventLogLock {\n readonly pid: number\n readonly at: string\n}\n\nexport interface EventLogLockStatus {\n readonly status: 'locked' | 'unlocked'\n readonly path: string\n readonly lock?: EventLogLock\n}\n\nexport interface EventLogLockRecovery {\n readonly status: 'recovered' | 'unlocked'\n readonly path: string\n readonly lock?: EventLogLock\n}\n\nconst eventPath = (stateDir: string, runId: string): string => join(stateDir, 'runs', runId, 'events.ndjson')\nconst lockPath = (stateDir: string, runId: string): string => `${eventPath(stateDir, runId)}.lock`\nconst parseLock = (value: string): EventLogLock => {\n try {\n const record = JSON.parse(value) as Record<string, unknown>\n if (!Number.isInteger(record['pid']) || (record['pid'] as number) <= 0 || typeof record['at'] !== 'string' || !Number.isFinite(Date.parse(record['at']))) fail('Event log lock metadata is invalid.', 'HARNESS_ERROR')\n return { pid: record['pid'] as number, at: record['at'] as string }\n } catch (error) {\n if (error instanceof SyntaxError) fail('Event log lock metadata is invalid.', 'HARNESS_ERROR')\n throw error\n }\n}\nconst readLock = (stateDir: string, runId: string): EventLogLock | null => {\n const path = lockPath(stateDir, runId)\n return existsSync(path) ? parseLock(readFileSync(path, 'utf8')) : null\n}\nconst isEventType = (value: unknown): value is HarnessEventType => typeof value === 'string' && (HARNESS_EVENT_TYPES as readonly string[]).includes(value)\nconst digest = (value: string): boolean => /^[a-f0-9]{64}$/.test(value)\nconst eventBody = (event: HarnessEvent): Omit<HarnessEvent, 'eventHash'> => {\n const { eventHash: _eventHash, ...body } = event\n return body\n}\nconst eventDigest = (event: HarnessEvent): string => sha256(JSON.stringify(eventBody(event)))\n\nconst parseEvent = (value: unknown, expectedSequence: number): HarnessEvent => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('Event log contains a non-object record.', 'HARNESS_ERROR')\n const record = value as Record<string, unknown>\n const context = record['correlation']\n const validContext = context === undefined || (typeof context === 'object' && context !== null && !Array.isArray(context) && Object.entries(context as Record<string, unknown>).every(([key, value]) => ['operationId', 'runId', 'sessionId', 'turnId', 'actionId', 'traceId'].includes(key) && typeof value === 'string' && /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(value)) && typeof (context as Record<string, unknown>)['operationId'] === 'string')\n if (record['schemaVersion'] !== HARNESS_EVENT_SCHEMA_VERSION || typeof record['runId'] !== 'string' || typeof record['sequence'] !== 'number' || record['sequence'] !== expectedSequence || typeof record['at'] !== 'string' || typeof record['sourceRevision'] !== 'string' || typeof record['configHash'] !== 'string' || !isEventType(record['type']) || typeof record['payload'] !== 'object' || record['payload'] === null || (record['sessionId'] !== undefined && (typeof record['sessionId'] !== 'string' || !record['sessionId'].trim())) || (SESSION_EVENT_TYPES.has(record['type']) && typeof record['sessionId'] !== 'string') || !validContext) fail('Event log is invalid or out of order.', 'HARNESS_ERROR')\n const hasPreviousHash = record['previousHash'] !== undefined\n const hasEventHash = record['eventHash'] !== undefined\n if (hasPreviousHash !== hasEventHash || (hasPreviousHash && (typeof record['previousHash'] !== 'string' || (record['previousHash'] !== EVENT_LOG_GENESIS && !digest(record['previousHash'] as string)) || typeof record['eventHash'] !== 'string' || !digest(record['eventHash'] as string)))) fail('Event log integrity metadata is invalid.', 'HARNESS_ERROR')\n return record as unknown as HarnessEvent\n}\n\nconst validateChain = (events: readonly HarnessEvent[]): EventLogVerification => {\n const current = events.filter((event) => event.eventHash !== undefined)\n if (!current.length) return { status: 'legacy', eventCount: events.length }\n if (current.length !== events.length) fail('Event log mixes legacy and hashed records.', 'HARNESS_ERROR')\n let previous: string = EVENT_LOG_GENESIS\n for (const event of events) {\n const eventHash = event.eventHash ?? fail('Event log hash chain is invalid.', 'HARNESS_ERROR')\n if (event.previousHash !== previous || eventHash !== eventDigest(event)) fail('Event log hash chain is invalid.', 'HARNESS_ERROR')\n previous = eventHash\n }\n return { status: 'verified', eventCount: events.length, ...(events.length ? { headHash: previous } : {}) }\n}\n\nexport class FileEventStore implements EventStore {\n public constructor(private readonly stateDir: string) {}\n\n public append<K extends HarnessEventType>(event: HarnessEventInput<K>): HarnessEvent<K> {\n if (!event.runId.trim()) fail('Event runId is required.', 'INVALID_INPUT')\n if (!event.sourceRevision.trim() || !event.configHash.trim()) fail('Event sourceRevision and configHash are required.', 'INVALID_INPUT')\n if (!isEventType(event.type)) fail('Event type is invalid.', 'INVALID_INPUT')\n if (SESSION_EVENT_TYPES.has(event.type) && (!event.sessionId || !event.sessionId.trim())) fail('Session events require a sessionId.', 'INVALID_INPUT')\n if (event.sessionId !== undefined && !event.sessionId.trim()) fail('Event sessionId cannot be empty.', 'INVALID_INPUT')\n if (event.correlation !== undefined && (!event.correlation.operationId || !event.correlation.operationId.trim())) fail('Event correlation operationId is required.', 'INVALID_INPUT')\n const path = eventPath(this.stateDir, event.runId)\n const lock = lockPath(this.stateDir, event.runId)\n mkdirSync(join(this.stateDir, 'runs', event.runId), { recursive: true })\n let lockFd: number\n try { lockFd = openSync(lock, 'wx'); writeSync(lockFd, JSON.stringify({ pid: process.pid, at: new Date().toISOString() })) } catch (error) { if ((error as NodeJS.ErrnoException).code === 'EEXIST') fail('Event log is busy; retry the operation.', 'HARNESS_ERROR'); throw error }\n try {\n const events = this.readUnlocked(event.runId)\n const previous = events.at(-1)\n const body = { schemaVersion: HARNESS_EVENT_SCHEMA_VERSION, sequence: events.length + 1, at: new Date().toISOString(), runId: event.runId, sourceRevision: event.sourceRevision, configHash: event.configHash, ...(event.correlation ? { correlation: event.correlation } : {}), ...(event.sessionId ? { sessionId: event.sessionId } : {}), ...(previous?.eventHash ? { previousHash: previous.eventHash } : events.length ? {} : { previousHash: EVENT_LOG_GENESIS }), type: event.type, payload: event.payload } as HarnessEvent<K>\n const record = (events.length && !previous?.eventHash ? body : { ...body, eventHash: eventDigest(body) }) as HarnessEvent<K>\n appendFileSync(path, `${JSON.stringify(record)}\\n`, 'utf8')\n return record\n } finally {\n closeSync(lockFd)\n unlinkSync(lock)\n }\n }\n\n private readUnlocked(runId: string): readonly HarnessEvent[] {\n const path = eventPath(this.stateDir, runId)\n if (!existsSync(path)) return []\n const events = readFileSync(path, 'utf8').split(/\\r?\\n/).map((line) => line.trim()).filter(Boolean).map((line, index) => {\n try { return parseEvent(JSON.parse(line) as unknown, index + 1) } catch (error) { if (error instanceof SyntaxError) fail('Event log contains invalid JSON.', 'HARNESS_ERROR'); throw error }\n })\n validateChain(events)\n return events\n }\n\n public read(runId: string): readonly HarnessEvent[] {\n if (existsSync(lockPath(this.stateDir, runId))) fail('Event log is busy; retry the operation.', 'HARNESS_ERROR')\n return this.readUnlocked(runId)\n }\n\n public verify(runId: string): EventLogVerification {\n return validateChain(this.read(runId))\n }\n}\n\nexport const inspectEventLogLock = (stateDir: string, runId: string): EventLogLockStatus => {\n const path = lockPath(stateDir, runId)\n const lock = readLock(stateDir, runId)\n return lock ? { status: 'locked', path, lock } : { status: 'unlocked', path }\n}\n\nexport const recoverEventLogLock = ({ stateDir, runId, actor, maxAgeMs = 300_000 }: { readonly stateDir: string; readonly runId: string; readonly actor: string; readonly maxAgeMs?: number }): EventLogLockRecovery => {\n if (actor !== 'human') fail('Event log lock recovery requires a human actor.', 'HUMAN_APPROVAL_REQUIRED')\n if (!Number.isInteger(maxAgeMs) || maxAgeMs < 0) fail('maxAgeMs must be a non-negative integer.', 'INVALID_INPUT')\n const path = lockPath(stateDir, runId)\n const lock = readLock(stateDir, runId)\n if (!lock) return { status: 'unlocked', path }\n const ageMs = Date.now() - Date.parse(lock.at)\n if (ageMs < maxAgeMs) fail('Event log lock is not old enough to recover.', 'HARNESS_ERROR')\n try { process.kill(lock.pid, 0) } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ESRCH') fail('Event log lock owner cannot be proven dead.', 'HARNESS_ERROR')\n unlinkSync(path)\n return { status: 'recovered', path, lock }\n }\n return fail('Event log lock owner is still alive.', 'HARNESS_ERROR')\n}\n","import { fail } from './errors.js'\nimport { HARNESS_EVENT_TYPES } from './events.js'\nimport type { HarnessEvent, HarnessEventListener, HarnessEventType } from './events.js'\n\nexport const HARNESS_PLUGIN_API_VERSION = 1 as const\nexport type Disposer = () => void\n\nexport interface PluginSlot<T> { readonly id: string }\nexport const createPluginSlot = <T>(id: string): PluginSlot<T> => {\n if (typeof id !== 'string' || !id.trim()) fail('Plugin slot id is required.', 'INVALID_INPUT')\n return { id: id.trim() }\n}\n\nexport interface HarnessPluginContext {\n readonly apiVersion: typeof HARNESS_PLUGIN_API_VERSION\n register<T>(slot: PluginSlot<T>, id: string, value: T): Disposer\n effect(disposer: Disposer): void\n on<K extends HarnessEventType>(type: K, listener: HarnessEventListener<K>): Disposer\n}\n\nexport interface HarnessPlugin {\n readonly id: string\n readonly version: string\n readonly apiVersion: typeof HARNESS_PLUGIN_API_VERSION\n readonly requires?: readonly string[]\n readonly apply: (context: HarnessPluginContext) => void | Disposer\n}\n\nexport interface PluginContribution<T> { readonly pluginId: string; readonly id: string; readonly value: T }\n\nexport interface PluginRegistry {\n register(plugin: HarnessPlugin): void\n mount(): void\n emit<K extends HarnessEventType>(event: HarnessEvent<K>): void\n on<K extends HarnessEventType>(type: K, listener: HarnessEventListener<K>): Disposer\n contributions<T>(slot: PluginSlot<T>): readonly PluginContribution<T>[]\n dispose(): void\n}\n\nconst validId = (value: unknown, label: string): string => {\n if (typeof value !== 'string') fail(`${label} is required.`, 'INVALID_INPUT')\n const result = (value as string).trim()\n if (!result) fail(`${label} is required.`, 'INVALID_INPUT')\n return result\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null && !Array.isArray(value)\nconst validEventType = (value: unknown): HarnessEventType => {\n if (typeof value !== 'string' || !(HARNESS_EVENT_TYPES as readonly string[]).includes(value)) fail('Plugin event type is invalid.', 'INVALID_INPUT')\n return value as HarnessEventType\n}\nconst validSlot = <T>(value: PluginSlot<T>): PluginSlot<T> => {\n if (!isRecord(value)) fail('Plugin slot must be an object.', 'INVALID_INPUT')\n return { id: validId(value['id'], 'Plugin slot id') }\n}\n\nexport const createPluginRegistry = (): PluginRegistry => {\n const plugins = new Map<string, HarnessPlugin>()\n const contributions = new Map<string, Map<string, PluginContribution<unknown>>>()\n const listeners = new Map<HarnessEventType, Set<HarnessEventListener<HarnessEventType>>>()\n const cleanups: Disposer[] = []\n let mounted = false\n let disposed = false\n\n const ensureOpen = (): void => { if (disposed) fail('Plugin registry has been disposed.', 'HARNESS_ERROR') }\n const removeContribution = (slot: PluginSlot<unknown>, id: string, pluginId: string): void => {\n const entries = contributions.get(slot.id)\n if (entries?.get(id)?.pluginId === pluginId) entries.delete(id)\n }\n const registerContribution = <T>(pluginId: string, slot: PluginSlot<T>, id: string, value: T): Disposer => {\n const entries = contributions.get(slot.id) ?? new Map<string, PluginContribution<unknown>>()\n if (entries.has(id)) fail(`Plugin contribution already exists: ${slot.id}/${id}.`, 'INVALID_INPUT')\n entries.set(id, { pluginId, id, value })\n contributions.set(slot.id, entries)\n const disposer = (): void => removeContribution(slot as PluginSlot<unknown>, id, pluginId)\n cleanups.push(disposer)\n return disposer\n }\n const order = (): HarnessPlugin[] => {\n const result: HarnessPlugin[] = []\n const visiting = new Set<string>()\n const visited = new Set<string>()\n const visit = (id: string): void => {\n if (visited.has(id)) return\n if (visiting.has(id)) fail(`Plugin dependency cycle includes ${id}.`, 'INVALID_INPUT')\n const candidate = plugins.get(id)\n if (!candidate) fail(`Plugin dependency is missing: ${id}.`, 'INVALID_INPUT')\n const plugin = candidate as HarnessPlugin\n visiting.add(id)\n for (const dependency of plugin.requires ?? []) visit(dependency)\n visiting.delete(id); visited.add(id); result.push(plugin)\n }\n for (const id of plugins.keys()) visit(id)\n return result\n }\n const registry: PluginRegistry = {\n register(plugin) {\n ensureOpen()\n if (mounted) fail('Plugins cannot be registered after mount.', 'HARNESS_ERROR')\n if (!isRecord(plugin)) fail('Plugin must be an object.', 'INVALID_INPUT')\n const candidate = plugin as unknown as HarnessPlugin\n const id = validId(candidate.id, 'Plugin id')\n validId(candidate.version, 'Plugin version')\n if (candidate.apiVersion !== HARNESS_PLUGIN_API_VERSION) fail(`Unsupported plugin API version: ${String(candidate.apiVersion)}.`, 'INVALID_INPUT')\n if (typeof candidate.apply !== 'function') fail('Plugin apply must be a function.', 'INVALID_INPUT')\n let requires: readonly string[] | undefined\n if (candidate.requires !== undefined) {\n if (!Array.isArray(candidate.requires)) fail('Plugin requires must be an array.', 'INVALID_INPUT')\n requires = candidate.requires.map((dependency, index) => validId(dependency, `Plugin dependency[${index}]`))\n if (new Set(requires).size !== requires.length) fail('Plugin dependencies must be unique.', 'INVALID_INPUT')\n }\n if (plugins.has(id)) fail(`Plugin already registered: ${id}.`, 'INVALID_INPUT')\n plugins.set(id, { ...candidate, id, ...(requires === undefined ? {} : { requires }) })\n },\n mount() {\n ensureOpen()\n if (mounted) return\n try {\n for (const plugin of order()) {\n const context: HarnessPluginContext = {\n apiVersion: HARNESS_PLUGIN_API_VERSION,\n register: (slot, id, value) => registerContribution(plugin.id, validSlot(slot), validId(id, 'Plugin contribution id'), value),\n effect: (disposer) => { if (typeof disposer !== 'function') fail('Plugin disposer must be a function.', 'INVALID_INPUT'); cleanups.push(disposer) },\n on: (type, listener) => {\n const eventType = validEventType(type)\n if (typeof listener !== 'function') fail('Plugin event listener must be a function.', 'INVALID_INPUT')\n const handlers = listeners.get(eventType) ?? new Set<HarnessEventListener<HarnessEventType>>()\n handlers.add(listener as HarnessEventListener<HarnessEventType>); listeners.set(eventType, handlers)\n const disposer = (): void => { handlers.delete(listener as HarnessEventListener<HarnessEventType>) }\n cleanups.push(disposer); return disposer\n },\n }\n const cleanup = plugin.apply(context)\n if (cleanup) cleanups.push(cleanup)\n }\n mounted = true\n } catch (error) { registry.dispose(); throw error }\n },\n emit(event) {\n ensureOpen()\n for (const listener of listeners.get(event.type) ?? []) listener(event as HarnessEvent<HarnessEventType>)\n },\n on(type, listener) {\n ensureOpen()\n const eventType = validEventType(type)\n if (typeof listener !== 'function') fail('Plugin event listener must be a function.', 'INVALID_INPUT')\n const handlers = listeners.get(eventType) ?? new Set<HarnessEventListener<HarnessEventType>>()\n handlers.add(listener as HarnessEventListener<HarnessEventType>); listeners.set(eventType, handlers)\n return (): void => { handlers.delete(listener as HarnessEventListener<HarnessEventType>) }\n },\n contributions: <T>(slot: PluginSlot<T>): readonly PluginContribution<T>[] => [...(contributions.get(validSlot(slot).id)?.values() ?? [])] as readonly PluginContribution<T>[],\n dispose() {\n if (disposed) return\n let firstError: unknown\n for (const cleanup of cleanups.splice(0).reverse()) { try { cleanup() } catch (error) { firstError ??= error } }\n contributions.clear(); listeners.clear(); disposed = true; mounted = false\n if (firstError) throw firstError\n },\n }\n return registry\n}\n","import { fail } from './errors.js'\n\nexport const ASSURANCE_LEVELS = ['unverified', 'contract-tested', 'runtime-attested'] as const\nexport type AssuranceLevel = typeof ASSURANCE_LEVELS[number]\n\nexport interface AdapterTelemetry {\n readonly status: 'measured' | 'unknown'\n readonly durationMs?: number\n readonly inputTokens?: number\n readonly outputTokens?: number\n readonly totalTokens?: number\n readonly cacheHits?: number\n readonly cacheMisses?: number\n readonly memoryReads?: number\n readonly memoryWrites?: number\n readonly memoryRelevantHits?: number\n readonly memoryStaleHits?: number\n readonly contextReferences?: number\n readonly contextCostTokens?: number\n readonly externalMutations?: number\n}\n\nexport interface AdapterMetadata {\n readonly assurance: AssuranceLevel\n readonly telemetry: AdapterTelemetry\n}\n\nconst nonNegative = (value: unknown, label: string): number => {\n if (!Number.isFinite(value) || (value as number) < 0) return fail(`${label} must be a non-negative number.`, 'INVALID_INPUT')\n return value as number\n}\n\nexport const validateAdapterMetadata = (value: unknown): AdapterMetadata => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return fail('Adapter metadata must be an object.', 'INVALID_INPUT')\n const candidate = value as Record<string, unknown>\n if (!ASSURANCE_LEVELS.includes(candidate['assurance'] as AssuranceLevel)) return fail('Adapter assurance is invalid.', 'INVALID_INPUT')\n if (typeof candidate['telemetry'] !== 'object' || candidate['telemetry'] === null || Array.isArray(candidate['telemetry'])) return fail('Adapter telemetry must be an object.', 'INVALID_INPUT')\n const telemetry = candidate['telemetry'] as Record<string, unknown>\n if (telemetry['status'] !== 'measured' && telemetry['status'] !== 'unknown') return fail('Adapter telemetry status is invalid.', 'INVALID_INPUT')\n for (const key of ['durationMs', 'inputTokens', 'outputTokens', 'totalTokens', 'cacheHits', 'cacheMisses', 'memoryReads', 'memoryWrites', 'memoryRelevantHits', 'memoryStaleHits', 'contextReferences', 'contextCostTokens', 'externalMutations']) if (telemetry[key] !== undefined) nonNegative(telemetry[key], `Adapter telemetry ${key}`)\n return value as AdapterMetadata\n}\n\nexport const unknownTelemetry = (): AdapterTelemetry => ({ status: 'unknown' })\n","import { readFileSync } from 'node:fs'\nimport { createPluginSlot } from '../kernel/plugins.js'\nimport { hashJson } from '../kernel/hash.js'\nimport { fail } from '../kernel/errors.js'\nimport type { AdapterTelemetry, AssuranceLevel } from '../kernel/adapter-contract.js'\nimport { ASSURANCE_LEVELS } from '../kernel/adapter-contract.js'\n\nexport interface ContextQuery {\n readonly query: string\n readonly scope?: readonly string[]\n readonly sourceRevision?: string\n}\n\nexport interface ContextReference {\n readonly id: string\n readonly uri: string\n readonly title?: string\n readonly version?: string\n readonly contentHash?: string\n readonly relevance?: number\n}\n\nexport interface ContextSnapshot {\n readonly providerId: string\n readonly query: ContextQuery\n readonly references: readonly ContextReference[]\n readonly sourceHash: string\n readonly snapshotHash: string\n readonly resolvedAt: string\n readonly assurance?: AssuranceLevel\n readonly telemetry?: AdapterTelemetry\n}\n\nexport interface ContextProvider {\n readonly id: string\n readonly version: string\n readonly resolve: (query: ContextQuery) => Promise<ContextSnapshot>\n}\n\nexport const hashContextSnapshot = ({ providerId, query, references, sourceHash }: Pick<ContextSnapshot, 'providerId' | 'query' | 'references' | 'sourceHash'>): string => hashJson({ providerId, query, references, sourceHash })\nexport const hashContextSnapshots = (snapshots: readonly ContextSnapshot[]): string => hashJson(snapshots.map(({ providerId, query, references, sourceHash, snapshotHash }) => ({ providerId, query, references, sourceHash, snapshotHash })))\n\nconst record = (value: unknown, label: string): Record<string, unknown> => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail(`${label} must be an object.`, 'INVALID_INPUT')\n return value as Record<string, unknown>\n}\nconst requiredString = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n return value as string\n}\nexport const validateContextSnapshot = (value: unknown, index = 0): ContextSnapshot => {\n const raw = record(value, `context snapshot ${index}`)\n const rawQuery = record(raw['query'], `context snapshot ${index}.query`)\n const rawReferences = raw['references']\n if (!Array.isArray(rawReferences)) fail(`context snapshot ${index}.references must be an array.`, 'INVALID_INPUT')\n const references = (rawReferences as unknown[]).map((reference: unknown, referenceIndex: number) => {\n const rawReference = record(reference, `context snapshot ${index}.references[${referenceIndex}]`)\n return {\n id: requiredString(rawReference['id'], `context snapshot ${index}.references[${referenceIndex}].id`),\n uri: requiredString(rawReference['uri'], `context snapshot ${index}.references[${referenceIndex}].uri`),\n ...(typeof rawReference['title'] === 'string' ? { title: rawReference['title'] } : {}),\n ...(typeof rawReference['version'] === 'string' ? { version: rawReference['version'] } : {}),\n ...(typeof rawReference['contentHash'] === 'string' ? { contentHash: rawReference['contentHash'] } : {}),\n ...(rawReference['relevance'] === undefined ? {} : typeof rawReference['relevance'] === 'number' && rawReference['relevance'] >= 0 && rawReference['relevance'] <= 1 ? { relevance: rawReference['relevance'] } : fail(`context snapshot ${index}.references[${referenceIndex}].relevance must be between 0 and 1.`, 'INVALID_INPUT')),\n }\n })\n const scope = rawQuery['scope'] === undefined ? undefined : Array.isArray(rawQuery['scope']) && rawQuery['scope'].every((item) => typeof item === 'string') ? rawQuery['scope'] : fail(`context snapshot ${index}.query.scope must be an array of strings.`, 'INVALID_INPUT')\n const assurance = raw['assurance'] === undefined ? undefined : ASSURANCE_LEVELS.includes(raw['assurance'] as AssuranceLevel) ? raw['assurance'] as AssuranceLevel : fail(`context snapshot ${index}.assurance is invalid.`, 'INVALID_INPUT')\n const telemetry = raw['telemetry'] === undefined ? undefined : record(raw['telemetry'], `context snapshot ${index}.telemetry`)\n if (telemetry && telemetry['status'] !== 'measured' && telemetry['status'] !== 'unknown') fail(`context snapshot ${index}.telemetry.status is invalid.`, 'INVALID_INPUT')\n const snapshot = {\n providerId: requiredString(raw['providerId'], `context snapshot ${index}.providerId`),\n query: { query: requiredString(rawQuery['query'], `context snapshot ${index}.query.query`), ...(scope ? { scope } : {}), ...(typeof rawQuery['sourceRevision'] === 'string' ? { sourceRevision: rawQuery['sourceRevision'] } : {}) },\n references,\n sourceHash: requiredString(raw['sourceHash'], `context snapshot ${index}.sourceHash`),\n snapshotHash: requiredString(raw['snapshotHash'], `context snapshot ${index}.snapshotHash`),\n resolvedAt: requiredString(raw['resolvedAt'], `context snapshot ${index}.resolvedAt`),\n ...(assurance === undefined ? {} : { assurance }),\n ...(telemetry === undefined ? {} : { telemetry: telemetry as unknown as AdapterTelemetry }),\n }\n if (snapshot.snapshotHash !== hashContextSnapshot(snapshot)) fail(`context snapshot ${index}.snapshotHash does not match its contents.`, 'INVALID_INPUT')\n return snapshot\n}\n\nexport const readContextSnapshots = (path: string): readonly ContextSnapshot[] => {\n const value = JSON.parse(readFileSync(path, 'utf8')) as unknown\n return (Array.isArray(value) ? value : [value]).map((snapshot, index) => validateContextSnapshot(snapshot, index))\n}\n\nexport const validateContextSnapshots = (snapshots: readonly ContextSnapshot[]): readonly ContextSnapshot[] => snapshots.map((snapshot, index) => validateContextSnapshot(snapshot, index))\n\nexport const CONTEXT_PROVIDER_SLOT = createPluginSlot<ContextProvider>('context.provider')\n","import { hashJson } from '../kernel/hash.js'\nimport { saveRun as persistRun, setLatest } from './files.js'\nimport { FileEventStore } from '../kernel/events.js'\nimport { hashContextSnapshots } from '../context/index.js'\nimport type { ContextSnapshot } from '../context/index.js'\nimport type { LoadedConfig, SourceSnapshot, VerificationRun } from '../kernel/types.js'\n\nconst now = (): string => new Date().toISOString()\nconst newRunId = (): string => `${Date.now()}-${process.pid}-${Math.random().toString(36).slice(2, 8)}`\n\nexport const saveRun = (stateDir: string, run: VerificationRun): void => {\n persistRun(stateDir, run)\n const store = new FileEventStore(stateDir)\n const events = store.read(run.runId)\n if (!events.some((event) => event.type === 'run.created')) store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type: 'run.created', payload: { project: run.project, baselineRevision: run.baseline.revision, baselineStatusHash: run.baseline.statusHash } })\n const loggedTransitions = new Set(events.filter((event) => event.type === 'state.transitioned').map((event) => event.payload.transitionIndex))\n run.transitions.forEach((transition, transitionIndex) => {\n if (loggedTransitions.has(transitionIndex)) return\n store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type: 'state.transitioned', payload: { from: transition.from, to: transition.to, actor: transition.actor ?? 'harness', ...(transition.reason ? { reason: transition.reason } : {}), transitionIndex } })\n })\n const loggedSnapshots = new Set(events.filter((event) => event.type === 'context.attached').map((event) => event.payload.snapshotHash))\n for (const snapshot of run.contextSnapshots ?? []) {\n if (loggedSnapshots.has(snapshot.snapshotHash)) continue\n store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type: 'context.attached', payload: { providerId: snapshot.providerId, sourceHash: snapshot.sourceHash, snapshotHash: snapshot.snapshotHash, query: snapshot.query } })\n }\n}\nexport { setLatest }\n\nexport const createRun = async ({ loaded, baseline, supersedes, dirtyBaselineAuthorized, contextSnapshots = [] }: { readonly loaded: LoadedConfig; readonly baseline: SourceSnapshot; readonly supersedes?: string; readonly dirtyBaselineAuthorized?: boolean; readonly contextSnapshots?: readonly ContextSnapshot[] }): Promise<VerificationRun> => {\n const run: VerificationRun = {\n type: 'agentskit-harness-run', schemaVersion: 1, runId: newRunId(), project: loaded.config.project, state: 'PLANNED', configHash: loaded.configHash, contractHash: hashJson(loaded.config.contract), sourceRevision: baseline.revision, sourceStatusHash: baseline.statusHash, baseline, autonomy: loaded.config.autonomy,\n contractApproval: { actor: 'human', at: now(), contractHash: hashJson(loaded.config.contract) },\n checks: loaded.config.checks.map(({ id, category }) => ({ id, category, status: 'pending' })), contextSnapshots, ...(contextSnapshots.length ? { contextHash: hashContextSnapshots(contextSnapshots) } : {}), ...(loaded.config.benchmark ? { benchmark: loaded.config.benchmark } : {}),\n outcomes: loaded.config.contract.outcomes.map(({ id, statement, checks }) => ({ id, statement, checks, status: 'pending' })),\n transitions: [{ from: null, to: 'PLANNED', at: now(), actor: 'human' }], evidenceReferences: [],\n ...(supersedes ? { supersedes } : {}), ...(dirtyBaselineAuthorized ? { dirtyBaselineAuthorized: true } : {}),\n }\n saveRun(loaded.stateDir, run); setLatest(loaded.stateDir, run); return run\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { sha256 } from '../kernel/hash.js'\nimport { pathInside } from './files.js'\nimport type { EvidenceArtifact, StructuredEvidence, VerificationCheck } from '../kernel/types.js'\n\nexport const parseStructuredEvidence = (stdout: string): StructuredEvidence | null => {\n for (const line of stdout.split(/\\r?\\n/).map((item) => item.trim()).filter(Boolean).reverse()) {\n try {\n const value: unknown = JSON.parse(line)\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof (value as Record<string, unknown>)['status'] === 'string') return value as StructuredEvidence\n } catch {}\n }\n return null\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null && !Array.isArray(value)\nconst viewportValid = (viewport: unknown): boolean => typeof viewport === 'string' || (isRecord(viewport) && typeof viewport['width'] === 'number' && viewport['width'] > 0 && typeof viewport['height'] === 'number' && viewport['height'] > 0)\n\nexport const validateEvidence = (root: string, check: VerificationCheck, evidence: StructuredEvidence | null, outcomeIds: readonly string[]): string[] => {\n if (!evidence || evidence.status !== 'passed') return ['structured evidence did not pass']\n if (!Array.isArray(evidence.criteria) || !evidence.criteria.every((id): id is string => typeof id === 'string') || outcomeIds.some((id) => !evidence.criteria.includes(id))) return [`evidence must map criteria: ${outcomeIds.join(', ')}`]\n const failures: string[] = []\n if (check.category === 'ui') {\n if (evidence.capability !== 'real-browser') failures.push('UI evidence must declare capability real-browser')\n if (!Array.isArray(evidence.artifacts) || evidence.artifacts.length === 0) failures.push('UI evidence requires screenshot artifacts')\n }\n const artifacts = Array.isArray(evidence.artifacts) ? evidence.artifacts : []\n for (const artifactValue of artifacts) {\n if (!isRecord(artifactValue) || typeof artifactValue['path'] !== 'string' || typeof artifactValue['sha256'] !== 'string') {\n failures.push('artifact requires string path and sha256')\n continue\n }\n const artifact = artifactValue as unknown as EvidenceArtifact\n const artifactPath = join(root, artifact.path)\n if (!pathInside(root, artifactPath)) failures.push(`artifact path escapes project root: ${artifact.path}`)\n else if (!existsSync(artifactPath) || sha256(readFileSync(artifactPath)) !== artifact.sha256) failures.push(`artifact hash mismatch: ${artifact.path}`)\n if (check.category === 'ui' && (artifact.type !== 'screenshot' || !viewportValid(artifact.viewport))) failures.push(`UI artifact requires type=screenshot and viewport: ${artifact.path}`)\n }\n return failures\n}\n","import { execFile } from 'node:child_process'\nimport { readFileSync } from 'node:fs'\nimport { relative, resolve } from 'node:path'\nimport { promisify } from 'node:util'\nimport { hashJson, sha256 } from '../kernel/hash.js'\nimport { fail } from '../kernel/errors.js'\nimport type { SourceSnapshot } from '../kernel/types.js'\n\nconst execFileAsync = promisify(execFile)\nconst git = async (root: string, args: readonly string[]): Promise<string> => {\n try { return (await execFileAsync('git', ['-C', root, ...args], { encoding: 'utf8' })).stdout.trim() } catch { return '' }\n}\n\nexport const sourceSnapshot = async (root: string, stateDir: string): Promise<SourceSnapshot> => {\n const revision = await git(root, ['rev-parse', 'HEAD'])\n if (!revision) fail('Current-source evidence requires a Git repository with a committed HEAD.', 'GIT_REQUIRED')\n const stateRelative = relative(root, stateDir).replaceAll('\\\\', '/')\n const pathspec = ['--', '.']\n if (stateRelative && stateRelative !== '..' && !stateRelative.startsWith('../')) pathspec.push(`:(exclude)${stateRelative}`)\n const status = await git(root, ['status', '--porcelain=v1', '--untracked-files=all', ...pathspec])\n const diff = await git(root, ['diff', '--no-ext-diff', '--binary', 'HEAD', ...pathspec])\n const untrackedPaths = (await git(root, ['ls-files', '--others', '--exclude-standard', '-z'])).split('\\0').filter(Boolean).filter((path) => !stateRelative || (path !== stateRelative && !path.startsWith(`${stateRelative}/`)))\n const untracked = untrackedPaths.map((path) => ({ path, hash: sha256(readFileSync(resolve(root, path))) }))\n const fingerprint = { revision, status, diff, untracked }\n return { revision, status, statusHash: hashJson(fingerprint) }\n}\n","import { cpus as cpuInfo, freemem, loadavg, totalmem } from 'node:os'\nimport { existsSync, readFileSync } from 'node:fs'\nimport type { MachineMetrics, MachineSample } from '../kernel/types.js'\nimport { fail } from '../kernel/errors.js'\n\nexport interface MachineThresholds {\n readonly warningPercent: number\n readonly criticalPercent: number\n}\n\nconst thresholds = (value: Partial<MachineThresholds> = {}): MachineThresholds => {\n const result = { warningPercent: value.warningPercent ?? 75, criticalPercent: value.criticalPercent ?? 90 }\n if (![result.warningPercent, result.criticalPercent].every((item) => Number.isFinite(item) && item >= 0 && item <= 100) || result.warningPercent > result.criticalPercent) fail('Machine thresholds must be between 0 and 100 and warning must not exceed critical.', 'INVALID_INPUT')\n return result\n}\n\nconst linuxSwap = (): number | undefined => {\n if (process.platform !== 'linux' || !existsSync('/proc/meminfo')) return undefined\n const values = Object.fromEntries(readFileSync('/proc/meminfo', 'utf8').split(/\\r?\\n/).flatMap((line) => {\n const match = line.match(/^(SwapTotal|SwapFree):\\s+(\\d+)\\s+kB$/)\n return match ? [[match[1], Number(match[2])]] : []\n })) as Record<string, number>\n if (!values['SwapTotal']) return undefined\n return Number(((1 - (values['SwapFree'] ?? 0) / values['SwapTotal']) * 100).toFixed(2))\n}\n\nconst percentile95 = (values: readonly number[]): number => {\n if (!values.length) return 0\n const sorted = [...values].sort((left, right) => left - right)\n return sorted[Math.min(sorted.length - 1, Math.ceil(sorted.length * 0.95) - 1)] ?? 0\n}\n\nexport const sampleMachine = (): MachineSample => {\n const cpus = Math.max(1, cpuInfo().length)\n const load1 = Math.max(0, loadavg()[0] ?? 0)\n const memory = Math.max(0, Math.min(100, (1 - freemem() / Math.max(1, totalmem())) * 100))\n const swapUsedPercent = linuxSwap()\n return {\n at: new Date().toISOString(),\n cpus,\n load1: Number(load1.toFixed(4)),\n load1PerCpuPercent: Number(Math.min(100, (load1 / cpus) * 100).toFixed(2)),\n memoryUsedPercent: Number(memory.toFixed(2)),\n rssBytes: process.memoryUsage().rss,\n ...(swapUsedPercent === undefined ? {} : { swapUsedPercent }),\n }\n}\n\nexport const summarizeMachine = (samples: readonly MachineSample[], sampleIntervalMs = 5_000, limits: Partial<MachineThresholds> = {}): MachineMetrics => {\n const limit = thresholds(limits)\n const load = samples.map((sample) => sample.load1PerCpuPercent)\n const memory = samples.map((sample) => sample.memoryUsedPercent)\n const rss = samples.map((sample) => sample.rssBytes)\n return {\n sampleIntervalMs,\n samples,\n peakLoad1PerCpuPercent: Number(Math.max(...load, 0).toFixed(2)),\n peakMemoryUsedPercent: Number(Math.max(...memory, 0).toFixed(2)),\n peakRssBytes: Math.max(...rss, 0),\n pressureEvents: samples.filter((sample) => sample.load1PerCpuPercent >= limit.criticalPercent || sample.memoryUsedPercent >= limit.criticalPercent || (sample.swapUsedPercent ?? 0) >= limit.criticalPercent || sample.memoryPressure === 'critical').length,\n throttleEvents: 0,\n minimumEffectiveConcurrency: 0,\n }\n}\n\nexport const adaptiveConcurrency = (configured: number, sample: MachineSample, limits: Partial<MachineThresholds> = {}): number => {\n if (!Number.isInteger(configured) || configured < 1) throw new Error('configured concurrency must be a positive integer.')\n const limit = thresholds(limits)\n const critical = sample.load1PerCpuPercent >= limit.criticalPercent || sample.memoryUsedPercent >= limit.criticalPercent || (sample.swapUsedPercent ?? 0) >= limit.criticalPercent || sample.memoryPressure === 'critical'\n const warning = sample.load1PerCpuPercent >= limit.warningPercent || sample.memoryUsedPercent >= limit.warningPercent || (sample.swapUsedPercent ?? 0) >= limit.warningPercent || sample.memoryPressure === 'warning'\n if (critical) return 1\n if (warning) return Math.min(configured, 2)\n return configured\n}\n\nexport const createMachineMonitor = (sampleIntervalMs = 5_000, options: { readonly sample?: () => MachineSample; readonly thresholds?: Partial<MachineThresholds> } = {}): { readonly sample: () => MachineSample; readonly observeConcurrency: (value: number) => void; readonly markThrottle: () => void; readonly stop: () => MachineMetrics } => {\n const sampler = options.sample ?? sampleMachine\n const limits = thresholds(options.thresholds)\n const samples: MachineSample[] = [sampler()]\n let throttleEvents = 0\n const effectiveConcurrency: number[] = []\n const record = (): MachineSample => { const sample = sampler(); samples.push(sample); return sample }\n const timer = setInterval(record, sampleIntervalMs)\n timer.unref()\n return {\n sample: record,\n observeConcurrency: (value) => effectiveConcurrency.push(value),\n markThrottle: () => { throttleEvents += 1 },\n stop: () => {\n clearInterval(timer)\n record()\n const summary = summarizeMachine(samples, sampleIntervalMs, limits)\n return { ...summary, throttleEvents, minimumEffectiveConcurrency: effectiveConcurrency.length ? Math.min(...effectiveConcurrency) : 0 }\n },\n }\n}\n","import { spawn } from 'node:child_process'\nimport { mkdirSync, writeFileSync } from 'node:fs'\nimport { join, relative } from 'node:path'\nimport { createRun, saveRun, setLatest } from './runs.js'\nimport { loadConfig } from './config.js'\nimport { fail } from '../kernel/errors.js'\nimport { parseStructuredEvidence, validateEvidence } from './evidence.js'\nimport { assertHuman, approvedDecision, transition } from '../kernel/state-machine.js'\nimport { sourceSnapshot } from './source.js'\nimport { cleanConfiguredArtifacts, loadLatestRun, readRun } from './files.js'\nimport { validateContextSnapshots } from '../context/index.js'\nimport { hashJson } from '../kernel/hash.js'\nimport type { ContextSnapshot } from '../context/index.js'\nimport type { CheckResult, LoadedConfig, VerificationCheck, VerificationRun } from '../kernel/types.js'\nimport { FileEventStore } from '../kernel/events.js'\nimport { adaptiveConcurrency, createMachineMonitor } from './machine.js'\n\nconst now = (): string => new Date().toISOString()\nconst requireRun = (run: VerificationRun | null): VerificationRun => run ?? fail('No verification run exists.', 'NO_RUN')\nconst verificationProjection = (run: Pick<VerificationRun, 'checks' | 'outcomes' | 'metrics'>): { readonly checks: VerificationRun['checks']; readonly outcomes: VerificationRun['outcomes']; readonly metrics: VerificationRun['metrics'] } => ({ checks: run.checks, outcomes: run.outcomes, metrics: run.metrics })\nconst verificationDigest = (run: Pick<VerificationRun, 'checks' | 'outcomes' | 'metrics'>): string => hashJson(verificationProjection(run))\n\ninterface CommandResult { readonly exitCode: number; readonly timedOut: boolean; readonly stdout: string; readonly stderr: string; readonly durationMs: number }\ninterface ExecutedCheck { readonly check: CheckResult; readonly stdout: string; readonly stderr: string; readonly durationMs: number }\n\nconst runCommand = (check: VerificationCheck, cwd: string): Promise<CommandResult> => new Promise((resolveResult) => {\n const started = Date.now()\n const child = spawn(check.command, { cwd, shell: true, env: process.env })\n let stdout = ''\n let stderr = ''\n let timedOut = false\n const timer = setTimeout(() => { timedOut = true; child.kill('SIGTERM') }, check.timeoutMs)\n child.stdout.on('data', (chunk: Buffer) => { stdout += chunk.toString() })\n child.stderr.on('data', (chunk: Buffer) => { stderr += chunk.toString() })\n child.on('close', (exitCode) => { clearTimeout(timer); resolveResult({ exitCode: exitCode ?? 1, timedOut, stdout, stderr, durationMs: Date.now() - started }) })\n})\n\nconst executeCheck = async (check: VerificationCheck, cwd: string, checkDir: string, outcomes: readonly string[]): Promise<ExecutedCheck> => {\n const result = await runCommand(check, cwd)\n const evidence = parseStructuredEvidence(result.stdout)\n const failures = result.exitCode === 0 && !result.timedOut && evidence ? validateEvidence(cwd, check, evidence, outcomes) : [result.timedOut ? 'check timed out' : result.exitCode !== 0 ? `exit code ${result.exitCode}` : 'missing final structured evidence']\n return { check: { id: check.id, category: check.category, status: failures.length ? 'failed' : 'passed', exitCode: result.exitCode, durationMs: result.durationMs, ...(evidence ? { evidence } : {}), ...(failures.length ? { failures } : {}) }, stdout: result.stdout, stderr: result.stderr, durationMs: result.durationMs }\n}\n\nconst currentBinding = async (loaded: LoadedConfig): Promise<{ readonly source: Awaited<ReturnType<typeof sourceSnapshot>>; readonly configHash: string }> => ({ source: await sourceSnapshot(loaded.root, loaded.stateDir), configHash: loaded.configHash })\n\nconst staleRun = (loaded: LoadedConfig, run: VerificationRun, reason: string): never => {\n const stale = transition(run, 'STALE', reason)\n saveRun(loaded.stateDir, stale as VerificationRun); setLatest(loaded.stateDir, stale as VerificationRun)\n return fail(reason, 'STALE')\n}\n\nconst isFresh = async (loaded: LoadedConfig, run: VerificationRun): Promise<boolean> => {\n const current = await currentBinding(loaded)\n return current.configHash === run.configHash && current.source.revision === run.sourceRevision && current.source.statusHash === run.sourceStatusHash\n}\n\nexport const planRun = async ({ configPath, decision, actor = 'human', allowDirty = false, contextSnapshots = [] }: { readonly configPath: string; readonly decision: string; readonly actor?: string; readonly allowDirty?: boolean; readonly contextSnapshots?: readonly ContextSnapshot[] }): Promise<VerificationRun> => {\n assertHuman(actor)\n if (!approvedDecision(decision)) fail('Contract was not approved.', 'CLARIFYING')\n const loaded = loadConfig(configPath)\n if (loaded.config.contract.ambiguities.length) fail(`Unresolved ambiguities remain: ${loaded.config.contract.ambiguities.join(' | ')}`, 'CLARIFYING')\n const validatedContextSnapshots = validateContextSnapshots(contextSnapshots)\n const baseline = await sourceSnapshot(loaded.root, loaded.stateDir)\n const configRelative = relative(loaded.root, loaded.absolute)\n const meaningful = baseline.status.split('\\n').filter(Boolean).filter((line) => !line.endsWith(` ${configRelative}`) && !line.endsWith(` ${configRelative.replaceAll('/', '\\\\')}`))\n if (meaningful.length && !allowDirty) fail(`Worktree is dirty before planning:\\n${meaningful.join('\\n')}\\nUse --allow-dirty only with explicit human authorization.`, 'WORKTREE_DIRTY')\n const previous = loadLatestRun(loaded.stateDir)\n if (previous && !['STALE', 'SUPERSEDED'].includes(previous.state)) fail(`An active run already exists: ${previous.runId} (${previous.state}).`, 'ACTIVE_RUN')\n return createRun({ loaded, baseline, supersedes: previous?.runId, dirtyBaselineAuthorized: allowDirty, contextSnapshots: validatedContextSnapshots })\n}\n\nexport const startRun = (loaded: LoadedConfig): VerificationRun => {\n const run = requireRun(loadLatestRun(loaded.stateDir))\n const next = transition(run, 'IMPLEMENTING', 'Implementation started.', 'agent') as VerificationRun\n saveRun(loaded.stateDir, next); setLatest(loaded.stateDir, next); return next\n}\n\nexport const cancelRun = async ({ configPath, runId, reason = 'Run cancelled by a human.', actor = 'human' }: { readonly configPath: string; readonly runId?: string; readonly reason?: string; readonly actor?: string }): Promise<VerificationRun> => {\n assertHuman(actor)\n const loaded = loadConfig(configPath)\n const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n const next = transition(run, 'CANCELLED', reason, 'human') as VerificationRun\n saveRun(loaded.stateDir, next); setLatest(loaded.stateDir, next); return next\n}\n\nexport const verifyRun = async ({ configPath }: { readonly configPath: string }): Promise<VerificationRun> => {\n const loaded = loadConfig(configPath)\n const machineMonitor = createMachineMonitor()\n const run = requireRun(loadLatestRun(loaded.stateDir))\n if (!['IMPLEMENTING', 'VERIFYING'].includes(run.state)) {\n if (['AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE'].includes(run.state) && !(await isFresh(loaded, run))) staleRun(loaded, run, 'Run is stale because source or contract changed.')\n fail(`Cannot verify from ${run.state}.`, 'INVALID_STATE')\n }\n if (run.configHash !== loaded.configHash) staleRun(loaded, run, 'Run is stale because the verification contract changed.')\n const binding = await currentBinding(loaded)\n let current = { ...transition(run, 'VERIFYING', 'Verification started.', 'agent'), sourceRevision: binding.source.revision, sourceStatusHash: binding.source.statusHash } as VerificationRun\n saveRun(loaded.stateDir, current)\n const checkDir = join(loaded.stateDir, 'runs', current.runId, 'checks')\n mkdirSync(checkDir, { recursive: true })\n const outcomesByCheck = new Map(loaded.config.checks.map((check) => [check.id, loaded.config.contract.outcomes.filter((outcome) => outcome.checks.includes(check.id)).map((outcome) => outcome.id)]))\n let totalDurationMs = 0\n let activeChecks = 0\n let observedPeakConcurrency = 0\n const verificationStarted = Date.now()\n const maxConcurrency = loaded.config.verification?.maxConcurrency ?? 1\n const requiredChecks = loaded.config.checks.filter((check) => check.required)\n for (const check of loaded.config.checks.filter((item) => !item.required)) {\n const nextCheck: CheckResult = { id: check.id, category: check.category, status: 'not-applicable', failures: [check.reason ?? 'Not required by the selected profile.'] }\n current = { ...current, checks: current.checks.map((item) => item.id === check.id ? nextCheck : item) } as VerificationRun\n }\n const remaining = new Set(requiredChecks.map((check) => check.id))\n const completed = new Set(loaded.config.checks.filter((check) => !check.required).map((check) => check.id))\n while (remaining.size) {\n const ready = requiredChecks.filter((check) => remaining.has(check.id) && (check.dependsOn ?? []).every((dependency) => completed.has(dependency)))\n if (!ready.length) fail('Check dependency graph contains an unknown dependency or cycle.', 'INVALID_CONFIG')\n // ponytail: build checks are a dependency barrier; consumers may fan out only after artifacts exist.\n const buildChecks = ready.filter((check) => check.category === 'build')\n const queue = buildChecks.length ? buildChecks : ready\n let offset = 0\n while (offset < queue.length) {\n const effectiveConcurrency = buildChecks.length ? 1 : adaptiveConcurrency(maxConcurrency, machineMonitor.sample())\n machineMonitor.observeConcurrency(effectiveConcurrency)\n if (effectiveConcurrency < maxConcurrency) machineMonitor.markThrottle()\n const batch = queue.slice(offset, offset + effectiveConcurrency)\n const executed = await Promise.all(batch.map(async (check) => {\n activeChecks += 1\n observedPeakConcurrency = Math.max(observedPeakConcurrency, activeChecks)\n try {\n return await executeCheck(check, loaded.root, checkDir, outcomesByCheck.get(check.id) ?? [])\n } finally {\n activeChecks -= 1\n }\n }))\n for (const item of executed) {\n totalDurationMs += item.durationMs\n const stdoutPath = join(checkDir, `${item.check.id}.stdout`)\n const stderrPath = join(checkDir, `${item.check.id}.stderr`)\n writeFileSync(stdoutPath, item.stdout, 'utf8'); writeFileSync(stderrPath, item.stderr, 'utf8')\n current = { ...current, evidenceReferences: [...current.evidenceReferences, { checkId: item.check.id, stdout: relative(loaded.stateDir, stdoutPath), stderr: relative(loaded.stateDir, stderrPath) }], checks: current.checks.map((check) => check.id === item.check.id ? item.check : check) } as VerificationRun\n }\n saveRun(loaded.stateDir, current)\n for (const check of batch) { remaining.delete(check.id); completed.add(check.id) }\n offset += batch.length\n }\n }\n const statuses = new Map(current.checks.map((check) => [check.id, check.status]))\n const budgetExceeded = loaded.config.budget?.maxDurationMs !== undefined && totalDurationMs > loaded.config.budget.maxDurationMs\n const allPassed = loaded.config.checks.every((check) => !check.required || statuses.get(check.id) === 'passed') && !budgetExceeded\n current = { ...current, outcomes: current.outcomes.map((outcome) => { const required = outcome.checks.filter((id) => loaded.config.checks.find((check) => check.id === id)?.required); return { ...outcome, status: required.length === 0 ? 'not-applicable' : required.every((id) => statuses.get(id) === 'passed') ? 'passed' : 'failed' } }), metrics: { totalDurationMs, wallDurationMs: Date.now() - verificationStarted, peakConcurrency: observedPeakConcurrency, budgetExceeded, machine: machineMonitor.stop() } } as VerificationRun\n const digest = verificationDigest(current)\n current = { ...current, verificationDigest: digest }\n saveRun(loaded.stateDir, current)\n new FileEventStore(loaded.stateDir).append({ runId: current.runId, sourceRevision: current.sourceRevision, configHash: current.configHash, type: 'verification.completed', payload: { verificationDigest: digest, checkCount: current.checks.length, outcomeCount: current.outcomes.length, totalDurationMs, budgetExceeded } })\n const automatic = allPassed && current.autonomy === 'yolo' && !loaded.config.tracking.required && loaded.config.contract.ambiguities.length === 0\n const nextState = allPassed ? automatic ? 'COMPLETE' : 'AWAITING_HUMAN_APPROVAL' : 'BLOCKED'\n current = { ...transition(current, nextState, automatic ? 'All applicable checks passed; YOLO policy permits automatic completion.' : allPassed ? 'All configured checks passed; human approval is required.' : budgetExceeded ? 'Verification budget was exceeded.' : 'A configured check failed or lacked structured evidence.', 'harness') } as VerificationRun\n saveRun(loaded.stateDir, current); setLatest(loaded.stateDir, current); return current\n}\n\nconst assertFresh = async (loaded: LoadedConfig, run: VerificationRun): Promise<void> => {\n if (!(await isFresh(loaded, run))) staleRun(loaded, run, 'Run is stale because source or worktree changed after verification.')\n}\n\nconst assertVerificationAttestation = (loaded: LoadedConfig, run: VerificationRun): void => {\n const expected = verificationDigest(run)\n if (run.verificationDigest !== expected) fail('Verification projection attestation does not match run.json.', 'HARNESS_ERROR')\n const event = new FileEventStore(loaded.stateDir).read(run.runId).filter((item) => item.type === 'verification.completed').at(-1)\n if (!event || event.payload.verificationDigest !== expected || event.sourceRevision !== run.sourceRevision || event.configHash !== run.configHash) fail('Verification projection attestation is missing from the event log.', 'HARNESS_ERROR')\n}\n\nconst recordDecision = (loaded: LoadedConfig, run: VerificationRun, type: 'approval.recorded' | 'authorization.recorded', payload: { readonly decision: 'approved' | 'rejected'; readonly resultingState: VerificationRun['state']; readonly verificationDigest: string; readonly actor: 'human'; readonly sourceRevision: string; readonly contractHash: string; readonly target?: string }): void => {\n new FileEventStore(loaded.stateDir).append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, type, payload: type === 'authorization.recorded' ? { ...payload, target: payload.target ?? fail('tracking.target is required when authorizing.', 'INVALID_CONFIG') } : payload })\n}\n\nconst assertDecisionProjection = (run: VerificationRun, decision: { readonly decision: 'approved' | 'rejected'; readonly resultingState: VerificationRun['state']; readonly verificationDigest: string; readonly sourceRevision: string; readonly contractHash: string }, expectedState: VerificationRun['state']): void => {\n if (decision.decision !== 'approved' || decision.resultingState !== expectedState || decision.verificationDigest !== run.verificationDigest || decision.sourceRevision !== run.sourceRevision || decision.contractHash !== run.contractHash) fail('Terminal decision attestation does not match the run projection.', 'HARNESS_ERROR')\n}\n\nexport const reconcileRun = async ({ configPath, runId }: { readonly configPath: string; readonly runId?: string }): Promise<import('../kernel/types.js').RunReconciliation> => {\n const loaded = loadConfig(configPath)\n const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n await assertFresh(loaded, run)\n const store = new FileEventStore(loaded.stateDir)\n const eventLog = store.verify(run.runId)\n const events = store.read(run.runId)\n if (events.some((event) => event.runId !== run.runId || event.configHash !== run.configHash)) fail('Run event log is not bound to the current run projection.', 'HARNESS_ERROR')\n const requiresVerification = ['AWAITING_HUMAN_APPROVAL', 'AWAITING_AUTHORIZATION', 'COMPLETE'].includes(run.state)\n if (requiresVerification) {\n if (eventLog.status !== 'verified') fail('Terminal run requires a verified event log.', 'HARNESS_ERROR')\n assertVerificationAttestation(loaded, run)\n }\n if ((run.state === 'AWAITING_AUTHORIZATION' || run.state === 'COMPLETE') && run.autonomy !== 'yolo') {\n const approval = events.filter((event) => event.type === 'approval.recorded').at(-1) ?? fail('Terminal run is missing its human approval event.', 'HARNESS_ERROR')\n assertDecisionProjection(run, approval.payload, run.state === 'COMPLETE' && !loaded.config.tracking.required ? 'COMPLETE' : 'AWAITING_AUTHORIZATION')\n if (!run.humanApproval || run.humanApproval.actor !== 'human' || run.humanApproval.verificationDigest !== run.verificationDigest || run.humanApproval.sourceRevision !== run.sourceRevision || run.humanApproval.contractHash !== run.contractHash) fail('Human approval projection is inconsistent with its audit event.', 'HARNESS_ERROR')\n }\n if (run.state === 'COMPLETE' && loaded.config.tracking.required) {\n const authorization = events.filter((event) => event.type === 'authorization.recorded').at(-1) ?? fail('Complete tracked run is missing its authorization event.', 'HARNESS_ERROR')\n assertDecisionProjection(run, authorization.payload, 'COMPLETE')\n if (!run.authorization || run.authorization.actor !== 'human' || run.authorization.verificationDigest !== run.verificationDigest || run.authorization.target !== authorization.payload.target || run.authorization.sourceRevision !== run.sourceRevision || run.authorization.contractHash !== run.contractHash) fail('Authorization projection is inconsistent with its audit event.', 'HARNESS_ERROR')\n }\n return { status: 'verified', runId: run.runId, state: run.state, eventCount: eventLog.eventCount, ...(eventLog.headHash ? { headHash: eventLog.headHash } : {}), ...(run.verificationDigest ? { verificationDigest: run.verificationDigest } : {}) }\n}\n\nexport const approveRun = async ({ configPath, runId, decision, actor = 'human' }: { readonly configPath: string; readonly runId?: string; readonly decision: string; readonly actor?: string }): Promise<VerificationRun> => {\n assertHuman(actor); const loaded = loadConfig(configPath); const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n if (run.state !== 'AWAITING_HUMAN_APPROVAL') fail(`Cannot approve from ${run.state}.`, 'INVALID_STATE')\n await assertFresh(loaded, run); assertVerificationAttestation(loaded, run)\n if (!approvedDecision(decision)) { const blocked = transition(run, 'BLOCKED', 'Human rejected the verification result.', 'human') as VerificationRun; saveRun(loaded.stateDir, blocked); recordDecision(loaded, run, 'approval.recorded', { decision: 'rejected', resultingState: blocked.state, verificationDigest: run.verificationDigest!, actor: 'human', sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, blocked); return blocked }\n const nextState = loaded.config.tracking.required ? 'AWAITING_AUTHORIZATION' : 'COMPLETE'\n const next = { ...transition(run, nextState, 'Human approved the verification result.', 'human'), humanApproval: { actor: 'human', at: now(), sourceRevision: run.sourceRevision, contractHash: run.contractHash, verificationDigest: run.verificationDigest } } as VerificationRun\n saveRun(loaded.stateDir, next); recordDecision(loaded, run, 'approval.recorded', { decision: 'approved', resultingState: nextState, verificationDigest: run.verificationDigest!, actor: 'human', sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, next); return next\n}\n\nexport const authorizeRun = async ({ configPath, runId, decision, actor = 'human' }: { readonly configPath: string; readonly runId?: string; readonly decision: string; readonly actor?: string }): Promise<VerificationRun> => {\n assertHuman(actor); const loaded = loadConfig(configPath); const run = requireRun(runId ? readRun(loaded.stateDir, runId) : loadLatestRun(loaded.stateDir))\n if (run.state !== 'AWAITING_AUTHORIZATION') fail(`Cannot authorize from ${run.state}.`, 'INVALID_STATE')\n await assertFresh(loaded, run); assertVerificationAttestation(loaded, run)\n if (!approvedDecision(decision)) { const blocked = transition(run, 'BLOCKED', 'Human rejected external tracking authorization.', 'human') as VerificationRun; saveRun(loaded.stateDir, blocked); recordDecision(loaded, run, 'authorization.recorded', { decision: 'rejected', resultingState: blocked.state, verificationDigest: run.verificationDigest!, actor: 'human', target: loaded.config.tracking.target ?? '', sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, blocked); return blocked }\n if (!loaded.config.tracking.target) fail('tracking.target is required when authorizing.', 'INVALID_CONFIG')\n const next = { ...transition(run, 'COMPLETE', 'External tracking was authorized.', 'human'), authorization: { actor: 'human', at: now(), target: loaded.config.tracking.target, sourceRevision: run.sourceRevision, contractHash: run.contractHash, verificationDigest: run.verificationDigest } } as VerificationRun\n saveRun(loaded.stateDir, next); recordDecision(loaded, run, 'authorization.recorded', { decision: 'approved', resultingState: 'COMPLETE', verificationDigest: run.verificationDigest!, actor: 'human', target: loaded.config.tracking.target, sourceRevision: run.sourceRevision, contractHash: run.contractHash }); setLatest(loaded.stateDir, next); return next\n}\n\nexport const retryRun = async ({ configPath }: { readonly configPath: string }): Promise<VerificationRun> => {\n const loaded = loadConfig(configPath); const previous = loadLatestRun(loaded.stateDir)\n const previousRun = requireRun(previous)\n if (!['BLOCKED', 'STALE', 'CANCELLED'].includes(previousRun.state)) fail(`Cannot retry from ${previousRun.state}.`, 'INVALID_STATE')\n const baseline = await sourceSnapshot(loaded.root, loaded.stateDir)\n const superseded = transition(previousRun, 'SUPERSEDED', 'Retry superseded the previous run.', 'harness') as VerificationRun\n saveRun(loaded.stateDir, superseded)\n const run = await createRun({ loaded, baseline, supersedes: previousRun.runId, dirtyBaselineAuthorized: previousRun.dirtyBaselineAuthorized })\n const next = transition(run, 'IMPLEMENTING', 'Retry started after a previous attempt.', 'agent') as VerificationRun\n saveRun(loaded.stateDir, next); setLatest(loaded.stateDir, next); return next\n}\n\nexport const cleanTaskArtifacts = (configPath: string): { readonly cleaned: readonly string[] } => cleanConfiguredArtifacts(loadConfig(configPath))\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\n\nexport const CAPABILITY_MANIFEST_SCHEMA_VERSION = 1 as const\nexport const CAPABILITY_KINDS = ['kernel', 'execution', 'adapter', 'composition'] as const\nexport type CapabilityKind = typeof CAPABILITY_KINDS[number]\n\nexport interface CapabilityDescriptor {\n readonly id: string\n readonly version: string\n readonly kind: CapabilityKind\n readonly entryPoint: string\n readonly exports: readonly string[]\n readonly dependencies?: readonly string[]\n}\n\nexport interface CapabilityManifest {\n readonly type: 'agentskit-harness-capability-manifest'\n readonly schemaVersion: typeof CAPABILITY_MANIFEST_SCHEMA_VERSION\n readonly package: string\n readonly packageVersion: string\n readonly entryPoint: string\n readonly sourceDigest: string\n readonly capabilities: readonly CapabilityDescriptor[]\n readonly digest: string\n}\n\nexport interface CapabilityManifestInput {\n readonly package: string\n readonly packageVersion: string\n readonly entryPoint: string\n readonly sourceDigest: string\n readonly capabilities: readonly CapabilityDescriptor[]\n}\n\nconst nonEmpty = (value: unknown, label: string): string => {\n if (typeof value !== 'string') fail(`${label} is required.`, 'INVALID_INPUT')\n const result = (value as string).trim()\n if (!result) fail(`${label} is required.`, 'INVALID_INPUT')\n return result\n}\n\nconst digest = (value: unknown, label: string): string => {\n const result = nonEmpty(value, label)\n if (!/^[a-f0-9]{64}$/.test(result)) fail(`${label} must be a lowercase SHA-256 digest.`, 'INVALID_INPUT')\n return result\n}\n\nconst stringList = (value: unknown, label: string): readonly string[] => {\n if (!Array.isArray(value)) fail(`${label} must be a non-empty string array.`, 'INVALID_INPUT')\n if (!(value as readonly unknown[]).length) fail(`${label} must be a non-empty string array.`, 'INVALID_INPUT')\n const items: readonly unknown[] = value as readonly unknown[]\n const result = items.map((item, index) => nonEmpty(item, `${label}[${index}]`))\n if (new Set(result).size !== result.length) fail(`${label} must not contain duplicates.`, 'INVALID_INPUT')\n return result\n}\n\nconst descriptor = (value: unknown, index: number): CapabilityDescriptor => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail(`capabilities[${index}] must be an object.`, 'INVALID_INPUT')\n const candidate = value as Record<string, unknown>\n const kind = candidate['kind']\n if (typeof kind !== 'string' || !(CAPABILITY_KINDS as readonly string[]).includes(kind)) fail(`capabilities[${index}].kind is invalid.`, 'INVALID_INPUT')\n const dependencies = candidate['dependencies'] === undefined ? undefined : stringList(candidate['dependencies'], `capabilities[${index}].dependencies`)\n return {\n id: nonEmpty(candidate['id'], `capabilities[${index}].id`),\n version: nonEmpty(candidate['version'], `capabilities[${index}].version`),\n kind: kind as CapabilityKind,\n entryPoint: nonEmpty(candidate['entryPoint'], `capabilities[${index}].entryPoint`),\n exports: stringList(candidate['exports'], `capabilities[${index}].exports`),\n ...(dependencies === undefined ? {} : { dependencies }),\n }\n}\n\nconst manifestBody = (input: CapabilityManifestInput): Omit<CapabilityManifest, 'digest'> => ({\n type: 'agentskit-harness-capability-manifest',\n schemaVersion: CAPABILITY_MANIFEST_SCHEMA_VERSION,\n package: nonEmpty(input.package, 'package'),\n packageVersion: nonEmpty(input.packageVersion, 'packageVersion'),\n entryPoint: nonEmpty(input.entryPoint, 'entryPoint'),\n sourceDigest: digest(input.sourceDigest, 'sourceDigest'),\n capabilities: (Array.isArray(input.capabilities) ? input.capabilities : fail('capabilities must be an array.', 'INVALID_INPUT')).map(descriptor),\n})\n\nexport const createCapabilityManifest = (input: CapabilityManifestInput): CapabilityManifest => {\n const body = manifestBody(input)\n if (!body.capabilities.length) fail('capabilities must be non-empty.', 'INVALID_INPUT')\n if (new Set(body.capabilities.map((item) => item.id)).size !== body.capabilities.length) fail('capability ids must be unique.', 'INVALID_INPUT')\n return { ...body, digest: hashJson(body) }\n}\n\nexport const validateCapabilityManifest = (value: unknown): CapabilityManifest => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('Capability manifest must be an object.', 'INVALID_INPUT')\n const candidate = value as Record<string, unknown>\n const capabilities = Array.isArray(candidate['capabilities']) ? candidate['capabilities'] : fail('capabilities must be an array.', 'INVALID_INPUT')\n const body = manifestBody({ package: nonEmpty(candidate['package'], 'package'), packageVersion: nonEmpty(candidate['packageVersion'], 'packageVersion'), entryPoint: nonEmpty(candidate['entryPoint'], 'entryPoint'), sourceDigest: digest(candidate['sourceDigest'], 'sourceDigest'), capabilities: capabilities as readonly CapabilityDescriptor[] })\n if (new Set(body.capabilities.map((item) => item.id)).size !== body.capabilities.length) fail('capability ids must be unique.', 'INVALID_INPUT')\n if (candidate['type'] !== body.type || candidate['schemaVersion'] !== body.schemaVersion) fail('Capability manifest type or schemaVersion is invalid.', 'INVALID_INPUT')\n const manifestDigest = digest(candidate['digest'], 'digest')\n if (manifestDigest !== hashJson(body)) fail('Capability manifest digest is invalid.', 'INVALID_INPUT')\n return { ...body, digest: manifestDigest }\n}\n","import { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { hashJson } from '../kernel/hash.js'\nimport { hashContextSnapshot } from '../context/index.js'\nimport type { AdapterTelemetry } from '../kernel/adapter-contract.js'\nimport type { ContextProvider, ContextQuery, ContextReference } from '../context/index.js'\n\ninterface IndexEntry { readonly id?: unknown; readonly type?: unknown; readonly title?: unknown; readonly path?: unknown; readonly description?: unknown; readonly body?: unknown; readonly tags?: unknown; readonly contentHash?: unknown }\ninterface IndexDocument { readonly contentHash?: unknown; readonly knowledge?: unknown }\n\nconst index = (root: string, indexPath: string): IndexDocument => JSON.parse(readFileSync(resolve(root, indexPath), 'utf8')) as IndexDocument\nconst text = (entry: IndexEntry): string => [entry.id, entry.type, entry.title, entry.path, entry.description, entry.body, ...(Array.isArray(entry.tags) ? entry.tags : [])].filter((value): value is string => typeof value === 'string').join(' ').toLowerCase()\nconst sourceHash = (document: IndexDocument): string => typeof document.contentHash === 'string' && document.contentHash.length > 0 ? document.contentHash : hashJson(document)\nconst matches = (entry: IndexEntry, query: ContextQuery): boolean => {\n const needle = query.query.trim().toLowerCase()\n const scopes = query.scope?.map((scope) => scope.toLowerCase()) ?? []\n const value = text(entry)\n return Boolean(needle && value.includes(needle) && (scopes.length === 0 || scopes.some((scope) => value.includes(scope))))\n}\n\nexport interface DocBridgeContextProviderOptions {\n readonly root: string\n readonly indexPath?: string\n}\n\nexport const createDocBridgeContextProvider = ({ root, indexPath = '.doc-bridge/index.json' }: DocBridgeContextProviderOptions): ContextProvider => ({\n id: 'doc-bridge',\n version: '1.0.0',\n resolve: async (query) => {\n const started = Date.now()\n const document = index(root, indexPath)\n const contentHash = sourceHash(document)\n const entries = Array.isArray(document.knowledge) ? document.knowledge.filter((value): value is IndexEntry => typeof value === 'object' && value !== null && !Array.isArray(value)).filter((entry) => matches(entry, query)).sort((left, right) => String(left.id ?? '').localeCompare(String(right.id ?? ''))).slice(0, 8) : []\n const references: ContextReference[] = entries.flatMap((entry) => typeof entry.id === 'string' && typeof entry.path === 'string' ? [{ id: entry.id, uri: `doc-bridge://${entry.path}`, ...(typeof entry.title === 'string' ? { title: entry.title } : {}), contentHash: typeof entry.contentHash === 'string' ? entry.contentHash : contentHash, relevance: 1 }] : [])\n const telemetry: AdapterTelemetry = { status: 'measured', durationMs: Date.now() - started, contextReferences: references.length, contextCostTokens: Math.max(1, Math.ceil(JSON.stringify(references).length / 4)) }\n return { providerId: 'doc-bridge', query, references, sourceHash: contentHash, snapshotHash: hashContextSnapshot({ providerId: 'doc-bridge', query, references, sourceHash: contentHash }), resolvedAt: new Date().toISOString(), assurance: 'contract-tested', telemetry }\n },\n})\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\n\nexport interface DiscoveryOption {\n readonly id: string\n readonly summary: string\n readonly impact: string\n}\n\nexport interface DiscoveryAmbiguity {\n readonly id: string\n readonly question: string\n readonly material: boolean\n readonly options: readonly DiscoveryOption[]\n readonly recommendedOptionId: string\n readonly assumptionId?: string\n}\n\nexport interface ApprovedAssumption {\n readonly id: string\n readonly policyId: string\n readonly resolution: string\n}\n\nexport interface DiscoveryInput {\n readonly issueId: string\n readonly sourceRevision: string\n readonly contractHash: string\n readonly contextHash?: string\n readonly ambiguities: readonly DiscoveryAmbiguity[]\n readonly approvedAssumptions?: readonly ApprovedAssumption[]\n}\n\nexport interface DecisionPacket {\n readonly issueId: string\n readonly contractHash: string\n readonly sourceRevision: string\n readonly contextHash?: string\n readonly decisions: readonly {\n readonly id: string\n readonly question: string\n readonly options: readonly DiscoveryOption[]\n readonly recommendedOptionId: string\n }[]\n}\n\nexport interface DiscoveryDecisionLogEntry {\n readonly ambiguityId: string\n readonly kind: 'human-decision-required' | 'approved-assumption'\n readonly detail: string\n readonly policyId?: string\n}\n\nexport interface DiscoveryResult {\n readonly version: 1\n readonly issueId: string\n readonly sourceRevision: string\n readonly contractHash: string\n readonly contextHash?: string\n readonly status: 'ready' | 'awaiting-decision'\n readonly packet?: DecisionPacket\n readonly decisionLog: readonly DiscoveryDecisionLogEntry[]\n readonly digest: string\n}\n\nexport interface DiscoveryCurrentInput {\n readonly sourceRevision: string\n readonly contractHash: string\n readonly contextHash?: string\n}\n\nexport interface DiscoveryCurrentResult {\n readonly current: boolean\n readonly reasons: readonly ('source' | 'contract' | 'context')[]\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst unique = (values: readonly string[], label: string): void => {\n if (new Set(values).size !== values.length) fail(`${label} must be unique.`, 'INVALID_INPUT')\n}\n\nconst validate = (input: DiscoveryInput): { readonly assumptions: Map<string, ApprovedAssumption> } => {\n required(input.issueId, 'issueId')\n required(input.sourceRevision, 'sourceRevision')\n required(input.contractHash, 'contractHash')\n if (!Array.isArray(input.ambiguities)) fail('ambiguities must be an array.', 'INVALID_INPUT')\n unique(input.ambiguities.map((item) => required(item.id, 'ambiguity.id')), 'ambiguity ids')\n const assumptions = new Map<string, ApprovedAssumption>()\n for (const assumption of input.approvedAssumptions ?? []) {\n const id = required(assumption.id, 'assumption.id')\n if (assumptions.has(id)) fail('assumption ids must be unique.', 'INVALID_INPUT')\n assumptions.set(id, { id, policyId: required(assumption.policyId, 'assumption.policyId'), resolution: required(assumption.resolution, 'assumption.resolution') })\n }\n for (const ambiguity of input.ambiguities) {\n required(ambiguity.question, 'ambiguity.question')\n if (typeof ambiguity.material !== 'boolean') fail('ambiguity.material must be boolean.', 'INVALID_INPUT')\n if (!Array.isArray(ambiguity.options) || ambiguity.options.length < 2 || ambiguity.options.length > 4) fail('ambiguity.options must contain 2 to 4 options.', 'INVALID_INPUT')\n unique(ambiguity.options.map((option) => required(option.id, 'option.id')), 'option ids')\n for (const option of ambiguity.options) {\n required(option.summary, 'option.summary')\n required(option.impact, 'option.impact')\n }\n if (!ambiguity.options.some((option) => option.id === ambiguity.recommendedOptionId)) fail('recommendedOptionId must identify an option.', 'INVALID_INPUT')\n if (!ambiguity.material && (!ambiguity.assumptionId || !assumptions.has(ambiguity.assumptionId))) fail('non-material ambiguity requires an approved assumption.', 'INVALID_INPUT')\n }\n return { assumptions }\n}\n\nconst digest = (result: Omit<DiscoveryResult, 'digest'>): string => hashJson(result)\n\nexport const assessDiscovery = (input: DiscoveryInput): DiscoveryResult => {\n const { assumptions } = validate(input)\n const human = input.ambiguities.filter((ambiguity) => ambiguity.material)\n const decisionLog: DiscoveryDecisionLogEntry[] = input.ambiguities.map((ambiguity) => {\n if (ambiguity.material) return { ambiguityId: ambiguity.id, kind: 'human-decision-required', detail: `Recommendation: ${ambiguity.recommendedOptionId}.` }\n const assumption = assumptions.get(ambiguity.assumptionId as string)!\n return { ambiguityId: ambiguity.id, kind: 'approved-assumption', detail: assumption.resolution, policyId: assumption.policyId }\n })\n const base = {\n version: 1 as const,\n issueId: input.issueId,\n sourceRevision: input.sourceRevision,\n contractHash: input.contractHash,\n ...(input.contextHash ? { contextHash: input.contextHash } : {}),\n status: human.length ? 'awaiting-decision' as const : 'ready' as const,\n ...(human.length ? { packet: {\n issueId: input.issueId,\n contractHash: input.contractHash,\n sourceRevision: input.sourceRevision,\n ...(input.contextHash ? { contextHash: input.contextHash } : {}),\n decisions: human.map((ambiguity) => ({ id: ambiguity.id, question: ambiguity.question, options: ambiguity.options, recommendedOptionId: ambiguity.recommendedOptionId })),\n } } : {}),\n decisionLog,\n }\n return { ...base, digest: digest(base) }\n}\n\nexport const isDiscoveryCurrent = (result: DiscoveryResult, current: DiscoveryCurrentInput): DiscoveryCurrentResult => {\n const reasons: ('source' | 'contract' | 'context')[] = []\n if (result.sourceRevision !== current.sourceRevision) reasons.push('source')\n if (result.contractHash !== current.contractHash) reasons.push('contract')\n if ((result.contextHash ?? '') !== (current.contextHash ?? '')) reasons.push('context')\n return { current: reasons.length === 0, reasons }\n}\n","import { fail } from './errors.js'\n\nexport const WIP_STATES = ['ready', 'implementing', 'blocked', 'awaiting-decision', 'awaiting-acceptance', 'done', 'cancelled'] as const\nexport type WipState = typeof WIP_STATES[number]\n\nexport interface WipEntry {\n readonly issueId: string\n readonly state: WipState\n}\n\nexport interface WipAssessmentInput {\n readonly entries: readonly WipEntry[]\n readonly candidate: { readonly issueId: string; readonly kind: 'new' | 'resume' }\n readonly maxInFlight?: number\n}\n\nexport interface WipAssessment {\n readonly decision: 'admit' | 'hold'\n readonly inFlight: readonly WipEntry[]\n readonly counts: Readonly<Record<WipState, number>>\n readonly reason: string\n}\n\nconst terminal = new Set<WipState>(['done', 'cancelled'])\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nexport const assessWip = ({ entries, candidate, maxInFlight = 3 }: WipAssessmentInput): WipAssessment => {\n if (!Array.isArray(entries)) fail('entries must be an array.', 'INVALID_INPUT')\n if (!Number.isInteger(maxInFlight) || maxInFlight < 1) fail('maxInFlight must be a positive integer.', 'INVALID_INPUT')\n const candidateId = required(candidate.issueId, 'candidate.issueId')\n if (candidate.kind !== 'new' && candidate.kind !== 'resume') fail('candidate.kind must be new or resume.', 'INVALID_INPUT')\n const ids = new Set<string>()\n const counts = Object.fromEntries(WIP_STATES.map((state) => [state, 0])) as Record<WipState, number>\n for (const entry of entries) {\n const id = required(entry.issueId, 'entry.issueId')\n if (ids.has(id)) fail('entry issueIds must be unique.', 'INVALID_INPUT')\n ids.add(id)\n if (!WIP_STATES.includes(entry.state)) fail(`Unknown WIP state: ${entry.state}.`, 'INVALID_INPUT')\n counts[entry.state] += 1\n }\n const inFlight = entries.filter((entry) => !terminal.has(entry.state))\n const existing = entries.find((entry) => entry.issueId === candidateId)\n if (candidate.kind === 'resume') {\n if (!existing || terminal.has(existing.state)) return { decision: 'hold', inFlight, counts, reason: 'A resume requires an existing non-terminal issue.' }\n return { decision: 'admit', inFlight, counts, reason: 'A resume keeps its existing WIP reservation and takes priority over new work.' }\n }\n if (existing) return { decision: 'hold', inFlight, counts, reason: 'A new admission cannot reuse an existing issue id.' }\n if (inFlight.length >= maxInFlight) return { decision: 'hold', inFlight, counts, reason: `WIP limit ${maxInFlight} reached; blocked and awaiting-human work still count.` }\n return { decision: 'admit', inFlight, counts, reason: `WIP slot available (${inFlight.length}/${maxInFlight}).` }\n}\n","import { fail } from './errors.js'\n\nexport interface RuntimeExperimentCandidate {\n readonly runtime: string\n readonly sourceRevision: string\n readonly contractHash: string\n readonly provider: string\n readonly model: string\n readonly configurationHash: string\n readonly hardGatesPassed: boolean\n readonly humanMinutes: number\n readonly durationMs: number\n readonly cost: number\n}\n\nexport interface RuntimeExperimentResult {\n readonly decision: 'selected' | 'blocked'\n readonly selected?: RuntimeExperimentCandidate\n readonly eligible: readonly RuntimeExperimentCandidate[]\n readonly reason: string\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst comparable = (candidate: RuntimeExperimentCandidate, baseline: RuntimeExperimentCandidate): void => {\n for (const key of ['sourceRevision', 'contractHash', 'provider', 'model', 'configurationHash'] as const) {\n if (candidate[key] !== baseline[key]) fail(`Candidates must share ${key}.`, 'INVALID_INPUT')\n }\n}\n\nexport const selectRuntime = (candidates: readonly RuntimeExperimentCandidate[]): RuntimeExperimentResult => {\n if (!Array.isArray(candidates) || candidates.length < 2) fail('At least two runtime candidates are required.', 'INVALID_INPUT')\n const names = new Set<string>()\n for (const candidate of candidates) {\n const runtime = required(candidate.runtime, 'candidate.runtime')\n if (names.has(runtime)) fail('candidate.runtime values must be unique.', 'INVALID_INPUT')\n names.add(runtime)\n for (const key of ['sourceRevision', 'contractHash', 'provider', 'model', 'configurationHash'] as const) required(candidate[key], `candidate.${key}`)\n for (const key of ['humanMinutes', 'durationMs', 'cost'] as const) if (!Number.isFinite(candidate[key]) || candidate[key] < 0) fail(`candidate.${key} must be a non-negative number.`, 'INVALID_INPUT')\n comparable(candidate, candidates[0]!)\n }\n const eligible = candidates.filter((candidate) => candidate.hardGatesPassed)\n if (!eligible.length) return { decision: 'blocked', eligible, reason: 'No runtime passed every hard gate.' }\n const selected = [...eligible].sort((left, right) => left.humanMinutes - right.humanMinutes || left.durationMs - right.durationMs || left.cost - right.cost || (left.runtime === 'orca' ? -1 : right.runtime === 'orca' ? 1 : left.runtime.localeCompare(right.runtime)))[0]\n return { decision: 'selected', selected, eligible, reason: 'Selected by human minutes, duration, cost, then Orca tie-break.' }\n}\n","import { fail } from './errors.js'\n\nexport interface WorkflowNode<T> {\n readonly id: string\n readonly dependsOn?: readonly string[]\n /** Nodes sharing a mutation key are serialized even when otherwise independent. */\n readonly mutationKey?: string\n readonly run: () => Promise<T>\n}\n\nexport interface WorkflowResult<T> {\n readonly results: Readonly<Record<string, T>>\n readonly order: readonly string[]\n readonly peakConcurrency: number\n readonly criticalPathMs: number\n}\n\nconst validId = (id: string): string => {\n if (typeof id !== 'string' || !id.trim()) fail('Workflow node id must be non-empty.', 'INVALID_INPUT')\n return id.trim()\n}\n\nconst levels = <T>(nodes: readonly WorkflowNode<T>[]): readonly WorkflowNode<T>[][] => {\n const byId = new Map(nodes.map((node) => [validId(node.id), node]))\n if (byId.size !== nodes.length) fail('Workflow node ids must be unique.', 'INVALID_INPUT')\n const remaining = new Set(byId.keys())\n const completed = new Set<string>()\n const result: WorkflowNode<T>[][] = []\n while (remaining.size) {\n const ready = [...remaining].sort().map((id) => byId.get(id)!).filter((node) => (node.dependsOn ?? []).every((dependency) => completed.has(dependency)))\n if (!ready.length) fail('Workflow contains an unknown dependency or cycle.', 'INVALID_INPUT')\n result.push(ready)\n for (const node of ready) { remaining.delete(node.id); completed.add(node.id) }\n }\n return result\n}\n\nexport const runWorkflow = async <T>(nodes: readonly WorkflowNode<T>[], options: { readonly maxConcurrency: number; readonly currentConcurrency?: () => number }): Promise<WorkflowResult<T>> => {\n if (!Number.isInteger(options.maxConcurrency) || options.maxConcurrency < 1) fail('maxConcurrency must be a positive integer.', 'INVALID_INPUT')\n const started = Date.now()\n const results: Record<string, T> = {}\n const order: string[] = []\n let peakConcurrency = 0\n for (const level of levels(nodes)) {\n const remaining = [...level]\n while (remaining.length) {\n const batch: WorkflowNode<T>[] = []\n const keys = new Set<string>()\n const limit = options.currentConcurrency ? options.currentConcurrency() : options.maxConcurrency\n if (!Number.isInteger(limit) || limit < 1) fail('currentConcurrency must return a positive integer.', 'INVALID_INPUT')\n for (const node of remaining) {\n const key = node.mutationKey?.trim()\n if (batch.length >= limit || (key && keys.has(key))) continue\n batch.push(node)\n if (key) keys.add(key)\n }\n if (!batch.length) fail('Workflow could not schedule a mutation batch.', 'INVALID_INPUT')\n peakConcurrency = Math.max(peakConcurrency, batch.length)\n const values = await Promise.all(batch.map((node) => node.run()))\n batch.forEach((node, index) => { results[node.id] = values[index]!; order.push(node.id) })\n for (const node of batch) remaining.splice(remaining.indexOf(node), 1)\n }\n }\n return { results, order, peakConcurrency, criticalPathMs: Date.now() - started }\n}\n","import { hashJson } from '../kernel/hash.js'\nimport { fail } from '../kernel/errors.js'\nimport { runWorkflow } from '../kernel/workflow.js'\nimport type { GateBinding } from './index.js'\n\nexport interface ReviewLens {\n readonly id: string\n readonly maxAttempts?: number\n}\n\nexport interface ReviewVerdict {\n readonly status: 'pass' | 'finding' | 'unverified'\n readonly reason?: string\n readonly evidence?: string\n readonly reproduction?: string\n readonly retryable?: boolean\n}\n\nexport interface AdversarialReviewResult {\n readonly decision: 'approved' | 'blocked'\n readonly verdicts: Readonly<Record<string, ReviewVerdict>>\n readonly reasons: readonly string[]\n readonly binding: GateBinding\n readonly digest: string\n readonly peakConcurrency: number\n}\n\nexport const runAdversarialReview = async ({ lenses, reviewer, binding, maxConcurrency = 3 }: { readonly lenses: readonly ReviewLens[]; readonly reviewer: (lens: ReviewLens, attempt: number) => Promise<ReviewVerdict> | ReviewVerdict; readonly binding: GateBinding; readonly maxConcurrency?: number }): Promise<AdversarialReviewResult> => {\n if (!Array.isArray(lenses) || lenses.length === 0) fail('At least one review lens is required.', 'INVALID_INPUT')\n if (!Number.isInteger(maxConcurrency) || maxConcurrency < 1) fail('maxConcurrency must be a positive integer.', 'INVALID_INPUT')\n const normalized = lenses.map((lens) => {\n if (typeof lens !== 'object' || lens === null || Array.isArray(lens) || typeof lens.id !== 'string' || !lens.id.trim()) fail('Review lens id is required.', 'INVALID_INPUT')\n const maxAttempts = lens.maxAttempts ?? 1\n if (!Number.isInteger(maxAttempts) || maxAttempts < 1 || maxAttempts > 3) fail('Review lens maxAttempts must be between 1 and 3.', 'INVALID_INPUT')\n return { id: lens.id.trim(), maxAttempts }\n })\n if (new Set(normalized.map((lens) => lens.id)).size !== normalized.length) fail('Review lens ids must be unique.', 'INVALID_INPUT')\n const workflow = await runWorkflow(normalized.map((lens) => ({ id: lens.id, run: async (): Promise<ReviewVerdict> => {\n let last: ReviewVerdict = { status: 'unverified', reason: 'Reviewer returned no verdict.' }\n for (let attempt = 1; attempt <= lens.maxAttempts; attempt += 1) {\n try {\n const verdict = await reviewer(lens, attempt)\n if (!verdict || !['pass', 'finding', 'unverified'].includes(verdict.status)) return { status: 'unverified', reason: 'Reviewer returned an invalid verdict.' }\n last = verdict\n if (verdict.status !== 'unverified' || verdict.retryable !== true) return verdict\n } catch (error) { last = { status: 'unverified', reason: error instanceof Error ? error.message : String(error) } }\n }\n return last\n } })), { maxConcurrency })\n const verdicts = Object.fromEntries(Object.entries(workflow.results).sort(([left], [right]) => left.localeCompare(right)))\n const reasons = Object.entries(verdicts).flatMap(([id, verdict]) => verdict.status === 'pass' ? [] : verdict.status === 'finding' && (verdict.evidence?.trim() || verdict.reproduction?.trim()) ? [`${id} found an issue: ${verdict.reason ?? 'evidence recorded'}.`] : [`${id} is unverified or lacks reproducible evidence.`])\n const base = { verdicts, reasons, binding, peakConcurrency: workflow.peakConcurrency }\n return { decision: reasons.length ? 'blocked' : 'approved', ...base, digest: hashJson(base) }\n}\n","import { fail } from '../kernel/errors.js'\nimport { hashJson } from '../kernel/hash.js'\n\nexport type CriterionStatus = 'passed' | 'failed' | 'pending' | 'not-applicable'\nexport interface GateCriterion { readonly id: string; readonly gate: 'G2' | 'G3' | 'G4' | 'G5'; readonly status: CriterionStatus; readonly reason?: string }\nexport interface GateBinding { readonly candidateRevision: string; readonly contractHash: string; readonly configHash: string }\nexport interface GateAssessment { readonly gate: 'G2' | 'G3' | 'G4' | 'G5'; readonly decision: 'approved' | 'blocked' | 'awaiting-acceptance'; readonly reasons: readonly string[]; readonly binding: GateBinding; readonly digest: string }\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst criteriaFor = (criteria: readonly GateCriterion[], gate: GateCriterion['gate']): readonly GateCriterion[] => {\n if (!Array.isArray(criteria)) fail('criteria must be an array.', 'INVALID_INPUT')\n const ids = new Set<string>()\n for (const criterion of criteria) {\n const id = required(criterion.id, 'criterion.id')\n if (ids.has(id)) fail('criterion ids must be unique.', 'INVALID_INPUT')\n ids.add(id)\n if (!['G2', 'G3', 'G4', 'G5'].includes(criterion.gate)) fail('criterion.gate is invalid.', 'INVALID_INPUT')\n if (!['passed', 'failed', 'pending', 'not-applicable'].includes(criterion.status)) fail('criterion.status is invalid.', 'INVALID_INPUT')\n if (criterion.status === 'not-applicable' && !criterion.reason?.trim()) fail('not-applicable criteria require a reason.', 'INVALID_INPUT')\n }\n return criteria.filter((criterion) => criterion.gate === gate)\n}\n\nconst binding = (value: GateBinding): GateBinding => ({ candidateRevision: required(value.candidateRevision, 'binding.candidateRevision'), contractHash: required(value.contractHash, 'binding.contractHash'), configHash: required(value.configHash, 'binding.configHash') })\nconst assessed = (gate: GateAssessment['gate'], decision: GateAssessment['decision'], reasons: readonly string[], current: GateBinding): GateAssessment => {\n const base = { gate, decision, reasons, binding: binding(current) }\n return { ...base, digest: hashJson(base) }\n}\n\nexport const assessPreflight = ({ criteria, repairAttempts = 0, implementerId, reviewerId, reviewKind, reviewApproved, binding: current }: { readonly criteria: readonly GateCriterion[]; readonly repairAttempts?: number; readonly implementerId: string; readonly reviewerId?: string; readonly reviewKind?: 'adversarial'; readonly reviewApproved: boolean; readonly binding: GateBinding }): GateAssessment => {\n required(implementerId, 'implementerId')\n if (!Number.isInteger(repairAttempts) || repairAttempts < 0) fail('repairAttempts must be a non-negative integer.', 'INVALID_INPUT')\n const g2 = criteriaFor(criteria, 'G2')\n const reasons = [\n ...(g2.length ? [] : ['No G2 criteria are defined.']),\n ...g2.filter((criterion) => criterion.status === 'failed' || criterion.status === 'pending').map((criterion) => `${criterion.id} is ${criterion.status}.`),\n ...(reviewApproved && reviewerId && reviewerId !== implementerId && reviewKind === 'adversarial' ? [] : ['An approved adversarial review by a reviewer different from the implementer is required.']),\n ...(repairAttempts <= 2 ? [] : ['The two-repair limit was exceeded; preserve diagnostics and return blocked.']),\n ]\n return assessed('G2', reasons.length ? 'blocked' : 'approved', reasons, current)\n}\n\nexport interface PullRequestDraft {\n readonly issueId: string\n readonly candidateRevision: string\n readonly contractHash: string\n readonly configHash: string\n readonly g2Digest: string\n readonly evidence: readonly string[]\n readonly documentation: readonly string[]\n readonly risk: string\n readonly rollback: string\n readonly pendingCriteria: readonly string[]\n}\n\nexport const composePullRequest = ({ draft, g2, remote }: { readonly draft: PullRequestDraft; readonly g2: GateAssessment; readonly remote?: { readonly state: 'missing' | 'confirmed' | 'uncertain'; readonly url?: string; readonly candidateRevision?: string } }): { readonly decision: 'create' | 'reuse' | 'blocked'; readonly body?: string; readonly reason: string; readonly idempotencyKey: string } => {\n for (const [label, value] of Object.entries({ issueId: draft.issueId, candidateRevision: draft.candidateRevision, contractHash: draft.contractHash, configHash: draft.configHash, g2Digest: draft.g2Digest, risk: draft.risk, rollback: draft.rollback })) required(value, `draft.${label}`)\n if (g2.gate !== 'G2' || g2.decision !== 'approved' || g2.digest !== draft.g2Digest || g2.binding.candidateRevision !== draft.candidateRevision || g2.binding.contractHash !== draft.contractHash || g2.binding.configHash !== draft.configHash) return { decision: 'blocked', reason: 'A current approved G2 assessment is required before a PR can be created.', idempotencyKey: hashJson(draft) }\n const idempotencyKey = hashJson({ issueId: draft.issueId, contractHash: draft.contractHash, action: 'pull-request', revision: draft.candidateRevision })\n if (remote?.state === 'uncertain') return { decision: 'blocked', reason: 'Remote PR state is uncertain; reconcile before retrying.', idempotencyKey }\n if (remote?.state === 'confirmed') {\n if (remote.candidateRevision !== draft.candidateRevision || !remote.url) return { decision: 'blocked', reason: 'Confirmed remote PR does not match the candidate revision.', idempotencyKey }\n return { decision: 'reuse', reason: 'The idempotent remote PR already exists for this candidate revision.', idempotencyKey }\n }\n const body = [`## Contract`, `- Issue: ${draft.issueId}`, `- Candidate: ${draft.candidateRevision}`, `- Contract: ${draft.contractHash}`, `- Configuration: ${draft.configHash}`, '', '## G2 evidence', ...draft.evidence.map((item) => `- ${item}`), '', '## Documentation', ...draft.documentation.map((item) => `- ${item}`), '', '## Risk and rollback', `- Risk: ${draft.risk}`, `- Rollback: ${draft.rollback}`, '', '## Later gates', ...(draft.pendingCriteria.length ? draft.pendingCriteria.map((item) => `- Pending: ${item}`) : ['- None.'])].join('\\n')\n return { decision: 'create', body, reason: 'G2 is current and the remote PR is absent.', idempotencyKey }\n}\n\nexport interface PullRequestApproval {\n readonly approvedBy: 'human'\n readonly candidateRevision: string\n readonly contractHash: string\n readonly configHash: string\n readonly bodyHash: string\n readonly metadataHash: string\n readonly digest: string\n}\n\nexport const createPullRequestApproval = ({ body, metadata, approvedBy, candidateRevision, contractHash, configHash }: { readonly body: string; readonly metadata: Readonly<Record<string, unknown>>; readonly approvedBy: 'human'; readonly candidateRevision: string; readonly contractHash: string; readonly configHash: string }): PullRequestApproval => {\n if (approvedBy !== 'human') fail('Pull request approval requires a human actor.', 'HUMAN_APPROVAL_REQUIRED')\n const normalizedBody = required(body, 'PR body')\n const binding = { approvedBy, candidateRevision: required(candidateRevision, 'candidateRevision'), contractHash: required(contractHash, 'contractHash'), configHash: required(configHash, 'configHash'), bodyHash: hashJson(normalizedBody), metadataHash: hashJson(metadata) }\n return { ...binding, digest: hashJson(binding) }\n}\n\nexport const verifyPullRequestApproval = ({ approval, body, metadata, candidateRevision, contractHash, configHash }: { readonly approval: PullRequestApproval; readonly body: string; readonly metadata: Readonly<Record<string, unknown>>; readonly candidateRevision: string; readonly contractHash: string; readonly configHash: string }): PullRequestApproval => {\n const expected = createPullRequestApproval({ body, metadata, approvedBy: 'human', candidateRevision, contractHash, configHash })\n if (approval.digest !== expected.digest || approval.bodyHash !== expected.bodyHash || approval.metadataHash !== expected.metadataHash) fail('Approved pull request content or metadata changed.', 'STALE')\n return approval\n}\n\nexport interface QaTransitionAssessment {\n readonly decision: 'move-to-qa' | 'return-to-verification' | 'blocked'\n readonly target: 'qa' | 'verification'\n readonly invalidatesDownstream: boolean\n readonly reason: string\n readonly idempotencyKey: string\n}\n\nexport const assessQaTransition = ({ featureValidated, g5, qaPassed, issue }: { readonly featureValidated: boolean; readonly g5: GateAssessment; readonly qaPassed: boolean; readonly issue: string }): QaTransitionAssessment => {\n required(issue, 'issue')\n const base = { issue, featureValidated, g5: g5.digest, qaPassed }\n if (!featureValidated || g5.gate !== 'G5' || g5.decision !== 'approved') return { decision: 'blocked', target: 'verification', invalidatesDownstream: false, reason: 'Feature validation and approved G5 acceptance are required before moving the issue to QA.', idempotencyKey: hashJson(base) }\n if (!qaPassed) return { decision: 'return-to-verification', target: 'verification', invalidatesDownstream: true, reason: 'QA failed; downstream evidence is invalidated and verification must be repeated.', idempotencyKey: hashJson(base) }\n return { decision: 'move-to-qa', target: 'qa', invalidatesDownstream: false, reason: 'Feature validation and G5 acceptance are current.', idempotencyKey: hashJson(base) }\n}\n\nexport const assessIntegration = ({ g2, candidateRevision, evidenceRevision, contractHash, configHash, ci }: { readonly g2: GateAssessment; readonly candidateRevision: string; readonly evidenceRevision: string; readonly contractHash: string; readonly configHash: string; readonly ci: CriterionStatus }): GateAssessment => {\n required(candidateRevision, 'candidateRevision'); required(evidenceRevision, 'evidenceRevision')\n if (!['passed', 'failed', 'pending', 'not-applicable'].includes(ci)) fail('ci is invalid.', 'INVALID_INPUT')\n const reasons = [\n ...(g2.gate === 'G2' && g2.decision === 'approved' ? [] : ['G2 is not approved.']),\n ...(g2.binding.candidateRevision === candidateRevision && g2.binding.contractHash === contractHash && g2.binding.configHash === configHash ? [] : ['G2 is not bound to the current candidate, contract, and configuration.']),\n ...(candidateRevision === evidenceRevision ? [] : ['Candidate revision changed; G3 evidence must be revalidated.']),\n ...(ci === 'passed' ? [] : [`Integration CI is ${ci}.`]),\n ]\n return assessed('G3', reasons.length ? 'blocked' : 'approved', reasons, { candidateRevision, contractHash, configHash })\n}\n\nexport const assessWorktreeCleanup = ({ branch, candidateRevision, contractHash, configHash, remoteBranchRevision, remotePr, integration }: { readonly branch: string; readonly candidateRevision: string; readonly contractHash: string; readonly configHash: string; readonly remoteBranchRevision?: string; readonly remotePr: 'confirmed' | 'missing' | 'uncertain'; readonly integration: GateAssessment }): { readonly decision: 'clean' | 'preserve'; readonly reason: string } => {\n required(branch, 'branch'); required(candidateRevision, 'candidateRevision')\n if (remotePr === 'uncertain') return { decision: 'preserve', reason: 'Remote PR state is uncertain; preserve the worktree for reconciliation.' }\n if (remotePr !== 'confirmed') return { decision: 'preserve', reason: 'No confirmed remote PR exists; preserve the worktree.' }\n if (remoteBranchRevision !== candidateRevision) return { decision: 'preserve', reason: 'Remote branch SHA does not match the candidate revision.' }\n if (integration.gate !== 'G3' || integration.decision !== 'approved') return { decision: 'preserve', reason: 'G3 is not approved.' }\n if (integration.binding.candidateRevision !== candidateRevision || integration.binding.contractHash !== contractHash || integration.binding.configHash !== configHash) return { decision: 'preserve', reason: 'G3 is not bound to the current candidate, contract, and configuration.' }\n return { decision: 'clean', reason: 'Remote branch, PR, and G3 evidence are confirmed for the candidate revision.' }\n}\n\nexport interface RepositoryProfile { readonly deploy: string; readonly rollback: string; readonly urls: readonly string[]; readonly featureFlag: string; readonly syntheticTenant: string; readonly observability: readonly string[]; readonly sensitivePaths: readonly string[]; readonly owners: readonly string[]; readonly approvedBy: string }\n\nconst profileReasons = (profile: RepositoryProfile): readonly string[] => Object.entries(profile).flatMap(([key, value]) => Array.isArray(value) ? value.length ? [] : [`RepositoryProfile.${key} is required.`] : typeof value === 'string' && value.trim() ? [] : [`RepositoryProfile.${key} is required.`])\n\nexport interface ProductionEvidence { readonly tenant: string; readonly realFlow: string; readonly logs: readonly string[]; readonly metrics: readonly string[] }\n\nexport const assessProduction = ({ profile, integration, artifact, isolated, acceptanceArtifact, lowRisk = true, observationMinutes, technicalPassed, evidence, containmentPreauthorized, containmentAction, linkedDefect }: { readonly profile: RepositoryProfile; readonly integration: GateAssessment; readonly artifact: string; readonly isolated: boolean; readonly acceptanceArtifact?: string; readonly lowRisk?: boolean; readonly observationMinutes: number; readonly technicalPassed: boolean; readonly evidence: ProductionEvidence; readonly containmentPreauthorized: boolean; readonly containmentAction?: string; readonly linkedDefect?: string }): GateAssessment => {\n required(artifact, 'artifact')\n if (!Number.isFinite(observationMinutes) || observationMinutes < 0) fail('observationMinutes must be non-negative.', 'INVALID_INPUT')\n const evidenceReasons = [required(evidence.tenant, 'evidence.tenant'), required(evidence.realFlow, 'evidence.realFlow'), ...(Array.isArray(evidence.logs) && evidence.logs.length ? [] : ['Production evidence requires logs.']), ...(Array.isArray(evidence.metrics) && evidence.metrics.length ? [] : ['Production evidence requires metrics.'])].filter((item) => item.startsWith('Production evidence'))\n const reasons = [\n ...profileReasons(profile),\n ...(integration.gate === 'G3' && integration.decision === 'approved' ? [] : ['G3 is not approved.']),\n ...evidenceReasons,\n ...(isolated || acceptanceArtifact === artifact ? [] : ['Exposure requires isolation or acceptance linked to this artifact version.']),\n ...(technicalPassed ? [] : [containmentPreauthorized && containmentAction?.trim() && linkedDefect?.trim() ? 'Technical validation failed; pre-authorized containment and linked defect are recorded.' : containmentPreauthorized ? 'Technical validation failed; containment action and linked defect are required.' : 'Technical validation failed.']),\n ...(lowRisk && observationMinutes < 15 ? ['Low-risk production validation requires a 15-minute observation window.'] : []),\n ]\n return assessed('G4', reasons.length ? 'blocked' : 'approved', reasons, integration.binding)\n}\n\nexport const assessAcceptance = ({ production, acceptanceRequired, accepted, notApplicableReason, materialChange }: { readonly production: GateAssessment; readonly acceptanceRequired: boolean; readonly accepted: boolean; readonly notApplicableReason?: string; readonly materialChange: boolean }): GateAssessment => {\n const reasons = [\n ...(production.gate === 'G4' && production.decision === 'approved' ? [] : ['G4 is not approved.']),\n ...(materialChange ? ['A material change invalidated acceptance; return to the affected gate.'] : []),\n ]\n if (reasons.length) return assessed('G5', 'blocked', reasons, production.binding)\n if (acceptanceRequired && !accepted) return assessed('G5', 'awaiting-acceptance', ['Business or UX acceptance is still required.'], production.binding)\n if (!acceptanceRequired && !notApplicableReason?.trim()) return assessed('G5', 'blocked', ['Acceptance marked not applicable requires a contractual reason.'], production.binding)\n return assessed('G5', 'approved', acceptanceRequired ? [] : [`Acceptance is not applicable: ${notApplicableReason}.`], production.binding)\n}\n\nexport { runAdversarialReview } from './review.js'\nexport type { AdversarialReviewResult, ReviewLens, ReviewVerdict } from './review.js'\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\n\nexport interface PilotEntry {\n readonly issueId: string\n readonly classification: 'normal' | 'incident' | 'sensitive'\n readonly status: 'included' | 'excluded' | 'aborted'\n readonly reason?: string\n}\n\nexport interface PilotManifest {\n readonly policyHash: string\n readonly baselineReference: string\n readonly entries: readonly PilotEntry[]\n}\n\nexport interface PilotAssessment {\n readonly decision: 'ready' | 'blocked'\n readonly included: readonly string[]\n readonly reasons: readonly string[]\n readonly digest: string\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nexport const assessPilot = (manifest: PilotManifest): PilotAssessment => {\n required(manifest.policyHash, 'policyHash'); required(manifest.baselineReference, 'baselineReference')\n if (!Array.isArray(manifest.entries)) fail('entries must be an array.', 'INVALID_INPUT')\n const ids = new Set<string>()\n const reasons: string[] = []\n const included: string[] = []\n for (const entry of manifest.entries) {\n const issueId = required(entry.issueId, 'entry.issueId')\n if (ids.has(issueId)) fail('entry issueIds must be unique; an issue cannot be substituted in the same pilot.', 'INVALID_INPUT')\n ids.add(issueId)\n if (!['normal', 'incident', 'sensitive'].includes(entry.classification)) fail('entry.classification is invalid.', 'INVALID_INPUT')\n if (!['included', 'excluded', 'aborted'].includes(entry.status)) fail('entry.status is invalid.', 'INVALID_INPUT')\n if (entry.status !== 'included' && !entry.reason?.trim()) reasons.push(`${issueId} is ${entry.status} without an auditable reason.`)\n if (entry.status === 'included') {\n included.push(issueId)\n if (entry.classification !== 'normal') reasons.push(`${issueId} is ${entry.classification}; only normal issues can enter the pilot.`)\n }\n }\n if (included.length !== 10) reasons.push(`Pilot requires exactly 10 included issues; found ${included.length}.`)\n const base = { decision: reasons.length ? 'blocked' as const : 'ready' as const, included, reasons }\n return { ...base, digest: hashJson({ ...manifest, ...base }) }\n}\n","import { createHash } from 'node:crypto'\nimport { fail } from './errors.js'\n\nexport const IMPROVEMENT_CYCLE_STEPS = ['adversarial-review', 'g2-preflight', 'baseline-record', 'pilot-execution', 'comparison'] as const\nexport type ImprovementCycleStep = typeof IMPROVEMENT_CYCLE_STEPS[number]\nexport type CycleStepStatus = 'passed' | 'failed' | 'blocked' | 'pending'\n\nexport interface CycleStepResult {\n readonly step: ImprovementCycleStep\n readonly status: CycleStepStatus\n readonly reason?: string\n}\n\nexport interface CycleIterationMetrics {\n readonly durationMs?: number\n readonly humanMinutes?: number\n readonly attempts?: number\n readonly escapedIncomplete?: number\n}\n\nexport interface ImprovementCycleIteration {\n readonly iteration: number\n readonly steps: readonly CycleStepResult[]\n readonly adjustment?: string\n readonly metrics?: CycleIterationMetrics\n}\n\nexport interface ImprovementCycleInput {\n readonly cycleId: string\n readonly maxIterations: number\n readonly iterations: readonly ImprovementCycleIteration[]\n}\n\nexport interface CycleMatrixRow {\n readonly iteration: number\n readonly passedSteps: number\n readonly totalSteps: number\n readonly passRate: number\n readonly statuses: Readonly<Record<ImprovementCycleStep, CycleStepStatus>>\n readonly adjustment?: string\n readonly metrics?: CycleIterationMetrics\n}\n\nexport interface ImprovementCycleAssessment {\n readonly type: 'agentskit-harness-improvement-cycle'\n readonly cycleId: string\n readonly decision: 'complete' | 'repeat' | 'blocked'\n readonly nextIteration?: number\n readonly reasons: readonly string[]\n readonly matrix: readonly CycleMatrixRow[]\n readonly digest: string\n}\n\nconst nonEmpty = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) return fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst validateMetrics = (metrics: CycleIterationMetrics | undefined, index: number): CycleIterationMetrics | undefined => {\n if (metrics === undefined) return undefined\n for (const [key, value] of Object.entries(metrics)) {\n if (value !== undefined && (typeof value !== 'number' || !Number.isFinite(value) || value < 0)) return fail(`iterations[${index}].metrics.${key} must be a non-negative number.`, 'INVALID_INPUT')\n }\n return metrics\n}\n\nconst validateIteration = (iteration: ImprovementCycleIteration, index: number): ImprovementCycleIteration => {\n if (typeof iteration !== 'object' || iteration === null || Array.isArray(iteration)) return fail(`iterations[${index}] must be an object.`, 'INVALID_INPUT')\n if (!Number.isInteger(iteration.iteration) || iteration.iteration < 1) return fail(`iterations[${index}].iteration must be a positive integer.`, 'INVALID_INPUT')\n if (!Array.isArray(iteration.steps) || iteration.steps.length !== IMPROVEMENT_CYCLE_STEPS.length) return fail(`iterations[${index}].steps must contain the five cycle steps exactly once, in order.`, 'INVALID_INPUT')\n iteration.steps.forEach((result, stepIndex) => {\n if (typeof result !== 'object' || result === null || Array.isArray(result)) return fail(`iterations[${index}].steps[${stepIndex}] must be an object.`, 'INVALID_INPUT')\n if (result.step !== IMPROVEMENT_CYCLE_STEPS[stepIndex]) return fail(`iterations[${index}].steps[${stepIndex}] must be ${IMPROVEMENT_CYCLE_STEPS[stepIndex]}.`, 'INVALID_INPUT')\n if (!['passed', 'failed', 'blocked', 'pending'].includes(result.status)) return fail(`iterations[${index}].steps[${stepIndex}].status is invalid.`, 'INVALID_INPUT')\n if (result.status !== 'passed' && !nonEmpty(result.reason, `iterations[${index}].steps[${stepIndex}].reason`)) return fail(`iterations[${index}].steps[${stepIndex}].reason is required when the step does not pass.`, 'INVALID_INPUT')\n })\n if (iteration.adjustment !== undefined) nonEmpty(iteration.adjustment, `iterations[${index}].adjustment`)\n return { ...iteration, metrics: validateMetrics(iteration.metrics, index) }\n}\n\nexport const assessImprovementCycle = (input: ImprovementCycleInput): ImprovementCycleAssessment => {\n if (typeof input !== 'object' || input === null || Array.isArray(input)) return fail('cycle input must be an object.', 'INVALID_INPUT')\n const cycleId = nonEmpty(input.cycleId, 'cycleId')\n if (!Number.isInteger(input.maxIterations) || input.maxIterations < 1) return fail('maxIterations must be a positive integer.', 'INVALID_INPUT')\n if (!Array.isArray(input.iterations) || input.iterations.length < 1) return fail('iterations must be non-empty.', 'INVALID_INPUT')\n if (input.iterations.length > input.maxIterations) return fail('iterations cannot exceed maxIterations.', 'INVALID_INPUT')\n const iterations = input.iterations.map(validateIteration)\n iterations.forEach((iteration, index) => {\n if (iteration.iteration !== index + 1) return fail('iterations must be sequential and start at 1.', 'INVALID_INPUT')\n if (index > 0 && iterations[index - 1]?.steps.every((step) => step.status === 'passed')) return fail('a completed cycle cannot have later iterations.', 'INVALID_INPUT')\n if (index < iterations.length - 1 && !iteration.adjustment) return fail(`iterations[${index}].adjustment is required before repeating.`, 'INVALID_INPUT')\n })\n const matrix = iterations.map((iteration): CycleMatrixRow => {\n const statuses = Object.fromEntries(iteration.steps.map((step) => [step.step, step.status])) as Record<ImprovementCycleStep, CycleStepStatus>\n const passedSteps = iteration.steps.filter((step) => step.status === 'passed').length\n return { iteration: iteration.iteration, passedSteps, totalSteps: IMPROVEMENT_CYCLE_STEPS.length, passRate: Number((passedSteps / IMPROVEMENT_CYCLE_STEPS.length).toFixed(4)), statuses, ...(iteration.adjustment ? { adjustment: iteration.adjustment } : {}), ...(iteration.metrics ? { metrics: iteration.metrics } : {}) }\n })\n const latest = iterations[iterations.length - 1]!\n const complete = latest.steps.every((step) => step.status === 'passed')\n const reasons = complete ? ['All five cycle steps passed.'] : iterations.length >= input.maxIterations ? ['Maximum cycle iterations reached; human adjustment is required.'] : latest.adjustment ? ['A failed or blocked step remains; repeat with the recorded adjustment.'] : ['A failed or blocked step remains; an explicit adjustment is required before repeating.']\n const decision: ImprovementCycleAssessment['decision'] = complete ? 'complete' : iterations.length >= input.maxIterations || !latest.adjustment ? 'blocked' : 'repeat'\n const result = { type: 'agentskit-harness-improvement-cycle' as const, cycleId, decision, ...(decision === 'repeat' ? { nextIteration: latest.iteration + 1 } : {}), reasons, matrix }\n const digest = createHash('sha256').update(JSON.stringify(result)).digest('hex')\n return { ...result, digest }\n}\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\n\nexport type EvalExpectation = string | ((output: string) => boolean)\n\nexport interface AgentEvalCase {\n readonly id: string\n readonly input: string\n readonly expected: EvalExpectation\n}\n\nexport interface AgentEvalSuite {\n readonly name: string\n readonly cases: readonly AgentEvalCase[]\n}\n\nexport interface AgentEvalReport {\n readonly suite: string\n readonly total: number\n readonly passed: number\n readonly failed: number\n readonly accuracy: number\n readonly failures: readonly string[]\n}\n\nexport const EVAL_MANIFEST_SCHEMA_VERSION = 1 as const\nexport const EVAL_LAYERS = ['contract', 'deterministic', 'integration', 'quality', 'regression', 'resource'] as const\nexport const EVAL_COMPONENTS = ['core', 'workflow', 'memory', 'cache', 'doc-bridge', 'agent-model', 'orca-worktree', 'runtime', 'code-review', 'github-linear', 'eval-metrics'] as const\nexport type EvalLayer = typeof EVAL_LAYERS[number]\nexport type EvalComponent = typeof EVAL_COMPONENTS[number]\nexport type EvalObservationStatus = 'passed' | 'failed' | 'unknown' | 'stale' | 'unverified'\n\nexport interface EvalCaseDefinition {\n readonly id: string\n readonly layer: EvalLayer\n readonly components: readonly EvalComponent[]\n readonly grader: string\n readonly input: string\n readonly critical?: boolean\n readonly subjective?: boolean\n readonly baselineScore?: number\n}\n\nexport interface EvalManifest {\n readonly type: 'agentskit-harness-eval-manifest'\n readonly schemaVersion: typeof EVAL_MANIFEST_SCHEMA_VERSION\n readonly suiteId: string\n readonly name: string\n readonly cases: readonly EvalCaseDefinition[]\n readonly graders: readonly string[]\n readonly thresholds: { readonly subjectiveQuality: number; readonly maxRegression: number }\n readonly repetitions: number\n readonly provider: string\n readonly model: string\n readonly promptHash: string\n readonly toolHash: string\n readonly evidenceOutputs: readonly string[]\n readonly digest: string\n}\n\nexport interface EvalObservation {\n readonly status: EvalObservationStatus\n readonly score?: number\n readonly evidence?: string\n readonly decision?: string\n}\n\nexport interface EvalCaseReport {\n readonly id: string\n readonly repetitions: number\n readonly min: number | null\n readonly median: number | null\n readonly max: number | null\n readonly statuses: readonly EvalObservationStatus[]\n readonly blockers: readonly string[]\n}\n\nexport interface EvalBatteryReport {\n readonly suiteId: string\n readonly repetitions: number\n readonly cases: readonly EvalCaseReport[]\n readonly status: 'passed' | 'blocked'\n readonly blockers: readonly string[]\n}\n\nconst nonEmpty = (value: unknown, label: string): string => {\n const text = typeof value === 'string' ? value.trim() : ''\n if (!text) fail(`${label} is required.`, 'INVALID_INPUT')\n return text\n}\n\nconst digest = (value: unknown, label: string): string => {\n const result = nonEmpty(value, label)\n if (!/^[a-f0-9]{64}$/.test(result)) fail(`${label} must be a lowercase SHA-256 digest.`, 'INVALID_INPUT')\n return result\n}\n\nconst score = (value: unknown, label: string): number => {\n const numeric = typeof value === 'number' ? value : Number.NaN\n if (!Number.isFinite(numeric) || numeric < 0 || numeric > 100) fail(`${label} must be a number between 0 and 100.`, 'INVALID_INPUT')\n return numeric\n}\n\nconst validateCase = (value: unknown, index: number): EvalCaseDefinition => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail(`cases[${index}] must be an object.`, 'INVALID_INPUT')\n const candidate = value as Record<string, unknown>\n const layer = nonEmpty(candidate['layer'], `cases[${index}].layer`)\n if (!(EVAL_LAYERS as readonly string[]).includes(layer)) fail(`cases[${index}].layer is invalid.`, 'INVALID_INPUT')\n const components = candidate['components']\n if (!Array.isArray(components) || !components.length) fail(`cases[${index}].components must be a non-empty array.`, 'INVALID_INPUT')\n const normalizedComponents = (components as readonly unknown[]).map((item, componentIndex) => {\n const component = nonEmpty(item, `cases[${index}].components[${componentIndex}]`)\n if (!(EVAL_COMPONENTS as readonly string[]).includes(component)) fail(`cases[${index}].components[${componentIndex}] is invalid.`, 'INVALID_INPUT')\n return component as EvalComponent\n })\n if (new Set(normalizedComponents).size !== normalizedComponents.length) fail(`cases[${index}].components must not contain duplicates.`, 'INVALID_INPUT')\n const baselineScore = candidate['baselineScore'] === undefined ? undefined : score(candidate['baselineScore'], `cases[${index}].baselineScore`)\n return {\n id: nonEmpty(candidate['id'], `cases[${index}].id`),\n layer: layer as EvalLayer,\n components: normalizedComponents,\n grader: nonEmpty(candidate['grader'], `cases[${index}].grader`),\n input: nonEmpty(candidate['input'], `cases[${index}].input`),\n ...(candidate['critical'] === undefined ? {} : { critical: candidate['critical'] === true }),\n ...(candidate['subjective'] === undefined ? {} : { subjective: candidate['subjective'] === true }),\n ...(baselineScore === undefined ? {} : { baselineScore }),\n }\n}\n\nconst manifestBody = (value: Record<string, unknown>): Omit<EvalManifest, 'digest'> => {\n const casesValue = value['cases']\n if (!Array.isArray(casesValue) || !casesValue.length) fail('cases must be a non-empty array.', 'INVALID_INPUT')\n const cases = (casesValue as readonly unknown[]).map(validateCase)\n if (new Set(cases.map((item) => item.id)).size !== cases.length) fail('case ids must be unique.', 'INVALID_INPUT')\n const layers = new Set(cases.map((item) => item.layer))\n const missingLayers = EVAL_LAYERS.filter((layer) => !layers.has(layer))\n if (missingLayers.length) fail(`cases must cover layers: ${missingLayers.join(', ')}.`, 'INVALID_INPUT')\n const coveredComponents = new Set(cases.flatMap((item) => item.components))\n const missingComponents = EVAL_COMPONENTS.filter((component) => !coveredComponents.has(component))\n if (missingComponents.length) fail(`cases must cover components: ${missingComponents.join(', ')}.`, 'INVALID_INPUT')\n const gradersValue = value['graders']\n if (!Array.isArray(gradersValue) || !gradersValue.length) fail('graders must be a non-empty array.', 'INVALID_INPUT')\n const graders = (gradersValue as readonly unknown[]).map((item, index) => nonEmpty(item, `graders[${index}]`))\n const thresholdsValue = value['thresholds']\n if (typeof thresholdsValue !== 'object' || thresholdsValue === null || Array.isArray(thresholdsValue)) fail('thresholds must be an object.', 'INVALID_INPUT')\n const thresholds = thresholdsValue as Record<string, unknown>\n const repetitions = value['repetitions']\n if (!Number.isInteger(repetitions) || (repetitions as number) < 1) fail('repetitions must be a positive integer.', 'INVALID_INPUT')\n return {\n type: 'agentskit-harness-eval-manifest', schemaVersion: EVAL_MANIFEST_SCHEMA_VERSION,\n suiteId: nonEmpty(value['suiteId'], 'suiteId'), name: nonEmpty(value['name'], 'name'), cases, graders,\n thresholds: { subjectiveQuality: score(thresholds['subjectiveQuality'] ?? 80, 'thresholds.subjectiveQuality'), maxRegression: score(thresholds['maxRegression'] ?? 5, 'thresholds.maxRegression') },\n repetitions: repetitions as number, provider: nonEmpty(value['provider'], 'provider'), model: nonEmpty(value['model'], 'model'),\n promptHash: digest(value['promptHash'], 'promptHash'), toolHash: digest(value['toolHash'], 'toolHash'),\n evidenceOutputs: Array.isArray(value['evidenceOutputs']) && value['evidenceOutputs'].length ? (value['evidenceOutputs'] as readonly unknown[]).map((item, index) => nonEmpty(item, `evidenceOutputs[${index}]`)) : fail('evidenceOutputs must be a non-empty array.', 'INVALID_INPUT'),\n }\n}\n\nexport const createEvalManifest = (input: Omit<EvalManifest, 'type' | 'schemaVersion' | 'digest'>): EvalManifest => {\n const body = manifestBody(input as unknown as Record<string, unknown>)\n return { ...body, digest: hashJson(body) }\n}\n\nexport const validateEvalManifest = (value: unknown): EvalManifest => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('Eval manifest must be an object.', 'INVALID_INPUT')\n const candidate = value as Record<string, unknown>\n const body = manifestBody(candidate)\n if (candidate['type'] !== body.type || candidate['schemaVersion'] !== body.schemaVersion) fail('Eval manifest type or schemaVersion is invalid.', 'INVALID_INPUT')\n const manifestDigest = digest(candidate['digest'], 'digest')\n if (manifestDigest !== hashJson(body)) fail('Eval manifest digest is invalid.', 'INVALID_INPUT')\n return { ...body, digest: manifestDigest }\n}\n\nconst median = (values: readonly number[]): number | null => {\n if (!values.length) return null\n const ordered = [...values].sort((left, right) => left - right)\n const middle = Math.floor(ordered.length / 2)\n return ordered.length % 2 ? ordered[middle]! : (ordered[middle - 1]! + ordered[middle]!) / 2\n}\n\nexport const runEvalBattery = async ({ manifest, evaluate }: { readonly manifest: EvalManifest; readonly evaluate: (testCase: EvalCaseDefinition, repetition: number) => Promise<EvalObservation> }): Promise<EvalBatteryReport> => {\n const validated = validateEvalManifest(manifest)\n const reports: EvalCaseReport[] = []\n for (const testCase of validated.cases) {\n const observations: EvalObservation[] = []\n for (let repetition = 1; repetition <= validated.repetitions; repetition += 1) observations.push(await evaluate(testCase, repetition))\n const blockers: string[] = []\n const statuses = observations.map((observation) => observation.status)\n if (statuses.some((status) => status === 'unknown' || status === 'stale' || status === 'unverified')) blockers.push('unknown, stale, or unverified evidence')\n if (statuses.some((status) => status === 'failed')) blockers.push('failed observation')\n const values = observations.map((observation) => observation.score).filter((value): value is number => typeof value === 'number')\n const minimum = values.length ? Math.min(...values) : null\n const baseline = testCase.baselineScore\n if (testCase.critical && (minimum === null || minimum < 100)) blockers.push('critical case requires 100/100')\n if (testCase.subjective && (median(values) ?? 0) < validated.thresholds.subjectiveQuality) blockers.push(`subjective score below ${validated.thresholds.subjectiveQuality}/100`)\n if (baseline !== undefined && minimum !== null && minimum < baseline - validated.thresholds.maxRegression && !observations.every((observation) => observation.decision)) blockers.push(`regression exceeds ${validated.thresholds.maxRegression} points without a decision`)\n reports.push({ id: testCase.id, repetitions: observations.length, min: minimum, median: median(values), max: values.length ? Math.max(...values) : null, statuses, blockers })\n }\n const blockers = reports.flatMap((report) => report.blockers.map((reason) => `${report.id}: ${reason}`))\n return { suiteId: validated.suiteId, repetitions: validated.repetitions, cases: reports, status: blockers.length ? 'blocked' : 'passed', blockers }\n}\n\nconst pass = (expected: EvalExpectation, output: string): boolean => typeof expected === 'string' ? output === expected : expected(output)\n\nexport const runAgentEval = async ({ suite, agent, concurrency = 1 }: { readonly suite: AgentEvalSuite; readonly agent: (input: string) => Promise<string>; readonly concurrency?: number }): Promise<AgentEvalReport> => {\n if (!suite.name.trim() || !suite.cases.length) fail('Eval suite must have a name and at least one case.', 'INVALID_INPUT')\n if (!Number.isInteger(concurrency) || concurrency < 1) fail('Eval concurrency must be a positive integer.', 'INVALID_INPUT')\n const failures: string[] = []\n let passed = 0\n for (let offset = 0; offset < suite.cases.length; offset += concurrency) {\n const batch = suite.cases.slice(offset, offset + concurrency)\n const outputs = await Promise.all(batch.map((testCase) => agent(testCase.input)))\n batch.forEach((testCase, index) => { if (pass(testCase.expected, outputs[index]!)) passed += 1; else failures.push(testCase.id) })\n }\n return { suite: suite.name, total: suite.cases.length, passed, failed: suite.cases.length - passed, accuracy: passed / suite.cases.length, failures }\n}\n\nexport const assessAgentEval = (report: AgentEvalReport, minimumAccuracy: number): { readonly status: 'passed' | 'blocked'; readonly reason: string; readonly report: AgentEvalReport } => {\n if (!Number.isFinite(minimumAccuracy) || minimumAccuracy < 0 || minimumAccuracy > 1) fail('minimumAccuracy must be between 0 and 1.', 'INVALID_INPUT')\n if (report.total < 1 || report.passed + report.failed !== report.total || report.accuracy !== report.passed / report.total) fail('Eval report is inconsistent.', 'INVALID_INPUT')\n return report.accuracy >= minimumAccuracy ? { status: 'passed', reason: `Accuracy ${report.accuracy.toFixed(4)} meets ${minimumAccuracy.toFixed(4)}.`, report } : { status: 'blocked', reason: `Accuracy ${report.accuracy.toFixed(4)} is below ${minimumAccuracy.toFixed(4)}.`, report }\n}\n","import { hashJson } from './hash.js'\nimport { fail } from './errors.js'\nimport type { AdapterTelemetry, AssuranceLevel } from './adapter-contract.js'\n\nexport interface LlmCacheKeyInput {\n readonly sourceRevision: string\n readonly contractHash: string\n readonly configHash: string\n readonly provider: string\n readonly model: string\n readonly systemPromptHash: string\n readonly inputHash: string\n readonly contextHash?: string\n readonly toolSchemaHash?: string\n readonly operation: 'context' | 'read-only'\n}\n\nexport interface LlmCacheStats {\n readonly hits: number\n readonly misses: number\n readonly invalidations: number\n}\n\nexport const validateCacheableOperation = (operation: unknown): 'context' | 'read-only' => {\n if (operation !== 'context' && operation !== 'read-only') fail('Only context and read-only operations may use the LLM cache.', 'POLICY_BLOCKED')\n return operation as 'context' | 'read-only'\n}\n\nexport const createLlmCacheKey = (input: LlmCacheKeyInput): string => {\n validateCacheableOperation(input.operation)\n return hashJson(input)\n}\n\nexport interface LlmCache<T> {\n readonly assurance?: AssuranceLevel\n readonly telemetry?: () => AdapterTelemetry\n getOrCompute(key: string, compute: () => Promise<T>): Promise<T>\n invalidate(key?: string): void\n stats(): LlmCacheStats\n}\n\nexport const createLlmCache = <T>(): LlmCache<T> => {\n const values = new Map<string, T>()\n let hits = 0\n let misses = 0\n let invalidations = 0\n return {\n assurance: 'contract-tested',\n telemetry: () => ({ status: 'measured', cacheHits: hits, cacheMisses: misses }),\n async getOrCompute(key, compute) {\n const cached = values.get(key)\n if (cached !== undefined) { hits += 1; return cached }\n misses += 1\n const value = await compute()\n values.set(key, value)\n return value\n },\n invalidate(key) {\n if (key === undefined) { invalidations += values.size; values.clear(); return }\n if (values.delete(key)) invalidations += 1\n },\n stats: () => ({ hits, misses, invalidations }),\n }\n}\n","import { hashJson } from './hash.js'\nimport { fail } from './errors.js'\n\nexport interface TokenUsage {\n readonly inputTokens: number\n readonly outputTokens: number\n readonly totalTokens: number\n readonly cacheReadTokens?: number\n readonly cacheWriteTokens?: number\n}\n\nexport interface MemoryUsage {\n readonly reads: number\n readonly writes: number\n readonly relevantHits: number\n readonly staleHits: number\n}\n\nexport interface CacheUsage {\n readonly hits: number\n readonly misses: number\n readonly invalidations: number\n readonly tokensSaved?: number\n}\n\nexport interface ParallelismUsage {\n readonly tasks: number\n readonly peakConcurrency: number\n readonly criticalPathMs: number\n readonly queueWaitMs?: number\n}\n\nexport interface OptimizationObservation {\n readonly sourceRevision: string\n readonly contractHash: string\n readonly configHash: string\n readonly provider: string\n readonly model: string\n readonly durationMs: number\n readonly accuracy?: number\n readonly tokens?: TokenUsage\n readonly memory?: MemoryUsage\n readonly cache?: CacheUsage\n readonly parallelism?: ParallelismUsage\n}\n\nconst nonNegative = (value: number, label: string): number => {\n if (!Number.isFinite(value) || value < 0) fail(`${label} must be a non-negative number.`, 'INVALID_INPUT')\n return value\n}\n\nconst nonNegativeInteger = (value: number, label: string): number => {\n nonNegative(value, label)\n if (!Number.isInteger(value)) fail(`${label} must be an integer.`, 'INVALID_INPUT')\n return value\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nexport const validateOptimizationObservation = (observation: OptimizationObservation): OptimizationObservation => {\n required(observation.sourceRevision, 'sourceRevision')\n required(observation.contractHash, 'contractHash')\n required(observation.configHash, 'configHash')\n required(observation.provider, 'provider')\n required(observation.model, 'model')\n nonNegative(observation.durationMs, 'durationMs')\n if (observation.accuracy !== undefined && (!Number.isFinite(observation.accuracy) || observation.accuracy < 0 || observation.accuracy > 1)) fail('accuracy must be between 0 and 1.', 'INVALID_INPUT')\n if (observation.tokens) {\n const tokens = observation.tokens\n for (const key of ['inputTokens', 'outputTokens', 'totalTokens'] as const) nonNegativeInteger(tokens[key], `tokens.${key}`)\n if (tokens.totalTokens !== tokens.inputTokens + tokens.outputTokens) fail('tokens.totalTokens must equal inputTokens + outputTokens.', 'INVALID_INPUT')\n for (const key of ['cacheReadTokens', 'cacheWriteTokens'] as const) if (tokens[key] !== undefined) nonNegativeInteger(tokens[key]!, `tokens.${key}`)\n }\n if (observation.memory) for (const key of ['reads', 'writes', 'relevantHits', 'staleHits'] as const) nonNegativeInteger(observation.memory[key], `memory.${key}`)\n if (observation.cache) {\n for (const key of ['hits', 'misses', 'invalidations'] as const) nonNegativeInteger(observation.cache[key], `cache.${key}`)\n if (observation.cache.tokensSaved !== undefined) nonNegativeInteger(observation.cache.tokensSaved, 'cache.tokensSaved')\n }\n if (observation.parallelism) {\n for (const key of ['tasks', 'peakConcurrency'] as const) nonNegativeInteger(observation.parallelism[key], `parallelism.${key}`)\n nonNegative(observation.parallelism.criticalPathMs, 'parallelism.criticalPathMs')\n if (observation.parallelism.queueWaitMs !== undefined) nonNegative(observation.parallelism.queueWaitMs, 'parallelism.queueWaitMs')\n if (observation.parallelism.tasks > 0 && observation.parallelism.peakConcurrency < 1) fail('parallelism.peakConcurrency must be positive when tasks exist.', 'INVALID_INPUT')\n }\n return observation\n}\n\nexport interface OptimizationComparison {\n readonly comparable: boolean\n readonly reason: string\n readonly digest: string\n readonly durationDeltaMs?: number\n readonly tokenDelta?: number\n readonly accuracyDelta?: number\n readonly cacheHitRateDelta?: number\n readonly memoryRelevantHitRateDelta?: number\n readonly peakConcurrencyDelta?: number\n}\n\nconst rate = (hits: number, total: number): number | undefined => total ? Number((hits / total).toFixed(4)) : undefined\n\nexport const compareOptimization = (baseline: OptimizationObservation, candidate: OptimizationObservation): OptimizationComparison => {\n validateOptimizationObservation(baseline)\n validateOptimizationObservation(candidate)\n for (const key of ['sourceRevision', 'contractHash', 'configHash', 'provider', 'model'] as const) if (baseline[key] !== candidate[key]) return { comparable: false, reason: `Bindings differ: ${key}.`, digest: hashJson({ baseline, candidate }) }\n const result: OptimizationComparison = {\n comparable: true,\n reason: 'Observations share source, contract, configuration, provider, and model bindings.',\n digest: hashJson({ baseline, candidate }),\n durationDeltaMs: candidate.durationMs - baseline.durationMs,\n ...(baseline.accuracy !== undefined && candidate.accuracy !== undefined ? { accuracyDelta: Number((candidate.accuracy - baseline.accuracy).toFixed(4)) } : {}),\n ...(baseline.tokens && candidate.tokens ? { tokenDelta: candidate.tokens.totalTokens - baseline.tokens.totalTokens } : {}),\n ...(baseline.cache && candidate.cache ? { cacheHitRateDelta: (rate(candidate.cache.hits, candidate.cache.hits + candidate.cache.misses) ?? 0) - (rate(baseline.cache.hits, baseline.cache.hits + baseline.cache.misses) ?? 0) } : {}),\n ...(baseline.memory && candidate.memory ? { memoryRelevantHitRateDelta: (rate(candidate.memory.relevantHits, candidate.memory.reads) ?? 0) - (rate(baseline.memory.relevantHits, baseline.memory.reads) ?? 0) } : {}),\n ...(baseline.parallelism && candidate.parallelism ? { peakConcurrencyDelta: candidate.parallelism.peakConcurrency - baseline.parallelism.peakConcurrency } : {}),\n }\n return result\n}\n","import { fail } from './errors.js'\nimport type { AdapterTelemetry, AssuranceLevel } from './adapter-contract.js'\n\nexport const MEMORY_SCOPES = ['issue', 'project', 'global'] as const\nexport type MemoryScope = typeof MEMORY_SCOPES[number]\n\nexport interface AgentMemoryRecord {\n readonly id: string\n readonly scope: MemoryScope\n readonly summary: string\n readonly source: string\n readonly sourceRevision: string\n readonly contentHash: string\n readonly approved: true\n}\n\nexport interface AgentMemoryHit {\n readonly record: AgentMemoryRecord\n readonly relevant: boolean\n readonly stale: boolean\n}\n\nexport interface AgentMemoryAdapter {\n readonly id: string\n readonly version: string\n readonly assurance?: AssuranceLevel\n readonly telemetry?: () => AdapterTelemetry\n remember(record: AgentMemoryRecord): Promise<void>\n recall(input: { readonly query: string; readonly issueId?: string; readonly project?: string; readonly sourceRevision?: string }): Promise<readonly AgentMemoryHit[]>\n}\n\nexport interface AgentMemoryKvStore {\n get(key: string): Promise<unknown>\n set(key: string, value: unknown): Promise<void>\n}\n\nconst text = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(label + ' must be a non-empty string.', 'INVALID_INPUT')\n return (value as string).trim()\n}\n\nexport const validateMemoryRecord = (record: AgentMemoryRecord): AgentMemoryRecord => {\n text(record.id, 'memory.id')\n if (!MEMORY_SCOPES.includes(record.scope)) fail('memory.scope is invalid.', 'INVALID_INPUT')\n text(record.summary, 'memory.summary')\n text(record.source, 'memory.source')\n text(record.sourceRevision, 'memory.sourceRevision')\n text(record.contentHash, 'memory.contentHash')\n if (record.approved !== true) fail('Only approved memory may enter the shared store.', 'POLICY_BLOCKED')\n return record\n}\n\n/** Minimal deterministic adapter for replay/tests; production uses @agentskit/memory through the same seam. */\nexport const createInMemoryMemoryAdapter = (options: { readonly id?: string; readonly version?: string } = {}): AgentMemoryAdapter => {\n const records = new Map<string, AgentMemoryRecord>()\n let reads = 0\n let writes = 0\n let relevantHits = 0\n let staleHits = 0\n return {\n id: options.id ?? 'in-memory',\n version: options.version ?? '1',\n assurance: 'contract-tested',\n telemetry: () => ({ status: 'measured', memoryReads: reads, memoryWrites: writes, memoryRelevantHits: relevantHits, memoryStaleHits: staleHits }),\n async remember(record) { records.set(validateMemoryRecord(record).id, record); writes += 1 },\n async recall({ query, issueId, project, sourceRevision }) {\n reads += 1\n const needle = query.trim().toLowerCase()\n const hits = [...records.values()].filter((record) => {\n const scopeMatch = record.scope === 'global' || (record.scope === 'issue' ? Boolean(issueId && record.source.includes(issueId)) : Boolean(project && record.source.includes(project)))\n return scopeMatch && (!needle || `${record.summary} ${record.source}`.toLowerCase().includes(needle))\n }).map((record) => ({ record, relevant: true, stale: sourceRevision !== undefined && record.sourceRevision !== sourceRevision }))\n relevantHits += hits.length\n staleHits += hits.filter((hit) => hit.stale).length\n return hits\n },\n }\n}\n\n/** Bridges AgentsKit's KV memory stores without making the Harness depend on a backend. */\nexport const createKvMemoryAdapter = (store: AgentMemoryKvStore, options: { readonly id?: string; readonly version?: string } = {}): AgentMemoryAdapter => {\n const indexKey = 'agentskit-harness:memory:index'\n let reads = 0\n let writes = 0\n let relevantHits = 0\n let staleHits = 0\n const matches = (record: AgentMemoryRecord, query: string, issueId?: string, project?: string): boolean => {\n const scopeMatch = record.scope === 'global' || (record.scope === 'issue' ? Boolean(issueId && record.source.includes(issueId)) : Boolean(project && record.source.includes(project)))\n return scopeMatch && (!query || `${record.summary} ${record.source}`.toLowerCase().includes(query))\n }\n return {\n id: options.id ?? 'agentskit-kv',\n version: options.version ?? '1',\n assurance: 'contract-tested',\n telemetry: () => ({ status: 'measured', memoryReads: reads, memoryWrites: writes, memoryRelevantHits: relevantHits, memoryStaleHits: staleHits }),\n async remember(record) {\n const valid = validateMemoryRecord(record)\n const ids = (await store.get(indexKey))\n const index = Array.isArray(ids) ? ids.filter((id): id is string => typeof id === 'string') : []\n if (!index.includes(valid.id)) await store.set(indexKey, [...index, valid.id].sort())\n await store.set(`agentskit-harness:memory:${valid.id}`, valid)\n writes += 1\n },\n async recall({ query, issueId, project, sourceRevision }) {\n reads += 1\n const ids = await store.get(indexKey)\n const records = Array.isArray(ids) ? await Promise.all(ids.filter((id): id is string => typeof id === 'string').map((id) => store.get(`agentskit-harness:memory:${id}`))) : []\n const hits = records.filter((record): record is AgentMemoryRecord => Boolean(record && typeof record === 'object' && (record as AgentMemoryRecord).approved === true))\n .filter((record) => matches(record, query.trim().toLowerCase(), issueId, project))\n .map((record) => ({ record, relevant: true, stale: sourceRevision !== undefined && record.sourceRevision !== sourceRevision }))\n relevantHits += hits.length\n staleHits += hits.filter((hit) => hit.stale).length\n return hits\n },\n }\n}\n","import { fail } from './errors.js'\nimport { runWorkflow } from './workflow.js'\n\nexport const PHASE_MODES = ['safe', 'yolo', 'dry-run'] as const\nexport type PhaseMode = typeof PHASE_MODES[number]\nexport const PHASE_EFFECTS = ['read', 'write', 'external'] as const\nexport type PhaseEffect = typeof PHASE_EFFECTS[number]\nexport const PHASE_EFFECT_ACTIONS = ['allow', 'preview', 'block', 'escalate'] as const\nexport type PhaseEffectAction = typeof PHASE_EFFECT_ACTIONS[number]\nexport const PHASE_DECISIONS = ['pass', 'block', 'escalate', 'retry', 'cancel', 'resume'] as const\nexport type PhaseDecision = typeof PHASE_DECISIONS[number]\n\nexport interface PhaseRetryPolicy {\n readonly maxAttempts: number\n}\n\nexport interface PhaseDefinition {\n readonly id: string\n readonly inputs?: readonly string[]\n readonly outputs?: readonly string[]\n readonly dependsOn?: readonly string[]\n readonly gates?: readonly string[]\n readonly retries?: PhaseRetryPolicy\n readonly budgetMs?: number\n readonly effect: PhaseEffect\n}\n\nexport interface PhaseEffectPolicy {\n readonly read: PhaseEffectAction\n readonly write: PhaseEffectAction\n readonly external: PhaseEffectAction\n}\n\nexport interface PhaseProfile {\n readonly id: string\n readonly mode: PhaseMode\n readonly phases: readonly PhaseDefinition[]\n readonly effectPolicy?: Partial<PhaseEffectPolicy>\n readonly maxConcurrency?: number\n readonly budgetMs?: number\n}\n\nexport interface NormalizedPhaseProfile extends Omit<PhaseProfile, 'effectPolicy' | 'maxConcurrency'> {\n readonly effectPolicy: PhaseEffectPolicy\n readonly maxConcurrency: number\n}\n\nexport interface PhaseRoutePlan {\n readonly profileId: string\n readonly mode: PhaseMode\n readonly levels: readonly (readonly string[])[]\n readonly phases: readonly PhaseDefinition[]\n readonly effectPolicy: PhaseEffectPolicy\n readonly maxConcurrency: number\n readonly budgetMs?: number\n}\n\nexport interface PhaseAmbiguity {\n readonly id: string\n readonly question: string\n readonly options?: readonly string[]\n readonly suggestion?: string\n}\n\nexport interface PhaseDecisionPacket {\n readonly id: 'phase-preflight'\n readonly phaseIds: readonly string[]\n readonly ambiguities: readonly PhaseAmbiguity[]\n}\n\nexport interface PhaseContext {\n readonly phase: PhaseDefinition\n readonly attempt: number\n readonly mode: PhaseMode\n readonly inputs: Readonly<Record<string, unknown>>\n readonly outputs: Readonly<Record<string, unknown>>\n readonly dryRun: boolean\n}\n\nexport interface PhaseHandlerResult {\n readonly decision: PhaseDecision\n readonly outputs?: Readonly<Record<string, unknown>>\n readonly reason?: string\n}\n\nexport type PhaseHandler = (context: PhaseContext) => PhaseHandlerResult | Promise<PhaseHandlerResult>\nexport type PhaseGateResult = boolean | { readonly decision: Exclude<PhaseDecision, 'retry' | 'cancel' | 'resume' | 'pass'> | 'pass'; readonly reason?: string }\nexport type PhaseGateEvaluator = (context: PhaseContext) => PhaseGateResult | Promise<PhaseGateResult>\nexport interface PhasePreflightResult {\n readonly decision?: 'pass' | 'block' | 'escalate'\n readonly reason?: string\n readonly ambiguities?: readonly PhaseAmbiguity[]\n}\nexport type PhasePreflight = (context: PhaseContext) => PhasePreflightResult | Promise<PhasePreflightResult>\n\nexport interface PhaseExecution {\n readonly id: string\n readonly effect: PhaseEffect\n readonly decision: PhaseDecision\n readonly attempts: number\n readonly skipped: boolean\n readonly reason?: string\n readonly outputs?: Readonly<Record<string, unknown>>\n}\n\nexport interface PhaseResumeState {\n readonly completed: Readonly<Record<string, Pick<PhaseExecution, 'decision' | 'outputs'>>>\n readonly outputs?: Readonly<Record<string, unknown>>\n}\n\nexport interface ExecutePhaseProfileOptions {\n readonly inputs?: Readonly<Record<string, unknown>>\n readonly handlers?: Readonly<Record<string, PhaseHandler>>\n readonly gates?: Readonly<Record<string, PhaseGateEvaluator>>\n readonly preflight?: PhasePreflight\n readonly resume?: PhaseResumeState\n readonly now?: () => number\n}\n\nexport interface PhaseExecutionReport {\n readonly status: 'passed' | 'blocked' | 'escalated' | 'cancelled' | 'dry-run'\n readonly plan: PhaseRoutePlan\n readonly phases: readonly PhaseExecution[]\n readonly order: readonly string[]\n readonly outputs: Readonly<Record<string, unknown>>\n readonly resumed: boolean\n readonly decisionPacket?: PhaseDecisionPacket\n readonly durationMs: number\n}\n\nconst requiredId = (value: unknown, label: string): string => {\n if (typeof value !== 'string') return fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n if (!value.trim()) return fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst names = (values: readonly string[] | undefined, label: string): readonly string[] => {\n if (values === undefined) return []\n if (!Array.isArray(values)) fail(`${label} must be an array.`, 'INVALID_INPUT')\n const normalized = values.map((value, index) => requiredId(value, `${label}[${index}]`))\n if (new Set(normalized).size !== normalized.length) fail(`${label} must contain unique names.`, 'INVALID_INPUT')\n return normalized\n}\n\nconst boundedPositive = (value: number | undefined, label: string, fallback: number): number => {\n const result = value ?? fallback\n if (!Number.isInteger(result) || result < 1 || result > 100) fail(`${label} must be a bounded positive integer (1-100).`, 'INVALID_INPUT')\n return result\n}\n\nconst duration = (value: number | undefined, label: string): number | undefined => {\n if (value === undefined) return undefined\n if (!Number.isInteger(value) || value < 1) fail(`${label} must be a positive integer.`, 'INVALID_INPUT')\n return value\n}\n\nconst defaultEffects = (mode: PhaseMode): PhaseEffectPolicy => mode === 'dry-run'\n ? { read: 'allow', write: 'preview', external: 'preview' }\n : mode === 'safe'\n ? { read: 'allow', write: 'allow', external: 'escalate' }\n : { read: 'allow', write: 'allow', external: 'allow' }\n\nconst normalize = (profile: PhaseProfile): NormalizedPhaseProfile => {\n if (typeof profile !== 'object' || profile === null || Array.isArray(profile)) return fail('profile must be an object.', 'INVALID_INPUT')\n const id = requiredId(profile.id, 'profile.id')\n if (!PHASE_MODES.includes(profile.mode)) fail('profile.mode is invalid.', 'INVALID_INPUT')\n if (!Array.isArray(profile.phases) || !profile.phases.length) fail('profile.phases must be non-empty.', 'INVALID_INPUT')\n profile.phases.forEach((phase, index) => { if (typeof phase !== 'object' || phase === null || Array.isArray(phase)) fail(`phases[${index}] must be an object.`, 'INVALID_INPUT') })\n const ids = profile.phases.map((phase, index) => requiredId(phase.id, `phases[${index}].id`))\n if (new Set(ids).size !== ids.length) fail('Phase ids must be unique.', 'INVALID_INPUT')\n const known = new Set(ids)\n const outputOwners = new Map<string, string>()\n const phases = profile.phases.map((phase, index) => {\n if (typeof phase !== 'object' || phase === null || Array.isArray(phase)) return fail(`phases[${index}] must be an object.`, 'INVALID_INPUT')\n if (!PHASE_EFFECTS.includes(phase.effect)) fail(`phases[${index}].effect is invalid.`, 'INVALID_INPUT')\n const dependsOn = names(phase.dependsOn, `phases[${index}].dependsOn`)\n if (dependsOn.includes(ids[index]!)) fail(`phases[${index}] cannot depend on itself.`, 'INVALID_INPUT')\n if (dependsOn.some((dependency) => !known.has(dependency))) fail(`phases[${index}] has an unknown dependency.`, 'INVALID_INPUT')\n const inputs = names(phase.inputs, `phases[${index}].inputs`)\n const outputs = names(phase.outputs, `phases[${index}].outputs`)\n for (const output of outputs) {\n const owner = outputOwners.get(output)\n if (owner) fail(`Output ${output} is declared by both ${owner} and ${ids[index]}.`, 'INVALID_INPUT')\n outputOwners.set(output, ids[index]!)\n }\n const gates = names(phase.gates, `phases[${index}].gates`)\n const maxAttempts = boundedPositive(phase.retries?.maxAttempts, `phases[${index}].retries.maxAttempts`, 1)\n return { id: ids[index]!, effect: phase.effect, inputs, outputs, dependsOn, gates, ...(maxAttempts > 1 ? { retries: { maxAttempts } } : {}), ...(duration(phase.budgetMs, `phases[${index}].budgetMs`) ? { budgetMs: phase.budgetMs } : {}) }\n })\n const defaults = defaultEffects(profile.mode)\n const effectPolicy = { ...defaults, ...(profile.effectPolicy ?? {}) }\n for (const effect of PHASE_EFFECTS) if (!PHASE_EFFECT_ACTIONS.includes(effectPolicy[effect])) fail(`effectPolicy.${effect} is invalid.`, 'INVALID_INPUT')\n const maxConcurrency = boundedPositive(profile.maxConcurrency, 'profile.maxConcurrency', 1)\n const budgetMs = duration(profile.budgetMs, 'profile.budgetMs')\n calculateLevels(phases)\n return { id, mode: profile.mode, phases, effectPolicy, maxConcurrency, ...(budgetMs ? { budgetMs } : {}) }\n}\n\nconst calculateLevels = (phases: readonly PhaseDefinition[]): readonly (readonly string[])[] => {\n const byId = new Map(phases.map((phase) => [phase.id, phase]))\n const remaining = new Set(byId.keys())\n const completed = new Set<string>()\n const levels: string[][] = []\n while (remaining.size) {\n const ready = [...remaining].sort().filter((id) => (byId.get(id)?.dependsOn ?? []).every((dependency) => completed.has(dependency)))\n if (!ready.length) fail('Phase profile contains an unknown dependency or cycle.', 'INVALID_INPUT')\n levels.push(ready)\n ready.forEach((id) => { remaining.delete(id); completed.add(id) })\n }\n return levels\n}\n\nexport const createPhaseProfile = (profile: PhaseProfile): NormalizedPhaseProfile => normalize(profile)\n\nexport const planPhaseProfile = (profile: PhaseProfile): PhaseRoutePlan => {\n const normalized = normalize(profile)\n return { profileId: normalized.id, mode: normalized.mode, levels: calculateLevels(normalized.phases), phases: normalized.phases, effectPolicy: normalized.effectPolicy, maxConcurrency: normalized.maxConcurrency, ...(normalized.budgetMs ? { budgetMs: normalized.budgetMs } : {}) }\n}\n\nconst resultDecision = (value: unknown): PhaseHandlerResult => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('Phase handler must return a decision object.', 'INVALID_INPUT')\n const result = value as Partial<PhaseHandlerResult>\n if (!PHASE_DECISIONS.includes(result.decision as PhaseDecision)) fail('Phase handler returned an invalid decision.', 'INVALID_INPUT')\n if (result.outputs !== undefined && (typeof result.outputs !== 'object' || result.outputs === null || Array.isArray(result.outputs))) fail('Phase outputs must be an object.', 'INVALID_INPUT')\n return result as PhaseHandlerResult\n}\n\nconst gateDecision = (value: PhaseGateResult): { readonly decision: 'pass' | 'block' | 'escalate'; readonly reason?: string } => typeof value === 'boolean' ? { decision: value ? 'pass' : 'block' } : value\n\nconst packet = (phaseIds: readonly string[], ambiguities: readonly PhaseAmbiguity[]): PhaseDecisionPacket | undefined => ambiguities.length ? { id: 'phase-preflight', phaseIds: [...phaseIds].sort(), ambiguities } : undefined\n\nconst timeout = async <T>(operation: Promise<T>, budgetMs: number | undefined): Promise<T> => {\n if (budgetMs === undefined) return operation\n let timer: ReturnType<typeof setTimeout> | undefined\n const limit = new Promise<never>((_, reject) => { timer = setTimeout(() => reject(new Error(`phase budget exceeded after ${budgetMs}ms`)), budgetMs) })\n try { return await Promise.race([operation, limit]) } finally { if (timer) clearTimeout(timer) }\n}\n\ninterface StepResult { readonly execution: PhaseExecution; readonly outputs: Readonly<Record<string, unknown>> }\n\nexport const executePhaseProfile = async (profile: PhaseProfile, options: ExecutePhaseProfileOptions = {}): Promise<PhaseExecutionReport> => {\n const plan = planPhaseProfile(profile)\n const started = (options.now ?? Date.now)()\n const inputValues = { ...(options.inputs ?? {}) }\n const outputValues: Record<string, unknown> = { ...(options.resume?.outputs ?? {}) }\n const completed = options.resume?.completed ?? {}\n const phasesById = new Map(plan.phases.map((phase) => [phase.id, phase]))\n const mutating = plan.phases.filter((phase) => phase.effect !== 'read')\n const preflightAmbiguities: PhaseAmbiguity[] = []\n const preflightAmbiguityPhaseIds = new Set<string>()\n const preflightBlocked: PhaseExecution[] = []\n const preflightEscalated: PhaseExecution[] = []\n for (const phase of mutating) {\n const action = plan.effectPolicy[phase.effect]\n if (action === 'block') { preflightBlocked.push({ id: phase.id, effect: phase.effect, decision: 'block', attempts: 0, skipped: true, reason: `Effect ${phase.effect} is blocked by profile policy.` }); continue }\n if (action === 'escalate') { preflightEscalated.push({ id: phase.id, effect: phase.effect, decision: 'escalate', attempts: 0, skipped: true, reason: `Effect ${phase.effect} requires escalation in ${plan.mode} mode.` }); continue }\n if (!options.preflight && action === 'allow') { preflightBlocked.push({ id: phase.id, effect: phase.effect, decision: 'block', attempts: 0, skipped: true, reason: `Preflight is required before ${phase.effect} effects.` }); continue }\n if (!options.preflight) continue\n const context: PhaseContext = { phase, attempt: 0, mode: plan.mode, inputs: inputValues, outputs: outputValues, dryRun: action === 'preview' }\n const check = await options.preflight(context)\n if (check.ambiguities?.length) { preflightAmbiguityPhaseIds.add(phase.id); preflightAmbiguities.push(...check.ambiguities) }\n if (check.decision === 'block') preflightBlocked.push({ id: phase.id, effect: phase.effect, decision: 'block', attempts: 0, skipped: true, ...(check.reason ? { reason: check.reason } : {}) })\n if (check.decision === 'escalate') preflightEscalated.push({ id: phase.id, effect: phase.effect, decision: 'escalate', attempts: 0, skipped: true, ...(check.reason ? { reason: check.reason } : {}) })\n }\n const decisionPacket = packet([...preflightAmbiguityPhaseIds, ...preflightEscalated.map((phase) => phase.id)], preflightAmbiguities)\n if (decisionPacket || preflightEscalated.length) return { status: 'escalated', plan, phases: [...preflightBlocked, ...preflightEscalated], order: [], outputs: outputValues, resumed: false, ...(decisionPacket ? { decisionPacket } : {}), durationMs: (options.now ?? Date.now)() - started }\n if (preflightBlocked.length) return { status: 'blocked', plan, phases: preflightBlocked, order: [], outputs: outputValues, resumed: false, durationMs: (options.now ?? Date.now)() - started }\n\n const executions: PhaseExecution[] = []\n let resumed = false\n let dryRun = false\n const statusOf = (phase: PhaseDefinition, decision: PhaseDecision, attempts: number, skipped: boolean, reason?: string, outputs?: Readonly<Record<string, unknown>>): PhaseExecution => ({ id: phase.id, effect: phase.effect, decision, attempts, skipped, ...(reason ? { reason } : {}), ...(outputs ? { outputs } : {}) })\n const runPhase = async (phase: PhaseDefinition, levelOutputs: Readonly<Record<string, unknown>>): Promise<StepResult> => {\n const prior = completed[phase.id]\n if (prior && (prior.decision === 'pass' || prior.decision === 'resume')) { resumed = true; const restored = prior.outputs ?? {}; return { execution: statusOf(phase, 'resume', 0, true, 'Resumed from a completed phase.', restored), outputs: restored } }\n const action = plan.effectPolicy[phase.effect]\n if (action === 'block') return { execution: statusOf(phase, 'block', 0, true, `Effect ${phase.effect} is blocked by profile policy.`), outputs: {} }\n if (action === 'escalate') return { execution: statusOf(phase, 'escalate', 0, true, `Effect ${phase.effect} requires escalation in ${plan.mode} mode.`), outputs: {} }\n if (action === 'preview') { dryRun = true; return { execution: statusOf(phase, 'pass', 0, true, 'Effect previewed; handler was not invoked.'), outputs: {} } }\n const values = { ...inputValues, ...levelOutputs }\n const inputs: Record<string, unknown> = {}\n for (const name of phase.inputs ?? []) {\n if (!(name in values)) return { execution: statusOf(phase, 'block', 0, true, `Missing phase input: ${name}.`), outputs: {} }\n inputs[name] = values[name]\n }\n const handler = options.handlers?.[phase.id]\n if (!handler) return { execution: statusOf(phase, 'block', 0, true, `No handler registered for phase ${phase.id}.`), outputs: {} }\n const gateContext = (attempt: number): PhaseContext => ({ phase, attempt, mode: plan.mode, inputs, outputs: levelOutputs, dryRun: false })\n for (const gateId of phase.gates ?? []) {\n const evaluator = options.gates?.[gateId]\n if (!evaluator) return { execution: statusOf(phase, 'block', 0, true, `No evaluator registered for gate ${gateId}.`), outputs: {} }\n const gate = gateDecision(await evaluator(gateContext(0)))\n if (gate.decision !== 'pass') return { execution: statusOf(phase, gate.decision, 0, true, gate.reason ?? `Gate ${gateId} did not pass.`), outputs: {} }\n }\n const maxAttempts = phase.retries?.maxAttempts ?? 1\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n let result: PhaseHandlerResult\n try { result = resultDecision(await timeout(Promise.resolve(handler(gateContext(attempt))), phase.budgetMs)) } catch (error) { return { execution: statusOf(phase, 'block', attempt, false, error instanceof Error ? error.message : String(error)), outputs: {} } }\n if (result.decision === 'retry') { if (attempt < maxAttempts) continue; return { execution: statusOf(phase, 'block', attempt, false, result.reason ?? 'Phase retry budget exhausted.'), outputs: {} } }\n if (result.decision === 'pass' || result.decision === 'resume') {\n const produced = { ...(result.outputs ?? {}) }\n const declared = new Set(phase.outputs ?? [])\n if ([...Object.keys(produced)].some((name) => !declared.has(name))) return { execution: statusOf(phase, 'block', attempt, false, 'Phase returned an undeclared output.'), outputs: {} }\n if ([...(phase.outputs ?? [])].some((name) => !(name in produced))) return { execution: statusOf(phase, 'block', attempt, false, 'Phase did not produce every declared output.'), outputs: {} }\n return { execution: statusOf(phase, result.decision, attempt, false, result.reason, produced), outputs: produced }\n }\n return { execution: statusOf(phase, result.decision, attempt, false, result.reason), outputs: {} }\n }\n return { execution: statusOf(phase, 'block', maxAttempts, false, 'Phase did not resolve.'), outputs: {} }\n }\n\n for (const level of plan.levels) {\n if (plan.budgetMs !== undefined && (options.now ?? Date.now)() - started > plan.budgetMs) {\n const phase = phasesById.get(level[0]!)!\n executions.push(statusOf(phase, 'block', 0, true, `Profile budget exceeded after ${plan.budgetMs}ms.`))\n break\n }\n const levelSnapshot = { ...outputValues }\n const workflow = await runWorkflow(level.map((id) => ({ id, run: () => runPhase(phasesById.get(id)!, levelSnapshot) })), { maxConcurrency: plan.maxConcurrency })\n let stop = false\n for (const id of level) {\n const step = workflow.results[id]!\n executions.push(step.execution)\n if (step.execution.decision === 'pass' || step.execution.decision === 'resume') Object.assign(outputValues, step.outputs)\n else stop = true\n }\n if (plan.budgetMs !== undefined && (options.now ?? Date.now)() - started > plan.budgetMs && executions.length) {\n const last = executions.length - 1\n executions[last] = { ...executions[last]!, decision: 'block', reason: `Profile budget exceeded after ${plan.budgetMs}ms.` }\n stop = true\n }\n if (stop) break\n }\n const failed = executions.find((execution) => execution.decision === 'block' || execution.decision === 'escalate' || execution.decision === 'cancel')\n const status = failed?.decision === 'cancel' ? 'cancelled' : failed?.decision === 'escalate' ? 'escalated' : failed ? 'blocked' : dryRun ? 'dry-run' : 'passed'\n return { status, plan, phases: executions, order: executions.map((execution) => execution.id), outputs: outputValues, resumed, durationMs: (options.now ?? Date.now)() - started }\n}\n","import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { fail } from './errors.js'\nimport { hashJson, sha256 } from './hash.js'\nimport { FileEventStore } from './events.js'\nimport type { PhaseExecution, PhaseResumeState } from './phase-executor.js'\n\nexport const ARTIFACT_SCHEMA_VERSION = 1 as const\nexport const ARTIFACT_TYPES = ['plan', 'finding', 'decision', 'repair', 'blocker', 'approval', 'phase'] as const\nexport type ArtifactType = typeof ARTIFACT_TYPES[number]\n\nexport interface ArtifactEnvelope<T = unknown> {\n readonly type: 'agentskit-harness-artifact'\n readonly schemaVersion: typeof ARTIFACT_SCHEMA_VERSION\n readonly artifactId: string\n readonly artifactType: ArtifactType\n readonly artifactVersion: number\n readonly runId: string\n readonly issueRef: string\n readonly sourceRevision: string\n readonly contractHash: string\n readonly configHash: string\n readonly contextHash: string\n readonly phase: string\n readonly createdAt: string\n readonly payload: T\n readonly payloadHash: string\n readonly artifactHash: string\n}\n\nexport type ArtifactEnvelopeInput<T = unknown> = Omit<ArtifactEnvelope<T>, 'type' | 'schemaVersion' | 'artifactId' | 'createdAt' | 'payloadHash' | 'artifactHash'> & {\n readonly artifactId?: string\n readonly createdAt?: string\n readonly payloadHash?: string\n readonly artifactHash?: string\n}\n\nexport interface ArtifactBinding {\n readonly runId: string\n readonly issueRef: string\n readonly sourceRevision: string\n readonly contractHash: string\n readonly configHash: string\n readonly contextHash: string\n readonly phase?: string\n}\n\nconst text = (value: unknown, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) return fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\nconst digest = (value: unknown, label: string): string => {\n const result = text(value, label)\n if (!/^[a-f0-9]{64}$/.test(result)) fail(`${label} must be a lowercase SHA-256 digest.`, 'INVALID_INPUT')\n return result\n}\nconst artifactId = (value: unknown): string => {\n const result = text(value, 'Artifact artifactId')\n if (!/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(result)) fail('Artifact artifactId is invalid.', 'INVALID_INPUT')\n return result\n}\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst artifactBody = (artifact: Omit<ArtifactEnvelope, 'artifactHash'>): Record<string, unknown> => ({\n type: artifact.type,\n schemaVersion: artifact.schemaVersion,\n artifactId: artifact.artifactId,\n artifactType: artifact.artifactType,\n artifactVersion: artifact.artifactVersion,\n runId: artifact.runId,\n issueRef: artifact.issueRef,\n sourceRevision: artifact.sourceRevision,\n contractHash: artifact.contractHash,\n configHash: artifact.configHash,\n contextHash: artifact.contextHash,\n phase: artifact.phase,\n payload: artifact.payload,\n payloadHash: artifact.payloadHash,\n})\n\nconst expectedArtifactHash = (artifact: Omit<ArtifactEnvelope, 'artifactHash'>): string => hashJson(artifactBody(artifact))\n\nexport const validateArtifactEnvelope = <T = unknown>(value: unknown): ArtifactEnvelope<T> => {\n if (!isRecord(value)) return fail('Artifact envelope must be an object.', 'INVALID_INPUT')\n if (value['type'] !== 'agentskit-harness-artifact' || value['schemaVersion'] !== ARTIFACT_SCHEMA_VERSION) fail('Artifact envelope type or schemaVersion is invalid.', 'INVALID_INPUT')\n if (!ARTIFACT_TYPES.includes(value['artifactType'] as ArtifactType)) fail('Artifact artifactType is invalid.', 'INVALID_INPUT')\n if (!Number.isInteger(value['artifactVersion']) || (value['artifactVersion'] as number) < 1) fail('Artifact artifactVersion must be a positive integer.', 'INVALID_INPUT')\n const createdAt = text(value['createdAt'], 'Artifact createdAt')\n if (!Number.isFinite(Date.parse(createdAt))) fail('Artifact createdAt must be a valid timestamp.', 'INVALID_INPUT')\n const payloadHash = digest(value['payloadHash'], 'Artifact payloadHash')\n if (hashJson(value['payload']) !== payloadHash) fail('Artifact payloadHash does not match payload.', 'INVALID_INPUT')\n const artifact = {\n type: 'agentskit-harness-artifact' as const,\n schemaVersion: ARTIFACT_SCHEMA_VERSION,\n artifactId: artifactId(value['artifactId']),\n artifactType: value['artifactType'] as ArtifactType,\n artifactVersion: value['artifactVersion'] as number,\n runId: text(value['runId'], 'Artifact runId'),\n issueRef: text(value['issueRef'], 'Artifact issueRef'),\n sourceRevision: text(value['sourceRevision'], 'Artifact sourceRevision'),\n contractHash: digest(value['contractHash'], 'Artifact contractHash'),\n configHash: digest(value['configHash'], 'Artifact configHash'),\n contextHash: digest(value['contextHash'], 'Artifact contextHash'),\n phase: text(value['phase'], 'Artifact phase'),\n createdAt,\n payload: value['payload'] as T,\n payloadHash,\n }\n if (digest(value['artifactHash'], 'Artifact artifactHash') !== expectedArtifactHash(artifact)) fail('Artifact artifactHash does not match envelope.', 'INVALID_INPUT')\n return { ...artifact, artifactHash: value['artifactHash'] as string }\n}\n\nexport const createArtifactEnvelope = <T>(input: ArtifactEnvelopeInput<T>): ArtifactEnvelope<T> => {\n if (!ARTIFACT_TYPES.includes(input.artifactType)) fail('Artifact artifactType is invalid.', 'INVALID_INPUT')\n const payloadHash = input.payloadHash ?? hashJson(input.payload)\n if (payloadHash !== hashJson(input.payload)) fail('Artifact payloadHash does not match payload.', 'INVALID_INPUT')\n const identity = {\n type: 'agentskit-harness-artifact' as const,\n schemaVersion: ARTIFACT_SCHEMA_VERSION,\n artifactType: input.artifactType,\n artifactVersion: input.artifactVersion,\n runId: input.runId,\n issueRef: input.issueRef,\n sourceRevision: input.sourceRevision,\n contractHash: input.contractHash,\n configHash: input.configHash,\n contextHash: input.contextHash,\n phase: input.phase,\n payload: input.payload,\n payloadHash,\n }\n const id = input.artifactId ?? hashJson(identity)\n const artifact = {\n ...identity,\n artifactId: id,\n createdAt: input.createdAt ?? new Date().toISOString(),\n }\n const artifactHash = input.artifactHash ?? expectedArtifactHash(artifact)\n return validateArtifactEnvelope({ ...artifact, artifactHash })\n}\n\nexport const renderArtifactMarkdown = (artifact: ArtifactEnvelope): string => [\n `# ${artifact.artifactType} artifact ${artifact.artifactId}`,\n '',\n `- Schema: ${artifact.schemaVersion}`,\n `- Version: ${artifact.artifactVersion}`,\n `- Run: ${artifact.runId}`,\n `- Issue: ${artifact.issueRef}`,\n `- Phase: ${artifact.phase}`,\n `- Source revision: ${artifact.sourceRevision}`,\n `- Contract hash: ${artifact.contractHash}`,\n `- Configuration hash: ${artifact.configHash}`,\n `- Context hash: ${artifact.contextHash}`,\n `- Artifact hash: ${artifact.artifactHash}`,\n '',\n '## Payload',\n '',\n '```json',\n JSON.stringify(artifact.payload, null, 2),\n '```',\n '',\n].join('\\n')\n\nexport const artifactFilePath = (stateDir: string, runId: string, id: string): string => join(stateDir, 'runs', runId, 'artifacts', `${id}.json`)\nexport const artifactMarkdownPath = (stateDir: string, runId: string, id: string): string => join(stateDir, 'runs', runId, 'artifacts', `${id}.md`)\n\nexport class FileArtifactStore {\n public constructor(private readonly stateDir: string) {}\n\n public write<T>(input: ArtifactEnvelope<T>): ArtifactEnvelope<T> {\n const artifact = validateArtifactEnvelope<T>(input)\n const path = artifactFilePath(this.stateDir, artifact.runId, artifact.artifactId)\n mkdirSync(join(this.stateDir, 'runs', artifact.runId, 'artifacts'), { recursive: true })\n if (existsSync(path)) {\n const existing = validateArtifactEnvelope<T>(JSON.parse(readFileSync(path, 'utf8')) as unknown)\n if (existing.artifactHash !== artifact.artifactHash) fail(`Artifact ${artifact.artifactId} already exists with different content.`, 'HARNESS_ERROR')\n return existing\n }\n writeFileSync(path, `${JSON.stringify(artifact, null, 2)}\\n`, 'utf8')\n writeFileSync(artifactMarkdownPath(this.stateDir, artifact.runId, artifact.artifactId), renderArtifactMarkdown(artifact), 'utf8')\n new FileEventStore(this.stateDir).append({\n runId: artifact.runId,\n sourceRevision: artifact.sourceRevision,\n configHash: artifact.configHash,\n type: 'artifact.recorded',\n payload: { artifactId: artifact.artifactId, artifactType: artifact.artifactType, artifactVersion: artifact.artifactVersion, artifactHash: artifact.artifactHash, phase: artifact.phase, representation: 'json+markdown' },\n })\n return artifact\n }\n\n public read<T = unknown>(runId: string, id: string): ArtifactEnvelope<T> {\n return validateArtifactEnvelope<T>(JSON.parse(readFileSync(artifactFilePath(this.stateDir, runId, artifactId(id)), 'utf8')) as unknown)\n }\n\n public list(runId: string): readonly ArtifactEnvelope[] {\n const directory = join(this.stateDir, 'runs', runId, 'artifacts')\n if (!existsSync(directory)) return []\n return readdirSync(directory).filter((name) => name.endsWith('.json')).sort().map((name) => validateArtifactEnvelope(JSON.parse(readFileSync(join(directory, name), 'utf8')) as unknown))\n }\n}\n\nexport const artifactIsFresh = (artifact: ArtifactEnvelope, binding: ArtifactBinding): boolean => artifact.runId === binding.runId && artifact.issueRef === binding.issueRef && artifact.sourceRevision === binding.sourceRevision && artifact.contractHash === binding.contractHash && artifact.configHash === binding.configHash && artifact.contextHash === binding.contextHash && (binding.phase === undefined || artifact.phase === binding.phase)\n\nexport const resumeStateFromArtifacts = (artifacts: readonly ArtifactEnvelope[]): PhaseResumeState => {\n const completed: Record<string, Pick<PhaseExecution, 'decision' | 'outputs'>> = {}\n const outputs: Record<string, unknown> = {}\n for (const artifact of artifacts.filter((item) => item.artifactType === 'phase').sort((left, right) => left.phase.localeCompare(right.phase) || left.artifactVersion - right.artifactVersion)) {\n if (!isRecord(artifact.payload) || artifact.payload['decision'] !== 'pass') continue\n const phaseOutputs = isRecord(artifact.payload['outputs']) ? artifact.payload['outputs'] : {}\n completed[artifact.phase] = { decision: 'pass', outputs: phaseOutputs }\n Object.assign(outputs, phaseOutputs)\n }\n return { completed, outputs }\n}\n\nexport const createPhaseArtifact = (base: Omit<ArtifactEnvelopeInput, 'artifactType' | 'phase' | 'payload'>, execution: PhaseExecution): ArtifactEnvelope => createArtifactEnvelope({ ...base, artifactType: 'phase', phase: execution.id, payload: { decision: execution.decision, outputs: execution.outputs ?? {} } })\n\nexport const readArtifactFile = (path: string): ArtifactEnvelope => validateArtifactEnvelope(JSON.parse(readFileSync(path, 'utf8')) as unknown)\n\nexport const artifactDigest = (artifact: ArtifactEnvelope): string => sha256(JSON.stringify(artifact))\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\n\nexport const QUALITY_DIMENSIONS = ['correctness', 'completeness', 'speed', 'cost', 'resource', 'reliability'] as const\nexport type QualityDimension = typeof QUALITY_DIMENSIONS[number]\nexport type MetricStatus = 'measured' | 'unknown'\n\nexport interface PhaseTokenMetrics {\n readonly inputTokens?: number\n readonly outputTokens?: number\n readonly cacheReadTokens?: number\n readonly cacheWriteTokens?: number\n readonly costUsd?: number\n}\n\nexport interface PhaseMachineMetrics {\n readonly cpuPercent?: number\n readonly memoryUsedPercent?: number\n readonly peakConcurrency?: number\n readonly queueWaitMs?: number\n readonly contentionMs?: number\n readonly saturationPercent?: number\n}\n\nexport interface PhaseTelemetry {\n readonly phaseId: string\n readonly durationMs?: number\n readonly attempts?: number\n readonly outcome: 'pass' | 'block' | 'escalate' | 'cancel' | 'unknown'\n readonly failureClass?: string\n readonly evidenceCoverage?: number\n readonly tokens?: PhaseTokenMetrics\n readonly machine?: PhaseMachineMetrics\n}\n\nexport interface QualityDimensionScore {\n readonly score: number | null\n readonly status: MetricStatus\n readonly baselineDelta: number | null\n readonly source: string\n}\n\nexport interface QualityMatrix {\n readonly type: 'agentskit-harness-quality-matrix'\n readonly schemaVersion: 1\n readonly dimensions: Readonly<Record<QualityDimension, QualityDimensionScore>>\n readonly overall: QualityDimensionScore\n readonly phaseCount: number\n readonly unknownMetricCount: number\n readonly blockers: readonly WatchdogBlocker[]\n readonly digest: string\n}\n\nexport interface WatchdogBudget {\n readonly maxDurationMs?: number\n readonly maxTotalTokens?: number\n readonly maxMemoryUsedPercent?: number\n readonly maxSaturationPercent?: number\n}\n\nexport interface WatchdogBlocker {\n readonly class: 'budget' | 'resource' | 'contention'\n readonly reason: string\n readonly phaseId?: string\n}\n\nexport interface WatchdogResult {\n readonly status: 'ok' | 'blocked'\n readonly blockers: readonly WatchdogBlocker[]\n}\n\nconst finite = (value: unknown, label: string, max?: number): number => {\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0 || (max !== undefined && value > max)) return fail(`${label} is invalid.`, 'INVALID_INPUT')\n return value\n}\nconst integer = (value: unknown, label: string): number => { const result = finite(value, label); if (!Number.isInteger(result)) return fail(`${label} must be an integer.`, 'INVALID_INPUT'); return result }\nconst phase = (value: unknown): string => { if (typeof value !== 'string' || !value.trim()) return fail('phaseId is required.', 'INVALID_INPUT'); return value.trim() }\n\nexport const validatePhaseTelemetry = (value: unknown): PhaseTelemetry => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return fail('Phase telemetry must be an object.', 'INVALID_INPUT')\n const raw = value as Record<string, unknown>\n const outcome = raw['outcome']\n if (!['pass', 'block', 'escalate', 'cancel', 'unknown'].includes(outcome as string)) return fail('Phase telemetry outcome is invalid.', 'INVALID_INPUT')\n const tokens = raw['tokens'] === undefined ? undefined : raw['tokens'] as PhaseTokenMetrics\n if (tokens) for (const key of ['inputTokens', 'outputTokens', 'cacheReadTokens', 'cacheWriteTokens', 'costUsd'] as const) if (tokens[key] !== undefined) finite(tokens[key], `tokens.${key}`)\n const machine = raw['machine'] === undefined ? undefined : raw['machine'] as PhaseMachineMetrics\n if (machine) for (const key of ['cpuPercent', 'memoryUsedPercent', 'peakConcurrency', 'queueWaitMs', 'contentionMs', 'saturationPercent'] as const) if (machine[key] !== undefined) finite(machine[key], `machine.${key}`, ['cpuPercent', 'memoryUsedPercent', 'saturationPercent'].includes(key) ? 100 : undefined)\n return {\n phaseId: phase(raw['phaseId']),\n ...(raw['durationMs'] === undefined ? {} : { durationMs: finite(raw['durationMs'], 'durationMs') }),\n ...(raw['attempts'] === undefined ? {} : { attempts: integer(raw['attempts'], 'attempts') }),\n outcome: outcome as PhaseTelemetry['outcome'],\n ...(raw['failureClass'] === undefined ? {} : { failureClass: phase(raw['failureClass']) }),\n ...(raw['evidenceCoverage'] === undefined ? {} : { evidenceCoverage: finite(raw['evidenceCoverage'], 'evidenceCoverage', 1) }),\n ...(tokens ? { tokens } : {}),\n ...(machine ? { machine } : {}),\n }\n}\n\nconst average = (values: readonly number[]): number | null => values.length ? Number((values.reduce((sum, value) => sum + value, 0) / values.length).toFixed(2)) : null\nconst score = (value: number | null, source: string, baseline: number | null = null): QualityDimensionScore => ({ score: value === null ? null : Math.max(0, Math.min(100, Number(value.toFixed(2)))), status: value === null ? 'unknown' : 'measured', baselineDelta: value === null || baseline === null ? null : Number((value - baseline).toFixed(2)), source })\n\nexport const evaluateWatchdog = ({ phases, budget }: { readonly phases: readonly PhaseTelemetry[]; readonly budget: WatchdogBudget }): WatchdogResult => {\n const blockers: WatchdogBlocker[] = []\n const duration = phases.every((phase) => phase.durationMs !== undefined) ? phases.reduce((sum, phase) => sum + (phase.durationMs ?? 0), 0) : undefined\n const totalTokens = phases.every((phase) => phase.tokens?.inputTokens !== undefined && phase.tokens.outputTokens !== undefined) ? phases.reduce((sum, phase) => sum + (phase.tokens?.inputTokens ?? 0) + (phase.tokens?.outputTokens ?? 0), 0) : undefined\n if (budget.maxDurationMs !== undefined && duration !== undefined && duration > budget.maxDurationMs) blockers.push({ class: 'budget', reason: `Duration budget exceeded: ${duration}ms > ${budget.maxDurationMs}ms.` })\n if (budget.maxTotalTokens !== undefined && totalTokens !== undefined && totalTokens > budget.maxTotalTokens) blockers.push({ class: 'budget', reason: `Token budget exceeded: ${totalTokens} > ${budget.maxTotalTokens}.` })\n for (const phase of phases) {\n if (budget.maxMemoryUsedPercent !== undefined && phase.machine?.memoryUsedPercent !== undefined && phase.machine.memoryUsedPercent > budget.maxMemoryUsedPercent) blockers.push({ class: 'resource', phaseId: phase.phaseId, reason: `Memory saturation exceeded: ${phase.machine.memoryUsedPercent}% > ${budget.maxMemoryUsedPercent}%.` })\n if (budget.maxSaturationPercent !== undefined && phase.machine?.saturationPercent !== undefined && phase.machine.saturationPercent > budget.maxSaturationPercent) blockers.push({ class: 'contention', phaseId: phase.phaseId, reason: `Saturation exceeded: ${phase.machine.saturationPercent}% > ${budget.maxSaturationPercent}%.` })\n }\n return { status: blockers.length ? 'blocked' : 'ok', blockers }\n}\n\nexport const createQualityMatrix = ({ phases, baseline, budget = {} }: { readonly phases: readonly PhaseTelemetry[]; readonly baseline?: readonly PhaseTelemetry[]; readonly budget?: WatchdogBudget }): QualityMatrix => {\n const current = phases.map(validatePhaseTelemetry)\n const prior = baseline?.map(validatePhaseTelemetry) ?? []\n const currentDurations = current.flatMap((phase) => phase.durationMs === undefined ? [] : [phase.durationMs])\n const priorDurations = prior.flatMap((phase) => phase.durationMs === undefined ? [] : [phase.durationMs])\n const currentTokens = current.flatMap((phase) => phase.tokens?.inputTokens !== undefined && phase.tokens.outputTokens !== undefined ? [phase.tokens.inputTokens + phase.tokens.outputTokens] : [])\n const priorTokens = prior.flatMap((phase) => phase.tokens?.inputTokens !== undefined && phase.tokens.outputTokens !== undefined ? [phase.tokens.inputTokens + phase.tokens.outputTokens] : [])\n const correctness = score(average(current.map((phase) => phase.evidenceCoverage === undefined ? 0 : phase.evidenceCoverage * 100)), 'mean evidence coverage')\n const completeness = score(current.length ? current.filter((phase) => phase.outcome === 'pass').length / current.length * 100 : null, 'passed phases / total phases')\n const speed = score(currentDurations.length && priorDurations.length ? average(priorDurations)! / Math.max(1, average(currentDurations)!) * 100 : null, 'baseline duration / current duration', 100)\n const cost = score(currentTokens.length && priorTokens.length ? average(priorTokens)! / Math.max(1, average(currentTokens)!) * 100 : null, 'baseline tokens / current tokens', 100)\n const resourceValues = current.flatMap((phase) => phase.machine?.cpuPercent !== undefined && phase.machine.memoryUsedPercent !== undefined ? [100 - Math.max(phase.machine.cpuPercent, phase.machine.memoryUsedPercent)] : [])\n const resource = score(average(resourceValues), '100 - max(cpu%, memory%)')\n const reliability = score(current.length ? current.filter((phase) => phase.outcome === 'pass').length / current.length * 100 : null, 'passed phases / total phases')\n const dimensions = { correctness, completeness, speed, cost, resource, reliability }\n const measured = Object.values(dimensions).filter((item) => item.score !== null).map((item) => item.score!)\n const overall = score(average(measured), 'mean of measured dimensions')\n const unknownMetricCount = Object.values(dimensions).filter((item) => item.status === 'unknown').length + current.filter((phase) => phase.durationMs === undefined || phase.tokens === undefined || phase.machine === undefined).length\n const blockers = evaluateWatchdog({ phases: current, budget }).blockers\n const body = { type: 'agentskit-harness-quality-matrix' as const, schemaVersion: 1 as const, dimensions, overall, phaseCount: current.length, unknownMetricCount, blockers }\n return { ...body, digest: hashJson(body) }\n}\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\n\nexport const COMPATIBILITY_SCHEMA_VERSION = 1 as const\nexport const COMPATIBILITY_COMPONENTS = ['core', 'memory', 'eval', 'doc-bridge', 'code-review', 'adapter-boundary', 'runtime'] as const\nexport type CompatibilityComponentId = typeof COMPATIBILITY_COMPONENTS[number]\nexport type CompatibilityStatus = 'passed' | 'failed' | 'unknown'\n\nexport interface CompatibilityComponent {\n readonly id: CompatibilityComponentId\n readonly package: string\n readonly version: string\n readonly revision: string\n readonly repository: string\n readonly adapterBoundary: 'real-adapter'\n readonly testCommand: string\n readonly evalCommand: string\n readonly previousVersion: string\n readonly noHarnessBaseline: string\n readonly migrationEvidence: string\n readonly rollbackEvidence: string\n}\n\nexport interface CompatibilityManifest {\n readonly type: 'agentskit-harness-compatibility-manifest'\n readonly schemaVersion: typeof COMPATIBILITY_SCHEMA_VERSION\n readonly harnessVersion: string\n readonly sourceRevision: string\n readonly components: readonly CompatibilityComponent[]\n readonly evidenceOutputs: readonly string[]\n readonly digest: string\n}\n\nexport interface CompatibilityObservation {\n readonly componentId: CompatibilityComponentId\n readonly status: CompatibilityStatus\n readonly evidence?: string\n readonly previousVersion?: string\n readonly noHarnessBaseline?: string\n}\n\nexport interface CompatibilityReport {\n readonly status: 'passed' | 'blocked'\n readonly componentCount: number\n readonly observations: readonly CompatibilityObservation[]\n readonly blockers: readonly string[]\n}\n\nconst text = (value: unknown, label: string): string => {\n const result = typeof value === 'string' ? value.trim() : ''\n if (!result) fail(`${label} is required.`, 'INVALID_INPUT')\n return result\n}\n\nconst sha = (value: unknown, label: string): string => {\n const result = text(value, label)\n if (!/^[a-f0-9]{40,64}$/.test(result)) fail(`${label} must be a pinned git revision.`, 'INVALID_INPUT')\n return result\n}\n\nconst component = (value: unknown, index: number): CompatibilityComponent => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail(`components[${index}] must be an object.`, 'INVALID_INPUT')\n const candidate = value as Record<string, unknown>\n const id = text(candidate['id'], `components[${index}].id`)\n if (!(COMPATIBILITY_COMPONENTS as readonly string[]).includes(id)) fail(`components[${index}].id is invalid.`, 'INVALID_INPUT')\n if (candidate['adapterBoundary'] !== 'real-adapter') fail(`components[${index}] must use the real-adapter boundary.`, 'INVALID_INPUT')\n return {\n id: id as CompatibilityComponentId,\n package: text(candidate['package'], `components[${index}].package`), version: text(candidate['version'], `components[${index}].version`),\n revision: sha(candidate['revision'], `components[${index}].revision`), repository: text(candidate['repository'], `components[${index}].repository`), adapterBoundary: 'real-adapter',\n testCommand: text(candidate['testCommand'], `components[${index}].testCommand`), evalCommand: text(candidate['evalCommand'], `components[${index}].evalCommand`),\n previousVersion: text(candidate['previousVersion'], `components[${index}].previousVersion`), noHarnessBaseline: text(candidate['noHarnessBaseline'], `components[${index}].noHarnessBaseline`),\n migrationEvidence: text(candidate['migrationEvidence'], `components[${index}].migrationEvidence`), rollbackEvidence: text(candidate['rollbackEvidence'], `components[${index}].rollbackEvidence`),\n }\n}\n\nconst body = (value: Record<string, unknown>): Omit<CompatibilityManifest, 'digest'> => {\n const componentsValue = value['components']\n if (!Array.isArray(componentsValue) || !componentsValue.length) fail('components must be a non-empty array.', 'INVALID_INPUT')\n const components = (componentsValue as readonly unknown[]).map(component)\n if (new Set(components.map((item) => item.id)).size !== components.length) fail('component ids must be unique.', 'INVALID_INPUT')\n const missing = COMPATIBILITY_COMPONENTS.filter((id) => !components.some((item) => item.id === id))\n if (missing.length) fail(`components must cover: ${missing.join(', ')}.`, 'INVALID_INPUT')\n const outputs = value['evidenceOutputs']\n if (!Array.isArray(outputs) || !outputs.length) fail('evidenceOutputs must be a non-empty array.', 'INVALID_INPUT')\n return {\n type: 'agentskit-harness-compatibility-manifest', schemaVersion: COMPATIBILITY_SCHEMA_VERSION,\n harnessVersion: text(value['harnessVersion'], 'harnessVersion'), sourceRevision: sha(value['sourceRevision'], 'sourceRevision'), components,\n evidenceOutputs: (outputs as readonly unknown[]).map((item, index) => text(item, `evidenceOutputs[${index}]`)),\n }\n}\n\nexport const createCompatibilityManifest = (input: Omit<CompatibilityManifest, 'type' | 'schemaVersion' | 'digest'>): CompatibilityManifest => {\n const value = body(input as unknown as Record<string, unknown>)\n return { ...value, digest: hashJson(value) }\n}\n\nexport const validateCompatibilityManifest = (value: unknown): CompatibilityManifest => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('Compatibility manifest must be an object.', 'INVALID_INPUT')\n const candidate = value as Record<string, unknown>\n const valueBody = body(candidate)\n if (candidate['type'] !== valueBody.type || candidate['schemaVersion'] !== valueBody.schemaVersion) fail('Compatibility manifest type or schemaVersion is invalid.', 'INVALID_INPUT')\n const digest = text(candidate['digest'], 'digest')\n if (digest !== hashJson(valueBody)) fail('Compatibility manifest digest is invalid.', 'INVALID_INPUT')\n return { ...valueBody, digest }\n}\n\nexport const assessCompatibility = ({ manifest, observations }: { readonly manifest: CompatibilityManifest; readonly observations: readonly CompatibilityObservation[] }): CompatibilityReport => {\n const validated = validateCompatibilityManifest(manifest)\n const expected = new Set(validated.components.map((item) => item.id))\n const seen = new Set<CompatibilityComponentId>()\n const blockers: string[] = []\n observations.forEach((observation) => {\n if (!expected.has(observation.componentId) || seen.has(observation.componentId)) blockers.push(`${observation.componentId}: unexpected or duplicate observation`)\n seen.add(observation.componentId)\n if (observation.status !== 'passed') blockers.push(`${observation.componentId}: ${observation.status} compatibility evidence`)\n if (!observation.evidence) blockers.push(`${observation.componentId}: missing evidence`)\n })\n validated.components.forEach((item) => {\n if (!seen.has(item.id)) blockers.push(`${item.id}: missing observation`)\n const observation = observations.find((candidate) => candidate.componentId === item.id)\n if (observation && observation.previousVersion !== item.previousVersion) blockers.push(`${item.id}: previous version binding mismatch`)\n if (observation && observation.noHarnessBaseline !== item.noHarnessBaseline) blockers.push(`${item.id}: no-Harness baseline binding mismatch`)\n })\n return { status: blockers.length ? 'blocked' : 'passed', componentCount: validated.components.length, observations, blockers }\n}\n","import { fail } from './errors.js'\n\nexport type FailureClass = 'quota' | 'timeout' | 'policy' | 'validation' | 'external' | 'unknown'\n\nexport interface FailureClassification {\n readonly class: FailureClass\n readonly retryable: boolean\n readonly reason: string\n}\n\nexport interface RecoveryPolicy {\n readonly maxAttempts: number\n readonly baseDelayMs: number\n readonly maxDelayMs: number\n readonly timeoutMs?: number\n}\n\nexport interface RecoveryObservation {\n readonly attempt: number\n readonly failure: FailureClassification\n readonly delayMs: number\n}\n\nexport interface RecoveryResult<T> {\n readonly value?: T\n readonly status: 'completed' | 'failed'\n readonly attempts: number\n readonly observations: readonly RecoveryObservation[]\n readonly failure?: FailureClassification\n}\n\nconst positiveInteger = (value: number, label: string): number => {\n if (!Number.isInteger(value) || value < 1) fail(`${label} must be a positive integer.`, 'INVALID_INPUT')\n return value\n}\n\nconst nonNegativeInteger = (value: number, label: string): number => {\n if (!Number.isInteger(value) || value < 0) fail(`${label} must be a non-negative integer.`, 'INVALID_INPUT')\n return value\n}\n\nexport const classifyFailure = (error: unknown): FailureClassification => {\n const value = error as { readonly code?: unknown; readonly message?: unknown }\n const code = typeof value?.code === 'string' ? value.code.toUpperCase() : ''\n const message = typeof value?.message === 'string' ? value.message : String(error)\n const text = `${code} ${message}`.toLowerCase()\n if (/quota|rate.?limit|too many requests|429/.test(text)) return { class: 'quota', retryable: true, reason: message }\n if (/timeout|timed out|deadline/.test(text)) return { class: 'timeout', retryable: true, reason: message }\n if (/policy|forbidden|permission|approval/.test(text)) return { class: 'policy', retryable: false, reason: message }\n if (/invalid|schema|argument|config|validation/.test(text)) return { class: 'validation', retryable: false, reason: message }\n if (/network|connection|econn|503|502|external/.test(text)) return { class: 'external', retryable: true, reason: message }\n return { class: 'unknown', retryable: false, reason: message }\n}\n\nexport const recoveryDelayMs = (attempt: number, policy: Pick<RecoveryPolicy, 'baseDelayMs' | 'maxDelayMs'>): number => {\n positiveInteger(attempt, 'attempt')\n nonNegativeInteger(policy.baseDelayMs, 'baseDelayMs')\n nonNegativeInteger(policy.maxDelayMs, 'maxDelayMs')\n if (policy.maxDelayMs < policy.baseDelayMs) fail('maxDelayMs must be greater than or equal to baseDelayMs.', 'INVALID_INPUT')\n return Math.min(policy.maxDelayMs, policy.baseDelayMs * (2 ** Math.max(0, attempt - 1)))\n}\n\nconst wait = (delayMs: number, sleep: (delayMs: number) => Promise<void>): Promise<void> => delayMs > 0 ? sleep(delayMs) : Promise.resolve()\n\nexport const runWithRecovery = async <T>(operation: (signal: AbortSignal, attempt: number) => Promise<T>, options: RecoveryPolicy & { readonly sleep?: (delayMs: number) => Promise<void>; readonly onObservation?: (observation: RecoveryObservation) => void }): Promise<RecoveryResult<T>> => {\n const maxAttempts = positiveInteger(options.maxAttempts, 'maxAttempts')\n const baseDelayMs = nonNegativeInteger(options.baseDelayMs, 'baseDelayMs')\n const maxDelayMs = nonNegativeInteger(options.maxDelayMs, 'maxDelayMs')\n if (maxDelayMs < baseDelayMs) fail('maxDelayMs must be greater than or equal to baseDelayMs.', 'INVALID_INPUT')\n if (options.timeoutMs !== undefined) positiveInteger(options.timeoutMs, 'timeoutMs')\n const sleep = options.sleep ?? ((delayMs: number) => new Promise<void>((resolve) => setTimeout(resolve, delayMs)))\n const observations: RecoveryObservation[] = []\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n const controller = new AbortController()\n let timer: NodeJS.Timeout | undefined\n try {\n const operationPromise = operation(controller.signal, attempt)\n const value = options.timeoutMs === undefined ? await operationPromise : await Promise.race([\n operationPromise,\n new Promise<never>((_, reject) => { timer = setTimeout(() => { controller.abort(); reject(new Error('operation timed out')) }, options.timeoutMs) }),\n ])\n return { status: 'completed', attempts: attempt, observations, value }\n } catch (error) {\n const failure = classifyFailure(error)\n const delayMs = failure.retryable && attempt < maxAttempts ? recoveryDelayMs(attempt, { baseDelayMs, maxDelayMs }) : 0\n const observation = { attempt, failure, delayMs }\n observations.push(observation)\n options.onObservation?.(observation)\n if (!failure.retryable || attempt >= maxAttempts) return { status: 'failed', attempts: attempt, observations, failure }\n await wait(delayMs, sleep)\n } finally {\n if (timer) clearTimeout(timer)\n }\n }\n return fail('Recovery loop exhausted unexpectedly.', 'HARNESS_ERROR')\n}\n","import { classifyFailure, type FailureClassification } from '../kernel/resilience.js'\nimport { fail } from '../kernel/errors.js'\nimport type { AdapterMetadata, AssuranceLevel } from '../kernel/adapter-contract.js'\n\nexport interface CodingAgentRequest {\n readonly issueRef: string\n readonly prompt: string\n readonly sourceRevision: string\n readonly contextHash?: string\n readonly signal: AbortSignal\n}\n\nexport interface AgentUsage {\n readonly status: 'measured' | 'unknown'\n readonly inputTokens?: number\n readonly outputTokens?: number\n readonly totalTokens?: number\n}\n\nexport interface CodingAgentResult {\n readonly status: 'completed' | 'failed' | 'timeout' | 'cancelled'\n readonly output: Readonly<Record<string, unknown>>\n readonly diff: string\n readonly usage: AgentUsage\n readonly durationMs: number\n readonly failure?: FailureClassification\n readonly metadata: AdapterMetadata\n}\n\nexport interface CodingAgentHandlerResult {\n readonly output: Readonly<Record<string, unknown>>\n readonly diff: string\n readonly usage?: AgentUsage\n}\n\nexport interface CodingAgentAdapter {\n readonly id: string\n readonly version: string\n readonly assurance: AssuranceLevel\n execute(request: Omit<CodingAgentRequest, 'signal'> & { readonly signal?: AbortSignal }): Promise<CodingAgentResult>\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) return fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\nconst duration = (value: number): number => Number.isFinite(value) && value >= 0 ? value : fail('Agent durationMs must be non-negative.', 'INVALID_INPUT')\nconst usage = (value: AgentUsage | undefined): AgentUsage => {\n if (value === undefined) return { status: 'unknown' }\n if (value.status !== 'measured' && value.status !== 'unknown') return fail('Agent usage status is invalid.', 'INVALID_INPUT')\n for (const key of ['inputTokens', 'outputTokens', 'totalTokens'] as const) if (value[key] !== undefined && (!Number.isFinite(value[key]) || value[key]! < 0)) return fail(`Agent usage ${key} must be non-negative.`, 'INVALID_INPUT')\n return value\n}\n\nexport const createCodingAgentAdapter = ({ id, version, assurance = 'contract-tested', timeoutMs = 120_000, execute }: { readonly id: string; readonly version: string; readonly assurance?: AssuranceLevel; readonly timeoutMs?: number; readonly execute: (request: CodingAgentRequest) => Promise<CodingAgentHandlerResult> | CodingAgentHandlerResult }): CodingAgentAdapter => {\n const adapterId = required(id, 'agent.id')\n const adapterVersion = required(version, 'agent.version')\n if (!Number.isInteger(timeoutMs) || timeoutMs < 1) return fail('agent.timeoutMs must be a positive integer.', 'INVALID_INPUT')\n return {\n id: adapterId,\n version: adapterVersion,\n assurance,\n execute: async (request) => {\n const issueRef = required(request.issueRef, 'agent.issueRef')\n const prompt = required(request.prompt, 'agent.prompt')\n const sourceRevision = required(request.sourceRevision, 'agent.sourceRevision')\n const controller = new AbortController()\n const signal = request.signal\n if (signal?.aborted) return { status: 'cancelled', output: {}, diff: '', usage: { status: 'unknown' }, durationMs: 0, failure: { class: 'policy', retryable: false, reason: 'Agent execution was cancelled before start.' }, metadata: { assurance, telemetry: { status: 'measured', durationMs: 0 } } }\n const onAbort = () => controller.abort()\n signal?.addEventListener('abort', onAbort, { once: true })\n const started = Date.now()\n let timer: NodeJS.Timeout | undefined\n let timedOut = false\n try {\n const operation = Promise.resolve(execute({ issueRef, prompt, sourceRevision, ...(request.contextHash ? { contextHash: request.contextHash } : {}), signal: controller.signal }))\n const timeout = new Promise<never>((_, reject) => { timer = setTimeout(() => { timedOut = true; controller.abort(); reject(new Error('agent execution timed out')) }, timeoutMs) })\n const result = await Promise.race([operation, timeout])\n if (!result || typeof result !== 'object' || Array.isArray(result) || typeof result.output !== 'object' || result.output === null || Array.isArray(result.output) || typeof result.diff !== 'string') return fail('Agent result must contain structured output and diff.', 'INVALID_INPUT')\n const measuredUsage = usage(result.usage)\n const durationMs = duration(Date.now() - started)\n return { status: 'completed', output: result.output, diff: result.diff, usage: measuredUsage, durationMs, metadata: { assurance, telemetry: { status: measuredUsage.status, durationMs, ...(measuredUsage.inputTokens === undefined ? {} : { inputTokens: measuredUsage.inputTokens }), ...(measuredUsage.outputTokens === undefined ? {} : { outputTokens: measuredUsage.outputTokens }), ...(measuredUsage.totalTokens === undefined ? {} : { totalTokens: measuredUsage.totalTokens }) } } }\n } catch (error) {\n const failure = timedOut ? { class: 'timeout' as const, retryable: true, reason: 'Agent execution timed out.' } : classifyFailure(error)\n const status = timedOut ? 'timeout' as const : controller.signal.aborted ? 'cancelled' as const : 'failed' as const\n return { status, output: {}, diff: '', usage: { status: 'unknown' }, durationMs: duration(Date.now() - started), failure, metadata: { assurance, telemetry: { status: 'unknown', durationMs: duration(Date.now() - started) } } }\n } finally {\n if (timer) clearTimeout(timer)\n signal?.removeEventListener('abort', onAbort)\n }\n },\n }\n}\n","import { existsSync, mkdtempSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { tmpdir } from 'node:os'\nimport { fail } from '../kernel/errors.js'\nimport { readJson, readRun } from './files.js'\nimport { RUN_STATES } from '../kernel/types.js'\nimport type { BenchmarkBinding, MachineMetrics, RunState, VerificationRun } from '../kernel/types.js'\n\nexport const BENCHMARK_SCHEMA_VERSION = 1 as const\n\nexport type BenchmarkObservationStatus = 'passed' | 'failed' | 'blocked' | 'not-run'\nexport type BenchmarkImprovementDirection = 'improved' | 'regressed' | 'unchanged' | 'unavailable'\n\nexport interface BenchmarkTask {\n readonly id: string\n readonly title: string\n readonly acceptanceCriteria: readonly string[]\n}\n\nexport interface BenchmarkObservation {\n readonly taskId: string\n readonly mode: 'baseline'\n readonly status: BenchmarkObservationStatus\n readonly source: string\n readonly recordedAt: string\n readonly attempts?: number\n readonly durationMs?: number\n readonly reviewMinutes?: number\n readonly escapedIncomplete?: number\n readonly evidence?: readonly BenchmarkObservationEvidence[]\n readonly evidenceDigest?: string\n}\n\nexport interface BenchmarkObservationEvidence {\n readonly criterion: string\n readonly status: BenchmarkObservationStatus\n readonly source: string\n}\n\nexport interface BenchmarkManifest {\n readonly type: 'agentskit-harness-benchmark-manifest'\n readonly schemaVersion: typeof BENCHMARK_SCHEMA_VERSION\n readonly suiteId: string\n readonly name: string\n readonly tasks: readonly BenchmarkTask[]\n readonly observations: readonly BenchmarkObservation[]\n}\n\nexport interface BenchmarkRun {\n readonly runId: string\n readonly state: RunState\n readonly sourceRevision: string\n readonly configHash: string\n readonly contractHash: string\n readonly supersedes?: string\n readonly durationMs?: number\n readonly checks: { readonly total: number; readonly passed: number; readonly failed: number }\n readonly outcomes: { readonly total: number; readonly passed: number; readonly failed: number }\n readonly evidence: { readonly total: number; readonly attached: number }\n readonly escapedIncomplete?: number\n readonly humanApproved: boolean\n readonly humanReviewMinutes?: number\n readonly authorized: boolean\n readonly machine?: MachineMetrics\n readonly benchmark?: BenchmarkBinding\n}\n\nexport interface BenchmarkComparison {\n readonly taskId: string\n readonly title: string\n readonly comparability: 'comparable' | 'missing-baseline' | 'baseline-not-run' | 'baseline-evidence-missing' | 'harness-not-run' | 'harness-not-complete'\n readonly comparable: boolean\n readonly baseline?: BenchmarkObservation\n readonly baselineEvidenceCoverageRate: number | null\n readonly improvement: {\n readonly durationRate: number | null\n readonly duration: BenchmarkImprovementDirection\n readonly attemptsRate: number | null\n readonly attempts: BenchmarkImprovementDirection\n readonly reviewRate: number | null\n readonly review: BenchmarkImprovementDirection\n readonly escapedIncompleteRate: number | null\n readonly escapedIncomplete: BenchmarkImprovementDirection\n }\n readonly harness: {\n readonly attempts: number\n readonly latestState: RunState | 'NOT_RUN'\n readonly latestRunId?: string\n readonly latestDurationMs?: number\n readonly checkPassRate: number | null\n readonly outcomePassRate: number | null\n readonly evidenceCoverageRate: number | null\n readonly humanApproved: boolean\n readonly escapedIncomplete?: number\n readonly humanReviewMinutes?: number\n }\n readonly durationDeltaMs?: number\n readonly attemptDelta?: number\n readonly reviewDeltaMinutes?: number\n readonly escapedIncompleteDelta?: number\n}\n\nexport interface BenchmarkSummary {\n readonly totalRuns: number\n readonly stateCounts: Readonly<Record<RunState, number>>\n readonly completeRuns: number\n readonly retriedRuns: number\n readonly staleRuns: number\n readonly firstAttemptRuns: number\n readonly humanApprovedRuns: number\n readonly authorizedRuns: number\n readonly checkPassRate: number | null\n readonly outcomePassRate: number | null\n readonly evidenceCoverageRate: number | null\n readonly firstAttemptApprovalRate: number | null\n readonly retryRate: number | null\n readonly staleRate: number | null\n readonly averageDurationMs: number | null\n readonly medianDurationMs: number | null\n}\n\nexport interface BenchmarkReport {\n readonly type: 'agentskit-harness-benchmark'\n readonly schemaVersion: typeof BENCHMARK_SCHEMA_VERSION\n readonly stateDir: string\n readonly generatedAt: string\n readonly runs: readonly BenchmarkRun[]\n readonly summary: BenchmarkSummary\n readonly manifest?: { readonly suiteId: string; readonly taskCount: number; readonly baselineCount: number; readonly comparableTaskCount: number }\n readonly comparisons: readonly BenchmarkComparison[]\n}\n\nexport interface BenchmarkObservationInput {\n readonly taskId: string\n readonly status: BenchmarkObservationStatus\n readonly source: string\n readonly recordedAt?: string\n readonly attempts?: number\n readonly durationMs?: number\n readonly reviewMinutes?: number\n readonly escapedIncomplete?: number\n readonly evidence?: readonly BenchmarkObservationEvidence[]\n readonly evidenceDigest?: string\n}\n\nconst percentage = (part: number, total: number): number | null => total ? Number((part / total).toFixed(4)) : null\nconst improvementRate = (baseline: number | undefined, current: number | undefined): number | null => baseline === undefined || current === undefined || baseline === 0 ? null : Number(((baseline - current) / baseline).toFixed(4))\nconst improvementDirection = (rate: number | null): BenchmarkImprovementDirection => rate === null ? 'unavailable' : rate > 0 ? 'improved' : rate < 0 ? 'regressed' : 'unchanged'\nconst count = <T>(items: readonly T[], predicate: (item: T) => boolean): number => items.filter(predicate).length\nconst median = (values: readonly number[]): number | null => {\n if (!values.length) return null\n const sorted = [...values].sort((left, right) => left - right)\n const middle = Math.floor(sorted.length / 2)\n return sorted.length % 2 ? sorted[middle] ?? null : ((sorted[middle - 1] ?? 0) + (sorted[middle] ?? 0)) / 2\n}\nconst reviewMinutes = (run: VerificationRun): number | undefined => {\n if (!run.humanApproval) return undefined\n const reviewStart = run.transitions.find((transition) => transition.to === 'AWAITING_HUMAN_APPROVAL')?.at\n if (!reviewStart) return undefined\n const elapsed = Date.parse(run.humanApproval.at) - Date.parse(reviewStart)\n return Number.isFinite(elapsed) && elapsed >= 0 ? Number((elapsed / 60_000).toFixed(2)) : undefined\n}\n\nconst projectRun = (run: VerificationRun): BenchmarkRun => {\n const checks = { total: run.checks.length, passed: count(run.checks, (check) => check.status === 'passed'), failed: count(run.checks, (check) => check.status === 'failed') }\n const outcomes = { total: run.outcomes.length, passed: count(run.outcomes, (outcome) => outcome.status === 'passed'), failed: count(run.outcomes, (outcome) => outcome.status === 'failed') }\n const evidence = { total: run.checks.length, attached: count(run.checks, (check) => check.evidence !== undefined) }\n const humanReviewMinutes = reviewMinutes(run)\n const escapedIncomplete = run.state === 'COMPLETE' && checks.failed === 0 && outcomes.failed === 0 && evidence.attached === evidence.total ? 0 : undefined\n return { runId: run.runId, state: run.state, sourceRevision: run.sourceRevision, configHash: run.configHash, contractHash: run.contractHash, ...(run.supersedes ? { supersedes: run.supersedes } : {}), ...(run.metrics ? { durationMs: run.metrics.totalDurationMs } : {}), checks, outcomes, evidence, ...(escapedIncomplete === undefined ? {} : { escapedIncomplete }), humanApproved: run.humanApproval !== undefined, ...(humanReviewMinutes === undefined ? {} : { humanReviewMinutes }), authorized: run.authorization !== undefined, ...(run.metrics?.machine ? { machine: run.metrics.machine } : {}), ...(run.benchmark ? { benchmark: run.benchmark } : {}) }\n}\n\nconst summarize = (runs: readonly BenchmarkRun[]): BenchmarkSummary => {\n const stateCounts = Object.fromEntries(RUN_STATES.map((state) => [state, count(runs, (run) => run.state === state)])) as Record<RunState, number>\n const checksTotal = runs.reduce((total, run) => total + run.checks.total, 0)\n const checksPassed = runs.reduce((total, run) => total + run.checks.passed, 0)\n const outcomesTotal = runs.reduce((total, run) => total + run.outcomes.total, 0)\n const outcomesPassed = runs.reduce((total, run) => total + run.outcomes.passed, 0)\n const evidenceTotal = runs.reduce((total, run) => total + run.evidence.total, 0)\n const evidenceAttached = runs.reduce((total, run) => total + run.evidence.attached, 0)\n const firstAttempts = runs.filter((run) => !run.supersedes)\n const durations = runs.flatMap((run) => run.durationMs === undefined ? [] : [run.durationMs])\n return {\n totalRuns: runs.length,\n stateCounts,\n completeRuns: stateCounts.COMPLETE,\n retriedRuns: count(runs, (run) => run.supersedes !== undefined),\n staleRuns: stateCounts.STALE,\n firstAttemptRuns: firstAttempts.length,\n humanApprovedRuns: count(runs, (run) => run.humanApproved),\n authorizedRuns: count(runs, (run) => run.authorized),\n checkPassRate: percentage(checksPassed, checksTotal),\n outcomePassRate: percentage(outcomesPassed, outcomesTotal),\n evidenceCoverageRate: percentage(evidenceAttached, evidenceTotal),\n firstAttemptApprovalRate: percentage(count(firstAttempts, (run) => run.humanApproved), firstAttempts.length),\n retryRate: percentage(count(runs, (run) => run.supersedes !== undefined), runs.length),\n staleRate: percentage(stateCounts.STALE, runs.length),\n averageDurationMs: durations.length ? Math.round(durations.reduce((total, duration) => total + duration, 0) / durations.length) : null,\n medianDurationMs: median(durations),\n }\n}\n\nconst readRuns = (stateDir: string): VerificationRun[] => {\n const runsDir = join(stateDir, 'runs')\n if (!existsSync(runsDir)) return []\n return readdirSync(runsDir, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => {\n try {\n const candidate = readJson(join(runsDir, entry.name, 'run.json')) as { readonly type?: unknown }\n return candidate.type === 'agentskit-harness-run' ? readRun(stateDir, entry.name) : undefined\n } catch (error) { return fail(`Benchmark could not read run ${entry.name}: ${error instanceof Error ? error.message : String(error)}`, 'HARNESS_ERROR') }\n }).filter((run): run is VerificationRun => run !== undefined)\n}\n\nconst nonEmptyString = (value: unknown, label: string): string => {\n if (typeof value !== 'string') return fail(`${label} must be a non-empty string.`, 'INVALID_CONFIG')\n const result = value.trim()\n if (!result) return fail(`${label} must be a non-empty string.`, 'INVALID_CONFIG')\n return result\n}\n\nconst sha256 = (value: unknown, label: string): string | undefined => {\n if (value === undefined) return undefined\n const result = nonEmptyString(value, label)\n if (!/^[a-f0-9]{64}$/.test(result)) return fail(`${label} must be a lowercase SHA-256 digest.`, 'INVALID_CONFIG')\n return result\n}\n\nconst stringList = (value: unknown, label: string): string[] => {\n if (!Array.isArray(value)) return fail(`${label} must be a non-empty string array.`, 'INVALID_CONFIG')\n const items = value as unknown[]\n if (!items.length || !items.every((item: unknown) => typeof item === 'string' && Boolean(item.trim()))) return fail(`${label} must be a non-empty string array.`, 'INVALID_CONFIG')\n return items.map((item: unknown) => String(item).trim())\n}\n\nconst nonNegativeNumber = (value: unknown, label: string): number | undefined => {\n if (value === undefined) return undefined\n if (typeof value !== 'number') return fail(`${label} must be a non-negative number.`, 'INVALID_CONFIG')\n if (!Number.isFinite(value) || value < 0) return fail(`${label} must be a non-negative number.`, 'INVALID_CONFIG')\n const result = value\n return result\n}\n\nconst nonNegativeInteger = (value: unknown, label: string): number | undefined => {\n const result = nonNegativeNumber(value, label)\n if (result !== undefined && !Number.isInteger(result)) return fail(`${label} must be an integer.`, 'INVALID_CONFIG')\n return result\n}\n\nconst timestamp = (value: unknown, label: string): string => {\n const result = nonEmptyString(value, label)\n if (!Number.isFinite(Date.parse(result))) return fail(`${label} must be a valid timestamp.`, 'INVALID_CONFIG')\n return result\n}\n\nexport const validateBenchmarkManifest = (value: unknown): BenchmarkManifest => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('benchmark manifest must be an object.', 'INVALID_CONFIG')\n const raw = value as Record<string, unknown>\n if (raw['type'] !== 'agentskit-harness-benchmark-manifest' || raw['schemaVersion'] !== BENCHMARK_SCHEMA_VERSION) fail('benchmark manifest type or schemaVersion is invalid.', 'INVALID_CONFIG')\n const rawTasks = Array.isArray(raw['tasks']) && raw['tasks'].length ? raw['tasks'] : fail('benchmark manifest tasks must be non-empty.', 'INVALID_CONFIG')\n const tasks = rawTasks.map((item, index) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) fail(`benchmark.tasks[${index}] must be an object.`, 'INVALID_CONFIG')\n const task = item as Record<string, unknown>\n return { id: nonEmptyString(task['id'], `benchmark.tasks[${index}].id`), title: nonEmptyString(task['title'], `benchmark.tasks[${index}].title`), acceptanceCriteria: stringList(task['acceptanceCriteria'], `benchmark.tasks[${index}].acceptanceCriteria`) }\n })\n if (new Set(tasks.map((task) => task.id)).size !== tasks.length) fail('benchmark task ids must be unique.', 'INVALID_CONFIG')\n const taskIds = new Set(tasks.map((task) => task.id))\n const rawObservations = raw['observations'] === undefined ? [] : Array.isArray(raw['observations']) ? raw['observations'] : fail('benchmark.observations must be an array.', 'INVALID_CONFIG')\n const observations = rawObservations.map((item, index) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) fail(`benchmark.observations[${index}] must be an object.`, 'INVALID_CONFIG')\n const observation = item as Record<string, unknown>\n const status = observation['status']\n if (!['passed', 'failed', 'blocked', 'not-run'].includes(String(status))) fail(`benchmark.observations[${index}].status is invalid.`, 'INVALID_CONFIG')\n const taskId = nonEmptyString(observation['taskId'], `benchmark.observations[${index}].taskId`)\n if (!taskIds.has(taskId)) fail(`benchmark observation references unknown task: ${taskId}.`, 'INVALID_CONFIG')\n const task = tasks.find((candidate) => candidate.id === taskId) ?? fail(`benchmark observation references unknown task: ${taskId}.`, 'INVALID_CONFIG')\n const attempts = nonNegativeInteger(observation['attempts'], `benchmark.observations[${index}].attempts`)\n const durationMs = nonNegativeNumber(observation['durationMs'], `benchmark.observations[${index}].durationMs`)\n const reviewMinutes = nonNegativeNumber(observation['reviewMinutes'], `benchmark.observations[${index}].reviewMinutes`)\n const escapedIncomplete = nonNegativeInteger(observation['escapedIncomplete'], `benchmark.observations[${index}].escapedIncomplete`)\n const evidenceDigest = sha256(observation['evidenceDigest'], `benchmark.observations[${index}].evidenceDigest`)\n const rawEvidence = observation['evidence'] === undefined ? undefined : Array.isArray(observation['evidence']) ? observation['evidence'] : fail(`benchmark.observations[${index}].evidence must be an array.`, 'INVALID_CONFIG')\n const evidence = rawEvidence?.map((item, evidenceIndex) => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) fail(`benchmark.observations[${index}].evidence[${evidenceIndex}] must be an object.`, 'INVALID_CONFIG')\n const entry = item as Record<string, unknown>\n const criterion = nonEmptyString(entry['criterion'], `benchmark.observations[${index}].evidence[${evidenceIndex}].criterion`)\n if (!task.acceptanceCriteria.includes(criterion)) fail(`benchmark evidence references unknown criterion: ${criterion}.`, 'INVALID_CONFIG')\n const evidenceStatus = entry['status']\n if (!['passed', 'failed', 'blocked', 'not-run'].includes(String(evidenceStatus))) fail(`benchmark.observations[${index}].evidence[${evidenceIndex}].status is invalid.`, 'INVALID_CONFIG')\n return { criterion, status: evidenceStatus as BenchmarkObservationStatus, source: nonEmptyString(entry['source'], `benchmark.observations[${index}].evidence[${evidenceIndex}].source`) }\n })\n if (evidence && new Set(evidence.map((entry) => entry.criterion)).size !== evidence.length) fail(`benchmark.observations[${index}].evidence criteria must be unique.`, 'INVALID_CONFIG')\n return { taskId, mode: 'baseline' as const, status: status as BenchmarkObservationStatus, source: nonEmptyString(observation['source'], `benchmark.observations[${index}].source`), recordedAt: timestamp(observation['recordedAt'], `benchmark.observations[${index}].recordedAt`), ...(attempts === undefined ? {} : { attempts }), ...(durationMs === undefined ? {} : { durationMs }), ...(reviewMinutes === undefined ? {} : { reviewMinutes }), ...(escapedIncomplete === undefined ? {} : { escapedIncomplete }), ...(evidence === undefined ? {} : { evidence }), ...(evidenceDigest === undefined ? {} : { evidenceDigest }) }\n })\n if (new Set(observations.map((observation) => observation.taskId)).size !== observations.length) fail('benchmark allows at most one baseline observation per task.', 'INVALID_CONFIG')\n return { type: 'agentskit-harness-benchmark-manifest', schemaVersion: BENCHMARK_SCHEMA_VERSION, suiteId: nonEmptyString(raw['suiteId'], 'benchmark.suiteId'), name: nonEmptyString(raw['name'], 'benchmark.name'), tasks, observations }\n}\n\nexport const loadBenchmarkManifest = (path: string): BenchmarkManifest => {\n try { return validateBenchmarkManifest(JSON.parse(readFileSync(path, 'utf8')) as unknown) } catch (error) { if (error instanceof SyntaxError) return fail(`Invalid benchmark manifest JSON: ${error.message}`, 'INVALID_CONFIG'); throw error }\n}\n\nexport const recordBenchmarkObservation = (path: string, input: BenchmarkObservationInput): BenchmarkManifest => {\n const originalContent = readFileSync(path, 'utf8')\n const manifest = loadBenchmarkManifest(path)\n const taskId = nonEmptyString(input.taskId, 'benchmark observation.taskId')\n if (!manifest.tasks.some((task) => task.id === taskId)) fail(`benchmark observation references unknown task: ${taskId}.`, 'INVALID_INPUT')\n if (manifest.observations.some((observation) => observation.taskId === taskId)) fail(`benchmark already has an observation for task: ${taskId}.`, 'INVALID_INPUT')\n const observation = validateBenchmarkManifest({\n ...manifest,\n observations: [...manifest.observations, {\n taskId,\n mode: 'baseline',\n status: input.status,\n source: input.source,\n recordedAt: input.recordedAt ?? new Date().toISOString(),\n ...(input.attempts === undefined ? {} : { attempts: input.attempts }),\n ...(input.durationMs === undefined ? {} : { durationMs: input.durationMs }),\n ...(input.reviewMinutes === undefined ? {} : { reviewMinutes: input.reviewMinutes }),\n ...(input.escapedIncomplete === undefined ? {} : { escapedIncomplete: input.escapedIncomplete }),\n ...(input.evidence === undefined ? {} : { evidence: input.evidence }),\n ...(input.evidenceDigest === undefined ? {} : { evidenceDigest: input.evidenceDigest }),\n }],\n })\n const temporaryRoot = mkdtempSync(join(tmpdir(), 'agentskit-harness-baseline-'))\n const temporaryPath = join(temporaryRoot, 'manifest.json')\n try {\n writeFileSync(temporaryPath, `${JSON.stringify(observation, null, 2)}\\n`, 'utf8')\n if (readFileSync(path, 'utf8') !== originalContent) fail('benchmark manifest changed while recording an observation.', 'STALE')\n renameSync(temporaryPath, path)\n } finally {\n rmSync(temporaryRoot, { recursive: true, force: true })\n }\n return observation\n}\n\nconst comparisons = (runs: readonly BenchmarkRun[], manifest: BenchmarkManifest): readonly BenchmarkComparison[] => manifest.tasks.map((task) => {\n const taskRuns = runs.filter((run) => run.benchmark?.suiteId === manifest.suiteId && run.benchmark.taskId === task.id)\n const latest = taskRuns.at(-1)\n const baseline = manifest.observations.find((observation) => observation.taskId === task.id)\n const coveredCriteria = new Set((baseline?.evidence ?? []).map((entry) => entry.criterion))\n const baselineEvidenceCoverageRate = baseline ? percentage(coveredCriteria.size, task.acceptanceCriteria.length) : null\n const baselineEvidenceComplete = baselineEvidenceCoverageRate === 1\n const comparable = baseline !== undefined && baseline.status !== 'not-run' && baselineEvidenceComplete && latest?.state === 'COMPLETE'\n const comparability = comparable ? 'comparable' : baseline === undefined ? 'missing-baseline' : baseline.status === 'not-run' ? 'baseline-not-run' : !baselineEvidenceComplete ? 'baseline-evidence-missing' : latest === undefined ? 'harness-not-run' : 'harness-not-complete'\n const durationRate = comparable ? improvementRate(baseline?.durationMs, latest?.durationMs) : null\n const attemptsRate = comparable ? improvementRate(baseline?.attempts, taskRuns.length) : null\n const reviewRate = comparable ? improvementRate(baseline?.reviewMinutes, latest?.humanReviewMinutes) : null\n const escapedIncompleteRate = comparable ? improvementRate(baseline?.escapedIncomplete, latest?.escapedIncomplete) : null\n return { taskId: task.id, title: task.title, comparability, comparable, baselineEvidenceCoverageRate, improvement: { durationRate, duration: improvementDirection(durationRate), attemptsRate, attempts: improvementDirection(attemptsRate), reviewRate, review: improvementDirection(reviewRate), escapedIncompleteRate, escapedIncomplete: improvementDirection(escapedIncompleteRate) }, ...(baseline ? { baseline } : {}), harness: { attempts: taskRuns.length, latestState: latest?.state ?? 'NOT_RUN', ...(latest ? { latestRunId: latest.runId } : {}), ...(latest?.durationMs === undefined ? {} : { latestDurationMs: latest.durationMs }), checkPassRate: latest ? percentage(latest.checks.passed, latest.checks.total) : null, outcomePassRate: latest ? percentage(latest.outcomes.passed, latest.outcomes.total) : null, evidenceCoverageRate: latest ? percentage(latest.evidence.attached, latest.evidence.total) : null, ...(latest?.escapedIncomplete === undefined ? {} : { escapedIncomplete: latest.escapedIncomplete }), ...(latest?.humanReviewMinutes === undefined ? {} : { humanReviewMinutes: latest.humanReviewMinutes }), humanApproved: latest?.humanApproved ?? false }, ...(comparable && baseline?.durationMs !== undefined && latest?.durationMs !== undefined ? { durationDeltaMs: latest.durationMs - baseline.durationMs } : {}), ...(comparable && baseline?.attempts !== undefined ? { attemptDelta: taskRuns.length - baseline.attempts } : {}), ...(comparable && baseline?.reviewMinutes !== undefined && latest?.humanReviewMinutes !== undefined ? { reviewDeltaMinutes: latest.humanReviewMinutes - baseline.reviewMinutes } : {}), ...(comparable && baseline?.escapedIncomplete !== undefined && latest?.escapedIncomplete !== undefined ? { escapedIncompleteDelta: latest.escapedIncomplete - baseline.escapedIncomplete } : {}) }\n})\n\nexport const benchmarkRuns = (stateDir: string, manifest?: BenchmarkManifest): BenchmarkReport => {\n const runs = readRuns(stateDir).map(projectRun).sort((left, right) => left.runId.localeCompare(right.runId))\n const reportComparisons = manifest ? comparisons(runs, manifest) : []\n return { type: 'agentskit-harness-benchmark', schemaVersion: BENCHMARK_SCHEMA_VERSION, stateDir, generatedAt: new Date().toISOString(), runs, summary: summarize(runs), comparisons: reportComparisons, ...(manifest ? { manifest: { suiteId: manifest.suiteId, taskCount: manifest.tasks.length, baselineCount: manifest.observations.length, comparableTaskCount: reportComparisons.filter((comparison) => comparison.comparable).length } } : {}) }\n}\n","import { randomUUID } from 'node:crypto'\nimport { FileEventStore } from '../kernel/events.js'\nimport { fail } from '../kernel/errors.js'\nimport type { HarnessEvent, HarnessEventInput, HarnessEventPayloads } from '../kernel/events.js'\nimport type { PolicyGate } from '../kernel/policy.js'\nimport type { ToolExecutionResult, ToolRuntime } from './runtime.js'\nimport type { VerificationRun } from '../kernel/types.js'\n\nexport interface AgentAdapter {\n readonly id: string\n readonly version: string\n readonly capabilities: readonly string[]\n}\n\nexport interface AgentSessionOptions {\n readonly stateDir: string\n readonly run: VerificationRun\n readonly adapter: AgentAdapter\n readonly policy: PolicyGate\n readonly runtime: ToolRuntime\n readonly sessionId?: string\n readonly resume?: boolean\n}\n\nexport interface SessionRecorder {\n readonly sessionId: string\n startTurn(inputHash: string, turnId?: string): HarnessEvent<'agent.turn.started'>\n requestTool(input: { readonly turnId: string; readonly toolId: string; readonly argumentsHash: string; readonly actionId?: string }): HarnessEvent<'tool.requested'> | HarnessEvent<'tool.approval.requested'>\n approveTool(input: { readonly actionId: string; readonly decision: 'approved' | 'rejected'; readonly actor?: 'human' }): HarnessEvent<'tool.requested'> | HarnessEvent<'tool.blocked'>\n recoverTool(input: { readonly actionId: string; readonly decision: 'retry' | 'abandon'; readonly actor?: 'human' }): HarnessEvent<'tool.recovery.recorded'> | HarnessEvent<'tool.blocked'>\n completeTool(input: { readonly actionId: string; readonly resultHash: string; readonly durationMs: number; readonly runtimeEvidence?: ToolExecutionResult['runtimeEvidence'] }): HarnessEvent<'tool.completed'>\n failTool(input: { readonly actionId: string; readonly errorCode: string; readonly retryable: boolean; readonly durationMs: number; readonly runtimeEvidence?: ToolExecutionResult['runtimeEvidence'] }): HarnessEvent<'tool.failed'>\n executeTool(input: { readonly actionId: string; readonly arguments: unknown }): Promise<ToolExecutionResult>\n end(status: 'completed' | 'failed' | 'cancelled'): HarnessEvent<'session.ended'>\n}\n\ntype SessionEventType = 'session.started' | 'session.resumed' | 'agent.turn.started' | 'policy.evaluated' | 'tool.approval.requested' | 'tool.approval.recorded' | 'tool.requested' | 'tool.execution.started' | 'tool.recovery.recorded' | 'tool.blocked' | 'tool.completed' | 'tool.failed' | 'session.ended'\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst duration = (value: number): number => {\n if (!Number.isFinite(value) || value < 0) fail('Tool durationMs must be a non-negative number.', 'INVALID_INPUT')\n return value\n}\n\nexport const createSessionRecorder = ({ stateDir, run, adapter, policy, runtime, sessionId = randomUUID(), resume = false }: AgentSessionOptions): SessionRecorder => {\n if (run.state !== 'IMPLEMENTING') fail(`Agent sessions can only start during IMPLEMENTING, not ${run.state}.`, 'INVALID_STATE')\n const id = required(sessionId, 'sessionId')\n const adapterId = required(adapter.id, 'adapter.id')\n const adapterVersion = required(adapter.version, 'adapter.version')\n if (!policy || typeof policy.evaluate !== 'function') fail('policy.evaluate is required.', 'INVALID_INPUT')\n if (!runtime || typeof runtime.execute !== 'function') fail('runtime.execute is required.', 'INVALID_INPUT')\n if (!Array.isArray(adapter.capabilities) || adapter.capabilities.some((capability) => typeof capability !== 'string' || !capability.trim())) fail('adapter.capabilities must contain non-empty strings.', 'INVALID_INPUT')\n const store = new FileEventStore(stateDir)\n const append = <K extends SessionEventType>(type: K, payload: HarnessEventPayloads[K]): HarnessEvent<K> => store.append({ runId: run.runId, sourceRevision: run.sourceRevision, configHash: run.configHash, sessionId: id, type, payload } as unknown as HarnessEventInput<K>)\n const turns = new Set<string>()\n const actions = new Set<string>()\n const pending = new Map<string, { readonly turnId: string; readonly toolId: string; readonly argumentsHash: string; executionStarted: boolean }>()\n const approvals = new Map<string, { readonly turnId: string; readonly toolId: string; readonly argumentsHash: string; readonly policyId: string; readonly reason: string }>()\n const released = new Map<string, { readonly turnId: string; readonly toolId: string; readonly argumentsHash: string; executionStarted: boolean }>()\n const attempts = new Map<string, number>()\n const executing = new Set<string>()\n let ended = false\n if (resume) {\n const prior = store.read(run.runId).filter((event) => event.sessionId === id)\n if (!prior.some((event) => event.type === 'session.started')) fail(`Session does not exist: ${id}.`, 'INVALID_STATE')\n if (prior.some((event) => event.type === 'session.ended')) fail(`Session has already ended: ${id}.`, 'INVALID_STATE')\n for (const event of prior) {\n if (event.type === 'agent.turn.started') turns.add(event.payload.turnId)\n if (event.type === 'tool.approval.requested') { actions.add(event.payload.actionId); approvals.set(event.payload.actionId, { turnId: event.payload.turnId, toolId: event.payload.toolId, argumentsHash: event.payload.argumentsHash, policyId: event.payload.policyId, reason: event.payload.reason }) }\n if (event.type === 'tool.approval.recorded') { approvals.delete(event.payload.actionId); if (event.payload.decision === 'approved') released.set(event.payload.actionId, { turnId: event.payload.turnId, toolId: event.payload.toolId, argumentsHash: event.payload.argumentsHash, executionStarted: false }) }\n if (event.type === 'tool.requested') { actions.add(event.payload.actionId); pending.set(event.payload.actionId, { turnId: event.payload.turnId, toolId: event.payload.toolId, argumentsHash: event.payload.argumentsHash, executionStarted: false }); released.delete(event.payload.actionId) }\n if (event.type === 'tool.execution.started') { const action = pending.get(event.payload.actionId); if (action) action.executionStarted = true; attempts.set(event.payload.actionId, event.payload.attempt) }\n if (event.type === 'tool.recovery.recorded' && event.payload.decision === 'retry') { const action = pending.get(event.payload.actionId); if (action) action.executionStarted = false }\n if (event.type === 'tool.completed' || event.type === 'tool.failed' || event.type === 'tool.blocked') pending.delete(event.payload.actionId)\n }\n for (const [actionId, action] of released) if (!pending.has(actionId)) pending.set(actionId, action)\n }\n const open = (): void => { if (ended) fail('Session has already ended.', 'INVALID_STATE') }\n const complete = (input: { readonly actionId: string; readonly resultHash: string; readonly durationMs: number; readonly runtimeEvidence?: ToolExecutionResult['runtimeEvidence'] }): HarnessEvent<'tool.completed'> => { open(); const actionId = required(input.actionId, 'actionId'); if (!pending.has(actionId)) fail(`Tool action is not pending: ${actionId}.`, 'INVALID_STATE'); const event = append('tool.completed', { actionId, resultHash: required(input.resultHash, 'resultHash'), durationMs: duration(input.durationMs), ...(input.runtimeEvidence ? { runtimeEvidence: input.runtimeEvidence } : {}) }); pending.delete(actionId); return event }\n const failAction = (input: { readonly actionId: string; readonly errorCode: string; readonly retryable: boolean; readonly durationMs: number; readonly runtimeEvidence?: ToolExecutionResult['runtimeEvidence'] }): HarnessEvent<'tool.failed'> => { open(); const actionId = required(input.actionId, 'actionId'); if (!pending.has(actionId)) fail(`Tool action is not pending: ${actionId}.`, 'INVALID_STATE'); if (typeof input.retryable !== 'boolean') fail('retryable must be boolean.', 'INVALID_INPUT'); const event = append('tool.failed', { actionId, errorCode: required(input.errorCode, 'errorCode'), retryable: input.retryable, durationMs: duration(input.durationMs), ...(input.runtimeEvidence ? { runtimeEvidence: input.runtimeEvidence } : {}) }); pending.delete(actionId); return event }\n const recorder: SessionRecorder = {\n sessionId: id,\n startTurn: (inputHash, turnId = randomUUID()) => { open(); const turn = required(turnId, 'turnId'); if (turns.has(turn)) fail(`Turn already exists: ${turn}.`, 'INVALID_STATE'); const event = append('agent.turn.started', { turnId: turn, inputHash: required(inputHash, 'inputHash') }); turns.add(turn); return event },\n requestTool: (input): HarnessEvent<'tool.requested'> | HarnessEvent<'tool.approval.requested'> => { open(); const turnId = required(input.turnId, 'turnId'); if (!turns.has(turnId)) fail(`Turn does not exist: ${turnId}.`, 'INVALID_STATE'); const actionId = required(input.actionId ?? randomUUID(), 'actionId'); if (actions.has(actionId)) fail(`Tool action already exists: ${actionId}.`, 'INVALID_STATE'); const toolId = required(input.toolId, 'toolId'); const argumentsHash = required(input.argumentsHash, 'argumentsHash'); const decision = policy.evaluate({ actionId, turnId, toolId, argumentsHash }); if (!decision || (decision.decision !== 'allow' && decision.decision !== 'block' && decision.decision !== 'approve')) fail('Policy decision is invalid.', 'HARNESS_ERROR'); const policyId = required(decision.policyId, 'policyId'); const reason = required(decision.reason, 'policy reason'); append('policy.evaluated', { actionId, turnId, toolId, decision: decision.decision, policyId, reason }); actions.add(actionId); if (decision.decision === 'block') { append('tool.blocked', { turnId, actionId, toolId, policyId, reason }); fail(`Tool action blocked by policy: ${policyId}.`, 'POLICY_BLOCKED') } if (decision.decision === 'approve') { const event = append('tool.approval.requested', { turnId, actionId, toolId, argumentsHash, policyId, reason }); approvals.set(actionId, { turnId, toolId, argumentsHash, policyId, reason }); return event } const event = append('tool.requested', { turnId, actionId, toolId, argumentsHash }); pending.set(actionId, { turnId, toolId, argumentsHash, executionStarted: false }); return event },\n approveTool: (input) => { open(); const actionId = required(input.actionId, 'actionId'); const approval = approvals.get(actionId) ?? fail(`Tool action is not awaiting human approval: ${actionId}.`, 'INVALID_STATE'); if (input.actor !== undefined && input.actor !== 'human') fail('Tool approval requires a human actor.', 'HUMAN_APPROVAL_REQUIRED'); const decision = input.decision; if (decision !== 'approved' && decision !== 'rejected') fail('Tool approval decision is invalid.', 'INVALID_INPUT'); append('tool.approval.recorded', { turnId: approval.turnId, actionId, toolId: approval.toolId, argumentsHash: approval.argumentsHash, decision, actor: 'human', policyId: approval.policyId, reason: approval.reason }); approvals.delete(actionId); if (decision === 'rejected') return append('tool.blocked', { turnId: approval.turnId, actionId, toolId: approval.toolId, policyId: approval.policyId, reason: 'Human rejected the tool action.' }); const event = append('tool.requested', { turnId: approval.turnId, actionId, toolId: approval.toolId, argumentsHash: approval.argumentsHash }); pending.set(actionId, { turnId: approval.turnId, toolId: approval.toolId, argumentsHash: approval.argumentsHash, executionStarted: false }); return event },\n recoverTool: (input) => { open(); const actionId = required(input.actionId, 'actionId'); const action = pending.get(actionId) ?? fail(`Tool action is not pending: ${actionId}.`, 'INVALID_STATE'); if (!action.executionStarted) fail(`Tool action does not require recovery: ${actionId}.`, 'INVALID_STATE'); if (input.actor !== undefined && input.actor !== 'human') fail('Tool recovery requires a human actor.', 'HUMAN_APPROVAL_REQUIRED'); if (input.decision !== 'retry' && input.decision !== 'abandon') fail('Tool recovery decision is invalid.', 'INVALID_INPUT'); const reason = input.decision === 'retry' ? 'Human authorized a retry after interruption.' : 'Human abandoned the interrupted tool action.'; const recovery = append('tool.recovery.recorded', { turnId: action.turnId, actionId, toolId: action.toolId, decision: input.decision, actor: 'human', reason }); if (input.decision === 'retry') { action.executionStarted = false; return recovery } pending.delete(actionId); return append('tool.blocked', { turnId: action.turnId, actionId, toolId: action.toolId, policyId: 'recovery', reason }) },\n completeTool: complete,\n failTool: failAction,\n executeTool: async (input) => { open(); const actionId = required(input.actionId, 'actionId'); const action = pending.get(actionId) ?? fail(`Tool action is not pending: ${actionId}.`, 'INVALID_STATE'); if (action.executionStarted) fail(`Tool action requires human recovery decision: ${actionId}.`, 'HUMAN_APPROVAL_REQUIRED'); if (executing.has(actionId)) fail(`Tool action is already executing: ${actionId}.`, 'INVALID_STATE'); executing.add(actionId); action.executionStarted = true; const attempt = (attempts.get(actionId) ?? 0) + 1; attempts.set(actionId, attempt); append('tool.execution.started', { actionId, turnId: action.turnId, toolId: action.toolId, attempt }); try { const result = await runtime.execute({ actionId, turnId: action.turnId, toolId: action.toolId, argumentsHash: action.argumentsHash, arguments: input.arguments }); if (result.status === 'completed') { complete({ actionId, resultHash: result.resultHash, durationMs: result.durationMs, runtimeEvidence: result.runtimeEvidence }); return result } if (result.status === 'failed') { failAction({ actionId, errorCode: result.errorCode, retryable: result.retryable, durationMs: result.durationMs, runtimeEvidence: result.runtimeEvidence }); return result } return fail('Runtime returned an invalid execution result.', 'HARNESS_ERROR') } catch { const result = { status: 'failed' as const, errorCode: 'RUNTIME_ERROR', retryable: true, durationMs: 0 }; if (pending.has(actionId)) failAction({ actionId, ...result }); return result } finally { executing.delete(actionId) } },\n end: (status) => { open(); if (!['completed', 'failed', 'cancelled'].includes(status)) fail('Session status is invalid.', 'INVALID_INPUT'); if (pending.size) fail('Session cannot end while tool actions are pending.', 'INVALID_STATE'); if (approvals.size) fail('Session cannot end while tool approvals are pending.', 'HUMAN_APPROVAL_REQUIRED'); const event = append('session.ended', { status }); ended = true; return event },\n }\n if (resume) append('session.resumed', { recovery: 'event-log' })\n else append('session.started', { adapterId, adapterVersion, capabilities: adapter.capabilities.map((capability) => capability.trim()) })\n return recorder\n}\n","import { fail } from './errors.js'\n\nexport interface PolicyRule {\n readonly id: string\n readonly effect: 'allow' | 'block' | 'approve'\n readonly toolIds: readonly string[]\n readonly reason: string\n}\n\nexport interface PolicyRequest {\n readonly actionId: string\n readonly turnId: string\n readonly toolId: string\n readonly argumentsHash: string\n}\n\nexport interface PolicyDecision {\n readonly decision: 'allow' | 'block' | 'approve'\n readonly policyId: string\n readonly reason: string\n}\n\nexport interface PolicyGate {\n evaluate(request: PolicyRequest): PolicyDecision\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nexport const createPolicyGate = ({ rules }: { readonly rules: readonly PolicyRule[] }): PolicyGate => {\n if (!Array.isArray(rules)) fail('Policy rules must be an array.', 'INVALID_INPUT')\n const normalized = rules.map((rule, index) => {\n if (typeof rule !== 'object' || rule === null || Array.isArray(rule)) fail(`rules[${index}] must be an object.`, 'INVALID_INPUT')\n const id = required(rule.id, `rules[${index}].id`)\n if (rule.effect !== 'allow' && rule.effect !== 'block' && rule.effect !== 'approve') fail(`rules[${index}].effect is invalid.`, 'INVALID_INPUT')\n if (!Array.isArray(rule.toolIds) || !rule.toolIds.length || rule.toolIds.some((toolId) => typeof toolId !== 'string' || !toolId.trim())) fail(`rules[${index}].toolIds must contain non-empty strings.`, 'INVALID_INPUT')\n return { id, effect: rule.effect, toolIds: rule.toolIds.map((toolId) => required(toolId, `rules[${index}].toolIds`)), reason: required(rule.reason, `rules[${index}].reason`) }\n })\n if (new Set(normalized.map((rule) => rule.id)).size !== normalized.length) fail('Policy rules must have unique ids.', 'INVALID_INPUT')\n return {\n evaluate: (request) => {\n if (typeof request !== 'object' || request === null || Array.isArray(request)) fail('Policy request must be an object.', 'INVALID_INPUT')\n required(request.actionId, 'request.actionId')\n required(request.turnId, 'request.turnId')\n const toolId = required(request.toolId, 'request.toolId')\n required(request.argumentsHash, 'request.argumentsHash')\n const rule = normalized.find((candidate) => candidate.toolIds.includes(toolId))\n return rule ? { decision: rule.effect, policyId: rule.id, reason: rule.reason } : { decision: 'block', policyId: 'default-deny', reason: `No policy rule allows tool: ${toolId}.` }\n },\n }\n}\n","import { execFile, spawn, type ChildProcessWithoutNullStreams } from 'node:child_process'\nimport { promisify } from 'node:util'\nimport { hashJson } from '../kernel/hash.js'\nimport { fail } from '../kernel/errors.js'\nimport type { RuntimeConfig } from '../kernel/types.js'\nimport type { AdapterTelemetry, AssuranceLevel } from '../kernel/adapter-contract.js'\n\nexport interface ToolExecutionRequest {\n readonly actionId: string\n readonly turnId: string\n readonly toolId: string\n readonly argumentsHash: string\n readonly arguments: unknown\n readonly signal: AbortSignal\n}\n\nexport interface ToolDefinition {\n readonly toolId: string\n readonly execute: (request: ToolExecutionRequest) => Promise<unknown> | unknown\n}\n\nexport interface ToolRuntime {\n readonly assurance?: AssuranceLevel\n readonly isolation?: 'none' | 'sandboxed'\n readonly telemetry?: () => AdapterTelemetry\n execute(request: Omit<ToolExecutionRequest, 'signal'>): Promise<ToolExecutionResult>\n}\n\nexport interface ProcessToolDefinition {\n readonly toolId: string\n readonly command: string\n readonly args?: readonly string[]\n readonly cwd?: string\n readonly env?: Readonly<Record<string, string>>\n}\n\nexport interface DockerMount {\n readonly source: string\n readonly target: string\n readonly readOnly?: boolean\n}\n\nexport interface DockerToolDefinition {\n readonly toolId: string\n readonly image: string\n readonly command: readonly string[]\n readonly args?: readonly string[]\n readonly cwd?: string\n readonly env?: Readonly<Record<string, string>>\n readonly mounts?: readonly DockerMount[]\n}\n\nexport interface DockerRuntimeEvidence {\n readonly provider: 'docker'\n readonly profileHash: string\n readonly image: string\n readonly imageDigest?: string\n readonly network: 'none'\n readonly readOnlyRootFilesystem: true\n readonly noNewPrivileges: true\n readonly capabilities: 'drop-all'\n readonly user: string\n readonly memoryLimit: string\n readonly cpus: string\n readonly pidsLimit: number\n}\n\nexport const createConfiguredToolRuntime = ({ runtime, process, docker }: { readonly runtime: RuntimeConfig; readonly process: Parameters<typeof createProcessToolRuntime>[0]; readonly docker: Parameters<typeof createDockerToolRuntime>[0] }): ToolRuntime => runtime.kind === 'docker' ? createDockerToolRuntime(docker) : createProcessToolRuntime(process)\n\nexport type ToolExecutionResult =\n | { readonly status: 'completed'; readonly resultHash: string; readonly durationMs: number; readonly runtimeEvidence?: DockerRuntimeEvidence }\n | { readonly status: 'failed'; readonly errorCode: string; readonly retryable: boolean; readonly durationMs: number; readonly runtimeEvidence?: DockerRuntimeEvidence }\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst duration = (value: number): number => {\n if (!Number.isFinite(value) || value < 0) fail('Tool durationMs must be a non-negative number.', 'INVALID_INPUT')\n return value\n}\n\nconst positiveNumber = (value: number | string, label: string): string => {\n const normalized = String(value).trim()\n if (!normalized || !/^(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/.test(normalized) || Number(normalized) <= 0) fail(`${label} must be positive.`, 'INVALID_INPUT')\n return normalized\n}\n\nconst absolutePath = (value: string, label: string): string => {\n const normalized = required(value, label)\n if (!normalized.startsWith('/') || normalized.includes(',')) fail(`${label} must be an absolute path without commas.`, 'INVALID_INPUT')\n return normalized\n}\n\nconst dockerEnvironment = (env: Readonly<Record<string, string>> | undefined, label: string): readonly string[] => {\n if (env === undefined) return []\n if (typeof env !== 'object' || env === null || Array.isArray(env)) fail(`${label} must be an object.`, 'INVALID_INPUT')\n return Object.entries(env).map(([key, value]) => {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key) || typeof value !== 'string') fail(`${label} must contain valid string environment entries.`, 'INVALID_INPUT')\n return `${key}=${value}`\n })\n}\n\nconst inspectImage = promisify(execFile)\n\nexport const createToolRuntime = ({ tools, timeoutMs = 30_000 }: { readonly tools: readonly ToolDefinition[]; readonly timeoutMs?: number }): ToolRuntime => {\n if (!Array.isArray(tools)) fail('Runtime tools must be an array.', 'INVALID_INPUT')\n if (!Number.isInteger(timeoutMs) || timeoutMs < 1) fail('Runtime timeoutMs must be a positive integer.', 'INVALID_INPUT')\n const normalized = tools.map((tool, index) => {\n if (typeof tool !== 'object' || tool === null || Array.isArray(tool)) fail(`tools[${index}] must be an object.`, 'INVALID_INPUT')\n const toolId = required(tool.toolId, `tools[${index}].toolId`)\n if (typeof tool.execute !== 'function') fail(`tools[${index}].execute is required.`, 'INVALID_INPUT')\n return { toolId, execute: tool.execute }\n })\n if (new Set(normalized.map((tool) => tool.toolId)).size !== normalized.length) fail('Runtime tools must have unique ids.', 'INVALID_INPUT')\n return {\n assurance: 'contract-tested',\n isolation: 'none',\n telemetry: () => ({ status: 'unknown' }),\n execute: async (request) => {\n const started = Date.now()\n const actionId = required(request.actionId, 'request.actionId')\n const turnId = required(request.turnId, 'request.turnId')\n const toolId = required(request.toolId, 'request.toolId')\n const argumentsHash = required(request.argumentsHash, 'request.argumentsHash')\n const tool = normalized.find((candidate) => candidate.toolId === toolId)\n if (!tool) return { status: 'failed', errorCode: 'TOOL_NOT_FOUND', retryable: false, durationMs: duration(Date.now() - started) }\n const controller = new AbortController()\n let timedOut = false\n let timer: NodeJS.Timeout | undefined\n try {\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => { timedOut = true; controller.abort(); reject(new Error('Tool execution timed out.')) }, timeoutMs)\n })\n const result = await Promise.race([Promise.resolve(tool.execute({ actionId, turnId, toolId, argumentsHash, arguments: request.arguments, signal: controller.signal })), timeout])\n return { status: 'completed', resultHash: hashJson(result === undefined ? null : result), durationMs: duration(Date.now() - started) }\n } catch {\n return { status: 'failed', errorCode: timedOut ? 'TIMEOUT' : 'RUNTIME_ERROR', retryable: true, durationMs: duration(Date.now() - started) }\n } finally {\n if (timer) clearTimeout(timer)\n }\n },\n }\n}\n\nexport const createProcessToolRuntime = ({ tools, timeoutMs = 30_000, maxOutputBytes = 1_048_576 }: { readonly tools: readonly ProcessToolDefinition[]; readonly timeoutMs?: number; readonly maxOutputBytes?: number }): ToolRuntime => {\n if (!Array.isArray(tools)) fail('Process runtime tools must be an array.', 'INVALID_INPUT')\n if (!Number.isInteger(timeoutMs) || timeoutMs < 1) fail('Process runtime timeoutMs must be a positive integer.', 'INVALID_INPUT')\n if (!Number.isInteger(maxOutputBytes) || maxOutputBytes < 1) fail('Process runtime maxOutputBytes must be a positive integer.', 'INVALID_INPUT')\n const normalized = tools.map((tool, index) => {\n if (typeof tool !== 'object' || tool === null || Array.isArray(tool)) fail(`tools[${index}] must be an object.`, 'INVALID_INPUT')\n const toolId = required(tool.toolId, `tools[${index}].toolId`)\n const command = required(tool.command, `tools[${index}].command`)\n if (tool.args !== undefined && (!Array.isArray(tool.args) || tool.args.some((arg) => typeof arg !== 'string'))) fail(`tools[${index}].args must contain strings.`, 'INVALID_INPUT')\n if (tool.env !== undefined && (typeof tool.env !== 'object' || tool.env === null || Array.isArray(tool.env) || Object.values(tool.env).some((value) => typeof value !== 'string'))) fail(`tools[${index}].env must contain string values.`, 'INVALID_INPUT')\n return { toolId, command, args: tool.args ? [...tool.args] : [], ...(tool.cwd ? { cwd: tool.cwd } : {}), env: (tool.env ? { ...tool.env } : { PATH: process.env['PATH'] ?? '' }) as NodeJS.ProcessEnv }\n })\n if (new Set(normalized.map((tool) => tool.toolId)).size !== normalized.length) fail('Process runtime tools must have unique ids.', 'INVALID_INPUT')\n return {\n assurance: 'contract-tested',\n isolation: 'none',\n telemetry: () => ({ status: 'unknown' }),\n execute: async (request) => {\n const started = Date.now()\n const actionId = required(request.actionId, 'request.actionId')\n const turnId = required(request.turnId, 'request.turnId')\n const toolId = required(request.toolId, 'request.toolId')\n const argumentsHash = required(request.argumentsHash, 'request.argumentsHash')\n const tool = normalized.find((candidate) => candidate.toolId === toolId)\n if (!tool) return { status: 'failed', errorCode: 'TOOL_NOT_FOUND', retryable: false, durationMs: Date.now() - started }\n let input: string\n try { input = JSON.stringify({ actionId, turnId, toolId, argumentsHash, arguments: request.arguments }) } catch { return { status: 'failed', errorCode: 'SERIALIZATION_ERROR', retryable: false, durationMs: Date.now() - started } }\n return new Promise((resolve) => {\n const child = spawn(tool.command, [...tool.args], { cwd: tool.cwd, env: tool.env, shell: false, stdio: ['pipe', 'pipe', 'pipe'] }) as ChildProcessWithoutNullStreams\n let stdout = ''\n let timedOut = false\n let outputLimit = false\n let spawnError = false\n let settled = false\n const timer = setTimeout(() => { timedOut = true; child.kill('SIGKILL') }, timeoutMs)\n const finish = (result: ToolExecutionResult): void => { if (settled) return; settled = true; clearTimeout(timer); resolve(result) }\n child.stdout.on('data', (chunk: Buffer) => { stdout += chunk.toString(); if (Buffer.byteLength(stdout) > maxOutputBytes) { outputLimit = true; child.kill('SIGKILL') } })\n child.stderr.on('data', (chunk: Buffer) => { if (chunk.length > maxOutputBytes) { outputLimit = true; child.kill('SIGKILL') } })\n child.on('error', () => { spawnError = true })\n child.on('close', (code) => {\n const durationMs = Date.now() - started\n if (timedOut) return finish({ status: 'failed', errorCode: 'TIMEOUT', retryable: true, durationMs })\n if (outputLimit) return finish({ status: 'failed', errorCode: 'OUTPUT_LIMIT', retryable: false, durationMs })\n if (spawnError || code === null) return finish({ status: 'failed', errorCode: 'PROCESS_ERROR', retryable: true, durationMs })\n if (code !== 0) return finish({ status: 'failed', errorCode: 'PROCESS_EXIT', retryable: false, durationMs })\n finish({ status: 'completed', resultHash: hashJson(stdout.trim() || null), durationMs })\n })\n child.stdin.on('error', () => { spawnError = true })\n child.stdin.end(input)\n })\n },\n }\n}\n\nexport const createDockerToolRuntime = ({\n tools,\n timeoutMs = 30_000,\n maxOutputBytes = 1_048_576,\n dockerCommand = 'docker',\n memoryLimit = '512m',\n cpus = 1,\n pidsLimit = 128,\n user = '65532:65532',\n pull = 'never',\n}: {\n readonly tools: readonly DockerToolDefinition[]\n readonly timeoutMs?: number\n readonly maxOutputBytes?: number\n readonly dockerCommand?: string\n readonly memoryLimit?: string\n readonly cpus?: number | string\n readonly pidsLimit?: number\n readonly user?: string\n readonly pull?: 'never' | 'missing' | 'always'\n}): ToolRuntime => {\n if (!Array.isArray(tools)) fail('Docker runtime tools must be an array.', 'INVALID_INPUT')\n const command = required(dockerCommand, 'dockerCommand')\n const memory = required(memoryLimit, 'memoryLimit')\n const cpu = positiveNumber(cpus, 'cpus')\n if (!Number.isInteger(pidsLimit) || pidsLimit < 1) fail('pidsLimit must be a positive integer.', 'INVALID_INPUT')\n const normalizedUser = required(user, 'user')\n if (normalizedUser.includes(' ')) fail('user must not contain spaces.', 'INVALID_INPUT')\n if (pull !== 'never' && pull !== 'missing' && pull !== 'always') fail('pull must be never, missing, or always.', 'INVALID_INPUT')\n const normalized = tools.map((tool, index) => {\n if (typeof tool !== 'object' || tool === null || Array.isArray(tool)) fail(`tools[${index}] must be an object.`, 'INVALID_INPUT')\n const toolId = required(tool.toolId, `tools[${index}].toolId`)\n const image = required(tool.image, `tools[${index}].image`)\n if (!Array.isArray(tool.command) || tool.command.length === 0 || tool.command.some((part) => typeof part !== 'string' || !part.trim())) fail(`tools[${index}].command must be a non-empty string array.`, 'INVALID_INPUT')\n if (tool.args !== undefined && (!Array.isArray(tool.args) || tool.args.some((arg) => typeof arg !== 'string'))) fail(`tools[${index}].args must contain strings.`, 'INVALID_INPUT')\n const env = dockerEnvironment(tool.env, `tools[${index}].env`)\n if (tool.mounts !== undefined && !Array.isArray(tool.mounts)) fail(`tools[${index}].mounts must be an array.`, 'INVALID_INPUT')\n const mounts = (tool.mounts ?? []).map((mount, mountIndex) => {\n if (typeof mount !== 'object' || mount === null || Array.isArray(mount)) fail(`tools[${index}].mounts[${mountIndex}] must be an object.`, 'INVALID_INPUT')\n const source = absolutePath(mount.source, `tools[${index}].mounts[${mountIndex}].source`)\n const target = absolutePath(mount.target, `tools[${index}].mounts[${mountIndex}].target`)\n if (mount.readOnly !== undefined && typeof mount.readOnly !== 'boolean') fail(`tools[${index}].mounts[${mountIndex}].readOnly must be boolean.`, 'INVALID_INPUT')\n return `type=bind,src=${source},dst=${target}${mount.readOnly === false ? '' : ',readonly'}`\n })\n const profileHash = hashJson({ provider: 'docker', toolId, image, command: [...tool.command], args: tool.args ?? [], cwd: tool.cwd ?? null, env, mounts, network: 'none', readOnlyRootFilesystem: true, noNewPrivileges: true, capabilities: 'drop-all', user: normalizedUser, memoryLimit: memory, cpus: cpu, pidsLimit, pull })\n return {\n toolId,\n command,\n image,\n profileHash,\n evidence: { provider: 'docker' as const, profileHash, image, network: 'none' as const, readOnlyRootFilesystem: true as const, noNewPrivileges: true as const, capabilities: 'drop-all' as const, user: normalizedUser, memoryLimit: memory, cpus: cpu, pidsLimit },\n args: [\n 'run', '--rm', '--init', '--pull', pull, '--network', 'none', '--read-only', '--cap-drop', 'ALL', '--security-opt', 'no-new-privileges',\n '--pids-limit', String(pidsLimit), '--memory', memory, '--cpus', cpu, '--user', normalizedUser,\n ...(tool.cwd ? ['--workdir', absolutePath(tool.cwd, `tools[${index}].cwd`)] : []),\n ...env.flatMap((entry) => ['--env', entry]),\n ...mounts.flatMap((mount) => ['--mount', mount]),\n image,\n ...tool.command,\n ...(tool.args ?? []),\n ],\n }\n })\n if (new Set(normalized.map((tool) => tool.toolId)).size !== normalized.length) fail('Docker runtime tools must have unique ids.', 'INVALID_INPUT')\n const processRuntime = createProcessToolRuntime({ tools: normalized, timeoutMs, maxOutputBytes })\n return {\n assurance: 'runtime-attested',\n isolation: 'sandboxed',\n telemetry: () => ({ status: 'unknown' }),\n execute: async (request) => {\n const tool = normalized.find((candidate) => candidate.toolId === request.toolId)\n if (!tool) return processRuntime.execute(request)\n const started = Date.now()\n let imageDigest: string\n try {\n const inspected = await inspectImage(command, ['image', 'inspect', tool.image, '--format', '{{.Id}}'], { shell: false, encoding: 'utf8', maxBuffer: 64 * 1024, env: { PATH: process.env['PATH'] ?? '' } as unknown as NodeJS.ProcessEnv })\n imageDigest = inspected.stdout.trim()\n if (!/^sha256:[a-f0-9]{64}$/.test(imageDigest)) throw new Error('Docker image inspection did not return a digest.')\n } catch {\n return { status: 'failed', errorCode: 'IMAGE_UNAVAILABLE', retryable: true, durationMs: duration(Date.now() - started), runtimeEvidence: tool.evidence }\n }\n const runtimeEvidence = { ...tool.evidence, imageDigest, profileHash: hashJson({ ...tool.evidence, imageDigest }) }\n const result = await processRuntime.execute(request)\n return { ...result, runtimeEvidence }\n },\n }\n}\n","import { closeSync, existsSync, mkdirSync, openSync, readFileSync, unlinkSync, writeFileSync, appendFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport { fail } from '../kernel/errors.js'\nimport { hashJson } from '../kernel/hash.js'\n\nexport interface CoordinationIdentity {\n readonly tracker: string\n readonly repository: string\n readonly issue: string\n readonly worktree: string\n readonly branch: string\n}\n\nexport interface DispatchLease extends CoordinationIdentity {\n readonly key: string\n readonly leaseId: string\n readonly owner: string\n readonly claimedAt: string\n}\n\nexport interface ClaimResult {\n readonly decision: 'claimed' | 'already-claimed'\n readonly lease: DispatchLease\n}\n\nexport interface DispatchRecord extends DispatchLease {\n readonly action: 'dispatch' | 'release' | 'recover'\n readonly at: string\n readonly idempotencyKey?: string\n readonly commandDigest?: string\n readonly reason?: string\n}\n\nexport interface DispatchLedger {\n claim(identity: CoordinationIdentity & { readonly owner: string }): ClaimResult\n recordDispatch(input: { readonly lease: DispatchLease; readonly idempotencyKey: string; readonly commandDigest: string }): { readonly decision: 'recorded' | 'duplicate'; readonly record: DispatchRecord }\n release(lease: DispatchLease, reason?: string): DispatchRecord\n recover(key: string, input: { readonly actor: string; readonly maxAgeMs?: number; readonly reason: string }): DispatchRecord\n active(): readonly DispatchLease[]\n records(): readonly DispatchRecord[]\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nconst safeKey = (identity: CoordinationIdentity): string => hashJson(identity)\nconst now = (): string => new Date().toISOString()\n\nconst parse = (value: string, label: string): DispatchLease => {\n try {\n const raw = JSON.parse(value) as Record<string, unknown>\n const identity = {\n tracker: required(raw['tracker'] as string, `${label}.tracker`),\n repository: required(raw['repository'] as string, `${label}.repository`),\n issue: required(raw['issue'] as string, `${label}.issue`),\n worktree: required(raw['worktree'] as string, `${label}.worktree`),\n branch: required(raw['branch'] as string, `${label}.branch`),\n }\n return { ...identity, key: required(raw['key'] as string, `${label}.key`), leaseId: required(raw['leaseId'] as string, `${label}.leaseId`), owner: required(raw['owner'] as string, `${label}.owner`), claimedAt: required(raw['claimedAt'] as string, `${label}.claimedAt`) }\n } catch (error) {\n if (error instanceof SyntaxError) fail(`${label} contains invalid JSON.`, 'HARNESS_ERROR')\n throw error\n }\n}\n\nexport const createDispatchLedger = (stateDir: string): DispatchLedger => {\n const root = required(stateDir, 'stateDir')\n const claimsDir = join(root, 'coordination', 'claims')\n const ledgerPath = join(root, 'coordination', 'dispatch-ledger.ndjson')\n mkdirSync(claimsDir, { recursive: true })\n const claimPath = (key: string): string => join(claimsDir, `${key}.json`)\n const append = (record: DispatchRecord): void => appendFileSync(ledgerPath, `${JSON.stringify(record)}\\n`, 'utf8')\n\n const records = (): readonly DispatchRecord[] => {\n if (!existsSync(ledgerPath)) return []\n return readFileSync(ledgerPath, 'utf8').split(/\\r?\\n/).map((line) => line.trim()).filter(Boolean).map((line, index) => {\n try { return JSON.parse(line) as DispatchRecord } catch { return fail(`Dispatch ledger record ${index + 1} is invalid JSON.`, 'HARNESS_ERROR') }\n })\n }\n\n const active = (): readonly DispatchLease[] => {\n const byKey = new Map<string, DispatchLease>()\n for (const record of records()) {\n if (record.action === 'release' || record.action === 'recover') byKey.delete(record.key)\n else if (record.action === 'dispatch') byKey.set(record.key, record)\n }\n return [...byKey.values()]\n }\n\n return {\n claim: (input) => {\n const identity: CoordinationIdentity = {\n tracker: required(input.tracker, 'tracker'),\n repository: required(input.repository, 'repository'),\n issue: required(input.issue, 'issue'),\n worktree: required(input.worktree, 'worktree'),\n branch: required(input.branch, 'branch'),\n }\n const owner = required(input.owner, 'owner')\n const key = safeKey(identity)\n const path = claimPath(key)\n if (existsSync(path)) return { decision: 'already-claimed' as const, lease: parse(readFileSync(path, 'utf8'), 'claim') }\n const lease: DispatchLease = { ...identity, key, leaseId: randomUUID(), owner, claimedAt: now() }\n let fd: number\n try { fd = openSync(path, 'wx') } catch (error) { if ((error as NodeJS.ErrnoException).code === 'EEXIST') return { decision: 'already-claimed' as const, lease: parse(readFileSync(path, 'utf8'), 'claim') }; throw error }\n try { writeFileSync(fd, JSON.stringify(lease), 'utf8') } finally { closeSync(fd) }\n append({ ...lease, action: 'dispatch', at: lease.claimedAt })\n return { decision: 'claimed' as const, lease }\n },\n recordDispatch: ({ lease, idempotencyKey, commandDigest }) => {\n const id = required(idempotencyKey, 'idempotencyKey')\n const digest = required(commandDigest, 'commandDigest')\n const existing = records().find((record) => record.action === 'dispatch' && record.idempotencyKey === id)\n if (existing) return { decision: 'duplicate' as const, record: existing }\n const record: DispatchRecord = { ...lease, action: 'dispatch', at: now(), idempotencyKey: id, commandDigest: digest }\n append(record)\n return { decision: 'recorded' as const, record }\n },\n release: (lease, reason = 'lease released') => {\n const path = claimPath(required(lease.key, 'lease.key'))\n if (!existsSync(path)) fail('Dispatch lease is not active.', 'INVALID_STATE')\n const current = parse(readFileSync(path, 'utf8'), 'claim')\n if (current.leaseId !== lease.leaseId) fail('Dispatch lease owner does not match.', 'INVALID_STATE')\n unlinkSync(path)\n const record: DispatchRecord = { ...current, action: 'release', at: now(), reason: required(reason, 'reason') }\n append(record)\n return record\n },\n recover: (key, input) => {\n if (input.actor !== 'human') fail('Dispatch lease recovery requires a human actor.', 'HUMAN_APPROVAL_REQUIRED')\n const normalizedKey = required(key, 'key')\n const maxAgeMs = input.maxAgeMs ?? 300_000\n if (!Number.isInteger(maxAgeMs) || maxAgeMs < 0) fail('maxAgeMs must be a non-negative integer.', 'INVALID_INPUT')\n const path = claimPath(normalizedKey)\n if (!existsSync(path)) fail('Dispatch lease is not active.', 'INVALID_STATE')\n const current = parse(readFileSync(path, 'utf8'), 'claim')\n if (Date.now() - Date.parse(current.claimedAt) < maxAgeMs) fail('Dispatch lease is not old enough to recover.', 'HARNESS_ERROR')\n unlinkSync(path)\n const record: DispatchRecord = { ...current, action: 'recover', at: now(), reason: required(input.reason, 'reason') }\n append(record)\n return record\n },\n active,\n records,\n }\n}\n","import { basename, extname, dirname, join } from 'node:path'\nimport { fail } from './errors.js'\n\nexport interface ChangedFile {\n readonly path: string\n readonly status?: string\n}\n\nexport interface FilePreflightPlan {\n readonly files: readonly string[]\n readonly codeFiles: readonly string[]\n readonly testFiles: readonly string[]\n readonly docsOnly: boolean\n readonly checks: readonly ('lint' | 'typecheck' | 'test')[]\n}\n\nconst DOC_EXTENSIONS = new Set(['.md', '.mdx', '.txt', '.adoc', '.rst'])\nconst TEST_SUFFIXES = ['.test.', '.spec.', '__tests__']\nconst SHELL_META = /[;&|`$()<>\\n\\r]/\n\nconst normalizedPath = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} must be a non-empty path.`, 'INVALID_INPUT')\n const path = value.trim().replaceAll('\\\\', '/')\n if (path.startsWith('/') || path.split('/').includes('..')) fail(`${label} must be repository-relative.`, 'INVALID_INPUT')\n return path\n}\n\nexport const validateSafeCommand = (command: string): { readonly valid: true; readonly command: string } => {\n if (typeof command !== 'string' || !command.trim()) fail('command must be a non-empty string.', 'INVALID_INPUT')\n const value = command.trim()\n if (SHELL_META.test(value)) fail('command contains shell metacharacters; use argv-based execution.', 'POLICY_BLOCKED')\n return { valid: true, command: value }\n}\n\nconst isTest = (path: string): boolean => TEST_SUFFIXES.some((suffix) => path.includes(suffix)) || /(^|\\/)(test|tests|__tests__)\\//.test(path)\nconst isDoc = (path: string): boolean => DOC_EXTENSIONS.has(extname(path).toLowerCase())\n\nexport const planFilePreflight = (files: readonly ChangedFile[], options: { readonly testRoots?: readonly string[]; readonly includeTests?: boolean } = {}): FilePreflightPlan => {\n if (!Array.isArray(files)) fail('files must be an array.', 'INVALID_INPUT')\n const unique = [...new Set(files.map((file, index) => normalizedPath(file.path, `files[${index}].path`)))].sort()\n const codeFiles = unique.filter((path) => !isDoc(path) && !isTest(path))\n const existingTests = unique.filter(isTest)\n const roots = (options.testRoots ?? ['test', 'tests', '__tests__']).map((root, index) => normalizedPath(root, `testRoots[${index}]`))\n const colocated = options.includeTests === false ? [] : codeFiles.flatMap((path) => {\n const file = basename(path)\n const directory = dirname(path)\n const stem = file.includes('.') ? file.slice(0, file.lastIndexOf('.')) : file\n return [join(directory, `${stem}.test.ts`), join(directory, `${stem}.spec.ts`)].filter((candidate) => unique.includes(candidate))\n })\n const testFiles = [...new Set([...existingTests, ...colocated, ...unique.filter((path) => roots.some((root) => path === root || path.startsWith(`${root}/`)))].sort())]\n const docsOnly = unique.length > 0 && codeFiles.length === 0 && existingTests.length === 0\n return { files: unique, codeFiles, testFiles, docsOnly, checks: docsOnly ? [] : ['lint', 'typecheck', ...(testFiles.length ? ['test' as const] : [])] }\n}\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\n\nexport const BLOCK_STATUSES = ['todo', 'picked', 'development', 'validation', 'pr-open', 'merged', 'post-merge', 'done', 'blocked', 'scope-cut'] as const\nexport type BlockStatus = typeof BLOCK_STATUSES[number]\n\nexport interface BlockManifest {\n readonly schemaVersion: 1\n readonly id: string\n readonly title: string\n readonly tracker: string\n readonly repository: string\n readonly acceptanceCriteria: readonly string[]\n readonly dependencies: readonly string[]\n readonly wave: number\n readonly status: BlockStatus\n readonly budget?: { readonly maxMinutes?: number; readonly maxAttempts?: number }\n readonly humanGates?: readonly string[]\n readonly sourceHash?: string\n}\n\nexport interface BlockAssessment {\n readonly status: 'ready' | 'blocked'\n readonly manifestHash: string\n readonly blockers: readonly string[]\n readonly next: readonly string[]\n}\n\nconst text = (value: unknown, label: string): string => {\n return typeof value === 'string' && value.trim() ? value.trim() : fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n}\nconst list = (value: unknown, label: string): readonly string[] => {\n if (!Array.isArray(value)) return fail(`${label} must be an array of non-empty strings.`, 'INVALID_INPUT')\n if (!value.every((item: unknown): item is string => typeof item === 'string' && Boolean(item.trim()))) return fail(`${label} must be an array of non-empty strings.`, 'INVALID_INPUT')\n return [...new Set(value.map((item: string) => item.trim()))]\n}\n\nexport const validateBlockManifest = (value: unknown): BlockManifest => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('block manifest must be an object.', 'INVALID_INPUT')\n const raw = value as Record<string, unknown>\n if (raw['schemaVersion'] !== 1) fail('block manifest schemaVersion must be 1.', 'INVALID_INPUT')\n const criteria = list(raw['acceptanceCriteria'], 'acceptanceCriteria')\n if (!criteria.length) fail('acceptanceCriteria must not be empty.', 'INVALID_INPUT')\n const dependencies = list(raw['dependencies'] ?? [], 'dependencies')\n const wave = raw['wave']\n if (!Number.isInteger(wave) || (wave as number) < 1) fail('wave must be a positive integer.', 'INVALID_INPUT')\n const status = raw['status']\n if (!(BLOCK_STATUSES as readonly unknown[]).includes(status)) fail('status is invalid.', 'INVALID_INPUT')\n const budgetRaw = raw['budget']\n let budget: BlockManifest['budget']\n if (budgetRaw !== undefined) {\n if (typeof budgetRaw !== 'object' || budgetRaw === null || Array.isArray(budgetRaw)) fail('budget must be an object.', 'INVALID_INPUT')\n const candidate = budgetRaw as Record<string, unknown>\n for (const key of ['maxMinutes', 'maxAttempts'] as const) if (candidate[key] !== undefined && (!Number.isInteger(candidate[key]) || (candidate[key] as number) < 1)) fail(`budget.${key} must be a positive integer.`, 'INVALID_INPUT')\n budget = { ...(candidate['maxMinutes'] === undefined ? {} : { maxMinutes: candidate['maxMinutes'] as number }), ...(candidate['maxAttempts'] === undefined ? {} : { maxAttempts: candidate['maxAttempts'] as number }) }\n }\n return { schemaVersion: 1, id: text(raw['id'], 'id'), title: text(raw['title'], 'title'), tracker: text(raw['tracker'], 'tracker'), repository: text(raw['repository'], 'repository'), acceptanceCriteria: criteria, dependencies, wave: wave as number, status: status as BlockStatus, ...(budget ? { budget } : {}), ...(raw['humanGates'] === undefined ? {} : { humanGates: list(raw['humanGates'], 'humanGates') }), ...(raw['sourceHash'] === undefined ? {} : { sourceHash: text(raw['sourceHash'], 'sourceHash') }) }\n}\n\nexport const assessBlock = (manifest: BlockManifest, completedDependencies: readonly string[] = []): BlockAssessment => {\n const value = validateBlockManifest(manifest)\n const completed = new Set(completedDependencies.map((item) => text(item, 'completedDependencies[]')))\n const blockers = value.dependencies.filter((dependency) => !completed.has(dependency))\n const next = blockers.length ? [`Complete dependencies: ${blockers.join(', ')}`] : value.status === 'blocked' ? ['Resolve the recorded blocker before dispatch.'] : ['Dispatch the block with the frozen acceptance criteria.']\n return { status: blockers.length || value.status === 'blocked' ? 'blocked' : 'ready', manifestHash: hashJson(value), blockers, next }\n}\n","import { createHash } from 'node:crypto'\nimport { fail } from './errors.js'\n\nexport const LEARNING_STATUSES = ['proposed', 'promoted', 'rejected'] as const\nexport type LearningStatus = typeof LEARNING_STATUSES[number]\n\nexport interface LearningRecord {\n readonly id: string\n readonly source: string\n readonly category: 'worked' | 'problem' | 'adjustment' | 'other'\n readonly text: string\n readonly status: LearningStatus\n readonly recordedAt: string\n}\n\nconst text = (value: unknown, label: string): string => {\n return typeof value === 'string' && value.trim() ? value.trim() : fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n}\n\nconst category = (heading: string): LearningRecord['category'] => {\n const value = heading.toLowerCase()\n if (/went well|success|worked/.test(value)) return 'worked'\n if (/problem|failed|blocker|pain/.test(value)) return 'problem'\n if (/adjust|action|next|improv/.test(value)) return 'adjustment'\n return 'other'\n}\n\nexport const parseRetro = (markdown: string, source: string, recordedAt = new Date().toISOString()): readonly LearningRecord[] => {\n const input = text(markdown, 'markdown')\n const origin = text(source, 'source')\n if (!Number.isFinite(Date.parse(recordedAt))) fail('recordedAt must be a valid timestamp.', 'INVALID_INPUT')\n const records: LearningRecord[] = []\n let current: LearningRecord['category'] = 'other'\n for (const line of input.split(/\\r?\\n/)) {\n const heading = line.match(/^#{1,6}\\s+(.+)$/)\n if (heading) { current = category(heading[1] ?? ''); continue }\n const item = line.match(/^\\s*[-*]\\s+(?:\\[[ xX]\\]\\s+)?(.+?)\\s*$/)\n if (!item?.[1]?.trim()) continue\n const value = item[1].trim()\n const id = `L-${createHash('sha256').update(`${origin}|${current}|${value}`).digest('hex').slice(0, 12)}`\n if (!records.some((record) => record.id === id)) records.push({ id, source: origin, category: current, text: value, status: 'proposed', recordedAt })\n }\n return records\n}\n\nexport const promoteLearnings = (records: readonly LearningRecord[], input: { readonly actor: string; readonly ids: readonly string[]; readonly status?: 'promoted' | 'rejected' }): readonly LearningRecord[] => {\n if (input.actor !== 'human') fail('Learning promotion requires a human actor.', 'HUMAN_APPROVAL_REQUIRED')\n const ids = new Set(input.ids.map((id) => text(id, 'ids[]')))\n const status = input.status ?? 'promoted'\n const result = records.map((record) => ids.has(record.id) ? { ...record, status } : record)\n const unknown = [...ids].filter((id) => !records.some((record) => record.id === id))\n if (unknown.length) fail(`Unknown learning IDs: ${unknown.join(', ')}`, 'INVALID_INPUT')\n return result\n}\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\nimport type { BlockStatus } from './block.js'\nimport type { MachineMetrics } from './types.js'\n\nexport interface StatusBlock {\n readonly id: string\n readonly status: BlockStatus\n readonly owner?: string\n readonly issue?: string\n readonly branch?: string\n readonly revision?: string\n readonly blockers?: readonly string[]\n}\n\nexport interface StatusSnapshot {\n readonly schemaVersion: 1\n readonly generatedAt: string\n readonly sourceRevision: string\n readonly blocks: readonly StatusBlock[]\n readonly machine?: MachineMetrics\n readonly metrics?: Readonly<Record<string, number>>\n readonly next?: string\n readonly digest: string\n}\n\nconst required = (value: unknown, label: string): string => {\n return typeof value === 'string' && value.trim() ? value.trim() : fail(`${label} must be a non-empty string.`, 'INVALID_INPUT')\n}\n\nexport const createStatusSnapshot = (input: Omit<StatusSnapshot, 'schemaVersion' | 'digest'>): StatusSnapshot => {\n const sourceRevision = required(input.sourceRevision, 'sourceRevision')\n if (!Number.isFinite(Date.parse(input.generatedAt))) fail('generatedAt must be a valid timestamp.', 'INVALID_INPUT')\n if (!Array.isArray(input.blocks)) fail('blocks must be an array.', 'INVALID_INPUT')\n const blocks = input.blocks.map((block, index) => {\n if (typeof block !== 'object' || block === null || Array.isArray(block)) fail(`blocks[${index}] must be an object.`, 'INVALID_INPUT')\n const value = block as StatusBlock\n if (!(typeof value.id === 'string' && value.id.trim())) fail(`blocks[${index}].id is required.`, 'INVALID_INPUT')\n if (!['todo', 'picked', 'development', 'validation', 'pr-open', 'merged', 'post-merge', 'done', 'blocked', 'scope-cut'].includes(value.status)) fail(`blocks[${index}].status is invalid.`, 'INVALID_INPUT')\n return { ...value, id: value.id.trim() }\n }).sort((left, right) => left.id.localeCompare(right.id))\n if (input.metrics !== undefined && Object.entries(input.metrics).some(([key, value]) => !key.trim() || typeof value !== 'number' || !Number.isFinite(value) || value < 0)) fail('metrics must contain finite non-negative numbers.', 'INVALID_INPUT')\n const body = { schemaVersion: 1 as const, generatedAt: input.generatedAt, sourceRevision, blocks, ...(input.machine ? { machine: input.machine } : {}), ...(input.metrics ? { metrics: input.metrics } : {}), ...(input.next ? { next: required(input.next, 'next') } : {}) }\n return { ...body, digest: hashJson(body) }\n}\n\nexport const validateStatusSnapshot = (value: unknown): StatusSnapshot => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail('status snapshot must be an object.', 'INVALID_INPUT')\n const raw = value as StatusSnapshot\n const snapshot = createStatusSnapshot({ generatedAt: required(raw.generatedAt, 'generatedAt'), sourceRevision: required(raw.sourceRevision, 'sourceRevision'), blocks: raw.blocks, ...(raw.machine ? { machine: raw.machine } : {}), ...(raw.metrics ? { metrics: raw.metrics } : {}), ...(raw.next ? { next: raw.next } : {}) })\n if (raw.schemaVersion !== 1 || raw.digest !== snapshot.digest) fail('status snapshot digest or schemaVersion is invalid.', 'HARNESS_ERROR')\n return snapshot\n}\n","import { fail } from './errors.js'\nimport { hashJson } from './hash.js'\n\nexport const MODEL_ROLES = ['orchestrator', 'reviewer', 'builder', 'watcher'] as const\nexport type ModelRole = typeof MODEL_ROLES[number]\n\nexport interface ModelBinding {\n readonly role: ModelRole\n readonly provider: string\n readonly model: string\n readonly maxTokens?: number\n}\n\nexport interface ModelPolicy {\n readonly bindings: readonly ModelBinding[]\n readonly digest: string\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nexport const createModelPolicy = (bindings: readonly ModelBinding[]): ModelPolicy => {\n if (!Array.isArray(bindings) || !bindings.length) fail('bindings must be a non-empty array.', 'INVALID_INPUT')\n const normalized = bindings.map((binding, index) => {\n if (typeof binding !== 'object' || binding === null || Array.isArray(binding)) fail(`bindings[${index}] must be an object.`, 'INVALID_INPUT')\n if (!(MODEL_ROLES as readonly string[]).includes(binding.role)) fail(`bindings[${index}].role is invalid.`, 'INVALID_INPUT')\n if (binding.maxTokens !== undefined && (!Number.isInteger(binding.maxTokens) || binding.maxTokens < 1)) fail(`bindings[${index}].maxTokens must be a positive integer.`, 'INVALID_INPUT')\n return { role: binding.role, provider: required(binding.provider, `bindings[${index}].provider`), model: required(binding.model, `bindings[${index}].model`), ...(binding.maxTokens === undefined ? {} : { maxTokens: binding.maxTokens }) }\n })\n if (new Set(normalized.map((binding) => binding.role)).size !== normalized.length) fail('Each model role may be bound only once.', 'INVALID_INPUT')\n return { bindings: normalized, digest: hashJson(normalized) }\n}\n\nexport const modelFor = (policy: ModelPolicy, role: ModelRole): ModelBinding => policy.bindings.find((binding) => binding.role === role) ?? fail(`No model binding exists for role: ${role}.`, 'INVALID_STATE')\n","import { fail } from '../kernel/errors.js'\nimport { hashJson } from '../kernel/hash.js'\nimport { validateSafeCommand } from '../kernel/preflight.js'\nimport type { AdapterTelemetry, AssuranceLevel } from '../kernel/adapter-contract.js'\n\nexport interface OrcaDispatchInput {\n readonly repository: string\n readonly worktree: string\n readonly branch: string\n readonly baseBranch: string\n readonly goalFile: string\n readonly agent?: string\n}\n\nexport interface OrcaDispatchPlan {\n readonly argv: readonly string[]\n readonly commandDigest: string\n readonly idempotencyKey: string\n}\n\nexport type OrcaLeaseState = 'acquired' | 'resumed' | 'conflict' | 'released'\n\nexport interface OrcaLifecycleInput {\n readonly issueRef: string\n readonly repository: string\n readonly worktree: string\n readonly branch: string\n readonly leaseState: OrcaLeaseState\n readonly issueLock: 'held' | 'missing'\n readonly expectedRemoteSha?: string\n readonly observedRemoteSha?: string\n readonly cleanupRequested?: boolean\n}\n\nexport interface OrcaLifecycleProjection {\n readonly status: 'ready' | 'resume' | 'blocked' | 'escalated'\n readonly leaseState: OrcaLeaseState\n readonly worktreeKey: string\n readonly issueLock: 'held' | 'missing'\n readonly remoteShaConfirmed: boolean\n readonly cleanupAllowed: boolean\n readonly assurance: AssuranceLevel\n readonly telemetry: AdapterTelemetry\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nexport const createOrcaDispatchPlan = (input: OrcaDispatchInput): OrcaDispatchPlan => {\n const repository = required(input.repository, 'repository')\n const worktree = required(input.worktree, 'worktree')\n const branch = required(input.branch, 'branch')\n const baseBranch = required(input.baseBranch, 'baseBranch')\n const goalFile = required(input.goalFile, 'goalFile')\n const agent = required(input.agent ?? 'default', 'agent')\n const argv = ['orca', 'worktree', 'create', '--repo', repository, '--name', worktree, '--base-branch', baseBranch, '--agent', agent, '--prompt-file', goalFile]\n validateSafeCommand(argv.join(' '))\n const identity = { repository, worktree, branch, baseBranch, goalFile, agent }\n return { argv, commandDigest: hashJson(argv), idempotencyKey: hashJson(identity) }\n}\n\nexport const createOrcaLifecycleProjection = (input: OrcaLifecycleInput): OrcaLifecycleProjection => {\n const issueRef = required(input.issueRef, 'issueRef')\n const repository = required(input.repository, 'repository')\n const worktree = required(input.worktree, 'worktree')\n const branch = required(input.branch, 'branch')\n if (!['acquired', 'resumed', 'conflict', 'released'].includes(input.leaseState)) fail('leaseState is invalid.', 'INVALID_INPUT')\n if (input.issueLock !== 'held' && input.issueLock !== 'missing') fail('issueLock is invalid.', 'INVALID_INPUT')\n const expected = input.expectedRemoteSha?.trim()\n const observed = input.observedRemoteSha?.trim()\n const remoteShaConfirmed = Boolean(expected && observed && expected === observed)\n const cleanupAllowed = input.cleanupRequested === true && remoteShaConfirmed && input.leaseState === 'released'\n const status = input.leaseState === 'conflict' || input.issueLock === 'missing' ? 'blocked' : input.cleanupRequested === true && !remoteShaConfirmed ? 'escalated' : input.leaseState === 'resumed' ? 'resume' : 'ready'\n return { status, leaseState: input.leaseState, worktreeKey: hashJson({ issueRef, repository, worktree, branch }), issueLock: input.issueLock, remoteShaConfirmed, cleanupAllowed, assurance: 'contract-tested', telemetry: { status: 'measured', durationMs: 0 } }\n}\n","import { fail } from '../kernel/errors.js'\nimport { hashJson } from '../kernel/hash.js'\nimport type { AdapterTelemetry, AssuranceLevel } from '../kernel/adapter-contract.js'\n\nexport interface TrackingTransition {\n readonly tracker: string\n readonly issue: string\n readonly from?: string\n readonly to: string\n readonly reason: string\n readonly idempotencyKey: string\n}\n\nexport interface TrackingAdapter {\n readonly id: string\n readonly assurance?: AssuranceLevel\n readonly telemetry?: () => AdapterTelemetry\n transition(input: Omit<TrackingTransition, 'idempotencyKey'>): Promise<TrackingTransition>\n}\n\nconst required = (value: string, label: string): string => {\n if (typeof value !== 'string' || !value.trim()) fail(`${label} is required.`, 'INVALID_INPUT')\n return value.trim()\n}\n\nexport const createTrackingTransition = (input: Omit<TrackingTransition, 'idempotencyKey'>): TrackingTransition => {\n const transition = { tracker: required(input.tracker, 'tracker'), issue: required(input.issue, 'issue'), ...(input.from ? { from: required(input.from, 'from') } : {}), to: required(input.to, 'to'), reason: required(input.reason, 'reason') }\n return { ...transition, idempotencyKey: hashJson(transition) }\n}\n\nexport const createTrackingAdapter = (id: string, handler: (input: TrackingTransition) => Promise<void> | void, options: { readonly dryRun?: boolean } = {}): TrackingAdapter => {\n const adapterId = required(id, 'id')\n const completed = new Set<string>()\n let writes = 0\n return {\n id: adapterId,\n assurance: 'contract-tested',\n telemetry: () => ({ status: 'measured', externalMutations: writes }),\n transition: async (input) => {\n const transition = createTrackingTransition(input)\n if (!completed.has(transition.idempotencyKey)) {\n if (!options.dryRun) { await handler(transition); writes += 1 }\n completed.add(transition.idempotencyKey)\n }\n return transition\n },\n }\n}\n","import { createPrivateKey, createPublicKey, sign, verify } from 'node:crypto'\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs'\nimport { join, relative, resolve, sep } from 'node:path'\nimport { fail } from '../kernel/errors.js'\nimport { fileContents, loadLatestRun, pathInside, readJson } from './files.js'\nimport { sha256 } from '../kernel/hash.js'\nimport { reconcileRun } from './verification.js'\nimport { FileEventStore } from '../kernel/events.js'\nimport type { EventLogVerification } from '../kernel/events.js'\nimport { loadConfig } from './config.js'\nimport type { VerificationRun } from '../kernel/types.js'\n\nexport const EVIDENCE_BUNDLE_SCHEMA_VERSION = 1 as const\n\nexport interface EvidenceBundleFile {\n readonly path: string\n readonly sha256: string\n readonly contentBase64: string\n}\n\nexport interface EvidenceBundleSignature {\n readonly algorithm: 'ed25519'\n readonly keyId: string\n readonly publicKeyPem: string\n readonly signatureBase64: string\n}\n\nexport interface TrustedEvidenceKey {\n readonly keyId: string\n readonly publicKeyPem: string\n readonly status: 'active' | 'revoked'\n}\n\nexport interface EvidenceBundle {\n readonly type: 'agentskit-harness-evidence-bundle'\n readonly schemaVersion: typeof EVIDENCE_BUNDLE_SCHEMA_VERSION\n readonly runId: string\n readonly signerKeyId: string\n readonly sourceRevision: string\n readonly configHash: string\n readonly contractHash: string\n readonly verificationDigest: string\n readonly eventLog: EventLogVerification\n readonly files: readonly EvidenceBundleFile[]\n readonly payloadHash: string\n readonly signature: EvidenceBundleSignature\n}\n\nexport interface EvidenceBundleVerification {\n readonly status: 'verified'\n readonly runId: string\n readonly payloadHash: string\n readonly fileCount: number\n readonly signed: true\n}\n\nconst body = (bundle: EvidenceBundle): Omit<EvidenceBundle, 'payloadHash' | 'signature'> => {\n const { payloadHash: _payloadHash, signature: _signature, ...unsigned } = bundle\n return unsigned\n}\nconst parseBundle = (path: string): EvidenceBundle => {\n try { return JSON.parse(fileContents(path)) as EvidenceBundle } catch (error) { return fail(`Invalid evidence bundle JSON: ${error instanceof Error ? error.message : String(error)}`, 'INVALID_INPUT') }\n}\nconst validDigest = (value: unknown): value is string => typeof value === 'string' && /^[a-f0-9]{64}$/.test(value)\nconst validKeyId = (value: unknown): value is string => typeof value === 'string' && /^[A-Za-z0-9._:-]{1,128}$/.test(value)\nconst requireRun = (run: VerificationRun | null): VerificationRun => run ?? fail('No verification run exists.', 'NO_RUN')\nconst bundleFile = (stateDir: string, path: string): EvidenceBundleFile => {\n const absolute = resolve(stateDir, path)\n if (!pathInside(stateDir, absolute)) fail(`Evidence path escapes state directory: ${path}`, 'HARNESS_ERROR')\n const content = readFileSync(absolute)\n return { path: relative(stateDir, absolute).split(sep).join('/'), sha256: sha256(content), contentBase64: content.toString('base64') }\n}\n\nexport const exportEvidenceBundle = async ({ configPath, runId, outputPath, privateKeyPath, keyId }: { readonly configPath: string; readonly runId?: string; readonly outputPath: string; readonly privateKeyPath: string; readonly keyId: string }): Promise<EvidenceBundle> => {\n if (!validKeyId(keyId)) fail('keyId must contain only letters, numbers, dot, underscore, colon, or hyphen.', 'INVALID_INPUT')\n const loaded = loadConfig(configPath)\n const run = requireRun((runId ? readJson(join(loaded.stateDir, 'runs', runId, 'run.json')) : loadLatestRun(loaded.stateDir)) as VerificationRun | null)\n const reconciliation = await reconcileRun({ configPath, runId: run.runId })\n const digest = run.verificationDigest ?? fail('Only a reconciled COMPLETE run can be exported.', 'INVALID_STATE')\n if (reconciliation.state !== 'COMPLETE') fail('Only a reconciled COMPLETE run can be exported.', 'INVALID_STATE')\n const eventLog = new FileEventStore(loaded.stateDir)\n eventLog.read(run.runId)\n const eventVerification = eventLog.verify(run.runId)\n const paths = new Set(['runs/' + run.runId + '/run.json', 'runs/' + run.runId + '/events.ndjson'])\n for (const reference of run.evidenceReferences) { paths.add(reference.stdout); paths.add(reference.stderr) }\n const files = [...paths].map((path) => {\n if (!existsSync(resolve(loaded.stateDir, path))) fail(`Evidence file is missing: ${path}`, 'HARNESS_ERROR')\n return bundleFile(loaded.stateDir, path)\n })\n const privateKey = createPrivateKey(readFileSync(privateKeyPath))\n const unsigned = { type: 'agentskit-harness-evidence-bundle' as const, schemaVersion: EVIDENCE_BUNDLE_SCHEMA_VERSION, runId: run.runId, signerKeyId: keyId, sourceRevision: run.sourceRevision, configHash: run.configHash, contractHash: run.contractHash, verificationDigest: digest, eventLog: eventVerification, files }\n const payloadHash = sha256(JSON.stringify(unsigned))\n const publicKeyPem = createPublicKey(privateKey).export({ type: 'spki', format: 'pem' }).toString()\n const bundle = { ...unsigned, payloadHash, signature: { algorithm: 'ed25519' as const, keyId, publicKeyPem, signatureBase64: sign(null, Buffer.from(payloadHash), privateKey).toString('base64') } }\n writeFileSync(outputPath, `${JSON.stringify(bundle, null, 2)}\\n`, 'utf8')\n return bundle\n}\n\nexport const verifyEvidenceBundle = (path: string, { trustedKeys = [] }: { readonly trustedKeys?: readonly TrustedEvidenceKey[] } = {}): EvidenceBundleVerification => {\n const bundle = parseBundle(path)\n if (bundle.type !== 'agentskit-harness-evidence-bundle' || bundle.schemaVersion !== EVIDENCE_BUNDLE_SCHEMA_VERSION || !bundle.runId || !validKeyId(bundle.signerKeyId) || !validDigest(bundle.payloadHash) || bundle.signature?.algorithm !== 'ed25519' || bundle.signature.keyId !== bundle.signerKeyId || typeof bundle.signature.publicKeyPem !== 'string' || typeof bundle.signature.signatureBase64 !== 'string' || !Array.isArray(bundle.files)) fail('Evidence bundle metadata is invalid.', 'HARNESS_ERROR')\n if (trustedKeys.length) {\n const trusted = trustedKeys.find((key) => key.keyId === bundle.signerKeyId)\n if (!trusted) return fail(`Evidence bundle key is not trusted: ${bundle.signerKeyId}`, 'HARNESS_ERROR')\n if (trusted.status === 'revoked') fail(`Evidence bundle key is revoked: ${bundle.signerKeyId}`, 'HARNESS_ERROR')\n if (trusted.publicKeyPem !== bundle.signature.publicKeyPem) fail(`Evidence bundle key does not match trust store: ${bundle.signerKeyId}`, 'HARNESS_ERROR')\n }\n const paths = new Set<string>()\n for (const file of bundle.files) {\n if (!file || typeof file.path !== 'string' || paths.has(file.path) || !validDigest(file.sha256) || typeof file.contentBase64 !== 'string') fail('Evidence bundle file metadata is invalid.', 'HARNESS_ERROR')\n paths.add(file.path)\n const content = Buffer.from(file.contentBase64, 'base64')\n if (sha256(content) !== file.sha256) fail(`Evidence bundle file hash mismatch: ${file.path}`, 'HARNESS_ERROR')\n }\n if (!paths.has(`runs/${bundle.runId}/run.json`) || !paths.has(`runs/${bundle.runId}/events.ndjson`)) fail('Evidence bundle is missing the run projection or event log.', 'HARNESS_ERROR')\n if (sha256(JSON.stringify(body(bundle))) !== bundle.payloadHash) fail('Evidence bundle payload hash mismatch.', 'HARNESS_ERROR')\n let valid = false\n try { valid = verify(null, Buffer.from(bundle.payloadHash), createPublicKey(bundle.signature.publicKeyPem), Buffer.from(bundle.signature.signatureBase64, 'base64')) } catch { valid = false }\n if (!valid) fail('Evidence bundle signature is invalid.', 'HARNESS_ERROR')\n return { status: 'verified', runId: bundle.runId, payloadHash: bundle.payloadHash, fileCount: bundle.files.length, signed: true }\n}\n\nexport const readEvidenceTrustStore = (path: string): readonly TrustedEvidenceKey[] => {\n const value = readJson(path) as { readonly schemaVersion?: unknown; readonly keys?: unknown }\n if (value.schemaVersion !== 1 || !Array.isArray(value.keys)) fail('Evidence trust store must contain schemaVersion 1 and a keys array.', 'INVALID_INPUT')\n return (value.keys as readonly unknown[]).map((key: unknown, index: number) => {\n if (typeof key !== 'object' || key === null || Array.isArray(key) || !validKeyId((key as Record<string, unknown>)['keyId']) || typeof (key as Record<string, unknown>)['publicKeyPem'] !== 'string' || ((key as Record<string, unknown>)['status'] !== 'active' && (key as Record<string, unknown>)['status'] !== 'revoked')) fail(`Invalid evidence trust store key at index ${index}.`, 'INVALID_INPUT')\n return key as TrustedEvidenceKey\n })\n}\n"]}
|