@kodr/aiwrangler 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -0
- package/README.md +34 -12
- package/dist/{chunk-NQFO47CV.js → chunk-4D4NYPL3.js} +5 -5
- package/dist/{chunk-EAQASAXL.js → chunk-F3YFQ4NW.js} +18 -403
- package/dist/chunk-F3YFQ4NW.js.map +1 -0
- package/dist/{chunk-EDVWHCQV.js → chunk-HT3QDS3C.js} +2 -2
- package/dist/{chunk-2CIV4KGU.js → chunk-RZWCNEZS.js} +408 -21
- package/dist/chunk-RZWCNEZS.js.map +1 -0
- package/dist/cli.js +4 -4
- package/dist/index.d.ts +10 -1
- package/dist/index.js +22 -16
- package/dist/mcp.js +4 -4
- package/dist/plugin.js +183 -5
- package/dist/plugin.js.map +1 -1
- package/dist/tools.js +4 -4
- package/package.json +15 -5
- package/dist/chunk-2CIV4KGU.js.map +0 -1
- package/dist/chunk-EAQASAXL.js.map +0 -1
- /package/dist/{chunk-NQFO47CV.js.map → chunk-4D4NYPL3.js.map} +0 -0
- /package/dist/{chunk-EDVWHCQV.js.map → chunk-HT3QDS3C.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/jsonc.ts","../src/overrides.ts","../src/config.ts","../src/hash.ts","../src/git/diff.ts","../src/gates/deterministic/rules.ts","../src/gates/deterministic/cargo.ts","../src/gates/deterministic/index.ts","../src/loop.ts","../src/ledger.ts"],"sourcesContent":["export function stripJsonc(text: string): string {\n let out = \"\"\n let inString = false\n let inLine = false\n let inBlock = false\n for (let i = 0; i < text.length; i++) {\n const c = text[i] ?? \"\"\n const next = text[i + 1] ?? \"\"\n if (inLine) {\n if (c === \"\\n\") {\n inLine = false\n out += c\n }\n continue\n }\n if (inBlock) {\n if (c === \"*\" && next === \"/\") {\n inBlock = false\n i++\n }\n continue\n }\n if (inString) {\n out += c\n if (c === \"\\\\\" && next !== \"\") {\n out += next\n i++\n continue\n }\n if (c === '\"') inString = false\n continue\n }\n if (c === '\"') {\n inString = true\n out += c\n continue\n }\n if (c === \"/\" && next === \"/\") {\n inLine = true\n i++\n continue\n }\n if (c === \"/\" && next === \"*\") {\n inBlock = true\n i++\n continue\n }\n out += c\n }\n return out\n}\n\nexport function parseJsonc(text: string): unknown {\n const stripped = stripJsonc(text).replace(/,(\\s*[}\\]])/g, \"$1\")\n return JSON.parse(stripped)\n}\n","import { existsSync, readFileSync, writeFileSync, unlinkSync, renameSync, mkdirSync } from \"node:fs\"\nimport { join, dirname } from \"node:path\"\nimport { z } from \"zod\"\nimport type { Config } from \"./config.js\"\nimport { applyGateFlag, expandPath } from \"./config.js\"\n\nexport const OVERRIDES_FILENAME = \"runtime-overrides.json\"\n\nexport const RuntimeOverridesSchema = z.object({\n activePolicy: z.string().optional(),\n egressSemantic: z.boolean().optional(),\n actionThreshold: z.number().min(0).max(1).optional(),\n reviewThreshold: z.number().min(0).max(1).optional(),\n gates: z.record(z.string(), z.boolean()).optional(),\n})\n\nexport type RuntimeOverrides = z.infer<typeof RuntimeOverridesSchema>\n\nconst OverridesFileSchema = z.object({\n version: z.literal(1),\n createdAt: z.string(),\n note: z.string().optional(),\n expiresOn: z.enum([\"pass\", \"manual\"]),\n overrides: RuntimeOverridesSchema,\n})\n\nexport type OverridesFile = z.infer<typeof OverridesFileSchema>\n\nexport function overridesFilePath(config: Config, root: string): string {\n return join(expandPath(config.cache.dir, root), OVERRIDES_FILENAME)\n}\n\nexport function readRuntimeOverridesFile(config: Config, root: string): OverridesFile | null {\n const path = overridesFilePath(config, root)\n if (!existsSync(path)) return null\n try {\n const parsed = OverridesFileSchema.safeParse(JSON.parse(readFileSync(path, \"utf8\")))\n if (!parsed.success) return null\n return parsed.data\n } catch {\n return null\n }\n}\n\nexport function writeRuntimeOverridesFile(config: Config, root: string, file: OverridesFile): void {\n const path = overridesFilePath(config, root)\n mkdirSync(dirname(path), { recursive: true })\n const tmp = path + \".tmp\"\n writeFileSync(tmp, JSON.stringify(file, null, 2) + \"\\n\", \"utf8\")\n renameSync(tmp, path)\n}\n\nexport function clearRuntimeOverrides(config: Config, root: string): boolean {\n const path = overridesFilePath(config, root)\n if (!existsSync(path)) return false\n try {\n unlinkSync(path)\n return true\n } catch {\n return false\n }\n}\n\nexport function applyRuntimeOverrides(config: Config, overrides: RuntimeOverrides): { config: Config; appliedGates: string[] } {\n const next = structuredClone(config)\n const appliedGates: string[] = []\n if (overrides.activePolicy !== undefined) {\n if (!(overrides.activePolicy in next.policies)) {\n throw new Error(`runtime override activePolicy '${overrides.activePolicy}' is not a defined policy`)\n }\n next.activePolicy = overrides.activePolicy\n }\n if (overrides.egressSemantic !== undefined) next.egress.semantic = overrides.egressSemantic\n if (overrides.actionThreshold !== undefined || overrides.reviewThreshold !== undefined) {\n const policy = next.policies[next.activePolicy]\n if (!policy) throw new Error(`activePolicy '${next.activePolicy}' not defined in policies`)\n next.policies[next.activePolicy] = {\n actionThreshold: overrides.actionThreshold ?? policy.actionThreshold,\n reviewThreshold: overrides.reviewThreshold ?? policy.reviewThreshold,\n }\n }\n for (const [name, value] of Object.entries(overrides.gates ?? {})) {\n appliedGates.push(...applyGateFlag(next, name, value))\n }\n return { config: next, appliedGates }\n}\n\nexport function applyRuntimeOverridesFromDisk(config: Config, root: string): { config: Config; overrides: RuntimeOverrides | null } {\n const file = readRuntimeOverridesFile(config, root)\n if (!file) return { config, overrides: null }\n try {\n return { config: applyRuntimeOverrides(config, file.overrides).config, overrides: file.overrides }\n } catch {\n return { config, overrides: null }\n }\n}\n","import { existsSync, readFileSync } from \"node:fs\"\nimport { homedir } from \"node:os\"\nimport { isAbsolute, join, dirname, resolve } from \"node:path\"\nimport { z } from \"zod\"\nimport { parseJsonc } from \"./jsonc.js\"\nimport { applyRuntimeOverridesFromDisk, type RuntimeOverrides } from \"./overrides.js\"\n\nconst bool = (def: boolean) => z.boolean().default(def)\n\nconst GatesSchema = z.object({\n plan: z.object({ inSpec: bool(true), ambiguity: bool(true), openQuestions: bool(true), oneWayDoors: bool(true) }).default({}),\n retrieval: z.object({ rerank: bool(true), topK: z.number().int().min(1).max(20).default(6) }).default({}),\n check: z\n .object({\n deterministic: bool(true),\n battery: bool(true),\n selfReport: bool(true),\n testQuality: bool(true),\n docDrift: bool(true),\n injectionDefense: bool(true),\n })\n .default({}),\n security: z\n .object({ trustBoundary: bool(true), severity: bool(true), alwaysHuman: z.array(z.string()).default([\"keys\", \"seals\", \"digests\"]) })\n .default({}),\n loop: z.object({ retryProgress: bool(true), errorSalience: bool(true), maxCycles: z.number().int().min(1).default(3) }).default({}),\n session: z.object({ endAudit: bool(true), nudge: bool(true), maxNudges: z.number().int().min(0).default(3) }).default({}),\n})\n\nconst ThresholdsSchema = z.object({\n actionThreshold: z.number().min(0).max(1).default(0.8),\n reviewThreshold: z.number().min(0).max(1).default(0.5),\n})\n\nexport const ConfigSchema = z.object({\n model: z.string().default(\"jev-1.13.0\"),\n activePolicy: z.string().default(\"strict\"),\n egress: z.object({ semantic: bool(true), warnOncePerSession: bool(true) }).default({}),\n corpus: z\n .object({\n spec: z.string().default(\"corpus/spec.md\"),\n rules: z.string().default(\"corpus/rules.md\"),\n divergences: z.string().default(\"corpus/divergences.md\"),\n questions: z.string().default(\"corpus/questions.md\"),\n plan: z.string().default(\"corpus/plan.md\"),\n docs: z.array(z.string()).default([]),\n whitepaper: z.string().default(\"corpus/whitepaper.pdf\"),\n })\n .default({}),\n gates: GatesSchema.default({}),\n policies: z.record(z.string(), ThresholdsSchema).default({ strict: {}, permissive: { actionThreshold: 0.9, reviewThreshold: 0.35 } }),\n cache: z.object({ dir: z.string().default(\".aiwrangler\") }).default({}),\n ledger: z.object({ path: z.string().default(\".aiwrangler/ledger.jsonl\") }).default({}),\n repos: z\n .object({\n super: z.string().default(\".\"),\n members: z.array(z.string()).default([]),\n reviewed: z.array(z.string()).default([]),\n })\n .default({}),\n})\n\nexport type Config = z.infer<typeof ConfigSchema>\nexport type GatePath = string\n\nexport interface LoadedConfig {\n config: Config\n root: string\n source: \"explicit\" | \"discovered\" | \"user\" | \"defaults\"\n path: string | null\n overrides: import(\"./overrides.js\").RuntimeOverrides | null\n}\n\nexport function expandPath(p: string, root: string): string {\n if (p.startsWith(\"~\")) return join(homedir(), p.slice(1))\n if (isAbsolute(p)) return p\n return resolve(root, p)\n}\n\nexport function findConfigFile(startDir: string): { path: string; source: \"discovered\" | \"user\" } | null {\n let dir = resolve(startDir)\n for (;;) {\n const candidate = join(dir, \"aiwrangler.config.json\")\n if (existsSync(candidate)) return { path: candidate, source: \"discovered\" }\n const parent = dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n const user = join(homedir(), \".config\", \"aiwrangler\", \"aiwrangler.config.json\")\n if (existsSync(user)) return { path: user, source: \"user\" }\n return null\n}\n\nexport function flattenGates(config: Config): Map<GatePath, boolean> {\n const flat = new Map<GatePath, boolean>()\n const walk = (obj: unknown, prefix: string) => {\n if (obj === null || typeof obj !== \"object\") return\n for (const [key, value] of Object.entries(obj)) {\n const path = prefix ? `${prefix}.${key}` : key\n if (typeof value === \"boolean\") flat.set(path, value)\n else if (typeof value === \"object\" && !Array.isArray(value)) walk(value, path)\n }\n }\n walk(config.gates, \"\")\n return flat\n}\n\nexport function applyGateFlag(config: Config, name: string, value: boolean): string[] {\n const flat = flattenGates(config)\n const applied: string[] = []\n for (const path of flat.keys()) {\n const leaf = path.split(\".\").pop() ?? path\n if (path === name || leaf === name) {\n const parts = path.split(\".\")\n let node: Record<string, unknown> = config.gates as unknown as Record<string, unknown>\n for (const part of parts.slice(0, -1)) node = node[part] as Record<string, unknown>\n node[parts[parts.length - 1]!] = value\n applied.push(path)\n }\n }\n if (applied.length === 0) {\n throw new Error(`unknown gate '${name}'. Known gates: ${[...flat.keys()].join(\", \")}`)\n }\n return applied\n}\n\nfunction applyFlagList(config: Config, list: string, value: boolean): string[] {\n const applied: string[] = []\n const names = list\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean)\n for (const name of names) {\n applied.push(...applyGateFlag(config, name, value))\n }\n return applied\n}\n\nexport function applyEnvOverrides(config: Config, env: Record<string, string | undefined> = process.env): Config {\n const next = structuredClone(config)\n if (env.AIWRANGLER_MODEL) next.model = env.AIWRANGLER_MODEL\n if (env.AIWRANGLER_POLICY) {\n if (!(env.AIWRANGLER_POLICY in next.policies)) {\n throw new Error(`AIWRANGLER_POLICY: unknown policy '${env.AIWRANGLER_POLICY}'. Known: ${Object.keys(next.policies).join(\", \")}`)\n }\n next.activePolicy = env.AIWRANGLER_POLICY\n }\n if (env.AIWRANGLER_EGRESS) {\n const on = [\"1\", \"true\", \"on\", \"yes\"].includes(env.AIWRANGLER_EGRESS.toLowerCase())\n next.egress.semantic = on\n }\n if (env.AIWRANGLER_DISABLE) applyFlagList(next, env.AIWRANGLER_DISABLE, false)\n if (env.AIWRANGLER_ENABLE) applyFlagList(next, env.AIWRANGLER_ENABLE, true)\n return next\n}\n\nexport function loadConfig(startDir: string, env: Record<string, string | undefined> = process.env): LoadedConfig {\n const explicit = env.AIWRANGLER_CONFIG\n let raw: unknown\n let root: string\n let source: LoadedConfig[\"source\"]\n let path: string | null\n\n if (explicit) {\n path = expandPath(explicit, resolve(startDir))\n if (!existsSync(path)) throw new Error(`AIWRANGLER_CONFIG: file not found: ${path}`)\n raw = parseJsonc(readFileSync(path, \"utf8\"))\n root = dirname(path)\n source = \"explicit\"\n } else {\n const found = findConfigFile(startDir)\n if (found) {\n path = found.path\n raw = parseJsonc(readFileSync(found.path, \"utf8\"))\n root = dirname(found.path)\n source = found.source\n } else {\n raw = {}\n root = resolve(startDir)\n source = \"defaults\"\n path = null\n }\n }\n\n const parsed = ConfigSchema.safeParse(raw)\n if (!parsed.success) {\n const issues = parsed.error.issues\n .map((i) => ` ${i.path.join(\".\") || \"(root)\"}: ${i.message}`)\n .join(\"\\n\")\n throw new Error(`invalid aiwrangler config at ${path ?? \"defaults\"}:\\n${issues}`)\n }\n const { config, overrides } = applyRuntimeOverridesFromDisk(parsed.data, root)\n return { config: applyEnvOverrides(config, env), root, source, path, overrides }\n}\n\nexport function activeThresholds(config: Config): { actionThreshold: number; reviewThreshold: number } {\n const policy = config.policies[config.activePolicy]\n if (!policy) throw new Error(`activePolicy '${config.activePolicy}' not defined in policies`)\n return policy\n}\n","import { createHash } from \"node:crypto\"\n\nexport function sha256Hex(text: string): string {\n return createHash(\"sha256\").update(text, \"utf8\").digest(\"hex\")\n}\n\nexport function shortHash(text: string): string {\n return sha256Hex(text).slice(0, 12)\n}\n","import { spawnSync } from \"node:child_process\"\nimport { existsSync, readFileSync } from \"node:fs\"\nimport { join } from \"node:path\"\nimport type { Config } from \"../config.js\"\nimport { expandPath } from \"../config.js\"\nimport type { DiffFile, DiffHunk, RepoDiff } from \"../types.js\"\n\nexport interface GitResult {\n code: number | null\n stdout: string\n stderr: string\n}\n\nexport function git(repoDir: string, args: string[], timeoutMs = 30_000): GitResult {\n const res = spawnSync(\"git\", [\"-C\", repoDir, ...args], { encoding: \"utf8\", timeout: timeoutMs, maxBuffer: 64 * 1024 * 1024 })\n if (res.error) return { code: null, stdout: \"\", stderr: String(res.error) }\n return { code: res.status, stdout: res.stdout ?? \"\", stderr: res.stderr ?? \"\" }\n}\n\nexport function parseUnifiedDiff(text: string): DiffFile[] {\n const files: DiffFile[] = []\n const lines = text.split(\"\\n\")\n let file: DiffFile | null = null\n let hunk: DiffHunk | null = null\n let newLine = 0\n let oldLine = 0\n\n for (const line of lines) {\n const header = line.match(/^diff --git a\\/(.+?) b\\/(.+)$/)\n if (header) {\n file = {\n path: header[2]!,\n ...(header[1] !== header[2] ? { oldPath: header[1] } : {}),\n binary: false,\n hunks: [],\n }\n files.push(file)\n hunk = null\n continue\n }\n if (!file) continue\n if (line.startsWith(\"Binary files\") || line.startsWith(\"GIT binary patch\")) {\n file.binary = true\n continue\n }\n if (line.startsWith(\"new file mode\") || line.startsWith(\"deleted file mode\") || line.startsWith(\"index \") || line.startsWith(\"--- \") || line.startsWith(\"+++ \") || line.startsWith(\"rename from\") || line.startsWith(\"rename to\") || line.startsWith(\"similarity index\") || line.startsWith(\"old mode\") || line.startsWith(\"new mode\")) {\n continue\n }\n const hunkMatch = line.match(/^@@ -(\\d+)(?:,\\d+)? \\+(\\d+)(?:,\\d+)? @@/)\n if (hunkMatch) {\n hunk = { header: line, lines: [] }\n file.hunks.push(hunk)\n oldLine = Number(hunkMatch[1])\n newLine = Number(hunkMatch[2])\n continue\n }\n if (!hunk) continue\n if (line.startsWith(\"+\")) {\n hunk.lines.push({ kind: \"add\", text: line.slice(1), newLine })\n newLine++\n } else if (line.startsWith(\"-\")) {\n hunk.lines.push({ kind: \"del\", text: line.slice(1), oldLine })\n oldLine++\n } else if (line.startsWith(\" \")) {\n hunk.lines.push({ kind: \"ctx\", text: line.slice(1), newLine, oldLine })\n newLine++\n oldLine++\n }\n }\n return files\n}\n\nexport function addedLines(file: DiffFile): { text: string; line: number }[] {\n const out: { text: string; line: number }[] = []\n for (const hunk of file.hunks) {\n for (const l of hunk.lines) {\n if (l.kind === \"add\" && l.newLine !== undefined) out.push({ text: l.text, line: l.newLine })\n }\n }\n return out\n}\n\nexport function repoDirs(config: Config, root: string): { repo: string; dir: string }[] {\n const superPath = expandPath(config.repos.super, root)\n const dirs = [{ repo: \"(super)\", dir: superPath }]\n for (const member of config.repos.members) {\n const dir = join(superPath, member)\n if (existsSync(join(dir, \".git\"))) dirs.push({ repo: member, dir })\n }\n return dirs\n}\n\nfunction dirtyFiles(repoDir: string): { modified: string[]; untracked: string[] } {\n const modified: string[] = []\n const untracked: string[] = []\n const res = git(repoDir, [\"status\", \"--porcelain=v1\"])\n if (res.code !== 0) return { modified, untracked }\n for (const line of res.stdout.split(\"\\n\")) {\n if (!line.trim()) continue\n const xy = line.slice(0, 2)\n const path = line.slice(3).trim().replace(/\"(.*)\"/, \"$1\")\n if (!path) continue\n if (xy.includes(\"?\")) untracked.push(path)\n else modified.push(path)\n }\n if (untracked.length > 0) {\n // porcelain collapses fully-untracked directories to \"dir/\"; expand to the\n // exact file list (still .gitignore-aware) so nothing hides from the gates.\n const ls = git(repoDir, [\"ls-files\", \"--others\", \"--exclude-standard\"])\n const dirs = untracked.filter((p) => p.endsWith(\"/\"))\n if (ls.code === 0 && dirs.length > 0) {\n const exact = ls.stdout.split(\"\\n\").filter(Boolean)\n const expanded = new Set<string>()\n for (const p of untracked) {\n if (!p.endsWith(\"/\")) {\n expanded.add(p)\n continue\n }\n const prefix = p.slice(0, -1)\n for (const f of exact) {\n if (f === prefix || f.startsWith(prefix + \"/\")) expanded.add(f)\n }\n }\n untracked.length = 0\n untracked.push(...expanded)\n }\n }\n return { modified, untracked }\n}\n\nexport function dirtySet(config: Config, root: string): RepoDiff[] {\n const out: RepoDiff[] = []\n for (const { repo, dir } of repoDirs(config, root)) {\n const { modified, untracked } = dirtyFiles(dir)\n const files: DiffFile[] = []\n const seen = new Set<string>()\n for (const path of [...modified, ...untracked]) {\n if (seen.has(path)) continue\n seen.add(path)\n if (untracked.includes(path)) {\n try {\n const content = readFileSync(join(dir, path), \"utf8\")\n const lines = content.split(\"\\n\")\n files.push({\n path,\n binary: false,\n hunks: [{ header: \"@@ new file @@\", lines: lines.map((text, i) => ({ kind: \"add\" as const, text, newLine: i + 1 })) }],\n })\n } catch {\n files.push({ path, binary: true, hunks: [] })\n }\n continue\n }\n const combined = git(dir, [\"diff\", \"HEAD\", \"--\", path]).stdout + git(dir, [\"diff\", \"--cached\", \"--\", path]).stdout\n const parsed = parseUnifiedDiff(combined)\n files.push(...parsed)\n }\n if (files.length > 0) out.push({ repo, repoDir: dir, files })\n }\n return out\n}\n\nexport function commitDiff(repoDir: string, sha: string): DiffFile[] {\n const res = git(repoDir, [\"show\", \"--format=\", \"--diff-filter=AM\", sha])\n if (res.code !== 0) return []\n return parseUnifiedDiff(res.stdout)\n}\n\nexport function recentCommits(repoDir: string, count = 10, branch = \"main\"): { sha: string; subject: string }[] {\n const res = git(repoDir, [\"log\", \"--oneline\", `-${count}`, branch])\n if (res.code !== 0) return []\n return res.stdout\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => {\n const sha = line.slice(0, 40).split(\" \")[0] ?? \"\"\n const subject = line.slice(sha.length).trim()\n return { sha, subject }\n })\n}\n","import type { Config } from \"../../config.js\"\nimport type { DiffFile, Finding, RepoDiff } from \"../../types.js\"\nimport { addedLines } from \"../../git/diff.js\"\n\nconst SILENT_DEFAULT_PATTERNS: { re: RegExp; note: string }[] = [\n { re: /\\.unwrap_or_default\\(\\)/, note: \"unwrap_or_default() silently substitutes a default; per RULE-1 malformed/missing values must be errors\" },\n { re: /\\.unwrap_or\\(\\s*(0|false|true|None)\\s*\\)/, note: \"unwrap_or(literal) silently substitutes a value; per RULE-1 malformed/missing values must be errors\" },\n { re: /\\.unwrap_or\\(\\s*(String::new\\(\\)|Vec::new\\(\\)|vec!\\[\\]|Default::default\\(\\))\\s*\\)/, note: \"unwrap_or(empty container) silently substitutes; per RULE-1 malformed/missing values must be errors\" },\n { re: /Ok\\(\\s*_\\s*\\)\\s*=>\\s*(0|false|true|None|Default::default\\(\\))/, note: \"Ok(_) arm returns a literal default; per RULE-1 this maps a parsed value to a silent default\" },\n { re: /Err\\(\\s*_?\\s*\\)\\s*=>\\s*(0|false|true|None|Default::default\\(\\)|vec!\\[\\])/, note: \"Err(_) arm returns a literal instead of propagating; per RULE-1 errors must not become values\" },\n { re: /\\bcatch\\s*\\{\\s*\\}/, note: \"empty catch block swallows failures; per RULE-1 unreadable/malformed input must be an error\" },\n]\n\nconst TODO_BARE = /TODO(?!\\s*\\([a-z0-9-]+\\))/\nconst TODO_TAGGED = /TODO\\([a-z0-9-]+\\)/\nconst EM_DASH = /\\u2014/\nconst AI_TRAILER = /^\\s*(Co-Authored-By:.*\\b(Claude|Copilot|GPT|ChatGPT|Gemini|Cursor)\\b|Generated with)/i\nconst SENSITIVE_AREA = /(?<![A-Za-z])(sealed?|sealing|seals?|digests?|disclosure|keygen|keys?)(?![A-Za-z])/i\nconst FUEL_DECL = /((fn|const|static)\\s+[A-Za-z_]*(fuel|budget|limit)[A-Za-z_]*|let\\s+mut\\s+[A-Za-z_]*(fuel|budget|limit)[A-Za-z_]*|:\\s*(Fuel|Budget|Limit)[<\\s>])/i\n\nexport function checkFile(repo: string, file: DiffFile, config: Config): Finding[] {\n const findings: Finding[] = []\n const adds = addedLines(file)\n if (adds.length === 0) return findings\n const pathSensitive = SENSITIVE_AREA.test(file.path)\n\n for (const { text, line } of adds) {\n for (const { re, note } of SILENT_DEFAULT_PATTERNS) {\n if (re.test(text)) {\n findings.push({ rule: \"RULE-1\", severity: \"review\", repo, file: file.path, line, evidence: text.trim().slice(0, 120), note })\n }\n }\n if (/TODO/.test(text) && TODO_BARE.test(text) && !TODO_TAGGED.test(text)) {\n findings.push({\n rule: \"RULE-7\",\n severity: \"review\",\n repo,\n file: file.path,\n line,\n evidence: text.trim().slice(0, 120),\n note: \"TODO without a backend tag; every TODO must name the backend it waits on, e.g. TODO(node)\",\n })\n }\n if (EM_DASH.test(text)) {\n findings.push({ rule: \"RULE-6\", severity: \"block\", repo, file: file.path, line, evidence: text.trim().slice(0, 120), note: \"em dash in added line; house style bans em dashes\" })\n }\n if (config.repos.members.some((m) => text.includes(`../${m}/`))) {\n findings.push({\n rule: \"RULE-6\",\n severity: \"review\",\n repo,\n file: file.path,\n line,\n evidence: text.trim().slice(0, 120),\n note: \"relative path into a sibling repo; name the sibling instead of a relative path\",\n })\n }\n if (FUEL_DECL.test(text)) {\n findings.push({\n rule: \"RULE-9\",\n severity: \"review\",\n repo,\n file: file.path,\n line,\n evidence: text.trim().slice(0, 120),\n note: \"fuel/budget/limit declaration; must state units and who pays\",\n })\n }\n if (pathSensitive || (SENSITIVE_AREA.test(text) && /^(pub\\s+)?(async\\s+)?(fn|struct|enum|impl|trait|mod)\\s/.test(text.trim()))) {\n findings.push({\n rule: \"RULE-10\",\n severity: \"human\",\n repo,\n file: file.path,\n line,\n evidence: text.trim().slice(0, 120),\n note: \"touches keys/seals/digests/disclosure; requires human eyes even if correct\",\n })\n }\n if (/^\\s*pub\\s+(async\\s+)?(fn|struct|enum|trait|type|mod|const|static)\\s/.test(text) && config.repos.reviewed.includes(repo)) {\n findings.push({\n rule: \"RULE-2\",\n severity: \"review\",\n repo,\n file: file.path,\n line,\n evidence: text.trim().slice(0, 120),\n note: `new public API in reviewed repo '${repo}'; requires an enumerated-surface argument listing existing public items that are missing`,\n })\n }\n }\n return findings\n}\n\nexport function checkRepoDiff(diff: RepoDiff, config: Config): Finding[] {\n const out: Finding[] = []\n for (const file of diff.files) {\n if (file.binary) continue\n out.push(...checkFile(diff.repo, file, config))\n }\n\n const testsInDiff = diff.files.some(\n (f) => f.path.includes(\"test\") || f.path.startsWith(\"tests/\") || f.path.endsWith(\"tests.rs\"),\n )\n if (!testsInDiff) {\n for (const file of diff.files) {\n if (!file.path.endsWith(\".rs\") || !/^src\\//.test(file.path) || file.path.includes(\"test\")) continue\n const adds = addedLines(file)\n const behavioral = adds.filter((a) => /^(pub\\s+)?(async\\s+)?(fn|impl|struct|enum|trait)\\s|^\\s+(pub\\s+)?fn\\s/.test(a.text.trim()))\n if (behavioral.length > 0) {\n out.push({\n rule: \"RULE-8\",\n severity: \"review\",\n repo: diff.repo,\n file: file.path,\n line: behavioral[0]?.line ?? null,\n evidence: `${behavioral.length} behavioral line(s) added in ${file.path}; no test file anywhere in this diff`,\n note: \"new behavior ships with a test that fails without it; this repo-diff touches no tests\",\n })\n }\n }\n }\n return dedupe(out)\n}\n\nexport function checkCommitMessage(message: string, repo: string): Finding[] {\n const out: Finding[] = []\n for (const line of message.split(\"\\n\")) {\n if (AI_TRAILER.test(line)) {\n out.push({ rule: \"RULE-6\", severity: \"block\", repo, file: \"(commit message)\", line: null, evidence: line.trim().slice(0, 120), note: \"AI-identifying trailer in commit message; house style bans them\" })\n }\n if (EM_DASH.test(line)) {\n out.push({ rule: \"RULE-6\", severity: \"block\", repo, file: \"(commit message)\", line: null, evidence: line.trim().slice(0, 120), note: \"em dash in commit message; house style bans em dashes\" })\n }\n }\n return out\n}\n\nfunction dedupe(findings: Finding[]): Finding[] {\n const seen = new Set<string>()\n const out: Finding[] = []\n for (const f of findings) {\n const key = `${f.rule}|${f.repo}|${f.file}|${f.line}|${f.evidence}`\n if (seen.has(key)) continue\n seen.add(key)\n out.push(f)\n }\n return out\n}\n","import { spawn, type ChildProcess } from \"node:child_process\"\n\nexport interface RunResult {\n code: number | null\n stdout: string\n stderr: string\n timedOut: boolean\n}\n\nexport function run(cmd: string[], opts: { cwd?: string; timeoutMs?: number; signal?: AbortSignal }): Promise<RunResult> {\n return new Promise((resolve) => {\n let proc: ChildProcess\n try {\n proc = spawn(cmd[0]!, cmd.slice(1), { cwd: opts.cwd, stdio: [\"ignore\", \"pipe\", \"pipe\"], signal: opts.signal })\n } catch (err) {\n resolve({ code: null, stdout: \"\", stderr: String(err), timedOut: false })\n return\n }\n let stdout = \"\"\n let stderr = \"\"\n let timedOut = false\n const timer = opts.timeoutMs\n ? setTimeout(() => {\n timedOut = true\n proc.kill(\"SIGKILL\")\n }, opts.timeoutMs)\n : undefined\n proc.stdout?.on(\"data\", (d) => (stdout += d.toString()))\n proc.stderr?.on(\"data\", (d) => (stderr += d.toString()))\n const done = (code: number | null, extra = \"\") => {\n if (timer) clearTimeout(timer)\n resolve({ code, stdout, stderr: stderr + extra, timedOut })\n }\n proc.on(\"error\", (err) => done(null, String(err)))\n proc.on(\"close\", (code) => done(code))\n })\n}\n\nexport function tail(text: string, lines: number): string {\n const arr = text.trimEnd().split(\"\\n\")\n return arr.length <= lines ? text.trimEnd() : arr.slice(-lines).join(\"\\n\")\n}\n\nexport interface TestStats {\n passed: number\n failed: number\n suites: number\n}\n\nexport function summarizeTests(output: string): TestStats {\n const passed = [...output.matchAll(/test result: \\w+\\. (\\d+) passed/g)].reduce((n, m) => n + Number(m[1]), 0)\n const failed = [...output.matchAll(/test result: \\w+\\. \\d+ passed; (\\d+) failed/g)].reduce((n, m) => n + Number(m[1]), 0)\n const suites = (output.match(/test result:/g) ?? []).length\n return { passed, failed, suites }\n}\n\nexport interface CargoStep {\n label: string\n ok: boolean\n summary: string\n errors: string[]\n output: string\n}\n\nexport async function cargoCheck(\n repoDir: string,\n opts: { package?: string; release?: boolean; tests?: boolean; timeoutMs?: number; signal?: AbortSignal } = {},\n): Promise<CargoStep[]> {\n const args = [\"--color\", \"never\"]\n if (opts.package) args.push(\"-p\", opts.package)\n const steps: CargoStep[] = []\n\n const checkArgs = [\"check\", ...args]\n const check = await run([\"cargo\", ...checkArgs], { cwd: repoDir, timeoutMs: opts.timeoutMs ?? 10 * 60_000, ...(opts.signal ? { signal: opts.signal } : {}) })\n const checkOut = check.stdout + \"\\n\" + check.stderr\n steps.push({\n label: \"cargo check\",\n ok: !check.timedOut && check.code === 0,\n summary: check.timedOut ? \"TIMED OUT\" : check.code === 0 ? \"OK\" : `FAILED (exit ${check.code})`,\n errors: errorLines(checkOut),\n output: checkOut,\n })\n if (!steps[0]!.ok) return steps\n\n if (opts.tests) {\n const test = await run([\"cargo\", \"test\", ...args], { cwd: repoDir, timeoutMs: opts.timeoutMs ?? 10 * 60_000, ...(opts.signal ? { signal: opts.signal } : {}) })\n const testOut = test.stdout + \"\\n\" + test.stderr\n const t = summarizeTests(testOut)\n steps.push({\n label: \"cargo test\",\n ok: !test.timedOut && test.code === 0,\n summary: test.timedOut ? \"TIMED OUT\" : test.code === 0 ? `OK: ${t.suites} suite(s), ${t.passed} passed, ${t.failed} failed` : `FAILED (exit ${test.code})`,\n errors: errorLines(testOut),\n output: testOut,\n })\n }\n return steps\n}\n\nexport function errorLines(output: string): string[] {\n return output\n .split(\"\\n\")\n .filter((l) => /\\berror(\\[|:)/i.test(l) || /^failures:$/m.test(l) || /test result: FAILED/i.test(l))\n .slice(0, 30)\n}\n\nexport interface Diagnostic {\n file: string\n line: number | null\n col: number | null\n severity: string\n message: string\n code: string | null\n isRootCauseCandidate: boolean\n}\n\nexport function parseCargoJson(output: string): Diagnostic[] {\n const diags: Diagnostic[] = []\n for (const line of output.split(\"\\n\")) {\n const trimmed = line.trim()\n if (!trimmed.startsWith(\"{\")) continue\n let msg: any\n try {\n msg = JSON.parse(trimmed)\n } catch {\n continue\n }\n if (msg?.reason !== \"compiler-message\" || !msg.message) continue\n const m = msg.message\n const spans: any[] = Array.isArray(m.spans) ? m.spans : []\n const primary = spans.find((s) => s.is_primary) ?? spans[0]\n diags.push({\n file: primary?.file_name ?? \"\",\n line: primary?.line_start ?? null,\n col: primary?.column_start ?? null,\n severity: m.level ?? \"unknown\",\n message: m.message ?? \"\",\n code: m.code?.code ?? null,\n isRootCauseCandidate: (m.level === \"error\" && (!m.code || !CASCADING_CODES.includes(m.code.code))) || m.level === \"error: aborting\",\n })\n }\n return diags\n}\n\nconst CASCADING_CODES = [\"E0432\", \"E0433\", \"E0603\", \"E0560\"]\n","import type { Config } from \"../../config.js\"\nimport { dirtySet } from \"../../git/diff.js\"\nimport type { CargoStep } from \"./cargo.js\"\nimport { cargoCheck } from \"./cargo.js\"\nimport { checkRepoDiff } from \"./rules.js\"\nimport type { Finding, RepoDiff } from \"../../types.js\"\n\nexport interface DeterministicReport {\n repoDiffs: RepoDiff[]\n findings: Finding[]\n cargo: { repo: string; steps: CargoStep[] }[]\n}\n\nexport async function runDeterministic(\n config: Config,\n root: string,\n opts: { cargo?: boolean; tests?: boolean; repos?: string[]; diffs?: RepoDiff[] } = {},\n): Promise<DeterministicReport> {\n const repoDiffs = opts.diffs ?? dirtySet(config, root)\n const findings: Finding[] = []\n for (const diff of repoDiffs) {\n if (opts.repos && !opts.repos.includes(diff.repo)) continue\n findings.push(...checkRepoDiff(diff, config))\n }\n\n const cargo: { repo: string; steps: CargoStep[] }[] = []\n if (opts.cargo !== false) {\n for (const diff of repoDiffs) {\n if (opts.repos && !opts.repos.includes(diff.repo)) continue\n const rustTouched = diff.files.some((f) => f.path.endsWith(\".rs\") || f.path.endsWith(\"Cargo.toml\"))\n if (!rustTouched || diff.repo === \"(super)\") continue\n const steps = await cargoCheck(diff.repoDir, { tests: opts.tests ?? false })\n cargo.push({ repo: diff.repo, steps })\n }\n }\n\n return { repoDiffs, findings, cargo }\n}\n\nconst SEVERITY_ORDER: Record<string, number> = { block: 0, human: 1, review: 2 }\n\nexport function formatFindings(findings: Finding[]): string {\n if (findings.length === 0) return \"no deterministic findings\"\n const sorted = [...findings].sort((a, b) => SEVERITY_ORDER[a.severity]! - SEVERITY_ORDER[b.severity]!)\n const bySeverity = new Map<string, Finding[]>()\n for (const f of sorted) bySeverity.set(f.severity, [...(bySeverity.get(f.severity) ?? []), f])\n const out: string[] = []\n for (const [sev, fs] of bySeverity) {\n out.push(`${sev.toUpperCase()} (${fs.length}):`)\n for (const f of fs) {\n out.push(` ${f.rule} ${f.repo}/${f.file}:${f.line ?? \"-\"}: ${f.note}`)\n out.push(` | ${f.evidence}`)\n }\n }\n return out.join(\"\\n\")\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\"\nimport { dirname } from \"node:path\"\nimport { sha256Hex } from \"./hash.js\"\n\nexport interface LoopCycle {\n ts: string\n diffHash: string\n action: string\n topReasons: string[]\n}\n\nexport interface LoopState {\n cycles: LoopCycle[]\n}\n\nexport interface LoopVerdict {\n cycle: number\n repeatedDiff: boolean\n escalate: boolean\n reason?: string\n}\n\nexport function diffFingerprint(diffText: string): string {\n return sha256Hex(diffText)\n}\n\nexport class LoopTracker {\n private path: string\n private state: LoopState\n\n constructor(statePath: string) {\n this.path = statePath\n this.state = { cycles: [] }\n if (existsSync(statePath)) {\n try {\n this.state = JSON.parse(readFileSync(statePath, \"utf8\")) as LoopState\n } catch {\n this.state = { cycles: [] }\n }\n }\n }\n\n get history(): LoopCycle[] {\n return this.state.cycles\n }\n\n record(cycle: LoopCycle): void {\n this.state.cycles = [...this.state.cycles.slice(-9), cycle]\n mkdirSync(dirname(this.path), { recursive: true })\n writeFileSync(this.path, JSON.stringify(this.state), \"utf8\")\n }\n\n reset(): void {\n this.state = { cycles: [] }\n if (existsSync(this.path)) mkdirSync(dirname(this.path), { recursive: true })\n writeFileSync(this.path, JSON.stringify(this.state), \"utf8\")\n }\n\n evaluate(diffHash: string, reasons: string[], maxCycles: number): LoopVerdict {\n const last = this.state.cycles[this.state.cycles.length - 1]\n if (!last) return { cycle: 1, repeatedDiff: false, escalate: false }\n\n const repeatedDiff = last.diffHash === diffHash\n const reasonsOverlap =\n reasons.filter((r) => last.topReasons.some((prev) => overlapTokens(prev, r) > 0.5)).length >=\n Math.min(2, reasons.length)\n\n const cycle = repeatedDiff || reasonsOverlap ? this.consecutiveCount(diffHash, reasons) + 1 : 1\n if (cycle >= maxCycles) {\n return {\n cycle,\n repeatedDiff,\n escalate: true,\n reason: `circuit breaker: ${cycle} consecutive wrangler cycles without progress (repeated diff: ${repeatedDiff}, same findings: ${reasonsOverlap}); stop retrying and surface to the user`,\n }\n }\n return { cycle, repeatedDiff, escalate: false }\n }\n\n private consecutiveCount(diffHash: string, reasons: string[]): number {\n let n = 0\n for (let i = this.state.cycles.length - 1; i >= 0; i--) {\n const c = this.state.cycles[i]!\n if (c.diffHash === diffHash || reasonsOverlap(c.topReasons, reasons)) n++\n else break\n }\n return n\n }\n}\n\nfunction overlapTokens(a: string, b: string): number {\n const ta = new Set(a.toLowerCase().split(/[^a-z0-9]+/).filter((t) => t.length > 3))\n const tb = new Set(b.toLowerCase().split(/[^a-z0-9]+/).filter((t) => t.length > 3))\n if (ta.size === 0 || tb.size === 0) return 0\n let shared = 0\n for (const t of tb) if (ta.has(t)) shared++\n return shared / Math.max(ta.size, tb.size)\n}\n\nfunction reasonsOverlap(a: string[], b: string[]): boolean {\n return b.some((r) => a.some((prev) => overlapTokens(prev, r) > 0.5))\n}\n","import { appendFileSync, existsSync, mkdirSync, readFileSync } from \"node:fs\"\nimport { dirname } from \"node:path\"\nimport type { Config } from \"./config.js\"\nimport { expandPath } from \"./config.js\"\n\nexport interface GateLedgerEntry {\n ts: string\n kind: \"plan\" | \"check\"\n model: string\n corpusHash: string\n action: string\n usage?: { inputTokens: number; outputTokens: number }\n findings: { rule: string; severity: string; subject: string; acknowledged?: boolean }[]\n verdicts?: { question: string; noul: number }[]\n reasons?: string[]\n sessionID?: string\n diffHash?: string\n files?: { repo: string; path: string; added: number; removed: number }[]\n examinedFiles?: number | null\n overridesActive?: boolean\n}\n\nexport interface NoticeLedgerEntry {\n ts: string\n kind: \"notice\"\n message: string\n}\n\n/**\n * How a human confirmed an ack or override.\n * `elicitation` is an MCP client UI prompt, `os-dialog` is a native desktop dialog,\n * and `tty` is the owner typing yes at `aiwrangler` in a terminal.\n * Tool arguments never count as confirmation.\n */\nexport type HumanConfirmation = \"elicitation\" | \"os-dialog\" | \"tty\"\n\n/** Which trusted entry point recorded the write. Not taken from tool arguments. */\nexport type ApprovalHost = \"cli\" | \"mcp\" | \"opencode\"\n\nexport interface OverrideLedgerEntry {\n ts: string\n kind: \"override\"\n source: string\n changes: Record<string, unknown>\n note?: string\n /** How the human confirmed. Absent on gate expiry and older entries. */\n confirmation?: HumanConfirmation\n}\n\nexport interface AckLedgerEntry {\n ts: string\n kind: \"ack\"\n diffHash: string\n rules: string[]\n note?: string\n /** `cli`, `mcp`, or `opencode` for new writes. Older entries may say `agent`. */\n by?: string\n /** How the human confirmed. Absent on older entries. */\n confirmation?: HumanConfirmation\n}\n\nexport type LedgerEntry = GateLedgerEntry | NoticeLedgerEntry | OverrideLedgerEntry | AckLedgerEntry\n\nexport type LedgerKind = LedgerEntry[\"kind\"]\n\nexport class Ledger {\n private path: string\n\n constructor(config: Config, root: string) {\n this.path = expandPath(config.ledger.path, root)\n }\n\n get filePath(): string {\n return this.path\n }\n\n append(entry: LedgerEntry): void {\n mkdirSync(dirname(this.path), { recursive: true })\n appendFileSync(this.path, JSON.stringify(entry) + \"\\n\", \"utf8\")\n }\n\n read(): LedgerEntry[] {\n if (!existsSync(this.path)) return []\n return readFileSync(this.path, \"utf8\")\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => {\n try {\n return JSON.parse(line) as LedgerEntry\n } catch {\n return null\n }\n })\n .filter((e): e is LedgerEntry => e !== null)\n }\n\n recent(kind?: LedgerKind, n = 20): LedgerEntry[] {\n return this.read()\n .filter((e) => (kind ? e.kind === kind : true))\n .slice(-n)\n }\n\n acksFor(diffHash: string): AckLedgerEntry[] {\n return this.read().filter((e): e is AckLedgerEntry => e.kind === \"ack\" && e.diffHash === diffHash)\n }\n\n latestAckFor(diffHash: string): AckLedgerEntry | null {\n const acks = this.acksFor(diffHash)\n return acks.length > 0 ? acks[acks.length - 1]! : null\n }\n}\n"],"mappings":"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","names":["existsSync","readFileSync","join","dirname","z","z","join","existsSync","readFileSync","dirname","existsSync","readFileSync","join","join","existsSync","readFileSync","resolve","existsSync","mkdirSync","readFileSync","writeFileSync","dirname","existsSync","readFileSync","mkdirSync","dirname","writeFileSync","reasonsOverlap","existsSync","mkdirSync","readFileSync","dirname","mkdirSync","dirname","existsSync","readFileSync"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
expandPath,
|
|
3
3
|
sha256Hex
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-F3YFQ4NW.js";
|
|
5
5
|
|
|
6
6
|
// src/jev/client.ts
|
|
7
7
|
import { TypeSafeClient } from "@typesafe-ai/sdk";
|
|
@@ -142,4 +142,4 @@ export {
|
|
|
142
142
|
setJevWarnSink,
|
|
143
143
|
Jev
|
|
144
144
|
};
|
|
145
|
-
//# sourceMappingURL=chunk-
|
|
145
|
+
//# sourceMappingURL=chunk-HT3QDS3C.js.map
|