scriptonia 0.7.0 → 0.9.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -12
- package/bin/scriptonia.mjs +106 -86
- package/bin/verify.mjs +266 -0
- package/dist/index.js +1686 -0
- package/dist/index.js.map +1 -0
- package/package.json +52 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../../packages/core/src/index.ts","../../packages/eval-engine/src/index.ts","../../packages/evidence/src/index.ts","../../packages/git-snapshot/src/index.ts","../../packages/impact/src/index.ts","../../packages/model-gateway/src/index.ts","../../packages/observability/src/index.ts","../../packages/policy-engine/src/index.ts","../../packages/schemas/src/index.ts","../../packages/scope-engine/src/index.ts","../../packages/storage-sqlite/src/index.ts","../../packages/github/src/index.ts","../../packages/run-capture/src/index.ts","../../packages/run-protocol/src/index.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport YAML from \"yaml\";\nimport { assertInside } from \"@scriptonia/core\";\nimport { acknowledgeFinding, ensureConfig, evalDoctor, learnFromFinding, loadEvals, toSarif, verifyRepository, type VerificationResult } from \"@scriptonia/eval-engine\";\nimport { buildSnapshot, findRepositoryRoot } from \"@scriptonia/git-snapshot\";\nimport { githubStepSummary } from \"@scriptonia/github\";\nimport { initializeTelemetry } from \"@scriptonia/observability\";\nimport { evaluateDecisions, loadDecisions } from \"@scriptonia/policy-engine\";\nimport { captureCommand, ingestJsonl } from \"@scriptonia/run-capture\";\nimport { decisionSchema } from \"@scriptonia/schemas\";\nimport { buildScopeContext, matchScope } from \"@scriptonia/scope-engine\";\nimport { BrainStore } from \"@scriptonia/storage-sqlite\";\n\nconst V2_COMMANDS = new Set([\"run\", \"runs\", \"verify\", \"gate\", \"learn\", \"eval\", \"acknowledge\", \"events\", \"v2-init\", \"report-summary\", \"diff-check\", \"why\", \"recall\", \"decide\", \"pulse\"]);\nconst requested = process.argv[2];\n\nif (!requested || !V2_COMMANDS.has(requested)) {\n await import(new URL(\"../bin/scriptonia.mjs\", import.meta.url).href);\n} else {\n await runV2();\n}\n\nasync function runV2(): Promise<void> {\n await initializeTelemetry();\n const program = new Command();\n program.name(\"scriptonia\").description(\"Evidence-based product memory and verification for AI coding agents\").version(\"0.9.0-rc.1\");\n\n program.command(\"v2-init\")\n .description(\"Create inspectable V2 configuration directories\")\n .action(() => {\n const root = findRepositoryRoot();\n const filename = ensureConfig(root);\n console.log(`${pc.green(\"✓\")} V2 brain configured at ${path.relative(root, filename)}`);\n });\n\n program.command(\"diff-check\")\n .description(\"Run only sub-second deterministic changed-file policies\")\n .option(\"--base <ref>\", \"base Git reference\", \"HEAD\")\n .action((options: { base: string }) => {\n const started = performance.now();\n const root = findRepositoryRoot();\n const snapshot = buildSnapshot({ cwd: root, base: options.base });\n const definitions = loadDecisions(root);\n const context = buildScopeContext(root, snapshot.files.map((file) => file.path));\n const results = evaluateDecisions(definitions.decisions, context).filter((result) => result.state !== \"SKIPPED\");\n const plan = path.join(root, \"PLAN.md\");\n const unresolved = fs.existsSync(plan) ? fs.readFileSync(plan, \"utf8\").split(\"\\n\").filter((line) => /(?:⚠\\s*)?UNRESOLVED/i.test(line)) : [];\n console.log(`\\n${pc.bold(\"SCRIPTONIA DIFF CHECK\")} · ${snapshot.files.length} changed files\\n`);\n for (const error of definitions.errors) console.log(` ${pc.red(\"ERROR\")} ${error}`);\n for (const result of results) console.log(` ${result.state === \"PASS\" ? pc.green(result.state) : pc.red(result.state)} ${result.title} · ${result.reason}`);\n if (unresolved.length) console.log(` ${pc.red(\"FAIL\")} PLAN.md contains ${unresolved.length} unresolved constraint(s).`);\n const blocked = unresolved.length > 0 || results.some((result) => result.state === \"FAIL\" && result.enforcement === \"block\");\n const errored = definitions.errors.length > 0 || results.some((result) => result.state === \"ERROR\");\n console.log(`\\n${errored ? \"ERROR\" : blocked ? \"BLOCKED\" : \"PASS\"} · ${Math.round(performance.now() - started)}ms\\n`);\n process.exitCode = errored ? 4 : blocked ? 3 : 0;\n });\n\n program.command(\"decide <title>\")\n .description(\"Create a reviewable structured product or architecture decision\")\n .requiredOption(\"--kind <predicate>\", \"deterministic predicate kind\")\n .option(\"--names <values>\", \"comma-separated dependency, symbol, or path values\", \"\")\n .option(\"--include <globs>\", \"comma-separated scope globs\", \"**\")\n .option(\"--exclude <globs>\", \"comma-separated excluded globs\", \"\")\n .option(\"--owner <owner>\", \"responsible owner\")\n .option(\"--enforcement <level>\", \"observe, warn, action_required, or block\", \"observe\")\n .option(\"--confirm <actor>\", \"activate and record the confirming human\")\n .action((title: string, options: { kind: string; names: string; include: string; exclude: string; owner?: string; enforcement: string; confirm?: string }) => {\n const root = findRepositoryRoot();\n ensureConfig(root);\n const id = `decision_${slug(title)}_${Date.now().toString(36)}`;\n const decision = decisionSchema.parse({ schema_version: \"1\", id, version: 1, title, state: options.confirm ? \"active\" : \"draft\", owner: options.owner, source_refs: [], scope: { paths: { include: csv(options.include), exclude: csv(options.exclude) } }, predicate: { kind: options.kind, names: csv(options.names) }, enforcement: options.enforcement, created_at: new Date().toISOString(), confirmed_by: options.confirm });\n const filename = path.join(root, \".scriptonia\", \"decisions\", `${id}.yaml`);\n fs.writeFileSync(filename, YAML.stringify(decision));\n console.log(`${pc.green(\"✓\")} ${decision.state} decision written to ${path.relative(root, filename)}`);\n if (decision.state === \"draft\") console.log(\" Review its scope and predicate, then confirm it before enforcement.\");\n });\n\n program.command(\"why <file>\")\n .description(\"Explain the active product memory affecting a file\")\n .action((file: string) => {\n const root = findRepositoryRoot();\n const relative = path.relative(root, assertInside(root, path.resolve(root, file))).replaceAll(\"\\\\\", \"/\");\n const context = buildScopeContext(root, [relative]);\n const decisions = loadDecisions(root).decisions.filter((entry) => entry.state === \"active\" && matchScope(entry.scope, context).matched);\n const evals = loadEvals(root).evals.filter((entry) => entry.state === \"active\" && matchScope(entry.scope, context).matched);\n console.log(`\\n${pc.bold(\"WHY\")} ${relative}\\n`);\n for (const decision of decisions) console.log(` decision ${decision.id}@${decision.version} · ${decision.title} · ${decision.enforcement}`);\n for (const evaluation of evals) console.log(` eval ${evaluation.id}@${evaluation.version} · ${evaluation.title} · ${evaluation.enforcement}`);\n if (!decisions.length && !evals.length) console.log(\" No active scoped decisions or evals apply.\");\n console.log(\"\");\n });\n\n program.command(\"recall <query>\")\n .description(\"Search inspectable local decisions and evals\")\n .option(\"--limit <number>\", \"maximum matches\", \"10\")\n .action((query: string, options: { limit: string }) => {\n const root = findRepositoryRoot();\n const entries = [\n ...loadDecisions(root).decisions.map((value) => ({ kind: \"decision\", id: value.id, title: value.title, body: JSON.stringify(value) })),\n ...loadEvals(root).evals.map((value) => ({ kind: \"eval\", id: value.id, title: value.title, body: JSON.stringify(value) })),\n ];\n const tokens = query.toLowerCase().split(/\\W+/).filter(Boolean);\n const matches = entries.map((entry) => ({ ...entry, score: tokens.reduce((score, token) => score + (entry.body.toLowerCase().split(token).length - 1), 0) })).filter((entry) => entry.score > 0).sort((a, b) => b.score - a.score).slice(0, Math.max(1, Number(options.limit) || 10));\n console.log(`\\n${pc.bold(\"RECALL\")} “${query}”\\n`);\n for (const entry of matches) console.log(` ${entry.kind.padEnd(9)} ${entry.id} · ${entry.title}`);\n if (!matches.length) console.log(\" No matching local memory.\");\n console.log(\"\");\n });\n\n program.command(\"pulse\")\n .description(\"Show local brain and repository health\")\n .action(() => {\n const root = findRepositoryRoot();\n ensureConfig(root);\n const snapshot = buildSnapshot({ cwd: root, base: \"HEAD\" });\n const decisions = loadDecisions(root);\n const evals = loadEvals(root);\n const health = evalDoctor(root);\n const store = new BrainStore(root);\n try {\n const runs = store.listRuns(5) as unknown[];\n console.log(`\\n${pc.bold(\"SCRIPTONIA PULSE\")}\\n`);\n console.log(` repository ${snapshot.dirty ? pc.yellow(\"dirty\") : pc.green(\"clean\")} · ${snapshot.files.length} changed files`);\n console.log(` decisions ${decisions.decisions.filter((entry) => entry.state === \"active\").length} active · ${decisions.errors.length} invalid`);\n console.log(` evals ${evals.evals.filter((entry) => entry.state === \"active\").length} active · ${health.issues.length} health issues`);\n console.log(` runs ${runs.length} recent captured`);\n console.log(` semantic ${(process.env.SCRIPTONIA_MODEL_GATEWAY_URL && process.env.SCRIPTONIA_API_TOKEN) || (process.env.LITELLM_BASE_URL && process.env.LITELLM_MASTER_KEY) ? pc.green(\"configured\") : pc.dim(\"disabled until credentials are added\")}`);\n console.log(\"\");\n } finally { store.close(); }\n });\n\n program.command(\"run [argv...]\")\n .description(\"Capture exactly the agent command supplied after --\")\n .option(\"--adapter <name>\", \"adapter identity\", \"explicit-wrapper\")\n .option(\"--agent <name>\", \"agent identity\")\n .allowUnknownOption(true)\n .action(async (argv: string[], options: { adapter: string; agent?: string }) => {\n const root = findRepositoryRoot();\n if (argv[0] === \"show\") {\n if (!argv[1]) throw new Error(\"usage: scriptonia run show <run-id>\");\n const store = new BrainStore(root);\n try {\n const run = store.getRun(argv[1]);\n if (!run) throw new Error(`run not found: ${argv[1]}`);\n console.log(JSON.stringify(run, null, 2));\n } finally { store.close(); }\n return;\n }\n const separator = process.argv.indexOf(\"--\");\n const exact = separator >= 0 ? process.argv.slice(separator + 1) : argv;\n const result = await captureCommand({ root, command: exact, adapter: options.adapter, agent: options.agent });\n console.log(`\\n${pc.green(\"✓\")} captured ${result.runId} · child exit ${result.exitCode}`);\n process.exitCode = result.exitCode;\n });\n\n program.command(\"runs\")\n .description(\"List recent captured agent runs\")\n .option(\"--json\", \"print JSON\")\n .option(\"--limit <number>\", \"maximum rows\", \"20\")\n .action((options: { json?: boolean; limit: string }) => {\n const root = findRepositoryRoot();\n const store = new BrainStore(root);\n try {\n const runs = store.listRuns(Math.max(1, Math.min(200, Number(options.limit) || 20))) as Array<Record<string, unknown>>;\n if (options.json) console.log(JSON.stringify(runs, null, 2));\n else {\n console.log(`\\n${pc.bold(\"RECENT AGENT RUNS\")}\\n`);\n if (!runs.length) console.log(\" No captured runs yet. Use: scriptonia run -- <agent-command>\");\n for (const run of runs) console.log(` ${String(run.status).padEnd(10)} ${run.id} ${JSON.stringify(run.command)} exit=${run.exit_code ?? \"-\"}`);\n console.log(\"\");\n }\n } finally { store.close(); }\n });\n\n for (const name of [\"verify\", \"gate\"] as const) {\n program.command(name)\n .description(name === \"gate\" ? \"Aggregate evidence into a CI-safe exit status\" : \"Produce a complete local evidence report\")\n .option(\"--base <ref>\", \"base Git reference\")\n .option(\"--plan <file>\", \"plan file\", \"PLAN.md\")\n .option(\"--refresh\", \"create a new verification instead of using the immutable cache\")\n .option(\"--semantic\", \"enable advisory semantic evaluation\")\n .option(\"--ci\", \"consume CI evidence from SCRIPTONIA_NEEDS_JSON\")\n .option(\"--json [file]\", \"print JSON or write it to a file\")\n .option(\"--sarif <file>\", \"write SARIF output\")\n .action(async (options: VerifyOptions) => {\n const root = findRepositoryRoot();\n if (options.semantic) configureGatewayFromLegacyLogin();\n const result = await verifyRepository({ root, base: options.base, plan: options.plan, refresh: options.refresh, semantic: options.semantic, trustedBase: Boolean(options.ci) });\n emitVerification(root, result, options);\n if (name === \"gate\") process.exitCode = result.exitCode;\n });\n }\n\n program.command(\"learn <finding-id>\")\n .description(\"Convert a confirmed finding into a reviewable draft eval\")\n .action((findingId: string) => {\n const root = findRepositoryRoot();\n const learned = learnFromFinding(root, findingId);\n console.log(`${pc.green(\"✓\")} draft eval ${learned.evalCase.id} written to ${path.relative(root, learned.path)}`);\n console.log(\" Review its scope and evidence, add an owner, then change state to active.\");\n });\n\n const evaluation = program.command(\"eval\").description(\"Run and maintain versioned regression cases\");\n evaluation.command(\"run [id-or-scope]\")\n .option(\"--base <ref>\", \"base Git reference\")\n .option(\"--refresh\", \"bypass immutable cache\")\n .option(\"--json [file]\", \"print JSON or write it to a file\")\n .action(async (filter: string | undefined, options: VerifyOptions) => {\n const root = findRepositoryRoot();\n const result = await verifyRepository({ root, base: options.base, refresh: options.refresh, evalFilter: filter });\n emitVerification(root, result, options);\n process.exitCode = result.exitCode;\n });\n evaluation.command(\"doctor\")\n .action(() => {\n const root = findRepositoryRoot();\n const report = evalDoctor(root);\n console.log(`\\n${pc.bold(\"EVAL DOCTOR\")} · ${report.healthy ? pc.green(\"HEALTHY\") : pc.yellow(\"NEEDS ATTENTION\")}\\n`);\n for (const issue of report.issues) console.log(` ${issue.kind.padEnd(16)} ${issue.id} · ${issue.message}`);\n if (!report.issues.length) console.log(\" No duplicate, stale, ownerless, invalid, or expired evals.\");\n console.log(\"\");\n process.exitCode = report.healthy ? 0 : 1;\n });\n\n program.command(\"acknowledge <finding-id>\")\n .requiredOption(\"--reason <reason>\", \"accepted_risk, false_positive, not_applicable, or fix_later\")\n .requiredOption(\"--actor <identity>\", \"human identity\")\n .option(\"--comment <text>\", \"reason details\")\n .action((findingId: string, options: { reason: string; actor: string; comment?: string }) => {\n const allowed = [\"accepted_risk\", \"false_positive\", \"not_applicable\", \"fix_later\"] as const;\n if (!allowed.includes(options.reason as typeof allowed[number])) throw new Error(`invalid reason: ${options.reason}`);\n const root = findRepositoryRoot();\n const id = acknowledgeFinding(root, findingId, options.reason as typeof allowed[number], options.actor, options.comment);\n console.log(`${pc.green(\"✓\")} acknowledgement recorded: ${id}`);\n });\n\n const events = program.command(\"events\").description(\"Ingest normalized adapter events\");\n events.command(\"ingest <file>\").option(\"--adapter <name>\", \"normalized or codex\", \"normalized\").action((filename: string, options: { adapter: string }) => {\n const root = findRepositoryRoot();\n const full = assertInside(root, path.resolve(root, filename));\n if (options.adapter !== \"normalized\" && options.adapter !== \"codex\") throw new Error(`unsupported event adapter: ${options.adapter}`);\n const count = ingestJsonl(root, fs.readFileSync(full, \"utf8\"), options.adapter);\n console.log(`${pc.green(\"✓\")} ingested ${count} normalized run events`);\n });\n\n program.command(\"report-summary <file>\").action((filename: string) => {\n const root = findRepositoryRoot();\n const full = assertInside(root, path.resolve(root, filename));\n const result = JSON.parse(fs.readFileSync(full, \"utf8\")) as VerificationResult;\n const markdown = githubStepSummary(result);\n if (process.env.GITHUB_STEP_SUMMARY) fs.appendFileSync(process.env.GITHUB_STEP_SUMMARY, markdown);\n else console.log(markdown);\n });\n\n await program.parseAsync(process.argv);\n}\n\ntype VerifyOptions = { base?: string; plan?: string; refresh?: boolean; semantic?: boolean; ci?: boolean; json?: boolean | string; sarif?: string };\n\nfunction emitVerification(root: string, result: VerificationResult, options: VerifyOptions): void {\n if (options.json === true) console.log(JSON.stringify(result, null, 2));\n else {\n const color = result.gate === \"PASS\" ? pc.green : result.gate === \"PASS_WITH_WARNINGS\" ? pc.yellow : pc.red;\n console.log(`\\n${pc.bold(\"SCRIPTONIA VERIFY\")} · ${color(result.gate)}${result.cached ? pc.dim(\" · cached\") : \"\"}`);\n console.log(pc.dim(`snapshot ${result.snapshotId}`));\n console.log(`coverage plan=${result.coverage.plan} decisions=${result.coverage.decisions.evaluated}/${result.coverage.decisions.total} evals=${result.coverage.evals.evaluated}/${result.coverage.evals.total} semantic=${result.coverage.semantic}\\n`);\n for (const check of result.checks) {\n const state = check.state === \"PASS\" ? pc.green(check.state) : check.state === \"SKIPPED\" ? pc.dim(check.state) : check.state === \"INCONCLUSIVE\" ? pc.yellow(check.state) : pc.red(check.state);\n console.log(` ${state.padEnd(18)} ${check.title}`);\n if (check.state !== \"PASS\" && check.state !== \"SKIPPED\") console.log(` ${pc.dim(check.reason)} · ${check.findingId ?? check.id}`);\n }\n console.log(`\\nexit ${result.exitCode}\\n`);\n }\n if (typeof options.json === \"string\") writeOutput(root, options.json, `${JSON.stringify(result, null, 2)}\\n`);\n if (options.sarif) writeOutput(root, options.sarif, `${JSON.stringify(toSarif(result), null, 2)}\\n`);\n}\n\nfunction writeOutput(root: string, filename: string, content: string): void {\n const full = assertInside(root, path.resolve(root, filename));\n fs.mkdirSync(path.dirname(full), { recursive: true });\n fs.writeFileSync(full, content);\n}\n\nfunction csv(value: string): string[] { return value.split(\",\").map((entry) => entry.trim()).filter(Boolean); }\nfunction slug(value: string): string { return value.toLowerCase().replace(/[^a-z0-9]+/g, \"_\").replace(/^_|_$/g, \"\").slice(0, 48) || \"decision\"; }\n\nfunction configureGatewayFromLegacyLogin(): void {\n if (process.env.SCRIPTONIA_MODEL_GATEWAY_URL && process.env.SCRIPTONIA_API_TOKEN) return;\n try {\n const config = JSON.parse(fs.readFileSync(path.join(os.homedir(), \".scriptonia\", \"config.json\"), \"utf8\")) as { url?: string; token?: string };\n if (config.url && !process.env.SCRIPTONIA_MODEL_GATEWAY_URL) process.env.SCRIPTONIA_MODEL_GATEWAY_URL = config.url;\n if (config.token && !process.env.SCRIPTONIA_API_TOKEN) process.env.SCRIPTONIA_API_TOKEN = config.token;\n } catch { /* semantic output will become INCONCLUSIVE with a visible setup reason */ }\n}\n","import { createHash, randomBytes } from \"node:crypto\";\nimport path from \"node:path\";\n\nexport type CheckState = \"PASS\" | \"FAIL\" | \"INCONCLUSIVE\" | \"SKIPPED\" | \"ERROR\";\nexport type GateState = \"PASS\" | \"PASS_WITH_WARNINGS\" | \"ACTION_REQUIRED\" | \"BLOCKED\" | \"INCOMPLETE\";\nexport type Enforcement = \"observe\" | \"warn\" | \"action_required\" | \"block\";\n\nexport function canonicalize(value: unknown): string {\n return JSON.stringify(normalize(value));\n}\n\nfunction normalize(value: unknown): unknown {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return typeof value === \"string\" ? value.replace(/\\r\\n?/g, \"\\n\") : value;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) throw new TypeError(\"canonical JSON rejects non-finite numbers\");\n return value;\n }\n if (Array.isArray(value)) return value.map(normalize);\n if (typeof value === \"object\") {\n return Object.fromEntries(Object.entries(value as Record<string, unknown>)\n .filter(([, item]) => item !== undefined)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, item]) => [key, normalize(item)]));\n }\n throw new TypeError(`canonical JSON rejects ${typeof value}`);\n}\n\nexport function sha256(value: string | Uint8Array): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nexport function hashObject(value: unknown): string {\n return sha256(canonicalize(value));\n}\n\nexport function createId(prefix: string, at = Date.now()): string {\n return `${prefix}_${at.toString(36).padStart(9, \"0\")}${randomBytes(8).toString(\"hex\")}`;\n}\n\nexport function normalizeRepoPath(input: string): string {\n if (input.includes(\"\\0\")) throw new Error(\"repository path contains a null byte\");\n const normalized = input.replaceAll(\"\\\\\", \"/\").replace(/^\\.\\//, \"\");\n if (path.posix.isAbsolute(normalized) || normalized === \"..\" || normalized.startsWith(\"../\") || normalized.includes(\"/../\")) {\n throw new Error(`path escapes repository: ${input}`);\n }\n return path.posix.normalize(normalized);\n}\n\nexport function assertInside(root: string, candidate: string): string {\n const resolvedRoot = path.resolve(root);\n const resolved = path.resolve(candidate);\n if (resolved !== resolvedRoot && !resolved.startsWith(`${resolvedRoot}${path.sep}`)) throw new Error(`path escapes repository: ${candidate}`);\n return resolved;\n}\n\nexport function aggregateGate(checks: Array<{ state: CheckState; enforcement: Enforcement }>, incompleteBlocks = true): GateState {\n if (checks.some((item) => item.state === \"FAIL\" && item.enforcement === \"block\")) return \"BLOCKED\";\n if (checks.some((item) => item.state === \"FAIL\" && item.enforcement === \"action_required\")) return \"ACTION_REQUIRED\";\n if (checks.some((item) => item.state === \"ERROR\" || (incompleteBlocks && item.state === \"INCONCLUSIVE\" && item.enforcement === \"block\"))) return \"INCOMPLETE\";\n if (checks.some((item) => item.state === \"FAIL\" || item.state === \"INCONCLUSIVE\")) return \"PASS_WITH_WARNINGS\";\n return \"PASS\";\n}\n\nexport function exitCodeForGate(state: GateState): number {\n return state === \"PASS\" || state === \"PASS_WITH_WARNINGS\" ? 0 : state === \"ACTION_REQUIRED\" ? 2 : state === \"BLOCKED\" ? 3 : 4;\n}\n\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport YAML from \"yaml\";\nimport { aggregateGate, createId, exitCodeForGate, hashObject, nowIso, type CheckState, type Enforcement, type GateState } from \"@scriptonia/core\";\nimport { collectGitHubNeeds, collectJUnit, collectRepositoryFacts, evaluateRequirement, type EvidenceItem } from \"@scriptonia/evidence\";\nimport { buildSnapshot, listFilesAtRef, readFileAtRef, type GitSnapshot } from \"@scriptonia/git-snapshot\";\nimport { buildFallbackImpactIndex, impactedFiles, relatedTests } from \"@scriptonia/impact\";\nimport { loadCodeGraphIndex } from \"@scriptonia/impact-codegraph\";\nimport { semanticJudge } from \"@scriptonia/model-gateway\";\nimport { withSpan } from \"@scriptonia/observability\";\nimport { evaluateDecisions, loadDecisions, parseDecisionDocuments, type PolicyResult } from \"@scriptonia/policy-engine\";\nimport { configSchema, evalCaseSchema, evidenceRequirementSchema, type EvalCase, type EvidenceRequirement, type ScriptoniaConfig } from \"@scriptonia/schemas\";\nimport { buildScopeContext, matchScope } from \"@scriptonia/scope-engine\";\nimport { BrainStore } from \"@scriptonia/storage-sqlite\";\n\nexport type VerificationCheck = {\n id: string;\n findingId?: string;\n evaluator: string;\n evaluatorVersion: string;\n title: string;\n state: CheckState;\n enforcement: Enforcement;\n reason: string;\n evidence: Array<{ id?: string; kind: string; value: string }>;\n refs: string[];\n owner?: string;\n fingerprint: string;\n};\n\nexport type VerificationResult = {\n schemaVersion: \"1\";\n verificationId: string;\n snapshotId: string;\n createdAt: string;\n cached: boolean;\n gate: GateState;\n exitCode: number;\n coverage: { plan: \"present\" | \"absent\"; decisions: { total: number; evaluated: number; skipped: number }; evals: { total: number; evaluated: number; skipped: number }; semantic: \"disabled\" | \"available\" | \"unavailable\" };\n snapshot: Omit<GitSnapshot, \"diff\" | \"repositoryRoot\"> & { repositoryRoot: string };\n checks: VerificationCheck[];\n evidence: Array<Pick<EvidenceItem, \"id\" | \"kind\" | \"source\" | \"state\" | \"contentHash\">>;\n configurationHash: string;\n};\n\nconst DEFAULT_CONFIG: ScriptoniaConfig = configSchema.parse({});\n\nexport function loadConfig(root: string): { config: ScriptoniaConfig; errors: string[] } {\n const filename = path.join(root, \".scriptonia\", \"config.yaml\");\n if (!fs.existsSync(filename)) return { config: DEFAULT_CONFIG, errors: [] };\n try { return { config: configSchema.parse(YAML.parse(fs.readFileSync(filename, \"utf8\"))), errors: [] }; }\n catch (error) { return { config: DEFAULT_CONFIG, errors: [`config.yaml: ${error instanceof Error ? error.message : String(error)}`] }; }\n}\n\nfunction parseConfigDocument(text: string | undefined, name = \"config.yaml\"): { config: ScriptoniaConfig; errors: string[] } {\n if (text === undefined) return { config: DEFAULT_CONFIG, errors: [] };\n try { return { config: configSchema.parse(YAML.parse(text)), errors: [] }; }\n catch (error) { return { config: DEFAULT_CONFIG, errors: [`${name}: ${error instanceof Error ? error.message : String(error)}`] }; }\n}\n\nexport function ensureConfig(root: string): string {\n const directory = path.join(root, \".scriptonia\");\n const filename = path.join(directory, \"config.yaml\");\n fs.mkdirSync(path.join(directory, \"decisions\"), { recursive: true });\n fs.mkdirSync(path.join(directory, \"evals\"), { recursive: true });\n if (!fs.existsSync(filename)) fs.writeFileSync(filename, YAML.stringify(DEFAULT_CONFIG));\n return filename;\n}\n\nexport function loadEvals(root: string): { evals: EvalCase[]; errors: string[] } {\n const directory = path.join(root, \".scriptonia\", \"evals\");\n if (!fs.existsSync(directory)) return { evals: [], errors: [] };\n const evals: EvalCase[] = [];\n const errors: string[] = [];\n for (const filename of fs.readdirSync(directory).filter((file) => /\\.ya?ml$/i.test(file)).sort()) {\n try { evals.push(evalCaseSchema.parse(YAML.parse(fs.readFileSync(path.join(directory, filename), \"utf8\")))); }\n catch (error) { errors.push(`${filename}: ${error instanceof Error ? error.message : String(error)}`); }\n }\n return { evals, errors };\n}\n\nfunction parseEvalDocuments(documents: Array<{ name: string; text: string }>): { evals: EvalCase[]; errors: string[] } {\n const evals: EvalCase[] = [];\n const errors: string[] = [];\n for (const document of documents) {\n try { evals.push(evalCaseSchema.parse(YAML.parse(document.text))); }\n catch (error) { errors.push(`${document.name}: ${error instanceof Error ? error.message : String(error)}`); }\n }\n return { evals, errors };\n}\n\nexport async function verifyRepository(options: { root: string; base?: string; plan?: string; refresh?: boolean; evalFilter?: string; semantic?: boolean; githubNeeds?: string; trustedBase?: boolean } ): Promise<VerificationResult> {\n if (!options.trustedBase) ensureConfig(options.root);\n const trustedRef = options.trustedBase ? options.base : undefined;\n const loadedConfig = trustedRef ? parseConfigDocument(readFileAtRef(options.root, trustedRef, \".scriptonia/config.yaml\"), `${trustedRef}:.scriptonia/config.yaml`) : loadConfig(options.root);\n const config = loadedConfig.config;\n const snapshot = await withSpan(\"snapshot.build\", { base_configured: Boolean(options.base ?? config.base_ref) }, () => buildSnapshot({ cwd: options.root, base: options.base ?? config.base_ref }));\n const planPath = path.resolve(options.root, options.plan ?? \"PLAN.md\");\n const plan = fs.existsSync(planPath) ? fs.readFileSync(planPath, \"utf8\") : undefined;\n const loadedDecisions = trustedRef\n ? parseDecisionDocuments(listFilesAtRef(options.root, trustedRef, [\".scriptonia/decisions\"]).filter((name) => /\\.ya?ml$/i.test(name)).map((name) => ({ name: `${trustedRef}:${name}`, text: readFileAtRef(options.root, trustedRef, name) ?? \"\" })))\n : loadDecisions(options.root);\n const loadedEvals = trustedRef\n ? parseEvalDocuments(listFilesAtRef(options.root, trustedRef, [\".scriptonia/evals\"]).filter((name) => /\\.ya?ml$/i.test(name)).map((name) => ({ name: `${trustedRef}:${name}`, text: readFileAtRef(options.root, trustedRef, name) ?? \"\" })))\n : loadEvals(options.root);\n const evals = options.evalFilter ? loadedEvals.evals.filter((entry) => entry.id === options.evalFilter || entry.title.toLowerCase().includes(options.evalFilter!.toLowerCase())) : loadedEvals.evals;\n const collected = await withSpan(\"evidence.collect\", { changed_file_count: snapshot.files.length }, () => {\n const github = collectGitHubNeeds(options.githubNeeds ?? process.env[config.evidence.github_needs_env]);\n const junit = collectJUnit(options.root, config.evidence.junit);\n const repositoryFacts = collectRepositoryFacts(options.root, snapshot.files.map((file) => file.path));\n return { github, evidence: [...github, ...junit, ...repositoryFacts] };\n });\n const { github, evidence } = collected;\n const passedChecks = github.filter((item) => item.state === \"available\").map((item) => String(item.payload.name));\n const impactIndex = await withSpan(\"impact.index\", { changed_file_count: snapshot.files.length }, () => loadCodeGraphIndex(options.root) ?? buildFallbackImpactIndex(options.root));\n const impact = impactedFiles(impactIndex, snapshot.files.map((file) => file.path));\n const scope = await withSpan(\"scope.resolve\", { impacted_file_count: impact.files.length }, () => buildScopeContext(options.root, impact.files, { checks: passedChecks }));\n const policy = await withSpan(\"policy.evaluate\", { decision_count: loadedDecisions.decisions.length }, () => evaluateDecisions(loadedDecisions.decisions, scope));\n const identity = {\n schemaVersion: \"1\", baseSha: snapshot.baseSha, headSha: snapshot.headSha, diffHash: snapshot.diffHash,\n config: config, plan: plan ? hashObject(plan) : null,\n decisions: loadedDecisions.decisions.map((entry) => ({ id: entry.id, version: entry.version, hash: hashObject(entry) })),\n evals: evals.map((entry) => ({ id: entry.id, version: entry.version, hash: hashObject(entry) })),\n evidence: evidence.map((entry) => ({ hash: entry.contentHash, state: entry.state })),\n impact: { provider: impactIndex.provider, version: impactIndex.version, id: impactIndex.id, edges: impact.edges },\n evaluators: { policy: \"1\", eval: \"1\", plan: \"1\", gate: \"1\" },\n semantic: config.semantic.enabled || options.semantic ? {\n model: config.semantic.model ?? process.env.OPENAI_OUTPUT_MODEL ?? process.env.LITELLM_MODEL ?? \"gpt-5.6-terra\",\n endpoint: config.semantic.endpoint ?? process.env.SCRIPTONIA_MODEL_GATEWAY_URL ?? process.env.LITELLM_BASE_URL ?? \"unconfigured\",\n } : null,\n trustedConfigurationRef: trustedRef ?? \"working-tree\",\n };\n const snapshotId = hashObject(identity);\n const store = new BrainStore(options.root);\n try {\n for (const decision of loadedDecisions.decisions) store.indexDecision({ ...decision });\n for (const evaluation of loadedEvals.evals) store.indexEval({ ...evaluation });\n store.saveSnapshot({ id: snapshotId, baseSha: snapshot.baseSha, headSha: snapshot.headSha, diffHash: snapshot.diffHash, payload: identity, files: snapshot.files });\n store.saveImpact({ id: impactIndex.id, provider: impactIndex.provider, version: impactIndex.version, snapshotId, edges: impact.edges });\n store.saveEvidence(evidence.map((entry) => ({ id: entry.id, contentHash: entry.contentHash, kind: entry.kind, state: entry.state, payload: entry.payload, collectedAt: entry.collectedAt })));\n if (!options.refresh) {\n const cached = await withSpan(\"cache.lookup\", { refresh: false }, () => store.getCached(snapshotId) as VerificationResult | undefined);\n if (cached) return { ...cached, cached: true };\n }\n const checks: VerificationCheck[] = [];\n for (const error of [...loadedConfig.errors, ...loadedDecisions.errors, ...loadedEvals.errors]) checks.push(makeCheck({ evaluator: \"definition-loader\", title: \"Definition validation\", state: \"ERROR\", enforcement: \"block\", reason: error, refs: [] }));\n checks.push(...policy.map(policyToCheck));\n checks.push(...evaluateEvals(evals, scope, evidence, policy));\n checks.push(...evaluatePlan(plan, config.required_plan, evidence));\n checks.push(testCoverageCheck(snapshot, relatedTests(impactIndex, snapshot.files.map((file) => file.path))));\n checks.push(...github.map(githubCheck));\n let semanticCoverage: VerificationResult[\"coverage\"][\"semantic\"] = config.semantic.enabled || options.semantic ? \"unavailable\" : \"disabled\";\n if ((config.semantic.enabled || options.semantic) && plan) {\n const semanticChecks = await evaluateSemanticCriteria(plan, snapshot, config);\n if (semanticChecks.some((check) => !check.reason.includes(\"unavailable\"))) semanticCoverage = \"available\";\n checks.push(...semanticChecks);\n }\n const gate = await withSpan(\"verdict.aggregate\", { check_count: checks.length }, () => aggregateGate(checks, config.incomplete_blocks));\n for (const check of checks) {\n if (check.state === \"FAIL\" || check.state === \"ERROR\" || (check.state === \"INCONCLUSIVE\" && check.enforcement === \"block\")) {\n check.findingId = store.findFindingId(check.fingerprint) ?? `finding_${hashObject({ snapshotId, fingerprint: check.fingerprint }).slice(0, 24)}`;\n }\n }\n const verificationId = createId(\"verification\");\n const decisionEvaluated = policy.filter((entry) => entry.state !== \"SKIPPED\").length;\n const evalEvaluated = checks.filter((entry) => entry.evaluator === \"eval-evidence\" && entry.state !== \"SKIPPED\").length;\n const result: VerificationResult = {\n schemaVersion: \"1\", verificationId, snapshotId, createdAt: nowIso(), cached: false, gate, exitCode: exitCodeForGate(gate),\n coverage: { plan: plan ? \"present\" : \"absent\", decisions: { total: policy.length, evaluated: decisionEvaluated, skipped: policy.length - decisionEvaluated }, evals: { total: evals.length, evaluated: evalEvaluated, skipped: evals.length - evalEvaluated }, semantic: semanticCoverage },\n snapshot: { schemaVersion: snapshot.schemaVersion, baseRef: snapshot.baseRef, baseSha: snapshot.baseSha, headSha: snapshot.headSha, dirty: snapshot.dirty, diffHash: snapshot.diffHash, files: snapshot.files, snapshotId: snapshot.snapshotId, repositoryRoot: \".\" },\n checks,\n evidence: evidence.map(({ id, kind, source, state, contentHash }) => ({ id, kind, source, state, contentHash })),\n configurationHash: hashObject(config),\n };\n store.saveVerification({ id: verificationId, snapshotId, gateState: gate, result, refresh: options.refresh });\n store.saveChecks(verificationId, checks);\n for (const check of checks.filter((entry) => entry.findingId)) {\n store.saveFinding({ id: check.findingId!, snapshotId, fingerprint: check.fingerprint, evaluator: check.evaluator, state: check.state, enforcement: check.enforcement, owner: check.owner, payload: check });\n }\n return result;\n } finally { store.close(); }\n}\n\nfunction policyToCheck(result: PolicyResult): VerificationCheck {\n return { id: result.id, evaluator: result.evaluator, evaluatorVersion: result.evaluatorVersion, title: result.title, state: result.state, enforcement: result.enforcement, reason: result.reason, evidence: result.evidence.map((entry) => ({ kind: entry.kind, value: entry.value })), refs: [result.decisionRef], ...(result.owner ? { owner: result.owner } : {}), fingerprint: result.fingerprint };\n}\n\nfunction evaluateEvals(evals: EvalCase[], scope: ReturnType<typeof buildScopeContext>, evidence: EvidenceItem[], policies: PolicyResult[]): VerificationCheck[] {\n return evals.map((evaluation) => {\n if (evaluation.state !== \"active\") return makeCheck({ id: `eval:${evaluation.id}@${evaluation.version}`, evaluator: \"eval-evidence\", title: evaluation.title, state: \"SKIPPED\", enforcement: evaluation.enforcement, reason: `Eval is ${evaluation.state}; only active evals enforce.`, refs: [evaluation.id], owner: evaluation.owner });\n const match = matchScope(evaluation.scope, scope);\n if (!match.matched) return makeCheck({ id: `eval:${evaluation.id}@${evaluation.version}`, evaluator: \"eval-evidence\", title: evaluation.title, state: \"SKIPPED\", enforcement: evaluation.enforcement, reason: \"Eval scope does not intersect this change.\", refs: [evaluation.id], owner: evaluation.owner ?? match.owner });\n const withPolicies = [...evidence, ...policies.map((policy) => ({ id: policy.id, kind: \"decision_predicate\" as const, collector: \"policy-engine\", collectorVersion: \"1\" as const, source: policy.decisionRef, state: policy.state === \"PASS\" ? \"available\" as const : policy.state === \"FAIL\" ? \"failed\" as const : \"missing\" as const, contentHash: policy.fingerprint, payload: { name: policy.decisionRef, result: policy.state }, collectedAt: nowIso(), redaction: { applied: false, policyVersion: \"1\" as const } }))];\n const all = evaluation.evidence.all.map((requirement) => evaluateRequirement(requirement, withPolicies));\n const any = evaluation.evidence.any.map((requirement) => evaluateRequirement(requirement, withPolicies));\n let state: CheckState = \"PASS\";\n if (all.some((entry) => entry.state === \"ERROR\") || any.some((entry) => entry.state === \"ERROR\")) state = \"ERROR\";\n else if (all.some((entry) => entry.state === \"FAIL\") || (any.length > 0 && any.every((entry) => entry.state === \"FAIL\"))) state = \"FAIL\";\n else if (all.some((entry) => entry.state === \"INCONCLUSIVE\") || (any.length > 0 && !any.some((entry) => entry.state === \"PASS\"))) state = \"INCONCLUSIVE\";\n else if (!all.length && !any.length) state = \"INCONCLUSIVE\";\n const used = [...all, ...any].flatMap((entry) => entry.evidence);\n return makeCheck({ id: `eval:${evaluation.id}@${evaluation.version}`, evaluator: \"eval-evidence\", title: evaluation.title, state, enforcement: evaluation.enforcement, reason: state === \"PASS\" ? \"All declared eval evidence passed.\" : state === \"FAIL\" ? \"Declared eval evidence failed.\" : state === \"ERROR\" ? \"An evidence collector failed.\" : \"Declared eval evidence is unavailable or incomplete.\", evidence: used.map((entry) => ({ id: entry.id, kind: entry.kind, value: entry.source })), refs: [evaluation.id, ...evaluation.decision_refs, ...evaluation.signal_refs], owner: evaluation.owner ?? match.owner });\n });\n}\n\nfunction evaluatePlan(plan: string | undefined, required: boolean, evidence: EvidenceItem[]): VerificationCheck[] {\n if (!plan) return [makeCheck({ evaluator: \"plan-coverage\", title: \"Approved plan\", state: required ? \"INCONCLUSIVE\" : \"SKIPPED\", enforcement: required ? \"block\" : \"observe\", reason: required ? \"PLAN.md is required but unavailable.\" : \"No PLAN.md is present; policy-only mode is active.\", refs: [] })];\n const checks: VerificationCheck[] = [];\n const unresolved = plan.split(\"\\n\").filter((line) => /(?:⚠\\s*)?UNRESOLVED/i.test(line));\n checks.push(makeCheck({ evaluator: \"plan-unresolved\", title: \"Unresolved constraints\", state: unresolved.length ? \"FAIL\" : \"PASS\", enforcement: \"block\", reason: unresolved.length ? \"PLAN.md contains unresolved approval gates.\" : \"No unresolved approval gate remains.\", evidence: unresolved.map((value) => ({ kind: \"plan_line\", value: value.trim() })), refs: [\"PLAN.md\"] }));\n for (const criterion of parseSectionItems(plan, \"acceptance criteria\")) {\n const requirements = parseInlineEvidence(criterion);\n checks.push(planEvidenceCheck(\"plan-criterion\", criterion, requirements, evidence));\n }\n for (const nonGoal of parseSectionItems(plan, \"non-goals\")) {\n const requirements = parseInlineEvidence(nonGoal);\n checks.push(planEvidenceCheck(\"plan-non-goal\", nonGoal, requirements, evidence));\n }\n return checks;\n}\n\nfunction planEvidenceCheck(evaluator: \"plan-criterion\" | \"plan-non-goal\", text: string, requirements: EvidenceRequirement[], evidence: EvidenceItem[]): VerificationCheck {\n const title = text.replace(/\\s*\\[evidence:[^\\]]+\\]/g, \"\");\n if (!requirements.length) return makeCheck({ evaluator, title, state: \"INCONCLUSIVE\", enforcement: \"warn\", reason: evaluator === \"plan-criterion\" ? \"Acceptance criterion has no declared evidence mapping.\" : \"Non-goal has no deterministic evidence mapping.\", refs: [\"PLAN.md\"] });\n const results = requirements.map((requirement) => evaluateRequirement(requirement, evidence));\n const state: CheckState = results.some((entry) => entry.state === \"ERROR\") ? \"ERROR\" : results.some((entry) => entry.state === \"FAIL\") ? \"FAIL\" : results.some((entry) => entry.state === \"INCONCLUSIVE\") ? \"INCONCLUSIVE\" : \"PASS\";\n return makeCheck({ evaluator, title, state, enforcement: \"warn\", reason: state === \"PASS\" ? \"All declared plan evidence passed.\" : state === \"FAIL\" ? \"Declared plan evidence failed.\" : state === \"ERROR\" ? \"A declared plan evidence collector failed.\" : \"Declared plan evidence is unavailable or incomplete.\", evidence: results.flatMap((entry) => entry.evidence).map((entry) => ({ id: entry.id, kind: entry.kind, value: entry.source })), refs: [\"PLAN.md\"] });\n}\n\nfunction parseSectionItems(markdown: string, title: string): string[] {\n const lines = markdown.split(\"\\n\");\n const start = lines.findIndex((line) => new RegExp(`^#{1,6}\\\\s+${escapeRegex(title)}\\\\s*$`, \"i\").test(line.trim()));\n if (start < 0) return [];\n const items: string[] = [];\n for (const line of lines.slice(start + 1)) {\n if (/^#{1,6}\\s+/.test(line.trim())) break;\n const match = line.match(/^\\s*(?:[-*]|\\d+[.)])\\s+(?:\\[[ xX]\\]\\s*)?(.+)/);\n if (match?.[1]) items.push(match[1].trim());\n }\n return items;\n}\n\nfunction parseInlineEvidence(text: string): EvidenceRequirement[] {\n return [...text.matchAll(/\\[evidence:([a-z_]+)(?::([^:\\]]+))?(?::([^\\]]+))?\\]/gi)].flatMap((match) => {\n const kind = match[1]; const first = match[2]; const second = match[3];\n const candidate = kind === \"junit_test\" ? { kind, suite: first, test: second } : kind === \"repository_fact\" ? { kind, path: first } : { kind, name: first };\n const parsed = evidenceRequirementSchema.safeParse(candidate);\n return parsed.success ? [parsed.data] : [];\n });\n}\n\nfunction testCoverageCheck(snapshot: GitSnapshot, impactedTests: string[]): VerificationCheck {\n const source = snapshot.files.filter((file) => /\\.(?:[cm]?[jt]sx?|py|go|rs|java|rb|php|swift|kt)$/i.test(file.path) && !/(?:^|\\/)(?:scripts?|migrations?|drizzle)(?:\\/|$)/i.test(file.path));\n const tests = snapshot.files.filter((file) => /(?:^|\\/)(?:__tests__|tests?|spec)(?:\\/|$)|\\.(?:test|spec)\\.[^.]+$/i.test(file.path));\n const state: CheckState = source.length && !tests.length ? (impactedTests.length ? \"INCONCLUSIVE\" : \"FAIL\") : \"PASS\";\n const evidence = tests.length\n ? tests.map((file) => ({ kind: \"path\", value: file.path }))\n : impactedTests.length\n ? impactedTests.map((file) => ({ kind: \"related_test\", value: file }))\n : source.map((file) => ({ kind: \"path\", value: file.path }));\n return makeCheck({ evaluator: \"test-coverage\", title: \"Changed behavior has test evidence\", state, enforcement: \"warn\", reason: state === \"FAIL\" ? \"Product code changed without a changed or statically related test file.\" : state === \"INCONCLUSIVE\" ? \"Related tests exist, but no result artifact proves they ran.\" : \"A changed test is present or no product code changed.\", evidence, refs: [] });\n}\n\nfunction githubCheck(evidence: EvidenceItem): VerificationCheck {\n return makeCheck({ evaluator: \"github-check\", title: `CI check: ${String(evidence.payload.name)}`, state: evidence.state === \"available\" ? \"PASS\" : evidence.state === \"failed\" ? \"FAIL\" : evidence.state === \"error\" ? \"ERROR\" : \"INCONCLUSIVE\", enforcement: \"block\", reason: evidence.state === \"available\" ? \"GitHub job succeeded.\" : evidence.state === \"failed\" ? `GitHub job concluded ${String(evidence.payload.conclusion)}.` : \"GitHub job conclusion is unavailable.\", evidence: [{ id: evidence.id, kind: evidence.kind, value: evidence.source }], refs: [] });\n}\n\nasync function evaluateSemanticCriteria(plan: string, snapshot: GitSnapshot, config: ScriptoniaConfig): Promise<VerificationCheck[]> {\n const criteria = parseSectionItems(plan, \"acceptance criteria\").filter((line) => !parseInlineEvidence(line).length);\n const results: VerificationCheck[] = [];\n for (const criterion of criteria.slice(0, 20)) {\n const judged = await withSpan(\"judge.evaluate\", { criterion_length: criterion.length }, () => semanticJudge({ criterion, evidenceBundle: { changedFiles: snapshot.files, diff: snapshot.diff.slice(0, config.semantic.max_bytes) }, endpoint: config.semantic.endpoint, model: config.semantic.model, timeoutMs: config.semantic.timeout_ms, maxBytes: config.semantic.max_bytes }));\n const state: CheckState = !judged.available || !judged.result || judged.result.result === \"uncertain\" ? \"INCONCLUSIVE\" : judged.result.result === \"supports\" ? \"PASS\" : \"FAIL\";\n results.push(makeCheck({ evaluator: \"semantic-judge\", title: criterion, state, enforcement: \"warn\", reason: judged.result?.reason ?? `Semantic evaluation unavailable: ${judged.error ?? \"unknown error\"}`, evidence: judged.result?.evidenceRefs.map((value) => ({ kind: \"semantic_ref\", value })) ?? [], refs: [\"PLAN.md\"] }));\n }\n return results;\n}\n\nfunction makeCheck(input: { id?: string; evaluator: string; title: string; state: CheckState; enforcement: Enforcement; reason: string; evidence?: VerificationCheck[\"evidence\"]; refs: string[]; owner?: string }): VerificationCheck {\n const identity = { evaluator: input.evaluator, version: \"1\", title: input.title, state: input.state, evidence: input.evidence ?? [], refs: input.refs };\n return { id: input.id ?? createId(\"check\"), evaluator: input.evaluator, evaluatorVersion: \"1\", title: input.title, state: input.state, enforcement: input.enforcement, reason: input.reason, evidence: input.evidence ?? [], refs: input.refs, ...(input.owner ? { owner: input.owner } : {}), fingerprint: hashObject(identity) };\n}\n\nfunction escapeRegex(value: string): string { return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); }\n\nexport function learnFromFinding(root: string, findingId: string): { path: string; evalCase: EvalCase } {\n const store = new BrainStore(root);\n try {\n const finding = store.getFinding(findingId);\n if (!finding) throw new Error(`finding not found: ${findingId}`);\n const payload = finding.payload as VerificationCheck;\n const id = `eval_${payload.fingerprint.slice(0, 16)}`;\n const evalCase = evalCaseSchema.parse({\n schema_version: \"1\", id, version: 1, title: payload.title, state: \"draft\", owner: payload.owner,\n origin: { kind: \"confirmed_failure\", finding_ref: findingId }, decision_refs: payload.refs.filter((ref) => ref.startsWith(\"decision_\")), signal_refs: payload.refs.filter((ref) => ref.startsWith(\"signal_\")),\n scope: { paths: { include: (payload.evidence.filter((entry) => entry.kind === \"path\").map((entry) => entry.value).slice(0, 20).length ? payload.evidence.filter((entry) => entry.kind === \"path\").map((entry) => entry.value).slice(0, 20) : [\"**\"]), exclude: [] } },\n assertion: { kind: \"required_evidence\", description: payload.reason }, evidence: { all: [], any: [] }, enforcement: \"observe\", fingerprint: payload.fingerprint,\n });\n const filename = path.join(root, \".scriptonia\", \"evals\", `${id}.yaml`);\n if (fs.existsSync(filename)) throw new Error(`draft eval already exists: ${path.relative(root, filename)}`);\n fs.mkdirSync(path.dirname(filename), { recursive: true });\n fs.writeFileSync(filename, YAML.stringify(evalCase));\n return { path: filename, evalCase };\n } finally { store.close(); }\n}\n\nexport function acknowledgeFinding(root: string, findingId: string, reason: \"accepted_risk\" | \"false_positive\" | \"not_applicable\" | \"fix_later\", actor: string, comment?: string): string {\n const store = new BrainStore(root);\n try {\n const finding = store.getFinding(findingId);\n if (!finding) throw new Error(`finding not found: ${findingId}`);\n const id = createId(\"ack\");\n store.acknowledge({ id, findingId, reason, comment, actor, snapshotId: String(finding.snapshot_id) });\n return id;\n } finally { store.close(); }\n}\n\nexport function evalDoctor(root: string): { healthy: boolean; issues: Array<{ kind: string; id: string; message: string }> } {\n const { evals, errors } = loadEvals(root);\n const { decisions } = loadDecisions(root);\n const issues = errors.map((message) => ({ kind: \"invalid\", id: \"definition\", message }));\n const activeDecisions = new Map(decisions.filter((entry) => entry.state === \"active\").map((entry) => [entry.id, entry]));\n const fingerprints = new Map<string, string>();\n for (const evaluation of evals) {\n if (!evaluation.owner) issues.push({ kind: \"missing_owner\", id: evaluation.id, message: \"Eval has no owner.\" });\n if (evaluation.review_after && Date.parse(evaluation.review_after) < Date.now() && evaluation.state === \"active\") issues.push({ kind: \"expired_review\", id: evaluation.id, message: `Review date passed: ${evaluation.review_after}` });\n for (const ref of evaluation.decision_refs) if (!activeDecisions.has(ref) && evaluation.state === \"active\") issues.push({ kind: \"stale_decision\", id: evaluation.id, message: `Referenced decision is not active: ${ref}` });\n const fingerprint = evaluation.fingerprint ?? hashObject({ assertion: evaluation.assertion, scope: evaluation.scope, origin: evaluation.origin, evidence: evaluation.evidence });\n const duplicate = fingerprints.get(fingerprint);\n if (duplicate) issues.push({ kind: \"duplicate\", id: evaluation.id, message: `Duplicates ${duplicate}.` });\n else fingerprints.set(fingerprint, evaluation.id);\n }\n return { healthy: issues.length === 0, issues };\n}\n\nexport function toSarif(result: VerificationResult): Record<string, unknown> {\n const actionable = result.checks.filter((check) => check.state === \"FAIL\" || check.state === \"ERROR\" || check.state === \"INCONCLUSIVE\");\n return { version: \"2.1.0\", $schema: \"https://json.schemastore.org/sarif-2.1.0.json\", runs: [{ tool: { driver: { name: \"Scriptonia\", version: \"0.9.0-rc.1\", informationUri: \"https://scriptonia.dev\", rules: [...new Map(actionable.map((check) => [check.evaluator, { id: check.evaluator, name: check.evaluator, shortDescription: { text: check.title } }])).values()] } }, results: actionable.map((check) => ({ ruleId: check.evaluator, level: check.enforcement === \"block\" ? \"error\" : \"warning\", message: { text: `${check.title}: ${check.reason}` }, properties: { state: check.state, enforcement: check.enforcement, fingerprint: check.fingerprint, refs: check.refs } })) }] };\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport fg from \"fast-glob\";\nimport { XMLParser } from \"fast-xml-parser\";\nimport { createId, hashObject, nowIso } from \"@scriptonia/core\";\nimport type { EvidenceRequirement } from \"@scriptonia/schemas\";\n\nexport type EvidenceState = \"available\" | \"missing\" | \"failed\" | \"error\";\nexport type EvidenceItem = {\n id: string;\n kind: EvidenceRequirement[\"kind\"];\n collector: string;\n collectorVersion: \"1\";\n source: string;\n state: EvidenceState;\n contentHash: string;\n payload: Record<string, unknown>;\n collectedAt: string;\n redaction: { applied: boolean; policyVersion: \"1\" };\n};\n\nfunction item(kind: EvidenceItem[\"kind\"], collector: string, source: string, state: EvidenceState, payload: Record<string, unknown>): EvidenceItem {\n return { id: createId(\"evidence\"), kind, collector, collectorVersion: \"1\", source, state, contentHash: hashObject({ kind, source, state, payload }), payload, collectedAt: nowIso(), redaction: { applied: false, policyVersion: \"1\" } };\n}\n\nexport function collectGitHubNeeds(raw = process.env.SCRIPTONIA_NEEDS_JSON): EvidenceItem[] {\n if (!raw) return [];\n try {\n const needs = JSON.parse(raw) as Record<string, { result?: string; outputs?: Record<string, string> }>;\n return Object.entries(needs).map(([name, value]) => {\n const result = String(value?.result ?? \"unknown\").toLowerCase();\n const state: EvidenceState = result === \"success\" ? \"available\" : result === \"failure\" || result === \"cancelled\" ? \"failed\" : \"missing\";\n return item(\"github_check\", \"github-needs\", `github:${name}`, state, { name, conclusion: result, outputs: value?.outputs ?? {} });\n });\n } catch (error) {\n return [item(\"github_check\", \"github-needs\", \"env:SCRIPTONIA_NEEDS_JSON\", \"error\", { error: error instanceof Error ? error.message : String(error) })];\n }\n}\n\nexport function collectJUnit(root: string, patterns: string[]): EvidenceItem[] {\n const files = fg.sync(patterns, { cwd: root, absolute: true, onlyFiles: true, unique: true, suppressErrors: true });\n const parser = new XMLParser({ ignoreAttributes: false, attributeNamePrefix: \"@_\", allowBooleanAttributes: true });\n const items: EvidenceItem[] = [];\n for (const filename of files) {\n try {\n const xml = fs.readFileSync(filename, \"utf8\");\n if (Buffer.byteLength(xml) > 10_000_000) throw new Error(\"JUnit artifact exceeds 10 MB limit\");\n const parsed = parser.parse(xml) as Record<string, unknown>;\n for (const test of flattenTests(parsed)) {\n const failed = Boolean(test.failure || test.error);\n const skipped = Boolean(test.skipped);\n const suite = String(test.classname ?? test.suite ?? \"\");\n const name = String(test.name ?? \"unnamed\");\n items.push(item(\"junit_test\", \"junit-xml\", path.relative(root, filename), skipped ? \"missing\" : failed ? \"failed\" : \"available\", { suite, test: name, failed, skipped }));\n }\n } catch (error) {\n items.push(item(\"junit_test\", \"junit-xml\", path.relative(root, filename), \"error\", { error: error instanceof Error ? error.message : String(error) }));\n }\n }\n return items;\n}\n\nfunction flattenTests(value: unknown, suite = \"\"): Array<Record<string, unknown>> {\n if (!value || typeof value !== \"object\") return [];\n const record = value as Record<string, unknown>;\n const currentSuite = String(record[\"@_name\"] ?? suite);\n const tests: Array<Record<string, unknown>> = asArray(record.testcase).map((entry) => ({ ...(entry as Record<string, unknown>), suite: currentSuite, classname: (entry as Record<string, unknown>)[\"@_classname\"], name: (entry as Record<string, unknown>)[\"@_name\"], failure: (entry as Record<string, unknown>).failure, error: (entry as Record<string, unknown>).error, skipped: (entry as Record<string, unknown>).skipped }));\n for (const key of [\"testsuite\", \"testsuites\"]) for (const child of asArray(record[key])) tests.push(...flattenTests(child, currentSuite));\n return tests;\n}\n\nfunction asArray(value: unknown): unknown[] { return value === undefined ? [] : Array.isArray(value) ? value : [value]; }\n\nexport function collectRepositoryFacts(root: string, changedFiles: string[]): EvidenceItem[] {\n return changedFiles.map((file) => {\n const full = path.join(root, file);\n let exists = false;\n let size = 0;\n try { const stat = fs.statSync(full); exists = stat.isFile(); size = stat.size; } catch { /* deleted */ }\n return item(\"repository_fact\", \"repository-fact\", `path:${file}`, \"available\", { path: file, exists, size });\n });\n}\n\nexport type RequirementResult = { state: \"PASS\" | \"FAIL\" | \"INCONCLUSIVE\" | \"ERROR\"; reason: string; evidence: EvidenceItem[] };\n\nexport function evaluateRequirement(requirement: EvidenceRequirement, evidence: EvidenceItem[]): RequirementResult {\n const relevant = evidence.filter((candidate) => candidate.kind === requirement.kind && requirementMatches(requirement, candidate));\n if (!relevant.length) return { state: \"INCONCLUSIVE\", reason: `Required ${requirement.kind} evidence is unavailable.`, evidence: [] };\n if (relevant.some((candidate) => candidate.state === \"error\")) return { state: \"ERROR\", reason: `${requirement.kind} collector failed.`, evidence: relevant };\n if (relevant.some((candidate) => candidate.state === \"failed\")) return { state: \"FAIL\", reason: `Required ${requirement.kind} evidence failed.`, evidence: relevant };\n if (relevant.some((candidate) => candidate.state === \"available\")) return { state: \"PASS\", reason: `Required ${requirement.kind} evidence passed.`, evidence: relevant };\n return { state: \"INCONCLUSIVE\", reason: `Required ${requirement.kind} evidence is incomplete.`, evidence: relevant };\n}\n\nfunction requirementMatches(requirement: EvidenceRequirement, candidate: EvidenceItem): boolean {\n const payload = candidate.payload;\n if (requirement.name && String(payload.name ?? payload.test ?? \"\") !== requirement.name) return false;\n if (requirement.suite && String(payload.suite ?? \"\") !== requirement.suite) return false;\n if (requirement.test && String(payload.test ?? \"\") !== requirement.test) return false;\n if (requirement.path && String(payload.path ?? \"\") !== requirement.path) return false;\n if (requirement.value && !Object.values(payload).map(String).includes(requirement.value)) return false;\n return true;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\nimport { hashObject, normalizeRepoPath, sha256 } from \"@scriptonia/core\";\n\nexport type ChangedFile = { path: string; status: \"added\" | \"modified\" | \"deleted\" | \"renamed\" | \"copied\" | \"unknown\"; oldPath?: string; binary: boolean };\nexport type GitSnapshot = {\n schemaVersion: \"1\";\n repositoryRoot: string;\n baseRef: string;\n baseSha: string;\n headSha: string;\n dirty: boolean;\n diff: string;\n diffHash: string;\n files: ChangedFile[];\n snapshotId: string;\n};\n\nfunction git(root: string, args: string[], allowFailure = false): string {\n const result = spawnSync(\"git\", args, { cwd: root, encoding: \"utf8\", maxBuffer: 40_000_000, shell: false });\n if (result.error) throw result.error;\n if (result.status !== 0 && !allowFailure) throw new Error(`git ${args[0] ?? \"command\"} failed: ${(result.stderr || \"\").trim()}`);\n return result.status === 0 ? (result.stdout || \"\").trimEnd() : \"\";\n}\n\nexport function findRepositoryRoot(cwd = process.cwd()): string {\n const root = git(cwd, [\"rev-parse\", \"--show-toplevel\"]);\n if (!root) throw new Error(\"not inside a Git repository\");\n return path.resolve(root);\n}\n\nexport function resolveRef(root: string, ref: string): string {\n const sha = git(root, [\"rev-parse\", \"--verify\", `${ref}^{commit}`]);\n if (!/^[0-9a-f]{40}$/i.test(sha)) throw new Error(`invalid Git ref: ${ref}`);\n return sha.toLowerCase();\n}\n\nexport function readFileAtRef(root: string, ref: string, filename: string): string | undefined {\n const sha = resolveRef(root, ref);\n const safe = normalizeRepoPath(filename);\n const result = spawnSync(\"git\", [\"show\", `${sha}:${safe}`], { cwd: root, encoding: \"utf8\", maxBuffer: 10_000_000, shell: false });\n return result.status === 0 ? result.stdout : undefined;\n}\n\nexport function listFilesAtRef(root: string, ref: string, prefixes: string[]): string[] {\n const sha = resolveRef(root, ref);\n const safe = prefixes.map(normalizeRepoPath);\n const output = git(root, [\"ls-tree\", \"-r\", \"--name-only\", sha, \"--\", ...safe], true);\n return output.split(\"\\n\").filter(Boolean).map(normalizeRepoPath).sort();\n}\n\nfunction parseNameStatus(text: string): ChangedFile[] {\n const out: ChangedFile[] = [];\n for (const line of text.split(\"\\n\")) {\n if (!line) continue;\n const [rawStatus = \"\", first = \"\", second] = line.split(\"\\t\");\n const code = rawStatus[0];\n const status = code === \"A\" ? \"added\" : code === \"M\" ? \"modified\" : code === \"D\" ? \"deleted\" : code === \"R\" ? \"renamed\" : code === \"C\" ? \"copied\" : \"unknown\";\n const target = status === \"renamed\" || status === \"copied\" ? second : first;\n if (!target) continue;\n const item: ChangedFile = { path: normalizeRepoPath(target), status, binary: false };\n if ((status === \"renamed\" || status === \"copied\") && first) item.oldPath = normalizeRepoPath(first);\n out.push(item);\n }\n return out;\n}\n\nfunction untrackedFiles(root: string): ChangedFile[] {\n return git(root, [\"ls-files\", \"--others\", \"--exclude-standard\"], true).split(\"\\n\").filter(Boolean).map(normalizeRepoPath).filter((file) => !isRuntimeFile(file)).map((file) => ({ path: file, status: \"added\" as const, binary: isBinary(path.join(root, file)) }));\n}\n\nfunction isRuntimeFile(file: string): boolean {\n return /^\\.scriptonia\\/(?:brain\\.db(?:-shm|-wal)?|artifacts\\/|result(?:\\.|-)|self-verification\\.)/.test(file);\n}\n\nfunction isBinary(filename: string): boolean {\n try {\n const fd = fs.openSync(filename, \"r\");\n const buffer = Buffer.alloc(8_192);\n const read = fs.readSync(fd, buffer, 0, buffer.length, 0);\n fs.closeSync(fd);\n return buffer.subarray(0, read).includes(0);\n } catch { return false; }\n}\n\nfunction untrackedPatch(root: string, files: ChangedFile[]): string {\n const chunks: string[] = [];\n for (const file of files) {\n if (file.binary) {\n chunks.push(`diff --git a/${file.path} b/${file.path}\\nnew file mode 100644\\nBinary files /dev/null and b/${file.path} differ`);\n continue;\n }\n const full = path.join(root, file.path);\n try {\n const stat = fs.statSync(full);\n if (!stat.isFile() || stat.size > 1_000_000) continue;\n const body = fs.readFileSync(full, \"utf8\").replace(/\\r\\n?/g, \"\\n\");\n const lines = body.split(\"\\n\");\n chunks.push(`diff --git a/${file.path} b/${file.path}\\nnew file mode 100644\\n--- /dev/null\\n+++ b/${file.path}\\n@@ -0,0 +1,${lines.length} @@\\n${lines.map((line) => `+${line}`).join(\"\\n\")}`);\n } catch { /* unreadable files remain represented in changedFiles */ }\n }\n return chunks.join(\"\\n\");\n}\n\nexport function buildSnapshot(options: { cwd?: string; base?: string; includeWorkingTree?: boolean } = {}): GitSnapshot {\n const root = findRepositoryRoot(options.cwd);\n const baseRef = options.base ?? \"HEAD\";\n const baseSha = resolveRef(root, baseRef);\n const headSha = resolveRef(root, \"HEAD\");\n const includeWorkingTree = options.includeWorkingTree ?? true;\n const range = baseSha === headSha ? \"HEAD\" : `${baseSha}...${headSha}`;\n let diff = git(root, [\"diff\", \"--no-ext-diff\", \"--binary\", \"--unified=20\", range]);\n let files = parseNameStatus(git(root, [\"diff\", \"--name-status\", \"--find-renames\", range]));\n let dirty = false;\n if (includeWorkingTree) {\n const working = git(root, [\"diff\", \"--no-ext-diff\", \"--binary\", \"--unified=20\", \"HEAD\"]);\n const workingFiles = parseNameStatus(git(root, [\"diff\", \"--name-status\", \"--find-renames\", \"HEAD\"]));\n const untracked = untrackedFiles(root);\n dirty = workingFiles.length > 0 || untracked.length > 0;\n diff = [diff, working, untrackedPatch(root, untracked)].filter(Boolean).join(\"\\n\");\n const map = new Map([...files, ...workingFiles, ...untracked].map((file) => [file.path, file]));\n files = [...map.values()].sort((a, b) => a.path.localeCompare(b.path));\n }\n for (const file of files) if (!file.binary && file.status !== \"deleted\") file.binary = isBinary(path.join(root, file.path));\n const diffHash = sha256(diff.replace(/\\r\\n?/g, \"\\n\"));\n const identity = { schemaVersion: \"1\", baseSha, headSha, dirty, diffHash, files: files.map(({ path: name, status, oldPath, binary }) => ({ path: name, status, oldPath, binary })) };\n return { schemaVersion: \"1\", repositoryRoot: root, baseRef, baseSha, headSha, dirty, diff, diffHash, files, snapshotId: hashObject(identity) };\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport fg from \"fast-glob\";\nimport { hashObject, normalizeRepoPath } from \"@scriptonia/core\";\n\nexport type ImpactEdge = { from: string; to: string; kind: \"import\" | \"call\" | \"inheritance\" | \"data\" | \"heuristic\"; confidence: \"high\" | \"medium\" | \"low\"; provenance: string };\nexport type ImpactIndex = { provider: string; version: \"1\"; id: string; edges: ImpactEdge[] };\n\nconst SOURCE = [\"**/*.{ts,tsx,js,jsx,mts,cts,mjs,cjs}\", \"!**/node_modules/**\", \"!**/dist/**\", \"!**/.next/**\", \"!**/coverage/**\"];\nconst EXTENSIONS = [\"\", \".ts\", \".tsx\", \".js\", \".jsx\", \".mts\", \".cts\", \".mjs\", \".cjs\", \"/index.ts\", \"/index.tsx\", \"/index.js\", \"/index.jsx\"];\n\nexport function buildFallbackImpactIndex(root: string): ImpactIndex {\n const files = fg.sync(SOURCE, { cwd: root, onlyFiles: true, unique: true }).map(normalizeRepoPath).sort();\n const known = new Set(files);\n const edges: ImpactEdge[] = [];\n for (const file of files) {\n let text: string;\n try { text = fs.readFileSync(path.join(root, file), \"utf8\"); } catch { continue; }\n const imports = [\n ...text.matchAll(/(?:import|export)\\s+(?:[^'\";]+?\\s+from\\s+)?[\"']([^\"']+)[\"']/g),\n ...text.matchAll(/(?:require|import)\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g),\n ];\n for (const match of imports) {\n const specifier = match[1];\n if (!specifier?.startsWith(\".\")) continue;\n const base = normalizeRepoPath(path.posix.join(path.posix.dirname(file), specifier));\n const target = EXTENSIONS.map((extension) => `${base}${extension}`).find((candidate) => known.has(candidate));\n if (target) edges.push({ from: file, to: target, kind: \"import\", confidence: \"high\", provenance: `static-import:${file}` });\n }\n }\n const stable = edges.sort((a, b) => `${a.from}:${a.to}`.localeCompare(`${b.from}:${b.to}`));\n return { provider: \"fallback-import-graph\", version: \"1\", id: hashObject(stable), edges: stable };\n}\n\nexport function impactedFiles(index: ImpactIndex, changedFiles: string[], depth = 2): { files: string[]; edges: ImpactEdge[] } {\n const changed = new Set(changedFiles.map(normalizeRepoPath));\n const files = new Set(changed);\n const used: ImpactEdge[] = [];\n let frontier = new Set(changed);\n for (let step = 0; step < depth; step++) {\n const next = new Set<string>();\n for (const edge of index.edges) {\n if (edge.confidence !== \"high\" || !frontier.has(edge.to) || files.has(edge.from)) continue;\n files.add(edge.from); next.add(edge.from); used.push(edge);\n }\n frontier = next;\n if (!frontier.size) break;\n }\n return { files: [...files].sort(), edges: used };\n}\n\nexport function relatedTests(index: ImpactIndex, changedFiles: string[]): string[] {\n const impacted = impactedFiles(index, changedFiles, 3).files;\n return impacted.filter((file) => /(?:^|\\/)(?:__tests__|tests?|spec)(?:\\/|$)|\\.(?:test|spec)\\.[^.]+$/i.test(file));\n}\n\nexport function loadCodeGraphIndex(root: string): ImpactIndex | undefined {\n const filename = path.join(root, \".scriptonia\", \"codegraph.json\");\n if (!fs.existsSync(filename)) return undefined;\n try {\n const value = JSON.parse(fs.readFileSync(filename, \"utf8\")) as { version?: string; edges?: ImpactEdge[] };\n const edges = (value.edges ?? []).filter((edge) => edge && typeof edge.from === \"string\" && typeof edge.to === \"string\" && [\"high\", \"medium\", \"low\"].includes(edge.confidence));\n return { provider: \"codegraph-file-adapter\", version: \"1\", id: hashObject({ sourceVersion: value.version, edges }), edges };\n } catch { return undefined; }\n}\n\n","import { hashObject } from \"@scriptonia/core\";\nimport { z } from \"zod\";\n\nconst judgeResultSchema = z.object({\n result: z.enum([\"supports\", \"contradicts\", \"uncertain\"]),\n confidence: z.number().min(0).max(1),\n evidenceRefs: z.array(z.string()).default([]),\n reason: z.string(),\n});\n\nexport type JudgeResult = z.infer<typeof judgeResultSchema> & {\n schemaVersion: \"1\";\n evaluatorVersion: \"1\";\n model: string;\n providerRevision?: string;\n rubricHash: string;\n};\n\nexport async function semanticJudge(input: {\n criterion: string;\n evidenceBundle: unknown;\n endpoint?: string;\n apiKey?: string;\n model?: string;\n timeoutMs?: number;\n maxBytes?: number;\n fetchImpl?: typeof fetch;\n}): Promise<{ available: boolean; result?: JudgeResult; error?: string }> {\n const model = input.model ?? process.env.OPENAI_OUTPUT_MODEL ?? \"gpt-5.6-terra\";\n const rubric = \"Assess only whether the supplied evidence supports or contradicts the criterion. Return uncertain when evidence is insufficient. Never infer behavior from code style or plausibility.\";\n const serialized = JSON.stringify(input.evidenceBundle);\n const maxBytes = input.maxBytes ?? 120_000;\n if (Buffer.byteLength(serialized) > maxBytes) return { available: false, error: `evidence bundle exceeds ${maxBytes} byte limit` };\n const gatewayUrl = process.env.SCRIPTONIA_MODEL_GATEWAY_URL?.replace(/\\/$/, \"\");\n const gatewayToken = process.env.SCRIPTONIA_API_TOKEN;\n if (gatewayUrl && gatewayToken) {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), input.timeoutMs ?? 20_000);\n try {\n const response = await (input.fetchImpl ?? fetch)(`${gatewayUrl}/api/v2/judge`, { method: \"POST\", headers: { authorization: `Bearer ${gatewayToken}`, \"content-type\": \"application/json\" }, signal: controller.signal, body: JSON.stringify({ criterion: input.criterion, evidence: input.evidenceBundle }) });\n const body = await response.json() as Record<string, unknown>;\n if (!response.ok) return { available: false, error: `Scriptonia model gateway returned ${response.status}` };\n const parsed = judgeResultSchema.safeParse(body);\n if (!parsed.success) return { available: false, error: \"Scriptonia model gateway returned invalid structured output\" };\n return { available: true, result: { ...parsed.data, schemaVersion: \"1\", evaluatorVersion: \"1\", model: String(body.model ?? model), ...(typeof body.providerRevision === \"string\" ? { providerRevision: body.providerRevision } : {}), rubricHash: String(body.rubricHash ?? hashObject(rubric)) } };\n } catch (error) { return { available: false, error: error instanceof Error ? error.message : String(error) }; }\n finally { clearTimeout(timeout); }\n }\n const endpoint = input.endpoint ?? process.env.LITELLM_BASE_URL;\n const apiKey = input.apiKey ?? process.env.LITELLM_MASTER_KEY;\n if (!endpoint || !apiKey) return { available: false, error: \"Scriptonia model gateway is not configured\" };\n const directModel = input.model ?? process.env.LITELLM_MODEL ?? \"semantic-judge\";\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), input.timeoutMs ?? 20_000);\n const url = `${endpoint.replace(/\\/$/, \"\")}/v1/chat/completions`;\n try {\n const response = await (input.fetchImpl ?? fetch)(url, {\n method: \"POST\",\n headers: { authorization: `Bearer ${apiKey}`, \"content-type\": \"application/json\" },\n signal: controller.signal,\n body: JSON.stringify({\n model: directModel,\n temperature: 0,\n response_format: { type: \"json_object\" },\n messages: [\n { role: \"system\", content: `${rubric}\\nReturn JSON with result, confidence, evidenceRefs, reason.` },\n { role: \"user\", content: JSON.stringify({ criterion: input.criterion, evidence: input.evidenceBundle }) },\n ],\n }),\n });\n const body = await response.json() as Record<string, unknown>;\n if (!response.ok) return { available: false, error: `LiteLLM returned ${response.status}` };\n const content = (((body.choices as Array<Record<string, unknown>> | undefined)?.[0]?.message as Record<string, unknown> | undefined)?.content);\n if (typeof content !== \"string\") return { available: false, error: \"LiteLLM response contains no message content\" };\n const parsed = judgeResultSchema.safeParse(JSON.parse(content));\n if (!parsed.success) return { available: false, error: \"semantic judge returned invalid structured output\" };\n return { available: true, result: { ...parsed.data, schemaVersion: \"1\", evaluatorVersion: \"1\", model: directModel, rubricHash: hashObject(rubric) } };\n } catch (error) {\n return { available: false, error: error instanceof Error ? error.message : String(error) };\n } finally { clearTimeout(timeout); }\n}\n","import { SpanStatusCode, trace, type Attributes } from \"@opentelemetry/api\";\n\nlet started = false;\n\nexport async function initializeTelemetry(): Promise<void> {\n if (started || process.env.SCRIPTONIA_TELEMETRY !== \"1\" || !process.env.OTEL_EXPORTER_OTLP_ENDPOINT) return;\n const [{ NodeSDK }, { OTLPTraceExporter }] = await Promise.all([import(\"@opentelemetry/sdk-node\"), import(\"@opentelemetry/exporter-trace-otlp-http\")]);\n const sdk = new NodeSDK({ traceExporter: new OTLPTraceExporter({ url: `${process.env.OTEL_EXPORTER_OTLP_ENDPOINT.replace(/\\/$/, \"\")}/v1/traces` }) });\n await sdk.start();\n started = true;\n}\n\nexport async function withSpan<T>(name: string, attributes: Attributes, operation: () => T | Promise<T>): Promise<T> {\n const tracer = trace.getTracer(\"scriptonia\", \"0.9.0-rc.1\");\n return tracer.startActiveSpan(name, { attributes }, async (span) => {\n const startedAt = performance.now();\n try {\n const result = await operation();\n span.setAttribute(\"duration_bucket_ms\", bucket(performance.now() - startedAt));\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.setStatus({ code: SpanStatusCode.ERROR, message: error instanceof Error ? error.message : String(error) });\n throw error;\n } finally { span.end(); }\n });\n}\n\nfunction bucket(duration: number): number {\n const buckets = [10, 25, 50, 100, 250, 500, 1_000, 2_000, 5_000, 10_000, 30_000];\n return buckets.find((value) => duration <= value) ?? 60_000;\n}\n\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport picomatch from \"picomatch\";\nimport YAML from \"yaml\";\nimport { hashObject } from \"@scriptonia/core\";\nimport { decisionSchema, type Decision } from \"@scriptonia/schemas\";\nimport { matchScope, ownerFor, type ScopeContext } from \"@scriptonia/scope-engine\";\n\nexport type PolicyResult = {\n id: string;\n evaluator: string;\n evaluatorVersion: \"1\";\n state: \"PASS\" | \"FAIL\" | \"INCONCLUSIVE\" | \"SKIPPED\" | \"ERROR\";\n enforcement: Decision[\"enforcement\"];\n title: string;\n reason: string;\n evidence: Array<{ kind: string; value: string }>;\n owner?: string;\n fingerprint: string;\n decisionRef: string;\n};\n\nexport function loadDecisions(root: string): { decisions: Decision[]; errors: string[] } {\n const directory = path.join(root, \".scriptonia\", \"decisions\");\n if (!fs.existsSync(directory)) return { decisions: [], errors: [] };\n const decisions: Decision[] = [];\n const errors: string[] = [];\n for (const name of fs.readdirSync(directory).filter((file) => /\\.ya?ml$/i.test(file)).sort()) {\n try { decisions.push(decisionSchema.parse(YAML.parse(fs.readFileSync(path.join(directory, name), \"utf8\")))); }\n catch (error) { errors.push(`${name}: ${error instanceof Error ? error.message : String(error)}`); }\n }\n return { decisions, errors };\n}\n\nexport function parseDecisionDocuments(documents: Array<{ name: string; text: string }>): { decisions: Decision[]; errors: string[] } {\n const decisions: Decision[] = [];\n const errors: string[] = [];\n for (const document of documents) {\n try { decisions.push(decisionSchema.parse(YAML.parse(document.text))); }\n catch (error) { errors.push(`${document.name}: ${error instanceof Error ? error.message : String(error)}`); }\n }\n return { decisions, errors };\n}\n\nexport function evaluateDecisions(decisions: Decision[], context: ScopeContext): PolicyResult[] {\n return decisions.map((decision) => evaluateDecision(decision, context));\n}\n\nexport function evaluateDecision(decision: Decision, context: ScopeContext): PolicyResult {\n const base = { id: `decision:${decision.id}@${decision.version}`, evaluator: `predicate:${decision.predicate.kind}`, evaluatorVersion: \"1\" as const, enforcement: decision.enforcement, title: decision.title, decisionRef: `${decision.id}@${decision.version}` };\n const finish = (state: PolicyResult[\"state\"], reason: string, evidence: PolicyResult[\"evidence\"], owner?: string): PolicyResult => {\n const identity = { decision: base.decisionRef, state, evidence, evaluator: base.evaluator, version: base.evaluatorVersion };\n return { ...base, state, reason, evidence, ...(owner ? { owner } : {}), fingerprint: hashObject(identity) };\n };\n if (decision.state !== \"active\") return finish(\"SKIPPED\", `Decision is ${decision.state}; only active decisions enforce.`, []);\n if (!decision.confirmed_by) return finish(\"INCONCLUSIVE\", \"Active decision has no human confirmation.\", []);\n const scoped = matchScope(decision.scope, context);\n if (!scoped.matched) return finish(\"SKIPPED\", \"Decision scope does not intersect this change.\", []);\n const p = decision.predicate;\n const names = p.names.length ? p.names : p.patterns;\n const matches = (patterns: string[]) => context.files.filter((file) => picomatch.isMatch(file, patterns, { dot: true }));\n switch (p.kind) {\n case \"path_forbidden\": {\n const found = matches(names);\n return finish(found.length ? \"FAIL\" : \"PASS\", found.length ? `Forbidden paths changed: ${found.join(\", \")}` : \"No forbidden path changed.\", found.map((value) => ({ kind: \"path\", value })), decision.owner ?? scoped.owner);\n }\n case \"path_requires_owner\": {\n const target = matches(names.length ? names : decision.scope.paths.include);\n const missing = target.filter((file) => !ownerFor(file, context.owners) && !decision.owner && !p.owner);\n return finish(missing.length ? \"FAIL\" : \"PASS\", missing.length ? `Changed paths have no owner: ${missing.join(\", \")}` : \"All applicable paths have an owner.\", target.map((value) => ({ kind: \"path\", value })), decision.owner ?? p.owner ?? scoped.owner);\n }\n case \"dependency_forbidden\": {\n const found = names.filter((name) => context.dependencies.includes(name));\n return finish(found.length ? \"FAIL\" : \"PASS\", found.length ? `Forbidden dependencies present: ${found.join(\", \")}` : \"No forbidden dependency is present.\", found.map((value) => ({ kind: \"dependency\", value })), decision.owner ?? scoped.owner);\n }\n case \"dependency_required\": {\n const missing = names.filter((name) => !context.dependencies.includes(name));\n return finish(missing.length ? \"FAIL\" : \"PASS\", missing.length ? `Required dependencies missing: ${missing.join(\", \")}` : \"Required dependencies are present.\", names.map((value) => ({ kind: \"dependency\", value })), decision.owner ?? scoped.owner);\n }\n case \"symbol_forbidden\": {\n const found = names.filter((name) => context.symbols.includes(name));\n return finish(found.length ? \"FAIL\" : \"PASS\", found.length ? `Forbidden symbols changed: ${found.join(\", \")}` : \"No forbidden symbol changed.\", found.map((value) => ({ kind: \"symbol\", value })), decision.owner ?? scoped.owner);\n }\n case \"symbol_requires_test\": {\n const targeted = names.some((name) => context.symbols.includes(name));\n const tests = context.files.filter((file) => /(?:^|\\/)(?:__tests__|tests?|spec)(?:\\/|$)|\\.(?:test|spec)\\.[^.]+$/i.test(file));\n return finish(targeted && !tests.length ? \"FAIL\" : \"PASS\", targeted && !tests.length ? \"Changed symbol requires a changed test.\" : \"Required test-file evidence is present or the symbol is unchanged.\", tests.map((value) => ({ kind: \"path\", value })), decision.owner ?? scoped.owner);\n }\n case \"file_pattern_required\": {\n const found = matches(names);\n return finish(found.length ? \"PASS\" : \"FAIL\", found.length ? \"Required file pattern is present in the change.\" : `No changed file matches: ${names.join(\", \")}`, found.map((value) => ({ kind: \"path\", value })), decision.owner ?? scoped.owner);\n }\n case \"permission_required\": {\n const required = p.permission ?? names[0];\n if (!required) return finish(\"ERROR\", \"permission_required has no permission value.\", []);\n return finish(context.permissions.includes(required) ? \"PASS\" : \"INCONCLUSIVE\", context.permissions.includes(required) ? `Permission confirmed: ${required}` : `Permission not confirmed: ${required}`, [{ kind: \"permission\", value: required }], decision.owner ?? scoped.owner);\n }\n case \"check_required\": {\n const required = p.check ?? names[0];\n if (!required) return finish(\"ERROR\", \"check_required has no check name.\", []);\n return finish(context.checks.includes(required) ? \"PASS\" : \"INCONCLUSIVE\", context.checks.includes(required) ? `Required check passed: ${required}` : `Required check evidence unavailable: ${required}`, [{ kind: \"check\", value: required }], decision.owner ?? scoped.owner);\n }\n }\n}\n","import { z } from \"zod\";\n\nexport const checkStateSchema = z.enum([\"PASS\", \"FAIL\", \"INCONCLUSIVE\", \"SKIPPED\", \"ERROR\"]);\nexport const gateStateSchema = z.enum([\"PASS\", \"PASS_WITH_WARNINGS\", \"ACTION_REQUIRED\", \"BLOCKED\", \"INCOMPLETE\"]);\nexport const enforcementSchema = z.enum([\"observe\", \"warn\", \"action_required\", \"block\"]);\nexport const lifecycleSchema = z.enum([\"draft\", \"active\", \"superseded\", \"expired\", \"stale\", \"quarantined\", \"archived\"]);\n\nconst defaultScope = {\n repositories: [] as string[], packages: [] as string[], services: [] as string[],\n paths: { include: [\"**\"], exclude: [] as string[] }, symbols: [] as string[],\n dependencies: [] as string[], owners: [] as string[], tags: [] as string[],\n};\n\nexport const scopeSchema = z.object({\n repositories: z.array(z.string()).default([]),\n packages: z.array(z.string()).default([]),\n services: z.array(z.string()).default([]),\n paths: z.object({ include: z.array(z.string()).default([\"**\"]), exclude: z.array(z.string()).default([]) }).default({ include: [\"**\"], exclude: [] }),\n symbols: z.array(z.string()).default([]),\n dependencies: z.array(z.string()).default([]),\n owners: z.array(z.string()).default([]),\n tags: z.array(z.string()).default([]),\n}).default(defaultScope);\n\nexport const predicateKinds = [\n \"path_forbidden\", \"path_requires_owner\", \"dependency_forbidden\", \"dependency_required\",\n \"symbol_forbidden\", \"symbol_requires_test\", \"file_pattern_required\", \"permission_required\", \"check_required\",\n] as const;\n\nexport const predicateSchema = z.object({\n kind: z.enum(predicateKinds),\n names: z.array(z.string()).default([]),\n patterns: z.array(z.string()).default([]),\n owner: z.string().optional(),\n permission: z.string().optional(),\n check: z.string().optional(),\n});\n\nexport const decisionSchema = z.object({\n schema_version: z.literal(\"1\").default(\"1\"),\n id: z.string().min(1),\n version: z.number().int().positive().default(1),\n title: z.string().min(1),\n state: lifecycleSchema.default(\"draft\"),\n owner: z.string().optional(),\n source_refs: z.array(z.string()).default([]),\n scope: scopeSchema,\n predicate: predicateSchema,\n enforcement: enforcementSchema.default(\"observe\"),\n created_at: z.string().datetime().optional(),\n confirmed_by: z.string().optional(),\n supersedes: z.string().optional(),\n});\n\nexport const evidenceRequirementSchema = z.object({\n kind: z.enum([\"github_check\", \"junit_test\", \"repository_fact\", \"decision_predicate\", \"state_validator\", \"human_confirmation\", \"semantic_judge\"]),\n name: z.string().optional(),\n suite: z.string().optional(),\n test: z.string().optional(),\n path: z.string().optional(),\n value: z.string().optional(),\n});\n\nexport const evalCaseSchema = z.object({\n schema_version: z.literal(\"1\").default(\"1\"),\n id: z.string().min(1),\n version: z.number().int().positive().default(1),\n title: z.string().min(1),\n state: lifecycleSchema.default(\"draft\"),\n owner: z.string().optional(),\n origin: z.object({ kind: z.string(), run_ref: z.string().optional(), finding_ref: z.string().optional() }),\n decision_refs: z.array(z.string()).default([]),\n signal_refs: z.array(z.string()).default([]),\n scope: scopeSchema,\n assertion: z.object({ kind: z.string(), description: z.string().optional() }),\n evidence: z.object({ all: z.array(evidenceRequirementSchema).default([]), any: z.array(evidenceRequirementSchema).default([]) }).default({ all: [], any: [] }),\n enforcement: enforcementSchema.default(\"observe\"),\n fingerprint: z.string().optional(),\n last_confirmed_at: z.string().datetime().optional(),\n review_after: z.string().datetime().optional(),\n});\n\nexport const runEventSchema = z.object({\n schemaVersion: z.literal(\"1\"),\n eventId: z.string(),\n runId: z.string(),\n sequence: z.number().int().nonnegative(),\n occurredAt: z.string().datetime(),\n source: z.object({ adapter: z.string(), adapterVersion: z.string(), agent: z.string().optional(), agentVersion: z.string().optional() }),\n type: z.enum([\"run.started\", \"run.finished\", \"tool.requested\", \"tool.completed\", \"file.changed\", \"command.requested\", \"human.corrected\", \"error\"]),\n payload: z.unknown(),\n redaction: z.object({ applied: z.boolean(), policyVersion: z.string() }),\n});\n\nexport const configSchema = z.object({\n schema_version: z.literal(\"1\").default(\"1\"),\n base_ref: z.string().default(\"HEAD\"),\n required_plan: z.boolean().default(false),\n incomplete_blocks: z.boolean().default(true),\n trusted_config_ref: z.string().default(\"HEAD\"),\n evidence: z.object({ junit: z.array(z.string()).default([]), github_needs_env: z.string().default(\"SCRIPTONIA_NEEDS_JSON\") }).default({ junit: [], github_needs_env: \"SCRIPTONIA_NEEDS_JSON\" }),\n semantic: z.object({ enabled: z.boolean().default(false), endpoint: z.string().url().optional(), model: z.string().optional(), max_bytes: z.number().int().positive().default(120_000), timeout_ms: z.number().int().positive().default(20_000) }).default({ enabled: false, max_bytes: 120_000, timeout_ms: 20_000 }),\n redaction: z.object({ env_names: z.array(z.string()).default([]), patterns: z.array(z.string()).default([]), max_payload_bytes: z.number().int().positive().default(128_000) }).default({ env_names: [], patterns: [], max_payload_bytes: 128_000 }),\n});\n\nexport type Decision = z.infer<typeof decisionSchema>;\nexport type EvalCase = z.infer<typeof evalCaseSchema>;\nexport type Scope = z.infer<typeof scopeSchema>;\nexport type Predicate = z.infer<typeof predicateSchema>;\nexport type EvidenceRequirement = z.infer<typeof evidenceRequirementSchema>;\nexport type RunEvent = z.infer<typeof runEventSchema>;\nexport type ScriptoniaConfig = z.infer<typeof configSchema>;\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport picomatch from \"picomatch\";\nimport { normalizeRepoPath } from \"@scriptonia/core\";\nimport type { Scope } from \"@scriptonia/schemas\";\n\nexport type ScopeContext = {\n root: string;\n files: string[];\n symbols: string[];\n dependencies: string[];\n checks: string[];\n permissions: string[];\n owners: Map<string, string[]>;\n packages: Map<string, string>;\n};\n\nexport type ScopeMatch = { matched: boolean; specificity: number; files: string[]; reasons: string[]; owner?: string };\n\nexport function discoverPackages(root: string): Map<string, string> {\n const result = new Map<string, string>();\n const visit = (relative: string, depth: number): void => {\n if (depth > 4) return;\n const absolute = path.join(root, relative);\n for (const entry of safeReadDir(absolute)) {\n if (!entry.isDirectory() || entry.name.startsWith(\".\") || entry.name === \"node_modules\" || entry.name === \"dist\") continue;\n const next = normalizeRepoPath(path.posix.join(relative.replaceAll(\"\\\\\", \"/\"), entry.name));\n const pkgFile = path.join(root, next, \"package.json\");\n if (fs.existsSync(pkgFile)) {\n try { result.set(next, String(JSON.parse(fs.readFileSync(pkgFile, \"utf8\")).name || next)); } catch { result.set(next, next); }\n }\n visit(next, depth + 1);\n }\n };\n if (fs.existsSync(path.join(root, \"package.json\"))) {\n try { result.set(\".\", String(JSON.parse(fs.readFileSync(path.join(root, \"package.json\"), \"utf8\")).name || \".\")); } catch { result.set(\".\", \".\"); }\n }\n visit(\".\", 0);\n return result;\n}\n\nfunction safeReadDir(dir: string): fs.Dirent[] {\n try { return fs.readdirSync(dir, { withFileTypes: true }); } catch { return []; }\n}\n\nexport function parseCodeowners(root: string): Map<string, string[]> {\n const candidates = [\"CODEOWNERS\", \".github/CODEOWNERS\", \"docs/CODEOWNERS\"];\n const file = candidates.map((name) => path.join(root, name)).find(fs.existsSync);\n const owners = new Map<string, string[]>();\n if (!file) return owners;\n for (const raw of fs.readFileSync(file, \"utf8\").split(\"\\n\")) {\n const line = raw.trim();\n if (!line || line.startsWith(\"#\")) continue;\n const [pattern, ...names] = line.split(/\\s+/);\n if (pattern && names.length) owners.set(pattern.replace(/^\\//, \"\"), names);\n }\n return owners;\n}\n\nexport function ownerFor(file: string, owners: Map<string, string[]>): string | undefined {\n let found: string[] | undefined;\n for (const [pattern, names] of owners) {\n try { if (picomatch.isMatch(file, pattern, { dot: true, basename: !pattern.includes(\"/\") })) found = names; } catch { /* invalid patterns are ignored as hints */ }\n }\n return found?.join(\",\");\n}\n\nexport function buildScopeContext(root: string, files: string[], extras: Partial<Omit<ScopeContext, \"root\" | \"files\" | \"owners\" | \"packages\">> = {}): ScopeContext {\n return {\n root,\n files: files.map(normalizeRepoPath),\n symbols: extras.symbols ?? extractSymbols(root, files),\n dependencies: extras.dependencies ?? discoverDependencies(root),\n checks: extras.checks ?? [],\n permissions: extras.permissions ?? [],\n owners: parseCodeowners(root),\n packages: discoverPackages(root),\n };\n}\n\nexport function matchScope(scope: Scope, context: ScopeContext): ScopeMatch {\n const include = scope.paths.include.length ? scope.paths.include : [\"**\"];\n const included = picomatch(include, { dot: true });\n const excluded = scope.paths.exclude.length ? picomatch(scope.paths.exclude, { dot: true }) : () => false;\n const pathFiles = context.files.filter((file) => included(file) && !excluded(file));\n const packageRoots = [...context.packages.entries()].filter(([, name]) => scope.packages.includes(name)).map(([root]) => root);\n const packageFiles = scope.packages.length ? context.files.filter((file) => packageRoots.some((root) => root === \".\" || file === root || file.startsWith(`${root}/`))) : [];\n const symbols = scope.symbols.filter((symbol) => context.symbols.includes(symbol));\n const deps = scope.dependencies.filter((dependency) => context.dependencies.includes(dependency));\n const hasConstraint = scope.packages.length + scope.services.length + scope.symbols.length + scope.dependencies.length > 0 || scope.paths.include.some((item) => item !== \"**\");\n const matched = hasConstraint ? Boolean(pathFiles.length || packageFiles.length || symbols.length || deps.length) : Boolean(context.files.length);\n const specificity = symbols.length ? 5 : pathFiles.some((file) => scope.paths.include.includes(file)) ? 4 : pathFiles.length ? 3 : packageFiles.length ? 2 : matched ? 1 : 0;\n const files = [...new Set([...pathFiles, ...packageFiles])];\n const reasons = [files.length && `paths:${files.length}`, symbols.length && `symbols:${symbols.join(\",\")}`, deps.length && `dependencies:${deps.join(\",\")}`].filter(Boolean) as string[];\n return { matched, specificity, files, reasons, owner: files.map((file) => ownerFor(file, context.owners)).find(Boolean) };\n}\n\nfunction discoverDependencies(root: string): string[] {\n const names = new Set<string>();\n for (const [directory] of discoverPackages(root)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(path.join(root, directory, \"package.json\"), \"utf8\"));\n for (const section of [pkg.dependencies, pkg.devDependencies, pkg.peerDependencies]) for (const name of Object.keys(section || {})) names.add(name);\n } catch { /* invalid manifests are handled by repository checks */ }\n }\n return [...names].sort();\n}\n\nfunction extractSymbols(root: string, files: string[]): string[] {\n const symbols = new Set<string>();\n const pattern = /\\b(?:export\\s+)?(?:async\\s+)?(?:function|class|interface|type|const|let|var)\\s+([A-Za-z_$][\\w$]*)/g;\n for (const file of files) {\n if (!/\\.[cm]?[jt]sx?$/.test(file)) continue;\n try {\n const text = fs.readFileSync(path.join(root, file), \"utf8\");\n for (const match of text.matchAll(pattern)) if (match[1]) symbols.add(match[1]);\n } catch { /* deleted/unreadable file */ }\n }\n return [...symbols].sort();\n}\n\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport Database from \"better-sqlite3\";\nimport { canonicalize, nowIso } from \"@scriptonia/core\";\n\nconst MIGRATION_1 = `\nCREATE TABLE IF NOT EXISTS schema_migrations (version INTEGER PRIMARY KEY, applied_at TEXT NOT NULL);\nCREATE TABLE IF NOT EXISTS agent_runs (\n id TEXT PRIMARY KEY, adapter TEXT NOT NULL, command_json TEXT NOT NULL, started_at TEXT NOT NULL,\n finished_at TEXT, base_sha TEXT, head_sha TEXT, diff_hash TEXT, exit_code INTEGER, status TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS run_events (\n event_id TEXT PRIMARY KEY, run_id TEXT NOT NULL REFERENCES agent_runs(id), sequence INTEGER NOT NULL,\n occurred_at TEXT NOT NULL, type TEXT NOT NULL, payload_json TEXT NOT NULL, redacted INTEGER NOT NULL,\n UNIQUE(run_id, sequence)\n);\nCREATE TABLE IF NOT EXISTS git_snapshots (\n id TEXT PRIMARY KEY, base_sha TEXT NOT NULL, head_sha TEXT NOT NULL, diff_hash TEXT NOT NULL,\n payload_json TEXT NOT NULL, created_at TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS verification_runs (\n id TEXT PRIMARY KEY, snapshot_id TEXT NOT NULL, gate_state TEXT NOT NULL, result_json TEXT NOT NULL,\n created_at TEXT NOT NULL, refreshed_from TEXT\n);\nCREATE TABLE IF NOT EXISTS verdict_cache (\n snapshot_id TEXT PRIMARY KEY, verification_id TEXT NOT NULL REFERENCES verification_runs(id), result_json TEXT NOT NULL,\n created_at TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS findings (\n id TEXT PRIMARY KEY, snapshot_id TEXT NOT NULL, fingerprint TEXT NOT NULL, evaluator TEXT NOT NULL,\n state TEXT NOT NULL, enforcement TEXT NOT NULL, owner TEXT, payload_json TEXT NOT NULL,\n first_seen TEXT NOT NULL, last_seen TEXT NOT NULL, UNIQUE(fingerprint, snapshot_id)\n);\nCREATE TABLE IF NOT EXISTS acknowledgements (\n id TEXT PRIMARY KEY, finding_id TEXT NOT NULL REFERENCES findings(id), reason TEXT NOT NULL,\n comment TEXT, actor TEXT NOT NULL, snapshot_id TEXT NOT NULL, created_at TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS eval_cases (\n id TEXT NOT NULL, version INTEGER NOT NULL, state TEXT NOT NULL, fingerprint TEXT,\n payload_json TEXT NOT NULL, indexed_at TEXT NOT NULL, PRIMARY KEY(id, version)\n);\nCREATE TABLE IF NOT EXISTS decision_versions (\n id TEXT NOT NULL, version INTEGER NOT NULL, state TEXT NOT NULL, payload_json TEXT NOT NULL,\n indexed_at TEXT NOT NULL, PRIMARY KEY(id, version)\n);\nCREATE TABLE IF NOT EXISTS evidence_items (\n id TEXT PRIMARY KEY, content_hash TEXT NOT NULL, kind TEXT NOT NULL, state TEXT NOT NULL,\n payload_json TEXT NOT NULL, collected_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_findings_fingerprint ON findings(fingerprint);\nCREATE INDEX IF NOT EXISTS idx_runs_started ON agent_runs(started_at DESC);\nCREATE INDEX IF NOT EXISTS idx_verifications_created ON verification_runs(created_at DESC);\n`;\n\nconst MIGRATION_2 = `\nCREATE TABLE IF NOT EXISTS signals (\n id TEXT PRIMARY KEY, source TEXT NOT NULL, body TEXT NOT NULL, content_hash TEXT NOT NULL,\n metadata_json TEXT NOT NULL DEFAULT '{}', created_at TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS plans (\n id TEXT NOT NULL, version INTEGER NOT NULL, state TEXT NOT NULL, body TEXT NOT NULL,\n content_hash TEXT NOT NULL, created_at TEXT NOT NULL, PRIMARY KEY(id, version)\n);\nCREATE TABLE IF NOT EXISTS decisions (\n id TEXT PRIMARY KEY, current_version INTEGER NOT NULL, state TEXT NOT NULL, title TEXT NOT NULL, owner TEXT\n);\nCREATE TABLE IF NOT EXISTS decision_links (\n decision_id TEXT NOT NULL, ref_type TEXT NOT NULL, ref_id TEXT NOT NULL,\n PRIMARY KEY(decision_id, ref_type, ref_id)\n);\nCREATE TABLE IF NOT EXISTS changed_files (\n snapshot_id TEXT NOT NULL, path TEXT NOT NULL, status TEXT NOT NULL, old_path TEXT, binary INTEGER NOT NULL,\n PRIMARY KEY(snapshot_id, path)\n);\nCREATE TABLE IF NOT EXISTS changed_symbols (\n snapshot_id TEXT NOT NULL, symbol TEXT NOT NULL, path TEXT NOT NULL, language TEXT,\n PRIMARY KEY(snapshot_id, symbol, path)\n);\nCREATE TABLE IF NOT EXISTS impact_indexes (\n id TEXT PRIMARY KEY, provider TEXT NOT NULL, version TEXT NOT NULL, snapshot_id TEXT NOT NULL,\n payload_json TEXT NOT NULL, created_at TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS impact_edges (\n impact_index_id TEXT NOT NULL, from_ref TEXT NOT NULL, to_ref TEXT NOT NULL, kind TEXT NOT NULL,\n confidence TEXT NOT NULL, provenance TEXT NOT NULL,\n PRIMARY KEY(impact_index_id, from_ref, to_ref, kind)\n);\nCREATE TABLE IF NOT EXISTS eval_versions (\n id TEXT NOT NULL, version INTEGER NOT NULL, state TEXT NOT NULL, payload_json TEXT NOT NULL,\n indexed_at TEXT NOT NULL, PRIMARY KEY(id, version)\n);\nCREATE TABLE IF NOT EXISTS eval_links (\n eval_id TEXT NOT NULL, ref_type TEXT NOT NULL, ref_id TEXT NOT NULL,\n PRIMARY KEY(eval_id, ref_type, ref_id)\n);\nCREATE TABLE IF NOT EXISTS verification_checks (\n verification_id TEXT NOT NULL, check_id TEXT NOT NULL, state TEXT NOT NULL, enforcement TEXT NOT NULL,\n fingerprint TEXT NOT NULL, payload_json TEXT NOT NULL, PRIMARY KEY(verification_id, check_id)\n);\nCREATE TABLE IF NOT EXISTS evaluator_calibration (\n evaluator TEXT NOT NULL, version TEXT NOT NULL, sample_id TEXT NOT NULL, judge_result TEXT NOT NULL,\n human_result TEXT NOT NULL, agreed INTEGER NOT NULL, created_at TEXT NOT NULL,\n PRIMARY KEY(evaluator, version, sample_id)\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS fts_memory USING fts5(kind, ref_id UNINDEXED, title, body, tokenize='unicode61');\n`;\n\nexport class BrainStore {\n readonly db: Database.Database;\n readonly filename: string;\n\n constructor(repoRoot: string, filename = path.join(repoRoot, \".scriptonia\", \"brain.db\")) {\n fs.mkdirSync(path.dirname(filename), { recursive: true });\n this.filename = filename;\n this.db = new Database(filename);\n this.db.pragma(\"journal_mode = WAL\");\n this.db.pragma(\"foreign_keys = ON\");\n this.db.pragma(\"busy_timeout = 5000\");\n this.db.pragma(\"synchronous = NORMAL\");\n this.migrate();\n }\n\n private migrate(): void {\n const current = Number(this.db.pragma(\"user_version\", { simple: true }));\n if (current < 1) this.db.transaction(() => {\n this.db.exec(MIGRATION_1);\n this.db.prepare(\"INSERT OR IGNORE INTO schema_migrations(version, applied_at) VALUES (?, ?)\").run(1, nowIso());\n this.db.pragma(\"user_version = 1\");\n })();\n if (current < 2) this.db.transaction(() => {\n this.db.exec(MIGRATION_2);\n this.db.prepare(\"INSERT OR IGNORE INTO schema_migrations(version, applied_at) VALUES (?, ?)\").run(2, nowIso());\n this.db.pragma(\"user_version = 2\");\n })();\n }\n\n close(): void { this.db.close(); }\n\n createRun(run: { id: string; adapter: string; command: string[]; startedAt: string; baseSha?: string }): void {\n this.db.prepare(`INSERT INTO agent_runs(id,adapter,command_json,started_at,base_sha,status) VALUES (?,?,?,?,?,?)`)\n .run(run.id, run.adapter, canonicalize(run.command), run.startedAt, run.baseSha ?? null, \"running\");\n }\n\n appendEvent(event: { eventId: string; runId: string; sequence: number; occurredAt: string; type: string; payload: unknown; redacted: boolean }): void {\n this.db.prepare(`INSERT INTO run_events(event_id,run_id,sequence,occurred_at,type,payload_json,redacted) VALUES (?,?,?,?,?,?,?)`)\n .run(event.eventId, event.runId, event.sequence, event.occurredAt, event.type, canonicalize(event.payload), event.redacted ? 1 : 0);\n }\n\n finishRun(run: { id: string; finishedAt: string; headSha?: string; diffHash?: string; exitCode: number; status: string }): void {\n this.db.prepare(`UPDATE agent_runs SET finished_at=?, head_sha=?, diff_hash=?, exit_code=?, status=? WHERE id=?`)\n .run(run.finishedAt, run.headSha ?? null, run.diffHash ?? null, run.exitCode, run.status, run.id);\n }\n\n listRuns(limit = 20): unknown[] {\n return this.db.prepare(`SELECT id,adapter,command_json AS command,started_at,finished_at,base_sha,head_sha,diff_hash,exit_code,status FROM agent_runs ORDER BY started_at DESC LIMIT ?`).all(limit)\n .map((row) => ({ ...(row as Record<string, unknown>), command: JSON.parse(String((row as Record<string, unknown>).command)) }));\n }\n\n getRun(id: string): unknown | undefined {\n const run = this.db.prepare(`SELECT * FROM agent_runs WHERE id=?`).get(id) as Record<string, unknown> | undefined;\n if (!run) return undefined;\n const events = this.db.prepare(`SELECT event_id,sequence,occurred_at,type,payload_json,redacted FROM run_events WHERE run_id=? ORDER BY sequence`).all(id)\n .map((row) => { const { payload_json, ...rest } = row as Record<string, unknown>; return { ...rest, payload: JSON.parse(String(payload_json)) }; });\n const { command_json, ...rest } = run;\n return { ...rest, command: JSON.parse(String(command_json)), events };\n }\n\n getCached(snapshotId: string): unknown | undefined {\n const row = this.db.prepare(`SELECT result_json FROM verdict_cache WHERE snapshot_id=?`).get(snapshotId) as { result_json: string } | undefined;\n return row ? JSON.parse(row.result_json) : undefined;\n }\n\n indexDecision(decision: { id: string; version: number; state: string; title: string; owner?: string; source_refs?: string[] } & Record<string, unknown>): void {\n const json = canonicalize(decision);\n this.db.transaction(() => {\n this.db.prepare(`INSERT INTO decisions(id,current_version,state,title,owner) VALUES (?,?,?,?,?) ON CONFLICT(id) DO UPDATE SET current_version=excluded.current_version,state=excluded.state,title=excluded.title,owner=excluded.owner`).run(decision.id, decision.version, decision.state, decision.title, decision.owner ?? null);\n this.db.prepare(`INSERT INTO decision_versions(id,version,state,payload_json,indexed_at) VALUES (?,?,?,?,?) ON CONFLICT(id,version) DO UPDATE SET state=excluded.state,payload_json=excluded.payload_json,indexed_at=excluded.indexed_at`).run(decision.id, decision.version, decision.state, json, nowIso());\n this.db.prepare(`DELETE FROM fts_memory WHERE kind='decision' AND ref_id=?`).run(decision.id);\n this.db.prepare(`INSERT INTO fts_memory(kind,ref_id,title,body) VALUES ('decision',?,?,?)`).run(decision.id, decision.title, json);\n for (const ref of decision.source_refs ?? []) this.db.prepare(`INSERT OR IGNORE INTO decision_links(decision_id,ref_type,ref_id) VALUES (?,?,?)`).run(decision.id, ref.split(\"_\")[0] || \"ref\", ref);\n })();\n }\n\n indexEval(evaluation: { id: string; version: number; state: string; title: string; decision_refs?: string[]; signal_refs?: string[] } & Record<string, unknown>): void {\n const json = canonicalize(evaluation);\n this.db.transaction(() => {\n this.db.prepare(`INSERT INTO eval_cases(id,version,state,fingerprint,payload_json,indexed_at) VALUES (?,?,?,?,?,?) ON CONFLICT(id,version) DO UPDATE SET state=excluded.state,fingerprint=excluded.fingerprint,payload_json=excluded.payload_json,indexed_at=excluded.indexed_at`).run(evaluation.id, evaluation.version, evaluation.state, String(evaluation.fingerprint ?? \"\"), json, nowIso());\n this.db.prepare(`INSERT INTO eval_versions(id,version,state,payload_json,indexed_at) VALUES (?,?,?,?,?) ON CONFLICT(id,version) DO UPDATE SET state=excluded.state,payload_json=excluded.payload_json,indexed_at=excluded.indexed_at`).run(evaluation.id, evaluation.version, evaluation.state, json, nowIso());\n this.db.prepare(`DELETE FROM fts_memory WHERE kind='eval' AND ref_id=?`).run(evaluation.id);\n this.db.prepare(`INSERT INTO fts_memory(kind,ref_id,title,body) VALUES ('eval',?,?,?)`).run(evaluation.id, evaluation.title, json);\n for (const ref of evaluation.decision_refs ?? []) this.db.prepare(`INSERT OR IGNORE INTO eval_links(eval_id,ref_type,ref_id) VALUES (?,?,?)`).run(evaluation.id, \"decision\", ref);\n for (const ref of evaluation.signal_refs ?? []) this.db.prepare(`INSERT OR IGNORE INTO eval_links(eval_id,ref_type,ref_id) VALUES (?,?,?)`).run(evaluation.id, \"signal\", ref);\n })();\n }\n\n saveSnapshot(snapshot: { id: string; baseSha: string; headSha: string; diffHash: string; payload: unknown; files: Array<{ path: string; status: string; oldPath?: string; binary: boolean }> }): void {\n this.db.transaction(() => {\n this.db.prepare(`INSERT OR IGNORE INTO git_snapshots(id,base_sha,head_sha,diff_hash,payload_json,created_at) VALUES (?,?,?,?,?,?)`).run(snapshot.id, snapshot.baseSha, snapshot.headSha, snapshot.diffHash, canonicalize(snapshot.payload), nowIso());\n const statement = this.db.prepare(`INSERT OR REPLACE INTO changed_files(snapshot_id,path,status,old_path,binary) VALUES (?,?,?,?,?)`);\n for (const file of snapshot.files) statement.run(snapshot.id, file.path, file.status, file.oldPath ?? null, file.binary ? 1 : 0);\n })();\n }\n\n saveImpact(input: { id: string; provider: string; version: string; snapshotId: string; edges: Array<{ from: string; to: string; kind: string; confidence: string; provenance: string }> }): void {\n this.db.transaction(() => {\n this.db.prepare(`INSERT OR IGNORE INTO impact_indexes(id,provider,version,snapshot_id,payload_json,created_at) VALUES (?,?,?,?,?,?)`).run(input.id, input.provider, input.version, input.snapshotId, canonicalize(input), nowIso());\n const statement = this.db.prepare(`INSERT OR IGNORE INTO impact_edges(impact_index_id,from_ref,to_ref,kind,confidence,provenance) VALUES (?,?,?,?,?,?)`);\n for (const edge of input.edges) statement.run(input.id, edge.from, edge.to, edge.kind, edge.confidence, edge.provenance);\n })();\n }\n\n saveEvidence(items: Array<{ id: string; contentHash: string; kind: string; state: string; payload: unknown; collectedAt: string }>): void {\n const statement = this.db.prepare(`INSERT OR REPLACE INTO evidence_items(id,content_hash,kind,state,payload_json,collected_at) VALUES (?,?,?,?,?,?)`);\n this.db.transaction(() => { for (const evidence of items) statement.run(evidence.id, evidence.contentHash, evidence.kind, evidence.state, canonicalize(evidence.payload), evidence.collectedAt); })();\n }\n\n saveChecks(verificationId: string, checks: Array<{ id: string; state: string; enforcement: string; fingerprint: string } & Record<string, unknown>>): void {\n const statement = this.db.prepare(`INSERT OR REPLACE INTO verification_checks(verification_id,check_id,state,enforcement,fingerprint,payload_json) VALUES (?,?,?,?,?,?)`);\n this.db.transaction(() => { for (const check of checks) statement.run(verificationId, check.id, check.state, check.enforcement, check.fingerprint, canonicalize(check)); })();\n }\n\n saveVerification(input: { id: string; snapshotId: string; gateState: string; result: unknown; refresh?: boolean }): void {\n const json = canonicalize(input.result);\n this.db.transaction(() => {\n this.db.prepare(`INSERT INTO verification_runs(id,snapshot_id,gate_state,result_json,created_at) VALUES (?,?,?,?,?)`)\n .run(input.id, input.snapshotId, input.gateState, json, nowIso());\n this.db.prepare(`INSERT INTO verdict_cache(snapshot_id,verification_id,result_json,created_at) VALUES (?,?,?,?) ON CONFLICT(snapshot_id) DO UPDATE SET verification_id=excluded.verification_id,result_json=excluded.result_json,created_at=excluded.created_at`)\n .run(input.snapshotId, input.id, json, nowIso());\n })();\n }\n\n saveFinding(finding: { id: string; snapshotId: string; fingerprint: string; evaluator: string; state: string; enforcement: string; owner?: string; payload: unknown }): void {\n const now = nowIso();\n const existing = this.db.prepare(`SELECT id FROM findings WHERE fingerprint=? ORDER BY first_seen LIMIT 1`).get(finding.fingerprint) as { id: string } | undefined;\n if (existing) {\n this.db.prepare(`UPDATE findings SET snapshot_id=?,state=?,enforcement=?,owner=?,payload_json=?,last_seen=? WHERE id=?`).run(finding.snapshotId, finding.state, finding.enforcement, finding.owner ?? null, canonicalize(finding.payload), now, existing.id);\n return;\n }\n this.db.prepare(`INSERT INTO findings(id,snapshot_id,fingerprint,evaluator,state,enforcement,owner,payload_json,first_seen,last_seen) VALUES (?,?,?,?,?,?,?,?,?,?)`)\n .run(finding.id, finding.snapshotId, finding.fingerprint, finding.evaluator, finding.state, finding.enforcement, finding.owner ?? null, canonicalize(finding.payload), now, now);\n }\n\n findFindingId(fingerprint: string): string | undefined {\n return (this.db.prepare(`SELECT id FROM findings WHERE fingerprint=? ORDER BY first_seen LIMIT 1`).get(fingerprint) as { id: string } | undefined)?.id;\n }\n\n getFinding(id: string): Record<string, unknown> | undefined {\n const row = this.db.prepare(`SELECT * FROM findings WHERE id=?`).get(id) as Record<string, unknown> | undefined;\n return row ? { ...row, payload: JSON.parse(String(row.payload_json)) } : undefined;\n }\n\n acknowledge(input: { id: string; findingId: string; reason: string; comment?: string; actor: string; snapshotId: string }): void {\n this.db.prepare(`INSERT INTO acknowledgements(id,finding_id,reason,comment,actor,snapshot_id,created_at) VALUES (?,?,?,?,?,?,?)`)\n .run(input.id, input.findingId, input.reason, input.comment ?? null, input.actor, input.snapshotId, nowIso());\n }\n}\n","export function githubStepSummary(result: { gate: string; snapshotId: string; checks: Array<{ state: string; title: string; reason: string }> }): string {\n const lines = [`# Scriptonia gate: ${result.gate}`, \"\", `Snapshot: \\`${result.snapshotId}\\``, \"\", \"| State | Check | Reason |\", \"|---|---|---|\"];\n for (const check of result.checks) lines.push(`| ${check.state} | ${escapeCell(check.title)} | ${escapeCell(check.reason)} |`);\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction escapeCell(value: string): string { return value.replaceAll(\"|\", \"\\\\|\").replaceAll(\"\\n\", \" \"); }\n\n","import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { createId, nowIso, sha256 } from \"@scriptonia/core\";\nimport { buildSnapshot } from \"@scriptonia/git-snapshot\";\nimport { createEvent, normalizeCodexJsonl, parseJsonl } from \"@scriptonia/run-protocol\";\nimport { BrainStore } from \"@scriptonia/storage-sqlite\";\n\nexport async function captureCommand(input: { root: string; command: string[]; adapter?: string; agent?: string; redaction?: { envNames?: string[]; patterns?: string[]; maxBytes?: number } }): Promise<{ runId: string; exitCode: number }> {\n if (!input.command.length || !input.command[0]) throw new Error(\"usage: scriptonia run -- <command> [args...]\");\n const store = new BrainStore(input.root);\n const runId = createId(\"run\");\n const before = buildSnapshot({ cwd: input.root, base: \"HEAD\" });\n const beforeHashes = snapshotFileHashes(input.root, before.files);\n let sequence = 0;\n const persist = (type: Parameters<typeof createEvent>[0][\"type\"], payload: unknown): void => {\n const event = createEvent({ runId, sequence: sequence++, type, payload, adapter: input.adapter, agent: input.agent, redaction: input.redaction });\n store.appendEvent({ eventId: event.eventId, runId, sequence: event.sequence, occurredAt: event.occurredAt, type: event.type, payload: event.payload, redacted: event.redaction.applied });\n };\n store.createRun({ id: runId, adapter: input.adapter ?? \"explicit-wrapper\", command: input.command, startedAt: nowIso(), baseSha: before.headSha });\n persist(\"run.started\", { baseSha: before.headSha, dirty: before.dirty });\n persist(\"command.requested\", { argv: input.command, cwd: \".\", inheritedAuthority: true });\n let exitCode = 1;\n try {\n exitCode = await new Promise<number>((resolve, reject) => {\n const child = spawn(input.command[0]!, input.command.slice(1), { cwd: input.root, stdio: \"inherit\", shell: false, env: process.env });\n child.once(\"error\", reject);\n child.once(\"exit\", (code, signal) => resolve(code ?? (signal ? 128 : 1)));\n });\n const after = buildSnapshot({ cwd: input.root, base: before.headSha });\n const afterHashes = snapshotFileHashes(input.root, after.files);\n const changedByCommand = after.files.filter((file) => beforeHashes.get(file.path) !== afterHashes.get(file.path));\n for (const file of changedByCommand) persist(\"file.changed\", { path: file.path, status: file.status, binary: file.binary });\n persist(\"run.finished\", { exitCode, headSha: after.headSha, diffHash: after.diffHash, changedFiles: changedByCommand.length });\n store.finishRun({ id: runId, finishedAt: nowIso(), headSha: after.headSha, diffHash: after.diffHash, exitCode, status: exitCode === 0 ? \"completed\" : \"failed\" });\n return { runId, exitCode };\n } catch (error) {\n persist(\"error\", { message: error instanceof Error ? error.message : String(error) });\n store.finishRun({ id: runId, finishedAt: nowIso(), exitCode, status: \"error\" });\n throw error;\n } finally { store.close(); }\n}\n\nfunction snapshotFileHashes(root: string, files: Array<{ path: string; status: string }>): Map<string, string> {\n const hashes = new Map<string, string>();\n for (const file of files) {\n if (file.status === \"deleted\") { hashes.set(file.path, \"deleted\"); continue; }\n try { hashes.set(file.path, sha256(fs.readFileSync(path.join(root, file.path)))); }\n catch { hashes.set(file.path, \"unreadable\"); }\n }\n return hashes;\n}\n\nexport function ingestJsonl(root: string, text: string, adapter: \"normalized\" | \"codex\" = \"normalized\"): number {\n const events = adapter === \"codex\" ? normalizeCodexJsonl(text) : parseJsonl(text);\n if (!events.length) return 0;\n const store = new BrainStore(root);\n try {\n const runIds = new Set(events.map((event) => event.runId));\n for (const runId of runIds) if (!store.getRun(runId)) store.createRun({ id: runId, adapter: events.find((event) => event.runId === runId)?.source.adapter ?? adapter, command: [\"imported-events\"], startedAt: events.find((event) => event.runId === runId)?.occurredAt ?? nowIso() });\n for (const event of events) store.appendEvent({ eventId: event.eventId, runId: event.runId, sequence: event.sequence, occurredAt: event.occurredAt, type: event.type, payload: event.payload, redacted: event.redaction.applied });\n for (const runId of runIds) store.finishRun({ id: runId, finishedAt: nowIso(), exitCode: 0, status: \"imported\" });\n return events.length;\n } finally { store.close(); }\n}\n","import { createId, nowIso } from \"@scriptonia/core\";\nimport { runEventSchema, type RunEvent } from \"@scriptonia/schemas\";\n\nconst BUILTIN_PATTERNS = [\n /\\b(?:sk|sk-ant|ghp|github_pat|xox[baprs])[-_][A-Za-z0-9_-]{12,}\\b/g,\n /\\bBearer\\s+[A-Za-z0-9._~+\\/-]+=*\\b/gi,\n /\\b[A-Za-z0-9_-]*(?:TOKEN|SECRET|PASSWORD|API_KEY)\\s*[=:]\\s*[^\\s,;]+/gi,\n];\n\nexport function redact(value: unknown, options: { envNames?: string[]; patterns?: string[]; maxBytes?: number } = {}): { value: unknown; applied: boolean } {\n const secrets = (options.envNames ?? []).map((name) => process.env[name]).filter((entry): entry is string => Boolean(entry && entry.length >= 4));\n const custom = (options.patterns ?? []).map((pattern) => new RegExp(pattern, \"gi\"));\n let text = JSON.stringify(value);\n const original = text;\n for (const secret of secrets) text = text.replaceAll(secret, \"[REDACTED]\");\n for (const pattern of [...BUILTIN_PATTERNS, ...custom]) text = text.replace(pattern, \"[REDACTED]\");\n const maxBytes = options.maxBytes ?? 128_000;\n if (Buffer.byteLength(text) > maxBytes) text = JSON.stringify({ truncated: true, bytes: Buffer.byteLength(text), preview: text.slice(0, maxBytes - 128) });\n try { return { value: JSON.parse(text), applied: text !== original }; }\n catch { return { value: \"[REDACTED:invalid-payload]\", applied: true }; }\n}\n\nexport function createEvent(input: { runId: string; sequence: number; type: RunEvent[\"type\"]; payload: unknown; adapter?: string; agent?: string; redaction?: { envNames?: string[]; patterns?: string[]; maxBytes?: number } }): RunEvent {\n const sanitized = redact(input.payload, input.redaction);\n return runEventSchema.parse({\n schemaVersion: \"1\", eventId: createId(\"event\"), runId: input.runId, sequence: input.sequence, occurredAt: nowIso(),\n source: { adapter: input.adapter ?? \"explicit-wrapper\", adapterVersion: \"1\", ...(input.agent ? { agent: input.agent } : {}) },\n type: input.type, payload: sanitized.value, redaction: { applied: sanitized.applied, policyVersion: \"1\" },\n });\n}\n\nexport function parseJsonl(text: string): RunEvent[] {\n if (Buffer.byteLength(text) > 10_000_000) throw new Error(\"JSONL payload exceeds 10 MB limit\");\n return text.split(\"\\n\").filter(Boolean).map((line, index) => {\n if (Buffer.byteLength(line) > 512_000) throw new Error(`JSONL line ${index + 1} exceeds 512 KB limit`);\n return runEventSchema.parse(JSON.parse(line));\n });\n}\n\nexport function normalizeCodexJsonl(text: string, importedRunId = createId(\"run\")): RunEvent[] {\n if (Buffer.byteLength(text) > 10_000_000) throw new Error(\"Codex JSONL payload exceeds 10 MB limit\");\n let sequence = 0;\n const events: RunEvent[] = [];\n for (const [index, line] of text.split(\"\\n\").filter(Boolean).entries()) {\n if (Buffer.byteLength(line) > 512_000) throw new Error(`Codex JSONL line ${index + 1} exceeds 512 KB limit`);\n const raw = JSON.parse(line) as Record<string, unknown>;\n const type = String(raw.type ?? raw.event ?? \"\");\n const payload = (raw.payload ?? raw.item ?? raw) as Record<string, unknown>;\n let normalized: RunEvent[\"type\"] = \"tool.completed\";\n if (/session_meta|thread\\.started|turn\\.started|run\\.started/.test(type)) normalized = \"run.started\";\n else if (/turn\\.completed|thread\\.completed|run\\.finished/.test(type)) normalized = \"run.finished\";\n else if (/error|failed/.test(type)) normalized = \"error\";\n else if (/file_change|file\\.changed/.test(type) || payload.type === \"file_change\") normalized = \"file.changed\";\n else if (/command.*requested|command_execution.*started/.test(type)) normalized = \"command.requested\";\n else if (/tool.*requested|item\\.started/.test(type)) normalized = \"tool.requested\";\n events.push(createEvent({ runId: String(raw.runId ?? raw.thread_id ?? importedRunId), sequence: sequence++, type: normalized, payload: raw, adapter: \"codex-jsonl\", agent: \"codex\" }));\n }\n return events;\n}\n"],"mappings":"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","names":["fs","path","YAML","item","fs","path","YAML","path","path","fs","path","path","item","fs","fs","path","fg","fg","fs","path","controller","timeout","fs","path","picomatch","z","fs","path","path","fs","item","path","fs","picomatch","fs","path","path","fs","rest","path","fs","YAML","github","item","fs","path","fs","path","path","started","fs","YAML","evaluation"]}
|
package/package.json
CHANGED
|
@@ -1,21 +1,56 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scriptonia",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Turn customer signal into
|
|
3
|
+
"version": "0.9.0-rc.1",
|
|
4
|
+
"description": "Turn customer signal into plans and merge-blocking verification for AI-written PRs.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"scriptonia": "
|
|
7
|
+
"scriptonia": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsup",
|
|
11
|
+
"test": "node --test test/*.test.mjs",
|
|
12
|
+
"typecheck": "tsc --noEmit -p ../tsconfig.json",
|
|
13
|
+
"prepublishOnly": "npm run build && npm run typecheck && npm test"
|
|
8
14
|
},
|
|
9
15
|
"files": [
|
|
10
16
|
"bin",
|
|
17
|
+
"dist",
|
|
11
18
|
"README.md"
|
|
12
19
|
],
|
|
13
20
|
"engines": {
|
|
14
|
-
"node": ">=
|
|
21
|
+
"node": ">=22 <26"
|
|
15
22
|
},
|
|
16
23
|
"dependencies": {
|
|
17
24
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
18
|
-
"
|
|
25
|
+
"better-sqlite3": "^12.4.1",
|
|
26
|
+
"commander": "^14.0.2",
|
|
27
|
+
"fast-glob": "^3.3.3",
|
|
28
|
+
"fast-xml-parser": "^5.3.2",
|
|
29
|
+
"picocolors": "^1.1.1",
|
|
30
|
+
"picomatch": "^4.0.3",
|
|
31
|
+
"yaml": "^2.8.1",
|
|
32
|
+
"zod": "^4.1.12"
|
|
33
|
+
},
|
|
34
|
+
"optionalDependencies": {
|
|
35
|
+
"@opentelemetry/api": "^1.9.0",
|
|
36
|
+
"@opentelemetry/exporter-trace-otlp-http": "^0.220.0",
|
|
37
|
+
"@opentelemetry/sdk-node": "^0.220.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@scriptonia/core": "workspace:*",
|
|
41
|
+
"@scriptonia/eval-engine": "workspace:*",
|
|
42
|
+
"@scriptonia/git-snapshot": "workspace:*",
|
|
43
|
+
"@scriptonia/github": "workspace:*",
|
|
44
|
+
"@scriptonia/observability": "workspace:*",
|
|
45
|
+
"@scriptonia/policy-engine": "workspace:*",
|
|
46
|
+
"@scriptonia/run-capture": "workspace:*",
|
|
47
|
+
"@scriptonia/schemas": "workspace:*",
|
|
48
|
+
"@scriptonia/scope-engine": "workspace:*",
|
|
49
|
+
"@scriptonia/storage-sqlite": "workspace:*",
|
|
50
|
+
"tsup": "^8.5.1",
|
|
51
|
+
"tsx": "^4.20.6",
|
|
52
|
+
"typescript": "^5.8.3",
|
|
53
|
+
"vitest": "^4.1.9"
|
|
19
54
|
},
|
|
20
55
|
"keywords": [
|
|
21
56
|
"scriptonia",
|
|
@@ -27,5 +62,17 @@
|
|
|
27
62
|
"cli"
|
|
28
63
|
],
|
|
29
64
|
"homepage": "https://scriptonia.dev",
|
|
65
|
+
"repository": {
|
|
66
|
+
"type": "git",
|
|
67
|
+
"url": "git+https://github.com/paranormal07/scriptonia_context.git",
|
|
68
|
+
"directory": "scriptonia-cli"
|
|
69
|
+
},
|
|
70
|
+
"bugs": {
|
|
71
|
+
"url": "https://github.com/paranormal07/scriptonia_context/issues"
|
|
72
|
+
},
|
|
73
|
+
"publishConfig": {
|
|
74
|
+
"access": "public",
|
|
75
|
+
"tag": "next"
|
|
76
|
+
},
|
|
30
77
|
"license": "MIT"
|
|
31
78
|
}
|