@jpkme/diff-review 0.1.13 → 0.1.15
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/bin/diff-review.mjs +183 -100
- package/lib/acp-shell.mjs +23 -1
- package/lib/acp-shell.test.mjs +7 -0
- package/lib/prompt.mjs +8 -6
- package/package.json +1 -1
- package/web/build/client/_app/immutable/assets/2.C4whE4xz.css +1 -0
- package/web/build/client/_app/immutable/assets/2.C4whE4xz.css.br +0 -0
- package/web/build/client/_app/immutable/assets/2.C4whE4xz.css.gz +0 -0
- package/web/build/client/_app/immutable/assets/3.Cw1J6YTM.css +1 -0
- package/web/build/client/_app/immutable/assets/3.Cw1J6YTM.css.br +0 -0
- package/web/build/client/_app/immutable/assets/3.Cw1J6YTM.css.gz +0 -0
- package/web/build/client/_app/immutable/assets/storage.TlsiS-AP.css +1 -0
- package/web/build/client/_app/immutable/assets/storage.TlsiS-AP.css.br +0 -0
- package/web/build/client/_app/immutable/assets/storage.TlsiS-AP.css.gz +0 -0
- package/web/build/client/_app/immutable/chunks/{Bu1mm6Oz.js → BpVtXA-T.js} +1 -1
- package/web/build/client/_app/immutable/chunks/BpVtXA-T.js.br +2 -0
- package/web/build/client/_app/immutable/chunks/BpVtXA-T.js.gz +0 -0
- package/web/build/client/_app/immutable/chunks/{BXUWMim4.js → CUhrLa7d.js} +12 -15
- package/web/build/client/_app/immutable/chunks/CUhrLa7d.js.br +0 -0
- package/web/build/client/_app/immutable/chunks/CUhrLa7d.js.gz +0 -0
- package/web/build/client/_app/immutable/chunks/{DPfXzQnm.js → QvO6K-HK.js} +2 -2
- package/web/build/client/_app/immutable/chunks/QvO6K-HK.js.br +0 -0
- package/web/build/client/_app/immutable/chunks/QvO6K-HK.js.gz +0 -0
- package/web/build/client/_app/immutable/entry/{app.CTgiuiU1.js → app.BjJsHui4.js} +2 -2
- package/web/build/client/_app/immutable/entry/app.BjJsHui4.js.br +0 -0
- package/web/build/client/_app/immutable/entry/app.BjJsHui4.js.gz +0 -0
- package/web/build/client/_app/immutable/entry/start.D4unRHC4.js +1 -0
- package/web/build/client/_app/immutable/entry/start.D4unRHC4.js.br +0 -0
- package/web/build/client/_app/immutable/entry/start.D4unRHC4.js.gz +0 -0
- package/web/build/client/_app/immutable/nodes/{1.0PQZpSbJ.js → 1.C8JJYlWG.js} +1 -1
- package/web/build/client/_app/immutable/nodes/1.C8JJYlWG.js.br +1 -0
- package/web/build/client/_app/immutable/nodes/1.C8JJYlWG.js.gz +0 -0
- package/web/build/client/_app/immutable/nodes/2.CDI0Ipi4.js +10 -0
- package/web/build/client/_app/immutable/nodes/2.CDI0Ipi4.js.br +0 -0
- package/web/build/client/_app/immutable/nodes/2.CDI0Ipi4.js.gz +0 -0
- package/web/build/client/_app/immutable/nodes/3.DVC22CDg.js +171 -0
- package/web/build/client/_app/immutable/nodes/3.DVC22CDg.js.br +0 -0
- package/web/build/client/_app/immutable/nodes/3.DVC22CDg.js.gz +0 -0
- package/web/build/client/_app/version.json +1 -1
- package/web/build/client/_app/version.json.br +0 -0
- package/web/build/client/_app/version.json.gz +0 -0
- package/web/build/handler.js +3 -3
- package/web/build/index.js +3 -3
- package/web/build/server/chunks/1-DUj63QTT.js +7 -0
- package/web/build/server/chunks/{1-C2qlInYk.js.map → 1-DUj63QTT.js.map} +1 -1
- package/web/build/server/chunks/2-B4PSKe5P.js +7 -0
- package/web/build/server/chunks/2-B4PSKe5P.js.map +1 -0
- package/web/build/server/chunks/3-C7UD6rei.js +7 -0
- package/web/build/server/chunks/{3-SO3atuWO.js.map → 3-C7UD6rei.js.map} +1 -1
- package/web/build/server/chunks/{_server.ts-CRNhzL2a.js → _server.ts-4RcoUd0l.js} +4 -4
- package/web/build/server/chunks/{_server.ts-CRNhzL2a.js.map → _server.ts-4RcoUd0l.js.map} +1 -1
- package/web/build/server/chunks/{agent-sessions-kcUaLhK5.js → agent-sessions-C_hlZJKN.js} +77 -16
- package/web/build/server/chunks/agent-sessions-C_hlZJKN.js.map +1 -0
- package/web/build/server/chunks/{git-review-CXKcjYgZ.js → git-review-Bh1w0gak.js} +7 -7
- package/web/build/server/chunks/{git-review-CXKcjYgZ.js.map → git-review-Bh1w0gak.js.map} +1 -1
- package/web/build/server/chunks/{handler-_E0NucKN.js → handler-e2lEvjVT.js} +3 -3
- package/web/build/server/chunks/{handler-_E0NucKN.js.map → handler-e2lEvjVT.js.map} +1 -1
- package/web/build/server/chunks/{hooks.server-D7yPODoc.js → hooks.server-Um1Sknmz.js} +3 -3
- package/web/build/server/chunks/{hooks.server-D7yPODoc.js.map → hooks.server-Um1Sknmz.js.map} +1 -1
- package/web/build/server/chunks/{index.js-lMtDM8ZQ.js → index.js-C3-YX8SA.js} +876 -879
- package/web/build/server/chunks/index.js-C3-YX8SA.js.map +1 -0
- package/web/build/server/chunks/{manifest.js-BIm6jot5.js → manifest.js-CmbRPv0j.js} +8 -8
- package/web/build/server/chunks/{manifest.js-BIm6jot5.js.map → manifest.js-CmbRPv0j.js.map} +1 -1
- package/web/build/server/chunks/{remote-1g4ayag-DmqxwUIz.js → remote-1g4ayag-DMiPy1mT.js} +4 -4
- package/web/build/server/chunks/{remote-1g4ayag-DmqxwUIz.js.map → remote-1g4ayag-DMiPy1mT.js.map} +1 -1
- package/web/build/server/chunks/{remote-wh6t6j-DZk0W9Pp.js → remote-wh6t6j-RlIVOUe-.js} +5 -5
- package/web/build/server/chunks/{remote-wh6t6j-DZk0W9Pp.js.map → remote-wh6t6j-RlIVOUe-.js.map} +1 -1
- package/web/build/server/chunks/{validate-BsTKyhsq.js → validate-CAQ31C7k.js} +2 -2
- package/web/build/server/chunks/{validate-BsTKyhsq.js.map → validate-CAQ31C7k.js.map} +1 -1
- package/web/build/client/_app/immutable/assets/2.tqrMRTM0.css +0 -1
- package/web/build/client/_app/immutable/assets/2.tqrMRTM0.css.br +0 -0
- package/web/build/client/_app/immutable/assets/2.tqrMRTM0.css.gz +0 -0
- package/web/build/client/_app/immutable/assets/3.BT54aVKb.css +0 -1
- package/web/build/client/_app/immutable/assets/3.BT54aVKb.css.br +0 -0
- package/web/build/client/_app/immutable/assets/3.BT54aVKb.css.gz +0 -0
- package/web/build/client/_app/immutable/assets/storage.DqYH0w6R.css +0 -1
- package/web/build/client/_app/immutable/assets/storage.DqYH0w6R.css.br +0 -0
- package/web/build/client/_app/immutable/assets/storage.DqYH0w6R.css.gz +0 -0
- package/web/build/client/_app/immutable/chunks/BXUWMim4.js.br +0 -0
- package/web/build/client/_app/immutable/chunks/BXUWMim4.js.gz +0 -0
- package/web/build/client/_app/immutable/chunks/Bu1mm6Oz.js.br +0 -0
- package/web/build/client/_app/immutable/chunks/Bu1mm6Oz.js.gz +0 -0
- package/web/build/client/_app/immutable/chunks/DPfXzQnm.js.br +0 -0
- package/web/build/client/_app/immutable/chunks/DPfXzQnm.js.gz +0 -0
- package/web/build/client/_app/immutable/entry/app.CTgiuiU1.js.br +0 -0
- package/web/build/client/_app/immutable/entry/app.CTgiuiU1.js.gz +0 -0
- package/web/build/client/_app/immutable/entry/start.CFSl0kht.js +0 -1
- package/web/build/client/_app/immutable/entry/start.CFSl0kht.js.br +0 -0
- package/web/build/client/_app/immutable/entry/start.CFSl0kht.js.gz +0 -0
- package/web/build/client/_app/immutable/nodes/1.0PQZpSbJ.js.br +0 -2
- package/web/build/client/_app/immutable/nodes/1.0PQZpSbJ.js.gz +0 -0
- package/web/build/client/_app/immutable/nodes/2.DQaoQoy4.js +0 -10
- package/web/build/client/_app/immutable/nodes/2.DQaoQoy4.js.br +0 -0
- package/web/build/client/_app/immutable/nodes/2.DQaoQoy4.js.gz +0 -0
- package/web/build/client/_app/immutable/nodes/3.AciugOtL.js +0 -171
- package/web/build/client/_app/immutable/nodes/3.AciugOtL.js.br +0 -0
- package/web/build/client/_app/immutable/nodes/3.AciugOtL.js.gz +0 -0
- package/web/build/server/chunks/1-C2qlInYk.js +0 -7
- package/web/build/server/chunks/2-DyE177MK.js +0 -7
- package/web/build/server/chunks/2-DyE177MK.js.map +0 -1
- package/web/build/server/chunks/3-SO3atuWO.js +0 -7
- package/web/build/server/chunks/agent-sessions-kcUaLhK5.js.map +0 -1
- package/web/build/server/chunks/index.js-lMtDM8ZQ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-BsTKyhsq.js","sources":["../../../.svelte-kit/output/server/chunks/validate.js"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from \"node:fs\";\nimport { execFileSync } from \"node:child_process\";\nimport { basename, join, resolve } from \"node:path\";\n//#region ../lib/fingerprint.mjs\n/**\n* Tips cortos de SHA. Sin APIs de Node: la UI lo importa para armar el nombre del JSON.\n*/\nfunction shortSha(sha, n = 10) {\n\tconst hex = String(sha || \"\").toLowerCase().replace(/[^a-f0-9]/g, \"\");\n\treturn hex.length >= 7 ? hex.slice(0, n) : \"\";\n}\nfunction fingerprint(branchSha, baseSha) {\n\tconst a = shortSha(branchSha);\n\tconst b = shortSha(baseSha);\n\tif (!a || !b) return null;\n\treturn `${a}-${b}`;\n}\n//#endregion\n//#region ../lib/output-name.mjs\n/**\n* Nombre del JSON que escribe el agente.\n* Preferido: tips cortos branch/base. Legacy (con stamp o sin tips) sigue válido al importar.\n*/\n/** Prefijo del formato actual. */\nvar OUTPUT_PREFIX = \"diff-rev\";\n/** Prefijo legacy (sin tips / con stamp). */\nvar OUTPUT_PREFIX_LEGACY = \"diff-review-output\";\n/** Carpeta (en la raíz del repo revisado) donde va el JSON, el diff y la sesión del agente. */\nvar OUTPUT_DIR = \".diff-review\";\n/** Path relativo a la raíz del repo, con `/` (el que se le da al agente): `.diff-review/<nombre>`. */\nfunction outputRelPath(filename) {\n\treturn `${OUTPUT_DIR}/${String(filename || \"\").replace(/^.*[\\\\/]/, \"\")}`;\n}\n/** Nombre legacy fijo. */\nvar OUTPUT_FILENAME_LEGACY = `${OUTPUT_PREFIX_LEGACY}.json`;\n/**\n* Válidos:\n* - diff-rev_{branchTip}_{baseTip}.json\n* - diff-report_{branchTip}-{baseTip}_YYYYMMDD-HHmmss.json (legacy)\n* - diff-review-output.json / diff-review-output-YYYYMMDD-HHmmss.json (legacy)\n*/\nvar OUTPUT_FILENAME_RE = /^(?:diff-rev_[0-9a-f]{7,12}_[0-9a-f]{7,12}|diff-report_[0-9a-f]{7,12}-[0-9a-f]{7,12}_\\d{8}-\\d{6}|diff-review-output(?:-\\d{8}-\\d{6})?)\\.json$/i;\n/**\n* @param {{ branchSha?: string, baseSha?: string }} [input]\n* @returns {string}\n* con tips: diff-rev_aaaaaaaaaa_bbbbbbbbbb.json\n* sin tips: diff-review-output.json\n*/\nfunction makeOutputFilename(input = {}) {\n\tconst opts = input instanceof Date ? {} : input || {};\n\tconst fp = fingerprint(opts.branchSha, opts.baseSha);\n\tif (fp) {\n\t\tconst [branchTip, baseTip] = fp.split(\"-\");\n\t\tif (branchTip && baseTip) return `${OUTPUT_PREFIX}_${branchTip}_${baseTip}.json`;\n\t}\n\treturn OUTPUT_FILENAME_LEGACY;\n}\nfunction isOutputFilename(name) {\n\treturn OUTPUT_FILENAME_RE.test(String(name || \"\").trim());\n}\n//#endregion\n//#region ../lib/config.mjs\nvar DEFAULT_IGNORE = [\n\t\"**/package-lock.json\",\n\t\"**/pnpm-lock.yaml\",\n\t\"**/yarn.lock\",\n\t\"**/bun.lock\",\n\t\"**/bun.lockb\",\n\t\"**/*.g.cs\",\n\t\"**/*Snapshot.cs\",\n\t\"**/*.Designer.cs\",\n\t\"**/node_modules/**\",\n\t\"**/.svelte-kit/**\",\n\t\"**/dist/**\",\n\t\"**/build/**\",\n\t\"**/*.min.js\",\n\t\"**/*.min.css\",\n\t\"**/CODE_REVIEW_CORRECTNESS_FINDINGS.md\"\n];\nvar STORE_DIFF_MAX = 4e5;\nvar GUIDELINE_FILES = [\n\t\"REVIEW.md\",\n\t\"CLAUDE.md\",\n\t\"AGENTS.md\"\n];\nfunction unquote(s) {\n\tconst t = String(s || \"\").trim();\n\tif (t.startsWith(\"\\\"\") && t.endsWith(\"\\\"\") || t.startsWith(\"'\") && t.endsWith(\"'\")) return t.slice(1, -1);\n\treturn t;\n}\n/** Minimal YAML: `key: value` and `key:\\n - item`. */\nfunction parseSimpleYaml(text) {\n\tconst result = {};\n\tlet key = null;\n\tfor (const raw of String(text || \"\").split(/\\r?\\n/)) {\n\t\tif (!raw.trim() || raw.trim().startsWith(\"#\")) continue;\n\t\tconst list = raw.match(/^\\s+-\\s+(.*)$/);\n\t\tif (list && key) {\n\t\t\tif (!Array.isArray(result[key])) result[key] = [];\n\t\t\tresult[key].push(unquote(list[1]));\n\t\t\tcontinue;\n\t\t}\n\t\tconst kv = raw.match(/^([A-Za-z][\\w]*)\\s*:\\s*(.*)$/);\n\t\tif (!kv) continue;\n\t\tkey = kv[1];\n\t\tconst v = kv[2].trim();\n\t\tresult[key] = v === \"\" ? [] : unquote(v);\n\t}\n\treturn result;\n}\nfunction globToRegExp(glob) {\n\tlet g = String(glob || \"\").replace(/\\\\/g, \"/\");\n\tif (!g.includes(\"/\")) g = `**/${g}`;\n\tlet s = \"\";\n\tfor (let i = 0; i < g.length; i++) {\n\t\tconst c = g[i];\n\t\tif (c === \"*\" && g[i + 1] === \"*\") if (g[i + 2] === \"/\") {\n\t\t\ts += \"(?:.*/)?\";\n\t\t\ti += 2;\n\t\t} else {\n\t\t\ts += \".*\";\n\t\t\ti += 1;\n\t\t}\n\t\telse if (c === \"*\") s += \"[^/]*\";\n\t\telse if (c === \"?\") s += \"[^/]\";\n\t\telse if (\"+()[]{}|.^$\".includes(c)) s += `\\\\${c}`;\n\t\telse s += c;\n\t}\n\treturn new RegExp(`^${s}$`, \"i\");\n}\nfunction globMatch(filePath, pattern) {\n\tconst norm = String(filePath || \"\").replace(/\\\\/g, \"/\");\n\treturn globToRegExp(pattern).test(norm);\n}\nfunction isIgnored(filePath, patterns) {\n\treturn (patterns || []).some((p) => globMatch(filePath, p));\n}\nfunction isTestPath(filePath) {\n\tconst p = String(filePath || \"\").replace(/\\\\/g, \"/\");\n\treturn /(^|\\/)(__tests__|tests?|spec)s?(\\/|$)/i.test(p) || /\\.(test|spec)\\.[^.]+$/i.test(p);\n}\nfunction readIfExists(path) {\n\ttry {\n\t\treturn existsSync(path) ? readFileSync(path, \"utf8\") : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\nfunction loadReviewConfig(repo) {\n\tconst jsonText = readIfExists(join(repo, \".diff-review.json\"));\n\tconst yamlText = readIfExists(join(repo, \".diff-review.yml\")) || readIfExists(join(repo, \".diff-review.yaml\"));\n\tlet extra = {};\n\tif (jsonText) try {\n\t\textra = JSON.parse(jsonText);\n\t} catch {\n\t\textra = {};\n\t}\n\telse if (yamlText) extra = parseSimpleYaml(yamlText);\n\tconst extraIgnore = Array.isArray(extra.ignore) ? extra.ignore.map(String) : [];\n\tconst rulesFile = extra.rulesFile ? String(extra.rulesFile) : \"REVIEW.md\";\n\tconst rules = readIfExists(join(repo, rulesFile)) || \"\";\n\tconst model = extra.model && extra.model !== \"default\" ? String(extra.model) : null;\n\treturn {\n\t\tignore: [...DEFAULT_IGNORE, ...extraIgnore],\n\t\tmodel,\n\t\trulesFile,\n\t\trules: rules.trim()\n\t};\n}\n/** CLAUDE.md / REVIEW.md / AGENTS.md from repo root and immediate parent dirs of touched files. */\nfunction collectGuidelines(repo, filePaths, { rulesFile = \"REVIEW.md\", maxChars = 8e3, maxTotalChars = 12e3, maxDepth = 1, skipNames = [] } = {}) {\n\tconst skip = new Set(skipNames);\n\tconst names = [.../* @__PURE__ */ new Set([rulesFile, ...GUIDELINE_FILES])].filter((name) => !skip.has(name));\n\tconst seen = /* @__PURE__ */ new Set();\n\tconst out = [];\n\tconst addRel = (rel) => {\n\t\tconst norm = String(rel || \"\").replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\");\n\t\tif (!norm || seen.has(norm)) return;\n\t\tconst text = readIfExists(join(repo, ...norm.split(\"/\")));\n\t\tif (!text || !text.trim()) return;\n\t\tseen.add(norm);\n\t\tout.push({\n\t\t\tpath: norm,\n\t\t\ttext: text.trim()\n\t\t});\n\t};\n\tfor (const name of names) addRel(name);\n\tconst depth = Math.max(1, Number(maxDepth) || 1);\n\tfor (const filePath of filePaths || []) {\n\t\tconst parts = String(filePath || \"\").replace(/\\\\/g, \"/\").split(\"/\").filter(Boolean);\n\t\tconst minLen = Math.max(1, parts.length - depth);\n\t\tfor (let len = parts.length - 1; len >= minLen; len--) {\n\t\t\tconst dir = parts.slice(0, len).join(\"/\");\n\t\t\tfor (const name of names) addRel(`${dir}/${name}`);\n\t\t}\n\t}\n\tlet total = 0;\n\tconst capped = [];\n\tfor (const item of out) {\n\t\tif (total >= maxTotalChars) break;\n\t\tconst room = maxTotalChars - total;\n\t\tconst slice = item.text.slice(0, Math.min(maxChars, room));\n\t\tif (!slice) continue;\n\t\tcapped.push({\n\t\t\tpath: item.path,\n\t\t\ttext: slice\n\t\t});\n\t\ttotal += slice.length;\n\t}\n\treturn capped;\n}\nfunction capDiff(diff, max = STORE_DIFF_MAX) {\n\tconst text = String(diff || \"\");\n\tif (text.length <= max) return {\n\t\tdiff: text,\n\t\tdiffChars: text.length,\n\t\ttruncated: false\n\t};\n\treturn {\n\t\tdiff: `${text.slice(0, max)}\\n\\n… [diff recortado: se guardan ${max} de ${text.length} caracteres]`,\n\t\tdiffChars: text.length,\n\t\ttruncated: true\n\t};\n}\n//#endregion\n//#region ../lib/git.mjs\nfunction assertGitRepo(repo) {\n\tconst raw = String(repo || \"\").trim();\n\tif (!raw) throw new Error(\"Indicá la ruta absoluta de un repositorio git.\");\n\tif (!/[\\\\/]/.test(raw) && !/^[A-Za-z]:/.test(raw)) throw new Error(`\"${raw}\" no es una ruta. Pegá la ruta absoluta del repo (ej. C:\\\\tienda-argenta\\\\tienda-argenta-2).`);\n\tconst resolved = resolve(raw);\n\tif (!resolved || resolved === \".\") throw new Error(\"Indicá la ruta absoluta de un repositorio git.\");\n\tif (!existsSync(resolved)) throw new Error(`No existe la carpeta: ${resolved}`);\n\tif (!existsSync(join(resolved, \".git\"))) throw new Error(`No es un repositorio git (falta .git): ${resolved}`);\n\treturn resolved;\n}\n/**\n* Si `cwd` está dentro de un repo git, devuelve la raíz absoluta; si no, null.\n* Acepta subcarpetas (usa `git rev-parse --show-toplevel`).\n*/\nfunction tryResolveGitRoot(cwd) {\n\tconst raw = String(cwd || \"\").trim();\n\tif (!raw) return null;\n\tconst dir = resolve(raw);\n\tif (!existsSync(dir)) return null;\n\ttry {\n\t\tconst root = execFileSync(\"git\", [\"rev-parse\", \"--show-toplevel\"], {\n\t\t\tcwd: dir,\n\t\t\tencoding: \"utf8\",\n\t\t\twindowsHide: true,\n\t\t\tstdio: [\n\t\t\t\t\"ignore\",\n\t\t\t\t\"pipe\",\n\t\t\t\t\"ignore\"\n\t\t\t]\n\t\t}).trim();\n\t\treturn root ? resolve(root) : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\nfunction git(repo, args, { maxBuffer = 64 * 1024 * 1024 } = {}) {\n\treturn execFileSync(\"git\", args, {\n\t\tcwd: repo,\n\t\tencoding: \"utf8\",\n\t\tmaxBuffer,\n\t\twindowsHide: true\n\t});\n}\nfunction resolveRev(repo, ref) {\n\treturn git(repo, [\"rev-parse\", ref]).trim();\n}\nfunction branchTips(repo, branch, base) {\n\treturn {\n\t\tbranchSha: resolveRev(repo, branch),\n\t\tbaseSha: resolveRev(repo, base)\n\t};\n}\nfunction commitLog(repo, mergeBase, branch, limit = 25) {\n\ttry {\n\t\treturn git(repo, [\n\t\t\t\"log\",\n\t\t\t\"--oneline\",\n\t\t\t\"--no-merges\",\n\t\t\t\"-n\",\n\t\t\tString(limit),\n\t\t\t`${mergeBase}..${branch}`\n\t\t]).trim().split(\"\\n\").filter(Boolean);\n\t} catch {\n\t\treturn [];\n\t}\n}\nvar FILE_LINE_CACHE = /* @__PURE__ */ new Map();\nvar FILE_LINE_CACHE_MAX = 48;\nfunction rememberFileLines(key, lines) {\n\tif (FILE_LINE_CACHE.has(key)) FILE_LINE_CACHE.delete(key);\n\tFILE_LINE_CACHE.set(key, lines);\n\twhile (FILE_LINE_CACHE.size > FILE_LINE_CACHE_MAX) {\n\t\tconst oldest = FILE_LINE_CACHE.keys().next().value;\n\t\tFILE_LINE_CACHE.delete(oldest);\n\t}\n}\nfunction showFileLines(repo, rev, path) {\n\tconst resolved = assertGitRepo(repo);\n\tconst safeRev = String(rev || \"\").trim();\n\tconst safePath = String(path || \"\").replace(/\\\\/g, \"/\").trim();\n\tif (!safeRev || !/^[A-Za-z0-9._/\\-]+$/.test(safeRev)) throw new Error(\"Rev inválido.\");\n\tif (!safePath || safePath.startsWith(\"/\") || safePath.includes(\"..\") || safePath.includes(\"\\0\")) throw new Error(\"Ruta inválida.\");\n\tconst key = `${resolved}\\0${safeRev}\\0${safePath}`;\n\tif (FILE_LINE_CACHE.has(key)) return FILE_LINE_CACHE.get(key);\n\tlet text;\n\ttry {\n\t\ttext = git(resolved, [\"show\", `${safeRev}:${safePath}`]);\n\t} catch {\n\t\trememberFileLines(key, null);\n\t\treturn null;\n\t}\n\tif (text.includes(\"\\0\")) {\n\t\trememberFileLines(key, null);\n\t\treturn null;\n\t}\n\tconst raw = text.replace(/\\r\\n/g, \"\\n\");\n\tconst lines = raw.endsWith(\"\\n\") ? raw.slice(0, -1).split(\"\\n\") : raw.split(\"\\n\");\n\trememberFileLines(key, lines);\n\treturn lines;\n}\nfunction listBranches(repo) {\n\tconst names = git(repo, [\n\t\t\"for-each-ref\",\n\t\t\"--sort=-committerdate\",\n\t\t\"--format=%(refname:short)\",\n\t\t\"refs/heads\",\n\t\t\"refs/remotes\"\n\t]).split(\"\\n\").map((s) => s.trim()).filter(Boolean).map((name) => name.replace(/^origin\\//, \"\")).filter((name) => name !== \"HEAD\" && !name.endsWith(\"/HEAD\"));\n\tconst unique = [...new Set(names)];\n\tconst current = git(repo, [\n\t\t\"rev-parse\",\n\t\t\"--abbrev-ref\",\n\t\t\"HEAD\"\n\t]).trim();\n\tconst bases = unique.filter((n) => n === \"develop\" || n === \"main\" || n === \"master\");\n\treturn {\n\t\tbranches: unique,\n\t\tcurrent,\n\t\tdefaultBase: bases.includes(\"develop\") ? \"develop\" : bases.includes(\"main\") ? \"main\" : bases[0] || \"develop\"\n\t};\n}\n/** URL del remote (origin, o el primero disponible). Vacío si no hay. */\nfunction getRemoteUrl(repo, preferred = \"origin\") {\n\ttry {\n\t\tconst url = git(repo, [\n\t\t\t\"remote\",\n\t\t\t\"get-url\",\n\t\t\tpreferred\n\t\t]).trim();\n\t\tif (url) return url;\n\t} catch {}\n\ttry {\n\t\tconst remotes = git(repo, [\"remote\"]).split(\"\\n\").map((s) => s.trim()).filter(Boolean);\n\t\tif (!remotes.length) return \"\";\n\t\treturn git(repo, [\n\t\t\t\"remote\",\n\t\t\t\"get-url\",\n\t\t\tremotes[0]\n\t\t]).trim();\n\t} catch {\n\t\treturn \"\";\n\t}\n}\n//#endregion\n//#region ../lib/review-dir.mjs\n/**\n* Carpeta `.diff-review/` en la raíz del repo revisado: el JSON del reporte, el diff con el que se hizo y la sesión\n* del agente, todo con el mismo nombre base (`diff-rev_<branchTip>_<baseTip>`). Se ignora sola con su propio\n* `.gitignore`, así no deja cambios en archivos trackeados del repo.\n*\n* Los JSON viejos en la raíz del repo se siguen encontrando (`locateReviewFile`).\n*/\n/** @typedef {{ agentId: string, sessionId: string, model?: string, updatedAt?: string }} SessionRef */\nfunction reviewDir(repoRoot) {\n\treturn join(repoRoot, OUTPUT_DIR);\n}\n/** Crea `.diff-review/` (con su `.gitignore`) si no existe. */\nfunction ensureReviewDir(repoRoot) {\n\tconst dir = reviewDir(repoRoot);\n\tmkdirSync(dir, { recursive: true });\n\tconst ignore = join(dir, \".gitignore\");\n\tif (!existsSync(ignore)) writeFileSync(ignore, \"# Generado por diff-review: nada de esta carpeta va al repo.\\n*\\n\");\n\treturn dir;\n}\n/** `diff-rev_a_b.json` → `{ json, diff, session }` dentro de `.diff-review/`. */\nfunction companionPaths(repoRoot, filename) {\n\tconst name = basename(String(filename || \"\"));\n\tconst stem = name.replace(/\\.json$/i, \"\");\n\tconst dir = reviewDir(repoRoot);\n\treturn {\n\t\tjson: join(dir, name),\n\t\tdiff: join(dir, `${stem}.diff`),\n\t\tsession: join(dir, `${stem}.session.json`)\n\t};\n}\n/** Dónde está el JSON de la review: `.diff-review/` primero y, si no, la raíz del repo (formato viejo). */\nfunction locateReviewFile(repoRoot, filename) {\n\tconst name = basename(String(filename || \"\"));\n\tif (!name) return null;\n\tfor (const candidate of [companionPaths(repoRoot, name).json, join(repoRoot, name)]) try {\n\t\tif (statSync(candidate).isFile()) return candidate;\n\t} catch {}\n\treturn null;\n}\n/**\n* Guarda `git diff base...branch` junto al JSON (una vez por par de commits: el nombre ya trae los tips).\n* @returns {string | null} el path, o null si git falló\n*/\nfunction writeDiffCache(repoRoot, filename, { branch, base }) {\n\tconst { diff } = companionPaths(repoRoot, filename);\n\tif (existsSync(diff)) return diff;\n\ttry {\n\t\tconst text = git(repoRoot, [\"diff\", `${base}...${branch}`]);\n\t\tensureReviewDir(repoRoot);\n\t\twriteFileSync(diff, text);\n\t\treturn diff;\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** Guarda un diff ya armado (p. ej. el que muestra la web), pisando el anterior. */\nfunction writeDiffText(repoRoot, filename, text) {\n\tensureReviewDir(repoRoot);\n\tconst { diff } = companionPaths(repoRoot, filename);\n\twriteFileSync(diff, String(text ?? \"\"));\n\treturn diff;\n}\n/** @returns {string | null} texto del companion `.diff`, o null si no existe / no se pudo leer */\nfunction readDiffCache(repoRoot, filename) {\n\tconst { diff } = companionPaths(repoRoot, filename);\n\ttry {\n\t\tif (!existsSync(diff)) return null;\n\t\treturn readFileSync(diff, \"utf8\");\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** @param {SessionRef} ref */\nfunction writeSessionRef(repoRoot, filename, ref) {\n\tensureReviewDir(repoRoot);\n\tconst full = {\n\t\t...ref,\n\t\tupdatedAt: (/* @__PURE__ */ new Date()).toISOString()\n\t};\n\twriteFileSync(companionPaths(repoRoot, filename).session, `${JSON.stringify(full, null, 2)}\\n`);\n\treturn full;\n}\n//#endregion\n//#region ../lib/extract.mjs\n/**\n* Parte un `git diff` multi-archivo (texto de `writeDiffCache`) en entradas por path.\n* @param {string} text\n* @returns {Array<{ path: string, oldPath?: string, changeType: string, hunkDiff: string }>}\n*/\nfunction parseGitDiffFiles(text) {\n\tconst raw = String(text || \"\").replace(/\\r\\n/g, \"\\n\");\n\tif (!raw.trim()) return [];\n\tconst parts = raw.split(/^diff --git /m);\n\t/** @type {Array<{ path: string, oldPath?: string, changeType: string, hunkDiff: string }>} */\n\tconst out = [];\n\tfor (const part of parts) {\n\t\tconst chunk = part.trimStart();\n\t\tif (!chunk) continue;\n\t\tconst firstNl = chunk.indexOf(\"\\n\");\n\t\tconst paths = (firstNl === -1 ? chunk : chunk.slice(0, firstNl)).trim().match(/^a\\/(.+) b\\/(.+)$/);\n\t\tif (!paths) continue;\n\t\tlet oldPath = paths[1];\n\t\tlet path = paths[2];\n\t\tconst body = firstNl === -1 ? \"\" : chunk.slice(firstNl + 1);\n\t\tlet changeType = \"modified\";\n\t\tif (/^new file mode /m.test(body) || /^--- \\/dev\\/null/m.test(body)) changeType = \"added\";\n\t\telse if (/^deleted file mode /m.test(body) || /^\\+\\+\\+ \\/dev\\/null/m.test(body)) changeType = \"deleted\";\n\t\telse if (/^rename from /m.test(body) || /^rename to /m.test(body)) {\n\t\t\tchangeType = \"renamed\";\n\t\t\tconst from = body.match(/^rename from (.+)$/m);\n\t\t\tconst to = body.match(/^rename to (.+)$/m);\n\t\t\tif (from) oldPath = from[1].trim();\n\t\t\tif (to) path = to[1].trim();\n\t\t}\n\t\tlet hunkDiff = \"\";\n\t\tconst idx = `\\n${body}`.indexOf(\"\\n@@\");\n\t\tif (idx !== -1) hunkDiff = `\\n${body}`.slice(idx + 1);\n\t\telse if (/^Binary files /m.test(body)) hunkDiff = \"\";\n\t\tout.push({\n\t\t\tpath,\n\t\t\toldPath: oldPath !== path ? oldPath : void 0,\n\t\t\tchangeType,\n\t\t\thunkDiff\n\t\t});\n\t}\n\treturn out;\n}\n/**\n* Stats baratos desde el texto del diff (sin volver a llamar a git).\n* @param {string} text\n*/\nfunction statsFromDiffText(text) {\n\tlet insertions = 0;\n\tlet deletions = 0;\n\tfor (const line of String(text || \"\").split(\"\\n\")) {\n\t\tif (!line.length) continue;\n\t\tif (line.startsWith(\"+++\") || line.startsWith(\"---\") || line.startsWith(\"diff \") || line.startsWith(\"index \")) continue;\n\t\tif (line.startsWith(\"+\")) insertions += 1;\n\t\telse if (line.startsWith(\"-\")) deletions += 1;\n\t}\n\treturn {\n\t\tinsertions,\n\t\tdeletions\n\t};\n}\n/**\n* Tips / merge-base si git responde; si no, strings vacíos (el contenido del diff ya viene del cache).\n*/\nfunction tryTips(repo, branch, base) {\n\ttry {\n\t\treturn {\n\t\t\tmergeBase: git(repo, [\n\t\t\t\t\"merge-base\",\n\t\t\t\tbase,\n\t\t\t\tbranch\n\t\t\t]).trim(),\n\t\t\tbranchSha: git(repo, [\"rev-parse\", branch]).trim(),\n\t\t\tbaseSha: git(repo, [\"rev-parse\", base]).trim()\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tmergeBase: \"\",\n\t\t\tbranchSha: \"\",\n\t\t\tbaseSha: \"\"\n\t\t};\n\t}\n}\n/**\n* Arma el mismo shape que `extractBranchDiff` a partir de un texto de `git diff` ya cacheado.\n* No vuelve a correr `git diff`.\n*/\nfunction skeletonFromCachedDiff(repo, branch, base, cachedDiff) {\n\tconst config = loadReviewConfig(repo);\n\tconst tips = tryTips(repo, branch, base);\n\tconst parsed = parseGitDiffFiles(cachedDiff);\n\tconst ignored = [];\n\tconst included = [];\n\tfor (const f of parsed) if (isIgnored(f.path, config.ignore)) ignored.push(f.path);\n\telse included.push(f);\n\tconst files = included.map((f) => {\n\t\tconst capped = capDiff(f.hunkDiff);\n\t\treturn {\n\t\t\tpath: f.path,\n\t\t\toldPath: f.oldPath || void 0,\n\t\t\tchangeType: f.changeType,\n\t\t\tdiff: capped.diff,\n\t\t\tdiffChars: capped.diffChars,\n\t\t\ttruncated: capped.truncated,\n\t\t\tmodelChars: capped.diff.length,\n\t\t\tgroup: \"\"\n\t\t};\n\t});\n\tconst { insertions, deletions } = statsFromDiffText(cachedDiff);\n\tlet commits = [];\n\tif (tips.mergeBase) try {\n\t\tcommits = commitLog(repo, tips.mergeBase, branch);\n\t} catch {\n\t\tcommits = [];\n\t}\n\treturn {\n\t\tversion: 2,\n\t\trepo,\n\t\tbranch,\n\t\tbaseBranch: base,\n\t\tmergeBase: tips.mergeBase,\n\t\tbranchSha: tips.branchSha,\n\t\tbaseSha: tips.baseSha,\n\t\tgeneratedAt: (/* @__PURE__ */ new Date()).toISOString(),\n\t\tintent: \"\",\n\t\tstats: {\n\t\t\tfilesChanged: files.length,\n\t\t\tfilesIgnored: ignored.length,\n\t\t\tfilesTruncated: files.filter((f) => f.truncated).length,\n\t\t\tinsertions,\n\t\t\tdeletions\n\t\t},\n\t\tcontext: {\n\t\t\tcommits,\n\t\t\trules: config.rules,\n\t\t\trulesFile: config.rulesFile,\n\t\t\tignored: ignored.slice(0, 40),\n\t\t\ttestsTouched: files.filter((f) => isTestPath(f.path)).map((f) => f.path),\n\t\t\ttestsMissing: files.filter((f) => !isTestPath(f.path)).length,\n\t\t\tguidelines: collectGuidelines(repo, files.map((f) => f.path), {\n\t\t\t\trulesFile: config.rulesFile,\n\t\t\t\tskipNames: config.rules.trim() ? [config.rulesFile] : [],\n\t\t\t\tmaxDepth: 1,\n\t\t\t\tmaxChars: 8e3,\n\t\t\t\tmaxTotalChars: 12e3\n\t\t\t})\n\t\t},\n\t\tfiles,\n\t\tgroups: [],\n\t\tblocks: [],\n\t\tfindings: [],\n\t\tskipped: []\n\t};\n}\n/**\n* @param {{\n* repo: string,\n* branch: string,\n* base?: string,\n* cachedDiff?: string | null,\n* }} opts\n* `cachedDiff`: texto de `git diff base...branch` ya materializado; si viene, no se vuelve a calcular el diff.\n*/\nfunction extractBranchDiff({ repo, branch, base = \"develop\", cachedDiff = null } = {}) {\n\tif (!branch) throw new Error(\"Falta el branch a revisar.\");\n\tif (typeof cachedDiff === \"string\" && cachedDiff.length) return skeletonFromCachedDiff(repo, branch, base, cachedDiff);\n\tconst config = loadReviewConfig(repo);\n\tconst mergeBase = git(repo, [\n\t\t\"merge-base\",\n\t\tbase,\n\t\tbranch\n\t]).trim();\n\tconst branchSha = git(repo, [\"rev-parse\", branch]).trim();\n\tconst baseSha = git(repo, [\"rev-parse\", base]).trim();\n\tconst nameStatus = git(repo, [\n\t\t\"diff\",\n\t\tmergeBase,\n\t\tbranch,\n\t\t\"--name-status\"\n\t]).trim().split(\"\\n\").filter(Boolean).map((line) => {\n\t\tconst [status, ...rest] = line.split(\"\t\");\n\t\tconst path = rest[rest.length - 1];\n\t\tconst oldPath = rest.length > 1 ? rest[0] : null;\n\t\tlet changeType = \"modified\";\n\t\tif (status.startsWith(\"A\")) changeType = \"added\";\n\t\telse if (status.startsWith(\"D\")) changeType = \"deleted\";\n\t\telse if (status.startsWith(\"R\")) changeType = \"renamed\";\n\t\treturn {\n\t\t\tpath,\n\t\t\toldPath,\n\t\t\tchangeType\n\t\t};\n\t});\n\tconst ignored = [];\n\tconst included = [];\n\tfor (const f of nameStatus) if (isIgnored(f.path, config.ignore)) ignored.push(f.path);\n\telse included.push(f);\n\tconst files = included.map((f) => {\n\t\tlet raw = \"\";\n\t\ttry {\n\t\t\traw = git(repo, [\n\t\t\t\t\"diff\",\n\t\t\t\tmergeBase,\n\t\t\t\tbranch,\n\t\t\t\t\"--\",\n\t\t\t\tf.path\n\t\t\t]);\n\t\t\tconst idx = raw.indexOf(\"\\n@@\");\n\t\t\tif (idx !== -1) raw = raw.slice(idx + 1);\n\t\t} catch {\n\t\t\traw = \"\";\n\t\t}\n\t\tconst capped = capDiff(raw);\n\t\treturn {\n\t\t\tpath: f.path,\n\t\t\toldPath: f.oldPath || void 0,\n\t\t\tchangeType: f.changeType,\n\t\t\tdiff: capped.diff,\n\t\t\tdiffChars: capped.diffChars,\n\t\t\ttruncated: capped.truncated,\n\t\t\tmodelChars: capped.diff.length,\n\t\t\tgroup: \"\"\n\t\t};\n\t});\n\tconst shortstat = git(repo, [\n\t\t\"diff\",\n\t\tmergeBase,\n\t\tbranch,\n\t\t\"--shortstat\"\n\t]).trim();\n\tconst insMatch = shortstat.match(/(\\d+) insertion/);\n\tconst delMatch = shortstat.match(/(\\d+) deletion/);\n\treturn {\n\t\tversion: 2,\n\t\trepo,\n\t\tbranch,\n\t\tbaseBranch: base,\n\t\tmergeBase,\n\t\tbranchSha,\n\t\tbaseSha,\n\t\tgeneratedAt: (/* @__PURE__ */ new Date()).toISOString(),\n\t\tintent: \"\",\n\t\tstats: {\n\t\t\tfilesChanged: files.length,\n\t\t\tfilesIgnored: ignored.length,\n\t\t\tfilesTruncated: files.filter((f) => f.truncated).length,\n\t\t\tinsertions: insMatch ? Number(insMatch[1]) : 0,\n\t\t\tdeletions: delMatch ? Number(delMatch[1]) : 0\n\t\t},\n\t\tcontext: {\n\t\t\tcommits: commitLog(repo, mergeBase, branch),\n\t\t\trules: config.rules,\n\t\t\trulesFile: config.rulesFile,\n\t\t\tignored: ignored.slice(0, 40),\n\t\t\ttestsTouched: files.filter((f) => isTestPath(f.path)).map((f) => f.path),\n\t\t\ttestsMissing: files.filter((f) => !isTestPath(f.path)).length,\n\t\t\tguidelines: collectGuidelines(repo, files.map((f) => f.path), {\n\t\t\t\trulesFile: config.rulesFile,\n\t\t\t\tskipNames: config.rules.trim() ? [config.rulesFile] : [],\n\t\t\t\tmaxDepth: 1,\n\t\t\t\tmaxChars: 8e3,\n\t\t\t\tmaxTotalChars: 12e3\n\t\t\t})\n\t\t},\n\t\tfiles,\n\t\tgroups: [],\n\t\tblocks: [],\n\t\tfindings: [],\n\t\tskipped: []\n\t};\n}\n/**\n* Preferí el companion `.diff` en `.diff-review/` si existe; si no, `git diff` vía `extractBranchDiff`.\n* @param {{ repo: string, branch: string, base?: string, filename?: string }} opts\n*/\nfunction loadBranchDiff({ repo, branch, base = \"develop\", filename } = {}) {\n\tconst name = String(filename || \"\").trim();\n\tif (name) {\n\t\tconst cached = readDiffCache(repo, name);\n\t\tif (cached != null && cached.length) return extractBranchDiff({\n\t\t\trepo,\n\t\t\tbranch,\n\t\t\tbase,\n\t\t\tcachedDiff: cached\n\t\t});\n\t}\n\treturn extractBranchDiff({\n\t\trepo,\n\t\tbranch,\n\t\tbase\n\t});\n}\n//#endregion\n//#region ../lib/json-payload.mjs\nfunction tryParseJson(s) {\n\ttry {\n\t\treturn JSON.parse(s);\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** Extrae un objeto JSON del texto del modelo (fences, prosa alrededor, envelope). */\nfunction decodePayload(text) {\n\tconst raw = String(text || \"\").trim();\n\tif (!raw) throw new Error(\"Respuesta vacía.\");\n\tconst fence = raw.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n\tif (fence) {\n\t\tconst parsed = tryParseJson(fence[1].trim());\n\t\tif (parsed && typeof parsed === \"object\") return parsed;\n\t}\n\tconst direct = tryParseJson(raw);\n\tif (direct && typeof direct === \"object\") return direct;\n\tconst start = raw.indexOf(\"{\");\n\tconst end = raw.lastIndexOf(\"}\");\n\tif (start >= 0 && end > start) {\n\t\tconst parsed = tryParseJson(raw.slice(start, end + 1));\n\t\tif (parsed && typeof parsed === \"object\") return parsed;\n\t}\n\tthrow new Error(\"No se pudo interpretar la respuesta como JSON.\");\n}\n//#endregion\n//#region ../lib/validate.mjs\nvar GROUP_KINDS = [\n\t\"feat\",\n\t\"fix\",\n\t\"refactor\",\n\t\"perf\",\n\t\"test\",\n\t\"chore\",\n\t\"docs\",\n\t\"infra\"\n];\nvar BLOCK_OPS = [\n\t\"add\",\n\t\"mod\",\n\t\"del\",\n\t\"rename\"\n];\nvar WHY_SOURCES = [\n\t\"code\",\n\t\"commit\",\n\t\"pr\",\n\t\"issue\",\n\t\"inferred\"\n];\nvar FINDING_CLASSES = [\"risk\", \"quality\"];\nvar FINDING_SEVERITIES = [\n\t\"high\",\n\t\"med\",\n\t\"low\",\n\t\"nit\"\n];\nvar FINDING_KINDS = [\n\t\"bug\",\n\t\"race\",\n\t\"auth\",\n\t\"security\",\n\t\"api-break\",\n\t\"missing-test\",\n\t\"perf\",\n\t\"maintainability\",\n\t\"docs\",\n\t\"other\"\n];\nvar SKIP_REASONS = [\n\t\"generated\",\n\t\"lockfile\",\n\t\"format\",\n\t\"vendored\",\n\t\"binary\",\n\t\"trivial\",\n\t\"ignored\"\n];\n/** Lo que tiene que devolver el modelo en un turno. El resto lo agrega el pipeline. */\nvar REVIEW_SCHEMA = {\n\t$id: \"diff-review\",\n\ttype: \"object\",\n\trequired: [\n\t\t\"meta\",\n\t\t\"intent\",\n\t\t\"groups\",\n\t\t\"blocks\"\n\t],\n\tadditionalProperties: true,\n\tproperties: {\n\t\tmeta: {\n\t\t\ttype: \"object\",\n\t\t\trequired: [\"agent\", \"model\"],\n\t\t\tadditionalProperties: true,\n\t\t\tproperties: {\n\t\t\t\tagent: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tminLength: 1\n\t\t\t\t},\n\t\t\t\tmodel: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tminLength: 1\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tintent: {\n\t\t\ttype: \"string\",\n\t\t\tminLength: 40\n\t\t},\n\t\tgroups: {\n\t\t\ttype: \"array\",\n\t\t\tminItems: 1,\n\t\t\titems: {\n\t\t\t\ttype: \"object\",\n\t\t\t\trequired: [\n\t\t\t\t\t\"id\",\n\t\t\t\t\t\"kind\",\n\t\t\t\t\t\"title\",\n\t\t\t\t\t\"intent\"\n\t\t\t\t],\n\t\t\t\tadditionalProperties: true,\n\t\t\t\tproperties: {\n\t\t\t\t\tid: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tkind: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: GROUP_KINDS\n\t\t\t\t\t},\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tintent: { type: \"string\" }\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tblocks: {\n\t\t\ttype: \"array\",\n\t\t\tminItems: 1,\n\t\t\titems: {\n\t\t\t\ttype: \"object\",\n\t\t\t\trequired: [\n\t\t\t\t\t\"id\",\n\t\t\t\t\t\"group\",\n\t\t\t\t\t\"file\",\n\t\t\t\t\t\"lines\",\n\t\t\t\t\t\"op\",\n\t\t\t\t\t\"what\"\n\t\t\t\t],\n\t\t\t\tadditionalProperties: true,\n\t\t\t\tproperties: {\n\t\t\t\t\tid: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tgroup: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tfile: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tlines: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\top: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: BLOCK_OPS\n\t\t\t\t\t},\n\t\t\t\t\twhat: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\twhy: { type: \"string\" },\n\t\t\t\t\tsource: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: WHY_SOURCES\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tfindings: {\n\t\t\ttype: \"array\",\n\t\t\titems: {\n\t\t\t\ttype: \"object\",\n\t\t\t\trequired: [\n\t\t\t\t\t\"class\",\n\t\t\t\t\t\"severity\",\n\t\t\t\t\t\"kind\",\n\t\t\t\t\t\"file\",\n\t\t\t\t\t\"what\"\n\t\t\t\t],\n\t\t\t\tadditionalProperties: true,\n\t\t\t\tproperties: {\n\t\t\t\t\tid: { type: \"string\" },\n\t\t\t\t\tclass: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: FINDING_CLASSES\n\t\t\t\t\t},\n\t\t\t\t\tseverity: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: FINDING_SEVERITIES\n\t\t\t\t\t},\n\t\t\t\t\tblocking: { type: \"boolean\" },\n\t\t\t\t\tkind: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: FINDING_KINDS\n\t\t\t\t\t},\n\t\t\t\t\tfile: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tline: { type: [\"integer\", \"null\"] },\n\t\t\t\t\tblock: { type: \"string\" },\n\t\t\t\t\twhat: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tfix: { type: \"string\" }\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tskipped: {\n\t\t\ttype: \"array\",\n\t\t\titems: {\n\t\t\t\ttype: \"object\",\n\t\t\t\trequired: [\"file\", \"reason\"],\n\t\t\t\tadditionalProperties: true,\n\t\t\t\tproperties: {\n\t\t\t\t\tfile: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\treason: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: SKIP_REASONS\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\nfunction typeOf(value) {\n\tif (value === null) return \"null\";\n\tif (Array.isArray(value)) return \"array\";\n\tif (typeof value === \"number\" && Number.isInteger(value)) return \"integer\";\n\treturn typeof value;\n}\nfunction typeMatches(expected, actual) {\n\tconst options = Array.isArray(expected) ? expected : [expected];\n\tif (options.includes(actual)) return true;\n\treturn options.includes(\"number\") && actual === \"integer\";\n}\n/** Minimal JSON Schema checker (type, required, properties, items, enum, minLength, minItems). */\nfunction validateAgainst(schema, data, path = \"$\") {\n\tconst errors = [];\n\tif (!schema || typeof schema !== \"object\") return errors;\n\tconst actual = typeOf(data);\n\tif (schema.type && !typeMatches(schema.type, actual)) {\n\t\terrors.push(`${path}: se esperaba ${[].concat(schema.type).join(\"|\")}, llegó ${actual}`);\n\t\treturn errors;\n\t}\n\tif (actual === \"string\" && schema.minLength && data.length < schema.minLength) errors.push(`${path}: texto demasiado corto (mínimo ${schema.minLength})`);\n\tif (schema.enum && (actual === \"string\" || actual === \"number\") && !schema.enum.includes(data)) errors.push(`${path}: valor no permitido (${data}); usá uno de: ${schema.enum.join(\", \")}`);\n\tif (actual === \"array\") {\n\t\tif (schema.minItems && data.length < schema.minItems) errors.push(`${path}: se esperaban al menos ${schema.minItems} ítems`);\n\t\tif (schema.items) data.forEach((item, i) => errors.push(...validateAgainst(schema.items, item, `${path}[${i}]`)));\n\t}\n\tif (actual === \"object\") {\n\t\tfor (const key of schema.required || []) if (data[key] === void 0) errors.push(`${path}: falta ${key}`);\n\t\tfor (const [key, child] of Object.entries(schema.properties || {})) {\n\t\t\tif (data[key] === void 0) continue;\n\t\t\terrors.push(...validateAgainst(child, data[key], `${path}.${key}`));\n\t\t}\n\t}\n\treturn errors;\n}\n/**\n* Integridad referencial y cobertura. El schema solo mira formas; esto mira que\n* los ids cierren y que no haya quedado un archivo sin explicar, que es el\n* error que de verdad arruina la review.\n*/\nfunction reviewIssues(payload, knownPaths = []) {\n\tconst errors = [];\n\tconst meta = payload?.meta && typeof payload.meta === \"object\" ? payload.meta : {};\n\tconst agentName = typeof meta.agent === \"string\" ? meta.agent.trim() : \"\";\n\tconst modelId = typeof meta.model === \"string\" ? meta.model.trim() : \"\";\n\tif (!agentName || agentName.startsWith(\"<\")) errors.push(\"meta.agent es obligatorio: nombre del producto (Claude Code, Cursor, Codex, …), sin placeholder\");\n\tif (!modelId || modelId.startsWith(\"<\")) errors.push(\"meta.model es obligatorio: id exacto del modelo, sin placeholder\");\n\tconst groups = Array.isArray(payload?.groups) ? payload.groups : [];\n\tconst blocks = Array.isArray(payload?.blocks) ? payload.blocks : [];\n\tconst findings = Array.isArray(payload?.findings) ? payload.findings : [];\n\tconst skipped = Array.isArray(payload?.skipped) ? payload.skipped : [];\n\tconst groupIds = new Set(groups.map((g) => g.id));\n\tconst blockIds = new Set(blocks.map((b) => b.id));\n\tconst known = new Set(knownPaths);\n\tconst dupGroups = groups.length - groupIds.size;\n\tif (dupGroups > 0) errors.push(`hay ${dupGroups} id de tema repetido`);\n\tconst dupBlocks = blocks.length - blockIds.size;\n\tif (dupBlocks > 0) errors.push(`hay ${dupBlocks} id de bloque repetido`);\n\tfor (const block of blocks) {\n\t\tif (!groupIds.has(block.group)) errors.push(`el bloque ${block.id} apunta al tema inexistente ${block.group}`);\n\t\tif (known.size && !known.has(block.file)) errors.push(`el bloque ${block.id} apunta a un archivo que no está en el diff: ${block.file}`);\n\t}\n\tconst usedGroups = new Set(blocks.map((b) => b.group));\n\tfor (const group of groups) if (!usedGroups.has(group.id)) errors.push(`el tema ${group.id} no tiene ningún bloque`);\n\tfor (const finding of findings) {\n\t\tif (finding.block && !blockIds.has(finding.block)) errors.push(`el hallazgo ${finding.id || finding.what} apunta al bloque inexistente ${finding.block}`);\n\t\tif (known.size && !known.has(finding.file)) errors.push(`el hallazgo ${finding.id || finding.what} apunta a un archivo fuera del diff: ${finding.file}`);\n\t}\n\tif (known.size) {\n\t\tconst covered = /* @__PURE__ */ new Set([...blocks.map((b) => b.file), ...skipped.map((s) => s.file)]);\n\t\tconst missing = [...known].filter((path) => !covered.has(path));\n\t\tif (missing.length) errors.push(`quedaron ${missing.length} archivo(s) sin bloque ni skipped: ${missing.slice(0, 8).join(\", \")}`);\n\t}\n\treturn errors;\n}\n//#endregion\nexport { loadReviewConfig as A, branchTips as C, showFileLines as D, listBranches as E, fingerprint as F, isOutputFilename as M, makeOutputFilename as N, tryResolveGitRoot as O, outputRelPath as P, assertGitRepo as S, git as T, readDiffCache as _, GROUP_KINDS as a, writeDiffText as b, WHY_SOURCES as c, decodePayload as d, extractBranchDiff as f, locateReviewFile as g, ensureReviewDir as h, FINDING_SEVERITIES as i, OUTPUT_DIR as j, globMatch as k, reviewIssues as l, companionPaths as m, FINDING_CLASSES as n, REVIEW_SCHEMA as o, loadBranchDiff as p, FINDING_KINDS as r, SKIP_REASONS as s, BLOCK_OPS as t, validateAgainst as u, reviewDir as v, getRemoteUrl as w, writeSessionRef as x, writeDiffCache as y };\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate-CAQ31C7k.js","sources":["../../../.svelte-kit/output/server/chunks/validate.js"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from \"node:fs\";\nimport { execFileSync } from \"node:child_process\";\nimport { basename, join, resolve } from \"node:path\";\n//#region ../lib/fingerprint.mjs\n/**\n* Tips cortos de SHA. Sin APIs de Node: la UI lo importa para armar el nombre del JSON.\n*/\nfunction shortSha(sha, n = 10) {\n\tconst hex = String(sha || \"\").toLowerCase().replace(/[^a-f0-9]/g, \"\");\n\treturn hex.length >= 7 ? hex.slice(0, n) : \"\";\n}\nfunction fingerprint(branchSha, baseSha) {\n\tconst a = shortSha(branchSha);\n\tconst b = shortSha(baseSha);\n\tif (!a || !b) return null;\n\treturn `${a}-${b}`;\n}\n//#endregion\n//#region ../lib/output-name.mjs\n/**\n* Nombre del JSON que escribe el agente.\n* Preferido: tips cortos branch/base. Legacy (con stamp o sin tips) sigue válido al importar.\n*/\n/** Prefijo del formato actual. */\nvar OUTPUT_PREFIX = \"diff-rev\";\n/** Prefijo legacy (sin tips / con stamp). */\nvar OUTPUT_PREFIX_LEGACY = \"diff-review-output\";\n/** Carpeta (en la raíz del repo revisado) donde va el JSON, el diff y la sesión del agente. */\nvar OUTPUT_DIR = \".diff-review\";\n/** Path relativo a la raíz del repo, con `/` (el que se le da al agente): `.diff-review/<nombre>`. */\nfunction outputRelPath(filename) {\n\treturn `${OUTPUT_DIR}/${String(filename || \"\").replace(/^.*[\\\\/]/, \"\")}`;\n}\n/** Nombre legacy fijo. */\nvar OUTPUT_FILENAME_LEGACY = `${OUTPUT_PREFIX_LEGACY}.json`;\n/**\n* Válidos:\n* - diff-rev_{branchTip}_{baseTip}.json\n* - diff-report_{branchTip}-{baseTip}_YYYYMMDD-HHmmss.json (legacy)\n* - diff-review-output.json / diff-review-output-YYYYMMDD-HHmmss.json (legacy)\n*/\nvar OUTPUT_FILENAME_RE = /^(?:diff-rev_[0-9a-f]{7,12}_[0-9a-f]{7,12}|diff-report_[0-9a-f]{7,12}-[0-9a-f]{7,12}_\\d{8}-\\d{6}|diff-review-output(?:-\\d{8}-\\d{6})?)\\.json$/i;\n/**\n* @param {{ branchSha?: string, baseSha?: string }} [input]\n* @returns {string}\n* con tips: diff-rev_aaaaaaaaaa_bbbbbbbbbb.json\n* sin tips: diff-review-output.json\n*/\nfunction makeOutputFilename(input = {}) {\n\tconst opts = input instanceof Date ? {} : input || {};\n\tconst fp = fingerprint(opts.branchSha, opts.baseSha);\n\tif (fp) {\n\t\tconst [branchTip, baseTip] = fp.split(\"-\");\n\t\tif (branchTip && baseTip) return `${OUTPUT_PREFIX}_${branchTip}_${baseTip}.json`;\n\t}\n\treturn OUTPUT_FILENAME_LEGACY;\n}\nfunction isOutputFilename(name) {\n\treturn OUTPUT_FILENAME_RE.test(String(name || \"\").trim());\n}\n//#endregion\n//#region ../lib/config.mjs\nvar DEFAULT_IGNORE = [\n\t\"**/package-lock.json\",\n\t\"**/pnpm-lock.yaml\",\n\t\"**/yarn.lock\",\n\t\"**/bun.lock\",\n\t\"**/bun.lockb\",\n\t\"**/*.g.cs\",\n\t\"**/*Snapshot.cs\",\n\t\"**/*.Designer.cs\",\n\t\"**/node_modules/**\",\n\t\"**/.svelte-kit/**\",\n\t\"**/dist/**\",\n\t\"**/build/**\",\n\t\"**/*.min.js\",\n\t\"**/*.min.css\",\n\t\"**/CODE_REVIEW_CORRECTNESS_FINDINGS.md\"\n];\nvar STORE_DIFF_MAX = 4e5;\nvar GUIDELINE_FILES = [\n\t\"REVIEW.md\",\n\t\"CLAUDE.md\",\n\t\"AGENTS.md\"\n];\nfunction unquote(s) {\n\tconst t = String(s || \"\").trim();\n\tif (t.startsWith(\"\\\"\") && t.endsWith(\"\\\"\") || t.startsWith(\"'\") && t.endsWith(\"'\")) return t.slice(1, -1);\n\treturn t;\n}\n/** Minimal YAML: `key: value` and `key:\\n - item`. */\nfunction parseSimpleYaml(text) {\n\tconst result = {};\n\tlet key = null;\n\tfor (const raw of String(text || \"\").split(/\\r?\\n/)) {\n\t\tif (!raw.trim() || raw.trim().startsWith(\"#\")) continue;\n\t\tconst list = raw.match(/^\\s+-\\s+(.*)$/);\n\t\tif (list && key) {\n\t\t\tif (!Array.isArray(result[key])) result[key] = [];\n\t\t\tresult[key].push(unquote(list[1]));\n\t\t\tcontinue;\n\t\t}\n\t\tconst kv = raw.match(/^([A-Za-z][\\w]*)\\s*:\\s*(.*)$/);\n\t\tif (!kv) continue;\n\t\tkey = kv[1];\n\t\tconst v = kv[2].trim();\n\t\tresult[key] = v === \"\" ? [] : unquote(v);\n\t}\n\treturn result;\n}\nfunction globToRegExp(glob) {\n\tlet g = String(glob || \"\").replace(/\\\\/g, \"/\");\n\tif (!g.includes(\"/\")) g = `**/${g}`;\n\tlet s = \"\";\n\tfor (let i = 0; i < g.length; i++) {\n\t\tconst c = g[i];\n\t\tif (c === \"*\" && g[i + 1] === \"*\") if (g[i + 2] === \"/\") {\n\t\t\ts += \"(?:.*/)?\";\n\t\t\ti += 2;\n\t\t} else {\n\t\t\ts += \".*\";\n\t\t\ti += 1;\n\t\t}\n\t\telse if (c === \"*\") s += \"[^/]*\";\n\t\telse if (c === \"?\") s += \"[^/]\";\n\t\telse if (\"+()[]{}|.^$\".includes(c)) s += `\\\\${c}`;\n\t\telse s += c;\n\t}\n\treturn new RegExp(`^${s}$`, \"i\");\n}\nfunction globMatch(filePath, pattern) {\n\tconst norm = String(filePath || \"\").replace(/\\\\/g, \"/\");\n\treturn globToRegExp(pattern).test(norm);\n}\nfunction isIgnored(filePath, patterns) {\n\treturn (patterns || []).some((p) => globMatch(filePath, p));\n}\nfunction isTestPath(filePath) {\n\tconst p = String(filePath || \"\").replace(/\\\\/g, \"/\");\n\treturn /(^|\\/)(__tests__|tests?|spec)s?(\\/|$)/i.test(p) || /\\.(test|spec)\\.[^.]+$/i.test(p);\n}\nfunction readIfExists(path) {\n\ttry {\n\t\treturn existsSync(path) ? readFileSync(path, \"utf8\") : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\nfunction loadReviewConfig(repo) {\n\tconst jsonText = readIfExists(join(repo, \".diff-review.json\"));\n\tconst yamlText = readIfExists(join(repo, \".diff-review.yml\")) || readIfExists(join(repo, \".diff-review.yaml\"));\n\tlet extra = {};\n\tif (jsonText) try {\n\t\textra = JSON.parse(jsonText);\n\t} catch {\n\t\textra = {};\n\t}\n\telse if (yamlText) extra = parseSimpleYaml(yamlText);\n\tconst extraIgnore = Array.isArray(extra.ignore) ? extra.ignore.map(String) : [];\n\tconst rulesFile = extra.rulesFile ? String(extra.rulesFile) : \"REVIEW.md\";\n\tconst rules = readIfExists(join(repo, rulesFile)) || \"\";\n\tconst model = extra.model && extra.model !== \"default\" ? String(extra.model) : null;\n\treturn {\n\t\tignore: [...DEFAULT_IGNORE, ...extraIgnore],\n\t\tmodel,\n\t\trulesFile,\n\t\trules: rules.trim()\n\t};\n}\n/** CLAUDE.md / REVIEW.md / AGENTS.md from repo root and immediate parent dirs of touched files. */\nfunction collectGuidelines(repo, filePaths, { rulesFile = \"REVIEW.md\", maxChars = 8e3, maxTotalChars = 12e3, maxDepth = 1, skipNames = [] } = {}) {\n\tconst skip = new Set(skipNames);\n\tconst names = [.../* @__PURE__ */ new Set([rulesFile, ...GUIDELINE_FILES])].filter((name) => !skip.has(name));\n\tconst seen = /* @__PURE__ */ new Set();\n\tconst out = [];\n\tconst addRel = (rel) => {\n\t\tconst norm = String(rel || \"\").replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\");\n\t\tif (!norm || seen.has(norm)) return;\n\t\tconst text = readIfExists(join(repo, ...norm.split(\"/\")));\n\t\tif (!text || !text.trim()) return;\n\t\tseen.add(norm);\n\t\tout.push({\n\t\t\tpath: norm,\n\t\t\ttext: text.trim()\n\t\t});\n\t};\n\tfor (const name of names) addRel(name);\n\tconst depth = Math.max(1, Number(maxDepth) || 1);\n\tfor (const filePath of filePaths || []) {\n\t\tconst parts = String(filePath || \"\").replace(/\\\\/g, \"/\").split(\"/\").filter(Boolean);\n\t\tconst minLen = Math.max(1, parts.length - depth);\n\t\tfor (let len = parts.length - 1; len >= minLen; len--) {\n\t\t\tconst dir = parts.slice(0, len).join(\"/\");\n\t\t\tfor (const name of names) addRel(`${dir}/${name}`);\n\t\t}\n\t}\n\tlet total = 0;\n\tconst capped = [];\n\tfor (const item of out) {\n\t\tif (total >= maxTotalChars) break;\n\t\tconst room = maxTotalChars - total;\n\t\tconst slice = item.text.slice(0, Math.min(maxChars, room));\n\t\tif (!slice) continue;\n\t\tcapped.push({\n\t\t\tpath: item.path,\n\t\t\ttext: slice\n\t\t});\n\t\ttotal += slice.length;\n\t}\n\treturn capped;\n}\nfunction capDiff(diff, max = STORE_DIFF_MAX) {\n\tconst text = String(diff || \"\");\n\tif (text.length <= max) return {\n\t\tdiff: text,\n\t\tdiffChars: text.length,\n\t\ttruncated: false\n\t};\n\treturn {\n\t\tdiff: `${text.slice(0, max)}\\n\\n… [diff recortado: se guardan ${max} de ${text.length} caracteres]`,\n\t\tdiffChars: text.length,\n\t\ttruncated: true\n\t};\n}\n//#endregion\n//#region ../lib/git.mjs\nfunction assertGitRepo(repo) {\n\tconst raw = String(repo || \"\").trim();\n\tif (!raw) throw new Error(\"Indicá la ruta absoluta de un repositorio git.\");\n\tif (!/[\\\\/]/.test(raw) && !/^[A-Za-z]:/.test(raw)) throw new Error(`\"${raw}\" no es una ruta. Pegá la ruta absoluta del repo (ej. C:\\\\tienda-argenta\\\\tienda-argenta-2).`);\n\tconst resolved = resolve(raw);\n\tif (!resolved || resolved === \".\") throw new Error(\"Indicá la ruta absoluta de un repositorio git.\");\n\tif (!existsSync(resolved)) throw new Error(`No existe la carpeta: ${resolved}`);\n\tif (!existsSync(join(resolved, \".git\"))) throw new Error(`No es un repositorio git (falta .git): ${resolved}`);\n\treturn resolved;\n}\n/**\n* Si `cwd` está dentro de un repo git, devuelve la raíz absoluta; si no, null.\n* Acepta subcarpetas (usa `git rev-parse --show-toplevel`).\n*/\nfunction tryResolveGitRoot(cwd) {\n\tconst raw = String(cwd || \"\").trim();\n\tif (!raw) return null;\n\tconst dir = resolve(raw);\n\tif (!existsSync(dir)) return null;\n\ttry {\n\t\tconst root = execFileSync(\"git\", [\"rev-parse\", \"--show-toplevel\"], {\n\t\t\tcwd: dir,\n\t\t\tencoding: \"utf8\",\n\t\t\twindowsHide: true,\n\t\t\tstdio: [\n\t\t\t\t\"ignore\",\n\t\t\t\t\"pipe\",\n\t\t\t\t\"ignore\"\n\t\t\t]\n\t\t}).trim();\n\t\treturn root ? resolve(root) : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\nfunction git(repo, args, { maxBuffer = 64 * 1024 * 1024 } = {}) {\n\treturn execFileSync(\"git\", args, {\n\t\tcwd: repo,\n\t\tencoding: \"utf8\",\n\t\tmaxBuffer,\n\t\twindowsHide: true\n\t});\n}\nfunction resolveRev(repo, ref) {\n\treturn git(repo, [\"rev-parse\", ref]).trim();\n}\nfunction branchTips(repo, branch, base) {\n\treturn {\n\t\tbranchSha: resolveRev(repo, branch),\n\t\tbaseSha: resolveRev(repo, base)\n\t};\n}\nfunction commitLog(repo, mergeBase, branch, limit = 25) {\n\ttry {\n\t\treturn git(repo, [\n\t\t\t\"log\",\n\t\t\t\"--oneline\",\n\t\t\t\"--no-merges\",\n\t\t\t\"-n\",\n\t\t\tString(limit),\n\t\t\t`${mergeBase}..${branch}`\n\t\t]).trim().split(\"\\n\").filter(Boolean);\n\t} catch {\n\t\treturn [];\n\t}\n}\nvar FILE_LINE_CACHE = /* @__PURE__ */ new Map();\nvar FILE_LINE_CACHE_MAX = 48;\nfunction rememberFileLines(key, lines) {\n\tif (FILE_LINE_CACHE.has(key)) FILE_LINE_CACHE.delete(key);\n\tFILE_LINE_CACHE.set(key, lines);\n\twhile (FILE_LINE_CACHE.size > FILE_LINE_CACHE_MAX) {\n\t\tconst oldest = FILE_LINE_CACHE.keys().next().value;\n\t\tFILE_LINE_CACHE.delete(oldest);\n\t}\n}\nfunction showFileLines(repo, rev, path) {\n\tconst resolved = assertGitRepo(repo);\n\tconst safeRev = String(rev || \"\").trim();\n\tconst safePath = String(path || \"\").replace(/\\\\/g, \"/\").trim();\n\tif (!safeRev || !/^[A-Za-z0-9._/\\-]+$/.test(safeRev)) throw new Error(\"Rev inválido.\");\n\tif (!safePath || safePath.startsWith(\"/\") || safePath.includes(\"..\") || safePath.includes(\"\\0\")) throw new Error(\"Ruta inválida.\");\n\tconst key = `${resolved}\\0${safeRev}\\0${safePath}`;\n\tif (FILE_LINE_CACHE.has(key)) return FILE_LINE_CACHE.get(key);\n\tlet text;\n\ttry {\n\t\ttext = git(resolved, [\"show\", `${safeRev}:${safePath}`]);\n\t} catch {\n\t\trememberFileLines(key, null);\n\t\treturn null;\n\t}\n\tif (text.includes(\"\\0\")) {\n\t\trememberFileLines(key, null);\n\t\treturn null;\n\t}\n\tconst raw = text.replace(/\\r\\n/g, \"\\n\");\n\tconst lines = raw.endsWith(\"\\n\") ? raw.slice(0, -1).split(\"\\n\") : raw.split(\"\\n\");\n\trememberFileLines(key, lines);\n\treturn lines;\n}\nfunction listBranches(repo) {\n\tconst names = git(repo, [\n\t\t\"for-each-ref\",\n\t\t\"--sort=-committerdate\",\n\t\t\"--format=%(refname:short)\",\n\t\t\"refs/heads\",\n\t\t\"refs/remotes\"\n\t]).split(\"\\n\").map((s) => s.trim()).filter(Boolean).map((name) => name.replace(/^origin\\//, \"\")).filter((name) => name !== \"HEAD\" && !name.endsWith(\"/HEAD\"));\n\tconst unique = [...new Set(names)];\n\tconst current = git(repo, [\n\t\t\"rev-parse\",\n\t\t\"--abbrev-ref\",\n\t\t\"HEAD\"\n\t]).trim();\n\tconst bases = unique.filter((n) => n === \"develop\" || n === \"main\" || n === \"master\");\n\treturn {\n\t\tbranches: unique,\n\t\tcurrent,\n\t\tdefaultBase: bases.includes(\"develop\") ? \"develop\" : bases.includes(\"main\") ? \"main\" : bases[0] || \"develop\"\n\t};\n}\n/** URL del remote (origin, o el primero disponible). Vacío si no hay. */\nfunction getRemoteUrl(repo, preferred = \"origin\") {\n\ttry {\n\t\tconst url = git(repo, [\n\t\t\t\"remote\",\n\t\t\t\"get-url\",\n\t\t\tpreferred\n\t\t]).trim();\n\t\tif (url) return url;\n\t} catch {}\n\ttry {\n\t\tconst remotes = git(repo, [\"remote\"]).split(\"\\n\").map((s) => s.trim()).filter(Boolean);\n\t\tif (!remotes.length) return \"\";\n\t\treturn git(repo, [\n\t\t\t\"remote\",\n\t\t\t\"get-url\",\n\t\t\tremotes[0]\n\t\t]).trim();\n\t} catch {\n\t\treturn \"\";\n\t}\n}\n//#endregion\n//#region ../lib/review-dir.mjs\n/**\n* Carpeta `.diff-review/` en la raíz del repo revisado: el JSON del reporte, el diff con el que se hizo y la sesión\n* del agente, todo con el mismo nombre base (`diff-rev_<branchTip>_<baseTip>`). Se ignora sola con su propio\n* `.gitignore`, así no deja cambios en archivos trackeados del repo.\n*\n* Los JSON viejos en la raíz del repo se siguen encontrando (`locateReviewFile`).\n*/\n/** @typedef {{ agentId: string, sessionId: string, model?: string, updatedAt?: string }} SessionRef */\nfunction reviewDir(repoRoot) {\n\treturn join(repoRoot, OUTPUT_DIR);\n}\n/** Crea `.diff-review/` (con su `.gitignore`) si no existe. */\nfunction ensureReviewDir(repoRoot) {\n\tconst dir = reviewDir(repoRoot);\n\tmkdirSync(dir, { recursive: true });\n\tconst ignore = join(dir, \".gitignore\");\n\tif (!existsSync(ignore)) writeFileSync(ignore, \"# Generado por diff-review: nada de esta carpeta va al repo.\\n*\\n\");\n\treturn dir;\n}\n/** `diff-rev_a_b.json` → `{ json, diff, session }` dentro de `.diff-review/`. */\nfunction companionPaths(repoRoot, filename) {\n\tconst name = basename(String(filename || \"\"));\n\tconst stem = name.replace(/\\.json$/i, \"\");\n\tconst dir = reviewDir(repoRoot);\n\treturn {\n\t\tjson: join(dir, name),\n\t\tdiff: join(dir, `${stem}.diff`),\n\t\tsession: join(dir, `${stem}.session.json`)\n\t};\n}\n/** Dónde está el JSON de la review: `.diff-review/` primero y, si no, la raíz del repo (formato viejo). */\nfunction locateReviewFile(repoRoot, filename) {\n\tconst name = basename(String(filename || \"\"));\n\tif (!name) return null;\n\tfor (const candidate of [companionPaths(repoRoot, name).json, join(repoRoot, name)]) try {\n\t\tif (statSync(candidate).isFile()) return candidate;\n\t} catch {}\n\treturn null;\n}\n/**\n* Guarda `git diff base...branch` junto al JSON (una vez por par de commits: el nombre ya trae los tips).\n* @returns {string | null} el path, o null si git falló\n*/\nfunction writeDiffCache(repoRoot, filename, { branch, base }) {\n\tconst { diff } = companionPaths(repoRoot, filename);\n\tif (existsSync(diff)) return diff;\n\ttry {\n\t\tconst text = git(repoRoot, [\"diff\", `${base}...${branch}`]);\n\t\tensureReviewDir(repoRoot);\n\t\twriteFileSync(diff, text);\n\t\treturn diff;\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** Guarda un diff ya armado (p. ej. el que muestra la web), pisando el anterior. */\nfunction writeDiffText(repoRoot, filename, text) {\n\tensureReviewDir(repoRoot);\n\tconst { diff } = companionPaths(repoRoot, filename);\n\twriteFileSync(diff, String(text ?? \"\"));\n\treturn diff;\n}\n/** @returns {string | null} texto del companion `.diff`, o null si no existe / no se pudo leer */\nfunction readDiffCache(repoRoot, filename) {\n\tconst { diff } = companionPaths(repoRoot, filename);\n\ttry {\n\t\tif (!existsSync(diff)) return null;\n\t\treturn readFileSync(diff, \"utf8\");\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** @param {SessionRef} ref */\nfunction writeSessionRef(repoRoot, filename, ref) {\n\tensureReviewDir(repoRoot);\n\tconst full = {\n\t\t...ref,\n\t\tupdatedAt: (/* @__PURE__ */ new Date()).toISOString()\n\t};\n\twriteFileSync(companionPaths(repoRoot, filename).session, `${JSON.stringify(full, null, 2)}\\n`);\n\treturn full;\n}\n//#endregion\n//#region ../lib/extract.mjs\n/**\n* Parte un `git diff` multi-archivo (texto de `writeDiffCache`) en entradas por path.\n* @param {string} text\n* @returns {Array<{ path: string, oldPath?: string, changeType: string, hunkDiff: string }>}\n*/\nfunction parseGitDiffFiles(text) {\n\tconst raw = String(text || \"\").replace(/\\r\\n/g, \"\\n\");\n\tif (!raw.trim()) return [];\n\tconst parts = raw.split(/^diff --git /m);\n\t/** @type {Array<{ path: string, oldPath?: string, changeType: string, hunkDiff: string }>} */\n\tconst out = [];\n\tfor (const part of parts) {\n\t\tconst chunk = part.trimStart();\n\t\tif (!chunk) continue;\n\t\tconst firstNl = chunk.indexOf(\"\\n\");\n\t\tconst paths = (firstNl === -1 ? chunk : chunk.slice(0, firstNl)).trim().match(/^a\\/(.+) b\\/(.+)$/);\n\t\tif (!paths) continue;\n\t\tlet oldPath = paths[1];\n\t\tlet path = paths[2];\n\t\tconst body = firstNl === -1 ? \"\" : chunk.slice(firstNl + 1);\n\t\tlet changeType = \"modified\";\n\t\tif (/^new file mode /m.test(body) || /^--- \\/dev\\/null/m.test(body)) changeType = \"added\";\n\t\telse if (/^deleted file mode /m.test(body) || /^\\+\\+\\+ \\/dev\\/null/m.test(body)) changeType = \"deleted\";\n\t\telse if (/^rename from /m.test(body) || /^rename to /m.test(body)) {\n\t\t\tchangeType = \"renamed\";\n\t\t\tconst from = body.match(/^rename from (.+)$/m);\n\t\t\tconst to = body.match(/^rename to (.+)$/m);\n\t\t\tif (from) oldPath = from[1].trim();\n\t\t\tif (to) path = to[1].trim();\n\t\t}\n\t\tlet hunkDiff = \"\";\n\t\tconst idx = `\\n${body}`.indexOf(\"\\n@@\");\n\t\tif (idx !== -1) hunkDiff = `\\n${body}`.slice(idx + 1);\n\t\telse if (/^Binary files /m.test(body)) hunkDiff = \"\";\n\t\tout.push({\n\t\t\tpath,\n\t\t\toldPath: oldPath !== path ? oldPath : void 0,\n\t\t\tchangeType,\n\t\t\thunkDiff\n\t\t});\n\t}\n\treturn out;\n}\n/**\n* Stats baratos desde el texto del diff (sin volver a llamar a git).\n* @param {string} text\n*/\nfunction statsFromDiffText(text) {\n\tlet insertions = 0;\n\tlet deletions = 0;\n\tfor (const line of String(text || \"\").split(\"\\n\")) {\n\t\tif (!line.length) continue;\n\t\tif (line.startsWith(\"+++\") || line.startsWith(\"---\") || line.startsWith(\"diff \") || line.startsWith(\"index \")) continue;\n\t\tif (line.startsWith(\"+\")) insertions += 1;\n\t\telse if (line.startsWith(\"-\")) deletions += 1;\n\t}\n\treturn {\n\t\tinsertions,\n\t\tdeletions\n\t};\n}\n/**\n* Tips / merge-base si git responde; si no, strings vacíos (el contenido del diff ya viene del cache).\n*/\nfunction tryTips(repo, branch, base) {\n\ttry {\n\t\treturn {\n\t\t\tmergeBase: git(repo, [\n\t\t\t\t\"merge-base\",\n\t\t\t\tbase,\n\t\t\t\tbranch\n\t\t\t]).trim(),\n\t\t\tbranchSha: git(repo, [\"rev-parse\", branch]).trim(),\n\t\t\tbaseSha: git(repo, [\"rev-parse\", base]).trim()\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tmergeBase: \"\",\n\t\t\tbranchSha: \"\",\n\t\t\tbaseSha: \"\"\n\t\t};\n\t}\n}\n/**\n* Arma el mismo shape que `extractBranchDiff` a partir de un texto de `git diff` ya cacheado.\n* No vuelve a correr `git diff`.\n*/\nfunction skeletonFromCachedDiff(repo, branch, base, cachedDiff) {\n\tconst config = loadReviewConfig(repo);\n\tconst tips = tryTips(repo, branch, base);\n\tconst parsed = parseGitDiffFiles(cachedDiff);\n\tconst ignored = [];\n\tconst included = [];\n\tfor (const f of parsed) if (isIgnored(f.path, config.ignore)) ignored.push(f.path);\n\telse included.push(f);\n\tconst files = included.map((f) => {\n\t\tconst capped = capDiff(f.hunkDiff);\n\t\treturn {\n\t\t\tpath: f.path,\n\t\t\toldPath: f.oldPath || void 0,\n\t\t\tchangeType: f.changeType,\n\t\t\tdiff: capped.diff,\n\t\t\tdiffChars: capped.diffChars,\n\t\t\ttruncated: capped.truncated,\n\t\t\tmodelChars: capped.diff.length,\n\t\t\tgroup: \"\"\n\t\t};\n\t});\n\tconst { insertions, deletions } = statsFromDiffText(cachedDiff);\n\tlet commits = [];\n\tif (tips.mergeBase) try {\n\t\tcommits = commitLog(repo, tips.mergeBase, branch);\n\t} catch {\n\t\tcommits = [];\n\t}\n\treturn {\n\t\tversion: 2,\n\t\trepo,\n\t\tbranch,\n\t\tbaseBranch: base,\n\t\tmergeBase: tips.mergeBase,\n\t\tbranchSha: tips.branchSha,\n\t\tbaseSha: tips.baseSha,\n\t\tgeneratedAt: (/* @__PURE__ */ new Date()).toISOString(),\n\t\tintent: \"\",\n\t\tstats: {\n\t\t\tfilesChanged: files.length,\n\t\t\tfilesIgnored: ignored.length,\n\t\t\tfilesTruncated: files.filter((f) => f.truncated).length,\n\t\t\tinsertions,\n\t\t\tdeletions\n\t\t},\n\t\tcontext: {\n\t\t\tcommits,\n\t\t\trules: config.rules,\n\t\t\trulesFile: config.rulesFile,\n\t\t\tignored: ignored.slice(0, 40),\n\t\t\ttestsTouched: files.filter((f) => isTestPath(f.path)).map((f) => f.path),\n\t\t\ttestsMissing: files.filter((f) => !isTestPath(f.path)).length,\n\t\t\tguidelines: collectGuidelines(repo, files.map((f) => f.path), {\n\t\t\t\trulesFile: config.rulesFile,\n\t\t\t\tskipNames: config.rules.trim() ? [config.rulesFile] : [],\n\t\t\t\tmaxDepth: 1,\n\t\t\t\tmaxChars: 8e3,\n\t\t\t\tmaxTotalChars: 12e3\n\t\t\t})\n\t\t},\n\t\tfiles,\n\t\tgroups: [],\n\t\tblocks: [],\n\t\tfindings: [],\n\t\tskipped: []\n\t};\n}\n/**\n* @param {{\n* repo: string,\n* branch: string,\n* base?: string,\n* cachedDiff?: string | null,\n* }} opts\n* `cachedDiff`: texto de `git diff base...branch` ya materializado; si viene, no se vuelve a calcular el diff.\n*/\nfunction extractBranchDiff({ repo, branch, base = \"develop\", cachedDiff = null } = {}) {\n\tif (!branch) throw new Error(\"Falta el branch a revisar.\");\n\tif (typeof cachedDiff === \"string\" && cachedDiff.length) return skeletonFromCachedDiff(repo, branch, base, cachedDiff);\n\tconst config = loadReviewConfig(repo);\n\tconst mergeBase = git(repo, [\n\t\t\"merge-base\",\n\t\tbase,\n\t\tbranch\n\t]).trim();\n\tconst branchSha = git(repo, [\"rev-parse\", branch]).trim();\n\tconst baseSha = git(repo, [\"rev-parse\", base]).trim();\n\tconst nameStatus = git(repo, [\n\t\t\"diff\",\n\t\tmergeBase,\n\t\tbranch,\n\t\t\"--name-status\"\n\t]).trim().split(\"\\n\").filter(Boolean).map((line) => {\n\t\tconst [status, ...rest] = line.split(\"\t\");\n\t\tconst path = rest[rest.length - 1];\n\t\tconst oldPath = rest.length > 1 ? rest[0] : null;\n\t\tlet changeType = \"modified\";\n\t\tif (status.startsWith(\"A\")) changeType = \"added\";\n\t\telse if (status.startsWith(\"D\")) changeType = \"deleted\";\n\t\telse if (status.startsWith(\"R\")) changeType = \"renamed\";\n\t\treturn {\n\t\t\tpath,\n\t\t\toldPath,\n\t\t\tchangeType\n\t\t};\n\t});\n\tconst ignored = [];\n\tconst included = [];\n\tfor (const f of nameStatus) if (isIgnored(f.path, config.ignore)) ignored.push(f.path);\n\telse included.push(f);\n\tconst files = included.map((f) => {\n\t\tlet raw = \"\";\n\t\ttry {\n\t\t\traw = git(repo, [\n\t\t\t\t\"diff\",\n\t\t\t\tmergeBase,\n\t\t\t\tbranch,\n\t\t\t\t\"--\",\n\t\t\t\tf.path\n\t\t\t]);\n\t\t\tconst idx = raw.indexOf(\"\\n@@\");\n\t\t\tif (idx !== -1) raw = raw.slice(idx + 1);\n\t\t} catch {\n\t\t\traw = \"\";\n\t\t}\n\t\tconst capped = capDiff(raw);\n\t\treturn {\n\t\t\tpath: f.path,\n\t\t\toldPath: f.oldPath || void 0,\n\t\t\tchangeType: f.changeType,\n\t\t\tdiff: capped.diff,\n\t\t\tdiffChars: capped.diffChars,\n\t\t\ttruncated: capped.truncated,\n\t\t\tmodelChars: capped.diff.length,\n\t\t\tgroup: \"\"\n\t\t};\n\t});\n\tconst shortstat = git(repo, [\n\t\t\"diff\",\n\t\tmergeBase,\n\t\tbranch,\n\t\t\"--shortstat\"\n\t]).trim();\n\tconst insMatch = shortstat.match(/(\\d+) insertion/);\n\tconst delMatch = shortstat.match(/(\\d+) deletion/);\n\treturn {\n\t\tversion: 2,\n\t\trepo,\n\t\tbranch,\n\t\tbaseBranch: base,\n\t\tmergeBase,\n\t\tbranchSha,\n\t\tbaseSha,\n\t\tgeneratedAt: (/* @__PURE__ */ new Date()).toISOString(),\n\t\tintent: \"\",\n\t\tstats: {\n\t\t\tfilesChanged: files.length,\n\t\t\tfilesIgnored: ignored.length,\n\t\t\tfilesTruncated: files.filter((f) => f.truncated).length,\n\t\t\tinsertions: insMatch ? Number(insMatch[1]) : 0,\n\t\t\tdeletions: delMatch ? Number(delMatch[1]) : 0\n\t\t},\n\t\tcontext: {\n\t\t\tcommits: commitLog(repo, mergeBase, branch),\n\t\t\trules: config.rules,\n\t\t\trulesFile: config.rulesFile,\n\t\t\tignored: ignored.slice(0, 40),\n\t\t\ttestsTouched: files.filter((f) => isTestPath(f.path)).map((f) => f.path),\n\t\t\ttestsMissing: files.filter((f) => !isTestPath(f.path)).length,\n\t\t\tguidelines: collectGuidelines(repo, files.map((f) => f.path), {\n\t\t\t\trulesFile: config.rulesFile,\n\t\t\t\tskipNames: config.rules.trim() ? [config.rulesFile] : [],\n\t\t\t\tmaxDepth: 1,\n\t\t\t\tmaxChars: 8e3,\n\t\t\t\tmaxTotalChars: 12e3\n\t\t\t})\n\t\t},\n\t\tfiles,\n\t\tgroups: [],\n\t\tblocks: [],\n\t\tfindings: [],\n\t\tskipped: []\n\t};\n}\n/**\n* Preferí el companion `.diff` en `.diff-review/` si existe; si no, `git diff` vía `extractBranchDiff`.\n* @param {{ repo: string, branch: string, base?: string, filename?: string }} opts\n*/\nfunction loadBranchDiff({ repo, branch, base = \"develop\", filename } = {}) {\n\tconst name = String(filename || \"\").trim();\n\tif (name) {\n\t\tconst cached = readDiffCache(repo, name);\n\t\tif (cached != null && cached.length) return extractBranchDiff({\n\t\t\trepo,\n\t\t\tbranch,\n\t\t\tbase,\n\t\t\tcachedDiff: cached\n\t\t});\n\t}\n\treturn extractBranchDiff({\n\t\trepo,\n\t\tbranch,\n\t\tbase\n\t});\n}\n//#endregion\n//#region ../lib/json-payload.mjs\nfunction tryParseJson(s) {\n\ttry {\n\t\treturn JSON.parse(s);\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** Extrae un objeto JSON del texto del modelo (fences, prosa alrededor, envelope). */\nfunction decodePayload(text) {\n\tconst raw = String(text || \"\").trim();\n\tif (!raw) throw new Error(\"Respuesta vacía.\");\n\tconst fence = raw.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n\tif (fence) {\n\t\tconst parsed = tryParseJson(fence[1].trim());\n\t\tif (parsed && typeof parsed === \"object\") return parsed;\n\t}\n\tconst direct = tryParseJson(raw);\n\tif (direct && typeof direct === \"object\") return direct;\n\tconst start = raw.indexOf(\"{\");\n\tconst end = raw.lastIndexOf(\"}\");\n\tif (start >= 0 && end > start) {\n\t\tconst parsed = tryParseJson(raw.slice(start, end + 1));\n\t\tif (parsed && typeof parsed === \"object\") return parsed;\n\t}\n\tthrow new Error(\"No se pudo interpretar la respuesta como JSON.\");\n}\n//#endregion\n//#region ../lib/validate.mjs\nvar GROUP_KINDS = [\n\t\"feat\",\n\t\"fix\",\n\t\"refactor\",\n\t\"perf\",\n\t\"test\",\n\t\"chore\",\n\t\"docs\",\n\t\"infra\"\n];\nvar BLOCK_OPS = [\n\t\"add\",\n\t\"mod\",\n\t\"del\",\n\t\"rename\"\n];\nvar WHY_SOURCES = [\n\t\"code\",\n\t\"commit\",\n\t\"pr\",\n\t\"issue\",\n\t\"inferred\"\n];\nvar FINDING_CLASSES = [\"risk\", \"quality\"];\nvar FINDING_SEVERITIES = [\n\t\"high\",\n\t\"med\",\n\t\"low\",\n\t\"nit\"\n];\nvar FINDING_KINDS = [\n\t\"bug\",\n\t\"race\",\n\t\"auth\",\n\t\"security\",\n\t\"api-break\",\n\t\"missing-test\",\n\t\"perf\",\n\t\"maintainability\",\n\t\"docs\",\n\t\"other\"\n];\nvar SKIP_REASONS = [\n\t\"generated\",\n\t\"lockfile\",\n\t\"format\",\n\t\"vendored\",\n\t\"binary\",\n\t\"trivial\",\n\t\"ignored\"\n];\n/** Lo que tiene que devolver el modelo en un turno. El resto lo agrega el pipeline. */\nvar REVIEW_SCHEMA = {\n\t$id: \"diff-review\",\n\ttype: \"object\",\n\trequired: [\n\t\t\"meta\",\n\t\t\"intent\",\n\t\t\"groups\",\n\t\t\"blocks\"\n\t],\n\tadditionalProperties: true,\n\tproperties: {\n\t\tmeta: {\n\t\t\ttype: \"object\",\n\t\t\trequired: [\"agent\", \"model\"],\n\t\t\tadditionalProperties: true,\n\t\t\tproperties: {\n\t\t\t\tagent: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tminLength: 1\n\t\t\t\t},\n\t\t\t\tmodel: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tminLength: 1\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tintent: {\n\t\t\ttype: \"string\",\n\t\t\tminLength: 40\n\t\t},\n\t\tgroups: {\n\t\t\ttype: \"array\",\n\t\t\tminItems: 1,\n\t\t\titems: {\n\t\t\t\ttype: \"object\",\n\t\t\t\trequired: [\n\t\t\t\t\t\"id\",\n\t\t\t\t\t\"kind\",\n\t\t\t\t\t\"title\",\n\t\t\t\t\t\"intent\"\n\t\t\t\t],\n\t\t\t\tadditionalProperties: true,\n\t\t\t\tproperties: {\n\t\t\t\t\tid: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tkind: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: GROUP_KINDS\n\t\t\t\t\t},\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tintent: { type: \"string\" }\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tblocks: {\n\t\t\ttype: \"array\",\n\t\t\tminItems: 1,\n\t\t\titems: {\n\t\t\t\ttype: \"object\",\n\t\t\t\trequired: [\n\t\t\t\t\t\"id\",\n\t\t\t\t\t\"group\",\n\t\t\t\t\t\"file\",\n\t\t\t\t\t\"lines\",\n\t\t\t\t\t\"op\",\n\t\t\t\t\t\"what\"\n\t\t\t\t],\n\t\t\t\tadditionalProperties: true,\n\t\t\t\tproperties: {\n\t\t\t\t\tid: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tgroup: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tfile: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tlines: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\top: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: BLOCK_OPS\n\t\t\t\t\t},\n\t\t\t\t\twhat: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\twhy: { type: \"string\" },\n\t\t\t\t\tsource: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: WHY_SOURCES\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tfindings: {\n\t\t\ttype: \"array\",\n\t\t\titems: {\n\t\t\t\ttype: \"object\",\n\t\t\t\trequired: [\n\t\t\t\t\t\"class\",\n\t\t\t\t\t\"severity\",\n\t\t\t\t\t\"kind\",\n\t\t\t\t\t\"file\",\n\t\t\t\t\t\"what\"\n\t\t\t\t],\n\t\t\t\tadditionalProperties: true,\n\t\t\t\tproperties: {\n\t\t\t\t\tid: { type: \"string\" },\n\t\t\t\t\tclass: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: FINDING_CLASSES\n\t\t\t\t\t},\n\t\t\t\t\tseverity: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: FINDING_SEVERITIES\n\t\t\t\t\t},\n\t\t\t\t\tblocking: { type: \"boolean\" },\n\t\t\t\t\tkind: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: FINDING_KINDS\n\t\t\t\t\t},\n\t\t\t\t\tfile: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tline: { type: [\"integer\", \"null\"] },\n\t\t\t\t\tblock: { type: \"string\" },\n\t\t\t\t\twhat: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\tfix: { type: \"string\" }\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tskipped: {\n\t\t\ttype: \"array\",\n\t\t\titems: {\n\t\t\t\ttype: \"object\",\n\t\t\t\trequired: [\"file\", \"reason\"],\n\t\t\t\tadditionalProperties: true,\n\t\t\t\tproperties: {\n\t\t\t\t\tfile: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tminLength: 1\n\t\t\t\t\t},\n\t\t\t\t\treason: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tenum: SKIP_REASONS\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\nfunction typeOf(value) {\n\tif (value === null) return \"null\";\n\tif (Array.isArray(value)) return \"array\";\n\tif (typeof value === \"number\" && Number.isInteger(value)) return \"integer\";\n\treturn typeof value;\n}\nfunction typeMatches(expected, actual) {\n\tconst options = Array.isArray(expected) ? expected : [expected];\n\tif (options.includes(actual)) return true;\n\treturn options.includes(\"number\") && actual === \"integer\";\n}\n/** Minimal JSON Schema checker (type, required, properties, items, enum, minLength, minItems). */\nfunction validateAgainst(schema, data, path = \"$\") {\n\tconst errors = [];\n\tif (!schema || typeof schema !== \"object\") return errors;\n\tconst actual = typeOf(data);\n\tif (schema.type && !typeMatches(schema.type, actual)) {\n\t\terrors.push(`${path}: se esperaba ${[].concat(schema.type).join(\"|\")}, llegó ${actual}`);\n\t\treturn errors;\n\t}\n\tif (actual === \"string\" && schema.minLength && data.length < schema.minLength) errors.push(`${path}: texto demasiado corto (mínimo ${schema.minLength})`);\n\tif (schema.enum && (actual === \"string\" || actual === \"number\") && !schema.enum.includes(data)) errors.push(`${path}: valor no permitido (${data}); usá uno de: ${schema.enum.join(\", \")}`);\n\tif (actual === \"array\") {\n\t\tif (schema.minItems && data.length < schema.minItems) errors.push(`${path}: se esperaban al menos ${schema.minItems} ítems`);\n\t\tif (schema.items) data.forEach((item, i) => errors.push(...validateAgainst(schema.items, item, `${path}[${i}]`)));\n\t}\n\tif (actual === \"object\") {\n\t\tfor (const key of schema.required || []) if (data[key] === void 0) errors.push(`${path}: falta ${key}`);\n\t\tfor (const [key, child] of Object.entries(schema.properties || {})) {\n\t\t\tif (data[key] === void 0) continue;\n\t\t\terrors.push(...validateAgainst(child, data[key], `${path}.${key}`));\n\t\t}\n\t}\n\treturn errors;\n}\n/**\n* Integridad referencial y cobertura. El schema solo mira formas; esto mira que\n* los ids cierren y que no haya quedado un archivo sin explicar, que es el\n* error que de verdad arruina la review.\n*/\nfunction reviewIssues(payload, knownPaths = []) {\n\tconst errors = [];\n\tconst meta = payload?.meta && typeof payload.meta === \"object\" ? payload.meta : {};\n\tconst agentName = typeof meta.agent === \"string\" ? meta.agent.trim() : \"\";\n\tconst modelId = typeof meta.model === \"string\" ? meta.model.trim() : \"\";\n\tif (!agentName || agentName.startsWith(\"<\")) errors.push(\"meta.agent es obligatorio: nombre del producto (Claude Code, Cursor, Codex, …), sin placeholder\");\n\tif (!modelId || modelId.startsWith(\"<\")) errors.push(\"meta.model es obligatorio: id exacto del modelo, sin placeholder\");\n\tconst groups = Array.isArray(payload?.groups) ? payload.groups : [];\n\tconst blocks = Array.isArray(payload?.blocks) ? payload.blocks : [];\n\tconst findings = Array.isArray(payload?.findings) ? payload.findings : [];\n\tconst skipped = Array.isArray(payload?.skipped) ? payload.skipped : [];\n\tconst groupIds = new Set(groups.map((g) => g.id));\n\tconst blockIds = new Set(blocks.map((b) => b.id));\n\tconst known = new Set(knownPaths);\n\tconst dupGroups = groups.length - groupIds.size;\n\tif (dupGroups > 0) errors.push(`hay ${dupGroups} id de tema repetido`);\n\tconst dupBlocks = blocks.length - blockIds.size;\n\tif (dupBlocks > 0) errors.push(`hay ${dupBlocks} id de bloque repetido`);\n\tfor (const block of blocks) {\n\t\tif (!groupIds.has(block.group)) errors.push(`el bloque ${block.id} apunta al tema inexistente ${block.group}`);\n\t\tif (known.size && !known.has(block.file)) errors.push(`el bloque ${block.id} apunta a un archivo que no está en el diff: ${block.file}`);\n\t}\n\tconst usedGroups = new Set(blocks.map((b) => b.group));\n\tfor (const group of groups) if (!usedGroups.has(group.id)) errors.push(`el tema ${group.id} no tiene ningún bloque`);\n\tfor (const finding of findings) {\n\t\tif (finding.block && !blockIds.has(finding.block)) errors.push(`el hallazgo ${finding.id || finding.what} apunta al bloque inexistente ${finding.block}`);\n\t\tif (known.size && !known.has(finding.file)) errors.push(`el hallazgo ${finding.id || finding.what} apunta a un archivo fuera del diff: ${finding.file}`);\n\t}\n\tif (known.size) {\n\t\tconst covered = /* @__PURE__ */ new Set([...blocks.map((b) => b.file), ...skipped.map((s) => s.file)]);\n\t\tconst missing = [...known].filter((path) => !covered.has(path));\n\t\tif (missing.length) errors.push(`quedaron ${missing.length} archivo(s) sin bloque ni skipped: ${missing.slice(0, 8).join(\", \")}`);\n\t}\n\treturn errors;\n}\n//#endregion\nexport { loadReviewConfig as A, branchTips as C, showFileLines as D, listBranches as E, fingerprint as F, isOutputFilename as M, makeOutputFilename as N, tryResolveGitRoot as O, outputRelPath as P, assertGitRepo as S, git as T, readDiffCache as _, GROUP_KINDS as a, writeDiffText as b, WHY_SOURCES as c, decodePayload as d, extractBranchDiff as f, locateReviewFile as g, ensureReviewDir as h, FINDING_SEVERITIES as i, OUTPUT_DIR as j, globMatch as k, reviewIssues as l, companionPaths as m, FINDING_CLASSES as n, REVIEW_SCHEMA as o, loadBranchDiff as p, FINDING_KINDS as r, SKIP_REASONS as s, BLOCK_OPS as t, validateAgainst as u, reviewDir as v, getRemoteUrl as w, writeSessionRef as x, writeDiffCache as y };\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.live.svelte-18urbyr{background:radial-gradient(900px 420px at 8% -8%, color-mix(in srgb, var(--accent) 10%, transparent), transparent 70%), var(--bg);flex-direction:column;flex:1;min-height:0;display:flex}.bar.svelte-18urbyr{border-bottom:1px solid var(--border);background:color-mix(in srgb, var(--bg-elev) 90%, transparent);justify-content:space-between;align-items:center;gap:12px;padding:12px 20px;display:flex}.brand.svelte-18urbyr{align-items:center;gap:10px;min-width:0;font-size:14px;display:flex}.dot.svelte-18urbyr{background:var(--accent);width:8px;height:8px;box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent);border-radius:50%;flex:none}.pill.svelte-18urbyr{letter-spacing:.02em;border:1px solid var(--border);color:var(--text-dim);background:var(--bg-card);text-transform:lowercase;border-radius:0;padding:3px 9px;font-size:11px;font-weight:500}.pill.busy.svelte-18urbyr{border-color:color-mix(in srgb, var(--accent) 45%, var(--border));color:var(--accent);background:var(--accent-soft)}.pill.error.svelte-18urbyr{border-color:var(--danger-border,var(--danger));color:var(--danger);background:var(--danger-bg,transparent)}.pill.gone.svelte-18urbyr{color:var(--text-faint)}.actions.svelte-18urbyr{flex:none;align-items:center;gap:8px;display:flex}.ghost.svelte-18urbyr{border:1px solid var(--border);color:var(--text);font:inherit;cursor:pointer;background:0 0;padding:6px 11px;font-size:13px}.ghost.svelte-18urbyr:hover{border-color:var(--accent)}.body.svelte-18urbyr{flex:1;grid-template-columns:minmax(280px,320px) 1fr;gap:20px;min-height:0;padding:20px 24px 24px;display:grid}.card.svelte-18urbyr{border:1px solid var(--border);background:var(--bg-elev);border-radius:0;align-self:start;padding:16px 16px 14px}.fields.svelte-18urbyr{flex-direction:column;gap:14px;margin:0;display:flex}.fields.svelte-18urbyr dt:where(.svelte-18urbyr){text-transform:uppercase;letter-spacing:.04em;color:var(--text-faint);margin:0 0 3px;font-size:11px}.fields.svelte-18urbyr dd:where(.svelte-18urbyr){font-size:13px;font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;color:var(--text);margin:0;overflow:hidden}.branch.svelte-18urbyr{color:var(--accent);font-weight:600}.arrow.svelte-18urbyr{color:var(--text-faint);margin:0 2px}.card-note.svelte-18urbyr{border-top:1px solid var(--border-soft,var(--border));color:var(--text-faint);margin:16px 0 0;padding-top:12px;font-size:12.5px;line-height:1.4}.stage.svelte-18urbyr{border:1px solid var(--border);background:var(--bg-elev);border-radius:0;flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}.center.svelte-18urbyr{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:40px 24px;display:flex}.center.fail.svelte-18urbyr .title:where(.svelte-18urbyr){color:var(--danger)}.auth-actions.svelte-18urbyr{flex-wrap:wrap;justify-content:center;gap:8px;margin-top:12px;display:flex}.primary.svelte-18urbyr{border:1px solid color-mix(in srgb, var(--accent) 55%, var(--border));background:var(--accent-soft);color:var(--accent);font:inherit;cursor:pointer;border-radius:0;padding:7px 14px;font-size:13px;font-weight:600}.primary.svelte-18urbyr:hover:not(:disabled){border-color:var(--accent)}.primary.svelte-18urbyr:disabled{opacity:.6;cursor:default}.auth-note.svelte-18urbyr{max-width:28rem;color:var(--text-dim);margin:10px 0 0;font-size:13px}.auth-err.svelte-18urbyr{max-width:28rem;color:var(--danger);margin:8px 0 0;font-size:13px}.spinner.svelte-18urbyr{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:34px;height:34px;margin-bottom:6px;animation:.8s linear infinite svelte-18urbyr-spin}@keyframes svelte-18urbyr-spin{to{transform:rotate(360deg)}}.title.svelte-18urbyr{margin:0;font-size:17px;font-weight:600}.detail.svelte-18urbyr{color:var(--text-dim);max-width:28rem;margin:0;font-size:14px}.hint.svelte-18urbyr{max-width:32rem;color:var(--text-faint);margin:6px 0 0;font-size:13px}.stage-header.svelte-18urbyr{border-bottom:1px solid var(--border);border-radius:0;flex:none;align-items:center;gap:8px;min-width:0;padding:10px 14px;display:flex}.stage-header.svelte-18urbyr strong:where(.svelte-18urbyr){font-size:13.5px;font-weight:650}.stage-header.svelte-18urbyr small:where(.svelte-18urbyr){font-family:var(--mono);color:var(--text-faint);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:11.5px;overflow:hidden}.log-wrap.svelte-18urbyr{border-radius:0;flex-direction:column;flex:1;gap:10px;min-height:0;padding:12px 14px;display:flex}.log-wrap.svelte-18urbyr .log{flex:1;min-height:0}.stage-footer.svelte-18urbyr{border-top:1px solid var(--border);border-radius:0;flex:none;align-items:center;gap:10px;margin-top:auto;padding-top:10px;display:flex}.footer-spacer.svelte-18urbyr{flex:1}.launch-banner.svelte-18urbyr{border:1px solid var(--border);background:color-mix(in srgb, var(--accent-soft) 70%, var(--bg-card));border-radius:0;align-items:flex-start;gap:12px;padding:10px 12px;display:flex}.launch-banner.svelte-18urbyr .title:where(.svelte-18urbyr){font-size:14px}.launch-banner.svelte-18urbyr .detail:where(.svelte-18urbyr){margin-top:2px;font-size:12.5px}.spinner.sm.svelte-18urbyr{flex:none;width:18px;height:18px;margin:2px 0 0}@media (width<=800px){.body.svelte-18urbyr{grid-template-rows:auto 1fr;grid-template-columns:1fr;gap:14px;padding:16px}.card.svelte-18urbyr{align-self:stretch}.stage.svelte-18urbyr{min-height:280px}}@media (width<=480px){.bar.svelte-18urbyr{flex-wrap:wrap;padding:10px 14px}.pill.svelte-18urbyr{font-size:10px}}.page.svelte-1uha8ag{flex-direction:column;min-height:100vh;display:flex}.page.live.svelte-1uha8ag{height:100vh;min-height:100vh;overflow:hidden}.diff-spinner.svelte-1uha8ag{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:28px;height:28px;margin:0 auto;animation:.7s linear infinite svelte-1uha8ag-diff-spin}.cli-wait.svelte-1uha8ag{text-align:center;background:var(--bg);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;min-height:0;padding:32px 24px;display:flex}.cli-wait-title.svelte-1uha8ag{color:var(--text);margin:0;font-size:15px}.cli-wait-detail.svelte-1uha8ag{color:var(--text-faint);margin:0;font-size:13px}.cli-wait.svelte-1uha8ag .ghost:where(.svelte-1uha8ag){border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;margin-top:8px;padding:6px 12px;font-size:13px}@keyframes svelte-1uha8ag-diff-spin{to{transform:rotate(360deg)}}.toast.svelte-1uha8ag{z-index:50;border:1px solid var(--border);background:var(--bg-card);color:var(--text);padding:10px 16px;font-size:13px;position:fixed;top:16px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #00000029}.topbar.svelte-1uha8ag{border-bottom:1px solid var(--border);background:var(--header-bg);z-index:5;justify-content:space-between;align-items:center;gap:12px;padding:16px 28px;display:flex;position:sticky;top:0}.brand.svelte-1uha8ag{color:var(--text);align-items:center;gap:10px;text-decoration:none;display:flex}.brand-dot.svelte-1uha8ag{background:linear-gradient(135deg,#6ea8fe,#c9a5ff);border-radius:50%;flex-shrink:0;width:9px;height:9px;box-shadow:0 0 12px #6ea8fe88}.title-block.svelte-1uha8ag{text-align:left;flex-direction:column;line-height:1.25;display:flex}.title-block.svelte-1uha8ag span:where(.svelte-1uha8ag):first-child{font-size:15px;font-weight:700}.title-block.svelte-1uha8ag small:where(.svelte-1uha8ag){color:var(--text-faint);font-size:11.5px;font-weight:400}.workspace.svelte-1uha8ag{flex:1;grid-template-columns:minmax(0,1fr) minmax(300px,380px);align-items:start;gap:28px;width:100%;max-width:1280px;margin:0 auto;padding:22px 28px 40px;display:grid;overflow:auto}.setup.svelte-1uha8ag{min-width:0}h2.svelte-1uha8ag{letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint);margin:0 0 4px;font-size:13px;font-weight:600}.result-head.svelte-1uha8ag{margin-top:24px}.section-head.svelte-1uha8ag{justify-content:space-between;align-items:baseline;margin-top:22px;display:flex}.hint-text.svelte-1uha8ag{color:var(--text-dim);margin:0 0 12px;font-size:12.5px;line-height:1.5}.hint-text.svelte-1uha8ag code:where(.svelte-1uha8ag){font-family:var(--mono);color:var(--text);font-size:12px}.detect-banner.svelte-1uha8ag,.detect-wait.svelte-1uha8ag{color:var(--text-dim);margin:0 0 10px;font-size:13px}button.file-link.svelte-1uha8ag{color:var(--accent);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.error-line.svelte-1uha8ag{color:var(--danger);margin:0 0 10px;font-size:12px}.ok-line.svelte-1uha8ag{color:var(--ok);margin:0 0 10px;font-size:12px}.row.svelte-1uha8ag{flex-wrap:wrap;gap:8px;display:flex}.repo-setup.svelte-1uha8ag{flex-direction:column;gap:10px;display:flex}.field.svelte-1uha8ag{flex-direction:column;flex:1;gap:4px;min-width:180px;display:flex}.repo-field.svelte-1uha8ag{flex:none;width:100%;min-width:0}.branches-row.svelte-1uha8ag .field:where(.svelte-1uha8ag){flex:1;min-width:160px}.field.svelte-1uha8ag span:where(.svelte-1uha8ag){color:var(--text-faint);font-size:11px}.repo-row.svelte-1uha8ag{gap:6px;min-width:0;display:flex}.repo-row.svelte-1uha8ag input[type=text]:where(.svelte-1uha8ag){flex:1;min-width:0}.repo-row.svelte-1uha8ag button:where(.svelte-1uha8ag){flex-shrink:0}.source-toggle.svelte-1uha8ag{margin-bottom:10px}input[type=text].svelte-1uha8ag,select.svelte-1uha8ag{background:var(--bg-card);border:1px solid var(--border);flex:1;min-width:0;padding:9px 12px}button.svelte-1uha8ag{background:var(--bg-card);border:1px solid var(--border);color:var(--text);padding:9px 12px;font-size:12.5px}button.svelte-1uha8ag:hover:not(:disabled){border-color:var(--accent)}button.svelte-1uha8ag:disabled{opacity:.5;cursor:not-allowed}.mode-toggle.svelte-1uha8ag{border:1px solid var(--border);width:fit-content;margin-bottom:10px;display:flex;overflow:hidden}.mode-toggle.svelte-1uha8ag button:where(.svelte-1uha8ag){background:0 0;border:0;padding:6px 12px;font-size:12px}.mode-toggle.svelte-1uha8ag button:where(.svelte-1uha8ag)+button:where(.svelte-1uha8ag){border-left:1px solid var(--border)}.mode-toggle.svelte-1uha8ag button.on:where(.svelte-1uha8ag){background:var(--accent-soft)}textarea.svelte-1uha8ag{resize:vertical;background:var(--bg);border:1px solid var(--border);width:100%;height:220px;font-family:var(--mono);color:var(--text);padding:12px;font-size:12px;line-height:1.5}.loading-models.svelte-1uha8ag{color:var(--text-faint);font-weight:400}.models-error.svelte-1uha8ag{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}button.linkish.svelte-1uha8ag{color:var(--accent,#3b82f6);cursor:pointer;font:inherit;background:0 0;border:none;padding:0;text-decoration:underline}.actions.svelte-1uha8ag{gap:8px;margin-top:10px;display:flex}button.primary.svelte-1uha8ag{background:var(--btn-primary-bg);border-color:var(--btn-primary-border);color:var(--btn-primary-text);font-weight:600}.coverage-box.svelte-1uha8ag{border:1px solid var(--border);border-left:3px solid var(--sev-med);background:var(--bg-card);flex-direction:column;gap:10px;margin-top:12px;padding:12px 14px;display:flex}.coverage-head.svelte-1uha8ag{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.coverage-head.svelte-1uha8ag strong:where(.svelte-1uha8ag){color:var(--sev-med);font-size:13px}.coverage-head.svelte-1uha8ag span:where(.svelte-1uha8ag){color:var(--text-faint);font-size:11.5px}.coverage-box.svelte-1uha8ag summary:where(.svelte-1uha8ag){color:var(--text-dim);cursor:pointer;font-size:12px}.coverage-list.svelte-1uha8ag{max-height:180px;font-family:var(--mono);color:var(--text-faint);margin:8px 0 0;padding-left:18px;font-size:11px;overflow:auto}.coverage-box.svelte-1uha8ag textarea:where(.svelte-1uha8ag){resize:vertical;background:var(--bg);border:1px solid var(--border);width:100%;font-family:var(--mono);color:var(--text);padding:10px;font-size:11.5px;line-height:1.5}.coverage-actions.svelte-1uha8ag{flex-wrap:wrap;gap:8px;display:flex}.dropzone.svelte-1uha8ag{border:1.5px dashed var(--border);text-align:center;background:var(--bg-elev);padding:26px;transition:background .15s,border-color .15s}.dropzone.drag.svelte-1uha8ag{border-color:var(--accent);background:var(--accent-soft)}.dropzone.busy.svelte-1uha8ag{opacity:.7}.dropzone.svelte-1uha8ag p:where(.svelte-1uha8ag){color:var(--text-dim);margin:0 0 6px;font-size:14px}.visually-hidden.svelte-1uha8ag{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.drop-errors.svelte-1uha8ag{background:var(--danger-bg);color:var(--danger);margin-top:10px;padding:10px 12px;font-size:12.5px}.drop-errors.svelte-1uha8ag strong:where(.svelte-1uha8ag){margin-bottom:4px;display:block}.drop-errors.svelte-1uha8ag ul:where(.svelte-1uha8ag){margin:0;padding-left:18px;line-height:1.6}.reports-col.svelte-1uha8ag{min-width:0;max-height:calc(100vh - 110px);position:sticky;top:88px;overflow:auto}.report-list.svelte-1uha8ag{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.report-item.svelte-1uha8ag{border:1px solid var(--border);background:var(--bg-card);align-items:stretch;display:flex;position:relative;overflow:visible}.report-item.svelte-1uha8ag:hover{background:var(--bg-card-hover);border-color:#33507a}.report-card.svelte-1uha8ag{min-width:0;color:var(--text);flex:1;padding:12px 8px 12px 14px;text-decoration:none;display:block}.report-actions.svelte-1uha8ag{flex-shrink:0;padding:8px 8px 0 0;position:relative}.kebab.svelte-1uha8ag{width:26px;height:26px;color:var(--text-faint);cursor:pointer;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;padding:0;display:inline-flex}.kebab.svelte-1uha8ag:hover{border-color:var(--border);color:var(--text);background:var(--bg)}.report-menu.svelte-1uha8ag{z-index:40;border:1px solid var(--border);background:var(--bg-card);width:148px;padding:4px;position:fixed;box-shadow:0 8px 24px #0000002e}.report-menu.svelte-1uha8ag .menu-item:where(.svelte-1uha8ag){width:100%;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:0;padding:8px 10px;font-size:12.5px;display:block}.report-menu.svelte-1uha8ag .menu-item:where(.svelte-1uha8ag):hover{background:var(--accent-soft)}.report-menu.svelte-1uha8ag .menu-item.danger:where(.svelte-1uha8ag){color:var(--danger)}.report-top.svelte-1uha8ag{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.report-top.svelte-1uha8ag strong:where(.svelte-1uha8ag){font-size:14px}.report-prov.svelte-1uha8ag{min-width:0;color:var(--text-dim);align-items:center;gap:6px;margin-top:4px;font-size:12px;display:flex}.report-prov.svelte-1uha8ag .prov-agent:where(.svelte-1uha8ag){text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;overflow:hidden}.report-prov.svelte-1uha8ag .prov-sep:where(.svelte-1uha8ag){color:var(--text-faint);flex-shrink:0}.report-prov.svelte-1uha8ag .prov-model:where(.svelte-1uha8ag){min-width:0;font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:11.5px;overflow:hidden}.when.svelte-1uha8ag{color:var(--text-dim);font-size:12px}.report-meta.svelte-1uha8ag{color:var(--text-dim);justify-content:space-between;align-items:baseline;gap:12px;margin-top:6px;font-size:12px;display:flex}.report-base.svelte-1uha8ag{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.base-arrow.svelte-1uha8ag{color:var(--text-faint)}.report-counts.svelte-1uha8ag{flex-shrink:0;align-items:baseline;gap:8px;display:flex}.pill.svelte-1uha8ag{font-family:var(--mono);font-size:11px}.pill.bad.svelte-1uha8ag{color:var(--danger)}.report-intent.svelte-1uha8ag{color:var(--text-dim);-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;margin:8px 0 0;font-size:12.5px;line-height:1.45;display:-webkit-box;overflow:hidden}@media (width<=960px){.workspace.svelte-1uha8ag{grid-template-columns:1fr}.reports-col.svelte-1uha8ag{max-height:none;position:static}}
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.resize-handle.svelte-ywcz8g{cursor:col-resize;z-index:2;touch-action:none;background:0 0;flex-shrink:0;width:6px;position:relative}.resize-handle.svelte-ywcz8g:after{content:"";background:0 0;width:2px;position:absolute;top:0;bottom:0;left:2px}.resize-handle.svelte-ywcz8g:hover:after,.resize-handle.dragging.svelte-ywcz8g:after{background:var(--accent)}.chat-shell.svelte-1nylsi{flex-shrink:0;align-self:stretch;min-width:0;min-height:0;display:flex}.chat.svelte-1nylsi{border-left:1px solid var(--border);background:var(--bg-elev);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}header.svelte-1nylsi{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:10px 14px;display:flex}.title.svelte-1nylsi{align-items:center;gap:8px;min-width:0;display:flex}.title.svelte-1nylsi strong:where(.svelte-1nylsi){font-size:13.5px;font-weight:650}.title.svelte-1nylsi small:where(.svelte-1nylsi){font-family:var(--mono);color:var(--text-faint);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:11.5px;overflow:hidden}.close.svelte-1nylsi{color:var(--text-dim);cursor:pointer;background:0 0;border:0;font-size:13px}.log-area.svelte-1nylsi{flex-direction:column;flex:1;gap:10px;min-height:0;padding:12px 14px;display:flex}.log.svelte-1nylsi{flex:1;min-height:0;display:flex}.log.svelte-1nylsi .log{flex:1;min-height:0}.picker.svelte-1nylsi{flex-direction:column;flex:1;gap:10px;padding:14px;display:flex}.field.svelte-1nylsi{color:var(--text-dim);flex-direction:column;gap:4px;font-size:12px;display:flex}.field.svelte-1nylsi .agent-select .trigger{padding:6px 8px;font-size:13px}.field.svelte-1nylsi small:where(.svelte-1nylsi){color:var(--text-faint)}.start.svelte-1nylsi{background:var(--btn-primary-bg);border:1px solid var(--btn-primary-border);color:var(--btn-primary-text);align-self:flex-start;padding:8px 14px;font-size:13px}.start.svelte-1nylsi:disabled{opacity:.5}.hint.svelte-1nylsi,.note.svelte-1nylsi,.err.svelte-1nylsi{color:var(--text-faint);margin:0;padding:8px 14px;font-size:12.5px}.picker.svelte-1nylsi .hint:where(.svelte-1nylsi){padding:0}.err.svelte-1nylsi{color:var(--danger)}.models-error.svelte-1nylsi{flex-wrap:wrap;align-items:baseline;gap:8px;padding-inline:0;display:flex}button.linkish.svelte-1nylsi{color:var(--accent,#3b82f6);cursor:pointer;font:inherit;background:0 0;border:none;padding:0;text-decoration:underline}.connecting.svelte-1nylsi{text-align:center;flex-direction:column;flex:1;justify-content:center;gap:6px;padding:18px 8px;display:flex}.connecting-title.svelte-1nylsi{color:var(--text);margin:0;font-size:13.5px;font-weight:650}.connecting-detail.svelte-1nylsi{font-size:12px;font-family:var(--mono);color:var(--text-dim);word-break:break-all;margin:0}.connecting-hint.svelte-1nylsi{color:var(--text-faint);margin:4px 0 0;font-size:12px}.composer.svelte-1nylsi{border-top:1px solid var(--border);flex-direction:column;gap:8px;padding:10px 14px 14px;display:flex}.composer-top.svelte-1nylsi{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.model-field.svelte-1nylsi{flex:1;min-width:140px}.mode-toggle.svelte-1nylsi{border:1px solid var(--border);flex-shrink:0;align-self:flex-start;display:flex}.mode-toggle.svelte-1nylsi button:where(.svelte-1nylsi){color:var(--text);background:0 0;border:0;padding:5px 10px;font-size:12px}.mode-toggle.svelte-1nylsi button:where(.svelte-1nylsi)+button:where(.svelte-1nylsi){border-left:1px solid var(--border)}.mode-toggle.svelte-1nylsi button.on:where(.svelte-1nylsi){background:var(--accent-soft)}textarea.svelte-1nylsi{resize:vertical;min-height:60px;font:inherit;background:var(--bg-card);color:var(--text);border:1px solid var(--border);padding:8px;font-size:13px}.actions.svelte-1nylsi{align-items:center;gap:8px;display:flex}.actions-spacer.svelte-1nylsi{flex:1;min-width:0}.actions.svelte-1nylsi button:where(.svelte-1nylsi){background:var(--bg-card);border:1px solid var(--border);color:var(--text);padding:6px 12px;font-size:12.5px}.actions.svelte-1nylsi button.primary:where(.svelte-1nylsi){background:var(--btn-primary-bg);border-color:var(--btn-primary-border);color:var(--btn-primary-text)}.actions.svelte-1nylsi button:where(.svelte-1nylsi):disabled{opacity:.5}.ask-agent.svelte-1dix5z0{border:1px solid var(--border);background:var(--bg-card);width:28px;height:28px;color:var(--text-dim);cursor:pointer;border-radius:0;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.ask-agent.svelte-1dix5z0:hover{border-color:var(--border-strong,var(--border));color:var(--text);background:var(--bg-elev,var(--bg-card))}.diff-wrap.svelte-13r6alg{background:var(--bg);--ln-w:calc(var(--diff-font-size,11.5px) * 3.1);--sign-w:calc(var(--diff-font-size,11.5px) * 1.05);--divider-w:5px}.collapse-bar.svelte-13r6alg{background:var(--diff-hunk-bg);border-bottom:1px solid var(--border-soft);color:var(--text-faint);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:5px 10px;font-size:10.5px;display:flex}.link.svelte-13r6alg{color:var(--accent);background:0 0;border:0;padding:0;font-size:10.5px;text-decoration:underline}.gap-bar.svelte-13r6alg{background:var(--diff-hunk-bg);border-top:1px solid var(--border-soft);border-bottom:1px solid var(--border-soft);align-items:center;gap:10px;padding:3px 10px;display:flex}.gap-actions.svelte-13r6alg{border:1px solid var(--border);flex-shrink:0;display:flex;overflow:hidden}.gap-actions.svelte-13r6alg button:where(.svelte-13r6alg){background:var(--bg-card);font-family:var(--mono);font-size:calc(var(--diff-font-size,11.5px) * .87);color:var(--text-dim);border:0;padding:1px 8px;line-height:1.5}.gap-actions.svelte-13r6alg button:where(.svelte-13r6alg)+button:where(.svelte-13r6alg){border-left:1px solid var(--border)}.gap-actions.svelte-13r6alg button:where(.svelte-13r6alg):hover:not(:disabled){background:var(--accent-soft);color:var(--text)}.gap-actions.svelte-13r6alg button:where(.svelte-13r6alg):disabled{opacity:.4;cursor:not-allowed}.gap-info.svelte-13r6alg{font-family:var(--mono);font-size:calc(var(--diff-font-size,11.5px) * .87);color:var(--text-faint);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.empty.svelte-13r6alg{color:var(--text-faint);margin:0;padding:12px;font-size:11.5px}.diff.svelte-13r6alg,.hunk-header.svelte-13r6alg{font-family:var(--mono)}.diff.svelte-13r6alg{max-height:55vh;font-size:var(--diff-font-size,11.5px);overflow:auto}.diff.wrap.svelte-13r6alg{overflow-x:hidden}.diff.wrap.svelte-13r6alg .row:where(.svelte-13r6alg){width:auto;min-width:0}.diff.wrap.svelte-13r6alg .code:where(.svelte-13r6alg){white-space:pre-wrap;overflow-wrap:anywhere}.hunk-header.svelte-13r6alg{background:var(--diff-hunk-bg);border-top:1px solid var(--border-soft);border-bottom:1px solid var(--border-soft);font-size:calc(var(--diff-font-size,11.5px) * .913);color:var(--text-faint);white-space:nowrap;text-overflow:ellipsis;padding:3px 10px;overflow:hidden}.row.svelte-13r6alg{grid-template-columns:var(--ln-w) var(--ln-w) var(--sign-w) auto;border-left:2px solid #0000;width:max-content;min-width:100%;display:grid}.split-grid.svelte-13r6alg{align-items:stretch;display:grid}.srow.svelte-13r6alg{display:contents}.divider.svelte-13r6alg{background:var(--border-soft);cursor:col-resize;touch-action:none}.divider.svelte-13r6alg:hover,.divider.svelte-13r6alg:active{background:var(--accent)}.split-grid.svelte-13r6alg .code:where(.svelte-13r6alg){white-space:pre-wrap;overflow-wrap:anywhere}.ln.svelte-13r6alg{text-align:right;color:var(--diff-gutter);font-size:calc(var(--diff-font-size,11.5px) * .87);-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;border-left:2px solid #0000;padding-right:6px;overflow:hidden}.row.svelte-13r6alg .ln:where(.svelte-13r6alg){border-left:0}.sign.svelte-13r6alg{text-align:center;-webkit-user-select:none;user-select:none;color:var(--text-faint)}.sign.add.svelte-13r6alg{color:var(--diff-add-fg)}.sign.del.svelte-13r6alg{color:var(--diff-del-fg)}.code.svelte-13r6alg{white-space:pre;padding-right:10px}.row.add.svelte-13r6alg{background:var(--diff-add-bg)}.row.add.svelte-13r6alg .sign:where(.svelte-13r6alg){color:var(--diff-add-fg)}.row.del.svelte-13r6alg{background:var(--diff-del-bg)}.row.del.svelte-13r6alg .sign:where(.svelte-13r6alg){color:var(--diff-del-fg)}.file-icon.svelte-1dshc1f{flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.file-icon.svelte-1dshc1f svg{width:100%;height:100%}.file-icon.branded.svelte-1dshc1f svg{width:78%;height:78%}.file-icon.svelte-1dshc1f:not(.branded) svg{fill:currentColor}.explore.svelte-1k3qopq{display:contents}.blocker-bar.svelte-1k3qopq{background:var(--danger-bg);border:1px solid var(--danger-border);color:var(--danger);margin:0;padding:10px 14px;font-size:13px;font-weight:600}h2.svelte-1k3qopq{letter-spacing:.07em;text-transform:uppercase;color:var(--text-faint);margin:0 0 8px;font-size:12px;font-weight:650}.intent.svelte-1k3qopq{border-bottom:1px solid var(--border);padding:0 0 16px}.intent-text.svelte-1k3qopq{color:var(--text);max-width:80ch;margin:0;font-size:14px;line-height:1.6}.note.svelte-1k3qopq{color:var(--text-faint);max-width:80ch;margin:8px 0 0;font-size:11.5px;line-height:1.5}.group.svelte-1k3qopq{flex-direction:column;gap:12px;padding:18px 0 6px;display:flex}.group-sticky.svelte-1k3qopq{z-index:4;background:var(--bg);border-bottom:1px solid var(--border-soft);flex-direction:column;gap:6px;margin:0 -20px;padding:14px 20px 12px;display:flex;position:sticky;top:-14px}.group-head.svelte-1k3qopq{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.group-ask.svelte-1k3qopq{margin-left:auto}.group-head.svelte-1k3qopq .number:where(.svelte-1k3qopq){color:var(--text-faint);flex-shrink:0;font-size:12px;font-weight:700}.group-head.svelte-1k3qopq h2:where(.svelte-1k3qopq){color:var(--text);text-transform:none;letter-spacing:normal;margin:0;font-size:15px;font-weight:650;line-height:1.3}.kind-chip.svelte-1k3qopq{border:1px solid var(--border);background:var(--bg-card);flex-shrink:0;padding:2px 8px;font-size:11px;font-weight:700}.group-intent.svelte-1k3qopq{color:var(--text-dim);max-width:80ch;margin:0;font-size:12.5px;line-height:1.45}.loose.svelte-1k3qopq .kind-chip:where(.svelte-1k3qopq){color:var(--text-faint)}.file-section.svelte-1k3qopq{border-top:1px solid var(--border)}.file-head.svelte-1k3qopq{border-bottom:1px solid var(--border-soft);align-items:center;display:grid}.file-section.collapsed.svelte-1k3qopq .file-head:where(.svelte-1k3qopq){border-bottom:0}.file-head-main.svelte-1k3qopq{align-items:center;gap:8px;min-width:0;padding:6px 0;display:flex}.file-toggle.svelte-1k3qopq{text-align:left;min-width:0;color:inherit;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:8px;padding:4px 0;display:flex}.file-toggle.svelte-1k3qopq:hover .path:where(.svelte-1k3qopq){color:var(--accent)}.caret.svelte-1k3qopq{width:10px;color:var(--text-faint);flex-shrink:0;font-size:10px}.file-head-gutter.svelte-1k3qopq{flex-shrink:0}.file-head-explain.svelte-1k3qopq{align-items:center;padding:10px 0 10px 14px;display:flex}.path.svelte-1k3qopq{font-family:var(--mono);color:var(--text);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12.5px;overflow:hidden}.change-label.svelte-1k3qopq{color:var(--text-faint);flex:1;font-size:11px}.findings-control.svelte-1k3qopq{color:var(--text);background:0 0;border:0;flex-shrink:0;align-items:center;gap:6px;padding:0;display:flex}.count-badge.svelte-1k3qopq{justify-content:center;align-items:center;min-width:18px;height:18px;padding:0 4px;font-size:10.5px;font-weight:700;display:flex}.count-badge.done.svelte-1k3qopq{border:1px solid var(--fix-border);color:var(--ok)}.count-badge.open.svelte-1k3qopq{background:color-mix(in srgb, var(--finding-sev) 22%, transparent);color:var(--finding-sev)}.count-label.svelte-1k3qopq{color:var(--text-faint);font-size:11.5px}.count-label.open.svelte-1k3qopq{color:var(--text-dim)}.arrow.svelte-1k3qopq{color:var(--finding-sev,var(--accent));font-size:14px}.file-grid.svelte-1k3qopq{grid-template-columns:minmax(0,1fr) minmax(260px,320px);display:grid}.file-grid.no-explanations.svelte-1k3qopq{grid-template-columns:minmax(0,1fr)}.diff-col.svelte-1k3qopq{min-width:0}.explain-col.svelte-1k3qopq{border-left:1px solid var(--border-soft);background:var(--bg-elev);flex-direction:column;display:flex;overflow:auto}.explain-row.svelte-1k3qopq{border-bottom:1px solid var(--border-soft);padding:10px 14px}.explain-top.svelte-1k3qopq{align-items:center;gap:8px;margin-bottom:4px;display:flex}.explain-ask.svelte-1k3qopq{margin-left:auto}.lines.svelte-1k3qopq{color:var(--text-faint);font-size:10.5px;font-family:var(--mono)}.op.svelte-1k3qopq{color:var(--text-faint);text-transform:uppercase;letter-spacing:.04em;font-size:10px}.what.svelte-1k3qopq{color:var(--text);max-width:80ch;margin:0 0 3px;font-size:13px;line-height:1.4}.why.svelte-1k3qopq{color:var(--text-dim);max-width:80ch;margin:0;font-size:11.5px;line-height:1.4}.orphans.svelte-1k3qopq,.skipped.svelte-1k3qopq{border-top:1px solid var(--border-soft);padding-top:12px}.orphan-list.svelte-1k3qopq{flex-direction:column;gap:6px;display:flex}.orphan-row.svelte-1k3qopq{background:var(--bg-elev);border-left:2px solid #0000;align-items:baseline;gap:10px;padding:6px 10px;display:flex}.orphan-row.svelte-1k3qopq .badge:where(.svelte-1k3qopq){flex-shrink:0;font-size:10px;font-weight:700}.orphan-row.svelte-1k3qopq .what:where(.svelte-1k3qopq){flex:1;margin:0;font-size:12.5px}.orphan-row.svelte-1k3qopq .where:where(.svelte-1k3qopq){font-family:var(--mono);color:var(--text-faint);font-size:10.5px}.skipped-list.svelte-1k3qopq{flex-wrap:wrap;gap:6px;display:flex}.skipped-chip.svelte-1k3qopq{font-size:11px;font-family:var(--mono);color:var(--text-faint);border:1px solid var(--border);padding:4px 8px}.prompt-box.svelte-1dm34m1{border:1px solid var(--fix-border);background:var(--fix-bg);flex-direction:column;gap:10px;padding:14px 16px;display:flex}.prompt-box.publish.svelte-1dm34m1{border-color:var(--publish-border);background:var(--publish-bg)}.prompt-head.svelte-1dm34m1{justify-content:space-between;align-items:center;display:flex}.fix-title.svelte-1dm34m1{letter-spacing:.07em;text-transform:uppercase;color:var(--fix-text);margin:0;font-size:12px;font-weight:650}.publish-title.svelte-1dm34m1{letter-spacing:.07em;text-transform:uppercase;color:var(--publish-text);margin:0;font-size:12px;font-weight:650}.close.svelte-1dm34m1{color:var(--text-faint);background:0 0;border:0;padding:0;font-size:12px}.mode-toggle.svelte-1dm34m1{border:1px solid var(--border);width:fit-content;display:flex;overflow:hidden}.mode-toggle.svelte-1dm34m1 button:where(.svelte-1dm34m1){color:var(--text);background:0 0;border:0;padding:6px 12px;font-size:12px}.mode-toggle.svelte-1dm34m1 button:where(.svelte-1dm34m1)+button:where(.svelte-1dm34m1){border-left:1px solid var(--border)}.mode-toggle.svelte-1dm34m1 button.on:where(.svelte-1dm34m1){background:var(--accent-soft)}textarea.svelte-1dm34m1{resize:vertical;background:var(--bg);border:1px solid var(--border);width:100%;height:220px;font-family:var(--mono);color:var(--text);padding:12px;font-size:12px;line-height:1.5}.hint.svelte-1dm34m1{color:var(--text-faint);margin:0;font-size:11.5px}.copy.svelte-1dm34m1{background:var(--btn-primary-bg);border:1px solid var(--btn-primary-border);color:var(--btn-primary-text);padding:9px 14px;font-size:13px;font-weight:600}.detail-panel.svelte-1dm34m1{border:1px solid var(--border);background:var(--bg-card);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.detail-head.svelte-1dm34m1{border-bottom:1px solid var(--border-soft);background:var(--bg-elev);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;display:flex}.detail-head-left.svelte-1dm34m1{align-items:center;gap:8px;display:flex}.number.svelte-1dm34m1{color:var(--text);font-size:12px;font-weight:700}.badge.svelte-1dm34m1{font-size:10px;font-weight:700}.file-line.svelte-1dm34m1{min-width:0;font-family:var(--mono);align-items:baseline;gap:8px;display:flex}.file-name.svelte-1dm34m1{color:var(--text);flex-shrink:0;font-size:12px;font-weight:600}.file-dir.svelte-1dm34m1{color:var(--text-faint);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:11px;overflow:hidden}.head-actions.svelte-1dm34m1{flex-shrink:0;align-items:center;gap:8px;display:flex}.decision-group.svelte-1dm34m1{border:1px solid var(--border);flex-shrink:0;display:flex;overflow:hidden}.decision-group.svelte-1dm34m1 button:where(.svelte-1dm34m1){color:var(--text-dim);background:0 0;border:0;padding:6px 14px;font-size:12px;font-weight:600}.decision-group.svelte-1dm34m1 button:first-child.on:where(.svelte-1dm34m1){background:var(--danger-bg);color:var(--danger)}.decision-group.svelte-1dm34m1 button:nth-child(2).on:where(.svelte-1dm34m1){background:var(--fix-bg);color:var(--ok)}.decision-group.svelte-1dm34m1 button:where(.svelte-1dm34m1)+button:where(.svelte-1dm34m1){border-left:1px solid var(--border)}.decision-group.svelte-1dm34m1 .clear:where(.svelte-1dm34m1){color:var(--text-faint);padding:6px 10px}.detail-grid.svelte-1dm34m1{flex:1;grid-template-columns:minmax(0,1fr) minmax(260px,320px);min-height:0;display:grid}.detail-grid.no-explanations.svelte-1dm34m1{grid-template-columns:minmax(0,1fr)}.diff-col.svelte-1dm34m1{flex-direction:column;min-width:0;display:flex;overflow:hidden auto}.file-path-bar.svelte-1dm34m1{border-bottom:1px solid var(--border-soft);background:var(--bg-elev);flex-shrink:0;align-items:center;gap:8px;min-width:0;padding:8px 14px;display:flex}.file-path-text.svelte-1dm34m1{font-family:var(--mono);color:var(--text-faint);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:11px;overflow:hidden}.explain-col.svelte-1dm34m1{border-left:1px solid var(--border-soft);background:var(--bg-elev);flex-direction:column;gap:16px;padding:14px 16px;display:flex;overflow:auto}.explain-counter.svelte-1dm34m1{color:var(--text-dim);border:1px solid var(--border);background:var(--bg-card);align-self:flex-start;padding:3px 8px;font-size:10.5px;font-weight:650}.explain-col.svelte-1dm34m1 h3:where(.svelte-1dm34m1){letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint);margin:0 0 4px;font-size:10.5px;font-weight:650}.explain-col.svelte-1dm34m1 .what:where(.svelte-1dm34m1){color:var(--text);margin:0;font-size:13px;line-height:1.45}.explain-col.svelte-1dm34m1 .fix:where(.svelte-1dm34m1){color:var(--text-dim);margin:0;font-size:13px;line-height:1.45}.backdrop.svelte-lfje9j{z-index:9;background:#00000059;position:fixed;inset:0}.drawer.svelte-lfje9j{background:var(--bg-card);border-left:1px solid var(--border);z-index:10;flex-direction:column;width:420px;transition:transform .2s;display:flex;position:fixed;top:0;bottom:0;right:0;transform:translate(100%)}.drawer.open.svelte-lfje9j{transform:translate(0)}.drawer-head.svelte-lfje9j{border-bottom:1px solid var(--border-soft);flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;min-width:0;padding:12px 14px;display:flex}.drawer-title.svelte-lfje9j{flex:1;align-items:center;gap:8px;min-width:0;display:flex}.file-ref.svelte-lfje9j{align-items:baseline;gap:8px;min-width:0;display:flex;overflow:hidden}.name.svelte-lfje9j{color:var(--text);font-size:13px;font-weight:600;font-family:var(--mono);flex-shrink:0}.dir.svelte-lfje9j{color:var(--text-faint);font-size:11px;font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.close.svelte-lfje9j{color:var(--text-faint);background:0 0;border:0;flex-shrink:0;padding:0;font-size:14px}.list.svelte-lfje9j{flex-direction:column;display:flex;overflow:auto}.item.svelte-lfje9j{border-bottom:1px solid var(--border-soft)}.item-head.svelte-lfje9j{text-align:left;background:0 0;border:0;border-left:2px solid #0000;align-items:center;gap:8px;width:100%;padding:10px 14px;display:flex}.status.svelte-lfje9j{border:1px solid #0000;flex-shrink:0;justify-content:center;align-items:center;width:14px;height:14px;font-size:10px;line-height:1;display:flex}.badge.svelte-lfje9j{flex-shrink:0;font-size:10px;font-weight:700}.what.svelte-lfje9j{color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12.5px;overflow:hidden}.chevron.svelte-lfje9j{color:var(--text-faint);flex-shrink:0;font-size:11px}.item-body.svelte-lfje9j{flex-direction:column;gap:14px;padding:0 14px 14px 20px;display:flex}.item-body.svelte-lfje9j h4:where(.svelte-lfje9j){letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint);margin:0 0 4px;font-size:10px;font-weight:650}.item-body.svelte-lfje9j p:where(.svelte-lfje9j){color:var(--text);margin:0;font-size:13px;line-height:1.5}.item-body.svelte-lfje9j p.fix:where(.svelte-lfje9j){color:var(--text-dim)}.item-actions.svelte-lfje9j{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.decision-group.svelte-lfje9j{border:1px solid var(--border);width:fit-content;display:flex;overflow:hidden}.decision-group.svelte-lfje9j button:where(.svelte-lfje9j){color:var(--text-dim);background:0 0;border:0;padding:7px 14px;font-size:12px;font-weight:600}.decision-group.svelte-lfje9j button:first-child.on:where(.svelte-lfje9j){background:var(--danger-bg);color:var(--danger)}.decision-group.svelte-lfje9j button:nth-child(2).on:where(.svelte-lfje9j){background:var(--fix-bg);color:var(--ok)}.decision-group.svelte-lfje9j button:where(.svelte-lfje9j)+button:where(.svelte-lfje9j){border-left:1px solid var(--border)}.decision-group.svelte-lfje9j .clear:where(.svelte-lfje9j){color:var(--text-faint);padding:7px 10px}.footer.svelte-67e2dl{border-top:1px solid var(--border);background:var(--bg-elev);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;min-height:33px;padding:6px 16px;display:flex}.right.svelte-67e2dl{align-items:center;gap:12px;display:flex}.reviewed.svelte-67e2dl{color:var(--text-faint);font-size:11px}.fix.svelte-67e2dl,.publish.svelte-67e2dl{border:1px solid;padding:6px 12px;font-size:11.5px;font-weight:600}.fix.svelte-67e2dl{background:var(--fix-bg);border-color:var(--fix-border);color:var(--ok)}.publish.svelte-67e2dl{background:var(--publish-bg);border-color:var(--publish-border);color:var(--publish-text)}.sidebar.svelte-xengl2{border-right:1px solid var(--border);background:var(--bg-elev);flex-direction:column;height:100%;min-height:0;padding:14px 0;display:flex;overflow:hidden}.sidebar.collapsed.svelte-xengl2{border-right:0}.mode-toggle.svelte-xengl2{border:1px solid var(--border);flex-shrink:0;margin:0 14px 12px;display:flex;overflow:hidden}.mode-toggle.svelte-xengl2 button:where(.svelte-xengl2){color:var(--text);background:0 0;border:0;flex:1;justify-content:center;align-items:center;gap:6px;padding:7px 8px;font-size:12px;display:flex}.mode-toggle.svelte-xengl2 button:where(.svelte-xengl2)+button:where(.svelte-xengl2){border-left:1px solid var(--border)}.mode-toggle.svelte-xengl2 button.on:where(.svelte-xengl2){background:var(--accent-soft)}.mode-label.svelte-xengl2{align-items:center;gap:6px;line-height:1;display:inline-flex}.count-badge.svelte-xengl2{font-family:var(--mono);border:1px solid color-mix(in srgb, var(--finding-sev,var(--border)) 45%, transparent);background:color-mix(in srgb, var(--finding-sev,var(--bg-card)) 18%, transparent);color:var(--finding-sev,var(--text-dim));justify-content:center;align-items:center;padding:2px 6px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.panel.svelte-xengl2{padding:0 14px 10px}.explore-panel.svelte-xengl2{flex-direction:column;flex:1;min-height:0;padding:0 0 10px;display:flex;overflow:hidden}.panel-chrome.svelte-xengl2{flex-shrink:0;padding:0 14px}.panel-scroll.svelte-xengl2{flex:1;min-height:0;padding:0 14px;overflow:hidden auto}h3.svelte-xengl2{letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint);margin:0 0 8px;font-size:11.5px;font-weight:650}.index-tabs.svelte-xengl2{border-bottom:1px solid var(--border-soft);gap:12px;margin-bottom:8px;display:flex}.index-tabs.svelte-xengl2 button:where(.svelte-xengl2){letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint);background:0 0;border:0;border-bottom:2px solid #0000;padding:0 0 6px;font-size:11.5px;font-weight:650}.index-tabs.svelte-xengl2 button.on:where(.svelte-xengl2){color:var(--text);border-bottom-color:var(--accent)}.files-toolbar.svelte-xengl2{justify-content:space-between;align-items:center;gap:6px;margin:-2px 0 8px;display:flex}.files-toolbar.svelte-xengl2 .tool:where(.svelte-xengl2){border:1px solid var(--border);background:var(--bg-card);width:26px;height:26px;color:var(--text-dim);justify-content:center;align-items:center;padding:0;display:inline-flex}.files-toolbar.svelte-xengl2 .tool:where(.svelte-xengl2):hover:not(:disabled){color:var(--text);border-color:var(--text-faint)}.files-toolbar.svelte-xengl2 .tool.on:where(.svelte-xengl2){background:var(--accent-soft);border-color:var(--border);color:var(--text)}.files-toolbar.svelte-xengl2 .tool:where(.svelte-xengl2):disabled{opacity:.35;cursor:default}.files-toolbar.svelte-xengl2 .tool-icon:where(.svelte-xengl2){width:14px;height:14px;display:block}.files-toolbar.svelte-xengl2 .seg:where(.svelte-xengl2){border:1px solid var(--border);display:flex;overflow:hidden}.files-toolbar.svelte-xengl2 .seg:where(.svelte-xengl2) .tool:where(.svelte-xengl2){background:0 0;border:0;border-radius:0}.files-toolbar.svelte-xengl2 .seg:where(.svelte-xengl2) .tool:where(.svelte-xengl2)+.tool:where(.svelte-xengl2){border-left:1px solid var(--border)}.files-toolbar.svelte-xengl2 .seg:where(.svelte-xengl2) .tool.on:where(.svelte-xengl2){background:var(--accent-soft)}.nav-list.svelte-xengl2{flex-direction:column;gap:2px;display:flex}.tree.svelte-xengl2{flex-direction:column;display:flex}.tree-row.svelte-xengl2{text-align:left;width:100%;color:var(--text);background:0 0;border:0;align-items:center;gap:4px;min-width:0;padding:2px 6px 2px 0;font-size:12px;display:flex;position:relative}.tree-row.svelte-xengl2:hover:not(:disabled){background:var(--bg-card)}.tree-row.dir.svelte-xengl2{color:var(--text-dim)}.tree-row.muted.svelte-xengl2{color:var(--text-faint);cursor:default}.tree-row.skipped.svelte-xengl2 .name:where(.svelte-xengl2){text-decoration:line-through;-webkit-text-decoration-color:var(--text-faint);text-decoration-color:var(--text-faint)}.tree-guides.svelte-xengl2{pointer-events:none;width:0;position:absolute;inset:0 auto 0 0}.tree-guide.svelte-xengl2{background:var(--border-soft);opacity:.9;width:1px;position:absolute;top:0;bottom:0}.tree-slot.svelte-xengl2{flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex}.caret.svelte-xengl2{color:var(--text-faint);font-size:10px;line-height:1}.mark.svelte-xengl2{width:9px;font-family:var(--mono);color:var(--text-faint);flex-shrink:0;font-size:9.5px;font-weight:700}.mark.add.svelte-xengl2{color:var(--diff-add-fg)}.mark.del.svelte-xengl2{color:var(--diff-del-fg)}.tree-row.svelte-xengl2 .name:where(.svelte-xengl2){text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--mono);flex:1;font-size:11.5px;overflow:hidden}.tree-row.svelte-xengl2 .name-line:where(.svelte-xengl2){flex:1;align-items:baseline;gap:6px;min-width:0;display:flex;overflow:hidden}.tree-row.svelte-xengl2 .name-line:where(.svelte-xengl2) .name:where(.svelte-xengl2){text-overflow:ellipsis;flex:0 auto;overflow:hidden}.tree-row.svelte-xengl2 .name-line:where(.svelte-xengl2) .dir:where(.svelte-xengl2){text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--mono);color:var(--text-faint);flex:1;font-size:10.5px;overflow:hidden}.tree-row.svelte-xengl2 .count:where(.svelte-xengl2),.group-link.svelte-xengl2 .count:where(.svelte-xengl2){color:var(--finding-sev,var(--danger));border:1px solid color-mix(in srgb, var(--finding-sev,var(--danger-border)) 55%, transparent);flex-shrink:0;padding:2px 5px;font-size:9.5px;font-weight:700;line-height:1}.tree-row.svelte-xengl2 .count.done:where(.svelte-xengl2),.group-link.svelte-xengl2 .count.done:where(.svelte-xengl2){color:var(--ok);border-color:var(--border)}.group-link.svelte-xengl2{min-width:0;color:var(--text);flex-direction:column;flex:1;gap:2px;padding:6px 8px 6px 0;font-size:12.5px;text-decoration:none;display:flex}.group-link.svelte-xengl2:hover{background:0 0}.group-item.svelte-xengl2{border-radius:0}.group-item.open.svelte-xengl2>.group-head-row:where(.svelte-xengl2){background:var(--bg-card)}.group-head-row.svelte-xengl2{align-items:flex-start;gap:0;display:flex}.group-head-row.svelte-xengl2:hover{background:var(--bg-card)}.group-caret.svelte-xengl2{width:20px;color:var(--text-faint);cursor:pointer;background:0 0;border:0;flex-shrink:0;justify-content:center;align-items:center;padding:8px 0 0;display:inline-flex}.group-caret.svelte-xengl2:hover{color:var(--text)}.group-files.svelte-xengl2{flex-direction:column;padding:0 0 4px 8px;display:flex}.row.svelte-xengl2{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.group-link.svelte-xengl2 .number:where(.svelte-xengl2){color:var(--text-faint);flex-shrink:0;font-size:10px;font-weight:700}.kind-chip.svelte-xengl2{border:1px solid var(--border);background:var(--bg-card);flex-shrink:0;padding:1px 5px;font-size:10px;font-weight:700}.group-link.svelte-xengl2 .title:where(.svelte-xengl2){white-space:normal;overflow-wrap:anywhere;line-height:1.35;display:block}.group-link.svelte-xengl2 .row:where(.svelte-xengl2)>.count:where(.svelte-xengl2){margin-left:auto}.meta.svelte-xengl2{color:var(--text-faint);padding-left:0;font-size:11px}.group-files.svelte-xengl2 .tree-row.file.active:where(.svelte-xengl2){background:var(--accent-soft)}.findings-panel.svelte-xengl2{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.findings-head.svelte-xengl2{justify-content:space-between;align-items:baseline;margin-bottom:8px;display:flex}.findings-head.svelte-xengl2 h3:where(.svelte-xengl2){margin:0}.reviewed.svelte-xengl2{color:var(--text-faint);font-size:10.5px}.progress.svelte-xengl2{background:var(--border-soft);flex-shrink:0;height:3px;margin-bottom:10px;overflow:hidden}.progress-bar.svelte-xengl2{background:var(--accent);height:100%}.findings-list.svelte-xengl2{flex-direction:column;flex:1;gap:4px;min-height:0;display:flex;overflow:hidden auto}.finding-row.svelte-xengl2{text-align:left;border:0;border-bottom:1px solid var(--border-soft);background:var(--bg-elev);border-left:2px solid #0000;flex-direction:column;width:100%;min-width:0;padding:8px 10px;display:flex}.finding-row.active.svelte-xengl2{background:var(--accent-soft)}.finding-row.svelte-xengl2 .top:where(.svelte-xengl2){flex-wrap:wrap;justify-content:space-between;align-items:center;gap:4px 6px;margin-bottom:3px;display:flex}.finding-row.svelte-xengl2 .left:where(.svelte-xengl2){flex-wrap:wrap;align-items:center;gap:4px 6px;min-width:0;display:flex}.status.svelte-xengl2{border:1px solid #0000;flex-shrink:0;justify-content:center;align-items:center;width:14px;height:14px;font-size:10px;line-height:1;display:flex}.number.svelte-xengl2{color:var(--text-faint);font-size:9.5px;font-weight:650}.badge.svelte-xengl2{font-size:9.5px;font-weight:700}.decision.svelte-xengl2{font-size:9.5px;font-weight:650}.what.svelte-xengl2{color:var(--text);overflow-wrap:anywhere;font-size:12.5px;line-height:1.35;display:block}.file-line.svelte-xengl2{color:var(--text-faint);font-size:10.5px;font-family:var(--mono);overflow-wrap:anywhere;margin-top:3px;display:block}.report-shell.svelte-1ipe5j3{flex-direction:column;flex:1;min-height:0;display:flex}.report.svelte-1ipe5j3{flex:1;min-height:0;display:grid}.content.svelte-1ipe5j3{flex-direction:column;gap:18px;min-height:0;padding:14px 20px 24px;display:flex;overflow:auto}.page.svelte-67dwv3{background:var(--bg);flex-direction:column;height:100vh;min-height:0;display:flex}.body.svelte-67dwv3{flex:1;min-height:0;display:flex}.body.svelte-67dwv3>.report-shell{flex:1;min-width:0}.ghost.on.svelte-67dwv3{background:var(--accent-soft);border-color:var(--accent)}.chrome.svelte-67dwv3{border-bottom:1px solid var(--border);background:var(--header-bg);flex-shrink:0;grid-template-columns:1fr auto 1fr;align-items:center;gap:16px;padding:12px 28px;display:grid}.chrome-left.svelte-67dwv3{justify-self:start;align-items:center;gap:12px;min-width:0;display:flex}.chrome-center.svelte-67dwv3{justify-self:center;align-items:center;gap:10px;display:flex}.chrome-right.svelte-67dwv3{justify-self:end;align-items:center;gap:10px;display:flex}.brand.svelte-67dwv3{color:var(--text);flex-shrink:0;align-items:center;gap:10px;font-size:15px;font-weight:700;text-decoration:none;display:flex}.brand-dot.svelte-67dwv3{background:linear-gradient(135deg,#6ea8fe,#c9a5ff);border-radius:50%;flex-shrink:0;width:9px;height:9px;box-shadow:0 0 12px #6ea8fe88}.chrome-divider.svelte-67dwv3{background:var(--border);flex-shrink:0;width:1px;height:18px}.breadcrumb.svelte-67dwv3{font-family:var(--mono);align-items:center;gap:6px;min-width:0;font-size:12.5px;display:flex}.crumb-branch.svelte-67dwv3{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.crumb-sep.svelte-67dwv3{color:var(--text-faint)}.crumb-base.svelte-67dwv3{color:var(--text-faint);white-space:nowrap}.provenance.svelte-67dwv3{min-width:0;color:var(--text-dim);align-items:center;gap:6px;font-size:12px;display:flex}.prov-agent.svelte-67dwv3{white-space:nowrap}.prov-sep.svelte-67dwv3{color:var(--text-faint)}.prov-model.svelte-67dwv3{font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}.menu-wrap.svelte-67dwv3{flex-shrink:0;position:relative}.menu.svelte-67dwv3{z-index:40;border:1px solid var(--border);background:var(--bg-card);min-width:180px;padding:4px;position:absolute;top:calc(100% + 4px);left:0;box-shadow:0 8px 24px #0000002e}.download-menu.svelte-67dwv3{flex-direction:column;gap:0;min-width:220px;padding:4px;display:flex;left:auto;right:0}.menu-item.svelte-67dwv3{width:100%;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;align-items:flex-start;gap:0;padding:4px 8px;font-size:12px;line-height:1.25;display:flex}.download-menu.svelte-67dwv3 button.menu-item:where(.svelte-67dwv3){box-sizing:border-box;z-index:0;height:44px;min-height:44px;color:var(--text);font:inherit;letter-spacing:normal;text-align:left;cursor:pointer;appearance:none;background:0 0;border:0;border-radius:2px;flex-direction:row;justify-content:space-between;align-items:center;gap:8px;margin:0;padding:0 10px;font-size:12px;font-weight:400;line-height:1.2;display:flex;position:relative;overflow:hidden}.download-menu.svelte-67dwv3 button.menu-item:where(.svelte-67dwv3):hover{z-index:1;background:var(--accent-soft)}.menu-item.svelte-67dwv3:hover{background:var(--accent-soft)}.menu-item.danger.svelte-67dwv3{color:var(--danger)}.menu-item.svelte-67dwv3 .fmt:where(.svelte-67dwv3){flex-shrink:0;font-weight:600;line-height:1.2}.menu-item.svelte-67dwv3 .hint:where(.svelte-67dwv3){color:var(--text-faint);font-size:10.5px;line-height:1.2}.download-menu.svelte-67dwv3 .menu-item:where(.svelte-67dwv3) .fmt:where(.svelte-67dwv3),.download-menu.svelte-67dwv3 .menu-item:where(.svelte-67dwv3) .hint:where(.svelte-67dwv3){pointer-events:none}.download-menu.svelte-67dwv3 .menu-item:where(.svelte-67dwv3) .hint:where(.svelte-67dwv3){text-align:right;white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:10px;overflow:hidden}.mode-toggle.svelte-67dwv3{border:1px solid var(--border);display:flex;overflow:hidden}.mode-toggle.svelte-67dwv3 button:where(.svelte-67dwv3){white-space:nowrap;color:var(--text);background:0 0;border:0;padding:6px 12px;font-size:12px}.mode-toggle.svelte-67dwv3 button:where(.svelte-67dwv3)+button:where(.svelte-67dwv3){border-left:1px solid var(--border)}.mode-toggle.svelte-67dwv3 button.on:where(.svelte-67dwv3){background:var(--accent-soft)}.zoom.svelte-67dwv3{align-items:center;gap:4px;display:flex}.icon-btn.svelte-67dwv3{background:var(--bg-card);border:1px solid var(--border);width:26px;height:26px;color:var(--text-dim);justify-content:center;align-items:center;padding:0;font-size:13px;display:flex}.icon-btn.svelte-67dwv3:hover{border-color:var(--accent);color:var(--text)}.icon-btn.on.svelte-67dwv3{background:var(--accent-soft);border-color:var(--accent);color:var(--text)}.icon-btn.kebab.svelte-67dwv3{background:0 0;border-color:#0000;width:24px;height:24px}.icon-btn.kebab.svelte-67dwv3:hover{border-color:var(--border);background:var(--bg-card)}.icon-btn.panel.svelte-67dwv3{font-size:15px}.icon-btn.svelte-67dwv3:disabled{opacity:.4;cursor:not-allowed}.zoom-label.svelte-67dwv3{font-family:var(--mono);color:var(--text-faint);text-align:center;width:30px;font-size:10.5px}.ghost.svelte-67dwv3{background:var(--bg-card);border:1px solid var(--border);color:var(--text);padding:7px 12px;font-size:12.5px}.agent-btn.svelte-67dwv3,.download-btn.svelte-67dwv3{align-items:center;gap:6px;display:inline-flex}.download-btn.svelte-67dwv3 .caret:where(.svelte-67dwv3){opacity:.7}.hint.svelte-67dwv3{color:var(--text-faint);padding:40px 28px;font-size:13px}
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.agent-icon.svelte-1o6iyhy{flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.agent-icon.svelte-1o6iyhy svg:where(.svelte-1o6iyhy){width:100%;height:100%;display:block}.agent-select.svelte-grhxa3{flex:1;width:100%;min-width:0;position:relative}.trigger.svelte-grhxa3{background:var(--bg-card);border:1px solid var(--border);width:100%;min-width:0;color:var(--text);font:inherit;font-size:inherit;text-align:left;cursor:pointer;align-items:center;gap:8px;padding:9px 12px;display:flex}.trigger.svelte-grhxa3:hover:not(:disabled){border-color:var(--accent)}.trigger.svelte-grhxa3:disabled{opacity:.5;cursor:not-allowed}.label.svelte-grhxa3{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.label.muted.svelte-grhxa3{color:var(--text-faint)}.caret.svelte-grhxa3{opacity:.7;color:var(--text-dim);flex-shrink:0}.agent-select.open.svelte-grhxa3 .caret:where(.svelte-grhxa3){transform:rotate(180deg)}.menu.svelte-grhxa3{z-index:40;border:1px solid var(--border);background:var(--bg-card);flex-direction:column;gap:0;padding:4px;display:flex;position:absolute;top:calc(100% + 4px);left:0;right:0;box-shadow:0 8px 24px #0000002e}.option.svelte-grhxa3{width:100%;color:var(--text);font:inherit;font-size:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:2px;align-items:center;gap:8px;padding:8px 10px;display:flex}.option.svelte-grhxa3:hover,.option.selected.svelte-grhxa3{background:var(--accent-soft)}.theme-toggle.svelte-lu0t34{background:var(--bg-card);border:1px solid var(--border);width:30px;height:30px;color:var(--text-dim);flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:14px;display:flex}.theme-toggle.svelte-lu0t34:hover{border-color:var(--accent);color:var(--text)}.md.svelte-cxb0dt{color:var(--text);overflow-wrap:anywhere}.md.svelte-cxb0dt>:first-child{margin-top:0}.md.svelte-cxb0dt>:last-child{margin-bottom:0}.md.svelte-cxb0dt p,.md.svelte-cxb0dt ul,.md.svelte-cxb0dt ol,.md.svelte-cxb0dt pre,.md.svelte-cxb0dt blockquote{margin:.45em 0}.md.svelte-cxb0dt ul,.md.svelte-cxb0dt ol{padding-left:1.35em}.md.svelte-cxb0dt li{margin:.15em 0}.md.svelte-cxb0dt h1,.md.svelte-cxb0dt h2,.md.svelte-cxb0dt h3,.md.svelte-cxb0dt h4{margin:.7em 0 .35em;font-size:1em;font-weight:650;line-height:1.35}.md.svelte-cxb0dt h1{font-size:1.15em}.md.svelte-cxb0dt h2{font-size:1.08em}.md.svelte-cxb0dt a{color:var(--accent)}.md.svelte-cxb0dt code{font-family:var(--mono);background:var(--bg-card);border:1px solid var(--border-soft,var(--border));border-radius:4px;padding:.1em .35em;font-size:.92em}.md.svelte-cxb0dt pre{background:var(--bg-card);border:1px solid var(--border);border-radius:6px;padding:8px 10px;overflow-x:auto}.md.svelte-cxb0dt pre code{background:0 0;border:none;padding:0;font-size:12px;line-height:1.45}.md.svelte-cxb0dt blockquote{border-left:3px solid var(--border);color:var(--text-dim);padding-left:10px}.md.svelte-cxb0dt hr{border:none;border-top:1px solid var(--border);margin:.75em 0}.md.svelte-cxb0dt table{border-collapse:collapse;width:100%;font-size:12.5px}.md.svelte-cxb0dt th,.md.svelte-cxb0dt td{border:1px solid var(--border);text-align:left;padding:4px 8px}.md.svelte-cxb0dt th{background:var(--bg-card);font-weight:600}.perm-actions.svelte-1l4yk48{flex-wrap:wrap;gap:8px;display:flex}.perm-actions.svelte-1l4yk48 button:where(.svelte-1l4yk48){border:1px solid var(--border);background:var(--bg-elev);color:var(--text);border-radius:0;padding:5px 10px;font-size:12px}.perm-actions.svelte-1l4yk48 .allow:where(.svelte-1l4yk48),.perm-actions.svelte-1l4yk48 .allow-all:where(.svelte-1l4yk48){background:var(--ok-bg);border-color:var(--ok);color:var(--ok)}.perm-actions.svelte-1l4yk48 .deny:where(.svelte-1l4yk48),.perm-actions.svelte-1l4yk48 .deny-all:where(.svelte-1l4yk48){background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger)}.log.svelte-18syxl5{flex-direction:column;gap:6px;min-height:0;font-size:13px;line-height:1.45;display:flex;overflow-y:auto}p.svelte-18syxl5{white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.user.svelte-18syxl5{background:var(--accent-soft);border:1px solid var(--btn-primary-border);border-radius:0;align-self:flex-end;max-width:90%;padding:6px 10px}.tag.svelte-18syxl5{text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint);font-size:10px;display:block}.message.svelte-18syxl5{color:var(--text);max-width:100%}.thought.svelte-18syxl5{color:var(--text-faint);font-size:12px}.thought.svelte-18syxl5 summary:where(.svelte-18syxl5){cursor:pointer;font-style:italic}.thought.svelte-18syxl5 p:where(.svelte-18syxl5){max-height:200px;margin-top:4px;overflow-y:auto}.tool.svelte-18syxl5{font-family:var(--mono);color:var(--text-dim);gap:6px;font-size:12px;display:flex}.tool.svelte-18syxl5 .mark:where(.svelte-18syxl5){width:12px;color:var(--ok);flex:none}.tool.failed.svelte-18syxl5 .mark:where(.svelte-18syxl5),.tool.failed.svelte-18syxl5 .title:where(.svelte-18syxl5){color:var(--danger)}.tool.svelte-18syxl5 .title:where(.svelte-18syxl5){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.permission.svelte-18syxl5{color:var(--warn);font-size:12px}.permission.allowed.svelte-18syxl5{color:var(--ok)}.permission.pending.svelte-18syxl5{border:1px solid var(--warn);background:var(--bg-card);color:var(--text);border-radius:0;padding:8px 10px}.perm-head.svelte-18syxl5{text-transform:uppercase;letter-spacing:.05em;color:var(--warn);flex-wrap:wrap;align-items:center;gap:8px;font-size:11px;display:flex}.perm-head.svelte-18syxl5 .kind:where(.svelte-18syxl5){color:var(--text-faint);font-family:var(--mono);text-transform:none;letter-spacing:0}.perm-head.svelte-18syxl5 .counter:where(.svelte-18syxl5){font-variant-numeric:tabular-nums;color:var(--text-dim);text-transform:none;letter-spacing:0;font-family:var(--mono);margin-left:auto}.perm-head.svelte-18syxl5 .nav:where(.svelte-18syxl5){gap:2px;display:flex}.nav-btn.svelte-18syxl5{border:1px solid var(--border);background:var(--bg-elev);color:var(--text-dim);border-radius:0;padding:2px 6px;font-size:11px;line-height:1.2}.perm-subtitle.svelte-18syxl5{color:var(--text-faint);margin:4px 0 0;font-size:11.5px}.perm-title.svelte-18syxl5{font-family:var(--mono);margin:4px 0 0;font-size:12px}.perm-command.svelte-18syxl5{font-family:var(--mono);white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;background:var(--bg-elev);border:1px solid var(--border);border-radius:0;max-width:100%;margin:6px 0 0;padding:8px 10px;font-size:11.5px;line-height:1.4}.perm-command.collapsed.svelte-18syxl5{max-height:10.5em;overflow:hidden}.perm-expand.svelte-18syxl5{color:var(--accent);cursor:pointer;background:0 0;border:none;border-radius:0;margin:4px 0 0;padding:0;font-size:11.5px;text-decoration:underline}.perm-expand.svelte-18syxl5:hover{color:var(--text)}.perm-reason.svelte-18syxl5{color:var(--text-faint);margin:2px 0 0;font-size:11.5px}.permission.pending.svelte-18syxl5 .perm-actions{margin-top:8px}.permission.svelte-18syxl5 span:where(.svelte-18syxl5){color:var(--text-faint)}.plan.svelte-18syxl5{color:var(--text-dim);margin:0;padding-left:18px;font-size:12px}.plan.svelte-18syxl5 li.done:where(.svelte-18syxl5){color:var(--text-faint);text-decoration:line-through}.review.svelte-18syxl5{border-radius:0;padding:6px 10px;font-size:12px}.review.ok.svelte-18syxl5{background:var(--ok-bg);color:var(--ok)}.review.bad.svelte-18syxl5 .retry:where(.svelte-18syxl5){border:1px solid var(--danger-border);background:var(--bg-elev);color:var(--text);cursor:pointer;border-radius:0;margin-top:8px;padding:5px 12px;font-size:12px}.review.bad.svelte-18syxl5 .retry:where(.svelte-18syxl5):hover:not(:disabled){border-color:var(--accent)}.review.bad.svelte-18syxl5 .retry:where(.svelte-18syxl5):disabled{opacity:.55;cursor:default}.review.bad.svelte-18syxl5,.error.svelte-18syxl5{background:var(--danger-bg);border:1px solid var(--danger-border);color:var(--danger);border-radius:0;padding:6px 10px;font-size:12px}.review.svelte-18syxl5 ul:where(.svelte-18syxl5){margin:4px 0 0;padding-left:16px}.note.svelte-18syxl5{color:var(--text-faint);font-size:12px}.working.svelte-18syxl5{gap:4px;padding:4px 0;display:flex}.working.svelte-18syxl5 span:where(.svelte-18syxl5){background:var(--text-faint);border-radius:50%;width:6px;height:6px;animation:1.2s ease-in-out infinite svelte-18syxl5-blink}.working.svelte-18syxl5 span:where(.svelte-18syxl5):nth-child(2){animation-delay:.2s}.working.svelte-18syxl5 span:where(.svelte-18syxl5):nth-child(3){animation-delay:.4s}@keyframes svelte-18syxl5-blink{0%,80%,to{opacity:.2}40%{opacity:1}}.trust.svelte-3jjxns{border:1px solid var(--border);background:var(--bg-card);text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;width:100%;font:inherit;border-radius:0;flex:none;align-items:center;gap:8px;padding:5px 8px;display:flex}.trust.inline.svelte-3jjxns{width:auto;max-width:100%;padding:4px 8px}.trust.on.svelte-3jjxns{border-color:color-mix(in srgb, var(--ok) 45%, var(--border));background:var(--ok-bg)}.trust.svelte-3jjxns:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.switch.svelte-3jjxns{border:1px solid var(--border);background:var(--bg-elev);border-radius:999px;flex:none;width:30px;height:16px;transition:background .15s,border-color .15s;position:relative}.trust.on.svelte-3jjxns .switch:where(.svelte-3jjxns){background:var(--ok);border-color:var(--ok)}.knob.svelte-3jjxns{background:var(--text);opacity:.55;border-radius:50%;width:12px;height:12px;transition:transform .15s,background .15s,opacity .15s;position:absolute;top:1px;left:1px}.trust.on.svelte-3jjxns .knob:where(.svelte-3jjxns){background:var(--bg-card);opacity:1;transform:translate(14px)}.trust-text.svelte-3jjxns{flex-wrap:wrap;align-items:baseline;gap:4px;min-width:0;line-height:1.2;display:flex}.trust-text.svelte-3jjxns strong:where(.svelte-3jjxns){color:var(--text);font-size:12px;font-weight:600}.trust-text.svelte-3jjxns small:where(.svelte-3jjxns){color:var(--text-faint);font-size:11px}.model-select.svelte-9wkprr{flex:1;width:100%;min-width:0;position:relative}.trigger.svelte-9wkprr{background:var(--bg-card);border:1px solid var(--border);width:100%;min-width:0;color:var(--text);font:inherit;text-align:left;cursor:pointer;align-items:center;gap:6px;padding:6px 10px;font-size:12px;display:flex}.trigger.svelte-9wkprr:hover:not(:disabled){border-color:var(--accent)}.trigger.svelte-9wkprr:disabled{opacity:.5;cursor:not-allowed}.title.svelte-9wkprr{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.title.muted.svelte-9wkprr{color:var(--text-faint)}.badges.svelte-9wkprr{flex-wrap:wrap;flex-shrink:0;justify-content:flex-end;gap:4px;max-width:45%;display:flex}.badge.svelte-9wkprr{border:1px solid var(--border);background:var(--bg-elev,var(--bg-card));color:var(--text-dim,var(--text-faint));font-size:10px;line-height:1.35;font-family:var(--mono,ui-monospace, monospace);white-space:nowrap;border-radius:0;padding:0 5px}.hint.svelte-9wkprr{color:var(--text-faint);font-size:10px;font-family:var(--mono,ui-monospace, monospace);flex-shrink:0}.caret.svelte-9wkprr{opacity:.7;color:var(--text-dim);flex-shrink:0}.model-select.open.svelte-9wkprr .caret:where(.svelte-9wkprr){transform:rotate(180deg)}.menu.svelte-9wkprr{z-index:40;border:1px solid var(--border);background:var(--bg-card);flex-direction:column;max-height:min(360px,50vh);padding:4px;display:flex;position:absolute;inset:calc(100% + 4px) 0 auto;overflow:auto;box-shadow:0 8px 24px #0000002e}.model-select.drop-up.svelte-9wkprr .menu:where(.svelte-9wkprr){top:auto;bottom:calc(100% + 4px);box-shadow:0 -8px 24px #0000002e}.option.svelte-9wkprr{width:100%;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:2px;align-items:center;gap:6px;padding:6px 8px;font-size:12px;display:flex}.option.svelte-9wkprr:hover,.option.selected.svelte-9wkprr{background:var(--accent-soft)}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as e,y as t}from"../chunks/DPfXzQnm.js";export{t as load_css,e as start};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|