@jpkme/diff-review 0.1.16 → 0.1.18

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.
Files changed (154) hide show
  1. package/README.md +22 -14
  2. package/bin/diff-review.mjs +220 -29
  3. package/lib/acp.mjs +86 -10
  4. package/lib/agent-login.mjs +848 -36
  5. package/lib/agent-login.test.mjs +538 -0
  6. package/lib/agents.mjs +0 -39
  7. package/lib/agents.test.mjs +17 -24
  8. package/lib/extract-cache.test.mjs +162 -162
  9. package/lib/git.mjs +25 -9
  10. package/lib/model-label.mjs +20 -4
  11. package/lib/model-label.test.mjs +15 -2
  12. package/lib/prompt.mjs +12 -10
  13. package/lib/prompt.test.mjs +12 -0
  14. package/lib/review-meta.mjs +11 -3
  15. package/lib/review-meta.test.mjs +19 -2
  16. package/lib/review-prep.mjs +63 -63
  17. package/lib/validate.mjs +1 -1
  18. package/lib/wait-output.test.mjs +1 -1
  19. package/package.json +2 -2
  20. package/web/build/client/_app/immutable/assets/0.DdOl5Uve.css +1 -0
  21. package/web/build/client/_app/immutable/assets/0.DdOl5Uve.css.br +0 -0
  22. package/web/build/client/_app/immutable/assets/0.DdOl5Uve.css.gz +0 -0
  23. package/web/build/client/_app/immutable/assets/2.CQmxVXnC.css +1 -0
  24. package/web/build/client/_app/immutable/assets/2.CQmxVXnC.css.br +0 -0
  25. package/web/build/client/_app/immutable/assets/2.CQmxVXnC.css.gz +0 -0
  26. package/web/build/client/_app/immutable/assets/3.BVJgADrM.css +1 -0
  27. package/web/build/client/_app/immutable/assets/3.BVJgADrM.css.br +0 -0
  28. package/web/build/client/_app/immutable/assets/3.BVJgADrM.css.gz +0 -0
  29. package/web/build/client/_app/immutable/assets/storage.Ztmr3s84.css +1 -0
  30. package/web/build/client/_app/immutable/assets/storage.Ztmr3s84.css.br +0 -0
  31. package/web/build/client/_app/immutable/assets/storage.Ztmr3s84.css.gz +0 -0
  32. package/web/build/client/_app/immutable/chunks/{cYiFfRa3.js → -cMMFbSG.js} +1 -1
  33. package/web/build/client/_app/immutable/chunks/-cMMFbSG.js.br +2 -0
  34. package/web/build/client/_app/immutable/chunks/-cMMFbSG.js.gz +0 -0
  35. package/web/build/client/_app/immutable/chunks/0vBZPdKl.js +215 -0
  36. package/web/build/client/_app/immutable/chunks/0vBZPdKl.js.br +0 -0
  37. package/web/build/client/_app/immutable/chunks/0vBZPdKl.js.gz +0 -0
  38. package/web/build/client/_app/immutable/chunks/B-2kfLeA.js +1 -0
  39. package/web/build/client/_app/immutable/chunks/B-2kfLeA.js.br +0 -0
  40. package/web/build/client/_app/immutable/chunks/B-2kfLeA.js.gz +0 -0
  41. package/web/build/client/_app/immutable/chunks/{DHO7NTh1.js → BMoYpzpA.js} +2 -2
  42. package/web/build/client/_app/immutable/chunks/BMoYpzpA.js.br +0 -0
  43. package/web/build/client/_app/immutable/chunks/BMoYpzpA.js.gz +0 -0
  44. package/web/build/client/_app/immutable/chunks/{CXhIC34H.js → DA0YnpGR.js} +3 -3
  45. package/web/build/client/_app/immutable/chunks/DA0YnpGR.js.br +0 -0
  46. package/web/build/client/_app/immutable/chunks/DA0YnpGR.js.gz +0 -0
  47. package/web/build/client/_app/immutable/entry/app.CT6P0WMK.js +2 -0
  48. package/web/build/client/_app/immutable/entry/app.CT6P0WMK.js.br +0 -0
  49. package/web/build/client/_app/immutable/entry/app.CT6P0WMK.js.gz +0 -0
  50. package/web/build/client/_app/immutable/entry/start.U0TDB-jm.js +1 -0
  51. package/web/build/client/_app/immutable/entry/start.U0TDB-jm.js.br +0 -0
  52. package/web/build/client/_app/immutable/entry/start.U0TDB-jm.js.gz +0 -0
  53. package/web/build/client/_app/immutable/nodes/0.ii5weUjH.js +1 -0
  54. package/web/build/client/_app/immutable/nodes/0.ii5weUjH.js.br +0 -0
  55. package/web/build/client/_app/immutable/nodes/0.ii5weUjH.js.gz +0 -0
  56. package/web/build/client/_app/immutable/nodes/1.CM10dYkJ.js +1 -0
  57. package/web/build/client/_app/immutable/nodes/1.CM10dYkJ.js.br +2 -0
  58. package/web/build/client/_app/immutable/nodes/1.CM10dYkJ.js.gz +0 -0
  59. package/web/build/client/_app/immutable/nodes/2.B1LHk3LQ.js +12 -0
  60. package/web/build/client/_app/immutable/nodes/2.B1LHk3LQ.js.br +0 -0
  61. package/web/build/client/_app/immutable/nodes/2.B1LHk3LQ.js.gz +0 -0
  62. package/web/build/client/_app/immutable/nodes/3.BQOdjQBQ.js +340 -0
  63. package/web/build/client/_app/immutable/nodes/3.BQOdjQBQ.js.br +0 -0
  64. package/web/build/client/_app/immutable/nodes/3.BQOdjQBQ.js.gz +0 -0
  65. package/web/build/client/_app/version.json +1 -1
  66. package/web/build/client/_app/version.json.br +0 -0
  67. package/web/build/client/_app/version.json.gz +0 -0
  68. package/web/build/handler.js +3 -3
  69. package/web/build/index.js +3 -3
  70. package/web/build/server/chunks/0-BUdytb9b.js +11 -0
  71. package/web/build/server/chunks/{0-D7NSxn1-.js.map → 0-BUdytb9b.js.map} +1 -1
  72. package/web/build/server/chunks/1-DRokSBkY.js +7 -0
  73. package/web/build/server/chunks/{1-DboYz8Fw.js.map → 1-DRokSBkY.js.map} +1 -1
  74. package/web/build/server/chunks/2-BxyzaJTR.js +7 -0
  75. package/web/build/server/chunks/2-BxyzaJTR.js.map +1 -0
  76. package/web/build/server/chunks/3-D8o0VWkj.js +7 -0
  77. package/web/build/server/chunks/{3-DgJ_LmTL.js.map → 3-D8o0VWkj.js.map} +1 -1
  78. package/web/build/server/chunks/{_server.ts-CP5cRLhW.js → _server.ts-kax5Szn0.js} +5 -4
  79. package/web/build/server/chunks/_server.ts-kax5Szn0.js.map +1 -0
  80. package/web/build/server/chunks/_server.ts-vS3A9t3f.js +123 -0
  81. package/web/build/server/chunks/_server.ts-vS3A9t3f.js.map +1 -0
  82. package/web/build/server/chunks/{agent-sessions-2XGojSJ_.js → agent-sessions-BArYLTW6.js} +1023 -135
  83. package/web/build/server/chunks/agent-sessions-BArYLTW6.js.map +1 -0
  84. package/web/build/server/chunks/{git-review-jZ_JJYfv.js → git-review-hZSqk_1P.js} +54 -21
  85. package/web/build/server/chunks/{git-review-jZ_JJYfv.js.map → git-review-hZSqk_1P.js.map} +1 -1
  86. package/web/build/server/chunks/{handler-B_8yUXji.js → handler-DbFqzg7l.js} +3 -3
  87. package/web/build/server/chunks/{handler-B_8yUXji.js.map → handler-DbFqzg7l.js.map} +1 -1
  88. package/web/build/server/chunks/{hooks.server-rF_eBCff.js → hooks.server-BEl7rVad.js} +4 -3
  89. package/web/build/server/chunks/{hooks.server-rF_eBCff.js.map → hooks.server-BEl7rVad.js.map} +1 -1
  90. package/web/build/server/chunks/{index.js-CGw8_Q7V.js → index.js-BB9DZBdR.js} +4 -4
  91. package/web/build/server/chunks/index.js-BB9DZBdR.js.map +1 -0
  92. package/web/build/server/chunks/manifest.js-Dk6YX1jw.js +65 -0
  93. package/web/build/server/chunks/manifest.js-Dk6YX1jw.js.map +1 -0
  94. package/web/build/server/chunks/{remote-1g4ayag-BMpjk8UD.js → remote-1g4ayag-Bz1vj8X1.js} +6 -6
  95. package/web/build/server/chunks/remote-1g4ayag-Bz1vj8X1.js.map +1 -0
  96. package/web/build/server/chunks/{remote-wh6t6j-dYLCg8ks.js → remote-wh6t6j-DSwM3S9h.js} +44 -10
  97. package/web/build/server/chunks/remote-wh6t6j-DSwM3S9h.js.map +1 -0
  98. package/web/build/server/chunks/{validate-Da6e71V3.js → validate-CXjTRGnR.js} +34 -17
  99. package/web/build/server/chunks/validate-CXjTRGnR.js.map +1 -0
  100. package/web/build/client/_app/immutable/assets/0.BKRG1f36.css +0 -1
  101. package/web/build/client/_app/immutable/assets/0.BKRG1f36.css.br +0 -0
  102. package/web/build/client/_app/immutable/assets/0.BKRG1f36.css.gz +0 -0
  103. package/web/build/client/_app/immutable/assets/2.C4whE4xz.css +0 -1
  104. package/web/build/client/_app/immutable/assets/2.C4whE4xz.css.br +0 -0
  105. package/web/build/client/_app/immutable/assets/2.C4whE4xz.css.gz +0 -0
  106. package/web/build/client/_app/immutable/assets/3.DB-bJJq2.css +0 -1
  107. package/web/build/client/_app/immutable/assets/3.DB-bJJq2.css.br +0 -0
  108. package/web/build/client/_app/immutable/assets/3.DB-bJJq2.css.gz +0 -0
  109. package/web/build/client/_app/immutable/assets/storage.BxR6930R.css +0 -1
  110. package/web/build/client/_app/immutable/assets/storage.BxR6930R.css.br +0 -0
  111. package/web/build/client/_app/immutable/assets/storage.BxR6930R.css.gz +0 -0
  112. package/web/build/client/_app/immutable/chunks/BLMWhW3J.js +0 -1
  113. package/web/build/client/_app/immutable/chunks/BLMWhW3J.js.br +0 -1
  114. package/web/build/client/_app/immutable/chunks/BLMWhW3J.js.gz +0 -0
  115. package/web/build/client/_app/immutable/chunks/CXhIC34H.js.br +0 -0
  116. package/web/build/client/_app/immutable/chunks/CXhIC34H.js.gz +0 -0
  117. package/web/build/client/_app/immutable/chunks/DHO7NTh1.js.br +0 -0
  118. package/web/build/client/_app/immutable/chunks/DHO7NTh1.js.gz +0 -0
  119. package/web/build/client/_app/immutable/chunks/DpxY75GB.js +0 -215
  120. package/web/build/client/_app/immutable/chunks/DpxY75GB.js.br +0 -0
  121. package/web/build/client/_app/immutable/chunks/DpxY75GB.js.gz +0 -0
  122. package/web/build/client/_app/immutable/chunks/cYiFfRa3.js.br +0 -1
  123. package/web/build/client/_app/immutable/chunks/cYiFfRa3.js.gz +0 -0
  124. package/web/build/client/_app/immutable/entry/app.CCv57mvp.js +0 -2
  125. package/web/build/client/_app/immutable/entry/app.CCv57mvp.js.br +0 -0
  126. package/web/build/client/_app/immutable/entry/app.CCv57mvp.js.gz +0 -0
  127. package/web/build/client/_app/immutable/entry/start.B012TSbW.js +0 -1
  128. package/web/build/client/_app/immutable/entry/start.B012TSbW.js.br +0 -1
  129. package/web/build/client/_app/immutable/entry/start.B012TSbW.js.gz +0 -0
  130. package/web/build/client/_app/immutable/nodes/0.slrnBioC.js +0 -1
  131. package/web/build/client/_app/immutable/nodes/0.slrnBioC.js.br +0 -0
  132. package/web/build/client/_app/immutable/nodes/0.slrnBioC.js.gz +0 -0
  133. package/web/build/client/_app/immutable/nodes/1.Bs5JdO4l.js +0 -1
  134. package/web/build/client/_app/immutable/nodes/1.Bs5JdO4l.js.br +0 -0
  135. package/web/build/client/_app/immutable/nodes/1.Bs5JdO4l.js.gz +0 -0
  136. package/web/build/client/_app/immutable/nodes/2.D5ULH3EX.js +0 -10
  137. package/web/build/client/_app/immutable/nodes/2.D5ULH3EX.js.br +0 -0
  138. package/web/build/client/_app/immutable/nodes/2.D5ULH3EX.js.gz +0 -0
  139. package/web/build/client/_app/immutable/nodes/3.hjzQQgyj.js +0 -173
  140. package/web/build/client/_app/immutable/nodes/3.hjzQQgyj.js.br +0 -0
  141. package/web/build/client/_app/immutable/nodes/3.hjzQQgyj.js.gz +0 -0
  142. package/web/build/server/chunks/0-D7NSxn1-.js +0 -11
  143. package/web/build/server/chunks/1-DboYz8Fw.js +0 -7
  144. package/web/build/server/chunks/2-B7LX817Q.js +0 -7
  145. package/web/build/server/chunks/2-B7LX817Q.js.map +0 -1
  146. package/web/build/server/chunks/3-DgJ_LmTL.js +0 -7
  147. package/web/build/server/chunks/_server.ts-CP5cRLhW.js.map +0 -1
  148. package/web/build/server/chunks/agent-sessions-2XGojSJ_.js.map +0 -1
  149. package/web/build/server/chunks/index.js-CGw8_Q7V.js.map +0 -1
  150. package/web/build/server/chunks/manifest.js-CImZFS6G.js +0 -58
  151. package/web/build/server/chunks/manifest.js-CImZFS6G.js.map +0 -1
  152. package/web/build/server/chunks/remote-1g4ayag-BMpjk8UD.js.map +0 -1
  153. package/web/build/server/chunks/remote-wh6t6j-dYLCg8ks.js.map +0 -1
  154. package/web/build/server/chunks/validate-Da6e71V3.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-sessions-BArYLTW6.js","sources":["../../../.svelte-kit/output/server/chunks/agent-sessions.js"],"sourcesContent":["import { A as tryResolveGitRoot, C as writeSessionRef, E as getRemoteUrl, F as makeOutputFilename, I as outputRelPath, M as loadReviewConfig, N as OUTPUT_DIR, S as writeHandoffChat, b as writeDiffCache, d as validateAgainst, f as decodePayload, g as ensureReviewDir, h as companionPaths, j as globMatch, m as loadBranchDiff, p as extractBranchDiff, s as REVIEW_SCHEMA, u as reviewIssues, v as readDiffCache, x as writeDiffText } from \"./validate.js\";\nimport { accessSync, constants, copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { spawn, spawnSync } from \"node:child_process\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { basename, delimiter, dirname, isAbsolute, join, normalize, resolve } from \"node:path\";\nimport { Readable, Writable } from \"node:stream\";\nimport * as acp from \"@agentclientprotocol/sdk\";\nimport { randomBytes } from \"node:crypto\";\n//#region ../lib/agents.mjs\n/**\n* Agentes de código que la CLI puede lanzar con el prompt (`--agent`).\n*\n* No hay un registro de agentes en ningún SO: se detectan por nombre en el PATH más algunas rutas fijas\n* conocidas (p. ej. el Claude Code que trae la app de escritorio en Windows). El prompt viaja por stdin, así\n* no se toca el portapapeles ni se choca con el límite de largo de la línea de comandos de los shims `.cmd`.\n*/\n/**\n* @typedef {{ value: string, label: string, hint?: string }} ModelOption\n* @typedef {{ model?: string, outputFilename: string }} RunSpec\n* @typedef {{\n* id: string,\n* label: string,\n* bins: string[],\n* extraPaths?: (ctx: DetectContext) => string[],\n* models: ModelOption[],\n* configuredModel?: (ctx: DetectContext) => { model: string, source: string } | null,\n* args: (spec: RunSpec) => string[],\n* acp?: (ctx: { path: string }) => AcpLaunch,\n* }} AgentDef\n* @typedef {{ file: string, args: string[], env?: Record<string, string>, sessionMeta?: Record<string, unknown> }} AcpLaunch\n* `env` se suma al del proceso; `sessionMeta` va como `_meta` en `session/new` / `session/load`.\n* @typedef {{ env: NodeJS.ProcessEnv, platform: NodeJS.Platform, home: string }} DetectContext\n* @typedef {{ def: AgentDef, path: string }} DetectedAgent\n*/\n/** @param {string} file */\nfunction readJson(file) {\n\ttry {\n\t\treturn JSON.parse(readFileSync(file, \"utf8\"));\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** Versiones tipo `2.1.286` de mayor a menor (las que no parsean, al final). */\nfunction byVersionDesc(a, b) {\n\tconst pa = a.split(\".\").map(Number);\n\tconst pb = b.split(\".\").map(Number);\n\tfor (let i = 0; i < Math.max(pa.length, pb.length); i++) {\n\t\tconst d = (pb[i] || 0) - (pa[i] || 0);\n\t\tif (d) return Number.isNaN(d) ? 0 : d;\n\t}\n\treturn 0;\n}\n/** `<root>/<versión>/<hash>/<exe>` → rutas, de la versión más nueva a la más vieja. */\nfunction versionedBinaries(root, exe) {\n\t/** @type {string[]} */\n\tconst out = [];\n\tlet versions;\n\ttry {\n\t\tversions = readdirSync(root).sort(byVersionDesc);\n\t} catch {\n\t\treturn out;\n\t}\n\tfor (const version of versions) {\n\t\tlet entries;\n\t\ttry {\n\t\t\tentries = readdirSync(join(root, version));\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const entry of entries) out.push(join(root, version, entry, exe));\n\t}\n\treturn out;\n}\n/**\n* Carpeta de configuración para Cursor por ACP: la del usuario sin su allowlist. Cursor aprueba solo lo que matchee\n* `permissions.allow` mirando el nombre del comando (`Shell(echo)` deja pasar `echo x > archivo`); vaciándola,\n* cada comando pasa por la política de diff-review. El login no vive ahí, así que se conserva. El modelo elegido\n* por ACP se guarda en esta carpeta y no pisa el default del usuario.\n*/\nfunction cursorAcpConfigDir(ctx) {\n\tconst c = context(ctx);\n\tconst userDir = c.env.CURSOR_CONFIG_DIR?.trim() || (c.env.XDG_CONFIG_HOME?.trim() ? join(c.env.XDG_CONFIG_HOME, \"cursor\") : join(c.home, \".cursor\"));\n\tconst dir = join(tmpdir(), \"diff-review\", \"cursor-config\");\n\tmkdirSync(dir, { recursive: true });\n\tconst config = readJson(join(userDir, \"cli-config.json\")) ?? {};\n\twriteFileSync(join(dir, \"cli-config.json\"), JSON.stringify({\n\t\t...config,\n\t\tpermissions: {\n\t\t\tallow: [],\n\t\t\tdeny: config.permissions?.deny ?? []\n\t\t},\n\t\tapprovalMode: \"allowlist\"\n\t}, null, 2));\n\tconst userAcp = join(userDir, \"acp-config.json\");\n\tif (existsSync(userAcp)) copyFileSync(userAcp, join(dir, \"acp-config.json\"));\n\telse rmSync(join(dir, \"acp-config.json\"), { force: true });\n\treturn dir;\n}\n/** Adaptador ACP de Claude Code (antes `@zed-industries/claude-agent-acp`). */\nvar CLAUDE_ACP_PACKAGE = \"@agentclientprotocol/claude-agent-acp@^0.91.0\";\n/** @type {AgentDef[]} */\nvar AGENTS = [\n\t{\n\t\tid: \"claude\",\n\t\tlabel: \"Claude Code\",\n\t\tbins: [\"claude\"],\n\t\textraPaths: ({ env, platform, home }) => {\n\t\t\tif (platform === \"win32\") return versionedBinaries(join(env.APPDATA || join(home, \"AppData\", \"Roaming\"), \"Claude\", \"claude-code\"), \"claude.exe\");\n\t\t\tconst paths = [join(home, \".local\", \"bin\", \"claude\"), join(home, \".claude\", \"local\", \"claude\")];\n\t\t\tif (platform === \"darwin\") paths.push(...versionedBinaries(join(home, \"Library\", \"Application Support\", \"Claude\", \"claude-code\"), \"claude\"));\n\t\t\treturn paths;\n\t\t},\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tvalue: \"opus\",\n\t\t\t\tlabel: \"opus\",\n\t\t\t\thint: \"el más capaz\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: \"sonnet\",\n\t\t\t\tlabel: \"sonnet\",\n\t\t\t\thint: \"equilibrado\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: \"haiku\",\n\t\t\t\tlabel: \"haiku\",\n\t\t\t\thint: \"el más rápido\"\n\t\t\t}\n\t\t],\n\t\tconfiguredModel: ({ env, home }) => {\n\t\t\tif (env.ANTHROPIC_MODEL) return {\n\t\t\t\tmodel: env.ANTHROPIC_MODEL,\n\t\t\t\tsource: \"ANTHROPIC_MODEL\"\n\t\t\t};\n\t\t\tconst model = readJson(join(home, \".claude\", \"settings.json\"))?.model;\n\t\t\treturn typeof model === \"string\" && model ? {\n\t\t\t\tmodel,\n\t\t\t\tsource: \"~/.claude/settings.json\"\n\t\t\t} : null;\n\t\t},\n\t\targs: ({ model, outputFilename }) => [\n\t\t\t\"-p\",\n\t\t\t...model ? [\"--model\", model] : [],\n\t\t\t\"--allowedTools\",\n\t\t\t\"Read\",\n\t\t\t\"Grep\",\n\t\t\t\"Glob\",\n\t\t\t\"Bash(git:*)\",\n\t\t\t\"Bash(npx --yes @jpkme/diff-review validate:*)\",\n\t\t\t`Edit(./${outputRelPath(outputFilename)})`\n\t\t],\n\t\tacp: () => {\n\t\t\tconst local = findOnPath(\"claude-agent-acp\", context());\n\t\t\treturn {\n\t\t\t\t...local ? {\n\t\t\t\t\tfile: local,\n\t\t\t\t\targs: []\n\t\t\t\t} : {\n\t\t\t\t\tfile: \"npx\",\n\t\t\t\t\targs: [\"--yes\", CLAUDE_ACP_PACKAGE]\n\t\t\t\t},\n\t\t\t\tsessionMeta: { claudeCode: { options: {\n\t\t\t\t\ttools: [\n\t\t\t\t\t\t\"Read\",\n\t\t\t\t\t\t\"Grep\",\n\t\t\t\t\t\t\"Glob\",\n\t\t\t\t\t\t\"Bash\",\n\t\t\t\t\t\t\"Edit\",\n\t\t\t\t\t\t\"Write\"\n\t\t\t\t\t],\n\t\t\t\t\tsettingSources: []\n\t\t\t\t} } }\n\t\t\t};\n\t\t}\n\t},\n\t{\n\t\tid: \"cursor\",\n\t\tlabel: \"Cursor CLI\",\n\t\tbins: [\"cursor-agent\"],\n\t\textraPaths: ({ env, platform, home }) => platform === \"win32\" ? [join(env.LOCALAPPDATA || join(home, \"AppData\", \"Local\"), \"cursor-agent\", \"cursor-agent.cmd\")] : [join(home, \".local\", \"bin\", \"cursor-agent\")],\n\t\tmodels: [],\n\t\tconfiguredModel: ({ home }) => {\n\t\t\tconst config = readJson(join(home, \".cursor\", \"cli-config.json\"));\n\t\t\tconst id = config?.selectedModel?.modelId ?? config?.model?.modelId;\n\t\t\tif (typeof id !== \"string\" || !id) return null;\n\t\t\treturn {\n\t\t\t\tmodel: id === \"default\" ? \"auto\" : id,\n\t\t\t\tsource: \"~/.cursor/cli-config.json\"\n\t\t\t};\n\t\t},\n\t\targs: ({ model }) => [\n\t\t\t\"-p\",\n\t\t\t\"--output-format\",\n\t\t\t\"text\",\n\t\t\t\"--trust\",\n\t\t\t\"--force\",\n\t\t\t...model ? [\"--model\", model] : []\n\t\t],\n\t\tacp: ({ path }) => ({\n\t\t\tfile: path,\n\t\t\targs: [\"acp\"],\n\t\t\tenv: { CURSOR_CONFIG_DIR: cursorAcpConfigDir() }\n\t\t})\n\t},\n\t{\n\t\tid: \"copilot\",\n\t\tlabel: \"GitHub Copilot CLI\",\n\t\tbins: [\"copilot\"],\n\t\tmodels: [{\n\t\t\tvalue: \"auto\",\n\t\t\tlabel: \"auto\",\n\t\t\thint: \"Copilot elige\"\n\t\t}],\n\t\tconfiguredModel: ({ env, home }) => {\n\t\t\tconst model = readJson(join(env.COPILOT_HOME || join(home, \".copilot\"), \"settings.json\"))?.model;\n\t\t\tconst source = env.COPILOT_HOME ? \"$COPILOT_HOME/settings.json\" : \"~/.copilot/settings.json\";\n\t\t\treturn typeof model === \"string\" && model ? {\n\t\t\t\tmodel,\n\t\t\t\tsource\n\t\t\t} : null;\n\t\t},\n\t\targs: ({ model, outputFilename }) => [\n\t\t\t\"-s\",\n\t\t\t...model ? [\"--model\", model] : [],\n\t\t\t\"--allow-tool\",\n\t\t\t\"shell(git:*)\",\n\t\t\t\"--allow-tool\",\n\t\t\t\"shell(npx:*)\",\n\t\t\t\"--allow-tool\",\n\t\t\t`write(${outputRelPath(outputFilename)})`\n\t\t],\n\t\tacp: ({ path }) => ({\n\t\t\tfile: path,\n\t\t\targs: [\"--acp\"]\n\t\t})\n\t}\n];\n/** @param {string} file @param {NodeJS.Platform} platform */\nfunction isExecutable(file, platform) {\n\ttry {\n\t\tif (!statSync(file).isFile()) return false;\n\t\tif (platform !== \"win32\") accessSync(file, constants.X_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n/** Busca `name` en el PATH (con las extensiones de PATHEXT en Windows). */\nfunction findOnPath(name, { env, platform }) {\n\tconst dirs = String(env.PATH || env.Path || \"\").split(platform === \"win32\" ? \";\" : delimiter).filter(Boolean);\n\tconst exts = platform === \"win32\" ? String(env.PATHEXT || \".COM;.EXE;.BAT;.CMD\").split(\";\").filter(Boolean) : [\"\"];\n\tfor (const dir of dirs) for (const ext of exts) {\n\t\tconst candidate = join(dir, name + ext.toLowerCase());\n\t\tif (isExecutable(candidate, platform)) return candidate;\n\t}\n\treturn null;\n}\n/** @param {Partial<DetectContext>} [ctx] */\nfunction context(ctx = {}) {\n\treturn {\n\t\tenv: ctx.env ?? process.env,\n\t\tplatform: ctx.platform ?? process.platform,\n\t\thome: ctx.home ?? homedir()\n\t};\n}\n/**\n* Agentes instalados, en el orden de `AGENTS`. Primero el PATH, después las rutas fijas.\n* @param {Partial<DetectContext>} [ctx]\n* @returns {DetectedAgent[]}\n*/\nfunction detectAgents(ctx) {\n\tconst c = context(ctx);\n\t/** @type {DetectedAgent[]} */\n\tconst found = [];\n\tfor (const def of AGENTS) {\n\t\tlet path = null;\n\t\tfor (const bin of def.bins) {\n\t\t\tpath = findOnPath(bin, c);\n\t\t\tif (path) break;\n\t\t}\n\t\tif (!path) path = (def.extraPaths?.(c) ?? []).find((p) => existsSync(p) && isExecutable(p, c.platform)) ?? null;\n\t\tif (path) found.push({\n\t\t\tdef,\n\t\t\tpath\n\t\t});\n\t}\n\treturn found;\n}\n/**\n* Opciones del select de modelo: primero el default del agente (marcado como inicial), después los conocidos.\n* Si el default configurado coincide con uno conocido, no se repite.\n* @param {AgentDef} def\n* @param {Partial<DetectContext>} [ctx]\n* @returns {{ options: ModelOption[], initialValue: string }}\n*/\nfunction modelChoices(def, ctx) {\n\tconst configured = def.configuredModel?.(context(ctx)) ?? null;\n\treturn {\n\t\toptions: [configured ? {\n\t\t\tvalue: \"\",\n\t\t\tlabel: `Por defecto (${configured.model})`,\n\t\t\thint: configured.source\n\t\t} : {\n\t\t\tvalue: \"\",\n\t\t\tlabel: \"Por defecto del agente\",\n\t\t\thint: \"no se pasa --model\"\n\t\t}, ...def.models.filter((m) => m.value !== configured?.model)],\n\t\tinitialValue: \"\"\n\t};\n}\n/** Comillas para cmd.exe (solo hace falta con los shims .cmd/.bat de npm). */\nfunction quoteForCmd(arg) {\n\treturn /^[\\w./:@=-]+$/.test(arg) ? arg : `\"${arg.replace(/\"/g, \"\\\"\\\"\")}\"`;\n}\n/**\n* `spawn` que también lanza los shims `.cmd`/`.bat` de npm en Windows (y `npx` a secas, que es uno de ellos).\n* @param {string} file\n* @param {string[]} args\n* @param {import('node:child_process').SpawnOptions} options\n*/\nfunction spawnCommand(file, args, options) {\n\tconst resolved = process.platform === \"win32\" && !/[\\\\/]/.test(file) ? findOnPath(file, context()) ?? file : file;\n\treturn process.platform === \"win32\" && /\\.(cmd|bat)$/i.test(resolved) ? spawn([resolved, ...args].map(quoteForCmd).join(\" \"), {\n\t\t...options,\n\t\tshell: true\n\t}) : spawn(resolved, args, options);\n}\n//#endregion\n//#region ../lib/acp-shell.mjs\n/**\n* Qué comandos de terminal puede correr el agente por ACP: git de solo lectura, comandos que solo leen (cat, grep,\n* find, sed -n …, y sus equivalentes de PowerShell) y el validate del paquete. Los paths tienen que quedar dentro\n* del repo.\n*\n* El comando se tokeniza respetando comillas (un `grep \"a\\|b\"` no es un pipe). Se aceptan `|`, `&&`, `||`, `;` y\n* descartar salida a /dev/null; cualquier otra redirección, `$(…)`, backticks o `&` lo rechazan.\n*\n* En PowerShell, `(Get-Content f).Count` llega como `(Get-Content` + `f).Count`: se quitan paréntesis de\n* agrupación y el `.Miembro` colgado al path/flag antes de evaluar la allowlist.\n*/\n/** @typedef {{ ok: true } | { ok: false, reason: string }} ShellCheck */\n/** Subcomandos de git que solo leen. */\nvar GIT_READ = /* @__PURE__ */ new Set([\n\t\"diff\",\n\t\"log\",\n\t\"show\",\n\t\"status\",\n\t\"merge-base\",\n\t\"rev-parse\",\n\t\"rev-list\",\n\t\"blame\",\n\t\"ls-files\",\n\t\"ls-tree\",\n\t\"cat-file\",\n\t\"describe\",\n\t\"shortlog\",\n\t\"name-rev\",\n\t\"for-each-ref\",\n\t\"grep\",\n\t\"whatchanged\"\n]);\n/** Flags de git que ejecutan algo o escriben archivos, en cualquier subcomando. */\nvar GIT_UNSAFE_FLAG = /^(--output|--ext-diff|-O|--open-files-in-pager)(=|$)/;\nvar BRANCH_LIST_FLAGS = /* @__PURE__ */ new Set([\n\t\"--show-current\",\n\t\"--list\",\n\t\"-a\",\n\t\"--all\",\n\t\"-r\",\n\t\"--remotes\",\n\t\"-v\",\n\t\"-vv\"\n]);\nvar CONFIG_READ_FLAGS = /* @__PURE__ */ new Set([\n\t\"--get\",\n\t\"--get-all\",\n\t\"--get-regexp\",\n\t\"--list\",\n\t\"-l\"\n]);\n/** Comandos que solo leen (o imprimen). Los de PowerShell van en minúscula: no distingue mayúsculas. */\nvar READ_COMMANDS = /* @__PURE__ */ new Set([\n\t\"cat\",\n\t\"head\",\n\t\"tail\",\n\t\"wc\",\n\t\"ls\",\n\t\"nl\",\n\t\"sort\",\n\t\"uniq\",\n\t\"cut\",\n\t\"tr\",\n\t\"grep\",\n\t\"egrep\",\n\t\"fgrep\",\n\t\"rg\",\n\t\"find\",\n\t\"sed\",\n\t\"file\",\n\t\"stat\",\n\t\"du\",\n\t\"diff\",\n\t\"cmp\",\n\t\"jq\",\n\t\"basename\",\n\t\"dirname\",\n\t\"realpath\",\n\t\"tree\",\n\t\"which\",\n\t\"type\",\n\t\"pwd\",\n\t\"echo\",\n\t\"printf\",\n\t\"true\",\n\t\"get-content\",\n\t\"gc\",\n\t\"select-string\",\n\t\"sls\",\n\t\"get-childitem\",\n\t\"gci\",\n\t\"dir\",\n\t\"measure-object\",\n\t\"measure\",\n\t\"select-object\",\n\t\"select\",\n\t\"sort-object\",\n\t\"get-location\",\n\t\"test-path\",\n\t\"resolve-path\",\n\t\"write-output\",\n\t\"out-string\",\n\t\"format-list\",\n\t\"format-table\"\n]);\n/** Comandos cuyos argumentos son texto, no paths. */\nvar TEXT_ARGS = /* @__PURE__ */ new Set([\n\t\"echo\",\n\t\"printf\",\n\t\"tr\",\n\t\"write-output\",\n\t\"which\",\n\t\"type\"\n]);\n/** Destinos de redirección que solo descartan salida. */\nvar DISCARD = /* @__PURE__ */ new Set([\n\t\"/dev/null\",\n\t\"nul\",\n\t\"$null\"\n]);\n/**\n* Paths de shell Unix → forma Windows cuando la política corre en win32:\n* - Git Bash: `/c/Users/...` → `C:/Users/...`\n* - WSL: `/mnt/c/Users/...` → `C:/Users/...`\n*/\nfunction toNativePath(p, platform) {\n\tif (platform === \"win32\") {\n\t\tconst wsl = /^\\/mnt\\/([a-zA-Z])(\\/|$)(.*)$/.exec(p);\n\t\tif (wsl) return `${wsl[1].toUpperCase()}:/${wsl[3]}`;\n\t\tconst msys = /^\\/([a-zA-Z])(\\/|$)(.*)$/.exec(p);\n\t\tif (msys) return `${msys[1].toUpperCase()}:/${msys[3]}`;\n\t}\n\treturn p;\n}\n/**\n* Resuelve symlinks cuando el path (o un ancestro) existe. Sin eso, un link\n* dentro del repo puede apuntar fuera y pasar `isInside` con solo `normalize`.\n* @param {string} path\n*/\nfunction canonicalPath$1(path) {\n\ttry {\n\t\treturn realpathSync(path);\n\t} catch {\n\t\tconst parts = [];\n\t\tlet cur = normalize(path);\n\t\tfor (;;) {\n\t\t\tconst parent = dirname(cur);\n\t\t\tif (!parent || parent === cur) return normalize(path);\n\t\t\tparts.unshift(basename(cur));\n\t\t\ttry {\n\t\t\t\treturn resolve(realpathSync(parent), ...parts);\n\t\t\t} catch {\n\t\t\t\tcur = parent;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction isInside$1(child, root, platform) {\n\tconst c = normalize(canonicalPath$1(child)).replace(/[\\\\/]+$/, \"\");\n\tconst r = normalize(canonicalPath$1(root)).replace(/[\\\\/]+$/, \"\");\n\tconst [cc, rr] = platform === \"win32\" ? [c.toLowerCase(), r.toLowerCase()] : [c, r];\n\treturn cc === rr || cc.startsWith(`${rr}\\\\`) || cc.startsWith(`${rr}/`);\n}\n/** ¿El argumento parece un path que puede salir del repo? (absoluto, `~` o con `..`). */\nfunction escapingPath(arg) {\n\treturn /^([a-zA-Z]:[\\\\/]|[\\\\/]|~)/.test(arg) || /(^|[\\\\/])\\.\\.([\\\\/]|$)/.test(arg);\n}\n/**\n* Parte el comando en cadenas (separadas por `&&`, `||`, `;`, saltos de línea) de pipelines (`|`) de argv.\n* @param {string} command\n* @returns {{ ok: true, pipelines: string[][][] } | { ok: false, reason: string }}\n*/\nfunction tokenizeShell(command) {\n\tconst src = String(command ?? \"\");\n\t/** @type {string[][][]} */\n\tconst pipelines = [];\n\t/** @type {string[][]} */\n\tlet pipeline = [];\n\t/** @type {string[]} */\n\tlet words = [];\n\tlet word = \"\";\n\tlet inWord = false;\n\t/** @type {null | \"'\" | '\"'} */\n\tlet quote = null;\n\tconst endWord = () => {\n\t\tif (inWord) words.push(word);\n\t\tword = \"\";\n\t\tinWord = false;\n\t};\n\tconst endSegment = () => {\n\t\tendWord();\n\t\tif (words.length) pipeline.push(words);\n\t\twords = [];\n\t};\n\tconst endPipeline = () => {\n\t\tendSegment();\n\t\tif (pipeline.length) pipelines.push(pipeline);\n\t\tpipeline = [];\n\t};\n\tconst fail = (reason) => ({\n\t\tok: false,\n\t\treason\n\t});\n\tfor (let i = 0; i < src.length; i++) {\n\t\tconst ch = src[i];\n\t\tconst next = src[i + 1];\n\t\tif (quote === \"'\") {\n\t\t\tif (ch === \"'\") quote = null;\n\t\t\telse word += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote === \"\\\"\") {\n\t\t\tif (ch === \"\\\"\") quote = null;\n\t\t\telse if (ch === \"`\") return fail(\"backticks\");\n\t\t\telse if (ch === \"$\" && next === \"(\") return fail(\"sustitución $(…)\");\n\t\t\telse if (ch === \"\\\\\" && next !== void 0 && \"\\\"\\\\$`\".includes(next)) {\n\t\t\t\tword += next;\n\t\t\t\ti++;\n\t\t\t} else word += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === \"\\\"\") {\n\t\t\tquote = ch;\n\t\t\tinWord = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\" && next !== void 0) {\n\t\t\tword += next;\n\t\t\tinWord = true;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"`\") return fail(\"backticks\");\n\t\tif (ch === \"$\" && next === \"(\") return fail(\"sustitución $(…)\");\n\t\tif (/\\s/.test(ch) && ch !== \"\\n\" && ch !== \"\\r\") {\n\t\t\tendWord();\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\n\" || ch === \"\\r\" || ch === \";\") {\n\t\t\tendPipeline();\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"&\" && next === \"&\" || ch === \"|\" && next === \"|\") {\n\t\t\tendPipeline();\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"|\") {\n\t\t\tendSegment();\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \">\" || ch === \"&\" && next === \">\") {\n\t\t\tif (ch === \"&\") i++;\n\t\t\tconst fd = inWord && /^[12]$/.test(word) ? word : \"\";\n\t\t\tif (inWord && !fd) return fail(\"redirección\");\n\t\t\tword = \"\";\n\t\t\tinWord = false;\n\t\t\tlet j = i + 1;\n\t\t\tif (src[j] === \">\") j++;\n\t\t\tif (src[j] === \"&\" && /[12]/.test(src[j + 1] ?? \"\")) {\n\t\t\t\ti = j + 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\twhile (src[j] === \" \" || src[j] === \"\t\") j++;\n\t\t\tlet target = \"\";\n\t\t\twhile (j < src.length && !/[\\s;|&<>]/.test(src[j])) target += src[j++];\n\t\t\tif (!DISCARD.has(target.toLowerCase())) return fail(`redirección a ${target || \"archivo\"}`);\n\t\t\ti = j - 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"<\") return fail(\"redirección de entrada\");\n\t\tif (ch === \"&\") return fail(\"comando en segundo plano (&)\");\n\t\tword += ch;\n\t\tinWord = true;\n\t}\n\tif (quote) return fail(\"comillas sin cerrar\");\n\tendPipeline();\n\treturn {\n\t\tok: true,\n\t\tpipelines\n\t};\n}\n/**\n* @param {string} arg\n* @param {{ repo: string, platform: NodeJS.Platform }} ctx\n* @returns {ShellCheck}\n*/\nfunction checkPath(arg, { repo, platform }) {\n\tif (DISCARD.has(arg.toLowerCase())) return { ok: true };\n\tconst native = toNativePath(arg.replace(/^~(?=[\\\\/]|$)/, \"/__home__\"), platform);\n\treturn isInside$1(isAbsolute(native) ? native : resolve(repo, native), repo, platform) ? { ok: true } : {\n\t\tok: false,\n\t\treason: `path fuera del repo: ${arg}`\n\t};\n}\n/** Argumentos (y valores de `--opt=valor`) que parecen paths que salen del repo deben quedar adentro. */\nfunction checkArgsInside(args, ctx) {\n\tfor (const arg of args) {\n\t\tconst value = arg.startsWith(\"-\") ? arg.includes(\"=\") ? arg.slice(arg.indexOf(\"=\") + 1) : \"\" : arg;\n\t\tif (value && escapingPath(value)) {\n\t\t\tconst res = checkPath(value, ctx);\n\t\t\tif (!res.ok) return res;\n\t\t}\n\t}\n\treturn { ok: true };\n}\n/** @param {string[]} argv @returns {ShellCheck} */\nfunction checkGit(argv, ctx) {\n\tlet i = 1;\n\twhile (argv[i]?.startsWith(\"-\")) {\n\t\tconst flag = argv[i];\n\t\tif (flag === \"--no-pager\" || flag === \"-P\") i++;\n\t\telse if (flag === \"-C\") {\n\t\t\tconst res = checkPath(argv[i + 1] ?? \"\", ctx);\n\t\t\tif (!res.ok) return res;\n\t\t\ti += 2;\n\t\t} else return {\n\t\t\tok: false,\n\t\t\treason: `opción global de git no permitida: ${flag}`\n\t\t};\n\t}\n\tconst sub = argv[i] ?? \"\";\n\tconst rest = argv.slice(i + 1);\n\tconst unsafe = rest.find((w) => GIT_UNSAFE_FLAG.test(w));\n\tif (unsafe) return {\n\t\tok: false,\n\t\treason: `git ${sub} ${unsafe}`\n\t};\n\tif (GIT_READ.has(sub)) return { ok: true };\n\tif (sub === \"branch\" && rest.every((w) => BRANCH_LIST_FLAGS.has(w))) return { ok: true };\n\tif (sub === \"remote\" && (rest.length === 0 || rest.length === 1 && rest[0] === \"-v\" || rest[0] === \"get-url\")) return { ok: true };\n\tif (sub === \"config\" && rest.some((w) => CONFIG_READ_FLAGS.has(w))) return { ok: true };\n\treturn {\n\t\tok: false,\n\t\treason: `git ${sub || \"(sin subcomando)\"} no es de solo lectura`\n\t};\n}\n/** @param {string[]} argv @returns {ShellCheck} */\nfunction checkReadCommand(name, argv, ctx) {\n\tconst args = argv.slice(1);\n\tif (name === \"sort\" && args.some((a) => /^(-o|--output)/.test(a))) return {\n\t\tok: false,\n\t\treason: \"sort -o escribe un archivo\"\n\t};\n\tif (name === \"uniq\" && args.filter((a) => !a.startsWith(\"-\")).length > 1) return {\n\t\tok: false,\n\t\treason: \"uniq con archivo de salida\"\n\t};\n\tif (name === \"find\" && args.some((a) => /^-(exec|execdir|ok|okdir|delete|fprint|fprint0|fprintf|fls)$/.test(a))) return {\n\t\tok: false,\n\t\treason: \"find que ejecuta o escribe\"\n\t};\n\tif (name === \"rg\" && args.some((a) => /^--pre(-glob)?(=|$)/.test(a))) return {\n\t\tok: false,\n\t\treason: \"rg --pre ejecuta comandos\"\n\t};\n\tif (name === \"sed\") {\n\t\tif (!args.includes(\"-n\") || args.some((a) => /^(-i|--in-place|-e|-f|--expression|--file)/.test(a))) return {\n\t\t\tok: false,\n\t\t\treason: \"sed solo como `sed -n 'N,Mp'`\"\n\t\t};\n\t\tconst script = args.find((a) => !a.startsWith(\"-\"));\n\t\tif (!script || !/^\\s*(\\d+|\\$)(\\s*,\\s*(\\d+|\\$))?\\s*p\\s*$/.test(script)) return {\n\t\t\tok: false,\n\t\t\treason: \"sed solo como `sed -n 'N,Mp'`\"\n\t\t};\n\t\treturn checkArgsInside(args.filter((a) => a !== script), ctx);\n\t}\n\tif (TEXT_ARGS.has(name)) return { ok: true };\n\treturn checkArgsInside(args, ctx);\n}\n/** El validate del paquete (por npx o con el bin instalado), con el archivo como único argumento. */\nfunction isValidate(argv) {\n\tconst line = argv.join(\" \");\n\treturn /^(?:npx\\s+(?:--yes\\s+|-y\\s+)?@jpkme\\/diff-review(?:@[\\w.^~-]+)?|diff-review)\\s+validate\\s+\\S+$/.test(line);\n}\n/**\n* `mkdir` / `md` / `New-Item -ItemType Directory` solo bajo `.diff-review/` del repo.\n* @param {string[]} argv\n* @param {{ repo: string, platform: NodeJS.Platform }} ctx\n* @returns {ShellCheck | null} null = no es este caso\n*/\nfunction checkReviewDirMkdir(argv, ctx) {\n\tconst name = argv[0].toLowerCase();\n\tconst reviewRoot = resolve(ctx.repo, \".diff-review\");\n\t/** @param {string} arg */\n\tconst underReviewDir = (arg) => {\n\t\tconst native = toNativePath(String(arg || \"\").replace(/^~(?=[\\\\/]|$)/, \"/__home__\"), ctx.platform);\n\t\treturn isInside$1(isAbsolute(native) ? native : resolve(ctx.repo, native), reviewRoot, ctx.platform);\n\t};\n\tif (name === \"mkdir\" || name === \"md\") {\n\t\tconst paths = argv.slice(1).filter((a) => !a.startsWith(\"-\"));\n\t\tif (!paths.length || !paths.every(underReviewDir)) return {\n\t\t\tok: false,\n\t\t\treason: \"mkdir solo permitido bajo .diff-review/\"\n\t\t};\n\t\treturn { ok: true };\n\t}\n\tif (name === \"new-item\") {\n\t\tconst joined = argv.join(\" \").toLowerCase();\n\t\tif (!/-itemtype\\s+directory\\b/.test(joined) && !/\\b-type\\s+directory\\b/.test(joined)) return null;\n\t\tconst paths = argv.slice(1).filter((a) => !a.startsWith(\"-\") && !/^(directory|file)$/i.test(a));\n\t\tif (!paths.length || !paths.every(underReviewDir)) return {\n\t\t\tok: false,\n\t\t\treason: \"New-Item Directory solo permitido bajo .diff-review/\"\n\t\t};\n\t\treturn { ok: true };\n\t}\n\treturn null;\n}\n/**\n* Quita agrupación PowerShell pegada al token: `(Get-Content` → `Get-Content`,\n* `file.diff).Count` → `file.diff`, `-Line).Lines` → `-Line`.\n* @param {string} token\n*/\nfunction stripPsGrouping(token) {\n\tlet t = String(token ?? \"\");\n\tt = t.replace(/^\\(+/, \"\");\n\tt = t.replace(/\\)+(?:\\.[A-Za-z_][\\w]*(?:\\(\\)?)?)*$/, \"\");\n\treturn t;\n}\n/** @param {string[]} argv */\nfunction normalizePsArgv(argv) {\n\treturn argv.map(stripPsGrouping).filter((w) => w.length > 0);\n}\n/**\n* @param {string} command\n* @param {{ repo?: string, platform?: NodeJS.Platform }} [opts]\n* @returns {ShellCheck}\n*/\nfunction checkShell(command, { repo, platform = process.platform } = {}) {\n\tconst parsed = tokenizeShell(command);\n\tif (!parsed.ok) return parsed;\n\tif (!parsed.pipelines.length) return {\n\t\tok: false,\n\t\treason: \"comando vacío\"\n\t};\n\tconst ctx = {\n\t\trepo: repo || process.cwd(),\n\t\tplatform\n\t};\n\tfor (const pipeline of parsed.pipelines) for (const rawArgv of pipeline) {\n\t\tconst argv = normalizePsArgv(rawArgv);\n\t\tif (!argv.length) continue;\n\t\tconst name = argv[0].toLowerCase();\n\t\tif (argv[0].includes(\"=\")) return {\n\t\t\tok: false,\n\t\t\treason: `variables de entorno en el comando: ${argv[0]}`\n\t\t};\n\t\t/** @type {ShellCheck} */\n\t\tlet res;\n\t\tif (name === \"cd\" || name === \"set-location\") res = repo && argv[1] ? checkPath(argv[1], ctx) : {\n\t\t\tok: false,\n\t\t\treason: \"cd fuera del repo\"\n\t\t};\n\t\telse if (name === \"git\") res = checkGit(argv, ctx);\n\t\telse if (name === \"npx\" || name === \"diff-review\") res = isValidate(argv) ? { ok: true } : {\n\t\t\tok: false,\n\t\t\treason: `${argv.join(\" \")}`\n\t\t};\n\t\telse if (READ_COMMANDS.has(name)) res = checkReadCommand(name, argv, ctx);\n\t\telse res = checkReviewDirMkdir(argv, ctx) ?? {\n\t\t\tok: false,\n\t\t\treason: `${argv[0]} no está permitido`\n\t\t};\n\t\tif (!res.ok) return res;\n\t}\n\treturn { ok: true };\n}\n//#endregion\n//#region ../lib/acp-policy.mjs\n/**\n* Qué puede hacer el agente cuando corre por ACP. Cada `session/request_permission` pasa por acá: no hay nadie\n* mirando la terminal para aprobar, así que la política es una allowlist (leer, comandos de solo lectura y escribir\n* el JSON de salida en `.diff-review/`) y todo lo demás se rechaza.\n*\n* Ojo: el agente solo pide permiso para lo que *su* configuración no aprueba sola (p. ej. Claude Code aplica la\n* allowlist de `~/.claude/settings.json` antes de preguntar). Esto acota lo que pide, no lo que el usuario ya\n* habilitó en su agente.\n*/\n/**\n* @typedef {\"review\" | \"ask\" | \"edit\" | \"fix\"} PolicyMode\n* review = generar el JSON; ask = preguntas (no puede escribir nada); edit = modificar el JSON;\n* fix = editar código dentro del repo (no solo el JSON).\n* @typedef {{ repo: string, outputFilename: string, mode: PolicyMode }} PolicyContext\n* @typedef {{\n* kind?: string | null,\n* title?: string | null,\n* rawInput?: unknown,\n* locations?: { path: string }[] | null,\n* content?: { type: string, path?: string }[] | null,\n* }} ToolCallLike\n* @typedef {{ allow: boolean, reason: string }} Decision\n*/\n/** @param {string} a @param {string} b */\nfunction samePath(a, b, platform = process.platform) {\n\tconst na = normalize(a);\n\tconst nb = normalize(b);\n\treturn platform === \"win32\" ? na.toLowerCase() === nb.toLowerCase() : na === nb;\n}\n/**\n* Resuelve symlinks cuando el path (o un ancestro) existe. Sin eso, un link dentro del repo\n* puede apuntar fuera y pasar `isInside` con solo `resolve`.\n* @param {string} path\n*/\nfunction canonicalPath(path) {\n\ttry {\n\t\treturn realpathSync(path);\n\t} catch {\n\t\tconst parts = [];\n\t\tlet cur = normalize(path);\n\t\tfor (;;) {\n\t\t\tconst parent = dirname(cur);\n\t\t\tif (!parent || parent === cur) return normalize(path);\n\t\t\tparts.unshift(basename(cur));\n\t\t\ttry {\n\t\t\t\treturn resolve(realpathSync(parent), ...parts);\n\t\t\t} catch {\n\t\t\t\tcur = parent;\n\t\t\t}\n\t\t}\n\t}\n}\n/** @param {string} child @param {string} root */\nfunction isInside(child, root, platform = process.platform) {\n\tconst c = normalize(canonicalPath(child));\n\tconst r = normalize(canonicalPath(root)).replace(/[\\\\/]+$/, \"\");\n\tconst [cc, rr] = platform === \"win32\" ? [c.toLowerCase(), r.toLowerCase()] : [c, r];\n\treturn cc === rr || cc.startsWith(`${rr}\\\\`) || cc.startsWith(`${rr}/`);\n}\n/** Paths que toca la tool call (`locations`, diffs de `content` y los campos típicos de `rawInput`). */\nfunction toolCallPaths(toolCall, repo) {\n\tconst raw = toolCall.rawInput && typeof toolCall.rawInput === \"object\" ? toolCall.rawInput : {};\n\tconst candidates = [\n\t\t...(toolCall.locations ?? []).map((l) => l?.path),\n\t\t...(toolCall.content ?? []).map((c) => c?.type === \"diff\" ? c.path : void 0),\n\t\traw.file_path,\n\t\traw.path,\n\t\traw.filePath,\n\t\traw.notebook_path\n\t];\n\tconst out = [];\n\tfor (const c of candidates) {\n\t\tif (typeof c !== \"string\" || !c.trim()) continue;\n\t\tconst abs = isAbsolute(c) ? c : resolve(repo, c);\n\t\tif (!out.some((p) => samePath(p, abs))) out.push(abs);\n\t}\n\treturn out;\n}\n/** @param {unknown} rawInput */\nfunction commandOf(rawInput) {\n\tif (!rawInput || typeof rawInput !== \"object\") return \"\";\n\tconst cmd = rawInput.command;\n\tif (Array.isArray(cmd)) return cmd.map(String).join(\" \");\n\treturn typeof cmd === \"string\" ? cmd : \"\";\n}\n/**\n* Comando de shell que la política evalúa (rawInput, backticks o título entero).\n* Cursor a veces envuelve el script con `@…@` en el título.\n* @param {ToolCallLike} toolCall\n*/\nfunction toolCallCommand(toolCall) {\n\tconst fromRaw = commandOf(toolCall.rawInput).trim();\n\tif (fromRaw) return fromRaw;\n\tconst title = String(toolCall.title ?? \"\").trim();\n\tconst tick = /^`([\\s\\S]+)`$/.exec(title);\n\tif (tick) return tick[1].trim();\n\tconst at = /^@\\s*([\\s\\S]*?)\\s*@$/.exec(title);\n\tif (at) return at[1].trim();\n\treturn title;\n}\n/**\n* Etiqueta corta del agente si el título no es el comando mismo.\n* @param {ToolCallLike} toolCall\n* @param {string} [command]\n*/\nfunction toolCallLabel(toolCall, command = toolCallCommand(toolCall)) {\n\tconst title = String(toolCall.title ?? \"\").trim();\n\tif (!title) return \"\";\n\tif (/^`[\\s\\S]+`$/.test(title) || /^@\\s*[\\s\\S]*?\\s*@$/.test(title)) return \"\";\n\tconst norm = (s) => s.replace(/\\s+/g, \" \").trim();\n\tif (command && norm(title) === norm(command)) return \"\";\n\tif (command && command.length >= 24 && title.includes(command.slice(0, 24))) return \"\";\n\treturn title;\n}\n/**\n* Motivo de denegación legible en la UI de permisos.\n* @param {string} reason\n*/\nfunction humanizePolicyReason(reason) {\n\tconst r = String(reason || \"\").trim();\n\tif (!r) return \"La política bloqueó este pedido.\";\n\tlet m;\n\tif (m = /^(.+?) no está permitido$/.exec(r)) return `La política bloqueó «${m[1]}» (no está en la allowlist de comandos).`;\n\tif (m = /^variables de entorno en el comando:\\s*(.*)$/s.exec(r)) return `La política interpretó parte del comando como variable de entorno (${String(m[1] || \"?\").trim().slice(0, 40)}) y lo bloqueó.`;\n\tif (m = /^path fuera del repo:\\s*(.*)$/s.exec(r)) return `El path queda fuera del repo: ${m[1]}`;\n\tif (m = /^lectura fuera del repo:\\s*(.*)$/s.exec(r)) return `Lectura fuera del repo: ${m[1]}`;\n\tif (m = /^opción global de git no permitida:\\s*(.*)$/s.exec(r)) return `Opción de git no permitida: ${m[1]}`;\n\tif (r.startsWith(\"git \")) return `Comando git no permitido por la política: ${r}`;\n\tif (r.startsWith(\"solo se puede escribir\") || r.includes(\"sin path\") || r.startsWith(\"modo pregunta\")) return r;\n\treturn `La política bloqueó el pedido: ${r}`;\n}\n/**\n* @param {ToolCallLike} toolCall\n* @param {PolicyContext} ctx\n* @returns {Decision}\n*/\nfunction decidePermission(toolCall, { repo, outputFilename, mode }) {\n\tconst kind = toolCall.kind ?? \"other\";\n\tconst paths = toolCallPaths(toolCall, repo);\n\tif (kind === \"read\" || kind === \"search\") {\n\t\tif (!paths.length) return {\n\t\t\tallow: false,\n\t\t\treason: `${kind === \"search\" ? \"búsqueda\" : \"lectura\"} sin path`\n\t\t};\n\t\tconst outside = paths.find((p) => !isInside(p, repo));\n\t\treturn outside ? {\n\t\t\tallow: false,\n\t\t\treason: `lectura fuera del repo: ${outside}`\n\t\t} : {\n\t\t\tallow: true,\n\t\t\treason: \"lectura\"\n\t\t};\n\t}\n\tif (kind === \"think\") return {\n\t\tallow: true,\n\t\treason: \"pensar\"\n\t};\n\tif (kind === \"execute\") {\n\t\tconst check = checkShell(toolCallCommand(toolCall), { repo });\n\t\treturn check.ok ? {\n\t\t\tallow: true,\n\t\t\treason: \"comando de solo lectura\"\n\t\t} : {\n\t\t\tallow: false,\n\t\t\treason: check.reason\n\t\t};\n\t}\n\tif (kind === \"edit\" || kind === \"delete\") {\n\t\tif (mode === \"ask\") return {\n\t\t\tallow: false,\n\t\t\treason: \"modo pregunta: no se edita nada\"\n\t\t};\n\t\tif (!paths.length) return {\n\t\t\tallow: false,\n\t\t\treason: `${kind === \"delete\" ? \"borrado\" : \"edición\"} sin path`\n\t\t};\n\t\tif (mode === \"fix\") {\n\t\t\tconst outside = paths.find((p) => !isInside(p, repo));\n\t\t\treturn outside ? {\n\t\t\t\tallow: false,\n\t\t\t\treason: `path fuera del repo: ${outside}`\n\t\t\t} : {\n\t\t\t\tallow: true,\n\t\t\t\treason: \"escritura en el repo\"\n\t\t\t};\n\t\t}\n\t\tconst target = resolve(repo, outputRelPath(outputFilename));\n\t\tconst outside = paths.find((p) => !samePath(canonicalPath(p), canonicalPath(target)));\n\t\treturn outside ? {\n\t\t\tallow: false,\n\t\t\treason: `solo se puede escribir ${outputRelPath(outputFilename)} (no ${outside})`\n\t\t} : {\n\t\t\tallow: true,\n\t\t\treason: `escritura de ${outputRelPath(outputFilename)}`\n\t\t};\n\t}\n\treturn {\n\t\tallow: false,\n\t\treason: `${kind} no permitido: ${toolCall.title ?? \"?\"}`\n\t};\n}\n/**\n* Respuesta ACP para una decisión del usuario / política.\n* - allow + once → `allow_once` (la política se vuelve a evaluar en el próximo pedido).\n* - allow + always → `allow_always` si el agente la ofrece; si no, cae a `allow_once`.\n* @param {{ optionId: string, kind: string }[]} options\n* @param {boolean} allow\n* @param {{ always?: boolean }} [opts]\n*/\nfunction permissionOutcome(options, allow, opts = {}) {\n\tconst always = Boolean(opts.always);\n\tconst option = (allow ? always ? [\"allow_always\", \"allow_once\"] : [\"allow_once\"] : [\"reject_once\", \"reject_always\"]).map((kind) => options.find((o) => o.kind === kind)).find(Boolean);\n\treturn option ? { outcome: {\n\t\toutcome: \"selected\",\n\t\toptionId: option.optionId\n\t} } : { outcome: { outcome: \"cancelled\" } };\n}\n//#endregion\n//#region ../lib/agent-login.mjs\n/**\n* Login de agentes ACP: clasificación de authMethods, mensajes claros y lanzamiento del CLI de auth.\n*\n* Preferencia de launch:\n* 1. Misma TTY (stdio inherit) si stdin/stdout son TTY — CLI interactiva, exit code real.\n* 2. Proceso hijo oculto (sin ventana de terminal) si no hay TTY — p. ej. web; OAuth abre el browser.\n* 3. Terminal externa solo con `external: true` (raro: login que exige TTY interactiva).\n*\n* En Windows, `cmd /c start /wait` **no** propaga el exit code del proceso iniciado (siempre 0\n* hacia Node). El fallback externo usa un archivo sentinel, igual que macOS/Linux.\n*/\n/**\n* @typedef {{ bin: string, args: string[], display: string, env?: Record<string, string> }} LoginCommand\n* @typedef {'agent' | 'terminal' | 'terminal-meta' | 'unknown'} AuthMethodKind\n* @typedef {'inherit' | 'hidden' | 'external'} LoginLaunchMode\n*/\n/**\n* Hostname de Copilot (Enterprise). Vacío / `github.com` = cuenta en github.com.\n* @param {string | null | undefined} host\n* @returns {string}\n*/\nfunction normalizeCopilotLoginHost(host) {\n\tconst h = String(host || \"\").trim().replace(/^https?:\\/\\//i, \"\").replace(/\\/.*$/, \"\");\n\tif (!h || /^github\\.com$/i.test(h)) return \"\";\n\treturn h;\n}\n/**\n* Agrega `--host` a un comando `copilot login` cuando el usuario eligió Enterprise.\n* No fuerza nada por env: el host lo elige quien llama (CLI/UI).\n* @param {LoginCommand} cmd\n* @param {string | null | undefined} host\n* @returns {LoginCommand}\n*/\nfunction withCopilotLoginHost(cmd, host) {\n\tif (!cmd || cmd.bin == null) return cmd;\n\tconst h = normalizeCopilotLoginHost(host);\n\tif (!h) return cmd;\n\tconst args = Array.isArray(cmd.args) ? [...cmd.args] : [];\n\tconst hostIdx = args.findIndex((a) => a === \"--host\");\n\tif (hostIdx >= 0) args[hostIdx + 1] = h;\n\telse args.push(\"--host\", h);\n\tconst withoutHost = String(cmd.display || \"\").replace(/\\s+--host\\s+\\S+/g, \"\").trim();\n\treturn {\n\t\t...cmd,\n\t\targs,\n\t\tdisplay: `${withoutHost} --host ${h}`.trim()\n\t};\n}\n/**\n* Comando de login interactivo por agente (fallback si no hay authMethod usable).\n* @param {string} agentId\n* @param {{ host?: string | null }} [opts] solo Copilot: host Enterprise opcional\n* @returns {LoginCommand | null}\n*/\nfunction loginCommand(agentId, opts = {}) {\n\tswitch (agentId) {\n\t\tcase \"claude\": return {\n\t\t\tbin: \"claude\",\n\t\t\targs: [\"auth\", \"login\"],\n\t\t\tdisplay: \"claude auth login\"\n\t\t};\n\t\tcase \"copilot\": return withCopilotLoginHost({\n\t\t\tbin: \"copilot\",\n\t\t\targs: [\"login\"],\n\t\t\tdisplay: \"copilot login\"\n\t\t}, opts.host);\n\t\tcase \"cursor\": return {\n\t\t\tbin: \"cursor-agent\",\n\t\t\targs: [\"login\"],\n\t\t\tdisplay: \"cursor-agent login\"\n\t\t};\n\t\tdefault: return null;\n\t}\n}\n/**\n* Args de `claude auth login …` a partir de un authMethod ACP.\n* El adaptador anuncia `[\"--cli\", \"auth\", \"login\", \"--claudeai\"]` (o lo mismo tras el path del\n* adapter en `_meta.terminal-auth.args`); `--cli` solo entiende el wrapper ACP, no `claude`.\n* @param {any} [method]\n* @returns {string[]}\n*/\nfunction claudeCliLoginArgs(method) {\n\tconst meta = method?._meta?.[\"terminal-auth\"];\n\tconst raw = Array.isArray(meta?.args) ? meta.args.map(String) : Array.isArray(method?.args) ? method.args.map(String) : [];\n\tconst cliIdx = raw.indexOf(\"--cli\");\n\tconst after = cliIdx >= 0 ? raw.slice(cliIdx + 1) : raw;\n\tif (after[0] === \"auth\") return after;\n\treturn [\n\t\t\"auth\",\n\t\t\"login\",\n\t\t...after.filter((a) => a.startsWith(\"--\"))\n\t];\n}\n/**\n* Clasifica un authMethod de `initialize` según ACP v1 + extensión Copilot `_meta.terminal-auth`.\n* @param {any} method\n* @returns {AuthMethodKind}\n*/\nfunction classifyAuthMethod(method) {\n\tif (!method || typeof method.id !== \"string\" || !method.id) return \"unknown\";\n\tif (method._meta != null && method._meta[\"terminal-auth\"] != null) return \"terminal-meta\";\n\tif (method.type === \"terminal\") return \"terminal\";\n\tif (!method.type || method.type === \"agent\") return \"agent\";\n\treturn \"unknown\";\n}\n/**\n* @param {any[]} authMethods\n* @returns {{ agent: any[], terminal: any[], terminalMeta: any[], unknown: any[] }}\n*/\nfunction groupAuthMethods(authMethods) {\n\t/** @type {{ agent: any[], terminal: any[], terminalMeta: any[], unknown: any[] }} */\n\tconst groups = {\n\t\tagent: [],\n\t\tterminal: [],\n\t\tterminalMeta: [],\n\t\tunknown: []\n\t};\n\tfor (const method of authMethods || []) {\n\t\tconst kind = classifyAuthMethod(method);\n\t\tif (kind === \"agent\") groups.agent.push(method);\n\t\telse if (kind === \"terminal\") groups.terminal.push(method);\n\t\telse if (kind === \"terminal-meta\") groups.terminalMeta.push(method);\n\t\telse groups.unknown.push(method);\n\t}\n\treturn groups;\n}\n/** @param {string} text */\nfunction looksLikeAuthFailure(text) {\n\tconst s = String(text || \"\").toLowerCase();\n\treturn /(not\\s+)?auth|login|unauthor|not logged|sign[\\s-]?in|credentials|token.*(invalid|expired|missing)|please\\s+run|auth_required/.test(s);\n}\n/**\n* Mensaje en español si el agente murió / falló por falta de login.\n* Sin comandos CLI: el CTA abre el login por el usuario.\n* @param {string} agentId\n* @param {string} agentLabel\n* @param {string} detail\n* @returns {string | null}\n*/\nfunction authFailureMessage$1(agentId, agentLabel, detail) {\n\tif (!looksLikeAuthFailure(detail)) return null;\n\treturn `Necesitás iniciar sesión en ${String(agentLabel || \"\").trim() || \"el agente\"}.`;\n}\n/** Fallo del proceso de login (exit ≠ 0 o cancelado a medias). */\nfunction loginIncompleteMessage() {\n\treturn \"No se pudo completar el inicio de sesión. Probá de nuevo.\";\n}\n/** Estado mientras corre el login (TTY, proceso oculto o terminal externa). */\nfunction loginWaitingMessage() {\n\treturn \"Esperando que completes el inicio de sesión…\";\n}\n/**\n* Método interactivo a abrir: `_meta.terminal-auth` (Copilot) o `type: terminal` (Claude).\n* Si solo hay métodos `agent` (Cursor), devolvemos null → `resolveLoginCommand` usa el fallback CLI.\n* @param {any[]} [methods]\n* @returns {any | null}\n*/\nfunction pickLoginAuthMethod(methods) {\n\tconst grouped = groupAuthMethods(methods || []);\n\treturn grouped.terminalMeta[0] ?? grouped.terminal[0] ?? null;\n}\n/**\n* ¿Podemos correr el login en la misma terminal (stdio inherit)?\n* La web / procesos sin TTY usan proceso oculto (o `external: true` → ventana).\n* @param {{ external?: boolean }} [opts]\n*/\nfunction canInheritLoginTty(opts = {}) {\n\tif (opts.external) return false;\n\treturn Boolean(process.stdin?.isTTY && process.stdout?.isTTY);\n}\n/**\n* Modo de launch: inherit (CLI con TTY) → hidden (web / OAuth en browser) → external (forzado).\n* @param {{ wait?: boolean, external?: boolean }} [opts]\n* @returns {LoginLaunchMode}\n*/\nfunction resolveLoginLaunchMode(opts = {}) {\n\tif (Boolean(opts.wait) && canInheritLoginTty(opts)) return \"inherit\";\n\tif (opts.external) return \"external\";\n\treturn \"hidden\";\n}\n/**\n* Arma el comando de login a partir de un authMethod (o fallback por agentId).\n* @param {{ def: { id: string, acp?: Function }, path: string }} agent\n* @param {any} [method]\n* @returns {LoginCommand}\n*/\nfunction resolveLoginCommand(agent, method) {\n\tconst kind = method ? classifyAuthMethod(method) : \"unknown\";\n\tconst meta = method?._meta?.[\"terminal-auth\"];\n\tif (agent?.def?.id === \"claude\" && method && (kind === \"terminal\" || kind === \"terminal-meta\")) {\n\t\tconst args = claudeCliLoginArgs(method);\n\t\treturn {\n\t\t\tbin: typeof agent.path === \"string\" && agent.path.trim() ? agent.path : \"claude\",\n\t\t\targs,\n\t\t\tdisplay: `claude ${args.join(\" \")}`.trim(),\n\t\t\t...method?.env && typeof method.env === \"object\" ? { env: method.env } : {}\n\t\t};\n\t}\n\tif ((kind === \"terminal-meta\" || kind === \"terminal\") && meta && typeof meta === \"object\") {\n\t\tconst command = typeof meta.command === \"string\" ? meta.command.trim() : \"\";\n\t\tif (command) {\n\t\t\tconst args = Array.isArray(meta.args) ? meta.args.map(String) : [];\n\t\t\treturn {\n\t\t\t\tbin: command,\n\t\t\t\targs,\n\t\t\t\tdisplay: (typeof meta.label === \"string\" && meta.label.trim() ? meta.label.trim() : \"\") || `${command}${args.length ? ` ${args.join(\" \")}` : \"\"}`.trim(),\n\t\t\t\t...method?.env && typeof method.env === \"object\" ? { env: method.env } : {}\n\t\t\t};\n\t\t}\n\t}\n\tif (kind === \"terminal\" && method && typeof agent?.def?.acp === \"function\") {\n\t\tconst launch = agent.def.acp({ path: agent.path });\n\t\tconst extra = Array.isArray(method.args) ? method.args.map(String) : [];\n\t\tconst env = {\n\t\t\t...launch.env && typeof launch.env === \"object\" ? launch.env : {},\n\t\t\t...method.env && typeof method.env === \"object\" ? method.env : {}\n\t\t};\n\t\tconst args = [...launch.args || [], ...extra];\n\t\treturn {\n\t\t\tbin: launch.file,\n\t\t\targs,\n\t\t\tdisplay: `${launch.file}${args.length ? ` ${args.join(\" \")}` : \"\"}`.trim(),\n\t\t\t...Object.keys(env).length ? { env } : {}\n\t\t};\n\t}\n\tconst fallback = loginCommand(agent?.def?.id);\n\tif (fallback) {\n\t\tif (agent?.def?.id === \"claude\" && typeof agent.path === \"string\" && agent.path.trim()) return {\n\t\t\t...fallback,\n\t\t\tbin: agent.path\n\t\t};\n\t\treturn fallback;\n\t}\n\tthrow new Error(\"Este agente no tiene un inicio de sesión conocido.\");\n}\n/** @param {import('node:child_process').ChildProcess} child */\nfunction waitExit(child) {\n\treturn new Promise((resolve, reject) => {\n\t\tchild.once(\"error\", reject);\n\t\tchild.once(\"exit\", (code, signal) => resolve(signal ? 1 : code ?? 1));\n\t});\n}\n/**\n* Lanza el login en background (proceso oculto; no espera). Compat con UI/CTA simples (web sin sesión).\n* @param {string | LoginCommand} agentIdOrCmd\n* @returns {{ display: string }}\n*/\nfunction openLoginTerminal(agentIdOrCmd) {\n\tconst cmd = typeof agentIdOrCmd === \"string\" ? loginCommand(agentIdOrCmd) : agentIdOrCmd;\n\tif (!cmd) throw new Error((typeof agentIdOrCmd === \"string\" ? agentIdOrCmd : \"\") === \"cursor\" ? \"Necesitás iniciar sesión en Cursor.\" : \"Este agente no tiene un inicio de sesión conocido.\");\n\tlaunchLoginProcess(cmd, {\n\t\twait: false,\n\t\tmode: \"hidden\"\n\t});\n\treturn { display: cmd.display };\n}\n/**\n* Lanza el login. Con TTY y `wait: true`, corre en esta terminal (inherit); si no, proceso oculto\n* (OAuth en browser). Solo con `external: true` abre una ventana de terminal del OS.\n* @param {LoginCommand} cmd\n* @param {{ wait?: boolean, cwd?: string, external?: boolean }} [opts]\n* @returns {Promise<{ display: string, code: number | null, mode: LoginLaunchMode }>}\n*/\nasync function runLoginTerminal(cmd, opts = {}) {\n\tconst wait = Boolean(opts.wait);\n\tconst mode = resolveLoginLaunchMode(opts);\n\tconst code = await launchLoginProcess(cmd, {\n\t\twait,\n\t\tcwd: opts.cwd,\n\t\tmode\n\t});\n\treturn {\n\t\tdisplay: cmd.display,\n\t\tcode: wait ? code : null,\n\t\tmode\n\t};\n}\n/** @param {string} arg */\nfunction quoteBatArg(arg) {\n\tconst s = String(arg);\n\tif (/^[\\w./:\\\\@=-]+$/.test(s)) return s;\n\treturn `\"${s.replace(/\"/g, \"\\\"\\\"\")}\"`;\n}\n/**\n* Espera a que el sentinel tenga un exit code (macOS/Linux/Windows externo).\n* @param {string} sentinel\n* @param {string} display\n* @returns {Promise<number>}\n*/\nasync function waitForExitSentinel(sentinel, display) {\n\tconst deadline = Date.now() + 1800 * 1e3;\n\twhile (Date.now() < deadline) {\n\t\ttry {\n\t\t\tconst raw = readFileSync(sentinel, \"utf8\").trim();\n\t\t\tif (raw !== \"\") {\n\t\t\t\tconst code = Number.parseInt(raw, 10);\n\t\t\t\ttry {\n\t\t\t\t\tunlinkSync(sentinel);\n\t\t\t\t} catch {}\n\t\t\t\treturn Number.isFinite(code) ? code : 1;\n\t\t\t}\n\t\t} catch {}\n\t\tawait new Promise((r) => setTimeout(r, 400));\n\t}\n\ttry {\n\t\tunlinkSync(sentinel);\n\t} catch {}\n\tthrow new Error(`Timeout esperando el login (${display}).`);\n}\n/**\n* Proceso hijo sin ventana de terminal (web / OAuth). Exit code real vía waitExit.\n* @param {LoginCommand} cmd\n* @param {{ wait: boolean, cwd?: string, env: NodeJS.ProcessEnv }} opts\n* @returns {Promise<number>}\n*/\nasync function launchHiddenLogin(cmd, { wait, cwd, env }) {\n\tconst child = spawnCommand(cmd.bin, cmd.args, {\n\t\tcwd,\n\t\tenv,\n\t\tstdio: \"ignore\",\n\t\twindowsHide: true,\n\t\t...wait ? {} : { detached: true }\n\t});\n\tif (!wait) {\n\t\tchild.unref();\n\t\treturn 0;\n\t}\n\treturn waitExit(child);\n}\n/**\n* @param {LoginCommand} cmd\n* @param {{ wait: boolean, cwd?: string, mode: LoginLaunchMode }} opts\n* @returns {Promise<number>}\n*/\nasync function launchLoginProcess(cmd, { wait, cwd, mode }) {\n\tconst env = {\n\t\t...process.env,\n\t\t...cmd.env || {}\n\t};\n\tif (mode === \"inherit\") return waitExit(spawnCommand(cmd.bin, cmd.args, {\n\t\tcwd,\n\t\tenv,\n\t\tstdio: \"inherit\"\n\t}));\n\tif (mode === \"hidden\") return launchHiddenLogin(cmd, {\n\t\twait,\n\t\tcwd,\n\t\tenv\n\t});\n\tconst platform = process.platform;\n\tif (platform === \"win32\") {\n\t\tif (!wait) {\n\t\t\tspawn(\"cmd.exe\", [\n\t\t\t\t\"/c\",\n\t\t\t\t\"start\",\n\t\t\t\t\"diff-review login\",\n\t\t\t\t\"cmd.exe\",\n\t\t\t\t\"/k\",\n\t\t\t\tcmd.bin,\n\t\t\t\t...cmd.args\n\t\t\t], {\n\t\t\t\tcwd,\n\t\t\t\tenv,\n\t\t\t\tdetached: true,\n\t\t\t\tstdio: \"ignore\",\n\t\t\t\twindowsHide: false\n\t\t\t}).unref();\n\t\t\treturn 0;\n\t\t}\n\t\tconst id = randomBytes(8).toString(\"hex\");\n\t\tconst sentinel = join(tmpdir(), `diff-review-login-${id}.exit`);\n\t\tconst bat = join(tmpdir(), `diff-review-login-${id}.bat`);\n\t\tconst line = [quoteBatArg(cmd.bin), ...cmd.args.map(quoteBatArg)].join(\" \");\n\t\tconst sentPath = sentinel.replace(/\"/g, \"\\\"\\\"\");\n\t\twriteFileSync(bat, [\n\t\t\t`@echo off`,\n\t\t\t`call ${line}`,\n\t\t\t`> \"${sentPath}\" echo %ERRORLEVEL%`,\n\t\t\t``\n\t\t].join(\"\\r\\n\"));\n\t\ttry {\n\t\t\twriteFileSync(sentinel, \"\");\n\t\t} catch {}\n\t\tconst child = spawn(\"cmd.exe\", [\n\t\t\t\"/c\",\n\t\t\t\"start\",\n\t\t\t\"/wait\",\n\t\t\t\"diff-review login\",\n\t\t\t\"cmd.exe\",\n\t\t\t\"/c\",\n\t\t\tbat\n\t\t], {\n\t\t\tcwd,\n\t\t\tenv,\n\t\t\tstdio: \"ignore\",\n\t\t\twindowsHide: false\n\t\t});\n\t\ttry {\n\t\t\tawait waitExit(child);\n\t\t\treturn await waitForExitSentinel(sentinel, cmd.display);\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tunlinkSync(bat);\n\t\t\t} catch {}\n\t\t}\n\t}\n\tif (!wait) {\n\t\tif (platform === \"darwin\") {\n\t\t\tspawn(\"osascript\", [\"-e\", `tell application \"Terminal\" to do script ${JSON.stringify(`${cmd.bin} ${cmd.args.join(\" \")}`.trim())}`], {\n\t\t\t\tdetached: true,\n\t\t\t\tstdio: \"ignore\",\n\t\t\t\tenv\n\t\t\t}).unref();\n\t\t\treturn 0;\n\t\t}\n\t\tconst line = `${cmd.bin} ${cmd.args.join(\" \")}`.trim();\n\t\tconst tried = [\n\t\t\t[\"x-terminal-emulator\", [\n\t\t\t\t\"-e\",\n\t\t\t\t\"bash\",\n\t\t\t\t\"-lc\",\n\t\t\t\t`${line}; exec bash`\n\t\t\t]],\n\t\t\t[\"gnome-terminal\", [\n\t\t\t\t\"--\",\n\t\t\t\t\"bash\",\n\t\t\t\t\"-lc\",\n\t\t\t\t`${line}; exec bash`\n\t\t\t]],\n\t\t\t[\"konsole\", [\n\t\t\t\t\"-e\",\n\t\t\t\t\"bash\",\n\t\t\t\t\"-lc\",\n\t\t\t\t`${line}; exec bash`\n\t\t\t]],\n\t\t\t[\"xterm\", [\n\t\t\t\t\"-e\",\n\t\t\t\t\"bash\",\n\t\t\t\t\"-lc\",\n\t\t\t\t`${line}; exec bash`\n\t\t\t]]\n\t\t];\n\t\tfor (const [bin, args] of tried) try {\n\t\t\tspawn(bin, args, {\n\t\t\t\tdetached: true,\n\t\t\t\tstdio: \"ignore\",\n\t\t\t\tenv,\n\t\t\t\tcwd\n\t\t\t}).unref();\n\t\t\treturn 0;\n\t\t} catch {}\n\t\tthrow new Error(`No pude abrir una terminal. Corré a mano: ${cmd.display}`);\n\t}\n\tconst sentinel = join(tmpdir(), `diff-review-login-${randomBytes(8).toString(\"hex\")}.exit`);\n\ttry {\n\t\twriteFileSync(sentinel, \"\");\n\t} catch {}\n\tconst line = `${[cmd.bin, ...cmd.args].map((a) => JSON.stringify(a)).join(\" \")}; echo $? > ${JSON.stringify(sentinel)}`;\n\tif (platform === \"darwin\") spawn(\"osascript\", [\"-e\", `tell application \"Terminal\" to do script ${JSON.stringify(line)}`], {\n\t\tstdio: \"ignore\",\n\t\tenv,\n\t\tcwd\n\t});\n\telse {\n\t\tconst tried = [\n\t\t\t[\"gnome-terminal\", [\n\t\t\t\t\"--wait\",\n\t\t\t\t\"--\",\n\t\t\t\t\"bash\",\n\t\t\t\t\"-lc\",\n\t\t\t\tline\n\t\t\t]],\n\t\t\t[\"x-terminal-emulator\", [\n\t\t\t\t\"-e\",\n\t\t\t\t\"bash\",\n\t\t\t\t\"-lc\",\n\t\t\t\tline\n\t\t\t]],\n\t\t\t[\"konsole\", [\n\t\t\t\t\"-e\",\n\t\t\t\t\"bash\",\n\t\t\t\t\"-lc\",\n\t\t\t\tline\n\t\t\t]],\n\t\t\t[\"xterm\", [\n\t\t\t\t\"-e\",\n\t\t\t\t\"bash\",\n\t\t\t\t\"-lc\",\n\t\t\t\tline\n\t\t\t]]\n\t\t];\n\t\tlet ok = false;\n\t\tfor (const [bin, args] of tried) try {\n\t\t\tawait waitExit(spawn(bin, args, {\n\t\t\t\tstdio: \"ignore\",\n\t\t\t\tenv,\n\t\t\t\tcwd\n\t\t\t}));\n\t\t\tok = true;\n\t\t\tbreak;\n\t\t} catch {}\n\t\tif (!ok) throw new Error(`No pude abrir una terminal. Corré a mano: ${cmd.display}`);\n\t}\n\treturn waitForExitSentinel(sentinel, cmd.display);\n}\n/**\n* Cuenta activa del agente (para el header de la web).\n* @param {string} agentId\n* @param {{ env?: NodeJS.ProcessEnv, run?: typeof spawnSync }} [opts]\n* @returns {{\n* agentId: string,\n* loggedIn: boolean,\n* accountLabel: string | null,\n* detail: string | null,\n* source: 'gh' | 'claude' | 'env' | 'unknown' | null,\n* warnings: string[],\n* }}\n*/\nfunction agentAccountStatus(agentId, opts = {}) {\n\tconst id = String(agentId || \"\").trim();\n\tconst env = opts.env || process.env;\n\tconst run = opts.run || spawnSync;\n\t/** @type {string[]} */\n\tconst warnings = [];\n\tif (id === \"copilot\") {\n\t\tconst envHits = copilotTokenEnvOverrides(env);\n\t\tif (envHits.length) {\n\t\t\twarnings.push(`${envHits.join(\", \")} en el entorno (pisa otras cuentas).`);\n\t\t\treturn {\n\t\t\t\tagentId: id,\n\t\t\t\tloggedIn: true,\n\t\t\t\taccountLabel: \"Token de entorno\",\n\t\t\t\tdetail: envHits.join(\", \"),\n\t\t\t\tsource: \"env\",\n\t\t\t\twarnings\n\t\t\t};\n\t\t}\n\t\tconst accounts = listGhAuthAccounts({\n\t\t\tenv,\n\t\t\trun\n\t\t});\n\t\tconst active = accounts.find((a) => a.active) || accounts[0] || null;\n\t\tif (active) return {\n\t\t\tagentId: id,\n\t\t\tloggedIn: true,\n\t\t\taccountLabel: active.user,\n\t\t\tdetail: active.host,\n\t\t\tsource: \"gh\",\n\t\t\twarnings\n\t\t};\n\t\treturn {\n\t\t\tagentId: id,\n\t\t\tloggedIn: false,\n\t\t\taccountLabel: null,\n\t\t\tdetail: null,\n\t\t\tsource: null,\n\t\t\twarnings\n\t\t};\n\t}\n\tif (id === \"claude\") {\n\t\tconst r = run(\"claude\", [\n\t\t\t\"auth\",\n\t\t\t\"status\",\n\t\t\t\"--json\"\n\t\t], {\n\t\t\tencoding: \"utf8\",\n\t\t\tenv,\n\t\t\twindowsHide: true\n\t\t});\n\t\tif (r.error) return {\n\t\t\tagentId: id,\n\t\t\tloggedIn: false,\n\t\t\taccountLabel: null,\n\t\t\tdetail: null,\n\t\t\tsource: null,\n\t\t\twarnings: [r.error.message]\n\t\t};\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(String(r.stdout || \"{}\"));\n\t\t\tconst loggedIn = Boolean(parsed?.loggedIn);\n\t\t\tconst email = String(parsed?.email || \"\").trim() || null;\n\t\t\tconst org = String(parsed?.orgName || \"\").trim() || null;\n\t\t\treturn {\n\t\t\t\tagentId: id,\n\t\t\t\tloggedIn,\n\t\t\t\taccountLabel: loggedIn ? email || \"Claude\" : null,\n\t\t\t\tdetail: loggedIn ? org || String(parsed?.authMethod || \"\") || null : null,\n\t\t\t\tsource: loggedIn ? \"claude\" : null,\n\t\t\t\twarnings\n\t\t\t};\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tagentId: id,\n\t\t\t\tloggedIn: false,\n\t\t\t\taccountLabel: null,\n\t\t\t\tdetail: null,\n\t\t\t\tsource: null,\n\t\t\t\twarnings: [\"No pude leer el estado de Claude.\"]\n\t\t\t};\n\t\t}\n\t}\n\tif (id === \"cursor\") return {\n\t\tagentId: id,\n\t\tloggedIn: true,\n\t\taccountLabel: \"Cursor\",\n\t\tdetail: \"Sesión del CLI / app\",\n\t\tsource: \"unknown\",\n\t\twarnings\n\t};\n\treturn {\n\t\tagentId: id,\n\t\tloggedIn: false,\n\t\taccountLabel: null,\n\t\tdetail: null,\n\t\tsource: null,\n\t\twarnings\n\t};\n}\n/**\n* Env vars que Copilot usa antes que OAuth / gh (impiden un cambio de cuenta real).\n* @param {NodeJS.ProcessEnv} [env]\n* @returns {string[]}\n*/\nfunction copilotTokenEnvOverrides(env = process.env) {\n\t/** @type {string[]} */\n\tconst hit = [];\n\tfor (const key of [\n\t\t\"COPILOT_GITHUB_TOKEN\",\n\t\t\"GH_TOKEN\",\n\t\t\"GITHUB_TOKEN\"\n\t]) if (String(env[key] || \"\").trim()) hit.push(key);\n\treturn hit;\n}\n/**\n* Cuentas conocidas por `gh auth status --json hosts`.\n* @param {{ env?: NodeJS.ProcessEnv, run?: typeof spawnSync }} [opts]\n* @returns {{ host: string, user: string, active: boolean }[]}\n*/\nfunction listGhAuthAccounts(opts = {}) {\n\tconst env = opts.env || process.env;\n\tconst r = (opts.run || spawnSync)(\"gh\", [\n\t\t\"auth\",\n\t\t\"status\",\n\t\t\"--json\",\n\t\t\"hosts\"\n\t], {\n\t\tencoding: \"utf8\",\n\t\tenv,\n\t\twindowsHide: true\n\t});\n\tif (r.error) return [];\n\ttry {\n\t\tconst parsed = JSON.parse(String(r.stdout || \"{}\"));\n\t\tconst hosts = parsed?.hosts && typeof parsed.hosts === \"object\" ? parsed.hosts : {};\n\t\t/** @type {{ host: string, user: string, active: boolean }[]} */\n\t\tconst out = [];\n\t\tfor (const [host, accounts] of Object.entries(hosts)) {\n\t\t\tconst list = Array.isArray(accounts) ? accounts : [];\n\t\t\tfor (const acc of list) {\n\t\t\t\tconst user = String(acc?.login || acc?.user || \"\").trim();\n\t\t\t\tif (!user) continue;\n\t\t\t\tout.push({\n\t\t\t\t\thost: String(host),\n\t\t\t\t\tuser,\n\t\t\t\t\tactive: Boolean(acc?.active)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn out;\n\t} catch {\n\t\treturn [];\n\t}\n}\n/**\n* Cierra sesiones de `gh` (Copilot las reusa si no hay OAuth propio).\n* @param {{ env?: NodeJS.ProcessEnv, run?: typeof spawnSync, host?: string | null }} [opts]\n* @returns {{ ok: boolean, loggedOut: { host: string, user: string }[], warnings: string[] }}\n*/\nfunction logoutGhAuthAccounts(opts = {}) {\n\tconst env = opts.env || process.env;\n\tconst run = opts.run || spawnSync;\n\tconst onlyHost = normalizeCopilotLoginHost(opts.host) || null;\n\tconst accounts = listGhAuthAccounts({\n\t\tenv,\n\t\trun\n\t}).filter((a) => onlyHost ? a.host === onlyHost || a.host === `https://${onlyHost}` : true);\n\t/** @type {{ host: string, user: string }[]} */\n\tconst loggedOut = [];\n\t/** @type {string[]} */\n\tconst warnings = [];\n\tfor (const acc of accounts) {\n\t\tconst r = run(\"gh\", [\n\t\t\t\"auth\",\n\t\t\t\"logout\",\n\t\t\t\"--hostname\",\n\t\t\tacc.host,\n\t\t\t\"--user\",\n\t\t\tacc.user\n\t\t], {\n\t\t\tencoding: \"utf8\",\n\t\t\tenv,\n\t\t\twindowsHide: true\n\t\t});\n\t\tif (r.error) {\n\t\t\twarnings.push(`No pude cerrar ${acc.user}@${acc.host}: ${r.error.message}`);\n\t\t\tcontinue;\n\t\t}\n\t\tif (r.status !== 0) {\n\t\t\tconst err = String(r.stderr || r.stdout || \"\").trim() || `exit ${r.status}`;\n\t\t\twarnings.push(`No pude cerrar ${acc.user}@${acc.host}: ${err}`);\n\t\t\tcontinue;\n\t\t}\n\t\tloggedOut.push({\n\t\t\thost: acc.host,\n\t\t\tuser: acc.user\n\t\t});\n\t}\n\tconst envHits = copilotTokenEnvOverrides(env);\n\tif (envHits.length) warnings.push(`Hay ${envHits.join(\", \")} en el entorno: Copilot seguirá usando ese token hasta que lo saques.`);\n\treturn {\n\t\tok: warnings.length === 0 || loggedOut.length > 0,\n\t\tloggedOut,\n\t\twarnings\n\t};\n}\n/**\n* Comando de logout CLI por agente (sin depender de gh).\n* @param {string} agentId\n* @returns {LoginCommand | null}\n*/\nfunction logoutCommand(agentId) {\n\tswitch (agentId) {\n\t\tcase \"claude\": return {\n\t\t\tbin: \"claude\",\n\t\t\targs: [\"auth\", \"logout\"],\n\t\t\tdisplay: \"claude auth logout\"\n\t\t};\n\t\tdefault: return null;\n\t}\n}\n/**\n* Cierra la sesión del agente para poder elegir otra cuenta.\n* Copilot: también desloguea cuentas de `gh` (si solo hacés logout OAuth, gh sigue ganando).\n*\n* @param {string} agentId\n* @param {{\n* host?: string | null,\n* env?: NodeJS.ProcessEnv,\n* run?: typeof spawnSync,\n* runTerminal?: typeof runLoginTerminal,\n* cwd?: string,\n* }} [opts]\n* @returns {Promise<{ ok: boolean, steps: string[], warnings: string[] }>}\n*/\nasync function runAgentLogout(agentId, opts = {}) {\n\tconst id = String(agentId || \"\").trim();\n\t/** @type {string[]} */\n\tconst steps = [];\n\t/** @type {string[]} */\n\tconst warnings = [];\n\tconst env = opts.env || process.env;\n\tconst run = opts.run || spawnSync;\n\tconst runTerm = opts.runTerminal || runLoginTerminal;\n\tif (id === \"copilot\") {\n\t\tconst gh = logoutGhAuthAccounts({\n\t\t\tenv,\n\t\t\trun,\n\t\t\thost: opts.host\n\t\t});\n\t\tfor (const a of gh.loggedOut) steps.push(`Cerré ${a.user} en ${a.host} (GitHub CLI)`);\n\t\twarnings.push(...gh.warnings);\n\t\tif (!gh.loggedOut.length && !gh.warnings.length) steps.push(\"No había cuentas de GitHub CLI activas.\");\n\t\treturn {\n\t\t\tok: true,\n\t\t\tsteps,\n\t\t\twarnings\n\t\t};\n\t}\n\tconst cmd = logoutCommand(id);\n\tif (!cmd) return {\n\t\tok: false,\n\t\tsteps,\n\t\twarnings: [\"Este agente no tiene cierre de sesión desde la app.\"]\n\t};\n\ttry {\n\t\tconst result = await runTerm(cmd, {\n\t\t\twait: true,\n\t\t\tcwd: opts.cwd\n\t\t});\n\t\tif (result.code !== 0) {\n\t\t\twarnings.push(`El logout terminó con código ${result.code ?? \"?\"}.`);\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\tsteps,\n\t\t\t\twarnings\n\t\t\t};\n\t\t}\n\t\tsteps.push(`Cerré la sesión (${cmd.display}).`);\n\t\treturn {\n\t\t\tok: true,\n\t\t\tsteps,\n\t\t\twarnings\n\t\t};\n\t} catch (err) {\n\t\twarnings.push(err instanceof Error ? err.message : String(err));\n\t\treturn {\n\t\t\tok: false,\n\t\t\tsteps,\n\t\t\twarnings\n\t\t};\n\t}\n}\n/** @returns {string} */\nfunction modelsCachePath(home = homedir()) {\n\treturn join(home, \".diff-review\", \"models-cache.json\");\n}\n/**\n* @param {string} agentId\n* @param {{ home?: string, now?: number, ttlMs?: number }} [opts]\n* @returns {{ models: { value: string, name: string }[], currentModel: string, fetchedAt: string } | null}\n*/\nfunction readModelsCache(agentId, opts = {}) {\n\tconst id = String(agentId || \"\").trim();\n\tif (!id) return null;\n\tconst path = modelsCachePath(opts.home);\n\tlet root;\n\ttry {\n\t\troot = JSON.parse(readFileSync(path, \"utf8\"));\n\t} catch {\n\t\treturn null;\n\t}\n\tconst entry = root?.agents?.[id];\n\tif (!entry || !Array.isArray(entry.models)) return null;\n\tconst fetchedAt = Date.parse(String(entry.fetchedAt || \"\"));\n\tif (!Number.isFinite(fetchedAt)) return null;\n\tconst ttl = opts.ttlMs ?? 864e5;\n\tif ((opts.now ?? Date.now()) - fetchedAt > ttl) return null;\n\treturn {\n\t\tmodels: entry.models.filter((m) => m && typeof m.value === \"string\").map((m) => ({\n\t\t\tvalue: m.value,\n\t\t\tname: String(m.name ?? m.value)\n\t\t})),\n\t\tcurrentModel: String(entry.currentModel ?? \"\"),\n\t\tfetchedAt: new Date(fetchedAt).toISOString()\n\t};\n}\n/**\n* @param {string} agentId\n* @param {{ models: { value: string, name: string }[], currentModel?: string }} data\n* @param {{ home?: string, now?: number }} [opts]\n*/\nfunction writeModelsCache(agentId, data, opts = {}) {\n\tconst id = String(agentId || \"\").trim();\n\tif (!id || !Array.isArray(data?.models) || !data.models.length) return;\n\tconst path = modelsCachePath(opts.home);\n\tlet root = {\n\t\tversion: 1,\n\t\tagents: {}\n\t};\n\ttry {\n\t\tif (existsSync(path)) root = {\n\t\t\t...root,\n\t\t\t...JSON.parse(readFileSync(path, \"utf8\"))\n\t\t};\n\t} catch {}\n\tif (!root.agents || typeof root.agents !== \"object\") root.agents = {};\n\troot.agents[id] = {\n\t\tfetchedAt: new Date(opts.now ?? Date.now()).toISOString(),\n\t\tcurrentModel: String(data.currentModel ?? \"\"),\n\t\tmodels: data.models.map((m) => ({\n\t\t\tvalue: String(m.value),\n\t\t\tname: String(m.name ?? m.value)\n\t\t}))\n\t};\n\tmkdirSync(dirname(path), { recursive: true });\n\twriteFileSync(path, `${JSON.stringify(root, null, 2)}\\n`);\n}\n//#endregion\n//#region ../lib/acp.mjs\n/**\n* Sesión con un agente por ACP (Agent Client Protocol): JSON-RPC por stdin/stdout del proceso del agente.\n*\n* A diferencia de `runAgent` (una vuelta headless), el proceso queda vivo: la misma sesión sirve para generar la\n* review y después para las preguntas y los cambios que se le pidan desde la web. Cada pedido de permiso pasa por\n* `decide` (ver `acp-policy.mjs`): no hay nadie mirando una terminal para aprobar.\n*/\n/**\n* session/new (u otra op) requiere login interactivo (terminal / terminal-meta).\n* No es un fallo genérico: la UI debe abrir el login y reintentar.\n*/\nvar AcpAuthRequiredError = class extends Error {\n\t/**\n\t* @param {string} message\n\t* @param {{ methods?: any[], agentId?: string, agentLabel?: string }} [info]\n\t*/\n\tconstructor(message, info = {}) {\n\t\tsuper(message);\n\t\tthis.name = \"AcpAuthRequiredError\";\n\t\tthis.methods = Array.isArray(info.methods) ? info.methods : [];\n\t\tthis.agentId = info.agentId || \"\";\n\t\tthis.agentLabel = info.agentLabel || \"\";\n\t}\n};\n/** El agente tiene un modo ACP declarado (no todos los agentes lo traen). */\nfunction supportsAcp(agent) {\n\treturn typeof agent?.def?.acp === \"function\";\n}\n/**\n* Opción de modelo (`configOptions` con id/categoría \"model\") de la respuesta de `session/new` o `session/load`.\n* @param {{ configOptions?: any[] | null }} response\n*/\nfunction modelConfig(response) {\n\tconst option = (response?.configOptions ?? []).find((o) => o?.category === \"model\" || o?.id === \"model\");\n\tif (!option || option.type !== \"select\") return null;\n\tconst flat = (option.options ?? []).flatMap((o) => Array.isArray(o?.options) ? o.options : [o]);\n\treturn {\n\t\tconfigId: String(option.id),\n\t\tcurrent: String(option.currentValue ?? \"\"),\n\t\toptions: flat.filter((o, i) => o && typeof o.value === \"string\" && flat.findIndex((x) => x?.value === o.value) === i).map((o) => ({\n\t\t\tvalue: o.value,\n\t\t\tname: String(o.name ?? o.value)\n\t\t}))\n\t};\n}\n/** Tiempo máximo para initialize + session/new|load (+ set model). */\nvar ACP_START_TIMEOUT_MS = 9e4;\n/**\n* Lanza el agente en modo ACP, negocia y abre (o retoma) una sesión.\n* @param {DetectedAgent} agent\n* @param {AcpSessionOptions} opts\n* @returns {Promise<AcpSession>}\n*/\nasync function startAcpSession(agent, opts) {\n\tif (!supportsAcp(agent)) throw new Error(`${agent.def.label} no se puede usar desde la web.`);\n\tconst { file, args, env, sessionMeta } = agent.def.acp({ path: agent.path });\n\tconst child = spawnCommand(file, args, {\n\t\tcwd: opts.cwd,\n\t\tstdio: [\n\t\t\t\"pipe\",\n\t\t\t\"pipe\",\n\t\t\t\"pipe\"\n\t\t],\n\t\t...env ? { env: {\n\t\t\t...process.env,\n\t\t\t...env\n\t\t} } : {}\n\t});\n\tlet stderr = \"\";\n\tchild.stderr?.on(\"data\", (chunk) => {\n\t\tstderr = (stderr + String(chunk)).slice(-4e3);\n\t});\n\tchild.stdin?.on(\"error\", () => {});\n\tconst conn = acp.client({ name: \"diff-review\" }).onRequest(acp.methods.client.session.requestPermission, async (ctx) => {\n\t\tconst toolCall = ctx.params.toolCall;\n\t\tconst decision = safeDecide(opts.decide, toolCall);\n\t\tif (decision.allow) {\n\t\t\topts.onPermission?.(toolCall, decision);\n\t\t\treturn permissionOutcome(ctx.params.options, true);\n\t\t}\n\t\tlet allow = false;\n\t\tlet always = false;\n\t\tif (opts.onDeniedPermission) try {\n\t\t\tconst answer = await opts.onDeniedPermission(toolCall, decision);\n\t\t\tif (answer && typeof answer === \"object\") {\n\t\t\t\tallow = Boolean(answer.allow);\n\t\t\t\talways = Boolean(answer.always);\n\t\t\t} else allow = Boolean(answer);\n\t\t} catch {\n\t\t\tallow = false;\n\t\t\talways = false;\n\t\t}\n\t\tconst final = {\n\t\t\tallow,\n\t\t\treason: allow ? always ? \"permitido siempre\" : \"permitido por el usuario\" : decision.reason\n\t\t};\n\t\topts.onPermission?.(toolCall, final);\n\t\treturn permissionOutcome(ctx.params.options, allow, { always });\n\t}).onNotification(acp.methods.client.session.update, (ctx) => {\n\t\topts.onUpdate?.(ctx.params.update);\n\t}).connect(acp.ndJsonStream(Writable.toWeb(child.stdin), Readable.toWeb(child.stdout)));\n\tnew Promise((resolve) => {\n\t\tchild.once(\"error\", (err) => {\n\t\t\tstderr += `\\n${err.message}`;\n\t\t\tresolve(null);\n\t\t});\n\t\tchild.once(\"exit\", (code) => resolve(code));\n\t}).then((code) => {\n\t\tconn.close(/* @__PURE__ */ new Error(`${agent.def.label} terminó (código ${code ?? \"?\"}).`));\n\t\topts.onExit?.({\n\t\t\tcode,\n\t\t\tstderr\n\t\t});\n\t});\n\tconst close = () => {\n\t\tconn.close();\n\t\tif (child.exitCode == null) child.kill();\n\t};\n\tconst timeoutMs = Math.max(15e3, Number(opts.timeoutMs) || ACP_START_TIMEOUT_MS);\n\tlet timedOut = false;\n\tconst timer = setTimeout(() => {\n\t\ttimedOut = true;\n\t\tclose();\n\t}, timeoutMs);\n\ttry {\n\t\tconst init = await conn.agent.request(acp.methods.agent.initialize, {\n\t\t\tprotocolVersion: acp.PROTOCOL_VERSION,\n\t\t\tclientCapabilities: {\n\t\t\t\tfs: {\n\t\t\t\t\treadTextFile: false,\n\t\t\t\t\twriteTextFile: false\n\t\t\t\t},\n\t\t\t\tterminal: false,\n\t\t\t\tauth: { terminal: true },\n\t\t\t\t_meta: { \"terminal-auth\": true }\n\t\t\t},\n\t\t\tclientInfo: {\n\t\t\t\tname: \"diff-review\",\n\t\t\t\tversion: \"0\"\n\t\t\t}\n\t\t});\n\t\tconst authMethods = Array.isArray(init.authMethods) ? init.authMethods : [];\n\t\tconst grouped = groupAuthMethods(authMethods);\n\t\t/** Solo type agent (p. ej. Cursor `cursor_login`). Nunca terminal ni Copilot `_meta.terminal-auth`. */\n\t\tconst agentAuthMethods = grouped.agent;\n\t\tconst interactiveAuthMethods = [...grouped.terminal, ...grouped.terminalMeta];\n\t\t/** Si session/new falla por auth, pedimos `authenticate` una vez (métodos agent) y reintentamos. */\n\t\tconst tryAuthenticate = async () => {\n\t\t\tfor (const method of agentAuthMethods) try {\n\t\t\t\tawait conn.agent.request(acp.methods.agent.authenticate, { methodId: method.id });\n\t\t\t\treturn true;\n\t\t\t} catch {}\n\t\t\treturn false;\n\t\t};\n\t\tconst authRequired = (msg) => {\n\t\t\tconst label = agent.def.label;\n\t\t\treturn new AcpAuthRequiredError(authFailureMessage$1(agent.def.id, label, msg) || `Necesitás iniciar sesión en ${label}.`, {\n\t\t\t\tmethods: interactiveAuthMethods.length ? interactiveAuthMethods : authMethods,\n\t\t\t\tagentId: agent.def.id,\n\t\t\t\tagentLabel: label\n\t\t\t});\n\t\t};\n\t\tconst openNewSession = async () => {\n\t\t\ttry {\n\t\t\t\treturn await conn.agent.request(acp.methods.agent.session.new, {\n\t\t\t\t\tcwd: opts.cwd,\n\t\t\t\t\tmcpServers: [],\n\t\t\t\t\t...sessionMeta ? { _meta: sessionMeta } : {}\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\t\tif (!looksLikeAuthFailure(msg)) throw err;\n\t\t\t\tif (agentAuthMethods.length && await tryAuthenticate()) return await conn.agent.request(acp.methods.agent.session.new, {\n\t\t\t\t\tcwd: opts.cwd,\n\t\t\t\t\tmcpServers: [],\n\t\t\t\t\t...sessionMeta ? { _meta: sessionMeta } : {}\n\t\t\t\t});\n\t\t\t\tif (interactiveAuthMethods.length || agentAuthMethods.length || looksLikeAuthFailure(msg)) throw authRequired(msg);\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t};\n\t\tlet sessionId = \"\";\n\t\tlet response;\n\t\tlet resumed = false;\n\t\tif (opts.resumeSessionId && init.agentCapabilities?.loadSession) try {\n\t\t\tresponse = await conn.agent.request(acp.methods.agent.session.load, {\n\t\t\t\tsessionId: opts.resumeSessionId,\n\t\t\t\tcwd: opts.cwd,\n\t\t\t\tmcpServers: [],\n\t\t\t\t...sessionMeta ? { _meta: sessionMeta } : {}\n\t\t\t});\n\t\t\tsessionId = opts.resumeSessionId;\n\t\t\tresumed = true;\n\t\t} catch {}\n\t\tif (!resumed) {\n\t\t\tresponse = await openNewSession();\n\t\t\tsessionId = response.sessionId;\n\t\t}\n\t\tconst models = modelConfig(response);\n\t\tlet currentModel = models?.current ?? \"\";\n\t\t/**\n\t\t* @param {string} model\n\t\t* @returns {Promise<{ currentModel: string, warning?: string }>}\n\t\t*/\n\t\tconst setModel = async (model) => {\n\t\t\tconst wanted = String(model || \"\").trim();\n\t\t\tif (!wanted || wanted === currentModel) return { currentModel };\n\t\t\tif (!models) return {\n\t\t\t\tcurrentModel,\n\t\t\t\twarning: `El agente no deja elegir el modelo; usa el suyo.`\n\t\t\t};\n\t\t\tif (!models.options.some((o) => o.value === wanted)) return {\n\t\t\t\tcurrentModel,\n\t\t\t\twarning: `El agente no ofrece el modelo \"${wanted}\"; sigue con \"${currentModel}\".`\n\t\t\t};\n\t\t\tawait conn.agent.request(acp.methods.agent.session.setConfigOption, {\n\t\t\t\tsessionId,\n\t\t\t\tconfigId: models.configId,\n\t\t\t\tvalue: wanted\n\t\t\t});\n\t\t\tcurrentModel = wanted;\n\t\t\treturn { currentModel };\n\t\t};\n\t\tlet modelWarning;\n\t\tconst initialWanted = String(opts.model || \"\").trim();\n\t\tif (initialWanted) {\n\t\t\tconst applied = await setModel(initialWanted);\n\t\t\tif (applied.warning) modelWarning = applied.warning;\n\t\t}\n\t\tconst supportsLogout = Boolean(init.agentCapabilities?.auth?.logout);\n\t\tclearTimeout(timer);\n\t\treturn {\n\t\t\tsessionId,\n\t\t\tresumed,\n\t\t\tmodels: models?.options ?? [],\n\t\t\tget currentModel() {\n\t\t\t\treturn currentModel;\n\t\t\t},\n\t\t\tsupportsLogout,\n\t\t\t...modelWarning ? { modelWarning } : {},\n\t\t\tsetModel,\n\t\t\tprompt: async (text) => {\n\t\t\t\tconst res = await conn.agent.request(acp.methods.agent.session.prompt, {\n\t\t\t\t\tsessionId,\n\t\t\t\t\tprompt: [{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t\treturn { stopReason: String(res.stopReason) };\n\t\t\t},\n\t\t\tcancel: () => conn.agent.notify(acp.methods.agent.session.cancel, { sessionId }),\n\t\t\t/** ACP `logout` si el agente lo anunció; no garantiza nada sobre credenciales de `gh`. */\n\t\t\tlogout: async () => {\n\t\t\t\tif (!supportsLogout) throw new Error(`${agent.def.label} no admite cerrar sesión desde acá.`);\n\t\t\t\tawait conn.agent.request(acp.methods.agent.logout, {});\n\t\t\t},\n\t\t\tclose,\n\t\t\tclosed: conn.closed,\n\t\t\tstderrTail: () => stderr\n\t\t};\n\t} catch (err) {\n\t\tclearTimeout(timer);\n\t\tclose();\n\t\tif (err instanceof AcpAuthRequiredError) throw err;\n\t\tconst tail = stderr.trim().split(/\\r?\\n/).slice(-8).join(\"\\n\");\n\t\tif (timedOut) {\n\t\t\tconst msg = `Timeout (${Math.round(timeoutMs / 1e3)}s) al lanzar ${agent.def.label}. ¿Está autenticado el CLI?`;\n\t\t\tconst full = tail ? `${msg}\\n${tail}` : msg;\n\t\t\tif (looksLikeAuthFailure(full)) throw new AcpAuthRequiredError(authFailureMessage$1(agent.def.id, agent.def.label, full) || full, {\n\t\t\t\tagentId: agent.def.id,\n\t\t\t\tagentLabel: agent.def.label\n\t\t\t});\n\t\t\tthrow new Error(full);\n\t\t}\n\t\tconst reason = err instanceof Error ? err.message : String(err);\n\t\tconst full = tail ? `${reason}\\n${tail}` : reason;\n\t\tif (looksLikeAuthFailure(full)) throw new AcpAuthRequiredError(authFailureMessage$1(agent.def.id, agent.def.label, full) || full, {\n\t\t\tagentId: agent.def.id,\n\t\t\tagentLabel: agent.def.label\n\t\t});\n\t\tthrow new Error(full);\n\t}\n}\n/**\n* Modelos ACP con caché en `~/.diff-review/models-cache.json` (TTL 24h).\n* @param {DetectedAgent} agent\n* @param {{ cwd: string, timeoutMs?: number, force?: boolean }} opts\n* @returns {Promise<{ models: ModelOption[], currentModel: string, fromCache: boolean }>}\n*/\nasync function listAcpModelsCached(agent, opts) {\n\tif (!Boolean(opts?.force)) {\n\t\tconst hit = readModelsCache(agent.def.id);\n\t\tif (hit) return {\n\t\t\tmodels: hit.models,\n\t\t\tcurrentModel: hit.currentModel,\n\t\t\tfromCache: true\n\t\t};\n\t}\n\tconst result = await listAcpModels(agent, opts);\n\tif (result.models.length) writeModelsCache(agent.def.id, result);\n\treturn {\n\t\t...result,\n\t\tfromCache: false\n\t};\n}\n/**\n* Modelos que ofrece el agente por ACP (abre una sesión, lee las opciones y la cierra; no manda ningún prompt).\n* @param {DetectedAgent} agent\n* @param {{ cwd: string, timeoutMs?: number }} opts\n* @returns {Promise<{ models: ModelOption[], currentModel: string }>}\n*/\nasync function listAcpModels(agent, { cwd, timeoutMs = 45e3 }) {\n\tconst ms = Math.max(5e3, Number(timeoutMs) || 45e3);\n\t/** @type {AcpSession | null} */\n\tlet session = null;\n\tconst pending = startAcpSession(agent, {\n\t\tcwd,\n\t\tdecide: () => ({\n\t\t\tallow: false,\n\t\t\treason: \"solo se listan modelos\"\n\t\t})\n\t}).then((s) => {\n\t\tsession = s;\n\t\treturn s;\n\t});\n\tconst timeout = new Promise((_, reject) => {\n\t\tsetTimeout(() => {\n\t\t\treject(/* @__PURE__ */ new Error(`Timeout (${Math.round(ms / 1e3)}s) al consultar modelos de ${agent.def.label}. Reintentá en unos segundos.`));\n\t\t}, ms);\n\t});\n\ttry {\n\t\tconst opened = await Promise.race([pending, timeout]);\n\t\tconst out = {\n\t\t\tmodels: opened.models,\n\t\t\tcurrentModel: opened.currentModel\n\t\t};\n\t\topened.close();\n\t\tsession = null;\n\t\treturn out;\n\t} catch (err) {\n\t\tpending.then((s) => s.close()).catch(() => {});\n\t\ttry {\n\t\t\tsession?.close();\n\t\t} catch {}\n\t\tthrow err;\n\t}\n}\n/** Un error en la política no puede colgar al agente esperando respuesta: se rechaza. */\nfunction safeDecide(decide, toolCall) {\n\ttry {\n\t\treturn decide(toolCall);\n\t} catch (err) {\n\t\treturn {\n\t\t\tallow: false,\n\t\t\treason: `error en la política: ${err instanceof Error ? err.message : err}`\n\t\t};\n\t}\n}\n//#endregion\n//#region ../lib/check-report.mjs\n/**\n* Valida un JSON de review y arma un texto accionable para el agente.\n*/\n/** Raíz del repo a partir del JSON (`.diff-review/foo.json` → parent, o la carpeta del archivo legacy). */\nfunction repoRootFromReviewFile(absJson) {\n\tconst dir = dirname(absJson);\n\treturn basename(dir) === \".diff-review\" ? dirname(dir) : dir;\n}\nvar MISSING_LIMIT = 40;\n/**\n* @param {unknown} payload\n* @param {string[]} [paths] rutas del diff (sin ignorados)\n* @returns {{ ok: boolean, errors: string[], notes: string[] }}\n*/\nfunction checkPayload(payload, paths = []) {\n\tconst errors = [...validateAgainst(REVIEW_SCHEMA, payload), ...reviewIssues(payload)];\n\tconst notes = [];\n\tconst known = (paths || []).map((p) => String(p || \"\").replaceAll(\"\\\\\", \"/\")).filter(Boolean);\n\tif (known.length) {\n\t\tconst blocks = Array.isArray(payload?.blocks) ? payload.blocks : [];\n\t\tconst findings = Array.isArray(payload?.findings) ? payload.findings : [];\n\t\tconst skippedPatterns = (Array.isArray(payload?.skipped) ? payload.skipped : []).map((s) => String(s?.file || \"\")).filter(Boolean);\n\t\tconst covers = (file) => {\n\t\t\tconst norm = String(file || \"\").replaceAll(\"\\\\\", \"/\");\n\t\t\tif (blocks.some((b) => String(b?.file || \"\").replaceAll(\"\\\\\", \"/\") === norm)) return true;\n\t\t\treturn skippedPatterns.some((pattern) => {\n\t\t\t\tconst p = pattern.replaceAll(\"\\\\\", \"/\");\n\t\t\t\treturn p === norm || globMatch(norm, p);\n\t\t\t});\n\t\t};\n\t\tfor (const block of blocks) {\n\t\t\tconst file = String(block?.file || \"\").replaceAll(\"\\\\\", \"/\");\n\t\t\tif (file && !known.includes(file)) errors.push(`el bloque ${block.id || file} apunta a un archivo que no está en el diff: ${file}`);\n\t\t}\n\t\tfor (const finding of findings) {\n\t\t\tconst file = String(finding?.file || \"\").replaceAll(\"\\\\\", \"/\");\n\t\t\tif (file && !known.includes(file)) errors.push(`el hallazgo ${finding.id || finding.what || file} apunta a un archivo fuera del diff: ${file}`);\n\t\t}\n\t\tconst missing = known.filter((file) => !covers(file));\n\t\tif (missing.length) {\n\t\t\tconst shown = missing.slice(0, MISSING_LIMIT);\n\t\t\tconst rest = missing.length - shown.length;\n\t\t\terrors.push(`quedaron ${missing.length} archivo(s) del diff sin bloque ni skipped: ${shown.join(\", \")}${rest > 0 ? ` … y ${rest} más` : \"\"}`);\n\t\t}\n\t} else notes.push(\"No contrasté cobertura contra git (sin lista de paths del diff).\");\n\treturn {\n\t\tok: errors.length === 0,\n\t\terrors,\n\t\tnotes\n\t};\n}\n/**\n* @param {string} filePath\n* @param {{ repo?: string, branch?: string, base?: string, cwd?: string, paths?: string[] }} [opts]\n* `paths`: lista ya conocida (p. ej. de la sesión); si viene, no se lee el `.diff` ni se llama a git.\n*/\nfunction checkReportFile(filePath, opts = {}) {\n\tconst cwd = opts.cwd || process.cwd();\n\tconst abs = isAbsolute(filePath) ? filePath : resolve(cwd, filePath);\n\tif (!existsSync(abs)) return {\n\t\tok: false,\n\t\tfile: abs,\n\t\terrors: [`No existe el archivo: ${abs}`],\n\t\tnotes: [],\n\t\tusage: true\n\t};\n\tlet payload;\n\ttry {\n\t\tpayload = decodePayload(readFileSync(abs, \"utf8\"));\n\t} catch (err) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tfile: abs,\n\t\t\terrors: [err instanceof Error ? err.message : String(err)],\n\t\t\tnotes: []\n\t\t};\n\t}\n\tconst meta = payload && typeof payload === \"object\" ? payload.meta || {} : {};\n\tconst branch = String(opts.branch || meta.branch || \"\").trim();\n\tconst base = String(opts.base || meta.base || \"develop\").trim();\n\tconst repoHint = String(opts.repo || meta.repo || \"\").trim();\n\tconst repo = (repoHint && !/^(https?:\\/\\/|git@|ssh:\\/\\/)/i.test(repoHint) ? tryResolveGitRoot(repoHint) || (existsSync(repoHint) ? resolve(repoHint) : null) : null) || tryResolveGitRoot(cwd) || repoRootFromReviewFile(abs);\n\t/** @type {string[]} */\n\tlet paths = Array.isArray(opts.paths) ? opts.paths.map(String).filter(Boolean) : [];\n\t/** @type {string[]} */\n\tconst errors = [];\n\tif (paths.length) {} else if (!branch) errors.push(\"Falta meta.branch (o --branch) para contrastar el diff.\");\n\telse if (!repo) errors.push(\"No encontré un repo local (meta.repo, el directorio actual, o la carpeta del JSON). Sin eso no puedo verificar cobertura.\");\n\telse try {\n\t\tpaths = (loadBranchDiff({\n\t\t\trepo,\n\t\t\tbranch,\n\t\t\tbase,\n\t\t\tfilename: basename(abs)\n\t\t}).files || []).map((f) => f.path);\n\t} catch (err) {\n\t\terrors.push(`No pude listar el diff (${err instanceof Error ? err.message : String(err)}). Revisá meta.repo, meta.branch y meta.base, o el companion .diff.`);\n\t}\n\tconst result = checkPayload(payload, paths);\n\tconst allErrors = [...result.errors, ...errors];\n\treturn {\n\t\tok: allErrors.length === 0,\n\t\terrors: allErrors,\n\t\tnotes: result.notes,\n\t\tfile: abs\n\t};\n}\n/**\n* @param {string} file\n* @param {string} command\n* @param {{ ok: boolean, errors: string[], notes: string[] }} result\n*/\nfunction formatCheckReport(file, command, result) {\n\tif (result.ok) return `OK: ${file}${result.notes?.length ? `\\n${result.notes.map((n) => `Note: ${n}`).join(\"\\n\")}` : \"\"}\\nSchema and references passed. You can stop.`;\n\tconst problems = (result.errors || []).map((e) => `- ${e}`).join(\"\\n\");\n\tconst notes = (result.notes || []).map((n) => `Note: ${n}`).join(\"\\n\");\n\tconst lines = [\n\t\t`INVALID: ${file}`,\n\t\t\"\",\n\t\t\"The JSON is not ready. Edit this same file until the command prints OK. Do not create a new filename.\",\n\t\t\"\",\n\t\t\"Problems:\",\n\t\tproblems || \"- (unknown)\"\n\t];\n\tif (notes) lines.push(\"\", notes);\n\tlines.push(\"\", \"How to continue:\", \"- Fix every problem above in place. Keep existing meta/intent/groups/blocks/findings; only change what is wrong or missing.\", \"- Every diff path must appear in \\\"blocks\\\" or \\\"skipped\\\" (a skipped glob counts).\", \"- If a problem lists missing paths: ADD a block or a skipped entry for each exact path. Do not only bump meta.generatedAt, notes, or claim the file is already complete.\", \"- meta.agent and meta.model are required (product name and the exact model id you are running).\", \"- intent ≥40 chars; enums exactly as in the schema.\", \"- Human-readable strings in Spanish.\", `- Re-run exactly: \\`${command}\\``, \"- Stop only when that command prints OK.\");\n\treturn lines.join(\"\\n\");\n}\n//#endregion\n//#region ../lib/review-meta.mjs\n/**\n* Estampa en el JSON quién generó la review. La CLI lo sabe mejor que el modelo.\n*/\n/**\n* `agentSession` = la sesión ACP que generó la review, para seguir conversando con el agente desde la web.\n* @param {string} filePath\n* `modelLabel` = nombre legible que el agente da al modelo (\"Haiku 5.5\"): `model` puede ser un alias\n* (`haiku`) que más adelante apunte a otra versión.\n* @param {{ agent?: string, model?: string, modelLabel?: string, agentSession?: { agentId: string, sessionId: string, outputFilename: string } }} provenance\n* @returns {boolean}\n*/\nfunction stampReviewProvenance(filePath, { agent, model, modelLabel, agentSession } = {}) {\n\tconst agentName = String(agent || \"\").trim();\n\tconst modelId = String(model || \"\").trim();\n\tconst label = String(modelLabel || \"\").trim();\n\tif (!agentName && !modelId && !agentSession) return false;\n\tlet payload;\n\ttry {\n\t\tpayload = decodePayload(readFileSync(filePath, \"utf8\"));\n\t} catch {\n\t\treturn false;\n\t}\n\tif (!payload || typeof payload !== \"object\" || Array.isArray(payload)) return false;\n\tconst current = payload.meta;\n\tconst meta = current && typeof current === \"object\" && !Array.isArray(current) ? { ...current } : {};\n\tif (agentName) meta.agent = agentName;\n\tif (modelId) {\n\t\tmeta.model = modelId;\n\t\tif (label && label !== modelId) meta.modelLabel = label;\n\t\telse delete meta.modelLabel;\n\t}\n\tif (agentSession) meta.agentSession = { ...agentSession };\n\tpayload.meta = meta;\n\twriteFileSync(filePath, `${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n\treturn true;\n}\n//#endregion\n//#region ../lib/prompt.mjs\n/**\n* Prompt de review para el agente (compartido CLI + UI).\n* Mantener alineado con el contrato de schema.json / validate.mjs.\n*/\nvar OUTPUT_SCHEMA_BLOCK = `{\n \"meta\": {\n \"source\": \"local|url\",\n \"repo\": \"<absolute path or git URL>\",\n \"branch\": \"<branch under review>\",\n \"base\": \"develop\",\n \"remoteUrl\": \"<origin URL; optional when source=url>\",\n \"generatedAt\": \"<ISO-8601 datetime; optional>\",\n \"agent\": \"<required: product name you are, e.g. Claude Code>\",\n \"model\": \"<required: exact model id you are running>\"\n },\n \"intent\": \"string\",\n \"groups\": [\n {\n \"id\": \"t1\",\n \"kind\": \"feat|fix|refactor|perf|test|chore|docs|infra\",\n \"title\": \"string, aim for ≤72 chars, imperative, no kind prefix\",\n \"intent\": \"string: why this theme exists + what it changes for the reader (not a restatement of the title)\"\n }\n ],\n \"blocks\": [\n {\n \"id\": \"b1\",\n \"group\": \"t1\",\n \"file\": \"relative/path.ext\",\n \"lines\": \"L40-58\",\n \"side\": \"new|old\",\n \"start\": 40,\n \"end\": 58,\n \"op\": \"add|mod|del|rename\",\n \"what\": \"string: concrete change + effect (aim ≤120 chars; longer OK if needed for clarity)\",\n \"why\": \"string: motivation / why this change belongs in the branch (aim ≤120 chars)\",\n \"source\": \"code|commit|pr|issue|inferred\"\n }\n ],\n \"findings\": [\n {\n \"id\": \"f1\",\n \"class\": \"risk|quality\",\n \"severity\": \"high|med|low|nit\",\n \"blocking\": false,\n \"kind\": \"bug|race|auth|security|api-break|missing-test|perf|maintainability|docs|other\",\n \"file\": \"relative/path.ext\",\n \"line\": 87,\n \"block\": \"b1\",\n \"what\": \"string: cause + why it is a problem + observable consequence (aim ≤120 chars; prefer clarity over brevity)\",\n \"fix\": \"string: suggested change + why that change resolves the problem / what it avoids (aim ≤120 chars)\"\n }\n ],\n \"skipped\": [\n { \"file\": \"relative/path-or-glob\", \"reason\": \"generated|lockfile|format|vendored|binary|trivial|ignored\" }\n ],\n \"notes\": [\"optional short limitations\"]\n}`;\nvar RULES = `- Ids: themes use \\`t1\\`, \\`t2\\`, …; findings use \\`f1\\`, \\`f2\\`, …; blocks use \\`b1\\`, \\`b2\\`, …. Reference themes from blocks via \\`\"group\": \"t1\"\\`.\n- Coverage (hard): every path in the diff MUST appear in \"blocks\" and/or \"skipped\". Prefer a skipped glob when many files share one reason.\n- Do NOT invent files, hunks, or line ranges that are not in the diff.\n- Line anchors: \"lines\"/\"start\"/\"end\"/\"line\" MUST match the chosen \"side\" (\"new\" = post-image / right side of @@; \"old\" = pre-image, typically deletions). One block per coherent change span, not one per line. Point findings at that block; leave \"block\" empty only if cross-cutting.\n- Do NOT report: pre-existing code outside the diff; linter/formatter noise; naming/style prefs with no real consequence; intentional branch behavior; silenced lint rules; \"missing docs/coverage\" without a concrete broken scenario.\n- Quality findings must name a concrete cost, not a vague feeling.\n- Theme \"intent\": explain why the theme exists and what it changes for the reader — not a paraphrase of \"title\". One short sentence is too little; aim for 1–3 sentences with cause and scope.\n- Top-level \"intent\": 2–4 sentences on what the branch solves and why it matters.\n- Finding \"what\": cover (1) the concrete cause in the diff, (2) why it is a problem (failure mode, risk, or cost), and (3) the observable consequence. Do not stop at a symptom label.\n- Finding \"fix\": cover (1) the suggested change and (2) why that change resolves the problem / what the reader gains or avoids. Vague advice (\"mejorar el manejo\") is not enough.\n- Signal over volume: prefer fewer high-signal findings. Order findings by severity (high, then nit). Use \"nit\" sparingly.\n- \"blocking\": true ONLY if the branch should not merge as-is. Use only with class \"risk\".\n- Parallelize: when several read-only lookups are independent (Read, Grep/search, Glob, etc.), issue them in the same turn if your tools allow parallel calls. Do not serialize independent work — finish faster by batching.\n- Write human-readable strings (intent, title, what, why, fix, notes) in Spanish. Keep enums/ids/paths/JSON keys exactly as in the schema.\n- Length is a soft target, not a check: aim for title ≤72 characters and what/why/fix ≤120 characters when possible. Prefer clarity over shortening — thin one-liners that omit cause, impact, or why-the-fix-works are worse than a slightly longer explanation. Longer text is still valid. Do not rewrite the file only to shorten it.\n- If the output JSON already exists and findings have \\`resolution\\` ({ kind: ignored|fix|corrected, detail?: string }), preserve those fields on rewrite (coverage / edit / regenerate). Keep existing finding ids when possible; do not drop or reshuffle resolutions.`;\n/** @param {{ hasDiff?: boolean }} [ctx] */\nfunction workflowLocal(base, branch, ctx = {}) {\n\tif (ctx.hasDiff) return `Workflow:\n1. The host already computed the three-dot diff and wrote it to disk (see \"Precomputed git context\"). Read that file with your file tools. Do not run \\`git diff\\`, \\`git merge-base\\`, or rebuild the patch yourself unless that file is missing.\n2. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n3. Emit the JSON file. Do not modify the repo.\n4. Validate it with the command in the output section. If it prints INVALID, follow \"How to continue\" and re-run until it prints OK.`;\n\treturn `Workflow:\n1. Resolve the merge-base of \\`${base}\\` and \\`${branch}\\`.\n2. Run exactly: \\`git diff ${base}...${branch}\\` (three-dot / merge-base diff). Do not use two-dot unless three-dot is impossible.\n3. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n4. Emit the JSON file. Do not modify the repo.\n5. Validate it with the command in the output section. If it prints INVALID, follow \"How to continue\" and re-run until it prints OK.`;\n}\n/** Comando que el agente debe correr (sobre `.diff-review/<nombre>`); npx por si el bin no está en PATH. */\nfunction validateCliCommand(filename) {\n\treturn `npx --yes @jpkme/diff-review validate ${outputRelPath(String(filename || \"diff-rev_<branchTip>_<baseTip>.json\").trim())}`;\n}\n/** @param {{ hasDiff?: boolean }} [ctx] */\nfunction workflowUrl(base, branch, ctx = {}) {\n\tif (ctx.hasDiff) return `Workflow:\n1. If the repo is not local, clone it (or use whatever access you have). Do not modify it.\n2. The host already computed the three-dot diff and wrote it to disk (see \"Precomputed git context\"). Read that file with your file tools. Do not run \\`git diff\\`, \\`git merge-base\\`, or rebuild the patch yourself unless that file is missing.\n3. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n4. Emit the JSON file.\n5. Validate it with the command in the output section. If it prints INVALID, follow \"How to continue\" and re-run until it prints OK.`;\n\treturn `Workflow:\n1. If the repo is not local, clone it (or use whatever access you have). Do not modify it.\n2. Resolve the merge-base of \\`${base}\\` and \\`${branch}\\`.\n3. Run exactly: \\`git diff ${base}...${branch}\\` (three-dot / merge-base diff). Do not use two-dot unless three-dot is impossible.\n4. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n5. Emit the JSON file.\n6. Validate it with the command in the output section. If it prints INVALID, follow \"How to continue\" and re-run until it prints OK.`;\n}\n/** Workflow sin paso de validate por CLI (sesiones ACP: valida el server). */\nfunction workflowLocalAcp(ctx = {}) {\n\tif (ctx.hasDiff) return `Workflow:\n1. The host already computed the three-dot diff and wrote it to disk (see \"Precomputed git context\"). Read that file with your file tools. Do not run \\`git diff\\`, \\`git merge-base\\`, or rebuild the patch yourself unless that file is missing.\n2. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n3. Write the JSON with your file Write/Edit tool (never shell redirection). Do not modify other repo files. The host validates when your turn ends — do not run the validate CLI.`;\n\treturn `Workflow:\n1. Resolve the merge-base of the base and branch named above, then run the three-dot \\`git diff base...branch\\`.\n2. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n3. Write the JSON with your file Write/Edit tool (never shell redirection). Do not modify other repo files. The host validates when your turn ends — do not run the validate CLI.`;\n}\nfunction workflowUrlAcp(ctx = {}) {\n\tif (ctx.hasDiff) return `Workflow:\n1. If the repo is not local, clone it (or use whatever access you have). Do not modify it.\n2. The host already computed the three-dot diff and wrote it to disk (see \"Precomputed git context\"). Read that file with your file tools. Do not run \\`git diff\\`, \\`git merge-base\\`, or rebuild the patch yourself unless that file is missing.\n3. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n4. Write the JSON with your file Write/Edit tool (never shell redirection). The host validates when your turn ends — do not run the validate CLI.`;\n\treturn `Workflow:\n1. If the repo is not local, clone it (or use whatever access you have). Do not modify it.\n2. Resolve the merge-base, then run the three-dot \\`git diff base...branch\\`.\n3. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n4. Write the JSON with your file Write/Edit tool (never shell redirection). The host validates when your turn ends — do not run the validate CLI.`;\n}\n/**\n* @param {{ source?: string, repo?: string, branch?: string, base?: string, remoteUrl?: string }} meta\n*/\nfunction outputSchemaBlock(meta) {\n\tconst source = meta.source === \"url\" ? \"url\" : \"local\";\n\tconst repo = String(meta.repo || \"\").trim() || (source === \"url\" ? \"<git URL>\" : \"<absolute repo path>\");\n\tconst branch = String(meta.branch || \"\").trim() || \"<branch under review>\";\n\tconst base = String(meta.base || \"\").trim() || \"develop\";\n\tconst remoteUrl = String(meta.remoteUrl || \"\").trim() || (source === \"url\" ? repo : \"\");\n\tconst metaLines = [\n\t\t` \"source\": ${JSON.stringify(source)},`,\n\t\t` \"repo\": ${JSON.stringify(repo)},`,\n\t\t` \"branch\": ${JSON.stringify(branch)},`,\n\t\t` \"base\": ${JSON.stringify(base)},`\n\t];\n\tif (remoteUrl) metaLines.push(` \"remoteUrl\": ${JSON.stringify(remoteUrl)},`);\n\tmetaLines.push(` \"generatedAt\": \"<ISO-8601 datetime>\",`, ` \"agent\": \"<required: product name you are, e.g. Claude Code>\",`, ` \"model\": \"<required: exact model id you are running>\"`);\n\tconst metaBlock = `\"meta\": {\\n${metaLines.join(\"\\n\")}\\n }`;\n\treturn OUTPUT_SCHEMA_BLOCK.replace(/\"meta\": \\{[\\s\\S]*?\\n \\}/, metaBlock);\n}\n/**\n* Bloque de contexto git ya resuelto (diff en disco, tips, lista de archivos, ignores).\n* @param {{\n* diffRelPath?: string | null,\n* mergeBase?: string,\n* branchSha?: string,\n* baseSha?: string,\n* files?: Array<{ path: string, changeType?: string }>,\n* ignored?: string[],\n* ignoreGlobs?: string[],\n* }} ctx\n*/\nfunction formatPrecomputedContext(ctx) {\n\tconst lines = [\"Precomputed git context (provided by the host — do not rediscover or recompute):\"];\n\tif (ctx.mergeBase) lines.push(`- Merge-base SHA: \\`${ctx.mergeBase}\\``);\n\tif (ctx.branchSha) lines.push(`- Branch tip SHA: \\`${ctx.branchSha}\\``);\n\tif (ctx.baseSha) lines.push(`- Base tip SHA: \\`${ctx.baseSha}\\``);\n\tif (ctx.diffRelPath) lines.push(`- Diff file (relative to repo root): \\`${ctx.diffRelPath}\\` — Read this file for the full patch. Do not run \\`git diff\\` / \\`git merge-base\\` to rebuild it unless the file is missing.`);\n\tconst files = Array.isArray(ctx.files) ? ctx.files : [];\n\tif (files.length) {\n\t\tlines.push(`- Files in the diff (${files.length}):`);\n\t\tconst limit = 200;\n\t\tfor (const f of files.slice(0, limit)) {\n\t\t\tconst path = String(f?.path || \"\").trim();\n\t\t\tif (!path) continue;\n\t\t\tconst kind = String(f?.changeType || \"\").trim();\n\t\t\tlines.push(kind ? ` - ${kind}: ${path}` : ` - ${path}`);\n\t\t}\n\t\tif (files.length > limit) lines.push(` - … and ${files.length - limit} more`);\n\t}\n\tconst ignored = Array.isArray(ctx.ignored) ? ctx.ignored.filter(Boolean) : [];\n\tif (ignored.length) {\n\t\tlines.push(`- Ignored paths (excluded from the file list; if you mention them use \"skipped\" with reason \"ignored\"):`);\n\t\tfor (const p of ignored.slice(0, 40)) lines.push(` - ${p}`);\n\t\tif (ignored.length > 40) lines.push(` - … and ${ignored.length - 40} more`);\n\t}\n\tconst globs = Array.isArray(ctx.ignoreGlobs) ? ctx.ignoreGlobs.filter(Boolean) : [];\n\tif (globs.length) lines.push(`- Ignore globs (DEFAULT + config): ${globs.map((g) => `\\`${g}\\``).join(\", \")}`);\n\treturn lines.join(\"\\n\");\n}\n/**\n* @param {{ source?: string, repo?: string, branch?: string, base?: string, remoteUrl?: string }} meta\n* @param {{\n* outputFilename?: string,\n* acp?: boolean,\n* diffRelPath?: string | null,\n* mergeBase?: string,\n* branchSha?: string,\n* baseSha?: string,\n* files?: Array<{ path: string, changeType?: string }>,\n* ignored?: string[],\n* ignoreGlobs?: string[],\n* }} [opts]\n*/\nfunction buildPrompt(meta, opts = {}) {\n\tconst outputFilename = opts.outputFilename || makeOutputFilename();\n\tconst outputPath = outputRelPath(outputFilename);\n\tconst repo = String(meta.repo || \"\").trim() || (meta.source === \"url\" ? \"<git URL>\" : \"<absolute repo path>\");\n\tconst branch = String(meta.branch || \"\").trim() || \"<branch under review>\";\n\tconst base = String(meta.base || \"\").trim() || \"develop\";\n\tconst acp = Boolean(opts.acp);\n\tconst hasDiff = Boolean(String(opts.diffRelPath || \"\").trim());\n\tconst workflow = acp ? meta.source === \"url\" ? workflowUrlAcp({ hasDiff }) : workflowLocalAcp({ hasDiff }) : meta.source === \"url\" ? workflowUrl(base, branch, { hasDiff }) : workflowLocal(base, branch, { hasDiff });\n\tconst precomputed = formatPrecomputedContext({\n\t\tdiffRelPath: opts.diffRelPath,\n\t\tmergeBase: opts.mergeBase,\n\t\tbranchSha: opts.branchSha,\n\t\tbaseSha: opts.baseSha,\n\t\tfiles: opts.files,\n\t\tignored: opts.ignored,\n\t\tignoreGlobs: opts.ignoreGlobs\n\t});\n\tconst hasPrecomputed = hasDiff || opts.mergeBase || opts.branchSha || opts.baseSha || opts.files && opts.files.length || opts.ignored && opts.ignored.length || opts.ignoreGlobs && opts.ignoreGlobs.length;\n\tconst validateSection = acp ? `When done writing \\`${outputPath}\\`, stop. The host validates the JSON automatically and will send you any problems — do not run \\`npx … validate\\` yourself.` : `After writing the file, validate it (npx so it works even if \\`diff-review\\` is not on PATH):\n\n\\`${validateCliCommand(outputFilename)}\\`\n\n- Exit 0 and a line starting with \\`OK\\` means the JSON is acceptable. Then tell me that \\`${outputPath}\\` was written.\n- Exit 1 prints \\`INVALID\\`, the problems, and how to continue. Fix the same file and re-run that exact command until it prints OK. Do not stop before OK.`;\n\treturn `You are a senior code reviewer: strict but fair.\n\nRepo: ${repo}\nBranch under review: ${branch}\nBase (merge-base): ${base}\n\n${workflow}\n${hasPrecomputed ? `\\n${precomputed}\\n` : \"\"}\nRules:\n${RULES}\n\nWrite the result to \\`${outputPath}\\` (relative to the repo root; use forward slashes, never \\`\\\\\\`). The \\`${OUTPUT_DIR}/\\` folder is already created by the host — do not \\`mkdir\\` it.\n- If that file already exists: **Read it first**, then Edit/overwrite (or Write after Read). Many agents reject Write with \"File has not been read yet\" unless you Read that exact path first.\n- If it does not exist yet: Write is fine. Do NOT use shell redirection (\\`>\\`, \\`>>\\`, \\`Out-File\\`, \\`tee\\`, etc.) — those are rejected.\n- One JSON object only: first character \\`{\\`, last character \\`}\\`.\n- No prose before/after, no markdown fences.\n- Shape (copy \"meta\" source/repo/branch/base/remoteUrl as given; \"agent\" and \"model\" are required):\n\n${outputSchemaBlock(meta)}\n\nInclude \"meta\" with the source/repo/branch/base above (and origin \"remoteUrl\" when local). \"agent\" and \"model\" are required: set \"agent\" to the product you are (Claude Code, Cursor, Copilot, …) and \"model\" to the exact model id you are running. Do not leave placeholders or omit them; validation fails without both. \"generatedAt\" is optional (ISO-8601 now).\n\nDo NOT include diffs or a \"files\" array. The tool loads the companion \\`.diff\\` (or computes with git if missing) when opening the report. Do not invent hunks or paste patches into the JSON. If you are rewriting an existing review JSON, copy through any per-finding \\`resolution\\` already present.\n\n${validateSection}`;\n}\n//#endregion\n//#region ../lib/review-prep.mjs\n/**\n* Precomputa contexto git para el prompt de review (diff cache + lista de archivos).\n*/\n/**\n* Cachea el three-dot diff y arma las opciones de `buildPrompt` (tips, files, ignores).\n* @param {{\n* repo: string,\n* branch: string,\n* base?: string,\n* outputFilename: string,\n* acp?: boolean,\n* }} input\n*/\nfunction prepareReviewPromptOpts(input) {\n\tconst repo = String(input.repo || \"\").trim();\n\tconst branch = String(input.branch || \"\").trim();\n\tconst base = String(input.base || \"develop\").trim() || \"develop\";\n\tconst outputFilename = String(input.outputFilename || \"\").trim();\n\tif (!repo || !branch || !outputFilename) throw new Error(\"prepareReviewPromptOpts requiere repo, branch y outputFilename.\");\n\tensureReviewDir(repo);\n\twriteDiffCache(repo, outputFilename, {\n\t\tbranch,\n\t\tbase\n\t});\n\tconst cached = readDiffCache(repo, outputFilename);\n\tlet extracted;\n\ttry {\n\t\textracted = extractBranchDiff({\n\t\t\trepo,\n\t\t\tbranch,\n\t\t\tbase,\n\t\t\t...cached ? { cachedDiff: cached } : {}\n\t\t});\n\t} catch {\n\t\textracted = extractBranchDiff({\n\t\t\trepo,\n\t\t\tbranch,\n\t\t\tbase\n\t\t});\n\t}\n\tconst config = loadReviewConfig(repo);\n\tconst diffRelPath = cached ? outputRelPath(outputFilename).replace(/\\.json$/i, \".diff\") : null;\n\treturn {\n\t\toutputFilename,\n\t\tacp: Boolean(input.acp),\n\t\tdiffRelPath,\n\t\tmergeBase: extracted.mergeBase || void 0,\n\t\tbranchSha: extracted.branchSha || void 0,\n\t\tbaseSha: extracted.baseSha || void 0,\n\t\tfiles: (extracted.files || []).map((f) => ({\n\t\t\tpath: f.path,\n\t\t\tchangeType: f.changeType\n\t\t})),\n\t\tignored: extracted.context?.ignored || [],\n\t\tignoreGlobs: config.ignore\n\t};\n}\n//#endregion\n//#region src/lib/report/agent-events.ts\n/**\n* Aplica un evento a la lista: un `text` con el mismo `seq` que el último es la continuación de ese chunk.\n*/\nfunction applyEvent(events, event) {\n\tconst last = events[events.length - 1];\n\tif (last && last.seq === event.seq && last.type === \"text\" && event.type === \"text\") return [...events.slice(0, -1), {\n\t\t...last,\n\t\ttext: last.text + event.text\n\t}];\n\tif (event.type === \"tool\") {\n\t\tconst i = events.findIndex((e) => e.type === \"tool\" && e.id === event.id);\n\t\tif (i >= 0) {\n\t\t\tconst prev = events[i];\n\t\t\tconst merged = {\n\t\t\t\t...prev,\n\t\t\t\ttitle: event.title || prev.title,\n\t\t\t\tkind: event.kind || prev.kind,\n\t\t\t\tstatus: event.status || prev.status\n\t\t\t};\n\t\t\treturn [\n\t\t\t\t...events.slice(0, i),\n\t\t\t\tmerged,\n\t\t\t\t...events.slice(i + 1)\n\t\t\t];\n\t\t}\n\t}\n\tif (event.type === \"permission\") {\n\t\tconst i = events.findIndex((e) => e.type === \"permission\" && e.requestId === event.requestId);\n\t\tif (i >= 0) return [\n\t\t\t...events.slice(0, i),\n\t\t\tevent,\n\t\t\t...events.slice(i + 1)\n\t\t];\n\t}\n\treturn [...events, event];\n}\n//#endregion\n//#region src/lib/server/agent-sessions.ts\n/**\n* Sesiones con agentes por ACP, del lado del server: el server es dueño del proceso del agente y la web lo sigue\n* por SSE (`/api/agent/[id]/events`). Una sesión genera la review y después queda viva para preguntas y cambios.\n*\n* Los procesos viven en memoria; lo que tiene que sobrevivir va a `.diff-review/` del repo: el JSON, el diff y la\n* sesión del agente (`<nombre>.session.json`). Para chatear sobre un reporte se retoma esa sesión\n* (`session/load`); si no se puede (se borró, otro agente, otra máquina) se abre una nueva y el primer mensaje le\n* pasa el contexto: repo, branch, base y dónde están el diff y el JSON.\n*/\n/** Para que el agente no gaste turnos en comandos que la política va a rechazar. */\nvar TOOL_RULES = \"Tool rules for this session: read files with your file tools (read/search/glob). For the review JSON path: use forward slashes (e.g. .diff-review/foo.json). If that file already exists, Read it first, then Edit/Write — Write fails with \\\"File has not been read yet\\\" unless you Read that exact path. Never shell redirection (>, >>, Out-File, tee). The .diff-review/ folder already exists — do not mkdir it. In the terminal only read-only commands run (git diff/log/show/blame/…, cat, head, tail, grep, rg, find, ls, wc, sed -n). No redirections to files, no command substitution, no installs, no network. Anything else is rejected automatically: do not retry the same rejected command; use the file tool or another read-only way.\";\n/**\n* En estas sesiones valida el server al terminar cada turno (y le devuelve los errores al agente): correr el\n* validate por npx es lento y puede resolver otra versión del paquete.\n*/\nvar SERVER_VALIDATES = \"Note: in this session diff-review validates the JSON automatically when your turn ends and sends you any problems. Do not run the validate command yourself.\";\n/** Sin actividad por este tiempo se cierra el proceso del agente (se retoma con `session/load`). */\nvar IDLE_CLOSE_MS = 1800 * 1e3;\nvar MAX_EVENTS = 4e3;\n/** Si el usuario no responde un permiso pendiente, se rechaza para no colgar el turno. */\nvar PERMISSION_TIMEOUT_MS = 120 * 1e3;\nvar sessions = /* @__PURE__ */ new Map();\nprocess.once(\"exit\", () => {\n\tfor (const entry of sessions.values()) entry.acp?.close();\n});\nfunction listAcpAgents() {\n\treturn detectAgents().filter(supportsAcp).map((a) => ({\n\t\tid: a.def.id,\n\t\tlabel: a.def.label,\n\t\tpath: a.path,\n\t\tmodels: modelChoices(a.def).options\n\t}));\n}\nvar modelsCache = /* @__PURE__ */ new Map();\n/**\n* Modelos que ofrece el agente por ACP (abre una sesión de prueba; tarda unos segundos).\n* Solo cachea listas no vacías. `force` invalida la caché. Vacío o error → se puede reintentar.\n*/\nfunction agentModels(agentId, cwd, opts) {\n\tif (opts?.force) modelsCache.delete(agentId);\n\tlet hit = modelsCache.get(agentId);\n\tif (!hit) {\n\t\tconst agent = findAgent(agentId);\n\t\thit = listAcpModelsCached(agent, {\n\t\t\tcwd,\n\t\t\tforce: Boolean(opts?.force)\n\t\t}).then((result) => {\n\t\t\tif (!result.models.length) modelsCache.delete(agentId);\n\t\t\tconst { fromCache: _fromCache, ...rest } = result;\n\t\t\treturn rest;\n\t\t}).catch((err) => {\n\t\t\tmodelsCache.delete(agentId);\n\t\t\tconst raw = err instanceof Error ? err.message : String(err);\n\t\t\tconst auth = authFailureMessage(agentId, agent.def.label, raw);\n\t\t\tthrow new Error(auth || raw);\n\t\t});\n\t\tmodelsCache.set(agentId, hit);\n\t}\n\treturn hit;\n}\nfunction findAgent(agentId) {\n\tconst agent = detectAgents().find((a) => a.def.id === agentId);\n\tif (!agent) throw new Error(`No encontré el agente \"${agentId}\" instalado.`);\n\tif (!supportsAcp(agent)) throw new Error(`${agent.def.label} no se puede usar desde la web.`);\n\treturn agent;\n}\nfunction info(entry) {\n\tconst { id, agentId, agentLabel, model, repo, branch, base, outputFilename, acpSessionId, status, busy, statusMessage, sessionAllowDenied } = entry;\n\treturn {\n\t\tid,\n\t\tagentId,\n\t\tagentLabel,\n\t\tmodel,\n\t\trepo,\n\t\tbranch,\n\t\tbase,\n\t\toutputFilename,\n\t\tacpSessionId,\n\t\tstatus,\n\t\tbusy,\n\t\tsessionTrust: Boolean(sessionAllowDenied),\n\t\t...statusMessage ? { statusMessage } : {}\n\t};\n}\nfunction authFailureMessage(agentId, agentLabel, detail) {\n\treturn authFailureMessage$1(agentId, agentLabel, detail);\n}\n/**\n* Abre el login del agente.\n* - Con `sessionId`: comando según authMethods ACP (proceso oculto sin TTY), espera exit 0, reconecta y retoma.\n* - Solo `agentId`: lanza el comando fallback en background (p. ej. fallo al listar modelos).\n*/\nasync function openAgentLogin(input) {\n\tconst sessionId = String(input?.sessionId || \"\").trim();\n\tconst agentId = String(input?.agentId || \"\").trim();\n\tconst host = input?.host != null ? String(input.host) : void 0;\n\tif (sessionId) {\n\t\tconst entry = sessions.get(sessionId);\n\t\tif (!entry) throw new Error(\"La sesión del agente ya no existe. Recargá la página.\");\n\t\tconst method = pickLoginAuthMethod(entry.pendingAuthMethods || []);\n\t\tlet cmd;\n\t\ttry {\n\t\t\tcmd = resolveLoginCommand(entry.agent, method);\n\t\t} catch {\n\t\t\tcmd = loginCommand(entry.agentId, { host });\n\t\t\tif (!cmd) throw new Error(\"Este agente no tiene un inicio de sesión conocido.\");\n\t\t}\n\t\tif (entry.agentId === \"copilot\" || agentId === \"copilot\") cmd = withCopilotLoginHost(cmd, host);\n\t\tsetStatus(entry, \"starting\", loginWaitingMessage());\n\t\tentry.busy = true;\n\t\ttry {\n\t\t\tconst result = await runLoginTerminal(cmd, {\n\t\t\t\twait: true,\n\t\t\t\tcwd: entry.repo\n\t\t\t});\n\t\t\tif (result.code !== 0) {\n\t\t\t\tentry.busy = false;\n\t\t\t\tconst msg = loginIncompleteMessage();\n\t\t\t\tsetStatus(entry, \"needs_auth\", msg);\n\t\t\t\tthrow new Error(msg);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tentry.acp?.close();\n\t\t\t} catch {}\n\t\t\tentry.acp = null;\n\t\t\tentry.pendingAuthMethods = null;\n\t\t\tconst resume = entry.authResume || \"chat\";\n\t\t\tentry.authResume = null;\n\t\t\tentry.busy = false;\n\t\t\tif (resume === \"review\") {\n\t\t\t\tsetStatus(entry, \"starting\", \"Login ok. Reintentando la review…\");\n\t\t\t\tcontinueReviewAfterDiff(entry, {\n\t\t\t\t\trepo: entry.repo,\n\t\t\t\t\tbranch: entry.branch,\n\t\t\t\t\tbase: entry.base,\n\t\t\t\t\toutputFilename: entry.outputFilename,\n\t\t\t\t\tmodel: entry.model || void 0\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsetStatus(entry, \"starting\", \"Login ok. Reconectando con el agente…\");\n\t\t\t\ttry {\n\t\t\t\t\tawait ensureAcp(entry, entry.model || void 0);\n\t\t\t\t\tsetStatus(entry, \"idle\");\n\t\t\t\t} catch (err) {\n\t\t\t\t\tentry.busy = false;\n\t\t\t\t\tif (isAuthError(err)) markNeedsAuth(entry, err, \"chat\");\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst raw = err instanceof Error ? err.message : String(err);\n\t\t\t\t\t\tsetStatus(entry, \"error\", authFailureMessage(entry.agentId, entry.agentLabel, raw) || raw);\n\t\t\t\t\t}\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tdisplay: result.display,\n\t\t\t\tresumed: true,\n\t\t\t\tcode: result.code\n\t\t\t};\n\t\t} catch (err) {\n\t\t\tentry.busy = false;\n\t\t\tif (entry.status !== \"needs_auth\" && entry.status !== \"error\" && entry.status !== \"starting\") setStatus(entry, \"needs_auth\", err instanceof Error ? err.message : String(err));\n\t\t\tthrow err;\n\t\t}\n\t}\n\tif (!agentId) throw new Error(\"Falta agentId o sessionId.\");\n\tconst cmd = loginCommand(agentId, { host });\n\tif (!cmd) throw new Error(\"Este agente no tiene un inicio de sesión conocido.\");\n\treturn openLoginTerminal(cmd);\n}\n/**\n* Cierra la sesión del agente (y cuentas `gh` si es Copilot) para poder elegir otra cuenta.\n* Deja la entry en `needs_auth` lista para un nuevo login.\n*/\nasync function openAgentLogout(input) {\n\tconst sessionId = String(input?.sessionId || \"\").trim();\n\tconst host = input?.host != null ? String(input.host) : void 0;\n\tlet agentId = String(input?.agentId || \"\").trim();\n\t/** @type {Entry | undefined} */\n\tlet entry;\n\tif (sessionId) {\n\t\tentry = sessions.get(sessionId);\n\t\tif (!entry) throw new Error(\"La sesión del agente ya no existe. Recargá la página.\");\n\t\tagentId = entry.agentId || agentId;\n\t}\n\tif (!agentId) throw new Error(\"Falta agentId o sessionId.\");\n\t/** @type {string[]} */\n\tconst steps = [];\n\t/** @type {string[]} */\n\tconst warnings = [];\n\tif (entry?.acp?.supportsLogout) try {\n\t\tawait entry.acp.logout();\n\t\tsteps.push(\"Cerré la sesión del agente.\");\n\t} catch (err) {\n\t\twarnings.push(err instanceof Error ? err.message : String(err));\n\t}\n\ttry {\n\t\tentry?.acp?.close();\n\t} catch {}\n\tif (entry) {\n\t\tentry.acp = null;\n\t\tentry.starting = null;\n\t\tentry.busy = false;\n\t\tentry.pendingAuthMethods = null;\n\t\tentry.authResume = entry.authResume || (entry.seed || entry.diffText ? \"review\" : \"chat\");\n\t}\n\tconst cli = await runAgentLogout(agentId, {\n\t\thost,\n\t\tcwd: entry?.repo\n\t});\n\tsteps.push(...cli.steps);\n\twarnings.push(...cli.warnings);\n\tconst msg = warnings.length && !cli.ok ? warnings[0] : \"Sesión cerrada. Elegí con qué cuenta iniciar de nuevo.\";\n\tif (entry) setStatus(entry, \"needs_auth\", msg);\n\treturn {\n\t\tok: cli.ok || steps.length > 0,\n\t\tsteps,\n\t\twarnings\n\t};\n}\n/** Escribe seed (JSON + .diff) en `.diff-review/` para que el agente los lea. */\nfunction materializeSeed(entry) {\n\tconst seed = entry.seed;\n\tif (!seed) return;\n\ttry {\n\t\tensureReviewDir(entry.repo);\n\t\tconst paths = companionPaths(entry.repo, entry.outputFilename);\n\t\tif (seed.payload !== void 0) writeFileSync(paths.json, `${JSON.stringify(seed.payload, null, 2)}\\n`);\n\t\tif (typeof seed.diff === \"string\" && seed.diff.length) writeDiffText(entry.repo, entry.outputFilename, seed.diff);\n\t\telse writeDiffCache(entry.repo, entry.outputFilename, {\n\t\t\tbranch: entry.branch,\n\t\t\tbase: entry.base\n\t\t});\n\t} catch {}\n}\n/** Escribe (pisa) el companion `.chat.md` de handoff si hay markdown pendiente. */\nfunction materializeHandoffChat(entry) {\n\tconst text = entry.handoffChatMarkdown;\n\tif (text == null) return;\n\ttry {\n\t\twriteHandoffChat(entry.repo, entry.outputFilename, text);\n\t} catch {}\n\tentry.handoffChatMarkdown = null;\n}\n/** Prefijo del primer mensaje cuando la sesión ACP es nueva. */\nfunction contextPreamble(entry, handoffNote) {\n\tmaterializeSeed(entry);\n\tmaterializeHandoffChat(entry);\n\tconst paths = companionPaths(entry.repo, entry.outputFilename);\n\tconst jsonRel = outputRelPath(entry.outputFilename);\n\tconst diffRel = `${outputRelPath(entry.outputFilename).replace(/\\.json$/i, \"\")}.diff`;\n\tconst hasJson = existsSync(paths.json);\n\tconst hasDiff = existsSync(paths.diff);\n\tconst lines = [\n\t\t\"Context for this chat (new agent session — read these files before answering):\",\n\t\t`- Repo: ${entry.repo}`,\n\t\t`- Branch under review: ${entry.branch}`,\n\t\t`- Base: ${entry.base}`,\n\t\thasJson ? `- Review JSON (relative to repo root): \\`${jsonRel}\\` — read this file.` : `- Review JSON: not available on disk (no seed/payload was provided). Say so if you need it.`,\n\t\thasDiff ? `- Diff (relative to repo root): \\`${diffRel}\\` — read this file.` : `- Diff file: not available on disk (no seed/diff and git cache failed). Say so if you need it.`,\n\t\t\"\",\n\t\t\"The user question or fix request is the priority. The review JSON is reference context — do not re-litigate or re-review findings unless the user asks.\",\n\t\t\"\",\n\t\t\"Findings may include optional `resolution` ({ kind: ignored|fix|corrected, detail?: string }) written by the UI. Preserve those fields when editing the JSON. Corrected findings and their detail are prior work — use them as context; do not undo them unless the user asks.\"\n\t];\n\tconst note = String(handoffNote || \"\").trim();\n\tif (note) lines.push(\"\", note);\n\tlines.push(\"\", \"User message:\");\n\treturn lines.join(\"\\n\");\n}\nfunction permissionReasonLabel(allow, scope, deniedReason) {\n\tif (!allow) return deniedReason;\n\tif (scope === \"always\") return \"permitido siempre\";\n\tif (scope === \"session\") return \"permitido en esta sesión\";\n\treturn \"permitido una vez\";\n}\nfunction askUserPermission(entry, toolCall, decision) {\n\tif (entry.sessionAllowDenied) return Promise.resolve({\n\t\tallow: true,\n\t\talways: false\n\t});\n\tconst requestId = crypto.randomUUID();\n\tconst kind = toolCall.kind || \"\";\n\tconst command = toolCallCommand(toolCall);\n\tconst title = toolCallLabel(toolCall, command) || (command ? \"\" : toolCall.title || kind || \"herramienta\");\n\tconst reason = humanizePolicyReason(decision.reason);\n\tconst base = {\n\t\trequestId,\n\t\ttitle,\n\t\tkind,\n\t\treason,\n\t\tcommand: command || void 0\n\t};\n\temit(entry, {\n\t\ttype: \"permission\",\n\t\t...base,\n\t\tallow: false,\n\t\tpending: true\n\t});\n\treturn new Promise((resolve) => {\n\t\tconst timer = setTimeout(() => {\n\t\t\tentry.pendingPermissions.delete(requestId);\n\t\t\temit(entry, {\n\t\t\t\ttype: \"permission\",\n\t\t\t\t...base,\n\t\t\t\treason: \"tiempo agotado\",\n\t\t\t\tallow: false,\n\t\t\t\tpending: false\n\t\t\t});\n\t\t\tresolve({ allow: false });\n\t\t}, PERMISSION_TIMEOUT_MS);\n\t\ttimer.unref?.();\n\t\tentry.pendingPermissions.set(requestId, {\n\t\t\tresolve: (allow, opts) => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tentry.pendingPermissions.delete(requestId);\n\t\t\t\tconst scope = opts?.scope ?? \"once\";\n\t\t\t\tif (allow && (scope === \"session\" || scope === \"always\")) entry.sessionAllowDenied = true;\n\t\t\t\temit(entry, {\n\t\t\t\t\ttype: \"permission\",\n\t\t\t\t\t...base,\n\t\t\t\t\treason: permissionReasonLabel(allow, scope, reason),\n\t\t\t\t\tallow,\n\t\t\t\t\tpending: false,\n\t\t\t\t\tquiet: opts?.quiet\n\t\t\t\t});\n\t\t\t\tresolve({\n\t\t\t\t\tallow,\n\t\t\t\t\talways: allow && scope === \"always\"\n\t\t\t\t});\n\t\t\t},\n\t\t\ttimer\n\t\t});\n\t});\n}\nfunction sessionInfo(id) {\n\tconst entry = sessions.get(id);\n\treturn entry ? info(entry) : null;\n}\n/**\n* Con la CLI mirando (`DIFF_REVIEW_MIRROR=1`), solo fallos duros a la terminal.\n* El progreso (tools, permisos, mensajes) vive en la web.\n*/\nfunction mirror(_entry, event) {\n\tif (process.env.DIFF_REVIEW_MIRROR !== \"1\") return;\n\tif (event.type === \"status\" && event.status === \"error\") console.log(`✗ ${event.message || \"error del agente\"}`);\n\telse if (event.type === \"review\" && event.ok) console.log(`✓ JSON válido: ${event.filename}`);\n}\nfunction emit(entry, event) {\n\tlet seq;\n\tif (event.type === \"text\" && entry.textSeq?.kind === event.kind) seq = entry.textSeq.seq;\n\telse {\n\t\tseq = ++entry.seq;\n\t\tentry.textSeq = event.type === \"text\" ? {\n\t\t\tkind: event.kind,\n\t\t\tseq\n\t\t} : null;\n\t}\n\tconst full = {\n\t\t...event,\n\t\tseq\n\t};\n\tmirror(entry, event);\n\tentry.events = applyEvent(entry.events, full);\n\tif (entry.events.length > MAX_EVENTS) entry.events = entry.events.slice(-4e3);\n\tfor (const listener of entry.listeners) listener(full);\n}\nfunction setStatus(entry, status, message) {\n\tentry.status = status;\n\tif (status === \"error\" || status === \"needs_auth\") entry.statusMessage = message || entry.statusMessage || \"Error del agente.\";\n\telse if (message !== void 0) delete entry.statusMessage;\n\temit(entry, {\n\t\ttype: \"status\",\n\t\tstatus,\n\t\t...message || status === \"error\" || status === \"needs_auth\" ? { message: message || entry.statusMessage } : {}\n\t});\n}\nfunction markNeedsAuth(entry, err, resume) {\n\tconst authErr = err instanceof AcpAuthRequiredError ? err : null;\n\tconst raw = err instanceof Error ? err.message : String(err);\n\tconst msg = authErr?.message || authFailureMessage(entry.agentId, entry.agentLabel, raw) || raw;\n\tentry.pendingAuthMethods = authErr?.methods?.length ? authErr.methods : entry.pendingAuthMethods;\n\tentry.authResume = resume;\n\tentry.acp = null;\n\tsetStatus(entry, \"needs_auth\", msg);\n}\nfunction isAuthError(err) {\n\tif (err instanceof AcpAuthRequiredError) return true;\n\treturn looksLikeAuthFailure(err instanceof Error ? err.message : String(err));\n}\n/** Sin sesión CLI y con login desde la app (Claude / Copilot / Cursor). */\nfunction needsInteractiveLogin(agentId) {\n\tif (!loginCommand(agentId)) return false;\n\ttry {\n\t\treturn !agentAccountStatus(agentId).loggedIn;\n\t} catch {\n\t\treturn false;\n\t}\n}\n/** SessionUpdate de ACP → evento de la web (lo que no se muestra se descarta). */\nfunction toEvent(update) {\n\tswitch (update.sessionUpdate) {\n\t\tcase \"agent_message_chunk\":\n\t\tcase \"agent_thought_chunk\": {\n\t\t\tconst content = update.content;\n\t\t\tif (content.type !== \"text\" || !content.text) return null;\n\t\t\treturn {\n\t\t\t\ttype: \"text\",\n\t\t\t\tkind: update.sessionUpdate === \"agent_message_chunk\" ? \"message\" : \"thought\",\n\t\t\t\ttext: content.text\n\t\t\t};\n\t\t}\n\t\tcase \"tool_call\":\n\t\tcase \"tool_call_update\": return {\n\t\t\ttype: \"tool\",\n\t\t\tid: update.toolCallId,\n\t\t\ttitle: update.title ?? \"\",\n\t\t\tkind: update.kind ?? \"\",\n\t\t\tstatus: update.status ?? \"\"\n\t\t};\n\t\tcase \"plan\": return {\n\t\t\ttype: \"plan\",\n\t\t\tentries: update.entries.map((e) => ({\n\t\t\t\tcontent: e.content,\n\t\t\t\tstatus: e.status\n\t\t\t}))\n\t\t};\n\t\tdefault: return null;\n\t}\n}\nfunction scheduleIdleClose(entry) {\n\tif (entry.idleTimer) clearTimeout(entry.idleTimer);\n\tentry.idleTimer = setTimeout(() => {\n\t\tif (entry.busy || !entry.acp) return;\n\t\tentry.acp.close();\n\t\tentry.acp = null;\n\t}, IDLE_CLOSE_MS);\n\tentry.idleTimer.unref?.();\n}\n/** Aplica el modelo pedido a la sesión ACP viva (o no-op si ya está). */\nasync function applyAcpModel(entry, acp, model) {\n\tconst wanted = String(model || \"\").trim();\n\tif (!wanted) return acp;\n\tconst result = await acp.setModel(wanted);\n\tif (result.currentModel && !result.currentModel.startsWith(\"default\")) entry.model = result.currentModel;\n\tif (result.warning) emit(entry, {\n\t\ttype: \"status\",\n\t\tstatus: entry.status,\n\t\tmessage: result.warning\n\t});\n\treturn acp;\n}\n/** Proceso del agente vivo para esta entrada: lo lanza, o lo relanza retomando la sesión. */\nasync function ensureAcp(entry, model) {\n\tif (entry.acp) return applyAcpModel(entry, entry.acp, model);\n\tif (entry.starting) return applyAcpModel(entry, await entry.starting, model);\n\tentry.starting = startAcpSession(entry.agent, {\n\t\tcwd: entry.repo,\n\t\tmodel,\n\t\tresumeSessionId: entry.acpSessionId || void 0,\n\t\tdecide: (toolCall) => decidePermission(toolCall, {\n\t\t\trepo: entry.repo,\n\t\t\toutputFilename: entry.outputFilename,\n\t\t\tmode: entry.mode\n\t\t}),\n\t\tonUpdate: (update) => {\n\t\t\tif (!entry.acp && entry.acpSessionId) return;\n\t\t\tconst event = toEvent(update);\n\t\t\tif (event) emit(entry, event);\n\t\t},\n\t\tonDeniedPermission: (toolCall, decision) => askUserPermission(entry, toolCall, decision),\n\t\tonPermission: (toolCall, decision) => {\n\t\t\tif (decision.allow) return;\n\t\t\tentry.rejections.push(`${toolCall.title || toolCall.kind || \"herramienta\"} (${decision.reason})`);\n\t\t},\n\t\tonExit: ({ code, stderr }) => {\n\t\t\tconst wasBusy = entry.busy;\n\t\t\tentry.acp = null;\n\t\t\tif (wasBusy) {\n\t\t\t\tentry.busy = false;\n\t\t\t\tconst auth = authFailureMessage(entry.agentId, entry.agentLabel, stderr);\n\t\t\t\tif (auth) {\n\t\t\t\t\tmarkNeedsAuth(entry, new Error(auth), entry.mode === \"review\" ? \"review\" : \"chat\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst raw = stderr.trim() || `código ${code ?? \"?\"}`;\n\t\t\t\tconst authFromCode = authFailureMessage(entry.agentId, entry.agentLabel, raw);\n\t\t\t\tif (authFromCode) {\n\t\t\t\t\tmarkNeedsAuth(entry, new Error(authFromCode), entry.mode === \"review\" ? \"review\" : \"chat\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst tail = stderr.trim().split(/\\r?\\n/).slice(-3).join(\" · \");\n\t\t\t\tsetStatus(entry, \"error\", `${entry.agentLabel} terminó (código ${code ?? \"?\"}). ${tail}`.trim());\n\t\t\t}\n\t\t}\n\t}).then((acp) => {\n\t\tconst wanted = entry.acpSessionId;\n\t\tentry.acp = acp;\n\t\tentry.acpSessionId = acp.sessionId;\n\t\tif (wanted && !acp.resumed) {\n\t\t\tentry.needsContext = true;\n\t\t\temit(entry, {\n\t\t\t\ttype: \"status\",\n\t\t\t\tstatus: entry.status,\n\t\t\t\tmessage: \"No pude retomar la sesión anterior del agente: abro una nueva y le paso el contexto de la review.\"\n\t\t\t});\n\t\t}\n\t\ttry {\n\t\t\twriteSessionRef(entry.repo, entry.outputFilename, {\n\t\t\t\tagentId: entry.agentId,\n\t\t\t\tsessionId: acp.sessionId,\n\t\t\t\t...entry.model ? { model: entry.model } : {}\n\t\t\t});\n\t\t} catch {}\n\t\tif (acp.currentModel && !acp.currentModel.startsWith(\"default\")) entry.model = acp.currentModel;\n\t\tif (acp.modelWarning) emit(entry, {\n\t\t\ttype: \"status\",\n\t\t\tstatus: entry.status,\n\t\t\tmessage: acp.modelWarning\n\t\t});\n\t\treturn acp;\n\t}).finally(() => {\n\t\tentry.starting = null;\n\t});\n\treturn applyAcpModel(entry, await entry.starting, model);\n}\nfunction mtime(path) {\n\ttry {\n\t\treturn statSync(path).mtimeMs;\n\t} catch {\n\t\treturn 0;\n\t}\n}\n/** Cuántas veces el server le pide solo al agente corregir/escribir el JSON antes de cortar con Reintentar. */\nvar OUTPUT_AUTO_RETRIES = 2;\n/**\n* Después de un turno que podía escribir el JSON: validarlo, estamparle la sesión y, si quedó mal, pedirle al\n* agente que lo corrija (hasta `OUTPUT_AUTO_RETRIES` veces).\n*/\nfunction checkEntryReport(entry) {\n\tconst path = companionPaths(entry.repo, entry.outputFilename).json;\n\tif (!existsSync(path)) return null;\n\treturn {\n\t\tpath,\n\t\tresult: checkReportFile(path, {\n\t\t\trepo: entry.repo,\n\t\t\tbranch: entry.branch,\n\t\t\tbase: entry.base,\n\t\t\t...entry.diffPaths?.length ? { paths: entry.diffPaths } : {}\n\t\t})\n\t};\n}\n/** Prompt cuando el JSON existe pero no pasa validación (auto-fix o Reintentar). */\nfunction invalidJsonFixPrompt(entry, path, result) {\n\treturn `${formatCheckReport(path, validateCliCommand(entry.outputFilename), result)}\n\nCritical: fix ONLY the listed schema/validation errors above. Do NOT regenerate or reshuffle findings unnecessarily. Preserve existing finding ids and any \\`resolution\\` fields when possible. Do NOT only bump meta.generatedAt or rewrite notes. Edit \\`${outputRelPath(entry.outputFilename).replace(/\\\\/g, \"/\")}\\` so every problem above is fixed (add blocks or skipped for each missing path). Do not claim success until coverage is complete.\n\n${TOOL_RULES}\n\n${SERVER_VALIDATES}`;\n}\nfunction noWriteFollowUpPrompt(entry) {\n\tconst rel = outputRelPath(entry.outputFilename);\n\tconst rejected = entry.rejections.length ? `These commands were rejected by diff-review's policy and did not run:\\n${entry.rejections.slice(-5).map((r) => `- ${r}`).join(\"\\n\")}\\n\\n` : \"\";\n\tconst posixRel = rel.replace(/\\\\/g, \"/\");\n\tconst existing = checkEntryReport(entry);\n\treturn `${rejected}Your turn ended without writing \\`${posixRel}\\` in this turn (mtime must change now). The user did not stop you.\n${existing && !existing.result.ok ? `\\nThe file on disk is also INVALID — fix these when you Write/Edit (do not only bump generatedAt):\\n${(existing.result.errors || []).map((e) => `- ${e}`).join(\"\\n\")}\\n` : \"\"}\nDo this now:\n1. Read \\`${posixRel}\\` if it exists (required before Write/Edit on an existing file).\n2. Edit or Write the full review JSON to that same path (forward slashes only).\nDo NOT mkdir, and do NOT use shell redirection. Do not claim success just because an older file is present — overwrite it.\n\n${TOOL_RULES}\n\n${SERVER_VALIDATES}`;\n}\nasync function checkOutput(entry, since, retriesLeft) {\n\tif (entry.cancelled) return;\n\tconst path = companionPaths(entry.repo, entry.outputFilename).json;\n\tif (!(existsSync(path) && mtime(path) >= since)) {\n\t\tif (retriesLeft > 0) {\n\t\t\tconst again = await followUp(entry, noWriteFollowUpPrompt(entry), entry.rejections.length ? \"Seguí: hubo comandos rechazados; escribí el JSON con la tool de archivos.\" : \"Seguí: el JSON no se escribió en este turno.\");\n\t\t\tif (entry.cancelled || again == null) return;\n\t\t\treturn checkOutput(entry, again, retriesLeft - 1);\n\t\t}\n\t\tif (entry.mode === \"review\" && !entry.cancelled) emit(entry, {\n\t\t\ttype: \"review\",\n\t\t\tok: false,\n\t\t\tfilename: entry.outputFilename,\n\t\t\terrors: [`${entry.agentLabel} terminó sin escribir ${entry.outputFilename}.`],\n\t\t\tfinal: true\n\t\t});\n\t\treturn;\n\t}\n\tconst result = checkReportFile(path, {\n\t\trepo: entry.repo,\n\t\tbranch: entry.branch,\n\t\tbase: entry.base,\n\t\t...entry.diffPaths?.length ? { paths: entry.diffPaths } : {}\n\t});\n\tif (result.ok) {\n\t\tstampReviewProvenance(path, {\n\t\t\tagent: entry.agentLabel,\n\t\t\tmodel: entry.model,\n\t\t\tmodelLabel: entry.acp?.models.find((o) => o.value === entry.model)?.name,\n\t\t\tagentSession: {\n\t\t\t\tagentId: entry.agentId,\n\t\t\t\tsessionId: entry.acpSessionId,\n\t\t\t\toutputFilename: entry.outputFilename\n\t\t\t}\n\t\t});\n\t\temit(entry, {\n\t\t\ttype: \"review\",\n\t\t\tok: true,\n\t\t\tfilename: entry.outputFilename,\n\t\t\terrors: [],\n\t\t\tfinal: true\n\t\t});\n\t\treturn;\n\t}\n\tif (entry.cancelled) return;\n\tconst canRetry = retriesLeft > 0;\n\temit(entry, {\n\t\ttype: \"review\",\n\t\tok: false,\n\t\tfilename: entry.outputFilename,\n\t\terrors: result.errors,\n\t\tfinal: !canRetry\n\t});\n\tif (!canRetry) return;\n\tconst again = await followUp(entry, invalidJsonFixPrompt(entry, path, result), \"Corregí los errores de validación del JSON.\");\n\tif (entry.cancelled || again == null) return;\n\tawait checkOutput(entry, again, retriesLeft - 1);\n}\n/**\n* Turno extra que pide el server (corregir el JSON, seguir después de un rechazo).\n* Devuelve cuándo empezó, o `null` si el usuario canceló (no hay que seguir reintentando).\n*/\nasync function followUp(entry, prompt, shown) {\n\tif (entry.cancelled) return null;\n\temit(entry, {\n\t\ttype: \"user\",\n\t\ttext: shown,\n\t\tmode: \"fix\"\n\t});\n\tconst acp = await ensureAcp(entry);\n\tif (entry.cancelled) return null;\n\tconst started = Date.now();\n\tentry.rejections = [];\n\tconst { stopReason } = await acp.prompt(prompt);\n\temit(entry, {\n\t\ttype: \"turn\",\n\t\tstopReason\n\t});\n\tif (entry.cancelled || stopReason === \"cancelled\") {\n\t\tentry.cancelled = true;\n\t\treturn null;\n\t}\n\treturn started;\n}\nasync function runTurn(entry, text, mode, opts) {\n\tif (entry.busy) throw new Error(\"El agente todavía está trabajando en el pedido anterior.\");\n\tentry.cancelled = false;\n\tentry.busy = true;\n\tentry.mode = mode;\n\tif (entry.idleTimer) clearTimeout(entry.idleTimer);\n\temit(entry, {\n\t\ttype: \"user\",\n\t\ttext: opts.shown,\n\t\tmode: mode === \"review\" ? \"review\" : mode\n\t});\n\ttry {\n\t\tif (!entry.acp && needsInteractiveLogin(entry.agentId)) {\n\t\t\tentry.busy = false;\n\t\t\tmarkNeedsAuth(entry, /* @__PURE__ */ new Error(\"not logged in\"), mode === \"review\" ? \"review\" : \"chat\");\n\t\t\treturn;\n\t\t}\n\t\tif (!entry.acp) setStatus(entry, \"starting\", `Lanzando ${entry.agentLabel}…`);\n\t\tconst acp = await ensureAcp(entry, opts.model);\n\t\tif (entry.cancelled) {\n\t\t\tentry.busy = false;\n\t\t\tsetStatus(entry, \"idle\", \"Cancelado.\");\n\t\t\treturn;\n\t\t}\n\t\tsetStatus(entry, \"working\", \"El agente está revisando…\");\n\t\tconst since = Date.now();\n\t\tentry.rejections = [];\n\t\tconst { stopReason } = await acp.prompt(text);\n\t\temit(entry, {\n\t\t\ttype: \"turn\",\n\t\t\tstopReason\n\t\t});\n\t\tif (entry.cancelled || stopReason === \"cancelled\") {\n\t\t\tentry.cancelled = true;\n\t\t\tentry.busy = false;\n\t\t\tsetStatus(entry, \"idle\", \"Cancelado.\");\n\t\t\treturn;\n\t\t}\n\t\tif (mode !== \"ask\" && mode !== \"fix\") await checkOutput(entry, since, OUTPUT_AUTO_RETRIES);\n\t\tentry.busy = false;\n\t\tif (entry.cancelled) setStatus(entry, \"idle\", \"Cancelado.\");\n\t\telse setStatus(entry, \"idle\");\n\t} catch (err) {\n\t\tentry.busy = false;\n\t\tif (entry.cancelled) {\n\t\t\tsetStatus(entry, \"idle\", \"Cancelado.\");\n\t\t\treturn;\n\t\t}\n\t\tif (isAuthError(err)) {\n\t\t\tmarkNeedsAuth(entry, err, mode === \"review\" ? \"review\" : \"chat\");\n\t\t\treturn;\n\t\t}\n\t\tconst raw = err instanceof Error ? err.message : String(err);\n\t\tsetStatus(entry, \"error\", authFailureMessage(entry.agentId, entry.agentLabel, raw) || raw);\n\t} finally {\n\t\tscheduleIdleClose(entry);\n\t}\n}\nfunction newEntry(agent, fields) {\n\tconst acpSessionId = fields.acpSessionId ?? \"\";\n\tconst entry = {\n\t\tid: fields.id || crypto.randomUUID(),\n\t\tagentId: agent.def.id,\n\t\tagentLabel: agent.def.label,\n\t\tmodel: fields.model,\n\t\trepo: fields.repo,\n\t\tbranch: fields.branch,\n\t\tbase: fields.base,\n\t\toutputFilename: fields.outputFilename,\n\t\tacpSessionId,\n\t\tstatus: \"idle\",\n\t\tbusy: false,\n\t\tagent,\n\t\tacp: null,\n\t\tstarting: null,\n\t\tmode: \"ask\",\n\t\tevents: [],\n\t\tseq: 0,\n\t\ttextSeq: null,\n\t\tlisteners: /* @__PURE__ */ new Set(),\n\t\tidleTimer: null,\n\t\trejections: [],\n\t\tneedsContext: false,\n\t\tseed: null,\n\t\thandoffNote: null,\n\t\thandoffChatMarkdown: null,\n\t\tdiffPaths: null,\n\t\tpendingPermissions: /* @__PURE__ */ new Map(),\n\t\tsessionAllowDenied: false,\n\t\tcancelled: false,\n\t\tpendingAuthMethods: null,\n\t\tauthResume: null\n\t};\n\tsessions.set(entry.id, entry);\n\treturn entry;\n}\n/** Lanza la review con el agente elegido. Devuelve el id de la sesión enseguida; el resto llega por SSE. */\nfunction startReview(input) {\n\tconst entry = newEntry(findAgent(input.agentId), {\n\t\t...input,\n\t\tmodel: input.model || \"\"\n\t});\n\temit(entry, {\n\t\ttype: \"phase\",\n\t\tphase: \"diff\",\n\t\tdetail: \"Calculando el diff…\"\n\t});\n\tsetStatus(entry, \"starting\", \"Calculando el diff…\");\n\tcontinueReviewAfterDiff(entry, input);\n\treturn info(entry);\n}\nasync function continueReviewAfterDiff(entry, input) {\n\tawait new Promise((resolve) => setImmediate(resolve));\n\tif (!sessions.has(entry.id) || entry.cancelled) return;\n\tlet promptOpts = {\n\t\toutputFilename: input.outputFilename,\n\t\tacp: true,\n\t\tdiffRelPath: null,\n\t\tfiles: [],\n\t\tignored: [],\n\t\tignoreGlobs: []\n\t};\n\ttry {\n\t\tpromptOpts = prepareReviewPromptOpts({\n\t\t\trepo: input.repo,\n\t\t\tbranch: input.branch,\n\t\t\tbase: input.base,\n\t\t\toutputFilename: input.outputFilename,\n\t\t\tacp: true\n\t\t});\n\t\tif (entry.cancelled || !sessions.has(entry.id)) return;\n\t\tentry.diffPaths = (promptOpts.files || []).map((f) => f.path);\n\t\tconst n = entry.diffPaths.length;\n\t\tconst detail = n > 0 ? `Diff listo · ${n} archivo${n === 1 ? \"\" : \"s\"}. Pasando el contexto al agente…` : \"Diff listo. Pasando el contexto al agente…\";\n\t\temit(entry, {\n\t\t\ttype: \"phase\",\n\t\t\tphase: \"diff\",\n\t\t\tdetail\n\t\t});\n\t\tsetStatus(entry, \"starting\", detail);\n\t} catch (err) {\n\t\tif (entry.cancelled || !sessions.has(entry.id)) return;\n\t\tconst msg = `No pude precomputar el diff (${err instanceof Error ? err.message : String(err)}); el agente lo resolverá.`;\n\t\temit(entry, {\n\t\t\ttype: \"phase\",\n\t\t\tphase: \"diff\",\n\t\t\tdetail: msg\n\t\t});\n\t\temit(entry, {\n\t\t\ttype: \"status\",\n\t\t\tstatus: entry.status,\n\t\t\tmessage: msg\n\t\t});\n\t}\n\tif (!sessions.has(entry.id) || entry.cancelled) return;\n\temit(entry, {\n\t\ttype: \"phase\",\n\t\tphase: \"agent\",\n\t\tdetail: \"El agente está revisando el branch…\"\n\t});\n\trunTurn(entry, `${buildPrompt({\n\t\tsource: \"local\",\n\t\trepo: input.repo,\n\t\tbranch: input.branch,\n\t\tbase: input.base,\n\t\tremoteUrl: getRemoteUrl(input.repo) || void 0\n\t}, promptOpts)}\\n\\n${TOOL_RULES}\\n\\n${SERVER_VALIDATES}`, \"review\", {\n\t\tmodel: input.model,\n\t\tshown: `Review de ${input.branch} contra ${input.base}`\n\t});\n}\n/**\n* Sesión para chatear sobre un reporte: la que sigue viva en este server, o una nueva que retoma la del agente.\n* `sessionId` vacío = sesión brand-new (`session/new`) con `needsContext` desde el inicio.\n* Opcional `seed` (JSON + diff del reporte abierto) para materializarlos en `.diff-review/` antes del primer turno.\n*/\nasync function openChat(input) {\n\tconst sessionId = String(input.sessionId || \"\").trim();\n\tconst handoffNote = String(input.handoffNote || \"\").trim() || null;\n\tconst handoffChat = input.handoffChatMarkdown != null ? String(input.handoffChatMarkdown) : null;\n\tif (sessionId) {\n\t\tfor (const entry of sessions.values()) if (entry.acpSessionId === sessionId && entry.repo === input.repo) {\n\t\t\tif (input.seed) entry.seed = input.seed;\n\t\t\tif (handoffNote) entry.handoffNote = handoffNote;\n\t\t\tif (handoffChat != null) entry.handoffChatMarkdown = handoffChat;\n\t\t\treturn info(entry);\n\t\t}\n\t}\n\tconst entry = newEntry(findAgent(input.agentId), {\n\t\t...input,\n\t\tmodel: input.model || \"\",\n\t\tacpSessionId: sessionId\n\t});\n\tif (input.seed) entry.seed = input.seed;\n\tif (handoffNote) entry.handoffNote = handoffNote;\n\tif (handoffChat != null) entry.handoffChatMarkdown = handoffChat;\n\tif (!sessionId) entry.needsContext = true;\n\tif (needsInteractiveLogin(entry.agentId)) {\n\t\tmarkNeedsAuth(entry, /* @__PURE__ */ new Error(\"not logged in\"), \"chat\");\n\t\treturn info(entry);\n\t}\n\ttry {\n\t\tif (!entry.acp) setStatus(entry, \"starting\", `Lanzando ${entry.agentLabel}…`);\n\t\tawait ensureAcp(entry, input.model);\n\t\tif (entry.status === \"starting\") setStatus(entry, \"idle\");\n\t} catch (err) {\n\t\tif (isAuthError(err)) markNeedsAuth(entry, err, \"chat\");\n\t\telse {\n\t\t\tconst raw = err instanceof Error ? err.message : String(err);\n\t\t\tsetStatus(entry, \"error\", authFailureMessage(entry.agentId, entry.agentLabel, raw) || raw);\n\t\t}\n\t}\n\treturn info(entry);\n}\nfunction sendMessage(id, text, mode, opts) {\n\tconst entry = sessions.get(id);\n\tif (!entry) throw new Error(\"La sesión del agente ya no existe. Recargá la página.\");\n\tconst body = text.trim();\n\tif (!body) throw new Error(\"El mensaje está vacío.\");\n\tif (entry.busy) throw new Error(\"El agente todavía está trabajando en el pedido anterior.\");\n\tconst sendHandoff = String(opts?.handoffNote || \"\").trim();\n\tif (sendHandoff) entry.handoffNote = sendHandoff;\n\tif (opts?.handoffChatMarkdown != null) entry.handoffChatMarkdown = String(opts.handoffChatMarkdown);\n\tlet agentText = body;\n\tif (entry.needsContext) {\n\t\tagentText = `${contextPreamble(entry, entry.handoffNote)}\\n${body}`;\n\t\tentry.needsContext = false;\n\t\tentry.handoffNote = null;\n\t\tentry.seed = null;\n\t}\n\trunTurn(entry, mode === \"edit\" ? `${agentText}\\n\\nApply this by editing ${entry.outputFilename} in place (keep everything else as is; preserve finding ids and any \\`resolution\\` fields). Reply briefly in Spanish with what you changed.\\n\\n${SERVER_VALIDATES}` : mode === \"fix\" ? `${agentText}\\n\\nApply ONLY the listed code fixes by editing files inside this repo. Do not rewrite the review JSON. Touch nothing else. Reply briefly in Spanish with a short per-finding detail suitable for resolution.detail.` : `${agentText}\\n\\nAnswer in Spanish. This is a question about the review: do not modify any file.`, mode, {\n\t\tshown: body,\n\t\tmodel: String(opts?.model || \"\").trim() || void 0\n\t});\n\treturn info(entry);\n}\n/**\n* Reintento manual tras un turno de review que no dejó el JSON válido (p. ej. redirect bloqueado o JSON viejo).\n* Misma sesión ACP; no recalcula el diff.\n* Si el JSON ya existe e inválido, reenvía los errores concretos (cobertura faltante, etc.) — no un “escribí de nuevo” genérico.\n*/\nfunction retryReview(id) {\n\tconst entry = sessions.get(String(id || \"\"));\n\tif (!entry) throw new Error(\"La sesión del agente ya no existe. Recargá la página.\");\n\tif (entry.busy) throw new Error(\"El agente todavía está trabajando en el pedido anterior.\");\n\tif (entry.status === \"needs_auth\" || entry.status === \"error\" && looksLikeAuthFailure(entry.statusMessage || \"\")) {\n\t\tentry.pendingAuthMethods = null;\n\t\tentry.authResume = null;\n\t\ttry {\n\t\t\tentry.acp?.close();\n\t\t} catch {}\n\t\tentry.acp = null;\n\t\tsetStatus(entry, \"starting\", \"Reintentando la review…\");\n\t\tcontinueReviewAfterDiff(entry, {\n\t\t\trepo: entry.repo,\n\t\t\tbranch: entry.branch,\n\t\t\tbase: entry.base,\n\t\t\toutputFilename: entry.outputFilename,\n\t\t\tmodel: entry.model || void 0\n\t\t});\n\t\treturn info(entry);\n\t}\n\tif (entry.status === \"error\") throw new Error(entry.statusMessage || \"La sesión está en error; iniciá una nueva review.\");\n\tconst posixRel = outputRelPath(entry.outputFilename).replace(/\\\\/g, \"/\");\n\tconst existing = checkEntryReport(entry);\n\trunTurn(entry, existing && !existing.result.ok ? invalidJsonFixPrompt(entry, existing.path, existing.result) : `Continue the code review. For \\`${posixRel}\\`: Read it first if it exists, then Edit/Write the full JSON (forward slashes only). Do not mkdir. Never use shell redirection.\n\n${TOOL_RULES}\n\n${SERVER_VALIDATES}`, \"review\", { shown: existing && !existing.result.ok ? \"Reintentar: corregir el JSON inválido\" : \"Reintentar: escribir el JSON de la review\" });\n\treturn info(entry);\n}\n/**\n* Respuesta del usuario a permiso(s) pendiente(s).\n* `scope`: once (default) | session (no volver a preguntar en esta sesión) | always (ACP allow_always).\n* `allowAll` / `requestIds` resuelven en lote (misma scope para todos).\n*/\nfunction respondPermission(input) {\n\tconst entry = sessions.get(String(input.id || \"\"));\n\tif (!entry) throw new Error(\"La sesión del agente ya no existe. Recargá la página.\");\n\tconst allow = Boolean(input.allow);\n\tconst scope = input.scope === \"session\" || input.scope === \"always\" ? input.scope : \"once\";\n\tif (allow && (scope === \"session\" || scope === \"always\")) entry.sessionAllowDenied = true;\n\tlet ids;\n\tif (input.allowAll) ids = [...entry.pendingPermissions.keys()];\n\telse if (Array.isArray(input.requestIds) && input.requestIds.length) ids = input.requestIds.map((id) => String(id || \"\")).filter(Boolean);\n\telse {\n\t\tconst one = String(input.requestId || \"\");\n\t\tids = one ? [one] : [];\n\t}\n\tif (!ids.length) throw new Error(\"No hay pedidos de permiso pendientes.\");\n\tconst batch = ids.length > 1 || Boolean(input.allowAll);\n\tlet resolved = 0;\n\tfor (const requestId of ids) {\n\t\tconst pending = entry.pendingPermissions.get(requestId);\n\t\tif (!pending) {\n\t\t\tif (!batch) throw new Error(\"Ese pedido de permiso ya no está pendiente.\");\n\t\t\tcontinue;\n\t\t}\n\t\tpending.resolve(allow, {\n\t\t\tquiet: batch,\n\t\t\tscope\n\t\t});\n\t\tresolved += 1;\n\t}\n\tif (!resolved) throw new Error(\"Ese pedido de permiso ya no está pendiente.\");\n\tif (batch) emit(entry, {\n\t\ttype: \"permission_summary\",\n\t\tallow,\n\t\tcount: resolved\n\t});\n\treturn info(entry);\n}\n/**\n* Activa/desactiva “confiar en esta sesión” (no pedir confirmación cuando la política niega).\n* Al activar, aprueba los pedidos pendientes actuales.\n*/\nfunction setPermissionTrust(id, enabled) {\n\tconst entry = sessions.get(String(id || \"\"));\n\tif (!entry) throw new Error(\"La sesión del agente ya no existe. Recargá la página.\");\n\tentry.sessionAllowDenied = Boolean(enabled);\n\tif (enabled) {\n\t\tconst ids = [...entry.pendingPermissions.keys()];\n\t\tlet resolved = 0;\n\t\tfor (const requestId of ids) {\n\t\t\tconst pending = entry.pendingPermissions.get(requestId);\n\t\t\tif (!pending) continue;\n\t\t\tpending.resolve(true, {\n\t\t\t\tquiet: ids.length > 1,\n\t\t\t\tscope: \"session\"\n\t\t\t});\n\t\t\tresolved += 1;\n\t\t}\n\t\tif (resolved > 1) emit(entry, {\n\t\t\ttype: \"permission_summary\",\n\t\t\tallow: true,\n\t\t\tcount: resolved\n\t\t});\n\t\temit(entry, {\n\t\t\ttype: \"status\",\n\t\t\tstatus: entry.status,\n\t\t\tmessage: \"Confianza de sesión: no se pedirá confirmación de permisos.\"\n\t\t});\n\t} else emit(entry, {\n\t\ttype: \"status\",\n\t\tstatus: entry.status,\n\t\tmessage: \"Confianza de sesión desactivada: se vuelve a pedir confirmación.\"\n\t});\n\treturn info(entry);\n}\nasync function cancelTurn(id) {\n\tconst entry = sessions.get(id);\n\tif (!entry) return;\n\tentry.cancelled = true;\n\tfor (const [requestId, pending] of [...entry.pendingPermissions]) {\n\t\tclearTimeout(pending.timer);\n\t\tentry.pendingPermissions.delete(requestId);\n\t\tpending.resolve(false, { quiet: true });\n\t}\n\tif (entry.acp && entry.busy) {\n\t\ttry {\n\t\t\tawait entry.acp.cancel();\n\t\t} catch {}\n\t\treturn;\n\t}\n\tentry.busy = false;\n\tsetStatus(entry, \"idle\", \"Cancelado.\");\n}\n/**\n* Cierra la sesión de chat: ACP, Map y permisos pendientes.\n* La UI lo usa al cambiar de agente (el reporte / triage se mantienen).\n*/\nasync function closeChat(id) {\n\tconst entry = sessions.get(String(id || \"\"));\n\tif (!entry) return;\n\tentry.cancelled = true;\n\tfor (const [requestId, pending] of [...entry.pendingPermissions]) {\n\t\tclearTimeout(pending.timer);\n\t\tentry.pendingPermissions.delete(requestId);\n\t\ttry {\n\t\t\tpending.resolve(false, { quiet: true });\n\t\t} catch {}\n\t}\n\tif (entry.idleTimer) {\n\t\tclearTimeout(entry.idleTimer);\n\t\tentry.idleTimer = null;\n\t}\n\ttry {\n\t\tif (entry.acp && entry.busy) try {\n\t\t\tawait entry.acp.cancel();\n\t\t} catch {}\n\t\tentry.acp?.close();\n\t} catch {}\n\tentry.acp = null;\n\tentry.listeners.clear();\n\tsessions.delete(entry.id);\n}\nfunction subscribe(id, listener) {\n\tconst entry = sessions.get(id);\n\tif (!entry) return null;\n\tlistener({ type: \"reset\" });\n\tfor (const event of entry.events) listener(event);\n\tentry.listeners.add(listener);\n\treturn () => entry.listeners.delete(listener);\n}\n/**\n* Review que pidió la CLI al lanzar el server (`DIFF_REVIEW_AGENT_RUN`, JSON). Se arranca una sola vez, al iniciar,\n* así corre aunque no se abra el navegador.\n*/\nfunction startPendingAgentRun() {\n\tconst raw = String(process.env.DIFF_REVIEW_AGENT_RUN || \"\").trim();\n\tif (!raw) return;\n\tdelete process.env.DIFF_REVIEW_AGENT_RUN;\n\ttry {\n\t\tstartReview(JSON.parse(raw));\n\t} catch (err) {\n\t\tconsole.error(\"[diff-review agent] no pude lanzar la review pedida por la CLI:\", err instanceof Error ? err.message : err);\n\t}\n}\n//#endregion\nexport { buildPrompt as _, openAgentLogin as a, respondPermission as c, sessionInfo as d, setPermissionTrust as f, applyEvent as g, subscribe as h, listAcpAgents as i, retryReview as l, startReview as m, cancelTurn as n, openAgentLogout as o, startPendingAgentRun as p, closeChat as r, openChat as s, agentModels as t, sendMessage as u, agentAccountStatus as v };\n"],"names":[],"mappings":"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"}