@kernlang/agon 0.1.5 → 0.1.7

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 (56) hide show
  1. package/dist/{chunk-SOUF7XTW.js → chunk-45YTXJWJ.js} +3 -2
  2. package/dist/chunk-45YTXJWJ.js.map +1 -0
  3. package/dist/{chunk-GPYWJO2Q.js → chunk-6WWOJXG4.js} +108 -50
  4. package/dist/chunk-6WWOJXG4.js.map +1 -0
  5. package/dist/{chunk-4NTH3EAR.js → chunk-AONHRJRW.js} +240 -27
  6. package/dist/chunk-AONHRJRW.js.map +1 -0
  7. package/dist/{chunk-HAJIKZGU.js → chunk-BPKY4OF2.js} +479 -68
  8. package/dist/chunk-BPKY4OF2.js.map +1 -0
  9. package/dist/{chunk-DGTU4UWQ.js → chunk-I2PMSXJ3.js} +2 -2
  10. package/dist/chunk-I2PMSXJ3.js.map +1 -0
  11. package/dist/{chunk-46WNYE4R.js → chunk-RKXVKX25.js} +69 -35
  12. package/dist/chunk-RKXVKX25.js.map +1 -0
  13. package/dist/{chunk-HSPQEDHX.js → chunk-SUT2HDOY.js} +1 -1
  14. package/dist/chunk-SUT2HDOY.js.map +1 -0
  15. package/dist/{chunk-73ETZFDH.js → chunk-WDT5NJOA.js} +4 -4
  16. package/dist/chunk-WDT5NJOA.js.map +1 -0
  17. package/dist/{dispatch-XHLJ44TF.js → dispatch-J4RSWLXM.js} +2 -2
  18. package/dist/dispatch-J4RSWLXM.js.map +1 -0
  19. package/dist/engines/codex.json +3 -0
  20. package/dist/{forge-ZI7NE73F.js → forge-O2SJ5JIQ.js} +6 -6
  21. package/dist/forge-O2SJ5JIQ.js.map +1 -0
  22. package/dist/index.js +396 -60
  23. package/dist/index.js.map +1 -1
  24. package/dist/mcp/engines/agy.json +43 -0
  25. package/dist/mcp/engines/aider.json +40 -0
  26. package/dist/mcp/engines/claude.json +79 -0
  27. package/dist/mcp/engines/codex.json +77 -0
  28. package/dist/mcp/engines/minimax-coding-plan-minimax-m3.json +27 -0
  29. package/dist/mcp/engines/mistral.json +44 -0
  30. package/dist/mcp/engines/ollama.json +35 -0
  31. package/dist/mcp/engines/opencode.json +55 -0
  32. package/dist/mcp/engines/openrouter.json +54 -0
  33. package/dist/mcp/engines/qwen.json +40 -0
  34. package/dist/mcp/index.js +464 -0
  35. package/dist/mcp/index.js.map +1 -0
  36. package/dist/plan-mode-PFLUPGSY.js +17 -0
  37. package/dist/plan-mode-PFLUPGSY.js.map +1 -0
  38. package/dist/{src-4A5FVACG.js → src-253BUXEF.js} +11 -3
  39. package/dist/src-253BUXEF.js.map +1 -0
  40. package/dist/{update-DLPMYTF3.js → update-ODAAXWOD.js} +6 -6
  41. package/dist/update-ODAAXWOD.js.map +1 -0
  42. package/package.json +2 -2
  43. package/dist/chunk-46WNYE4R.js.map +0 -1
  44. package/dist/chunk-4NTH3EAR.js.map +0 -1
  45. package/dist/chunk-73ETZFDH.js.map +0 -1
  46. package/dist/chunk-DGTU4UWQ.js.map +0 -1
  47. package/dist/chunk-GPYWJO2Q.js.map +0 -1
  48. package/dist/chunk-HAJIKZGU.js.map +0 -1
  49. package/dist/chunk-HSPQEDHX.js.map +0 -1
  50. package/dist/chunk-SOUF7XTW.js.map +0 -1
  51. package/dist/dispatch-XHLJ44TF.js.map +0 -1
  52. package/dist/forge-ZI7NE73F.js.map +0 -1
  53. package/dist/plan-mode-KIXDKD63.js +0 -17
  54. package/dist/plan-mode-KIXDKD63.js.map +0 -1
  55. package/dist/src-4A5FVACG.js.map +0 -1
  56. package/dist/update-DLPMYTF3.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/generated/handlers/forge.ts","../src/generated/cesar/judge.ts","../src/generated/cesar/scoreboard.ts","../src/generated/cesar/checkpoint.ts","../src/telemetry/index.ts"],"sourcesContent":["// @generated by kern v3.5.8 — DO NOT EDIT. Source: src/kern/handlers/forge.kern\n\nimport { join } from 'node:path';\n\nimport { existsSync, mkdirSync, readFileSync } from 'node:fs';\n\nimport { execFileSync } from 'node:child_process';\n\nimport { ensureAgonHome, RUNS_DIR, createPlan, approvePlan, startPlan, mergeStepResult, cancelPlan, failPlan, savePlan, scanProjectContext, getActiveWorkspace, snapshotWorkspace, tracker, resolveWorkingDir, loadOrCreateActiveThread, applyPatchWithUndo, acquireApplyLock, releaseApplyLock, headChanged, branchChanged, headSha, currentBranch } from '@kernlang/agon-core';\n\nimport type { Plan, PlanStepInput, ApprovalLevel } from '@kernlang/agon-core';\n\nimport { runForge } from '@kernlang/agon-forge';\n\nimport { ENGINE_COLORS } from '../blocks/output-format.js';\n\nimport type { Dispatch, HandlerContext, EngineProgress } from '../../handlers/types.js';\n\nimport { cesarJudgeForge, cesarConvergeForge, cesarReviewForgeOutcome } from '../../handlers/cesar-brain.js';\n\nimport { sessionResultStore } from '../models/session-results.js';\n\nimport { createScoreboard, scoreboardStartEngine, scoreboardUpdateProgress, scoreboardFinishEngine, scoreboardFailEngine, renderScoreboard } from '../cesar/scoreboard.js';\n\nimport { buildCheckpoint, recordCheckpoint } from '../cesar/checkpoint.js';\n\nimport { recordRun, formatRunSummary } from '../../telemetry/index.js';\n\nimport { filterDefaultOrchestrationEngines } from './engine-filter.js';\n\n// @kern-source: forge:16\nfunction handleForgeEvent(event: any, plan: Plan, engineStatus: Record<string,string>, dispatch: Dispatch, ctx: HandlerContext): Plan {\n if (ctx.currentPlan?.state === 'cancelled') return plan;\n const id = event.engineId ?? '';\n\n switch (event.type) {\n case 'baseline:start':\n plan = mergeStepResult(plan, 'baseline', { state: 'running', attempts: [{ startedAt: new Date().toISOString() }] });\n break;\n case 'baseline:done':\n plan = mergeStepResult(plan, 'baseline', { state: 'completed' });\n if (event.data?.passes) {\n dispatch({ type: 'warning', message: 'Baseline passes — fitness may be non-discriminating. Add a failing regression test, use forge validate mode, or allow no-diff validation.' });\n }\n break;\n case 'stage1:dispatch':\n plan = mergeStepResult(plan, 'dispatch', { state: 'running', attempts: [{ startedAt: new Date().toISOString() }] });\n engineStatus[id] = 'building';\n break;\n case 'stage2:dispatch':\n engineStatus[id] = 'building';\n break;\n case 'engine:worktree': {\n if (id) {\n engineStatus[id] = 'building';\n const worktreePath = String(event.data?.worktreePath ?? '');\n if (worktreePath && engineStatus[`${id}:worktree`] !== worktreePath) {\n engineStatus[`${id}:worktree`] = worktreePath;\n dispatch({ type: 'info', message: `Forge worktree ${id}: ${worktreePath}` });\n }\n }\n break;\n }\n case 'engine:pid':\n dispatch({ type: 'engine-pid', engineId: id, pid: Number(event.data?.pid ?? 0), phase: event.data?.phase } as any);\n break;\n case 'engine:pid-clear':\n dispatch({ type: 'engine-pid-clear', engineId: id } as any);\n break;\n case 'engine:fallback':\n engineStatus[String(event.data?.to ?? '')] = 'fallback';\n dispatch({ type: 'warning', message: `${String(event.data?.from ?? id)} failed during ${String(event.data?.phase ?? 'forge')} — retrying on ${String(event.data?.to ?? 'fallback')}` });\n break;\n case 'engine:failed': {\n engineStatus[id] = 'failed';\n engineStatus[`${id}:score`] = '0';\n const errMsg = String(event.data?.error ?? 'failed');\n engineStatus[`${id}:error`] = errMsg;\n const snippet = errMsg.length > 120 ? errMsg.slice(0, 120) + '…' : errMsg;\n dispatch({ type: 'warning', message: `${id} failed: ${snippet}` });\n dispatch({ type: 'engine-pid-clear', engineId: id } as any);\n break;\n }\n case 'stage1:accepted':\n engineStatus[id] = 'done';\n engineStatus[`${id}:score`] = String(event.data?.score ?? '?');\n break;\n case 'stage1:score':\n case 'stage2:score': {\n if (id) {\n const passed = event.data?.pass !== false;\n engineStatus[id] = passed ? 'done' : 'failed';\n engineStatus[`${id}:score`] = String(event.data?.score ?? '?');\n if (!passed) engineStatus[`${id}:error`] = Number(event.data?.score ?? 0) === 0 ? 'no candidate changes or fitness failed' : 'fitness failed';\n }\n const scoreStep = plan.steps.find((s: any) => s.id === 'score');\n if (scoreStep && scoreStep.result.state === 'pending') {\n plan = mergeStepResult(plan, 'score', { state: 'running', attempts: [{ startedAt: new Date().toISOString() }] });\n }\n break;\n }\n case 'winner:determined': {\n plan = mergeStepResult(plan, 'dispatch', { state: 'completed' });\n plan = mergeStepResult(plan, 'score', { state: 'completed' });\n plan = mergeStepResult(plan, 'winner', { state: 'completed' });\n if (event.data?.winner) {\n const winnerId = String(event.data.winner);\n engineStatus[winnerId] = 'done';\n engineStatus[`${winnerId}:score`] = String(event.data.bestScore ?? '?');\n engineStatus['__winner'] = winnerId;\n }\n break;\n }\n case 'forge:no-candidate-diff': {\n const count = Number(event.data?.count ?? 0);\n const toolLoopLimit = Number(event.data?.toolLoopLimit ?? 0);\n if (toolLoopLimit > 0) {\n dispatch({ type: 'warning', message: `Forge produced no candidate diff: ${toolLoopLimit}/${count} engine(s) hit the tool-loop limit before producing a patch.` });\n } else {\n dispatch({ type: 'warning', message: `Forge produced no candidate diff from ${count} engine(s).` });\n }\n break;\n }\n case 'synthesis:start': {\n plan = mergeStepResult(plan, 'synthesis', { state: 'running', attempts: [{ startedAt: new Date().toISOString() }] });\n const winnerId = id || engineStatus['__winner'] || '';\n if (winnerId) engineStatus[winnerId] = 'synthesizing';\n break;\n }\n case 'synthesis:done': {\n plan = mergeStepResult(plan, 'synthesis', { state: 'completed' });\n const winnerId = id || engineStatus['__winner'] || '';\n if (winnerId && engineStatus[winnerId] === 'synthesizing') engineStatus[winnerId] = 'done';\n break;\n }\n }\n ctx.setCurrentPlan(plan);\n return plan;\n}\n\n/**\n * Auto-apply a winning forge patch to the working tree, guarded against the shared-checkout hazard: a HEAD/branch compare-and-swap (refuse if another session moved the ground since this run started) and an advisory apply-lock (refuse if another apply is in flight here). Both refusals return false so the caller falls back to manual /apply — the patch is never lost.\n */\n// @kern-source: forge:126\nfunction applyForgePatchToWorkspace(winnerId: string, patchContent: string, dispatch: Dispatch, baseSha?: string|null, baseBranch?: string|null): boolean {\n if (!patchContent.trim()) {\n dispatch({ type: 'info', message: `Winner ${winnerId} produced an empty patch.` });\n return true;\n }\n const cwd = resolveWorkingDir();\n\n // HEAD-CAS: if HEAD/branch moved since this run started, another session\n // changed the ground under us — don't auto-apply to the wrong base.\n const movedHead = headChanged(cwd, baseSha ?? null);\n if (movedHead.changed) {\n dispatch({ type: 'warning', message: `HEAD moved (${(baseSha ?? '?').slice(0, 8)} → ${(movedHead.current ?? '?').slice(0, 8)}) since this run started — not auto-applying. Review with /apply.` });\n return false;\n }\n const movedBranch = branchChanged(cwd, baseBranch ?? null);\n if (movedBranch.changed) {\n dispatch({ type: 'warning', message: `Branch changed (${baseBranch} → ${movedBranch.current ?? '?'}) since this run started — not auto-applying. Review with /apply.` });\n return false;\n }\n\n // Advisory apply-lock: serialize concurrent applies in this checkout.\n const lock = acquireApplyLock(cwd, `forge-apply ${winnerId}`);\n if (!lock.acquired) {\n const who = lock.heldBy ? ` (pid ${lock.heldBy.pid}: ${lock.heldBy.action})` : '';\n dispatch({ type: 'warning', message: `Another apply is in progress in this checkout${who} — not auto-applying. Review with /apply once it finishes.` });\n return false;\n }\n try {\n const result = applyPatchWithUndo(cwd, patchContent);\n if (result.ok) {\n dispatch({ type: 'success', message: `Applied winner patch from ${winnerId}` });\n if (result.undoToken) dispatch({ type: 'info', message: 'Undo available: /undo' });\n return true;\n }\n dispatch({ type: 'warning', message: `Winner patch not applied automatically: ${result.error ?? 'unknown error'}` });\n return false;\n } finally {\n if (lock.sessionUUID) releaseApplyLock(cwd, lock.sessionUUID);\n }\n}\n\n/**\n * Parse Cesar's command-only fitness response. Accepts strict JSON first, then a plain one-line command.\n */\n// @kern-source: forge:169\nexport function extractFitnessCommandFromCesarOutput(output: string): string|null {\n let text = String(output ?? '').trim();\n if (!text) return null;\n text = text\n .replace(/^```(?:json|bash|sh)?\\s*/i, '')\n .replace(/\\s*```$/i, '')\n .trim();\n\n let candidate: string | null = null;\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n try {\n const parsed = JSON.parse(jsonMatch[0]);\n if (parsed && typeof parsed.fitnessCmd === 'string') candidate = parsed.fitnessCmd;\n else if (parsed && typeof parsed.command === 'string') candidate = parsed.command;\n } catch {\n // Fall back to plain command parsing below.\n }\n }\n if (!candidate) {\n candidate = text\n .split(/\\r?\\n/)\n .map((line: string) => line.trim())\n .find((line: string) => line.length > 0 && !/^(```|fitnessCmd\\s*:|command\\s*:)/i.test(line)) ?? null;\n }\n if (!candidate) return null;\n candidate = candidate.replace(/^`|`$/g, '').trim();\n candidate = candidate.replace(/^(fitnessCmd|command)\\s*:\\s*/i, '').trim();\n if (!candidate || candidate.length > 500 || /[\\r\\n\\0]/.test(candidate)) return null;\n return candidate;\n}\n\n// @kern-source: forge:203\nfunction extractGithubLiterals(text: string): string[] {\n return [...new Set((String(text ?? '').match(/(?:https?:\\/\\/)?github\\.com\\/[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+/g) ?? []).map((m: string) => m.replace(/^https?:\\/\\//, '').replace(/[).,;:'\"`\\]]+$/g, '')))];\n}\n\n/**\n * Keep literal GitHub repo URLs in Cesar-generated fitness commands aligned with the user's task. Prevents small hallucinated typos from making all engines optimize for the wrong marker.\n */\n// @kern-source: forge:205\nexport function repairFitnessCommandTaskLiterals(task: string, command: string): string {\n const taskUrls = extractGithubLiterals(task);\n if (taskUrls.length === 0) return command;\n const taskUrlSet = new Set(taskUrls);\n let repaired = command;\n for (const cmdUrl of extractGithubLiterals(command)) {\n if (taskUrlSet.has(cmdUrl)) continue;\n const cmdParts = cmdUrl.split('/');\n const replacement = taskUrls.length === 1\n ? taskUrls[0]\n : taskUrls.find((url: string) => {\n const parts = url.split('/');\n return parts[2]?.toLowerCase() === cmdParts[2]?.toLowerCase();\n });\n if (replacement) {\n repaired = repaired.split(cmdUrl).join(replacement);\n }\n }\n return repaired;\n}\n\n// @kern-source: forge:228\nexport function normalizeGithubRemoteLiteral(remote: string): string|null {\n const raw = String(remote ?? '').trim();\n if (!raw) {\n return null;\n }\n const cleaned = raw.replace(/\\.git$/, '');\n const ssh = cleaned.match(/^git@github\\.com:([^/]+)\\/(.+)$/);\n if (ssh) {\n return `github.com/${ssh[1]}/${ssh[2]}`;\n }\n const https = cleaned.match(/^https?:\\/\\/github\\.com\\/([^/]+)\\/(.+)$/);\n if (https) {\n return `github.com/${https[1]}/${https[2]}`;\n }\n return null;\n}\n\n// @kern-source: forge:242\nfunction detectGithubRemoteLiteral(cwd: string): string|null {\n try {\n const remote = execFileSync('git', ['remote', 'get-url', 'origin'], { cwd: cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();\n return normalizeGithubRemoteLiteral(remote);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * For current-repository README/docs checks, prefer the actual git origin over stale chat examples or old repo names.\n */\n// @kern-source: forge:250\nexport function repairFitnessCommandRepositoryLiteral(command: string, repoLiteral: string|null): string {\n if (!repoLiteral) {\n return command;\n }\n let repaired = command;\n for (const cmdUrl of extractGithubLiterals(command)) {\n if (cmdUrl === repoLiteral) {\n continue;\n }\n repaired = repaired.split(cmdUrl).join(repoLiteral);\n }\n return repaired;\n}\n\n// @kern-source: forge:262\nfunction taskExplicitlyMentionsLiteral(task: string, literal: string): boolean {\n const taskLower = String(task ?? '').toLowerCase();\n const literalLower = String(literal ?? '').toLowerCase();\n if (!literalLower) {\n return false;\n }\n if (taskLower.includes(literalLower)) {\n return true;\n }\n const escaped = literalLower.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp(`\\\\b(?:no|avoid|without|forbid|exclude|do not mention)\\\\s+${escaped}\\\\b`, 'i').test(taskLower);\n}\n\n/**\n * Decide whether a fitness command may assert a GitHub/repository URL. This is semantic intent, not literal echoing: public README/footer/link tasks can check the local git origin; normal local docs tasks should not.\n */\n// @kern-source: forge:273\nexport function taskWantsRepositoryLinkCheck(task: string): boolean {\n const t = String(task ?? '').toLowerCase();\n if (/github\\.com\\/[a-z0-9_.-]+\\/[a-z0-9_.-]+/i.test(t)) {\n return true;\n }\n return /\\b(?:github|repo(?:sitory)?\\s+(?:url|link)|project\\s+(?:url|link)|source\\s+(?:url|link)|footer\\s+(?:with|containing|link)|public\\s+(?:repo|repository|link|url))\\b/i.test(t);\n}\n\n/**\n * Remove forbidden literals that are local identity facts rather than internal details. Example: avoid KERN compilation must not become forbidden=['KERNlang'] when KERNlang is the GitHub owner.\n */\n// @kern-source: forge:281\nexport function repairOverbroadForbiddenLiterals(task: string, command: string, repoLiteral: string|null): string {\n const forbidden = extractFitnessStringArray(command, 'forbidden');\n if (forbidden.length === 0 || !repoLiteral) return command;\n const parts = repoLiteral.split('/');\n const protectedLiterals = new Set<string>();\n if (parts[1]) protectedLiterals.add(parts[1]);\n if (parts[2]) protectedLiterals.add(parts[2]);\n protectedLiterals.add(repoLiteral);\n protectedLiterals.add(`https://${repoLiteral}`);\n\n const kept = forbidden.filter((f: string) => {\n const isProtected = [...protectedLiterals].some((p: string) => p.toLowerCase() === f.toLowerCase());\n if (!isProtected) return true;\n return taskExplicitlyMentionsLiteral(task, f);\n });\n if (kept.length === forbidden.length) return command;\n\n const serialized = kept.map((v: string) => `'${v.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`).join(',');\n return command.replace(/forbidden\\s*=\\s*\\[[^\\]]*\\]/, `forbidden=[${serialized}]`);\n}\n\n// @kern-source: forge:304\nfunction extractFitnessStringArray(command: string, name: string): string[] {\n const re = new RegExp(`${name}\\\\s*=\\\\s*\\\\[([^\\\\]]*)\\\\]`);\n const match = String(command ?? '').match(re);\n if (!match) return [];\n const values: string[] = [];\n const body = match[1];\n const stringRe = /(['\"])((?:\\\\.|(?!\\1).)*)\\1/g;\n let m;\n while ((m = stringRe.exec(body)) !== null) {\n values.push(m[2].replace(/\\\\(['\"\\\\])/g, '$1'));\n }\n return values;\n}\n\n/**\n * Remove forbidden string literals that are required as part of another fitness assertion. Cesar sometimes requires github.com/KERNlang/agon and also forbids KERNlang, making the check impossible.\n */\n// @kern-source: forge:319\nexport function repairContradictoryFitnessLiterals(command: string): string {\n const required = extractFitnessStringArray(command, 'required');\n const forbidden = extractFitnessStringArray(command, 'forbidden');\n if (required.length === 0 || forbidden.length === 0) return command;\n\n const kept = forbidden.filter((f: string) => {\n const lower = f.toLowerCase();\n return !required.some((r: string) => {\n const req = r.toLowerCase();\n return req.includes(lower) || lower.includes(req);\n });\n });\n if (kept.length === forbidden.length) return command;\n\n const serialized = kept.map((v: string) => `'${v.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`).join(',');\n return command.replace(/forbidden\\s*=\\s*\\[[^\\]]*\\]/, `forbidden=[${serialized}]`);\n}\n\n/**\n * Reject Cesar-generated fitness checks that drift from task intent. Fitness may inspect local files and exact requested literals, but should not add GitHub/repo assertions unless the task semantically asks for a public repo link.\n */\n// @kern-source: forge:339\nexport function validateFitnessCommandIntent(task: string, command: string, repoLiteral: string|null): {ok:boolean,reason?:string} {\n const cmd = String(command ?? '');\n if (!cmd.trim()) {\n return { ok: false, reason: 'empty fitness command' };\n }\n const githubLiterals = extractGithubLiterals(cmd);\n if (githubLiterals.length > 0 && !taskWantsRepositoryLinkCheck(task)) {\n return { ok: false, reason: `fitness added repository URL check without repo-link intent: ${githubLiterals.join(', ')}` };\n }\n const required = extractFitnessStringArray(cmd, 'required');\n const forbidden = extractFitnessStringArray(cmd, 'forbidden');\n for (const r of required) {\n const req = r.toLowerCase();\n for (const f of forbidden) {\n const forb = f.toLowerCase();\n if (req.includes(forb) || forb.includes(req)) {\n return { ok: false, reason: `fitness requires and forbids overlapping literal \"${f}\"` };\n }\n }\n }\n if (repoLiteral) {\n const owner = repoLiteral.split('/')[1] ?? '';\n if (owner) {\n const overbroad = forbidden.find((f: string) => f.toLowerCase() === owner.toLowerCase() && !taskExplicitlyMentionsLiteral(task, f));\n if (overbroad) {\n return { ok: false, reason: `fitness forbids local repo identity \"${overbroad}\" without explicit task intent` };\n }\n }\n }\n return { ok: true };\n}\n\n/**\n * Normalize current-repository GitHub literals in a forge task before displaying the plan or sending the prompt to engines.\n */\n// @kern-source: forge:364\nexport function repairForgeTaskRepositoryLiteral(task: string, cwd: string): string {\n const repoLiteral = detectGithubRemoteLiteral(cwd);\n return repairFitnessCommandRepositoryLiteral(task, repoLiteral);\n}\n\n// @kern-source: forge:370\nfunction describeProjectFitnessOptions(cwd: string): string {\n const lines: string[] = [];\n const packageJsonPath = join(cwd, 'package.json');\n if (existsSync(packageJsonPath)) {\n try {\n const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf8'));\n const scripts = (pkg && typeof pkg === 'object' && pkg.scripts && typeof pkg.scripts === 'object') ? Object.keys(pkg.scripts as Record<string, unknown>).sort() : [];\n if (scripts.length > 0) {\n lines.push(`package.json scripts: ${scripts.join(', ')}`);\n }\n } catch (e) {\n lines.push('package.json exists but could not be parsed');\n }\n }\n if (existsSync(join(cwd, 'Cargo.toml'))) {\n lines.push('Cargo.toml present');\n }\n if (existsSync(join(cwd, 'go.mod'))) {\n lines.push('go.mod present');\n }\n if (existsSync(join(cwd, 'pyproject.toml'))) {\n lines.push('pyproject.toml present');\n }\n if (existsSync(join(cwd, 'README.md'))) {\n lines.push('README.md present');\n }\n const repoLiteral = detectGithubRemoteLiteral(cwd);\n if (repoLiteral) {\n lines.push(`git origin: ${repoLiteral}`);\n }\n return (lines.length > 0) ? lines.join('\\n') : 'No common project test metadata found.';\n}\n\n/**\n * Ask Cesar to prepare a task-specific fitness command when a forge call omitted one. This keeps UX non-interactive without hardcoding task-specific checks in the handler.\n */\n// @kern-source: forge:395\nexport async function prepareForgeFitnessCommand(task: string, dispatch: Dispatch, ctx: HandlerContext): Promise<string|null> {\n const config = ctx.config;\n const cwd = resolveWorkingDir();\n const cesarEngineId = String((config as any).cesarEngine ?? config.forgeFixedStarter ?? ctx.activeEngines()[0] ?? '').trim();\n if (!cesarEngineId) return null;\n\n let engine: any = null;\n try { engine = ctx.registry.get(cesarEngineId); } catch { return null; }\n if (!engine) return null;\n\n const outputDir = join(RUNS_DIR, `fitness-${Date.now()}`);\n mkdirSync(outputDir, { recursive: true });\n dispatch({ type: 'info', message: `Cesar preparing fitness check with ${cesarEngineId}…` });\n\n const prompt = [\n 'Prepare one shell fitness command for a forge run.',\n '',\n 'Return strict JSON only: {\"fitnessCmd\":\"<command>\",\"reason\":\"<short reason>\"}',\n '',\n 'Rules:',\n '- The command must be non-interactive and suitable to run from the repository root.',\n '- Interpret the task semantically. Do not convert every phrase into a literal grep.',\n '- The command should verify the task requirements as specifically as possible using local files and local project facts.',\n '- Do not add GitHub/repository URL checks unless the task explicitly asks for a public repo link, GitHub URL, or footer/source link.',\n '- If a repo link is needed, use the git origin shown in Project signals as the source of truth.',\n '- Preserve exact literals only when the task actually requires those literals. Do not correct or invent spellings.',\n '- Do not turn broad wording like \"avoid internal build details\" into forbidding local identity names such as the GitHub owner or repo name.',\n '- Prefer existing project scripts when they fit; otherwise write a small shell/node/python check.',\n '- Do not include markdown, prose, or multiple commands outside the JSON string.',\n '',\n `Task:\\n${task}`,\n '',\n `Project signals:\\n${describeProjectFitnessOptions(cwd)}`,\n ].join('\\n');\n\n try {\n const result = await ctx.adapter.dispatch({\n engine,\n prompt,\n cwd,\n mode: 'exec' as any,\n timeout: Math.min((config.timeout ?? 90), 90),\n outputDir,\n });\n const cmd = extractFitnessCommandFromCesarOutput(String(result.stdout ?? ''));\n if (cmd) {\n const repoLiteral = detectGithubRemoteLiteral(cwd);\n const taskRepaired = repairFitnessCommandTaskLiterals(task, cmd);\n const repoRepaired = repairFitnessCommandRepositoryLiteral(taskRepaired, repoLiteral);\n const forbiddenRepaired = repairOverbroadForbiddenLiterals(task, repoRepaired, repoLiteral);\n const repaired = repairContradictoryFitnessLiterals(forbiddenRepaired);\n const validation = validateFitnessCommandIntent(task, repaired, repoLiteral);\n if (!validation.ok) {\n dispatch({ type: 'warning', message: `Rejected Cesar fitness check: ${validation.reason}` });\n return null;\n }\n if (repaired !== cmd) {\n dispatch({ type: 'warning', message: `Repaired Cesar fitness literal: ${cmd} -> ${repaired}` });\n }\n dispatch({ type: 'info', message: `Cesar fitness check: ${repaired}` });\n return repaired;\n }\n } catch (err) {\n dispatch({ type: 'warning', message: `Cesar could not prepare a fitness check: ${err instanceof Error ? err.message : String(err)}` });\n }\n return null;\n}\n\n/**\n * Pick a non-interactive fallback fitness command from the current project when the user or Cesar did not provide one.\n */\n// @kern-source: forge:465\nexport function inferProjectFitnessCommand(cwd: string): string {\n const packageJsonPath = join(cwd, 'package.json');\n if (existsSync(packageJsonPath)) {\n try {\n const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf8'));\n const scripts = pkg && typeof pkg === 'object' && pkg.scripts && typeof pkg.scripts === 'object'\n ? pkg.scripts as Record<string, unknown>\n : {};\n const hasScript = (name: string) => typeof scripts[name] === 'string' && String(scripts[name]).trim().length > 0;\n if (hasScript('test:ts')) return 'npm run test:ts';\n if (hasScript('test')) return 'npm test';\n if (hasScript('typecheck')) return 'npm run typecheck';\n if (hasScript('build')) return 'npm run build';\n } catch {\n // Fall through to generic checks when package.json cannot be parsed.\n }\n }\n if (existsSync(join(cwd, 'Cargo.toml'))) return 'cargo test';\n if (existsSync(join(cwd, 'go.mod'))) return 'go test ./...';\n if (existsSync(join(cwd, 'pyproject.toml'))) return 'python -m pytest';\n return 'git diff --check';\n}\n\n// @kern-source: forge:490\nexport async function handleForge(task: string, fitnessCmd: string|null, dispatch: Dispatch, ctx: HandlerContext, existingPlan?: Plan, hardened?: boolean, skipPlanApproval?: boolean): Promise<{winner:string|null, patchPath:string|null, manifestPath:string, task:string, fitnessCmd:string}|null> {\n const forgeAbort = new AbortController();\n try {\n ensureAgonHome();\n\n if (!task) {\n dispatch({ type: 'warning', message: 'No task provided. Usage: \"fix the auth bug, test with npm test\"' });\n return null;\n }\n const forgeCwd = resolveWorkingDir();\n // Snapshot HEAD/branch now so auto-apply can refuse if another session\n // moves the working tree out from under this run (the shared-checkout hazard).\n const preflightHead: string | null = (() => { try { return headSha(forgeCwd); } catch { return null; } })();\n const preflightBranch: string | null = (() => { try { return currentBranch(forgeCwd); } catch { return null; } })();\n const originalTask = task;\n task = repairForgeTaskRepositoryLiteral(task, forgeCwd);\n if (task !== originalTask) {\n dispatch({ type: 'warning', message: 'Repaired forge task repository link to match git origin.' });\n }\n\n let fitness = fitnessCmd;\n if (!fitness) {\n fitness = await prepareForgeFitnessCommand(task, dispatch, ctx);\n }\n if (!fitness) {\n fitness = inferProjectFitnessCommand(resolveWorkingDir());\n dispatch({ type: 'warning', message: `Cesar did not provide a fitness check; falling back to: ${fitness}` });\n }\n\n const allEngines = ctx.activeEngines();\n const engines = filterDefaultOrchestrationEngines(allEngines);\n const excluded = allEngines.filter((id: string) => !engines.includes(id));\n if (excluded.length > 0) dispatch({ type: 'info', message: `Skipping disabled orchestration engines: ${excluded.join(', ')}` });\n if (engines.length === 0) {\n dispatch({ type: 'error', message: 'No engines available. Install at least one AI CLI tool.' });\n return null;\n }\n\n const config = ctx.config;\n let plan: Plan;\n\n if (existingPlan) {\n plan = startPlan(existingPlan);\n ctx.setCurrentPlan(plan);\n savePlan(plan);\n } else {\n const ws = getActiveWorkspace();\n const snapshot = ws\n ? snapshotWorkspace(ws)\n : { id: 'cwd', path: forgeCwd, headSha: 'unknown', branch: 'unknown', dirty: false };\n\n const forgeSteps: PlanStepInput[] = [\n { id: 'baseline', kind: 'fitness', label: 'Baseline fitness check', effects: ['exec'] },\n { id: 'dispatch', kind: 'dispatch', label: `Dispatch engines: ${engines.join(', ')}`, effects: ['exec', 'write', 'network'] },\n { id: 'score', kind: 'fitness', label: 'Score engine results', effects: ['exec', 'read'] },\n { id: 'winner', kind: 'dispatch', label: 'Determine winner', effects: ['read'] },\n ];\n if (config.forgeEnableSynthesis) {\n forgeSteps.push({ id: 'synthesis', kind: 'synthesis', label: 'Critique & synthesize', effects: ['exec', 'write', 'network'] });\n }\n\n plan = createPlan(\n { type: 'forge', task, fitnessCmd: fitness, engines, hardened: hardened ?? false },\n snapshot,\n forgeSteps,\n );\n ctx.setCurrentPlan(plan);\n\n dispatch({ type: 'plan', plan });\n\n const approvalLevel = (config.approvalLevel ?? 'plan') as ApprovalLevel;\n if (!skipPlanApproval && approvalLevel !== 'auto') {\n const answer = await ctx.askQuestion('Approve plan? [Y/n]');\n if (answer.trim().toLowerCase() === 'n') {\n plan = cancelPlan(plan);\n ctx.setCurrentPlan(plan);\n savePlan(plan);\n dispatch({ type: 'info', message: 'Plan cancelled.' });\n return null;\n }\n }\n\n plan = approvePlan(plan);\n plan = startPlan(plan);\n ctx.setCurrentPlan(plan);\n savePlan(plan);\n }\n\n const forgeDir = join(RUNS_DIR, `forge-${Date.now()}`);\n mkdirSync(forgeDir, { recursive: true });\n dispatch({ type: 'info', message: `Forge run dir: ${forgeDir}` });\n\n const projectCtx = scanProjectContext(forgeCwd, config.projectContext || undefined, config.contextFormat);\n // NOTE: the whole-project kern-context spine is injected inside runForge\n // (the convergence point for forge + goal) and runConquer — NOT here — so\n // every build mode gets it. See buildKernContextSpine in agon-core.\n\n const engineStatus: Record<string, string> = {};\n const startTime = Date.now();\n\n // ── Scoreboard + Checkpoint ──\n const runId = `forge-${Date.now()}`;\n const scoreboard = createScoreboard(runId, 'forge', engines);\n const preCp = buildCheckpoint(runId, 'pre-dispatch', 'forge', engines, { task, fitnessCmd: fitness, hardened: hardened ?? false });\n recordCheckpoint(preCp);\n\n // Phase 5c: pre-compute which engines have agent-mode config, so the\n // progress tick (called every 250ms) doesn't re-query the registry.\n const agentEngineIds = new Set<string>();\n for (const id of engines) {\n try {\n const eng = ctx.registry.get(id);\n if ((eng as any).agent || (eng as any).api) agentEngineIds.add(id);\n } catch { /* engine not resolvable — treat as non-agent */ }\n }\n\n // Re-render guard: the tick fires at 250ms for a smooth scoreboard sync,\n // but the live progress pane only needs a new dispatch when something the\n // user can see actually changed (status/score, or the 1s elapsed counter).\n // Dispatching a fresh array every 250ms when the content is identical churns\n // the Ink live pane at 4Hz for no visible change — the forge shutter. Gate\n // the dispatch on a cheap signature so it fires ~1Hz during steady building\n // and immediately on any real state change.\n let _lastProgressSig = '';\n const progressInterval = setInterval(() => {\n const elapsed = Math.floor((Date.now() - startTime) / 1000);\n const progress: EngineProgress[] = engines.map((id: string) => {\n const status = engineStatus[id] ?? 'preparing';\n return {\n id,\n status: status === 'done' ? `done (${engineStatus[`${id}:score`] ?? '?'})` : status,\n elapsed,\n done: status === 'done',\n failed: status === 'failed',\n score: engineStatus[`${id}:score`],\n isAgent: agentEngineIds.has(id),\n };\n });\n const sig = progress.map((p: EngineProgress) => `${p.id}:${p.status}:${p.score ?? ''}`).join('|') + `@${elapsed}`;\n if (sig !== _lastProgressSig) {\n _lastProgressSig = sig;\n dispatch({ type: 'progress-update', engines: progress });\n }\n // Sync scoreboard with engineStatus for live display\n for (const id of engines) {\n const s = engineStatus[id] ?? 'waiting';\n if (s === 'building') scoreboardUpdateProgress(scoreboard, id, Math.min(95, elapsed * 2));\n else if (s === 'done') scoreboardFinishEngine(scoreboard, id, { score: Number(engineStatus[`${id}:score`]) || undefined });\n else if (s === 'failed') scoreboardFailEngine(scoreboard, id, engineStatus[`${id}:error`] ?? 'failed');\n }\n }, 250);\n\n ctx.setActiveAbort(forgeAbort);\n\n let manifest: any;\n try {\n manifest = await runForge(\n {\n task,\n fitnessCmd: fitness,\n cwd: forgeCwd,\n forgeDir,\n engines,\n context: projectCtx,\n hardened: hardened ?? false,\n // Interactive forge: Cesar synthesizes the best-of-all result (only\n // active when config.forgeEnableSynthesis is on). Falls back to the\n // winner engine if cesarEngine is unset/unknown.\n synthEngine: String((ctx.config as any).cesarEngine ?? '').trim() || undefined,\n synthesize: 'always',\n signal: forgeAbort.signal,\n },\n ctx.registry,\n ctx.adapter,\n (event: any) => {\n plan = handleForgeEvent(event, plan, engineStatus, dispatch, ctx);\n },\n );\n } catch (err) {\n clearInterval(progressInterval);\n dispatch({ type: 'progress-clear' });\n ctx.setActiveAbort(null);\n if (ctx.currentPlan?.state !== 'cancelled') {\n const errorMsg = err instanceof Error ? err.message : String(err);\n plan = failPlan(plan, errorMsg);\n ctx.setCurrentPlan(plan);\n savePlan(plan);\n }\n throw err;\n }\n\n clearInterval(progressInterval);\n dispatch({ type: 'progress-clear' });\n\n // runForge now never throws — it returns a manifest with error set on\n // fatal failure. Surface that as a user-visible warning so the run isn't\n // silently treated as successful with no winner.\n if (manifest.error) {\n dispatch({ type: 'warning', message: `Forge failed: ${manifest.error}` });\n // Cesar narrates the failure with concrete next steps before we exit.\n try { await cesarReviewForgeOutcome(manifest, dispatch, ctx); }\n catch (err) { console.warn(`[agon] Cesar review (error path) failed: ${err instanceof Error ? err.message : String(err)}`); }\n // runForge no longer throws — but plan-mode still expects to see the\n // plan transition to 'failed' on a fatal forge failure. Without this,\n // the plan stays 'started'/'pending' and the orchestrator never moves on.\n if (ctx.currentPlan?.state !== 'cancelled') {\n plan = failPlan(plan, manifest.error);\n ctx.setCurrentPlan(plan);\n savePlan(plan);\n }\n recordRun({\n mode: 'forge',\n intent: task,\n winner: undefined,\n success: false,\n durationMs: Date.now() - startTime,\n engineIds: engines,\n fitnessCmd: fitness ?? undefined,\n completionState: 'crashed',\n error: manifest.error,\n });\n ctx.setActiveAbort(null);\n return null;\n }\n if (manifest.alreadySatisfied) {\n dispatch({ type: 'info', message: 'Forge: task already satisfied — fitness command passes on baseline, no engines dispatched.' });\n try { await cesarReviewForgeOutcome(manifest, dispatch, ctx); }\n catch (err) { console.warn(`[agon] Cesar review (already-satisfied path) failed: ${err instanceof Error ? err.message : String(err)}`); }\n // alreadySatisfied = success, distinct from no-winner. Without this\n // early return, the rest of the handler (scoreboard, judge, plan-finalize)\n // sees an empty manifest.results and reports \"No winner — all engines\n // failed\", marking the plan failed.\n recordRun({\n mode: 'forge',\n intent: task,\n winner: undefined,\n success: true,\n durationMs: Date.now() - startTime,\n engineIds: engines,\n fitnessCmd: fitness ?? undefined,\n completionState: 'completed',\n });\n ctx.setActiveAbort(null);\n return { winner: null, patchPath: null, manifestPath: `${forgeDir}/manifest.json`, task, fitnessCmd: fitness };\n }\n if (manifest.singleSurvivor && manifest.winner) {\n const winner = manifest.winner;\n const score = (manifest.results as any)[winner]?.score ?? 0;\n dispatch({ type: 'warning', message: `Only ${winner} produced a passing result (score ${score}). Other engines failed.` });\n // Cesar reads the surviving patch and tells the user accept/retry.\n try { await cesarReviewForgeOutcome(manifest, dispatch, ctx); }\n catch (err) { console.warn(`[agon] Cesar review (single-survivor path) failed: ${err instanceof Error ? err.message : String(err)}`); }\n }\n // Note: the no-winner-with-no-error case is handled below, after the\n // scoreboard renders, so the user sees the metrics first then Cesar's\n // diagnosis. The cesarJudgeForge call (multi-pass case) stays where it was.\n\n // Finalize scoreboard + post-dispatch checkpoint\n for (const id of engines) {\n const s = engineStatus[id] ?? 'waiting';\n if (s === 'done') scoreboardFinishEngine(scoreboard, id, { score: Number(engineStatus[`${id}:score`]) || undefined });\n else if (s === 'failed') scoreboardFailEngine(scoreboard, id, engineStatus[`${id}:error`] ?? 'failed');\n }\n dispatch({ type: 'info', message: renderScoreboard(scoreboard) });\n const postCp = buildCheckpoint(runId, 'post-dispatch', 'forge', engines, { winner: manifest.winner ?? null, task });\n recordCheckpoint(postCp);\n\n const engineIds = Object.keys(manifest.results);\n const results = Object.values(manifest.results) as any[];\n\n dispatch({\n type: 'scoreboard',\n title: 'Forge Scoreboard',\n engineIds,\n winner: manifest.winner ?? undefined,\n metrics: [\n { label: 'Fitness', values: results.map((r: any) => r.pass ? `PASS (${r.score})` : 'FAIL') },\n { label: 'Score', values: results.map((r: any) => String(r.score)) },\n { label: 'Diff size', values: results.map((r: any) => `${r.diffLines} lines`) },\n { label: 'Files changed', values: results.map((r: any) => String(r.filesChanged)) },\n { label: 'Time', values: results.map((r: any) => `${r.durationSec}s`) },\n ],\n });\n\n // Route through Cesar for judgment + convergence analysis\n let judgment: any = null;\n const passingEngines = Object.values(manifest.results).filter((r: any) => r.pass).length;\n if (passingEngines >= 2 && ctx.cesarSession) {\n try {\n judgment = await cesarJudgeForge(manifest, dispatch, ctx);\n } catch (err) {\n console.warn(`[agon] Cesar judge failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n } else if (passingEngines === 0 && !manifest.alreadySatisfied && ctx.cesarSession) {\n // No-winner-no-error: Cesar diagnoses the failure pattern so the user\n // gets a real next-step instead of just a \"no winner\" scoreboard.\n try { await cesarReviewForgeOutcome(manifest, dispatch, ctx); }\n catch (err) { console.warn(`[agon] Cesar review (no-winner path) failed: ${err instanceof Error ? err.message : String(err)}`); }\n }\n\n // Use Cesar's winner if available, otherwise fall back to automatic\n const finalWinner = judgment?.winner ?? manifest.winner;\n\n // Convergence: if Cesar says merge best-of-breed, synthesize a converged patch\n if (judgment?.shouldConverge && judgment.convergencePlan.length > 0 && finalWinner) {\n dispatch({ type: 'info', message: 'Cesar recommends convergence — synthesizing best-of-breed…' });\n const answer = await ctx.askQuestion('Converge best parts from all engines? [Y/n]');\n if (answer.trim().toLowerCase() !== 'n') {\n try {\n const convergedPath = await cesarConvergeForge(manifest, judgment, dispatch, ctx);\n if (convergedPath) {\n dispatch({ type: 'success', message: 'Convergence complete — merged patch ready' });\n const convergedContent = readFileSync(convergedPath, 'utf-8');\n const applied = applyForgePatchToWorkspace('convergence', convergedContent, dispatch, preflightHead, preflightBranch);\n if (!applied) dispatch({ type: 'patch-review' as any, winnerId: 'convergence', patchPath: convergedPath, patchContent: convergedContent });\n\n if ((ctx.config as any).sessionContinuity === true) {\n try {\n const convergeThread = loadOrCreateActiveThread(resolveWorkingDir());\n const capped = convergedContent.length > 90000\n ? convergedContent.slice(0, 90000) + `\\n\\n[... ${convergedContent.length - 90000} more chars truncated — full patch at ${convergedPath}]`\n : convergedContent;\n convergeThread.append({\n role: 'assistant',\n content: `[forge-convergence-diff] winner: convergence (best-of-breed)\\npatch path: ${convergedPath}\\n\\n${capped}`,\n });\n await convergeThread.save();\n } catch (threadErr) {\n dispatch({ type: 'warning', message: `Convergence diff NOT persisted to thread: ${threadErr instanceof Error ? threadErr.message : String(threadErr)}` });\n }\n }\n\n // Skip normal winner patch — convergence replaces it\n dispatch({ type: 'info', message: `Manifest: ${forgeDir}/manifest.json` });\n dispatch({ type: 'info', message: `Result bundle: ${manifest.resultBundlePath ?? `${forgeDir}/result.json`}` });\n\n for (const step of plan.steps) {\n if (step.result.state === 'pending' || step.result.state === 'running') {\n plan = mergeStepResult(plan, step.id, { state: 'completed' });\n }\n }\n const winnerArtifacts = [\n { type: 'manifest' as const, path: `${forgeDir}/manifest.json` },\n { type: 'patch' as const, path: convergedPath, engineId: 'convergence' },\n ];\n plan = mergeStepResult(plan, 'winner', { state: 'completed', artifacts: winnerArtifacts });\n ctx.setCurrentPlan(plan);\n savePlan(plan);\n dispatch({ type: 'info', message: `Plan: ${plan.id}` });\n sessionResultStore.add({\n type: 'forge',\n timestamp: new Date().toISOString(),\n question: task,\n engines: engineIds,\n winner: 'convergence',\n data: {\n scoreboard: engineIds.map((id: string) => {\n const r = (manifest.results as any)[id];\n return { engineId: id, pass: r.pass, score: r.score, diffLines: r.diffLines, filesChanged: r.filesChanged, durationSec: r.durationSec };\n }),\n winner: 'convergence',\n synthesis: manifest.synthesis ?? undefined,\n },\n });\n for (const [id, r] of Object.entries(manifest.results) as [string, any][]) {\n tracker.record(id, { prompt: task, response: `score:${r.score} diff:${r.diffLines}` });\n }\n recordRun({\n mode: 'forge',\n intent: task,\n winner: 'convergence',\n success: true,\n durationMs: Date.now() - startTime,\n engineIds: engineIds,\n fitnessCmd: fitness ?? undefined,\n completionState: 'completed',\n });\n return {\n winner: 'convergence',\n patchPath: convergedPath,\n manifestPath: `${forgeDir}/manifest.json`,\n task,\n fitnessCmd: fitness!,\n }; // Early return — convergence handled everything\n }\n } catch (err) {\n dispatch({ type: 'warning', message: `Convergence failed: ${err instanceof Error ? err.message : String(err)}. Falling back to winner.` });\n }\n }\n }\n\n if (finalWinner) {\n if (!judgment) dispatch({ type: 'success', message: `Winner: ${finalWinner}` });\n const patchPath = manifest.patches[finalWinner];\n dispatch({ type: 'info', message: `Patch: ${patchPath}` });\n if (patchPath) {\n try {\n const patchContent = readFileSync(patchPath, 'utf-8');\n const applied = applyForgePatchToWorkspace(finalWinner, patchContent, dispatch, preflightHead, preflightBranch);\n if (!applied) dispatch({ type: 'patch-review' as any, winnerId: finalWinner, patchPath, patchContent });\n\n if ((ctx.config as any).sessionContinuity === true) {\n try {\n const cwd = resolveWorkingDir();\n const forgeThread = loadOrCreateActiveThread(cwd);\n const capped = patchContent.length > 90000\n ? patchContent.slice(0, 90000) + `\\n\\n[... ${patchContent.length - 90000} more chars truncated — full patch at ${patchPath}]`\n : patchContent;\n forgeThread.append({\n role: 'assistant',\n content: `[forge-diff] winner: ${finalWinner}\\npatch path: ${patchPath}\\n\\n${capped}`,\n });\n await forgeThread.save();\n } catch (threadErr) {\n dispatch({ type: 'warning', message: `Winner diff NOT persisted to thread: ${threadErr instanceof Error ? threadErr.message : String(threadErr)}` });\n }\n }\n } catch (err) {\n console.warn(`[agon] failed to read winning patch ${patchPath}: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n } else {\n if (manifest.noDiffSummary) {\n const summary = manifest.noDiffSummary as any;\n if (Number(summary.toolLoopLimit ?? 0) > 0) {\n dispatch({ type: 'error', message: `No candidate diff — ${summary.toolLoopLimit}/${summary.count} engine(s) hit the tool-loop limit before producing a patch.` });\n } else {\n dispatch({ type: 'warning', message: 'No candidate diff — engines produced no patch. Use validate/improve mode or a more discriminating fitness command for already-passing work.' });\n }\n } else {\n dispatch({ type: 'error', message: 'No winner — all engines failed' });\n }\n }\n dispatch({ type: 'info', message: `Manifest: ${forgeDir}/manifest.json` });\n dispatch({ type: 'info', message: `Result bundle: ${manifest.resultBundlePath ?? `${forgeDir}/result.json`}` });\n\n for (const step of plan.steps) {\n if (step.result.state === 'pending' || step.result.state === 'running') {\n plan = mergeStepResult(plan, step.id, { state: 'completed' });\n }\n }\n\n const anyPassed = Object.values(manifest.results).some((r: any) => r.pass);\n // Use Cesar's chosen winner (finalWinner) for plan artifacts, not automatic manifest.winner\n const winnerForPlan = finalWinner ?? manifest.winner;\n const winnerArtifacts = [\n { type: 'manifest' as const, path: `${forgeDir}/manifest.json` },\n ...(winnerForPlan && manifest.patches[winnerForPlan]\n ? [{ type: 'patch' as const, path: manifest.patches[winnerForPlan], engineId: winnerForPlan }]\n : []),\n ];\n plan = mergeStepResult(plan, 'winner', { state: 'completed', artifacts: winnerArtifacts });\n\n if (!anyPassed) {\n plan = { ...plan, state: 'failed', currentStepId: null, updatedAt: new Date().toISOString() } as Plan;\n }\n ctx.setCurrentPlan(plan);\n savePlan(plan);\n dispatch({ type: 'info', message: `Plan: ${plan.id}` });\n\n sessionResultStore.add({\n type: 'forge',\n timestamp: new Date().toISOString(),\n question: task,\n engines: engineIds,\n winner: finalWinner ?? null,\n data: {\n scoreboard: engineIds.map((id: string, i: number) => {\n const r = results[i] as any;\n return { engineId: id, pass: r.pass, score: r.score, diffLines: r.diffLines, filesChanged: r.filesChanged, durationSec: r.durationSec };\n }),\n winner: finalWinner ?? null,\n synthesis: manifest.synthesis ?? undefined,\n },\n });\n\n for (const [id, r] of Object.entries(manifest.results) as [string, any][]) {\n tracker.record(id, { prompt: task, response: `score:${r.score} diff:${r.diffLines}` });\n }\n\n const runRecord = recordRun({\n mode: 'forge',\n intent: task,\n winner: finalWinner ?? undefined,\n success: anyPassed,\n durationMs: Date.now() - startTime,\n engineIds: engineIds,\n fitnessCmd: fitness ?? undefined,\n completionState: 'completed',\n });\n if (!process.env.AGON_NO_SUMMARY) {\n dispatch({ type: 'info', message: formatRunSummary(runRecord) });\n }\n\n return {\n winner: finalWinner ?? null,\n patchPath: finalWinner && manifest.patches[finalWinner] ? manifest.patches[finalWinner] : null,\n manifestPath: `${forgeDir}/manifest.json`,\n task,\n fitnessCmd: fitness!,\n };\n } finally {\n ctx.setActiveAbort(null);\n }\n}\n","// @generated by kern v3.5.8 — DO NOT EDIT. Source: src/kern/cesar/judge.kern\n\nimport { join } from 'node:path';\n\nimport { readFileSync, writeFileSync } from 'node:fs';\n\nimport type { ForgeManifest, ForgeJudgment, ConvergenceEntry } from '@kernlang/agon-core';\n\nimport { RUNS_DIR, classifyTask, extractPatchFilePatterns, recordForgeJudgment } from '@kernlang/agon-core';\n\nimport { ENGINE_COLORS } from '../blocks/output-format.js';\n\nimport type { Dispatch, HandlerContext } from '../../handlers/types.js';\n\nimport { parseConfidence, confidenceBadge } from './confidence.js';\n\nimport { ensureCesarSession } from './session.js';\n\n/**\n * Parse Cesar's structured judgment response.\n */\n// @kern-source: judge:10\nfunction parseForgeJudgment(response: string, manifest: ForgeManifest): ForgeJudgment|null {\n // Strip confidence prefix (e.g. ~91%) before parsing structured output\n const stripped = parseConfidence(response).rest;\n const lines = stripped.split('\\n');\n let winner = manifest.winner ?? '';\n const strengths: { engineId: string; category: string; reason: string }[] = [];\n const convergencePlan: ConvergenceEntry[] = [];\n let summary = '';\n let shouldConverge = false;\n for (const line of lines) {\n const trimmed = line.trim();\n // WINNER: engineId\n const winnerMatch = trimmed.match(/^WINNER:\\s*(.+)/i);\n if (winnerMatch) {\n winner = winnerMatch[1].trim();\n }\n // CONVERGE: yes|no\n const convergeMatch = trimmed.match(/^CONVERGE:\\s*(yes|no)/i);\n if (convergeMatch) {\n shouldConverge = convergeMatch[1].toLowerCase() === 'yes';\n }\n // SUMMARY: text\n const summaryMatch = trimmed.match(/^SUMMARY:\\s*(.+)/i);\n if (summaryMatch) {\n summary = summaryMatch[1].trim();\n }\n // Strength: - engineId: category — reason\n const strengthMatch = trimmed.match(/^-\\s+(\\w+):\\s+(.+?)\\s+[—–-]\\s+(.+)/);\n if (strengthMatch && !trimmed.startsWith('- file:')) {\n strengths.push({ engineId: strengthMatch[1], category: strengthMatch[2], reason: strengthMatch[3] });\n }\n // Convergence: - file:path fn:name from:engineId reason:why\n const convMatch = trimmed.match(/^-\\s+file:(\\S+)\\s+fn:(\\S+)\\s+from:(\\S+)\\s+reason:(.+)/);\n if (convMatch) {\n convergencePlan.push({ file: convMatch[1], fn: convMatch[2], from: convMatch[3], reason: convMatch[4].trim() });\n }\n }\n if (!winner) {\n return null;\n }\n return { winner: winner, strengths: strengths, convergencePlan: convergencePlan, summary: summary, shouldConverge: shouldConverge };\n}\n\n/**\n * Run after every forge — narrate the outcome to the user via Cesar so the user always knows what happened. Handles error / already-satisfied / single-survivor / normal multi-pass states. For multi-pass, defers to cesarJudgeForge for full judgment. For single-survivor, asks Cesar to read the surviving patch and recommend accept-or-retry. For error, asks Cesar to explain the failure plainly.\n */\n// @kern-source: judge:47\nexport async function cesarReviewForgeOutcome(manifest: ForgeManifest, dispatch: Dispatch, ctx: HandlerContext): Promise<void> {\n let session;\n try { session = await ensureCesarSession(ctx); }\n catch { return; }\n if (!session.alive) return;\n\n const cesarEngineId = ((ctx.config as any).cesarEngine ?? ctx.config.forgeFixedStarter ?? 'claude');\n const color = ENGINE_COLORS[cesarEngineId] ?? 124;\n\n // ── Fatal forge error ────────────────────────────────────────────\n if (manifest.error) {\n const skippedDetail = manifest.engines.length > 0\n ? `Engines configured: ${manifest.engines.join(', ')}.`\n : 'No engines were dispatched.';\n const errorPrompt = `The forge run failed before producing a winner.\\n\\nTASK: ${manifest.task}\\nFITNESS COMMAND: ${manifest.fitnessCmd}\\nERROR: ${manifest.error}\\n${skippedDetail}\\n\\nIn 2-3 sentences, explain to the user what went wrong and the most likely fix (refresh API keys, install a CLI, check git state, etc.). Be specific and actionable. Do not pad. End with a confidence percentage on whatever fix you suggest.`;\n dispatch({ type: 'spinner-start', message: 'Cesar reading forge failure…', color });\n let response = '';\n try {\n const gen = session.send({ message: errorPrompt, signal: undefined });\n for await (const chunk of gen) {\n if (chunk.type === 'text') response += chunk.content;\n if (chunk.type === 'done' || chunk.type === 'error') break;\n }\n } catch { /* swallow — we already showed a static warning */ }\n dispatch({ type: 'spinner-stop' });\n if (response.trim()) {\n dispatch({ type: 'header', title: 'Cesar — Forge Failure' });\n dispatch({ type: 'engine-block', engineId: cesarEngineId, color, content: response.trim() });\n }\n return;\n }\n\n // ── Already satisfied ────────────────────────────────────────────\n if (manifest.alreadySatisfied) {\n const satisfiedPrompt = `The forge baseline check passed before any engine ran. The task says: ${manifest.task}. The fitness command \"${manifest.fitnessCmd}\" already passes on a clean checkout. In 1-2 sentences, confirm to the user that the task appears already done and suggest next steps (verify, move on, or re-check if the fitness command is too lenient). End with a confidence percentage.`;\n dispatch({ type: 'spinner-start', message: 'Cesar confirming task state…', color });\n let response = '';\n try {\n const gen = session.send({ message: satisfiedPrompt, signal: undefined });\n for await (const chunk of gen) {\n if (chunk.type === 'text') response += chunk.content;\n if (chunk.type === 'done' || chunk.type === 'error') break;\n }\n } catch { /* swallow */ }\n dispatch({ type: 'spinner-stop' });\n if (response.trim()) {\n dispatch({ type: 'header', title: 'Cesar — Already Satisfied' });\n dispatch({ type: 'engine-block', engineId: cesarEngineId, color, content: response.trim() });\n }\n return;\n }\n\n // ── Single survivor ─────────────────────────────────────────────\n if (manifest.singleSurvivor && manifest.winner) {\n const winnerId = manifest.winner;\n const winnerResult = (manifest.results as any)[winnerId];\n let winnerPatch = '';\n const winnerPatchPath = manifest.patches[winnerId];\n if (winnerPatchPath) {\n try {\n const fullPatch = readFileSync(winnerPatchPath, 'utf-8');\n const lines = fullPatch.split('\\n');\n winnerPatch = lines.slice(0, 200).join('\\n');\n if (lines.length > 200) winnerPatch += `\\n... (${lines.length - 200} more lines)`;\n } catch { winnerPatch = '(patch file unreadable)'; }\n }\n const failedList = Object.entries(manifest.results as any)\n .filter(([id, r]) => id !== winnerId && !(r as any).pass)\n .map(([id, r]) => `- ${id}: ${(r as any).durationSec}s, ${(r as any).diffLines ?? 0} lines, ${(r as any).pass ? 'passed' : 'failed'}`)\n .join('\\n');\n\n const survivorPrompt = `Forge produced exactly one passing result. The other engines failed.\n\n TASK: ${manifest.task}\n FITNESS COMMAND: ${manifest.fitnessCmd}\n SOLE SURVIVOR: ${winnerId} (score: ${winnerResult?.score ?? 0})\n OTHER ENGINES:\n ${failedList || '(none reported)'}\n\n ## SURVIVING PATCH (first 200 lines)\n\n \\`\\`\\`diff\n ${winnerPatch}\n \\`\\`\\`\n\n Read the patch carefully. Tell the user:\n 1. **Quality verdict** — does this look like a competent solution to the task? Note specific concerns or strengths.\n 2. **Recommendation** — accept this patch, or run /forge again hoping for more engines? Be specific about why.\n 3. **Apply hint** — if accept-worthy, give the exact path: ${winnerPatchPath ?? '(no patch path)'}\n\n End with a confidence percentage. Don't pad.`;\n\n dispatch({ type: 'spinner-start', message: `Cesar reviewing ${winnerId}'s solo solution…`, color });\n let response = '';\n try {\n const gen = session.send({ message: survivorPrompt, signal: undefined });\n for await (const chunk of gen) {\n if (chunk.type === 'text') response += chunk.content;\n if (chunk.type === 'done' || chunk.type === 'error') break;\n }\n } catch { /* swallow */ }\n dispatch({ type: 'spinner-stop' });\n if (response.trim()) {\n dispatch({ type: 'header', title: `Cesar — Single Survivor (${winnerId})` });\n dispatch({ type: 'engine-block', engineId: cesarEngineId, color, content: response.trim() });\n }\n return;\n }\n\n // ── No winner at all (every engine failed and not all-no-op) ────\n if (!manifest.winner) {\n const noWinnerPrompt = `Forge dispatched ${manifest.enginesDispatched} engine(s) and none produced a passing result for: ${manifest.task}\\n\\nFitness command: ${manifest.fitnessCmd}\\n\\nEngine outcomes:\\n${Object.entries(manifest.results as any).map(([id, r]) => `- ${id}: pass=${(r as any).pass}, score=${(r as any).score}, ${(r as any).diffLines ?? 0} lines`).join('\\n')}\\n\\nIn 2-3 sentences, tell the user the most likely root cause (task too vague, fitness too strict, engines lacking context, etc.) and one concrete next move. End with a confidence percentage.`;\n dispatch({ type: 'spinner-start', message: 'Cesar diagnosing forge failure…', color });\n let response = '';\n try {\n const gen = session.send({ message: noWinnerPrompt, signal: undefined });\n for await (const chunk of gen) {\n if (chunk.type === 'text') response += chunk.content;\n if (chunk.type === 'done' || chunk.type === 'error') break;\n }\n } catch { /* swallow */ }\n dispatch({ type: 'spinner-stop' });\n if (response.trim()) {\n dispatch({ type: 'header', title: 'Cesar — No Winner' });\n dispatch({ type: 'engine-block', engineId: cesarEngineId, color, content: response.trim() });\n }\n return;\n }\n\n // ── Normal multi-pass: defer to existing judge for full verdict ──\n // (Caller can still invoke cesarJudgeForge separately if it wants the\n // structured judgment with strengths + convergence plan.)\n}\n\n/**\n * Send forge results to Cesar for judgment + convergence plan.\n */\n// @kern-source: judge:183\nexport async function cesarJudgeForge(manifest: ForgeManifest, dispatch: Dispatch, ctx: HandlerContext): Promise<ForgeJudgment|null> {\n // Need an alive Cesar session\n let session;\n try {\n session = await ensureCesarSession(ctx);\n } catch {\n return null; // No Cesar available — skip judgment\n }\n if (!session.alive) return null;\n\n const cesarEngineId = ((ctx.config as any).cesarEngine ?? ctx.config.forgeFixedStarter ?? 'claude');\n const color = ENGINE_COLORS[cesarEngineId] ?? 124;\n\n // Build structured judgment prompt with patch summaries\n const engineSummaries: string[] = [];\n const patchTexts: string[] = [];\n for (const [id, result] of Object.entries(manifest.results) as [string, any][]) {\n let patchSummary = '(no patch)';\n const patchPath = manifest.patches[id];\n if (patchPath) {\n try {\n const patch = readFileSync(patchPath, 'utf-8');\n patchTexts.push(patch);\n // Include first 150 lines of patch for evaluation\n const lines = patch.split('\\n');\n patchSummary = lines.slice(0, 150).join('\\n');\n if (lines.length > 150) patchSummary += `\\n... (${lines.length - 150} more lines)`;\n } catch { patchSummary = '(patch unreadable)'; }\n }\n engineSummaries.push(\n `### ${id}\\n` +\n `- Score: ${result.score} | Pass: ${result.pass} | Diff: ${result.diffLines} lines | Files: ${result.filesChanged} | Time: ${result.durationSec}s\\n` +\n `\\`\\`\\`diff\\n${patchSummary}\\n\\`\\`\\``\n );\n }\n\n const judgePrompt = `You are judging forge results. Multiple engines competed on this task.\n\n TASK: ${manifest.task}\n FITNESS COMMAND: ${manifest.fitnessCmd}\n AUTOMATIC WINNER: ${manifest.winner ?? 'none'}\n\n ## ENGINE RESULTS\n\n ${engineSummaries.join('\\n\\n')}\n\n ## YOUR JOB\n\n Evaluate each engine's code. Identify:\n 1. **Overall winner** — who produced the best result and why\n 2. **Per-engine strengths** — where each engine did something BETTER than others (architecture, error handling, tests, edge cases, code style, performance)\n 3. **Convergence plan** — if multiple engines have complementary strengths, list which parts from which engine should be merged. Only suggest convergence if it would genuinely improve the result.\n\n Respond in this EXACT format:\n\n WINNER: {engineId}\n STRENGTHS:\n - {engineId}: {category} — {reason}\n - {engineId}: {category} — {reason}\n CONVERGE: {yes|no}\n CONVERGENCE:\n - file:{path} fn:{name} from:{engineId} reason:{why}\n SUMMARY: {your read — as long or as short as it actually deserves}`;\n\n dispatch({ type: 'spinner-start', message: 'Cesar judging forge results…', color });\n\n let judgeResponse = '';\n try {\n const gen = session.send({ message: judgePrompt, signal: undefined });\n for await (const chunk of gen) {\n if (chunk.type === 'text') judgeResponse += chunk.content;\n if (chunk.type === 'done' || chunk.type === 'error') break;\n }\n } catch {\n dispatch({ type: 'spinner-stop' });\n return null;\n }\n dispatch({ type: 'spinner-stop' });\n\n // Parse structured judgment\n const judgment = parseForgeJudgment(judgeResponse, manifest);\n\n // Show confidence badge if present\n const conf = parseConfidence(judgeResponse);\n if (conf.value !== null) {\n dispatch({ type: 'info', message: confidenceBadge(conf.value) + ' Cesar (judge)' });\n }\n\n // Display judgment\n if (judgment) {\n try {\n recordForgeJudgment(\n judgment.winner,\n manifest.winner ?? null,\n Object.keys(manifest.results),\n classifyTask(manifest.task),\n manifest.forgeId,\n judgment.summary,\n judgment.strengths,\n extractPatchFilePatterns(patchTexts.join('\\n')),\n );\n } catch (err) {\n console.warn(`[agon] failed to record Cesar forge judgment: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n dispatch({ type: 'header', title: 'Cesar\\'s Judgment' });\n dispatch({ type: 'success', message: `Winner: ${judgment.winner}` });\n\n if (judgment.strengths.length > 0) {\n dispatch({ type: 'info', message: 'Per-engine strengths:' });\n for (const s of judgment.strengths) {\n const sColor = ENGINE_COLORS[s.engineId] ?? 124;\n dispatch({ type: 'engine-block', engineId: s.engineId, color: sColor, content: `${s.category} — ${s.reason}` });\n }\n }\n\n dispatch({ type: 'info', message: judgment.summary });\n\n if (judgment.shouldConverge && judgment.convergencePlan.length > 0) {\n dispatch({ type: 'header', title: 'Convergence Plan' });\n for (const entry of judgment.convergencePlan) {\n const eColor = ENGINE_COLORS[entry.from] ?? 124;\n dispatch({ type: 'engine-block', engineId: entry.from, color: eColor, content: `${entry.file}:${entry.fn} — ${entry.reason}` });\n }\n }\n }\n\n return judgment;\n}\n\n/**\n * Cesar synthesizes a converged patch from best-of-breed parts per the convergence plan.\n */\n// @kern-source: judge:315\nexport async function cesarConvergeForge(manifest: ForgeManifest, judgment: ForgeJudgment, dispatch: Dispatch, ctx: HandlerContext): Promise<string|null> {\n let session;\n try {\n session = await ensureCesarSession(ctx);\n } catch { return null; }\n if (!session.alive) return null;\n\n const cesarEngineId = ((ctx.config as any).cesarEngine ?? ctx.config.forgeFixedStarter ?? 'claude');\n const color = ENGINE_COLORS[cesarEngineId] ?? 124;\n\n // Collect relevant patches — always include the winner's patch as the base\n const patchContents: Record<string, string> = {};\n if (judgment.winner && manifest.patches[judgment.winner]) {\n try {\n patchContents[judgment.winner] = readFileSync(manifest.patches[judgment.winner], 'utf-8');\n } catch { /* skip unreadable */ }\n }\n for (const entry of judgment.convergencePlan) {\n if (!patchContents[entry.from] && manifest.patches[entry.from]) {\n try {\n patchContents[entry.from] = readFileSync(manifest.patches[entry.from], 'utf-8');\n } catch { /* skip unreadable */ }\n }\n }\n\n // Build the convergence synthesis prompt\n const patchSections = Object.entries(patchContents).map(([id, content]) => {\n const lines = content.split('\\n');\n const summary = lines.slice(0, 200).join('\\n');\n return `### ${id}'s patch\\n\\`\\`\\`diff\\n${summary}\\n\\`\\`\\``;\n }).join('\\n\\n');\n\n const planLines = judgment.convergencePlan.map(e =>\n `- Take ${e.fn} from ${e.from} (${e.file}) — ${e.reason}`\n ).join('\\n');\n\n const convergePrompt = `You are synthesizing a converged patch from multiple forge competitors.\n\n TASK: ${manifest.task}\n WINNER: ${judgment.winner}\n\n ## CONVERGENCE PLAN\n ${planLines}\n\n ## PATCHES TO MERGE\n ${patchSections}\n\n ## INSTRUCTIONS\n Create a single unified diff that takes the best parts from each engine according to the convergence plan above.\n - Start from the winner's patch as the base\n - Replace specific functions/sections with the better versions from other engines\n - Ensure the merged result is coherent — no duplicate functions, no conflicts\n - Output ONLY the unified diff, nothing else. Start with --- and +++ lines.`;\n\n dispatch({ type: 'spinner-start', message: 'Cesar synthesizing converged patch…', color });\n\n let convergedPatch = '';\n try {\n const gen = session.send({ message: convergePrompt, signal: undefined });\n for await (const chunk of gen) {\n if (chunk.type === 'text') convergedPatch += chunk.content;\n if (chunk.type === 'done' || chunk.type === 'error') break;\n }\n } catch {\n dispatch({ type: 'spinner-stop' });\n return null;\n }\n dispatch({ type: 'spinner-stop' });\n\n // Extract diff from response (strip markdown fences if present)\n let patch = convergedPatch.trim();\n const fenceMatch = patch.match(/```(?:diff)?\\n([\\s\\S]*?)```/);\n if (fenceMatch) patch = fenceMatch[1].trim();\n\n if (!patch || !patch.includes('---')) {\n dispatch({ type: 'warning', message: 'Cesar could not produce a valid converged patch' });\n return null;\n }\n\n // Write converged patch to forge directory\n const convergePath = join(manifest.forgeDir, 'convergence-patch.diff');\n writeFileSync(convergePath, patch, 'utf-8');\n\n return convergePath;\n}\n","// @generated by kern v3.4.9 — DO NOT EDIT. Source: src/kern/cesar/scoreboard.kern\n\nimport { ENGINE_COLORS } from '../blocks/output-format.js';\n\n// @kern-source: scoreboard:7\nexport type ScoreboardEngineState = 'waiting' | 'running' | 'done' | 'failed' | 'cancelled';\n\n// @kern-source: scoreboard:9\nexport interface ScoreboardEntry {\n engineId: string;\n state: ScoreboardEngineState;\n startedAt?: number;\n finishedAt?: number;\n progress: number;\n score?: number;\n result?: string;\n error?: string;\n}\n\n// @kern-source: scoreboard:19\nexport interface Scoreboard {\n runId: string;\n mode: string;\n startedAt: number;\n entries: ScoreboardEntry[];\n overallState: 'running'|'done'|'failed'|'cancelled';\n}\n\n// @kern-source: scoreboard:26\nexport function createScoreboard(runId: string, mode: string, engineIds: string[]): Scoreboard {\n const now = Date.now();\n return { runId: runId, mode: mode, startedAt: now, entries: engineIds.map((id) => Object.assign({}, { engineId: id, state: 'waiting' as ScoreboardEngineState, progress: 0 })), overallState: 'running' };\n}\n\n// @kern-source: scoreboard:31\nfunction scoreboardFind(board: Scoreboard, engineId: string): ScoreboardEntry|undefined {\n return board.entries.find((e) => e.engineId === engineId);\n}\n\n// @kern-source: scoreboard:33\nexport function scoreboardStartEngine(board: Scoreboard, engineId: string): Scoreboard {\n const entry = scoreboardFind(board, engineId);\n if (!entry) {\n return board;\n }\n entry.state = 'running';\n entry.startedAt = Date.now();\n return board;\n}\n\n// @kern-source: scoreboard:42\nexport function scoreboardUpdateProgress(board: Scoreboard, engineId: string, progress: number): Scoreboard {\n const entry = scoreboardFind(board, engineId);\n if (!entry) {\n return board;\n }\n entry.progress = Math.max(0, Math.min(100, Math.floor(progress)));\n return board;\n}\n\n// @kern-source: scoreboard:50\nexport function scoreboardFinishEngine(board: Scoreboard, engineId: string, opts?: {score?:number,result?:string}): Scoreboard {\n const entry = scoreboardFind(board, engineId);\n if (!entry) {\n return board;\n }\n entry.state = 'done';\n entry.finishedAt = Date.now();\n entry.progress = 100;\n if (opts?.score !== undefined) {\n entry.score = opts.score;\n }\n if (opts?.result !== undefined) {\n entry.result = opts.result;\n }\n scoreboardRecomputeOverall(board);\n return board;\n}\n\n// @kern-source: scoreboard:65\nexport function scoreboardFailEngine(board: Scoreboard, engineId: string, error: string): Scoreboard {\n const entry = scoreboardFind(board, engineId);\n if (!entry) {\n return board;\n }\n entry.state = 'failed';\n entry.finishedAt = Date.now();\n entry.error = error;\n scoreboardRecomputeOverall(board);\n return board;\n}\n\n// @kern-source: scoreboard:76\nexport function scoreboardCancelEngine(board: Scoreboard, engineId: string): Scoreboard {\n const entry = scoreboardFind(board, engineId);\n if (!entry) {\n return board;\n }\n entry.state = 'cancelled';\n entry.finishedAt = Date.now();\n scoreboardRecomputeOverall(board);\n return board;\n}\n\n// @kern-source: scoreboard:86\nfunction scoreboardRecomputeOverall(board: Scoreboard): void {\n if (board.entries.every((e) => e.state === 'done')) {\n board.overallState = 'done';\n } else if (board.entries.every((e) => e.state === 'failed')) {\n board.overallState = 'failed';\n } else if (board.entries.every((e) => e.state === 'done' || e.state === 'failed' || e.state === 'cancelled')) {\n board.overallState = 'done';\n } else if (board.entries.some((e) => e.state === 'running')) {\n board.overallState = 'running';\n }\n}\n\n// @kern-source: scoreboard:100\nexport function formatScoreboardLine(entry: ScoreboardEntry): string {\n // Inline icon literals to avoid loadConfig() dependency in test envs\n const iconMap: Record<ScoreboardEngineState, string> = {\n waiting: '\\u25c7',\n running: '\\u25d0',\n done: '\\u2714',\n failed: '\\u2718',\n cancelled: '\\u25c7',\n };\n const color = ENGINE_COLORS[entry.engineId] ?? 245;\n const icon = iconMap[entry.state];\n const bar = entry.state === 'running'\n ? `${entry.progress}%`\n : (entry.state === 'done' && entry.score != null)\n ? `score ${entry.score}`\n : '';\n const result = entry.result ? ` \\u2014 ${entry.result}` : '';\n const error = entry.error ? ` [${entry.error}]` : '';\n return `\\x1b[38;5;${color}m${icon} ${entry.engineId}${bar ? ` ${bar}` : ''}${result}${error}\\x1b[0m`;\n}\n\n// @kern-source: scoreboard:122\nexport function renderScoreboard(board: Scoreboard): string {\n const lines = board.entries.map((e) => formatScoreboardLine(e));\n return lines.join('\\n');\n}\n","// @generated by kern v3.5.7 — DO NOT EDIT. Source: src/kern/cesar/checkpoint.kern\n\nimport { join } from 'node:path';\n\nimport { mkdirSync, appendFileSync, existsSync, readFileSync } from 'node:fs';\n\nimport { RUNS_DIR, resolveWorkingDir, currentBranch, gitChangedFiles } from '@kernlang/agon-core';\n\n// @kern-source: checkpoint:9\nexport type CheckpointPhase = 'pre-dispatch' | 'post-dispatch' | 'post-judgment' | 'user-pause';\n\n// @kern-source: checkpoint:11\nexport interface Checkpoint {\n id: string;\n runId: string;\n phase: CheckpointPhase;\n ts: number;\n cwd: string;\n branch: string;\n changedFiles: string[];\n mode: string;\n engineIds: string[];\n metadata?: Record<string,unknown>;\n}\n\n// @kern-source: checkpoint:23\nfunction createCheckpointId(): string {\n return `chk-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;\n}\n\n// @kern-source: checkpoint:25\nexport function buildCheckpoint(runId: string, phase: CheckpointPhase, mode: string, engineIds: string[], metadata?: Record<string,unknown>): Checkpoint {\n const cwd = resolveWorkingDir();\n let branch = '';\n let changedFiles: string[] = [];\n try { branch = currentBranch(cwd); } catch { /* noop */ }\n try { changedFiles = gitChangedFiles(cwd); } catch { /* noop */ }\n return {\n id: createCheckpointId(),\n runId,\n phase,\n ts: Date.now(),\n cwd,\n branch,\n changedFiles,\n mode,\n engineIds,\n metadata,\n };\n}\n\n/**\n * Append checkpoint to JSONL. Best-effort: never throws.\n */\n// @kern-source: checkpoint:46\nexport function recordCheckpoint(cp: Checkpoint, runsDir?: string): void {\n try {\n const dir = runsDir ?? RUNS_DIR;\n mkdirSync(dir, { recursive: true });\n appendFileSync(join(dir, 'checkpoints.jsonl'), JSON.stringify(cp) + '\\n');\n } catch { /* checkpoints are advisory */ }\n}\n\n// @kern-source: checkpoint:56\nexport function listCheckpoints(opts?: {runId?:string,phase?:CheckpointPhase,limit?:number,runsDir?:string}): Checkpoint[] {\n const dir = opts?.runsDir ?? RUNS_DIR;\n const path = join(dir, 'checkpoints.jsonl');\n if (!existsSync(path)) return [];\n let raw = '';\n try {\n raw = readFileSync(path, 'utf-8');\n } catch { return []; }\n const out: Checkpoint[] = [];\n for (const line of raw.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const parsed = JSON.parse(trimmed) as Checkpoint;\n if (opts?.runId && parsed.runId !== opts.runId) continue;\n if (opts?.phase && parsed.phase !== opts.phase) continue;\n out.push(parsed);\n } catch { /* skip corrupt */ }\n }\n out.sort((a, b) => b.ts - a.ts);\n const limit = opts?.limit ?? 50;\n return out.slice(0, limit);\n}\n\n// @kern-source: checkpoint:81\nexport function lastCheckpointForRun(runId: string, runsDir?: string): Checkpoint|undefined {\n return listCheckpoints({ runId, limit: 1, runsDir })[0];\n}\n\n// @kern-source: checkpoint:83\nexport function formatCheckpointLine(cp: Checkpoint): string {\n const ago = Math.round((Date.now() - cp.ts) / 1000);\n const agoText = (ago < 60) ? `${ago}s ago` : ((ago < 3600) ? `${Math.round(ago / 60)}m ago` : `${Math.round(ago / 3600)}h ago`);\n const files = (cp.changedFiles.length > 0) ? ` (${cp.changedFiles.length} changed)` : '';\n return `${cp.phase} ${cp.mode} ${cp.engineIds.join('+')}${files} — ${agoText}`;\n}\n","// ── Telemetry Ledger: run records, rolling win rates, task classification ──\n// Persists ~/.agon/telemetry.json. Each run record captures orchestration\n// mode, task type, pass/fail, and timing. Rolling win rates are computed\n// over the last N runs per mode.\n\nimport { readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { homedir } from 'node:os';\nimport { tracker } from '@kernlang/agon-core';\n\n// ── Types ──────────────────────────────────────────────────────────────\n\nexport type TaskType =\n | 'bugfix'\n | 'feature'\n | 'refactor'\n | 'spec'\n | 'review'\n | 'question'\n | 'build'\n | 'pipeline'\n | 'agent'\n | 'unknown';\n\nexport interface OrchestrationResult {\n mode: string;\n intent?: string;\n winner?: string;\n success: boolean;\n durationMs: number;\n engineIds?: string[];\n fitnessCmd?: string;\n completionState: 'completed' | 'aborted' | 'crashed';\n error?: string;\n}\n\nexport interface RunRecord {\n id: string;\n timestamp: number;\n mode: string;\n taskType: TaskType;\n winner: string | undefined;\n success: boolean;\n durationMs: number;\n engineIds: string[];\n completionState: string;\n costEstimateUsd?: number;\n}\n\nexport interface TelemetryFile {\n version: 1;\n runs: RunRecord[];\n}\n\nexport interface WinRateEntry {\n mode: string;\n total: number;\n wins: number;\n rate: number;\n}\n\nexport const DEFAULT_WINDOW = 50;\n\n// ── Path helpers ───────────────────────────────────────────────────────\n\nfunction getAgonHome(): string {\n const override = process.env.AGON_HOME?.trim();\n return override ? resolve(override) : join(homedir(), '.agon');\n}\n\nfunction telemetryPath(): string {\n return join(getAgonHome(), 'telemetry.json');\n}\n\n// ── classifyTaskType ───────────────────────────────────────────────────\n\n/**\n * Map orchestration mode + intent text to a canonical TaskType.\n * Uses keyword heuristics on intent when available, falls back to mode.\n */\nexport function classifyTaskType(mode: string, intent?: string): TaskType {\n const m = mode.toLowerCase();\n const text = (intent ?? '').toLowerCase();\n\n // Review mode is always review\n if (m === 'review') return 'review';\n\n // Intent-based classification when text is present\n if (text.length > 0) {\n if (/\\b(fix|bug|patch|hotfix|debug|regression|crash|error|issue)\\b/.test(text)) return 'bugfix';\n if (/\\b(add|implement|create|new|feature|support|enable)\\b/.test(text)) return 'feature';\n if (/\\b(refactor|cleanup|clean.?up|restructure|rename|move|extract|simplify|consolidate)\\b/.test(text)) return 'refactor';\n if (/\\b(spec|design|plan|proposal|architect)\\b/.test(text)) return 'spec';\n if (/\\b(question|explain|how|what|why|help|understand|clarify)\\b/.test(text)) return 'question';\n }\n\n // Mode-based fallback\n if (m === 'build' || m === 'agent' || m === 'team-agent' || m === 'agent-solo') return 'build';\n if (m === 'pipeline') return 'pipeline';\n if (m === 'brainstorm' || m === 'team-brainstorm') return 'question';\n if (m === 'tribunal' || m === 'team-tribunal') return 'spec';\n if (m === 'campfire') return 'question';\n if (m === 'forge' || m === 'team-forge' || m === 'speculate') return 'feature';\n\n return 'unknown';\n}\n\n// ── TelemetryLedger ────────────────────────────────────────────────────\n\nexport class TelemetryLedger {\n private filePath: string;\n\n constructor(filePath?: string) {\n this.filePath = filePath ?? telemetryPath();\n }\n\n /** Read the entire ledger file, returning an empty structure if missing/malformed. */\n read(): TelemetryFile {\n try {\n const raw = readFileSync(this.filePath, 'utf-8');\n const parsed = JSON.parse(raw) as TelemetryFile;\n if (parsed && Array.isArray(parsed.runs)) return parsed;\n } catch {\n // file missing or malformed — return empty\n }\n return { version: 1, runs: [] };\n }\n\n /** Persist the ledger to disk atomically. */\n write(data: TelemetryFile): void {\n const dir = join(this.filePath, '..');\n mkdirSync(dir, { recursive: true });\n writeFileSync(this.filePath, JSON.stringify(data, null, 2));\n }\n\n /** Append a single run record. */\n append(record: RunRecord): void {\n const data = this.read();\n this.write({ ...data, runs: [...data.runs, record] });\n }\n\n /** Return the last N runs, optionally filtered by mode. */\n recentRuns(limit: number = DEFAULT_WINDOW, mode?: string): RunRecord[] {\n const data = this.read();\n let runs = data.runs;\n if (mode) runs = runs.filter((r) => r.mode === mode);\n return runs.slice(-limit);\n }\n\n /**\n * Compute rolling win rate over the last `window` runs.\n * Returns entries per mode found in the window, plus an overall entry.\n */\n winRates(window: number = DEFAULT_WINDOW): WinRateEntry[] {\n const runs = this.recentRuns(window);\n const byMode = new Map<string, { total: number; wins: number }>();\n\n for (const r of runs) {\n const entry = byMode.get(r.mode) ?? { total: 0, wins: 0 };\n entry.total += 1;\n if (r.success) entry.wins += 1;\n byMode.set(r.mode, entry);\n }\n\n const entries: WinRateEntry[] = [];\n for (const [mode, { total, wins }] of byMode) {\n entries.push({ mode, total, wins, rate: total > 0 ? wins / total : 0 });\n }\n\n // Overall entry\n const overallTotal = runs.length;\n const overallWins = runs.filter((r) => r.success).length;\n entries.push({\n mode: '__overall__',\n total: overallTotal,\n wins: overallWins,\n rate: overallTotal > 0 ? overallWins / overallTotal : 0,\n });\n\n return entries;\n }\n}\n\n// ── recordRun (convenience) ────────────────────────────────────────────\n\nconst defaultLedger = new TelemetryLedger();\n\n/**\n * Record an orchestration run. Uses a process-wide TelemetryLedger singleton\n * writing to ~/.agon/telemetry.json.\n */\nexport function recordRun(result: OrchestrationResult): RunRecord {\n const stats = typeof tracker?.getStats === 'function' ? tracker.getStats() : null;\n const record: RunRecord = {\n id: `run-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n timestamp: Date.now(),\n mode: result.mode,\n taskType: classifyTaskType(result.mode, result.intent),\n winner: result.winner,\n success: result.success,\n durationMs: result.durationMs,\n engineIds: result.engineIds ?? [],\n completionState: result.completionState,\n costEstimateUsd: stats?.totalCostUsd ?? undefined,\n };\n defaultLedger.append(record);\n return record;\n}\n\n// ── formatRunSummary (CLI one-liner) ───────────────────────────────────\n\n/** Format a human-readable post-run summary line. */\nexport function formatRunSummary(record: Pick<RunRecord, 'mode' | 'winner' | 'durationMs' | 'costEstimateUsd'>): string {\n const mode = record.mode;\n const winner = record.winner ?? '—';\n const cost = record.costEstimateUsd && record.costEstimateUsd > 0\n ? `~${record.costEstimateUsd.toFixed(2)}`\n : '';\n const mins = Math.floor(record.durationMs / 60000);\n const secs = Math.floor((record.durationMs % 60000) / 1000);\n const time = mins > 0 ? `${mins}m ${secs}s` : `${secs}s`;\n const costText = cost ? ` · ${cost}` : '';\n return `${mode} complete → ${winner} won${costText} · ${time}`;\n}\n"],"mappings":"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","names":["join","existsSync","mkdirSync","readFileSync","join","readFileSync","join","readFileSync","writeFileSync","mkdirSync","join","join","readFileSync","mkdirSync","writeFileSync","join","existsSync","readFileSync","mkdirSync","winnerArtifacts"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/generated/signals/icons.ts","../src/generated/blocks/output-format.ts","../src/generated/blocks/markdown.ts"],"sourcesContent":["// @generated by kern v3.5.7 — DO NOT EDIT. Source: src/kern/signals/icons.kern\n\nimport { loadConfig } from '@kernlang/agon-core';\n\n// @kern-source: icons:3\nexport interface IconSet {\n read: string;\n edit: string;\n write: string;\n bash: string;\n search: string;\n find: string;\n tool: string;\n campfire: string;\n brainstorm: string;\n tribunal: string;\n image: string;\n queue: string;\n prompt: string;\n winner: string;\n success: string;\n fail: string;\n warning: string;\n header: string;\n nero: string;\n dotOn: string;\n dotOff: string;\n play: string;\n refresh: string;\n flag: string;\n check: string;\n cross: string;\n spinner: string;\n}\n\n// @kern-source: icons:32\nexport const ROMAN_ICONS: IconSet = ({ read: '\\u039e', edit: '\\u270e', write: '\\u2712', bash: '\\u03df', search: '\\u2609', find: '\\u2295', tool: '\\u2692', campfire: '\\u2632', brainstorm: '\\u2609', tribunal: '\\u2696', image: '\\u229e', queue: '\\u231b', prompt: '\\u25bb', winner: '\\u2605', success: '\\u2714', fail: '\\u2718', warning: '\\u26a0', header: '\\u25b8', nero: '\\u2020', dotOn: '\\u25c6', dotOff: '\\u25c7', play: '\\u25b6', refresh: '\\u21bb', flag: '\\u2691', check: '\\u2714', cross: '\\u2718', spinner: '\\u25d0' });\n\n// @kern-source: icons:34\nexport const CLASSIC_ICONS: IconSet = ({ read: '\\ud83d\\udcc4', edit: '\\u270f\\ufe0f', write: '\\ud83d\\udcdd', bash: '\\u26a1', search: '\\ud83d\\udd0d', find: '\\ud83d\\udcc2', tool: '\\ud83d\\udd27', campfire: '\\ud83d\\udd25', brainstorm: '\\ud83d\\udca1', tribunal: '\\u2696', image: '\\ud83d\\udcce', queue: '\\u23f3', prompt: '\\u276f', winner: '\\u2605', success: '\\u2714', fail: '\\u2718', warning: '\\u26a0', header: '\\u25b8', nero: '\\u2694', dotOn: '\\u25cf', dotOff: '\\u25cb', play: '\\u25b6', refresh: '\\u21bb', flag: '\\u2691', check: '\\u2714', cross: '\\u2718', spinner: '\\u25d0' });\n\n/**\n * Resolve icon set from config. Call once per render cycle.\n */\n// @kern-source: icons:36\nexport function icons(): IconSet {\n const theme = loadConfig().iconTheme ?? 'roman';\n return (theme === 'classic') ? CLASSIC_ICONS : ROMAN_ICONS;\n}\n","// @generated by kern v3.5.8 — DO NOT EDIT. Source: src/kern/blocks/output-format.kern\n\nimport { icons } from '../signals/icons.js';\n\n// ── Module: OutputFormatting ──\n\nexport const BOLD: string = '\\x1b[1m';\n\nexport const DIM: string = '\\x1b[2m';\n\nexport const ITALIC: string = '\\x1b[3m';\n\nexport const GREEN: string = '\\x1b[32m';\n\nexport const RED: string = '\\x1b[31m';\n\nexport const YELLOW: string = '\\x1b[33m';\n\nexport const BLUE: string = '\\x1b[34m';\n\nexport const MAGENTA: string = '\\x1b[35m';\n\nexport const CYAN: string = '\\x1b[36m';\n\nexport const WHITE: string = '\\x1b[37m';\n\nexport const RESET: string = '\\x1b[0m';\n\nexport const LOGO_COLORS: number[] = [208, 214, 220, 226, 228, 230, 255];\n\nexport const ENGINE_COLORS: Record<string, number> = { claude: 208, codex: 34, agy: 33, ollama: 255, aider: 141, openrouter: 197, qwen: 45, mistral: 75, opencode: 156, minimax: 124, zai: 124 };\n\nexport function fg256(code: number, text: string): string {\n return `\\x1b[38;5;${code}m${text}${RESET}`;\n}\n\nexport function bgFg(bg: number, fg: number, text: string): string {\n return `\\x1b[48;5;${bg};38;5;${fg}m${text}${RESET}`;\n}\n\nexport function bold(text: string): string {\n return `${BOLD}${text}${RESET}`;\n}\n\nexport function dim(text: string): string {\n return `${DIM}${text}${RESET}`;\n}\n\nexport function green(text: string): string {\n return `${GREEN}${text}${RESET}`;\n}\n\nexport function red(text: string): string {\n return `${RED}${text}${RESET}`;\n}\n\nexport function yellow(text: string): string {\n return `${YELLOW}${text}${RESET}`;\n}\n\nexport function cyan(text: string): string {\n return `${CYAN}${text}${RESET}`;\n}\n\nexport function blue(text: string): string {\n return `${BLUE}${text}${RESET}`;\n}\n\nexport function magenta(text: string): string {\n return `${MAGENTA}${text}${RESET}`;\n}\n\nexport function white(text: string): string {\n return `${WHITE}${text}${RESET}`;\n}\n\nexport function italic(text: string): string {\n return `${ITALIC}${text}${RESET}`;\n}\n\nfunction stripAnsi(str: string): string {\n return str.replace(/\\x1b\\[[0-9;]*m/g, '');\n}\n\nfunction visibleLength(str: string): number {\n return stripAnsi(str).length;\n}\n\nexport function gradientText(text: string, colors: number[]): string {\n let result = '';\n const step = Math.max(1, Math.floor(text.length / colors.length));\n for (let i = 0; i < text.length; i++) {\n const colorIdx = Math.min(Math.floor(i / step), colors.length - 1);\n result += fg256(colors[colorIdx], text[i]);\n }\n return result;\n}\n\nexport function header(text: string): void {\n const { header: h } = icons();\n console.log(`\\n${BOLD}${CYAN}${h} ${text}${RESET}`);\n}\n\nexport function success(text: string): void {\n const { success: s } = icons();\n console.log(`${GREEN}${s}${RESET} ${text}`);\n}\n\nexport function fail(text: string): void {\n const { fail: f } = icons();\n console.log(`${RED}${f}${RESET} ${text}`);\n}\n\nexport function warn(text: string): void {\n const { warning: w } = icons();\n console.log(`${YELLOW}${w}${RESET} ${text}`);\n}\n\nexport function info(text: string): void {\n console.log(`${DIM}${text}${RESET}`);\n}\n\nexport function scoreboard(title: string, engineIds: string[], metrics: Array<{label:string,values:string[]}>, winnerId?: string|null): void {\n const labelWidth = Math.max(14, ...metrics.map((m: {label:string}) => m.label.length));\n const colWidths = engineIds.map((id: string, col: number) =>\n Math.max(\n visibleLength(id) + 2,\n ...metrics.map((m: {values:string[]}) => visibleLength(m.values[col] ?? '') + 2),\n ),\n );\n console.log(`\\n ${BOLD}${WHITE}${title}${RESET}`);\n const headerCells = engineIds.map((id: string, i: number) => {\n const color = ENGINE_COLORS[id] ?? 124;\n const name = id === winnerId ? `${icons().winner} ${id}` : id;\n const styled = fg256(color, BOLD + name + RESET);\n const pad = colWidths[i] - visibleLength(name);\n return styled + ' '.repeat(Math.max(0, pad));\n });\n console.log(` ${''.padEnd(labelWidth)} ${headerCells.join(' ')}`);\n const sepWidth = labelWidth + colWidths.reduce((s: number, w: number) => s + w + 2, 0) + 2;\n console.log(` ${DIM}${'─'.repeat(sepWidth)}${RESET}`);\n for (const metric of metrics) {\n const label = `${BOLD}${metric.label.padEnd(labelWidth)}${RESET}`;\n const cells = metric.values.map((val: string, i: number) => {\n const pad = colWidths[i] - visibleLength(val);\n return val + ' '.repeat(Math.max(0, pad));\n });\n console.log(` ${label} ${cells.join(' ')}`);\n }\n console.log('');\n}\n\nexport function table(headers: string[], rows: string[][]): void {\n const widths = headers.map((h: string, i: number) =>\n Math.max(visibleLength(h), ...rows.map((r: string[]) => visibleLength(r[i] ?? ''))),\n );\n const headerLine = headers\n .map((h: string, i: number) => h.padEnd(widths[i]))\n .join(' ');\n const separator = widths.map((w: number) => '─'.repeat(w)).join('──');\n console.log(` ${bold(headerLine)}`);\n console.log(` ${dim(separator)}`);\n for (const row of rows) {\n const line = row.map((cell: string, i: number) => {\n const pad = widths[i] - visibleLength(cell);\n return cell + ' '.repeat(Math.max(0, pad));\n }).join(' ');\n console.log(` ${line}`);\n }\n}\n\nexport function shortToolPath(filePath: string): string {\n const home = process.env.HOME; const stripped = String(filePath ?? '').replace(`${process.cwd()}/`, ''); return home ? stripped.replace(home, '~') : stripped;\n}\n\nexport function isCesarTelemetryLine(message: string): boolean {\n const text = String(message ?? '').trim();\n return text.startsWith('Cesar route:') || text.startsWith('What happened:');\n}\n\nexport function formatConfidenceToolLabel(parsed: any, rawInput: string): string {\n const rawValue = parsed?.value ?? parsed?.confidence ?? parsed?.score;\n let value = Number(rawValue);\n if (!Number.isFinite(value)) {\n const text = String(rawInput ?? '');\n const match = text.match(/\"value\"\\s*:\\s*(\\d{1,3}(?:\\.\\d+)?)/) || text.match(/(\\d{1,3})\\s*%/);\n if (match) {\n value = Number(match[1]);\n }\n }\n if (Number.isFinite(value)) {\n const pct = (value <= 1 && value > 0) ? Math.round(value * 100) : Math.round(value);\n if (pct >= 0 && pct <= 100) {\n const reasoning = String(parsed?.reasoning ?? parsed?.reason ?? parsed?.thought ?? '').replace(/\\s+/g, ' ').trim();\n const shortReasoning = (reasoning.length > 180) ? `${reasoning.slice(0, 177)}…` : reasoning;\n return shortReasoning ? `${pct}% confidence · ${shortReasoning}` : `${pct}% confidence`;\n }\n }\n return 'confidence';\n}\n","// @generated by kern v3.5.8 — DO NOT EDIT. Source: src/kern/blocks/markdown.kern\n\n// ── Module: MarkdownParsing ──\n\n// @kern-source: markdown:2\nexport interface ContentSegment {\n type: 'prose'|'code'|'table';\n text: string|undefined;\n language: string|undefined;\n code: string|undefined;\n index: number|undefined;\n headers: string[]|undefined;\n rows: string[][]|undefined;\n alignments: ('left'|'center'|'right')[]|undefined;\n}\n\n// @kern-source: markdown:12\nexport const FENCE_OPEN: RegExp = /^```(\\w*)\\s*$/;\n\n// @kern-source: markdown:14\nexport const FENCE_CLOSE: RegExp = /^```\\s*$/;\n\n// @kern-source: markdown:16\nfunction isTableSeparator(line: string): boolean {\n return /^\\|[\\s:_-]+(\\|[\\s:_-]+)*\\|?\\s*$/.test(line.trim());\n}\n\n// @kern-source: markdown:18\nfunction isTableRow(line: string): boolean {\n const t = line.trim();\n return t.startsWith('|') && t.includes('|', 1);\n}\n\n// @kern-source: markdown:23\nfunction parseTableAlignment(sepLine: string): ('left'|'center'|'right')[] {\n const cells = sepLine.trim().replace(/^\\||\\|$/g, '').split('|');\n return cells.map((c: string) => {\n const t = c.trim();\n if (t.startsWith(':') && t.endsWith(':')) return 'center' as const;\n if (t.endsWith(':')) return 'right' as const;\n return 'left' as const;\n });\n}\n\n// @kern-source: markdown:34\nfunction parseTableCells(line: string): string[] {\n return line.trim().replace(/^\\||\\|$/g, '').split('|').map((c: string) => c.trim());\n}\n\n// @kern-source: markdown:36\nfunction emitProseWithTables(proseLines: string[], segments: ContentSegment[]): void {\n let i = 0;\n let buffered: string[] = [];\n\n function flushProse(): void {\n const text = buffered.join('\\n');\n if (text.trim()) {\n segments.push({ type: 'prose', text, language: undefined, code: undefined, index: undefined, headers: undefined, rows: undefined, alignments: undefined });\n }\n buffered = [];\n }\n\n while (i < proseLines.length) {\n // Check for table: current line is a table row AND next line is a separator\n if (isTableRow(proseLines[i]) && i + 1 < proseLines.length && isTableSeparator(proseLines[i + 1])) {\n flushProse();\n const headers = parseTableCells(proseLines[i]);\n const alignments = parseTableAlignment(proseLines[i + 1]);\n const rows: string[][] = [];\n i += 2; // skip header + separator\n while (i < proseLines.length && isTableRow(proseLines[i]) && !isTableSeparator(proseLines[i])) {\n rows.push(parseTableCells(proseLines[i]));\n i++;\n }\n segments.push({ type: 'table', text: undefined, language: undefined, code: undefined, index: undefined, headers, rows, alignments });\n continue;\n }\n\n buffered.push(proseLines[i]);\n i++;\n }\n flushProse();\n}\n\n// @kern-source: markdown:71\nexport const _mdCache: Map<string, ContentSegment[]> = new Map();\n\n// @kern-source: markdown:73\nexport const _MD_CACHE_MAX: number = 500;\n\n// @kern-source: markdown:75\nexport function parseMarkdownBlocks(text: string): ContentSegment[] {\n // LRU cache — avoid re-parsing identical content during streaming\n // Use djb2 hash for large strings to avoid collisions\n let key: string;\n if (text.length < 500) {\n key = text;\n } else {\n let hash = 5381;\n for (let i = 0; i < text.length; i++) {\n hash = ((hash << 5) + hash + text.charCodeAt(i)) | 0;\n }\n key = `h:${hash}:${text.length}`;\n }\n const cached = _mdCache.get(key);\n if (cached) return cached;\n\n const lines = text.split('\\n');\n const segments: ContentSegment[] = [];\n\n let inCode = false;\n let codeLang = '';\n let codeLines: string[] = [];\n let proseLines: string[] = [];\n let codeIndex = 0;\n\n for (const line of lines) {\n const trimmed = line.trimStart();\n\n if (!inCode) {\n const openMatch = trimmed.match(FENCE_OPEN);\n if (openMatch) {\n emitProseWithTables(proseLines, segments);\n proseLines = [];\n inCode = true;\n codeLang = openMatch[1] ?? '';\n codeLines = [];\n continue;\n }\n proseLines.push(line);\n } else {\n if (FENCE_CLOSE.test(trimmed)) {\n if (codeLines.length > 0) {\n codeIndex++;\n segments.push({ type: 'code', language: codeLang, code: codeLines.join('\\n'), text: undefined, index: codeIndex, headers: undefined, rows: undefined, alignments: undefined });\n }\n inCode = false;\n codeLang = '';\n codeLines = [];\n continue;\n }\n codeLines.push(line);\n }\n }\n\n if (inCode && codeLines.length > 0) {\n codeIndex++;\n segments.push({ type: 'code', language: codeLang, code: codeLines.join('\\n'), text: undefined, index: codeIndex, headers: undefined, rows: undefined, alignments: undefined });\n } else if (proseLines.length > 0) {\n emitProseWithTables(proseLines, segments);\n }\n\n // Store in cache, evict oldest if full\n if (_mdCache.size >= _MD_CACHE_MAX) {\n const firstKey = _mdCache.keys().next().value;\n if (firstKey !== undefined) _mdCache.delete(firstKey);\n }\n _mdCache.set(key, segments);\n\n return segments;\n}\n\n// @kern-source: markdown:147\nexport function truncateCodeLine(line: string, maxWidth: number): string {\n if (line.length <= maxWidth) {\n return line;\n }\n const overflow = line.length - maxWidth + 1;\n return line.slice(0, maxWidth - 1) + `…+${overflow}`;\n}\n\n// @kern-source: markdown:154\nfunction extractCodexStructured(text: string): string|null {\n const summaryMatch = text.match(/summary:\\s*\"([\\s\\S]*?)\"\\s*(?:sections\\s*\\{|$)/);\n const contentMatches = [...text.matchAll(/content:\\s*\"([\\s\\S]*?)\"\\s*\\}/g)];\n if (!summaryMatch || contentMatches.length === 0) {\n return null;\n }\n const parts: string[] = [summaryMatch[1]];\n const sectionMatches = [...text.matchAll(/\\d+:\\s*\"([^\"]+)\"\\s*\\{\\s*content:\\s*\"([\\s\\S]*?)\"\\s*\\}/g)];\n for (const m of sectionMatches) {\n parts.push(`\\n## ${m[1]}\\n${m[2]}`);\n }\n return parts.join('\\n').replace(/\\\\n/g, '\\n').trim();\n}\n\n// @kern-source: markdown:166\nfunction parseStreamJsonLine(trimmed: string): {action:'use'|'skip'|'keep', content?:string} {\n try {\n const parsed = JSON.parse(trimmed);\n if (!parsed.type) return { action: 'keep' };\n\n // Extract actual text content from streaming events\n if (parsed.type === 'assistant' && parsed.message?.content) {\n const content = typeof parsed.message.content === 'string'\n ? parsed.message.content\n : Array.isArray(parsed.message.content)\n ? parsed.message.content.filter((b: any) => b.type === 'text').map((b: any) => b.text).join('\\n')\n : '';\n return content ? { action: 'use', content } : { action: 'skip' };\n }\n\n // OpenCode: text events with actual content in part.text\n if (parsed.type === 'text' && parsed.part?.text) {\n return { action: 'use', content: parsed.part.text };\n }\n\n // Result events — extract content if present, skip error metadata\n if (parsed.type === 'result') {\n if (parsed.subtype === 'error_max_turns' || parsed.is_error) return { action: 'skip' };\n if (parsed.result && typeof parsed.result === 'string') return { action: 'use', content: parsed.result };\n return { action: 'skip' };\n }\n\n // Skip ALL known streaming metadata types (Claude, OpenCode, Codex, Gemini)\n const skipTypes = [\n 'system', 'hook_started', 'hook_response', 'tool_use', 'tool_result',\n 'user', 'rate_limit_event', 'message_start', 'message_stop', 'message_delta',\n 'content_block_start', 'content_block_stop', 'content_block_delta',\n 'step_start', 'step_finish', 'step-start', 'step-finish',\n 'ping', 'error', 'init', 'session_start', 'session_end',\n ];\n if (skipTypes.includes(parsed.type)) return { action: 'skip' };\n if (parsed.type?.startsWith('hook_')) return { action: 'skip' };\n if (parsed.type?.startsWith('step_')) return { action: 'skip' };\n if (parsed.subtype === 'system') return { action: 'skip' };\n\n // Any JSON with sessionID, session_id, or uuid is streaming metadata — skip\n if (parsed.sessionID || parsed.session_id || parsed.uuid) return { action: 'skip' };\n\n } catch {\n // Not valid JSON — keep as text\n }\n return { action: 'keep' };\n}\n\n/**\n * Remove inline sentence repetition like 'Hello.Hello.' within a single line.\n */\n// @kern-source: markdown:216\nfunction deduplicateInline(line: string): string {\n // Check if the line is a repeated substring (e.g. \"abcabc\" → \"abc\")\n const len = line.length;\n if (len < 10) return line;\n for (let half = Math.floor(len / 2); half >= 5; half--) {\n const candidate = line.slice(0, half);\n // Check if the rest of the line starts with the same candidate\n if (line.slice(half).startsWith(candidate)) {\n return candidate + line.slice(half + candidate.length);\n }\n }\n return line;\n}\n\n/**\n * Remove consecutive duplicate paragraphs/sentences from buddy streaming output.\n */\n// @kern-source: markdown:232\nfunction deduplicateParagraphs(text: string): string {\n // First: deduplicate within each line (streaming chunk concatenation artifacts)\n const lines = text.split('\\n');\n const dedupedLines = lines.map((l: string) => deduplicateInline(l));\n const joined = dedupedLines.join('\\n');\n // Then: deduplicate consecutive paragraphs\n const paragraphs = joined.split(/\\n{2,}/);\n const seen = new Set<string>();\n const deduped: string[] = [];\n for (const para of paragraphs) {\n const normalized = para.trim().replace(/\\s+/g, ' ');\n if (!normalized) {\n continue;\n }\n if (seen.has(normalized)) {\n continue;\n }\n seen.add(normalized);\n deduped.push(para.trim());\n }\n return deduped.join('\\n\\n');\n}\n\n/**\n * Strip progressive thinking/status updates that duplicate as streaming chunks.\n */\n// @kern-source: markdown:253\nfunction stripBuddyThinkingNoise(text: string): string {\n const lines = text.split('\\n');\n const result: string[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n\n // Skip raw command output metadata from Codex\n if (trimmed.startsWith('Command:') && trimmed.includes('/bin/')) continue;\n if (trimmed.startsWith('Chunk ID:')) continue;\n if (trimmed.startsWith('Wall time:')) continue;\n if (trimmed.startsWith('Process exited with code')) continue;\n if (trimmed.startsWith('Original token count:')) continue;\n if (trimmed === 'Output:') continue;\n\n // Skip lines that are exact substrings of the next line (progressive thinking)\n if (i + 1 < lines.length) {\n const next = lines[i + 1].trim();\n if (trimmed.length > 20 && next.startsWith(trimmed)) continue;\n }\n\n result.push(line);\n }\n\n return result.join('\\n');\n}\n\n// @kern-source: markdown:283\nfunction shortenFilePaths(text: string): string {\n // Only shorten paths in prose — skip fenced code blocks\n const fenceRe = /^```[\\s\\S]*?^```/gm;\n const fences: Array<{ start: number; end: number }> = [];\n let fm: RegExpExecArray | null;\n while ((fm = fenceRe.exec(text)) !== null) {\n fences.push({ start: fm.index, end: fm.index + fm[0].length });\n }\n function insideFence(pos: number): boolean {\n return fences.some(f => pos >= f.start && pos < f.end);\n }\n\n const cwd = process.cwd();\n const home = process.env.HOME ?? '';\n\n const exts = 'tsx|jsx|ts|js|json|kern|md|py|rs|go|yaml|yml|toml|sh|css|html|svelte|vue|rb|java|cpp|c|h';\n const pathRe = new RegExp('(?<!`)(?:~/|/)[A-Za-z0-9._\\\\-/]+\\\\.(?:' + exts + ')(?::[0-9]+(?::[0-9]+)?|#L[0-9]+)?(?!`)', 'g');\n\n return text.replace(pathRe, (match, offset: number) => {\n // Never rewrite paths inside fenced code blocks\n if (insideFence(offset)) return match;\n // Skip if too short or doesn't look like a real path\n if (match.length < 10) return match;\n if (!match.includes('/')) return match;\n\n let shortened = match;\n\n // Expand ~/ to home\n if (shortened.startsWith('~/') && home) {\n shortened = home + shortened.slice(1);\n }\n\n // Strip cwd prefix → relative path\n if (shortened.startsWith(cwd + '/')) {\n shortened = shortened.slice(cwd.length + 1);\n }\n // Strip home prefix → ~/...\n else if (home && shortened.startsWith(home + '/')) {\n shortened = '~/' + shortened.slice(home.length + 1);\n }\n\n // Collapse to just filename:line for inline references\n // packages/cli/src/generated/handlers-cesar-brain.ts:91 → handlers-cesar-brain.ts:91\n const parts = shortened.split('/');\n if (parts.length > 2) {\n shortened = parts[parts.length - 1];\n }\n\n // Wrap in backticks for inline-code (purple) styling\n return '`' + shortened + '`';\n });\n}\n\n/**\n * Gently insert paragraph breaks in very dense text walls — only when truly needed.\n */\n// @kern-source: markdown:337\nfunction addParagraphBreaks(text: string): string {\n const paragraphs = text.split(/\\n{2,}/);\n const result: string[] = [];\n\n for (const para of paragraphs) {\n const lines = para.split('\\n');\n // Skip if already has markdown structure (headers, real lists) or is short\n const isStructured = lines.some(l => /^(#{1,3}\\s|[-*]\\s+\\w|\\d+\\.\\s+\\w|>\\s)/.test(l.trimStart()));\n const totalLen = lines.reduce((sum, l) => sum + l.length, 0);\n if (isStructured || totalLen < 250) {\n result.push(para);\n continue;\n }\n\n // Split dense blocks at sentence boundaries\n const joined = lines.join(' ');\n const sentences = joined.split(/(?<=\\.\\s)(?=[A-Z])/);\n if (sentences.length <= 2) {\n result.push(para);\n continue;\n }\n\n // Group into chunks of 3 sentences\n const chunks: string[] = [];\n let current = '';\n let count = 0;\n for (const sentence of sentences) {\n current += sentence;\n count++;\n if (count >= 3 || current.length > 250) {\n chunks.push(current.trim());\n current = '';\n count = 0;\n }\n }\n if (current.trim()) chunks.push(current.trim());\n result.push(chunks.join('\\n\\n'));\n }\n\n return result.join('\\n\\n');\n}\n\n// @kern-source: markdown:381\nexport const _cleanCache: Map<string, string> = new Map();\n\n// @kern-source: markdown:383\nexport function cleanEngineOutput(raw: string): string {\n // Key by raw content — different streams can share lengths, so length alone collides.\n const cached = _cleanCache.get(raw);\n if (cached !== undefined) {\n return cached;\n }\n const lines = raw.split('\\n');\n const cleaned: string[] = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (cleaned.length === 0 && !trimmed) {\n continue;\n }\n if (trimmed.startsWith('{') && trimmed.includes('\"type\"')) {\n const result = parseStreamJsonLine(trimmed);\n if (result.action === 'skip') {\n continue;\n }\n if (result.action === 'use') {\n cleaned.push(result.content!);\n continue;\n }\n }\n cleaned.push(line);\n }\n let result = cleaned.join('\\n').trim();\n const codexResult = extractCodexStructured(result);\n if (codexResult) {\n result = codexResult;\n }\n // Strip XML tool tags — engines embed <tool>, <tool_result>, <invoke> in text\n result = result.replace(/<tool\\s+name=\"[^\"]*\">[\\s\\S]*?<\\/tool>/g, '');\n result = result.replace(/<tool\\s+name=\"[^\"]*\">[\\s\\S]*?<\\/invoke>(\\s*<\\/[a-zA-Z_:]+>)*/g, '');\n result = result.replace(/<tool_result[\\s\\S]*?<\\/tool_result>/g, '');\n result = result.replace(/<\\/minimax:tool_call>/g, '');\n result = result.replace(/<parameter\\s+name=\"[^\"]*\">[^<]*<\\/parameter>/g, '');\n result = result.replace(/<tool_calls>[\\s\\S]*?<\\/tool_calls>/gi, '');\n result = result.replace(/<(Read|Write|Edit|Bash|Grep|Glob|LS|ListPlans|Retrieve)\\b[\\s\\S]*?<\\/\\1>/g, '');\n result = result.replace(/<\\/?(file_path|path|pattern|command|query|content|old_string|new_string|start_line|end_line|id)>\\s*/g, '');\n // Strip reasoning tags from models that use <think>...</think> (MiniMax, DeepSeek, Qwen, etc.)\n result = result.replace(/<think>[\\s\\S]*?<\\/think>\\s*/gi, '');\n // R7: Strip narration stems — companion engines narrate their research process\n result = result.replace(/^(I'm checking|I'm looking|I'm reading|I'm searching|I'm inspecting|Let me check|Let me look|Let me read|Let me search|Let me inspect|I've confirmed|I've verified|I've checked|I'll now|I will now|Now I'm|Now let me|First,? I'll|First,? let me|Next,? I'll|Next,? let me)\\b[^.\\n]*[.\\n]\\s*/gim, '');\n // Clean buddy streaming artifacts\n result = stripBuddyThinkingNoise(result);\n result = deduplicateParagraphs(result);\n // Break dense walls of text into paragraphs at sentence boundaries\n result = addParagraphBreaks(result);\n // Shorten absolute file paths → relative, backtick-wrapped for purple styling\n result = shortenFilePaths(result);\n // Cache and evict old entries\n if (_cleanCache.size > 200) {\n _cleanCache.clear();\n }\n _cleanCache.set(raw, result);\n return result;\n}\n"],"mappings":";;;;;;AAoCO,IAAM,cAAwB,EAAE,MAAM,UAAU,MAAM,UAAU,OAAO,UAAU,MAAM,UAAU,QAAQ,UAAU,MAAM,UAAU,MAAM,UAAU,UAAU,UAAU,YAAY,UAAU,UAAU,UAAU,OAAO,UAAU,OAAO,UAAU,QAAQ,UAAU,QAAQ,UAAU,SAAS,UAAU,MAAM,UAAU,SAAS,UAAU,QAAQ,UAAU,MAAM,UAAU,OAAO,UAAU,QAAQ,UAAU,MAAM,UAAU,SAAS,UAAU,MAAM,UAAU,OAAO,UAAU,OAAO,UAAU,SAAS,SAAS;AAGzf,IAAM,gBAA0B,EAAE,MAAM,aAAgB,MAAM,gBAAgB,OAAO,aAAgB,MAAM,UAAU,QAAQ,aAAgB,MAAM,aAAgB,MAAM,aAAgB,UAAU,aAAgB,YAAY,aAAgB,UAAU,UAAU,OAAO,aAAgB,OAAO,UAAU,QAAQ,UAAU,QAAQ,UAAU,SAAS,UAAU,MAAM,UAAU,SAAS,UAAU,QAAQ,UAAU,MAAM,UAAU,OAAO,UAAU,QAAQ,UAAU,MAAM,UAAU,SAAS,UAAU,MAAM,UAAU,OAAO,UAAU,OAAO,UAAU,SAAS,SAAS;AAMjjB,SAAS,QAAiB;AAC/B,QAAM,QAAQ,WAAW,EAAE,aAAa;AACxC,SAAQ,UAAU,YAAa,gBAAgB;AACjD;;;AC1CO,IAAM,OAAe;AAErB,IAAM,MAAc;AAIpB,IAAM,QAAgB;AAEtB,IAAM,MAAc;AAEpB,IAAM,SAAiB;AAMvB,IAAM,OAAe;AAIrB,IAAM,QAAgB;AAItB,IAAM,gBAAwC,EAAE,QAAQ,KAAK,OAAO,IAAI,KAAK,IAAI,QAAQ,KAAK,OAAO,KAAK,YAAY,KAAK,MAAM,IAAI,SAAS,IAAI,UAAU,KAAK,SAAS,KAAK,KAAK,IAAI;AAUxL,SAAS,KAAK,MAAsB;AACzC,SAAO,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK;AAC/B;AAEO,SAAS,IAAI,MAAsB;AACxC,SAAO,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK;AAC9B;AAEO,SAAS,MAAM,MAAsB;AAC1C,SAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK;AAChC;AAEO,SAAS,IAAI,MAAsB;AACxC,SAAO,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK;AAC9B;AAEO,SAAS,OAAO,MAAsB;AAC3C,SAAO,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK;AACjC;AAEO,SAAS,KAAK,MAAsB;AACzC,SAAO,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK;AAC/B;AAkBA,SAAS,UAAU,KAAqB;AACtC,SAAO,IAAI,QAAQ,mBAAmB,EAAE;AAC1C;AAEA,SAAS,cAAc,KAAqB;AAC1C,SAAO,UAAU,GAAG,EAAE;AACxB;AAYO,SAAS,OAAO,MAAoB;AACzC,QAAM,EAAE,QAAQ,EAAE,IAAI,MAAM;AAC5B,UAAQ,IAAI;AAAA,EAAK,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE;AACpD;AAEO,SAAS,QAAQ,MAAoB;AAC1C,QAAM,EAAE,SAAS,EAAE,IAAI,MAAM;AAC7B,UAAQ,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE;AAC5C;AAEO,SAAS,KAAK,MAAoB;AACvC,QAAM,EAAE,MAAM,EAAE,IAAI,MAAM;AAC1B,UAAQ,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE;AAC1C;AAEO,SAAS,KAAK,MAAoB;AACvC,QAAM,EAAE,SAAS,EAAE,IAAI,MAAM;AAC7B,UAAQ,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE;AAC7C;AAEO,SAAS,KAAK,MAAoB;AACvC,UAAQ,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,EAAE;AACrC;AAgCO,SAAS,MAAM,SAAmB,MAAwB;AAC/D,QAAM,SAAS,QAAQ;AAAA,IAAI,CAAC,GAAW,MACrC,KAAK,IAAI,cAAc,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,MAAgB,cAAc,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,EACpF;AACA,QAAM,aAAa,QAChB,IAAI,CAAC,GAAW,MAAc,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,EACjD,KAAK,IAAI;AACZ,QAAM,YAAY,OAAO,IAAI,CAAC,MAAc,SAAI,OAAO,CAAC,CAAC,EAAE,KAAK,cAAI;AACpE,UAAQ,IAAI,KAAK,KAAK,UAAU,CAAC,EAAE;AACnC,UAAQ,IAAI,KAAK,IAAI,SAAS,CAAC,EAAE;AACjC,aAAW,OAAO,MAAM;AACtB,UAAM,OAAO,IAAI,IAAI,CAAC,MAAc,MAAc;AAChD,YAAM,MAAM,OAAO,CAAC,IAAI,cAAc,IAAI;AAC1C,aAAO,OAAO,IAAI,OAAO,KAAK,IAAI,GAAG,GAAG,CAAC;AAAA,IAC3C,CAAC,EAAE,KAAK,IAAI;AACZ,YAAQ,IAAI,KAAK,IAAI,EAAE;AAAA,EACzB;AACF;AAEO,SAAS,cAAc,UAA0B;AACtD,QAAM,OAAO,QAAQ,IAAI;AAAM,QAAM,WAAW,OAAO,YAAY,EAAE,EAAE,QAAQ,GAAG,QAAQ,IAAI,CAAC,KAAK,EAAE;AAAG,SAAO,OAAO,SAAS,QAAQ,MAAM,GAAG,IAAI;AACvJ;AAEO,SAAS,qBAAqB,SAA0B;AAC7D,QAAM,OAAO,OAAO,WAAW,EAAE,EAAE,KAAK;AACxC,SAAO,KAAK,WAAW,cAAc,KAAK,KAAK,WAAW,gBAAgB;AAC5E;AAEO,SAAS,0BAA0B,QAAa,UAA0B;AAC/E,QAAM,WAAW,QAAQ,SAAS,QAAQ,cAAc,QAAQ;AAChE,MAAI,QAAQ,OAAO,QAAQ;AAC3B,MAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAC3B,UAAM,OAAO,OAAO,YAAY,EAAE;AAClC,UAAM,QAAQ,KAAK,MAAM,mCAAmC,KAAK,KAAK,MAAM,eAAe;AAC3F,QAAI,OAAO;AACT,cAAQ,OAAO,MAAM,CAAC,CAAC;AAAA,IACzB;AAAA,EACF;AACA,MAAI,OAAO,SAAS,KAAK,GAAG;AAC1B,UAAM,MAAO,SAAS,KAAK,QAAQ,IAAK,KAAK,MAAM,QAAQ,GAAG,IAAI,KAAK,MAAM,KAAK;AAClF,QAAI,OAAO,KAAK,OAAO,KAAK;AAC1B,YAAM,YAAY,OAAO,QAAQ,aAAa,QAAQ,UAAU,QAAQ,WAAW,EAAE,EAAE,QAAQ,QAAQ,GAAG,EAAE,KAAK;AACjH,YAAM,iBAAkB,UAAU,SAAS,MAAO,GAAG,UAAU,MAAM,GAAG,GAAG,CAAC,WAAM;AAClF,aAAO,iBAAiB,GAAG,GAAG,qBAAkB,cAAc,KAAK,GAAG,GAAG;AAAA,IAC3E;AAAA,EACF;AACA,SAAO;AACT;;;ACtLO,IAAM,aAAqB;AAG3B,IAAM,cAAsB;AAGnC,SAAS,iBAAiB,MAAuB;AAC/C,SAAO,kCAAkC,KAAK,KAAK,KAAK,CAAC;AAC3D;AAGA,SAAS,WAAW,MAAuB;AACzC,QAAM,IAAI,KAAK,KAAK;AACpB,SAAO,EAAE,WAAW,GAAG,KAAK,EAAE,SAAS,KAAK,CAAC;AAC/C;AAGA,SAAS,oBAAoB,SAA8C;AACzE,QAAM,QAAQ,QAAQ,KAAK,EAAE,QAAQ,YAAY,EAAE,EAAE,MAAM,GAAG;AAC9D,SAAO,MAAM,IAAI,CAAC,MAAc;AAC9B,UAAM,IAAI,EAAE,KAAK;AACjB,QAAI,EAAE,WAAW,GAAG,KAAK,EAAE,SAAS,GAAG,EAAG,QAAO;AACjD,QAAI,EAAE,SAAS,GAAG,EAAG,QAAO;AAC5B,WAAO;AAAA,EACT,CAAC;AACH;AAGA,SAAS,gBAAgB,MAAwB;AAC/C,SAAO,KAAK,KAAK,EAAE,QAAQ,YAAY,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC;AACnF;AAGA,SAAS,oBAAoB,YAAsB,UAAkC;AACnF,MAAI,IAAI;AACR,MAAI,WAAqB,CAAC;AAE1B,WAAS,aAAmB;AAC1B,UAAM,OAAO,SAAS,KAAK,IAAI;AAC/B,QAAI,KAAK,KAAK,GAAG;AACf,eAAS,KAAK,EAAE,MAAM,SAAS,MAAM,UAAU,QAAW,MAAM,QAAW,OAAO,QAAW,SAAS,QAAW,MAAM,QAAW,YAAY,OAAU,CAAC;AAAA,IAC3J;AACA,eAAW,CAAC;AAAA,EACd;AAEA,SAAO,IAAI,WAAW,QAAQ;AAE5B,QAAI,WAAW,WAAW,CAAC,CAAC,KAAK,IAAI,IAAI,WAAW,UAAU,iBAAiB,WAAW,IAAI,CAAC,CAAC,GAAG;AACjG,iBAAW;AACX,YAAM,UAAU,gBAAgB,WAAW,CAAC,CAAC;AAC7C,YAAM,aAAa,oBAAoB,WAAW,IAAI,CAAC,CAAC;AACxD,YAAM,OAAmB,CAAC;AAC1B,WAAK;AACL,aAAO,IAAI,WAAW,UAAU,WAAW,WAAW,CAAC,CAAC,KAAK,CAAC,iBAAiB,WAAW,CAAC,CAAC,GAAG;AAC7F,aAAK,KAAK,gBAAgB,WAAW,CAAC,CAAC,CAAC;AACxC;AAAA,MACF;AACA,eAAS,KAAK,EAAE,MAAM,SAAS,MAAM,QAAW,UAAU,QAAW,MAAM,QAAW,OAAO,QAAW,SAAS,MAAM,WAAW,CAAC;AACnI;AAAA,IACF;AAEA,aAAS,KAAK,WAAW,CAAC,CAAC;AAC3B;AAAA,EACF;AACA,aAAW;AACb;AAGO,IAAM,WAA0C,oBAAI,IAAI;AAGxD,IAAM,gBAAwB;AAG9B,SAAS,oBAAoB,MAAgC;AAGlE,MAAI;AACJ,MAAI,KAAK,SAAS,KAAK;AACrB,UAAM;AAAA,EACR,OAAO;AACL,QAAI,OAAO;AACX,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,cAAS,QAAQ,KAAK,OAAO,KAAK,WAAW,CAAC,IAAK;AAAA,IACrD;AACA,UAAM,KAAK,IAAI,IAAI,KAAK,MAAM;AAAA,EAChC;AACA,QAAM,SAAS,SAAS,IAAI,GAAG;AAC/B,MAAI,OAAQ,QAAO;AAEnB,QAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,QAAM,WAA6B,CAAC;AAEpC,MAAI,SAAS;AACb,MAAI,WAAW;AACf,MAAI,YAAsB,CAAC;AAC3B,MAAI,aAAuB,CAAC;AAC5B,MAAI,YAAY;AAEhB,aAAW,QAAQ,OAAO;AACxB,UAAM,UAAU,KAAK,UAAU;AAE/B,QAAI,CAAC,QAAQ;AACX,YAAM,YAAY,QAAQ,MAAM,UAAU;AAC1C,UAAI,WAAW;AACb,4BAAoB,YAAY,QAAQ;AACxC,qBAAa,CAAC;AACd,iBAAS;AACT,mBAAW,UAAU,CAAC,KAAK;AAC3B,oBAAY,CAAC;AACb;AAAA,MACF;AACA,iBAAW,KAAK,IAAI;AAAA,IACtB,OAAO;AACL,UAAI,YAAY,KAAK,OAAO,GAAG;AAC7B,YAAI,UAAU,SAAS,GAAG;AACxB;AACA,mBAAS,KAAK,EAAE,MAAM,QAAQ,UAAU,UAAU,MAAM,UAAU,KAAK,IAAI,GAAG,MAAM,QAAW,OAAO,WAAW,SAAS,QAAW,MAAM,QAAW,YAAY,OAAU,CAAC;AAAA,QAC/K;AACA,iBAAS;AACT,mBAAW;AACX,oBAAY,CAAC;AACb;AAAA,MACF;AACA,gBAAU,KAAK,IAAI;AAAA,IACrB;AAAA,EACF;AAEA,MAAI,UAAU,UAAU,SAAS,GAAG;AAClC;AACA,aAAS,KAAK,EAAE,MAAM,QAAQ,UAAU,UAAU,MAAM,UAAU,KAAK,IAAI,GAAG,MAAM,QAAW,OAAO,WAAW,SAAS,QAAW,MAAM,QAAW,YAAY,OAAU,CAAC;AAAA,EAC/K,WAAW,WAAW,SAAS,GAAG;AAChC,wBAAoB,YAAY,QAAQ;AAAA,EAC1C;AAGA,MAAI,SAAS,QAAQ,eAAe;AAClC,UAAM,WAAW,SAAS,KAAK,EAAE,KAAK,EAAE;AACxC,QAAI,aAAa,OAAW,UAAS,OAAO,QAAQ;AAAA,EACtD;AACA,WAAS,IAAI,KAAK,QAAQ;AAE1B,SAAO;AACT;AAGO,SAAS,iBAAiB,MAAc,UAA0B;AACvE,MAAI,KAAK,UAAU,UAAU;AAC3B,WAAO;AAAA,EACT;AACA,QAAM,WAAW,KAAK,SAAS,WAAW;AAC1C,SAAO,KAAK,MAAM,GAAG,WAAW,CAAC,IAAI,UAAK,QAAQ;AACpD;AAGA,SAAS,uBAAuB,MAA2B;AACzD,QAAM,eAAe,KAAK,MAAM,+CAA+C;AAC/E,QAAM,iBAAiB,CAAC,GAAG,KAAK,SAAS,+BAA+B,CAAC;AACzE,MAAI,CAAC,gBAAgB,eAAe,WAAW,GAAG;AAChD,WAAO;AAAA,EACT;AACA,QAAM,QAAkB,CAAC,aAAa,CAAC,CAAC;AACxC,QAAM,iBAAiB,CAAC,GAAG,KAAK,SAAS,uDAAuD,CAAC;AACjG,aAAW,KAAK,gBAAgB;AAC9B,UAAM,KAAK;AAAA,KAAQ,EAAE,CAAC,CAAC;AAAA,EAAK,EAAE,CAAC,CAAC,EAAE;AAAA,EACpC;AACA,SAAO,MAAM,KAAK,IAAI,EAAE,QAAQ,QAAQ,IAAI,EAAE,KAAK;AACrD;AAGA,SAAS,oBAAoB,SAAgE;AAC3F,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,OAAO;AACjC,QAAI,CAAC,OAAO,KAAM,QAAO,EAAE,QAAQ,OAAO;AAG1C,QAAI,OAAO,SAAS,eAAe,OAAO,SAAS,SAAS;AAC1D,YAAM,UAAU,OAAO,OAAO,QAAQ,YAAY,WAC9C,OAAO,QAAQ,UACf,MAAM,QAAQ,OAAO,QAAQ,OAAO,IAClC,OAAO,QAAQ,QAAQ,OAAO,CAAC,MAAW,EAAE,SAAS,MAAM,EAAE,IAAI,CAAC,MAAW,EAAE,IAAI,EAAE,KAAK,IAAI,IAC9F;AACN,aAAO,UAAU,EAAE,QAAQ,OAAO,QAAQ,IAAI,EAAE,QAAQ,OAAO;AAAA,IACjE;AAGA,QAAI,OAAO,SAAS,UAAU,OAAO,MAAM,MAAM;AAC/C,aAAO,EAAE,QAAQ,OAAO,SAAS,OAAO,KAAK,KAAK;AAAA,IACpD;AAGA,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,OAAO,YAAY,qBAAqB,OAAO,SAAU,QAAO,EAAE,QAAQ,OAAO;AACrF,UAAI,OAAO,UAAU,OAAO,OAAO,WAAW,SAAU,QAAO,EAAE,QAAQ,OAAO,SAAS,OAAO,OAAO;AACvG,aAAO,EAAE,QAAQ,OAAO;AAAA,IAC1B;AAGA,UAAM,YAAY;AAAA,MAChB;AAAA,MAAU;AAAA,MAAgB;AAAA,MAAiB;AAAA,MAAY;AAAA,MACvD;AAAA,MAAQ;AAAA,MAAoB;AAAA,MAAiB;AAAA,MAAgB;AAAA,MAC7D;AAAA,MAAuB;AAAA,MAAsB;AAAA,MAC7C;AAAA,MAAc;AAAA,MAAe;AAAA,MAAc;AAAA,MAC3C;AAAA,MAAQ;AAAA,MAAS;AAAA,MAAQ;AAAA,MAAiB;AAAA,IAC5C;AACA,QAAI,UAAU,SAAS,OAAO,IAAI,EAAG,QAAO,EAAE,QAAQ,OAAO;AAC7D,QAAI,OAAO,MAAM,WAAW,OAAO,EAAG,QAAO,EAAE,QAAQ,OAAO;AAC9D,QAAI,OAAO,MAAM,WAAW,OAAO,EAAG,QAAO,EAAE,QAAQ,OAAO;AAC9D,QAAI,OAAO,YAAY,SAAU,QAAO,EAAE,QAAQ,OAAO;AAGzD,QAAI,OAAO,aAAa,OAAO,cAAc,OAAO,KAAM,QAAO,EAAE,QAAQ,OAAO;AAAA,EAEpF,QAAQ;AAAA,EAER;AACA,SAAO,EAAE,QAAQ,OAAO;AAC1B;AAMA,SAAS,kBAAkB,MAAsB;AAE/C,QAAM,MAAM,KAAK;AACjB,MAAI,MAAM,GAAI,QAAO;AACrB,WAAS,OAAO,KAAK,MAAM,MAAM,CAAC,GAAG,QAAQ,GAAG,QAAQ;AACtD,UAAM,YAAY,KAAK,MAAM,GAAG,IAAI;AAEpC,QAAI,KAAK,MAAM,IAAI,EAAE,WAAW,SAAS,GAAG;AAC1C,aAAO,YAAY,KAAK,MAAM,OAAO,UAAU,MAAM;AAAA,IACvD;AAAA,EACF;AACA,SAAO;AACT;AAMA,SAAS,sBAAsB,MAAsB;AAEnD,QAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,QAAM,eAAe,MAAM,IAAI,CAAC,MAAc,kBAAkB,CAAC,CAAC;AAClE,QAAM,SAAS,aAAa,KAAK,IAAI;AAErC,QAAM,aAAa,OAAO,MAAM,QAAQ;AACxC,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,UAAoB,CAAC;AAC3B,aAAW,QAAQ,YAAY;AAC7B,UAAM,aAAa,KAAK,KAAK,EAAE,QAAQ,QAAQ,GAAG;AAClD,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AACA,QAAI,KAAK,IAAI,UAAU,GAAG;AACxB;AAAA,IACF;AACA,SAAK,IAAI,UAAU;AACnB,YAAQ,KAAK,KAAK,KAAK,CAAC;AAAA,EAC1B;AACA,SAAO,QAAQ,KAAK,MAAM;AAC5B;AAMA,SAAS,wBAAwB,MAAsB;AACrD,QAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,QAAM,SAAmB,CAAC;AAE1B,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,UAAU,KAAK,KAAK;AAG1B,QAAI,QAAQ,WAAW,UAAU,KAAK,QAAQ,SAAS,OAAO,EAAG;AACjE,QAAI,QAAQ,WAAW,WAAW,EAAG;AACrC,QAAI,QAAQ,WAAW,YAAY,EAAG;AACtC,QAAI,QAAQ,WAAW,0BAA0B,EAAG;AACpD,QAAI,QAAQ,WAAW,uBAAuB,EAAG;AACjD,QAAI,YAAY,UAAW;AAG3B,QAAI,IAAI,IAAI,MAAM,QAAQ;AACxB,YAAM,OAAO,MAAM,IAAI,CAAC,EAAE,KAAK;AAC/B,UAAI,QAAQ,SAAS,MAAM,KAAK,WAAW,OAAO,EAAG;AAAA,IACvD;AAEA,WAAO,KAAK,IAAI;AAAA,EAClB;AAEA,SAAO,OAAO,KAAK,IAAI;AACzB;AAGA,SAAS,iBAAiB,MAAsB;AAE9C,QAAM,UAAU;AAChB,QAAM,SAAgD,CAAC;AACvD,MAAI;AACJ,UAAQ,KAAK,QAAQ,KAAK,IAAI,OAAO,MAAM;AACzC,WAAO,KAAK,EAAE,OAAO,GAAG,OAAO,KAAK,GAAG,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC;AAAA,EAC/D;AACA,WAAS,YAAY,KAAsB;AACzC,WAAO,OAAO,KAAK,OAAK,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG;AAAA,EACvD;AAEA,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,OAAO,QAAQ,IAAI,QAAQ;AAEjC,QAAM,OAAO;AACb,QAAM,SAAS,IAAI,OAAO,2CAA2C,OAAO,2CAA2C,GAAG;AAE1H,SAAO,KAAK,QAAQ,QAAQ,CAAC,OAAO,WAAmB;AAErD,QAAI,YAAY,MAAM,EAAG,QAAO;AAEhC,QAAI,MAAM,SAAS,GAAI,QAAO;AAC9B,QAAI,CAAC,MAAM,SAAS,GAAG,EAAG,QAAO;AAEjC,QAAI,YAAY;AAGhB,QAAI,UAAU,WAAW,IAAI,KAAK,MAAM;AACtC,kBAAY,OAAO,UAAU,MAAM,CAAC;AAAA,IACtC;AAGA,QAAI,UAAU,WAAW,MAAM,GAAG,GAAG;AACnC,kBAAY,UAAU,MAAM,IAAI,SAAS,CAAC;AAAA,IAC5C,WAES,QAAQ,UAAU,WAAW,OAAO,GAAG,GAAG;AACjD,kBAAY,OAAO,UAAU,MAAM,KAAK,SAAS,CAAC;AAAA,IACpD;AAIA,UAAM,QAAQ,UAAU,MAAM,GAAG;AACjC,QAAI,MAAM,SAAS,GAAG;AACpB,kBAAY,MAAM,MAAM,SAAS,CAAC;AAAA,IACpC;AAGA,WAAO,MAAM,YAAY;AAAA,EAC3B,CAAC;AACH;AAMA,SAAS,mBAAmB,MAAsB;AAChD,QAAM,aAAa,KAAK,MAAM,QAAQ;AACtC,QAAM,SAAmB,CAAC;AAE1B,aAAW,QAAQ,YAAY;AAC7B,UAAM,QAAQ,KAAK,MAAM,IAAI;AAE7B,UAAM,eAAe,MAAM,KAAK,OAAK,uCAAuC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC/F,UAAM,WAAW,MAAM,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC;AAC3D,QAAI,gBAAgB,WAAW,KAAK;AAClC,aAAO,KAAK,IAAI;AAChB;AAAA,IACF;AAGA,UAAM,SAAS,MAAM,KAAK,GAAG;AAC7B,UAAM,YAAY,OAAO,MAAM,oBAAoB;AACnD,QAAI,UAAU,UAAU,GAAG;AACzB,aAAO,KAAK,IAAI;AAChB;AAAA,IACF;AAGA,UAAM,SAAmB,CAAC;AAC1B,QAAI,UAAU;AACd,QAAI,QAAQ;AACZ,eAAW,YAAY,WAAW;AAChC,iBAAW;AACX;AACA,UAAI,SAAS,KAAK,QAAQ,SAAS,KAAK;AACtC,eAAO,KAAK,QAAQ,KAAK,CAAC;AAC1B,kBAAU;AACV,gBAAQ;AAAA,MACV;AAAA,IACF;AACA,QAAI,QAAQ,KAAK,EAAG,QAAO,KAAK,QAAQ,KAAK,CAAC;AAC9C,WAAO,KAAK,OAAO,KAAK,MAAM,CAAC;AAAA,EACjC;AAEA,SAAO,OAAO,KAAK,MAAM;AAC3B;AAGO,IAAM,cAAmC,oBAAI,IAAI;AAGjD,SAAS,kBAAkB,KAAqB;AAErD,QAAM,SAAS,YAAY,IAAI,GAAG;AAClC,MAAI,WAAW,QAAW;AACxB,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,IAAI,MAAM,IAAI;AAC5B,QAAM,UAAoB,CAAC;AAC3B,aAAW,QAAQ,OAAO;AACxB,UAAM,UAAU,KAAK,KAAK;AAC1B,QAAI,QAAQ,WAAW,KAAK,CAAC,SAAS;AACpC;AAAA,IACF;AACA,QAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,QAAQ,GAAG;AACzD,YAAMA,UAAS,oBAAoB,OAAO;AAC1C,UAAIA,QAAO,WAAW,QAAQ;AAC5B;AAAA,MACF;AACA,UAAIA,QAAO,WAAW,OAAO;AAC3B,gBAAQ,KAAKA,QAAO,OAAQ;AAC5B;AAAA,MACF;AAAA,IACF;AACA,YAAQ,KAAK,IAAI;AAAA,EACnB;AACA,MAAI,SAAS,QAAQ,KAAK,IAAI,EAAE,KAAK;AACrC,QAAM,cAAc,uBAAuB,MAAM;AACjD,MAAI,aAAa;AACf,aAAS;AAAA,EACX;AAEA,WAAS,OAAO,QAAQ,0CAA0C,EAAE;AACpE,WAAS,OAAO,QAAQ,iEAAiE,EAAE;AAC3F,WAAS,OAAO,QAAQ,wCAAwC,EAAE;AAClE,WAAS,OAAO,QAAQ,0BAA0B,EAAE;AACpD,WAAS,OAAO,QAAQ,iDAAiD,EAAE;AAC3E,WAAS,OAAO,QAAQ,wCAAwC,EAAE;AAClE,WAAS,OAAO,QAAQ,4EAA4E,EAAE;AACtG,WAAS,OAAO,QAAQ,wGAAwG,EAAE;AAElI,WAAS,OAAO,QAAQ,iCAAiC,EAAE;AAE3D,WAAS,OAAO,QAAQ,qSAAqS,EAAE;AAE/T,WAAS,wBAAwB,MAAM;AACvC,WAAS,sBAAsB,MAAM;AAErC,WAAS,mBAAmB,MAAM;AAElC,WAAS,iBAAiB,MAAM;AAEhC,MAAI,YAAY,OAAO,KAAK;AAC1B,gBAAY,MAAM;AAAA,EACpB;AACA,cAAY,IAAI,KAAK,MAAM;AAC3B,SAAO;AACT;","names":["result"]}