agent-gauntlet 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/index.js +1190 -703
- package/dist/index.js.map +22 -20
- package/dist/scripts/status.js +1 -1
- package/dist/scripts/status.js.map +1 -1
- package/package.json +1 -1
- package/skills/gauntlet-check/SKILL.md +47 -12
- package/skills/gauntlet-commit/SKILL.md +73 -0
- package/skills/gauntlet-help/SKILL.md +9 -0
- package/skills/gauntlet-issue/SKILL.md +106 -0
- package/skills/gauntlet-merge/SKILL.md +24 -0
- package/skills/gauntlet-merge/merge-state.sh +68 -0
- package/skills/gauntlet-run/SKILL.md +60 -58
- package/skills/gauntlet-run/extract-prompt.md +14 -12
package/dist/index.js.map
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/scripts/status.ts", "../src/index.ts", "../src/commands/gate-command.ts", "../src/config/global.ts", "../src/config/loader.ts", "../src/built-in-reviews/index.ts", "../src/config/schema.ts", "../src/core/change-detector.ts", "../src/core/entry-point.ts", "../src/core/job.ts", "../src/gates/check.ts", "../src/constants.ts", "../src/gates/resolve-check-command.ts", "../src/cli-adapters/shared.ts", "../src/cli-adapters/claude.ts", "../src/commands/stop-hook.ts", "../src/hooks/adapters/claude-stop-hook.ts", "../src/hooks/adapters/cursor-stop-hook.ts", "../src/hooks/stop-hook-handler.ts", "../src/config/stop-hook-config.ts", "../src/output/app-logger.ts", "../src/output/sinks/console-sink.ts", "../src/hooks/stop-hook-state.ts", "../src/utils/execution-state.ts", "../src/utils/debug-log.ts", "../src/types/gauntlet-status.ts", "../src/cli-adapters/thinking-budget.ts", "../src/cli-adapters/codex.ts", "../src/cli-adapters/cursor.ts", "../src/cli-adapters/model-resolution.ts", "../src/cli-adapters/gemini.ts", "../src/cli-adapters/github-copilot.ts", "../src/cli-adapters/index.ts", "../src/gates/review-agg.ts", "../src/gates/review-diff.ts", "../src/utils/diff-parser.ts", "../src/gates/review-types.ts", "../src/gates/review-prompt.ts", "../src/gates/review-eval.ts", "../src/gates/review-helpers.ts", "../src/gates/review.ts", "../src/utils/sanitizer.ts", "../src/core/runner.ts", "../src/output/console.ts", "../src/utils/log-parser.ts", "../src/utils/log-parser-find-helpers.ts", "../src/utils/log-parser-helpers.ts", "../src/output/console-log.ts", "../src/output/logger.ts", "../src/utils/git.ts", "../src/commands/shared.ts", "../src/commands/check.ts", "../src/commands/ci/init.ts", "../src/config/ci-loader.ts", "../src/config/ci-schema.ts", "../src/commands/ci/list-jobs.ts", "../src/commands/ci/index.ts", "../src/commands/clean.ts", "../src/commands/detect.ts", "../src/commands/health.ts", "../src/config/validator.ts", "../src/config/validate-reviews.ts", "../src/commands/help.ts", "../src/commands/init.ts", "../src/commands/init-checksums.ts", "../src/commands/init-hooks.ts", "../src/commands/init-prompts.ts", "../src/commands/list.ts", "../src/commands/review.ts", "../src/
|
|
3
|
+
"sources": ["../src/scripts/status.ts", "../src/index.ts", "../src/commands/gate-command.ts", "../src/config/global.ts", "../src/config/loader.ts", "../src/built-in-reviews/index.ts", "../src/config/schema.ts", "../src/core/change-detector.ts", "../src/core/entry-point.ts", "../src/core/job.ts", "../src/gates/check.ts", "../src/constants.ts", "../src/gates/resolve-check-command.ts", "../src/cli-adapters/shared.ts", "../src/cli-adapters/claude.ts", "../src/commands/stop-hook.ts", "../src/hooks/adapters/claude-stop-hook.ts", "../src/hooks/adapters/cursor-stop-hook.ts", "../src/hooks/stop-hook-handler.ts", "../src/config/stop-hook-config.ts", "../src/output/app-logger.ts", "../src/output/sinks/console-sink.ts", "../src/hooks/stop-hook-state.ts", "../src/utils/execution-state.ts", "../src/utils/debug-log.ts", "../src/types/gauntlet-status.ts", "../src/cli-adapters/thinking-budget.ts", "../src/cli-adapters/codex.ts", "../src/cli-adapters/cursor.ts", "../src/cli-adapters/model-resolution.ts", "../src/cli-adapters/gemini.ts", "../src/cli-adapters/github-copilot.ts", "../src/cli-adapters/index.ts", "../src/gates/review-agg.ts", "../src/gates/review-diff.ts", "../src/core/diff-stats.ts", "../src/utils/diff-parser.ts", "../src/gates/review-types.ts", "../src/gates/review-prompt.ts", "../src/gates/review-eval.ts", "../src/gates/review-helpers.ts", "../src/gates/review.ts", "../src/utils/sanitizer.ts", "../src/core/runner.ts", "../src/output/console.ts", "../src/utils/log-parser.ts", "../src/utils/log-parser-find-helpers.ts", "../src/utils/log-parser-helpers.ts", "../src/output/console-log.ts", "../src/output/logger.ts", "../src/utils/git.ts", "../src/commands/shared.ts", "../src/commands/check.ts", "../src/commands/ci/init.ts", "../src/config/ci-loader.ts", "../src/config/ci-schema.ts", "../src/commands/ci/list-jobs.ts", "../src/commands/ci/index.ts", "../src/commands/clean.ts", "../src/commands/detect.ts", "../src/commands/health.ts", "../src/config/validator.ts", "../src/config/validate-reviews.ts", "../src/commands/help.ts", "../src/commands/init.ts", "../src/commands/init-checksums.ts", "../src/commands/init-hooks.ts", "../src/commands/init-prompts.ts", "../src/commands/list.ts", "../src/commands/review.ts", "../src/scripts/review-audit.ts", "../src/commands/review-audit.ts", "../src/core/run-executor-lock.ts", "../src/core/run-executor-helpers.ts", "../src/core/run-executor.ts", "../src/commands/run.ts", "../src/commands/skip.ts", "../src/commands/start-hook.ts", "../src/commands/status.ts", "../src/commands/validate.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"#!/usr/bin/env node\n/**\n * Gauntlet Status Script\n *\n * Parses the configured log_dir (default: gauntlet_logs/) to produce a structured\n * summary of the most recent gauntlet session from the .debug.log, plus a file\n * inventory of all log/JSON files for further inspection.\n *\n * This script handles structured data only (debug log events). Detailed failure\n * analysis (reading individual check logs, review JSONs) is left to the caller\n * (the /gauntlet-status skill) since log formats vary by check type.\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n// --- Types ---\n\ninterface RunStart {\n timestamp: string;\n mode: string;\n baseRef?: string;\n filesChanged: number;\n linesAdded: number;\n linesRemoved: number;\n gates: number;\n}\n\ninterface GateResult {\n timestamp: string;\n gateId: string;\n cli?: string;\n status: string;\n duration: string;\n violations?: number;\n}\n\ninterface RunEnd {\n timestamp: string;\n status: string;\n fixed: number;\n skipped: number;\n failed: number;\n iterations: number;\n duration: string;\n}\n\ninterface StopHookEntry {\n timestamp: string;\n decision: string;\n reason: string;\n}\n\ninterface SessionRun {\n start: RunStart;\n gates: GateResult[];\n end?: RunEnd;\n stopHook?: StopHookEntry;\n}\n\n// --- Parsing helpers ---\n\nfunction parseKeyValue(text: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const match of text.matchAll(/(\\w+)=(\\S+)/g)) {\n const key = match[1];\n const value = match[2];\n if (key && value) result[key] = value;\n }\n return result;\n}\n\nfunction parseTimestamp(line: string): string {\n const m = line.match(/^\\[([^\\]]+)\\]/);\n return m?.[1] ?? '';\n}\n\nfunction parseEventType(line: string): string {\n const m = line.match(/^\\[[^\\]]+\\]\\s+(\\S+)/);\n return m?.[1] ?? '';\n}\n\nfunction parseEventBody(line: string): string {\n const m = line.match(/^\\[[^\\]]+\\]\\s+\\S+\\s*(.*)/);\n return m?.[1] ?? '';\n}\n\n// --- Debug log parsing ---\n\nfunction parseRunStart(ts: string, body: string): SessionRun {\n const kv = parseKeyValue(body);\n return {\n start: {\n timestamp: ts,\n mode: kv.mode ?? 'unknown',\n baseRef: kv.base_ref,\n filesChanged: Number(kv.files_changed ?? kv.changes ?? 0),\n linesAdded: Number(kv.lines_added ?? 0),\n linesRemoved: Number(kv.lines_removed ?? 0),\n gates: Number(kv.gates ?? 0),\n },\n gates: [],\n };\n}\n\nfunction parseGateResult(ts: string, body: string): GateResult {\n const gateIdMatch = body.match(/^(\\S+)/);\n const kv = parseKeyValue(body);\n return {\n timestamp: ts,\n gateId: gateIdMatch?.[1] ?? 'unknown',\n cli: kv.cli,\n status: kv.status ?? 'unknown',\n duration: kv.duration ?? '?',\n violations: kv.violations !== undefined ? Number(kv.violations) : undefined,\n };\n}\n\nfunction parseRunEnd(ts: string, body: string): RunEnd {\n const kv = parseKeyValue(body);\n return {\n timestamp: ts,\n status: kv.status ?? 'unknown',\n fixed: Number(kv.fixed ?? 0),\n skipped: Number(kv.skipped ?? 0),\n failed: Number(kv.failed ?? 0),\n iterations: Number(kv.iterations ?? 0),\n duration: kv.duration ?? '?',\n };\n}\n\nfunction parseStopHookEntry(ts: string, body: string): StopHookEntry {\n const kv = parseKeyValue(body);\n return {\n timestamp: ts,\n decision: kv.decision ?? 'unknown',\n reason: kv.reason ?? 'unknown',\n };\n}\n\nfunction isBeforeSession(\n ts: string,\n sessionStartTime: Date | undefined,\n): boolean {\n return sessionStartTime !== undefined && new Date(ts) < sessionStartTime;\n}\n\nfunction parseDebugLog(content: string, sessionStartTime?: Date): SessionRun[] {\n const lines = content.split('\\n').filter((l) => l.trim());\n const sessions: SessionRun[] = [];\n let current: SessionRun | null = null;\n\n for (const line of lines) {\n const event = parseEventType(line);\n const body = parseEventBody(line);\n const ts = parseTimestamp(line);\n\n switch (event) {\n case 'RUN_START':\n if (isBeforeSession(ts, sessionStartTime)) {\n current = null;\n } else {\n current = parseRunStart(ts, body);\n sessions.push(current);\n }\n break;\n case 'GATE_RESULT':\n if (current) current.gates.push(parseGateResult(ts, body));\n break;\n case 'RUN_END':\n if (current) current.end = parseRunEnd(ts, body);\n break;\n case 'STOP_HOOK':\n if (current) current.stopHook = parseStopHookEntry(ts, body);\n break;\n }\n }\n\n return sessions;\n}\n\n/**\n * Find the earliest mtime of non-hidden log files in the directory.\n * This marks the start of the current session.\n */\nfunction getSessionStartTime(logDir: string): Date | undefined {\n const entries = fs\n .readdirSync(logDir)\n .filter((f) => !f.startsWith('.') && f !== 'previous');\n let earliest: number | undefined;\n for (const entry of entries) {\n const mtime = fs.statSync(path.join(logDir, entry)).mtimeMs;\n if (earliest === undefined || mtime < earliest) {\n earliest = mtime;\n }\n }\n return earliest !== undefined ? new Date(earliest) : undefined;\n}\n\n// --- File inventory ---\n\nfunction formatFileInventory(logDir: string): string[] {\n const lines: string[] = [];\n const entries = fs\n .readdirSync(logDir)\n .filter((f) => !f.startsWith('.') && f !== 'previous');\n if (entries.length === 0) return lines;\n\n const checks: string[] = [];\n const reviews: string[] = [];\n const other: string[] = [];\n\n for (const entry of entries.sort()) {\n const fullPath = path.join(logDir, entry);\n const stat = fs.statSync(fullPath);\n const sizeKB = (stat.size / 1024).toFixed(1);\n const line = `- ${fullPath} (${sizeKB} KB)`;\n\n if (entry.startsWith('review_')) {\n reviews.push(line);\n } else if (entry.startsWith('check_')) {\n checks.push(line);\n } else {\n other.push(line);\n }\n }\n\n lines.push('### Log Files');\n lines.push('');\n if (checks.length > 0) {\n lines.push('**Check logs:**');\n lines.push(...checks);\n }\n if (reviews.length > 0) {\n lines.push('**Review logs/JSON:**');\n lines.push(...reviews);\n }\n if (other.length > 0) {\n lines.push('**Other:**');\n lines.push(...other);\n }\n lines.push('');\n\n return lines;\n}\n\n// --- Summary output ---\n\nfunction formatStatusLine(end: RunEnd): string {\n if (end.status === 'pass') return 'PASSED';\n if (end.status === 'fail') return 'FAILED';\n return end.status.toUpperCase();\n}\n\nfunction formatAllRuns(sessions: SessionRun[]): string[] {\n const lines: string[] = [];\n lines.push('### All Runs in Session');\n lines.push('');\n for (let i = 0; i < sessions.length; i++) {\n const s = sessions[i];\n if (!s) continue;\n const status = s.end ? s.end.status : 'in-progress';\n const duration = s.end ? s.end.duration : '?';\n lines.push(\n `${i + 1}. [${s.start.timestamp}] mode=${s.start.mode} status=${status} duration=${duration}`,\n );\n }\n lines.push('');\n return lines;\n}\n\nfunction formatSession(sessions: SessionRun[], logDir: string): string {\n if (sessions.length === 0) {\n return 'No gauntlet runs found in logs.';\n }\n\n const lastComplete = [...sessions].reverse().find((s) => s.end);\n const session = lastComplete ?? sessions[sessions.length - 1];\n if (!session) return 'No gauntlet runs found in logs.';\n\n const lines: string[] = [];\n\n // Header\n lines.push('## Gauntlet Session Summary');\n lines.push('');\n\n // Overall status\n if (session.end) {\n lines.push(`**Status:** ${formatStatusLine(session.end)}`);\n lines.push(`**Iterations:** ${session.end.iterations}`);\n lines.push(`**Duration:** ${session.end.duration}`);\n lines.push(\n `**Fixed:** ${session.end.fixed} | **Skipped:** ${session.end.skipped} | **Failed:** ${session.end.failed}`,\n );\n } else {\n lines.push('**Status:** In Progress (no RUN_END found)');\n }\n lines.push('');\n\n // Diff stats\n lines.push('### Diff Stats');\n lines.push(`- Mode: ${session.start.mode}`);\n if (session.start.baseRef) {\n lines.push(`- Base ref: ${session.start.baseRef}`);\n }\n lines.push(`- Files changed: ${session.start.filesChanged}`);\n lines.push(\n `- Lines: +${session.start.linesAdded} / -${session.start.linesRemoved}`,\n );\n lines.push(`- Gates: ${session.start.gates}`);\n lines.push('');\n\n // Gate results\n lines.push('### Gate Results');\n lines.push('');\n lines.push('| Gate | CLI | Status | Duration | Violations |');\n lines.push('|------|-----|--------|----------|------------|');\n for (const gate of session.gates) {\n const violations =\n gate.violations !== undefined ? String(gate.violations) : '-';\n const statusIcon = gate.status === 'pass' ? 'pass' : 'FAIL';\n lines.push(\n `| ${gate.gateId} | ${gate.cli ?? '-'} | ${statusIcon} | ${gate.duration} | ${violations} |`,\n );\n }\n lines.push('');\n\n // Stop hook\n if (session.stopHook) {\n lines.push('### Stop Hook');\n lines.push(`- Decision: ${session.stopHook.decision}`);\n lines.push(`- Reason: ${session.stopHook.reason}`);\n lines.push('');\n }\n\n // File inventory\n lines.push(...formatFileInventory(logDir));\n\n // All sessions summary (if multiple runs)\n if (sessions.length > 1) {\n lines.push(...formatAllRuns(sessions));\n }\n\n return lines.join('\\n');\n}\n\n// --- Main ---\n\n/**\n * Read the configured log_dir from .gauntlet/config.yml.\n * Falls back to \"gauntlet_logs\" if not found.\n */\nfunction getLogDir(cwd: string): string {\n const configPath = path.join(cwd, '.gauntlet', 'config.yml');\n try {\n const content = fs.readFileSync(configPath, 'utf-8');\n const match = content.match(/^log_dir:\\s*(.+)$/m);\n if (match?.[1]) return match[1].trim();\n } catch {\n // Config not found — use default\n }\n return 'gauntlet_logs';\n}\n\n/**\n * Resolve the log directory and debug log path.\n * Returns null if no logs are found (after printing a message).\n */\nfunction resolveLogPaths(\n activeDir: string,\n): { logDir: string; debugLogPath: string } | null {\n const previousDir = path.join(activeDir, 'previous');\n const debugLogPath = path.join(activeDir, '.debug.log');\n\n // Check active directory first for non-debug log files\n const activeHasLogs =\n fs.existsSync(activeDir) &&\n fs\n .readdirSync(activeDir)\n .some((f) => !f.startsWith('.') && f !== 'previous');\n\n if (activeHasLogs) {\n return { logDir: activeDir, debugLogPath };\n }\n\n if (!fs.existsSync(previousDir)) {\n console.log('No gauntlet_logs directory found.');\n return null;\n }\n\n // Fall back to previous directory — cleanLogs archives files directly here\n const logDir = resolvePreviousLogDir(previousDir);\n if (!logDir) return null;\n\n // Debug log stays in the main gauntlet_logs dir, not in previous/\n return { logDir, debugLogPath };\n}\n\nfunction resolvePreviousLogDir(previousDir: string): string | null {\n const prevEntries = fs.readdirSync(previousDir);\n const hasDirectFiles = prevEntries.some(\n (f) => f.endsWith('.log') || f.endsWith('.json'),\n );\n\n if (hasDirectFiles) return previousDir;\n\n // Legacy: check for timestamped subdirectories\n const prevDirs = prevEntries\n .map((d) => path.join(previousDir, d))\n .filter((d) => fs.statSync(d).isDirectory())\n .sort()\n .reverse();\n\n if (prevDirs.length === 0) {\n console.log('No gauntlet logs found.');\n return null;\n }\n\n return prevDirs[0] as string;\n}\n\nexport function main(): void {\n const cwd = process.cwd();\n const logDirName = getLogDir(cwd);\n const activeDir = path.join(cwd, logDirName);\n\n const paths = resolveLogPaths(activeDir);\n if (!paths) {\n process.exit(0);\n }\n\n // Parse debug log, filtering to current session based on log file timestamps\n let sessions: SessionRun[] = [];\n if (fs.existsSync(paths.debugLogPath)) {\n const debugContent = fs.readFileSync(paths.debugLogPath, 'utf-8');\n const sessionStart = getSessionStartTime(paths.logDir);\n sessions = parseDebugLog(debugContent, sessionStart);\n }\n\n // Format and output\n const output = formatSession(sessions, paths.logDir);\n console.log(output);\n}\n\n// Auto-execute when run directly (e.g., `bun src/scripts/status.ts`\n// or `node dist/scripts/status.js`). The filename check prevents\n// this from triggering when the module is bundled into dist/index.js.\nconst isDirectRun =\n (import.meta.url === `file://${process.argv[1]}` ||\n (typeof Bun !== 'undefined' && import.meta.url === `file://${Bun.main}`)) &&\n (process.argv[1]?.endsWith('status.ts') ||\n process.argv[1]?.endsWith('status.js'));\nif (isDirectRun) {\n main();\n}\n",
|
|
6
|
-
"#!/usr/bin/env node\nimport { Command } from 'commander';\nimport packageJson from '../package.json' with { type: 'json' };\nimport {\n registerCheckCommand,\n registerCICommand,\n registerCleanCommand,\n registerDetectCommand,\n registerHealthCommand,\n registerHelpCommand,\n registerInitCommand,\n registerListCommand,\n registerReviewCommand,\n registerRunCommand,\n registerSkipCommand,\n registerStartHookCommand,\n registerStatusCommand,\n registerStopHookCommand,\n registerValidateCommand,\n} from './commands/index.js';\n\nconst program = new Command();\n\nprogram\n .name('agent-gauntlet')\n .description('AI-assisted quality gates')\n .version(packageJson.version);\n\n// Register all commands\nregisterRunCommand(program);\nregisterCheckCommand(program);\nregisterCICommand(program);\nregisterCleanCommand(program);\nregisterReviewCommand(program);\nregisterDetectCommand(program);\nregisterListCommand(program);\nregisterHealthCommand(program);\nregisterInitCommand(program);\nregisterValidateCommand(program);\nregisterSkipCommand(program);\nregisterStartHookCommand(program);\nregisterStatusCommand(program);\nregisterStopHookCommand(program);\nregisterHelpCommand(program);\n\n// Default action: help\nif (process.argv.length < 3) {\n process.argv.push('help');\n}\n\nprogram.parse(process.argv);\n",
|
|
7
|
-
"import chalk from 'chalk';\nimport { loadGlobalConfig } from '../config/global.js';\nimport { loadConfig } from '../config/loader.js';\nimport { ChangeDetector } from '../core/change-detector.js';\nimport { EntryPointExpander } from '../core/entry-point.js';\nimport { JobGenerator } from '../core/job.js';\nimport { Runner } from '../core/runner.js';\nimport { ConsoleReporter } from '../output/console.js';\nimport {\n type ConsoleLogHandle,\n startConsoleLog,\n} from '../output/console-log.js';\nimport { Logger } from '../output/logger.js';\nimport {\n type DebugLogger,\n getDebugLogger,\n initDebugLogger,\n mergeDebugLogConfig,\n} from '../utils/debug-log.js';\nimport {\n readExecutionState,\n resolveFixBase,\n writeExecutionState,\n} from '../utils/execution-state.js';\nimport { resolveBaseBranch } from '../utils/git.js';\nimport {\n findPreviousFailures,\n type PassedSlot,\n type PreviousViolation,\n} from '../utils/log-parser.js';\nimport {\n acquireLock,\n cleanLogs,\n hasExistingLogs,\n performAutoClean,\n releaseLock,\n shouldAutoClean,\n} from './shared.js';\n\ntype GateCommandName = 'check' | 'review';\n\ninterface GateCommandOptions {\n baseBranch?: string;\n gate?: string;\n commit?: string;\n uncommitted?: boolean;\n}\n\ninterface ChangeOptions {\n commit?: string;\n uncommitted?: boolean;\n fixBase?: string;\n}\n\ninterface InitResult {\n config: Awaited<ReturnType<typeof loadConfig>>;\n debugLogger: DebugLogger | undefined;\n effectiveBaseBranch: string;\n}\n\n/** Load config, initialize debug logger, and log the command invocation. */\nasync function initializeDebugLogger(\n commandName: GateCommandName,\n options: GateCommandOptions,\n): Promise<InitResult> {\n const config = await loadConfig();\n\n const globalConfig = await loadGlobalConfig();\n const debugLogConfig = mergeDebugLogConfig(\n config.project.debug_log,\n globalConfig.debug_log,\n );\n initDebugLogger(config.project.log_dir, debugLogConfig);\n\n const debugLogger = getDebugLogger() ?? undefined;\n const args = [\n options.baseBranch ? `-b ${options.baseBranch}` : '',\n options.gate ? `-g ${options.gate}` : '',\n options.commit ? `-c ${options.commit}` : '',\n options.uncommitted ? '-u' : '',\n ].filter(Boolean);\n await debugLogger?.logCommand(commandName, args);\n\n const effectiveBaseBranch = resolveBaseBranch(options, config);\n\n return { config, debugLogger, effectiveBaseBranch };\n}\n\n/** Run auto-clean if context has changed. */\nasync function handleAutoClean(\n logDir: string,\n effectiveBaseBranch: string,\n debugLogger: DebugLogger | undefined,\n maxPreviousLogs?: number,\n): Promise<void> {\n const autoCleanResult = await shouldAutoClean(logDir, effectiveBaseBranch);\n if (autoCleanResult.clean) {\n console.log(chalk.dim(`Auto-cleaning logs (${autoCleanResult.reason})...`));\n await debugLogger?.logClean('auto', autoCleanResult.reason || 'unknown');\n await performAutoClean(logDir, autoCleanResult, maxPreviousLogs);\n }\n}\n\ninterface RerunResult {\n isRerun: boolean;\n failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined;\n passedSlotsMap: Map<string, Map<number, PassedSlot>> | undefined;\n changeOptions: ChangeOptions | undefined;\n}\n\n/** Detect rerun mode: check if logs exist after auto-clean. */\nfunction detectRerunMode(logsExist: boolean, commit?: string): boolean {\n return logsExist && !commit;\n}\n\n/** Load previous failures and build rerun state. */\nasync function processRerunMode(\n logDir: string,\n options: GateCommandOptions,\n): Promise<RerunResult> {\n console.log(\n chalk.dim('Existing logs detected — running in verification mode...'),\n );\n const { failures: previousFailures, passedSlots } =\n await findPreviousFailures(logDir, options.gate, true);\n\n const failuresMap = buildFailuresMap(previousFailures);\n logPreviousViolations(previousFailures);\n\n const changeOptions: ChangeOptions = { uncommitted: true };\n const executionState = await readExecutionState(logDir);\n if (executionState?.working_tree_ref) {\n changeOptions.fixBase = executionState.working_tree_ref;\n }\n\n return {\n isRerun: true,\n failuresMap,\n passedSlotsMap: passedSlots,\n changeOptions,\n };\n}\n\n/** Build failures map from previous failure results. */\nfunction buildFailuresMap(\n previousFailures: Awaited<\n ReturnType<typeof findPreviousFailures>\n >['failures'],\n): Map<string, Map<string, PreviousViolation[]>> {\n const failuresMap = new Map<string, Map<string, PreviousViolation[]>>();\n for (const gateFailure of previousFailures) {\n const adapterMap = new Map<string, PreviousViolation[]>();\n for (const af of gateFailure.adapterFailures) {\n const key = af.reviewIndex ? String(af.reviewIndex) : af.adapterName;\n adapterMap.set(key, af.violations);\n }\n failuresMap.set(gateFailure.jobId, adapterMap);\n }\n return failuresMap;\n}\n\n/** Log a summary of previous violations if any exist. */\nfunction logPreviousViolations(\n previousFailures: Awaited<\n ReturnType<typeof findPreviousFailures>\n >['failures'],\n): void {\n if (previousFailures.length === 0) {\n return;\n }\n const totalViolations = previousFailures.reduce(\n (sum, gf) =>\n sum + gf.adapterFailures.reduce((s, af) => s + af.violations.length, 0),\n 0,\n );\n console.log(\n chalk.yellow(\n `Found ${previousFailures.length} gate(s) with ${totalViolations} previous violation(s)`,\n ),\n );\n}\n\n/** Resolve fixBase for post-clean runs from execution state. */\nasync function resolveChangeOptions(\n logDir: string,\n effectiveBaseBranch: string,\n options: GateCommandOptions,\n rerunChangeOptions: ChangeOptions | undefined,\n logsExist: boolean,\n): Promise<ChangeOptions | undefined> {\n let changeOptions = rerunChangeOptions;\n\n if (!(changeOptions || logsExist)) {\n const executionState = await readExecutionState(logDir);\n if (executionState) {\n const resolved = await resolveFixBase(\n executionState,\n effectiveBaseBranch,\n );\n if (resolved.warning) {\n console.log(chalk.yellow(`Warning: ${resolved.warning}`));\n }\n if (resolved.fixBase) {\n changeOptions = { fixBase: resolved.fixBase };\n }\n }\n }\n\n // Allow explicit commit or uncommitted options to override fixBase\n if (options.commit || options.uncommitted) {\n changeOptions = {\n commit: options.commit,\n uncommitted: options.uncommitted,\n fixBase: changeOptions?.fixBase,\n };\n }\n\n return changeOptions;\n}\n\ninterface DetectionResult {\n changes: string[];\n jobs: Awaited<ReturnType<JobGenerator['generateJobs']>>;\n}\n\n/** Detect changes, expand entry points, and generate/filter jobs. */\nasync function detectChangesAndGenerateJobs(\n config: Awaited<ReturnType<typeof loadConfig>>,\n effectiveBaseBranch: string,\n changeOptions: ChangeOptions | undefined,\n options: GateCommandOptions,\n commandName: GateCommandName,\n): Promise<DetectionResult> {\n const changeDetector = new ChangeDetector(\n effectiveBaseBranch,\n changeOptions || {\n commit: options.commit,\n uncommitted: options.uncommitted,\n },\n );\n const expander = new EntryPointExpander();\n const jobGen = new JobGenerator(config);\n\n console.log(chalk.dim('Detecting changes...'));\n const changes = await changeDetector.getChangedFiles();\n\n if (changes.length === 0) {\n return { changes, jobs: [] };\n }\n\n console.log(chalk.dim(`Found ${changes.length} changed files.`));\n\n const entryPoints = await expander.expand(\n config.project.entry_points,\n changes,\n );\n let jobs = jobGen.generateJobs(entryPoints);\n\n // Filter to only the requested type\n jobs = jobs.filter((j) => j.type === commandName);\n\n if (options.gate) {\n jobs = jobs.filter((j) => j.name === options.gate);\n }\n\n return { changes, jobs };\n}\n\n/** Create runner, execute jobs, log results, and clean up. */\nasync function executeAndFinalize(\n config: Awaited<ReturnType<typeof loadConfig>>,\n logger: Logger,\n debugLogger: DebugLogger | undefined,\n isRerun: boolean,\n failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined,\n changeOptions: ChangeOptions | undefined,\n effectiveBaseBranch: string,\n passedSlotsMap: Map<string, Map<number, PassedSlot>> | undefined,\n changes: string[],\n jobs: Awaited<ReturnType<JobGenerator['generateJobs']>>,\n): Promise<boolean> {\n const runMode = isRerun ? 'verification' : 'full';\n await debugLogger?.logRunStart(runMode, changes.length, jobs.length);\n\n const reporter = new ConsoleReporter();\n const runner = new Runner(\n config,\n logger,\n reporter,\n failuresMap,\n changeOptions,\n effectiveBaseBranch,\n passedSlotsMap,\n debugLogger,\n isRerun,\n );\n\n const outcome = await runner.run(jobs);\n\n await debugLogger?.logRunEnd(\n outcome.allPassed ? 'pass' : 'fail',\n outcome.stats.fixed,\n outcome.stats.skipped,\n outcome.stats.failed,\n logger.getRunNumber(),\n );\n\n await writeExecutionState(config.project.log_dir);\n\n if (outcome.allPassed) {\n await debugLogger?.logClean('auto', 'all_passed');\n await cleanLogs(config.project.log_dir);\n }\n\n return outcome.allPassed;\n}\n\n/** Handle early exit when no changes or no applicable jobs are found. */\nasync function handleNoWork(\n logDir: string,\n restoreConsole: ConsoleLogHandle | undefined,\n): Promise<never> {\n await writeExecutionState(logDir);\n await releaseLock(logDir);\n restoreConsole?.restore();\n process.exit(0);\n}\n\n/** Check for early exit conditions (no changes or no jobs). */\nasync function checkEarlyExit(\n changes: string[],\n jobs: unknown[],\n commandName: GateCommandName,\n logDir: string,\n restoreConsole: ConsoleLogHandle | undefined,\n): Promise<void> {\n if (changes.length === 0) {\n console.log(chalk.green('No changes detected.'));\n await handleNoWork(logDir, restoreConsole);\n }\n if (jobs.length === 0) {\n console.log(\n chalk.yellow(`No applicable ${commandName}s for these changes.`),\n );\n await handleNoWork(logDir, restoreConsole);\n }\n}\n\ninterface LockContext {\n logger: Logger;\n restoreConsole: ConsoleLogHandle;\n}\n\n/** Acquire lock, initialize logger, and start console log capture. */\nasync function acquireLockAndInitLogger(logDir: string): Promise<LockContext> {\n await acquireLock(logDir);\n\n const logger = new Logger(logDir);\n await logger.init();\n const runNumber = logger.getRunNumber();\n\n const restoreConsole = await startConsoleLog(logDir, runNumber);\n return { logger, restoreConsole };\n}\n\n/** Handle error during gate command execution. */\nasync function handleGateError(\n error: unknown,\n config: Awaited<ReturnType<typeof loadConfig>> | undefined,\n lockAcquired: boolean,\n restoreConsole: ConsoleLogHandle | undefined,\n): Promise<never> {\n if (config && lockAcquired) {\n try {\n await writeExecutionState(config.project.log_dir);\n } catch {\n // Ignore errors writing state during error handling\n }\n try {\n await releaseLock(config.project.log_dir);\n } catch (releaseErr) {\n console.error(\n chalk.yellow('Warning: failed to release lock:'),\n (releaseErr as Error).message,\n );\n }\n }\n const err = error as { message?: string };\n console.error(chalk.red('Error:'), err.message);\n restoreConsole?.restore();\n process.exit(1);\n}\n\nconst NO_RERUN: RerunResult = {\n isRerun: false,\n failuresMap: undefined,\n passedSlotsMap: undefined,\n changeOptions: undefined,\n};\n\n/**\n * Shared gate command executor for both \"check\" and \"review\" commands.\n * Contains all logic that was previously duplicated between the two commands.\n */\nexport async function executeGateCommand(\n commandName: GateCommandName,\n options: GateCommandOptions,\n): Promise<void> {\n let config: Awaited<ReturnType<typeof loadConfig>> | undefined;\n let lockAcquired = false;\n let restoreConsole: ConsoleLogHandle | undefined;\n try {\n const initResult = await initializeDebugLogger(commandName, options);\n config = initResult.config;\n const { debugLogger, effectiveBaseBranch } = initResult;\n const logDir = config.project.log_dir;\n\n await handleAutoClean(\n logDir,\n effectiveBaseBranch,\n debugLogger,\n config.project.max_previous_logs,\n );\n\n // Detect rerun mode after auto-clean (clean may have removed logs)\n const logsExist = await hasExistingLogs(logDir);\n const isRerun = detectRerunMode(logsExist, options.commit);\n\n const lockCtx = await acquireLockAndInitLogger(logDir);\n lockAcquired = true;\n restoreConsole = lockCtx.restoreConsole;\n\n const rerunResult = isRerun\n ? await processRerunMode(logDir, options)\n : NO_RERUN;\n\n const changeOptions = await resolveChangeOptions(\n logDir,\n effectiveBaseBranch,\n options,\n rerunResult.changeOptions,\n logsExist,\n );\n\n const { changes, jobs } = await detectChangesAndGenerateJobs(\n config,\n effectiveBaseBranch,\n changeOptions,\n options,\n commandName,\n );\n\n await checkEarlyExit(changes, jobs, commandName, logDir, restoreConsole);\n\n console.log(chalk.dim(`Running ${jobs.length} ${commandName}(s)...`));\n\n const allPassed = await executeAndFinalize(\n config,\n lockCtx.logger,\n debugLogger,\n rerunResult.isRerun,\n rerunResult.failuresMap,\n changeOptions,\n effectiveBaseBranch,\n rerunResult.passedSlotsMap,\n changes,\n jobs,\n );\n\n await releaseLock(logDir);\n restoreConsole?.restore();\n process.exit(allPassed ? 0 : 1);\n } catch (error: unknown) {\n await handleGateError(error, config, lockAcquired, restoreConsole);\n }\n}\n",
|
|
6
|
+
"#!/usr/bin/env node\nimport { Command } from 'commander';\nimport packageJson from '../package.json' with { type: 'json' };\nimport {\n registerCheckCommand,\n registerCICommand,\n registerCleanCommand,\n registerDetectCommand,\n registerHealthCommand,\n registerHelpCommand,\n registerInitCommand,\n registerListCommand,\n registerReviewAuditCommand,\n registerReviewCommand,\n registerRunCommand,\n registerSkipCommand,\n registerStartHookCommand,\n registerStatusCommand,\n registerStopHookCommand,\n registerValidateCommand,\n} from './commands/index.js';\n\nconst program = new Command();\n\nprogram\n .name('agent-gauntlet')\n .description('AI-assisted quality gates')\n .version(packageJson.version);\n\n// Register all commands\nregisterRunCommand(program);\nregisterCheckCommand(program);\nregisterCICommand(program);\nregisterCleanCommand(program);\nregisterReviewAuditCommand(program);\nregisterReviewCommand(program);\nregisterDetectCommand(program);\nregisterListCommand(program);\nregisterHealthCommand(program);\nregisterInitCommand(program);\nregisterValidateCommand(program);\nregisterSkipCommand(program);\nregisterStartHookCommand(program);\nregisterStatusCommand(program);\nregisterStopHookCommand(program);\nregisterHelpCommand(program);\n\n// Default action: help\nif (process.argv.length < 3) {\n process.argv.push('help');\n}\n\nprogram.parse(process.argv);\n",
|
|
7
|
+
"import chalk from 'chalk';\nimport { loadGlobalConfig } from '../config/global.js';\nimport { loadConfig } from '../config/loader.js';\nimport { ChangeDetector } from '../core/change-detector.js';\nimport { EntryPointExpander } from '../core/entry-point.js';\nimport { JobGenerator } from '../core/job.js';\nimport { Runner } from '../core/runner.js';\nimport { ConsoleReporter } from '../output/console.js';\nimport {\n type ConsoleLogHandle,\n startConsoleLog,\n} from '../output/console-log.js';\nimport { Logger } from '../output/logger.js';\nimport {\n type DebugLogger,\n getDebugLogger,\n initDebugLogger,\n mergeDebugLogConfig,\n} from '../utils/debug-log.js';\nimport {\n readExecutionState,\n resolveFixBase,\n writeExecutionState,\n} from '../utils/execution-state.js';\nimport { resolveBaseBranch } from '../utils/git.js';\nimport {\n findPreviousFailures,\n type PassedSlot,\n type PreviousViolation,\n} from '../utils/log-parser.js';\nimport {\n acquireLock,\n cleanLogs,\n hasExistingLogs,\n performAutoClean,\n releaseLock,\n shouldAutoClean,\n} from './shared.js';\n\ntype GateCommandName = 'check' | 'review';\n\ninterface GateCommandOptions {\n baseBranch?: string;\n gate?: string;\n commit?: string;\n uncommitted?: boolean;\n enableReviews?: Set<string>;\n}\n\ninterface ChangeOptions {\n commit?: string;\n uncommitted?: boolean;\n fixBase?: string;\n}\n\ninterface InitResult {\n config: Awaited<ReturnType<typeof loadConfig>>;\n debugLogger: DebugLogger | undefined;\n effectiveBaseBranch: string;\n}\n\n/** Load config, initialize debug logger, and log the command invocation. */\nasync function initializeDebugLogger(\n commandName: GateCommandName,\n options: GateCommandOptions,\n): Promise<InitResult> {\n const config = await loadConfig();\n\n const globalConfig = await loadGlobalConfig();\n const debugLogConfig = mergeDebugLogConfig(\n config.project.debug_log,\n globalConfig.debug_log,\n );\n initDebugLogger(config.project.log_dir, debugLogConfig);\n\n const debugLogger = getDebugLogger() ?? undefined;\n const args = [\n options.baseBranch ? `-b ${options.baseBranch}` : '',\n options.gate ? `-g ${options.gate}` : '',\n options.commit ? `-c ${options.commit}` : '',\n options.uncommitted ? '-u' : '',\n ].filter(Boolean);\n await debugLogger?.logCommand(commandName, args);\n\n const effectiveBaseBranch = resolveBaseBranch(options, config);\n\n return { config, debugLogger, effectiveBaseBranch };\n}\n\n/** Run auto-clean if context has changed. */\nasync function handleAutoClean(\n logDir: string,\n effectiveBaseBranch: string,\n debugLogger: DebugLogger | undefined,\n maxPreviousLogs?: number,\n): Promise<void> {\n const autoCleanResult = await shouldAutoClean(logDir, effectiveBaseBranch);\n if (autoCleanResult.clean) {\n console.log(chalk.dim(`Auto-cleaning logs (${autoCleanResult.reason})...`));\n await debugLogger?.logClean('auto', autoCleanResult.reason || 'unknown');\n await performAutoClean(logDir, autoCleanResult, maxPreviousLogs);\n }\n}\n\ninterface RerunResult {\n isRerun: boolean;\n failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined;\n passedSlotsMap: Map<string, Map<number, PassedSlot>> | undefined;\n changeOptions: ChangeOptions | undefined;\n}\n\n/** Detect rerun mode: check if logs exist after auto-clean. */\nfunction detectRerunMode(logsExist: boolean, commit?: string): boolean {\n return logsExist && !commit;\n}\n\n/** Load previous failures and build rerun state. */\nasync function processRerunMode(\n logDir: string,\n options: GateCommandOptions,\n): Promise<RerunResult> {\n console.log(\n chalk.dim('Existing logs detected — running in verification mode...'),\n );\n const { failures: previousFailures, passedSlots } =\n await findPreviousFailures(logDir, options.gate, true);\n\n const failuresMap = buildFailuresMap(previousFailures);\n logPreviousViolations(previousFailures);\n\n const changeOptions: ChangeOptions = { uncommitted: true };\n const executionState = await readExecutionState(logDir);\n if (executionState?.working_tree_ref) {\n changeOptions.fixBase = executionState.working_tree_ref;\n }\n\n return {\n isRerun: true,\n failuresMap,\n passedSlotsMap: passedSlots,\n changeOptions,\n };\n}\n\n/** Build failures map from previous failure results. */\nfunction buildFailuresMap(\n previousFailures: Awaited<\n ReturnType<typeof findPreviousFailures>\n >['failures'],\n): Map<string, Map<string, PreviousViolation[]>> {\n const failuresMap = new Map<string, Map<string, PreviousViolation[]>>();\n for (const gateFailure of previousFailures) {\n const adapterMap = new Map<string, PreviousViolation[]>();\n for (const af of gateFailure.adapterFailures) {\n const key = af.reviewIndex ? String(af.reviewIndex) : af.adapterName;\n adapterMap.set(key, af.violations);\n }\n failuresMap.set(gateFailure.jobId, adapterMap);\n }\n return failuresMap;\n}\n\n/** Log a summary of previous violations if any exist. */\nfunction logPreviousViolations(\n previousFailures: Awaited<\n ReturnType<typeof findPreviousFailures>\n >['failures'],\n): void {\n if (previousFailures.length === 0) {\n return;\n }\n const totalViolations = previousFailures.reduce(\n (sum, gf) =>\n sum + gf.adapterFailures.reduce((s, af) => s + af.violations.length, 0),\n 0,\n );\n console.log(\n chalk.yellow(\n `Found ${previousFailures.length} gate(s) with ${totalViolations} previous violation(s)`,\n ),\n );\n}\n\n/** Resolve fixBase for post-clean runs from execution state. */\nasync function resolveChangeOptions(\n logDir: string,\n effectiveBaseBranch: string,\n options: GateCommandOptions,\n rerunChangeOptions: ChangeOptions | undefined,\n logsExist: boolean,\n): Promise<ChangeOptions | undefined> {\n let changeOptions = rerunChangeOptions;\n\n if (!(changeOptions || logsExist)) {\n const executionState = await readExecutionState(logDir);\n if (executionState) {\n const resolved = await resolveFixBase(\n executionState,\n effectiveBaseBranch,\n );\n if (resolved.warning) {\n console.log(chalk.yellow(`Warning: ${resolved.warning}`));\n }\n if (resolved.fixBase) {\n changeOptions = { fixBase: resolved.fixBase };\n }\n }\n }\n\n // Allow explicit commit or uncommitted options to override fixBase\n if (options.commit || options.uncommitted) {\n changeOptions = {\n commit: options.commit,\n uncommitted: options.uncommitted,\n fixBase: changeOptions?.fixBase,\n };\n }\n\n return changeOptions;\n}\n\ninterface DetectionResult {\n changes: string[];\n jobs: Awaited<ReturnType<JobGenerator['generateJobs']>>;\n}\n\n/** Detect changes, expand entry points, and generate/filter jobs. */\nasync function detectChangesAndGenerateJobs(\n config: Awaited<ReturnType<typeof loadConfig>>,\n effectiveBaseBranch: string,\n changeOptions: ChangeOptions | undefined,\n options: GateCommandOptions,\n commandName: GateCommandName,\n): Promise<DetectionResult> {\n const changeDetector = new ChangeDetector(\n effectiveBaseBranch,\n changeOptions || {\n commit: options.commit,\n uncommitted: options.uncommitted,\n },\n );\n const expander = new EntryPointExpander();\n const jobGen = new JobGenerator(config, options.enableReviews);\n\n console.log(chalk.dim('Detecting changes...'));\n const changes = await changeDetector.getChangedFiles();\n\n if (changes.length === 0) {\n return { changes, jobs: [] };\n }\n\n console.log(chalk.dim(`Found ${changes.length} changed files.`));\n\n const entryPoints = await expander.expand(\n config.project.entry_points,\n changes,\n );\n let jobs = jobGen.generateJobs(entryPoints);\n\n // Filter to only the requested type\n jobs = jobs.filter((j) => j.type === commandName);\n\n if (options.gate) {\n jobs = jobs.filter((j) => j.name === options.gate);\n }\n\n return { changes, jobs };\n}\n\n/** Create runner, execute jobs, log results, and clean up. */\nasync function executeAndFinalize(\n config: Awaited<ReturnType<typeof loadConfig>>,\n logger: Logger,\n debugLogger: DebugLogger | undefined,\n isRerun: boolean,\n failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined,\n changeOptions: ChangeOptions | undefined,\n effectiveBaseBranch: string,\n passedSlotsMap: Map<string, Map<number, PassedSlot>> | undefined,\n changes: string[],\n jobs: Awaited<ReturnType<JobGenerator['generateJobs']>>,\n): Promise<boolean> {\n const runMode = isRerun ? 'verification' : 'full';\n await debugLogger?.logRunStart(runMode, changes.length, jobs.length);\n\n const reporter = new ConsoleReporter();\n const runner = new Runner(\n config,\n logger,\n reporter,\n failuresMap,\n changeOptions,\n effectiveBaseBranch,\n passedSlotsMap,\n debugLogger,\n isRerun,\n );\n\n const outcome = await runner.run(jobs);\n\n await debugLogger?.logRunEnd(\n outcome.allPassed ? 'pass' : 'fail',\n outcome.stats.fixed,\n outcome.stats.skipped,\n outcome.stats.failed,\n logger.getRunNumber(),\n );\n\n await writeExecutionState(config.project.log_dir);\n\n if (outcome.allPassed) {\n await debugLogger?.logClean('auto', 'all_passed');\n await cleanLogs(config.project.log_dir);\n }\n\n return outcome.allPassed;\n}\n\n/** Handle early exit when no changes or no applicable jobs are found. */\nasync function handleNoWork(\n logDir: string,\n restoreConsole: ConsoleLogHandle | undefined,\n): Promise<never> {\n await writeExecutionState(logDir);\n await releaseLock(logDir);\n restoreConsole?.restore();\n process.exit(0);\n}\n\n/** Check for early exit conditions (no changes or no jobs). */\nasync function checkEarlyExit(\n changes: string[],\n jobs: unknown[],\n commandName: GateCommandName,\n logDir: string,\n restoreConsole: ConsoleLogHandle | undefined,\n): Promise<void> {\n if (changes.length === 0) {\n console.log(chalk.green('No changes detected.'));\n await handleNoWork(logDir, restoreConsole);\n }\n if (jobs.length === 0) {\n console.log(\n chalk.yellow(`No applicable ${commandName}s for these changes.`),\n );\n await handleNoWork(logDir, restoreConsole);\n }\n}\n\ninterface LockContext {\n logger: Logger;\n restoreConsole: ConsoleLogHandle;\n}\n\n/** Acquire lock, initialize logger, and start console log capture. */\nasync function acquireLockAndInitLogger(logDir: string): Promise<LockContext> {\n await acquireLock(logDir);\n\n const logger = new Logger(logDir);\n await logger.init();\n const runNumber = logger.getRunNumber();\n\n const restoreConsole = await startConsoleLog(logDir, runNumber);\n return { logger, restoreConsole };\n}\n\n/** Handle error during gate command execution. */\nasync function handleGateError(\n error: unknown,\n config: Awaited<ReturnType<typeof loadConfig>> | undefined,\n lockAcquired: boolean,\n restoreConsole: ConsoleLogHandle | undefined,\n): Promise<never> {\n if (config && lockAcquired) {\n try {\n await writeExecutionState(config.project.log_dir);\n } catch {\n // Ignore errors writing state during error handling\n }\n try {\n await releaseLock(config.project.log_dir);\n } catch (releaseErr) {\n console.error(\n chalk.yellow('Warning: failed to release lock:'),\n (releaseErr as Error).message,\n );\n }\n }\n const err = error as { message?: string };\n console.error(chalk.red('Error:'), err.message);\n restoreConsole?.restore();\n process.exit(1);\n}\n\nconst NO_RERUN: RerunResult = {\n isRerun: false,\n failuresMap: undefined,\n passedSlotsMap: undefined,\n changeOptions: undefined,\n};\n\n/**\n * Shared gate command executor for both \"check\" and \"review\" commands.\n * Contains all logic that was previously duplicated between the two commands.\n */\nexport async function executeGateCommand(\n commandName: GateCommandName,\n options: GateCommandOptions,\n): Promise<void> {\n let config: Awaited<ReturnType<typeof loadConfig>> | undefined;\n let lockAcquired = false;\n let restoreConsole: ConsoleLogHandle | undefined;\n try {\n const initResult = await initializeDebugLogger(commandName, options);\n config = initResult.config;\n const { debugLogger, effectiveBaseBranch } = initResult;\n const logDir = config.project.log_dir;\n\n await handleAutoClean(\n logDir,\n effectiveBaseBranch,\n debugLogger,\n config.project.max_previous_logs,\n );\n\n // Detect rerun mode after auto-clean (clean may have removed logs)\n const logsExist = await hasExistingLogs(logDir);\n const isRerun = detectRerunMode(logsExist, options.commit);\n\n const lockCtx = await acquireLockAndInitLogger(logDir);\n lockAcquired = true;\n restoreConsole = lockCtx.restoreConsole;\n\n const rerunResult = isRerun\n ? await processRerunMode(logDir, options)\n : NO_RERUN;\n\n const changeOptions = await resolveChangeOptions(\n logDir,\n effectiveBaseBranch,\n options,\n rerunResult.changeOptions,\n logsExist,\n );\n\n const { changes, jobs } = await detectChangesAndGenerateJobs(\n config,\n effectiveBaseBranch,\n changeOptions,\n options,\n commandName,\n );\n\n await checkEarlyExit(changes, jobs, commandName, logDir, restoreConsole);\n\n console.log(chalk.dim(`Running ${jobs.length} ${commandName}(s)...`));\n\n const allPassed = await executeAndFinalize(\n config,\n lockCtx.logger,\n debugLogger,\n rerunResult.isRerun,\n rerunResult.failuresMap,\n changeOptions,\n effectiveBaseBranch,\n rerunResult.passedSlotsMap,\n changes,\n jobs,\n );\n\n await releaseLock(logDir);\n restoreConsole?.restore();\n process.exit(allPassed ? 0 : 1);\n } catch (error: unknown) {\n await handleGateError(error, config, lockAcquired, restoreConsole);\n }\n}\n",
|
|
8
8
|
"import fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport YAML from 'yaml';\nimport { z } from 'zod';\n\nconst GLOBAL_CONFIG_PATH = path.join(\n os.homedir(),\n '.config',\n 'agent-gauntlet',\n 'config.yml',\n);\n\nexport const debugLogConfigSchema = z.object({\n enabled: z.boolean().default(false),\n max_size_mb: z.number().default(10),\n});\n\nexport type DebugLogConfig = z.infer<typeof debugLogConfigSchema>;\n\nconst globalConfigSchema = z.object({\n stop_hook: z\n .object({\n enabled: z.boolean().default(false),\n run_interval_minutes: z.number().default(5),\n })\n .default({\n enabled: false,\n run_interval_minutes: 5,\n }),\n debug_log: debugLogConfigSchema.default({ enabled: false, max_size_mb: 10 }),\n});\n\nexport type GlobalConfig = z.infer<typeof globalConfigSchema>;\n\nexport const DEFAULT_GLOBAL_CONFIG: GlobalConfig = {\n stop_hook: {\n enabled: false,\n run_interval_minutes: 5,\n },\n debug_log: {\n enabled: false,\n max_size_mb: 10,\n },\n};\n\n/**\n * Load the global agent-gauntlet configuration.\n * Returns default values if the file doesn't exist or is invalid.\n */\nexport async function loadGlobalConfig(): Promise<GlobalConfig> {\n try {\n const content = await fs.readFile(GLOBAL_CONFIG_PATH, 'utf-8');\n const raw = YAML.parse(content);\n return globalConfigSchema.parse(raw);\n } catch (error) {\n // Check if file doesn't exist (expected case)\n if (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as { code: string }).code === 'ENOENT'\n ) {\n return DEFAULT_GLOBAL_CONFIG;\n }\n\n // File exists but is invalid - log warning and use defaults\n console.error(\n `[gauntlet] Warning: Failed to parse global config at ${GLOBAL_CONFIG_PATH}, using defaults`,\n );\n return DEFAULT_GLOBAL_CONFIG;\n }\n}\n\n/**\n * Get the path to the global config file.\n * Useful for debugging or documentation.\n */\nexport function getGlobalConfigPath(): string {\n return GLOBAL_CONFIG_PATH;\n}\n",
|
|
9
|
-
"import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport matter from 'gray-matter';\nimport YAML from 'yaml';\nimport {\n isBuiltInReview,\n loadBuiltInReview,\n} from '../built-in-reviews/index.js';\nimport {\n checkGateSchema,\n gauntletConfigSchema,\n reviewPromptFrontmatterSchema,\n reviewYamlSchema,\n} from './schema.js';\nimport type {\n CheckGateConfig,\n GauntletConfig,\n LoadedCheckGateConfig,\n LoadedConfig,\n LoadedReviewGateConfig,\n} from './types.js';\n\nconst GAUNTLET_DIR = '.gauntlet';\nconst CONFIG_FILE = 'config.yml';\nconst CHECKS_DIR = 'checks';\nconst REVIEWS_DIR = 'reviews';\n\nexport async function loadConfig(\n rootDir: string = process.cwd(),\n): Promise<LoadedConfig> {\n const gauntletPath = path.join(rootDir, GAUNTLET_DIR);\n const configPath = path.join(gauntletPath, CONFIG_FILE);\n\n // 1. Load project config\n if (!(await fileExists(configPath))) {\n throw new Error(`Configuration file not found at ${configPath}`);\n }\n\n const configContent = await fs.readFile(configPath, 'utf-8');\n const projectConfigRaw = YAML.parse(configContent);\n const projectConfig = gauntletConfigSchema.parse(projectConfigRaw);\n\n // 2. Load checks\n const checks = await loadCheckGates(gauntletPath);\n\n // 3. Load reviews\n const reviews = await loadReviewGates(gauntletPath);\n\n // 3b. Merge default CLI preference if not specified\n mergeCliPreferences(reviews, projectConfig);\n\n // 4. Validate entry point references\n validateLoadedEntryPoints(projectConfig, checks, reviews);\n\n return {\n project: projectConfig,\n checks,\n reviews,\n };\n}\n\nasync function loadCheckGates(\n gauntletPath: string,\n): Promise<Record<string, LoadedCheckGateConfig>> {\n const checksPath = path.join(gauntletPath, CHECKS_DIR);\n const checks: Record<string, LoadedCheckGateConfig> = {};\n\n if (!(await dirExists(checksPath))) {\n return checks;\n }\n\n const checkFiles = await fs.readdir(checksPath);\n for (const file of checkFiles) {\n if (!(file.endsWith('.yml') || file.endsWith('.yaml'))) {\n continue;\n }\n\n const filePath = path.join(checksPath, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const raw = YAML.parse(content);\n const name = path.basename(file, path.extname(file));\n const parsed: CheckGateConfig = checkGateSchema.parse(raw);\n\n // Normalize deprecated alias in loader (not schema) for reliability\n const fixFile = parsed.fix_instructions_file || parsed.fix_instructions;\n\n const loadedCheck: LoadedCheckGateConfig = {\n ...parsed,\n name,\n };\n\n // Load fix instructions file if specified\n if (fixFile) {\n loadedCheck.fixInstructionsContent = await loadPromptFile(\n fixFile,\n gauntletPath,\n `check \"${name}\"`,\n );\n }\n\n // Store fix_with_skill if specified\n if (parsed.fix_with_skill) {\n loadedCheck.fixWithSkill = parsed.fix_with_skill;\n }\n\n checks[name] = loadedCheck;\n }\n\n return checks;\n}\n\nasync function loadReviewGates(\n gauntletPath: string,\n): Promise<Record<string, LoadedReviewGateConfig>> {\n const reviewsPath = path.join(gauntletPath, REVIEWS_DIR);\n const reviews: Record<string, LoadedReviewGateConfig> = {};\n\n if (!(await dirExists(reviewsPath))) {\n return reviews;\n }\n\n const reviewFiles = await fs.readdir(reviewsPath);\n detectDuplicateReviewNames(reviewFiles);\n\n for (const file of reviewFiles) {\n if (file.endsWith('.md')) {\n reviews[path.basename(file, '.md')] = await loadMarkdownReview(\n file,\n reviewsPath,\n gauntletPath,\n );\n } else if (file.endsWith('.yml') || file.endsWith('.yaml')) {\n reviews[path.basename(file, path.extname(file))] = await loadYamlReview(\n file,\n reviewsPath,\n gauntletPath,\n );\n }\n }\n\n return reviews;\n}\n\nfunction detectDuplicateReviewNames(reviewFiles: string[]): void {\n const reviewNameSources = new Map<string, string[]>();\n for (const file of reviewFiles) {\n if (\n !(file.endsWith('.md') || file.endsWith('.yml') || file.endsWith('.yaml'))\n ) {\n continue;\n }\n\n const name = path.basename(file, path.extname(file));\n\n // Reject user-defined review files with the reserved built-in: prefix\n if (isBuiltInReview(name)) {\n throw new Error(\n `Review file \"${file}\" uses the reserved \"built-in:\" prefix. Rename the file to avoid conflicts with built-in reviews.`,\n );\n }\n\n const sources = reviewNameSources.get(name) || [];\n sources.push(file);\n reviewNameSources.set(name, sources);\n }\n\n for (const [name, sources] of reviewNameSources) {\n if (sources.length > 1) {\n throw new Error(\n `Duplicate review name \"${name}\" found across files: ${sources.join(', ')}. Each review name must be unique.`,\n );\n }\n }\n}\n\nasync function loadMarkdownReview(\n file: string,\n reviewsPath: string,\n gauntletPath: string,\n): Promise<LoadedReviewGateConfig> {\n const filePath = path.join(reviewsPath, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const { data: frontmatter, content: promptBody } = matter(content);\n\n const parsedFrontmatter = reviewPromptFrontmatterSchema.parse(frontmatter);\n const name = path.basename(file, '.md');\n\n const review: LoadedReviewGateConfig = {\n name,\n prompt: file,\n promptContent: promptBody,\n model: parsedFrontmatter.model,\n cli_preference: parsedFrontmatter.cli_preference,\n num_reviews: parsedFrontmatter.num_reviews,\n parallel: parsedFrontmatter.parallel,\n run_in_ci: parsedFrontmatter.run_in_ci,\n run_locally: parsedFrontmatter.run_locally,\n timeout: parsedFrontmatter.timeout,\n };\n\n // If prompt_file is specified, override the markdown body\n if (parsedFrontmatter.prompt_file) {\n review.promptContent = await loadPromptFile(\n parsedFrontmatter.prompt_file,\n gauntletPath,\n `review \"${name}\"`,\n );\n }\n\n // If skill_name is specified, ignore body and set skillName\n if (parsedFrontmatter.skill_name) {\n review.promptContent = undefined;\n review.skillName = parsedFrontmatter.skill_name;\n }\n\n return review;\n}\n\nasync function loadYamlReview(\n file: string,\n reviewsPath: string,\n gauntletPath: string,\n): Promise<LoadedReviewGateConfig> {\n const filePath = path.join(reviewsPath, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const raw = YAML.parse(content);\n const parsed = reviewYamlSchema.parse(raw);\n const name = path.basename(file, path.extname(file));\n\n const review: LoadedReviewGateConfig = {\n name,\n prompt: file,\n model: parsed.model,\n cli_preference: parsed.cli_preference,\n num_reviews: parsed.num_reviews,\n parallel: parsed.parallel,\n run_in_ci: parsed.run_in_ci,\n run_locally: parsed.run_locally,\n timeout: parsed.timeout,\n };\n\n if (parsed.prompt_file) {\n review.promptContent = await loadPromptFile(\n parsed.prompt_file,\n gauntletPath,\n `review \"${name}\"`,\n );\n }\n\n if (parsed.skill_name) {\n review.skillName = parsed.skill_name;\n }\n\n if (parsed.builtin) {\n review.promptContent = loadBuiltInReview(parsed.builtin);\n }\n\n return review;\n}\n\nfunction mergeCliPreferences(\n reviews: Record<string, LoadedReviewGateConfig>,\n projectConfig: GauntletConfig,\n): void {\n for (const [name, review] of Object.entries(reviews)) {\n if (review.cli_preference) {\n const allowedTools = new Set(projectConfig.cli.default_preference);\n for (const tool of review.cli_preference) {\n if (!allowedTools.has(tool)) {\n throw new Error(\n `Review \"${name}\" uses CLI tool \"${tool}\" which is not in the project-level allowed list (cli.default_preference).`,\n );\n }\n }\n } else {\n review.cli_preference = projectConfig.cli.default_preference;\n }\n }\n}\n\nfunction validateLoadedEntryPoints(\n projectConfig: GauntletConfig,\n checks: Record<string, LoadedCheckGateConfig>,\n reviews: Record<string, LoadedReviewGateConfig>,\n): void {\n const checkNames = new Set(Object.keys(checks));\n const reviewNames = new Set(Object.keys(reviews));\n\n for (const entryPoint of projectConfig.entry_points) {\n validateGateReferences(\n entryPoint.path,\n 'check',\n entryPoint.checks,\n checkNames,\n );\n validateGateReferences(\n entryPoint.path,\n 'review',\n entryPoint.reviews,\n reviewNames,\n );\n }\n}\n\nfunction validateGateReferences(\n entryPointPath: string,\n gateKind: string,\n references: string[] | undefined,\n knownNames: Set<string>,\n): void {\n if (!references) {\n return;\n }\n for (const name of references) {\n if (!knownNames.has(name)) {\n throw new Error(\n `Entry point \"${entryPointPath}\" references non-existent ${gateKind} gate: \"${name}\"`,\n );\n }\n }\n}\n\nasync function loadPromptFile(\n filePath: string,\n gauntletPath: string,\n source: string,\n): Promise<string> {\n let resolvedPath: string;\n if (path.isAbsolute(filePath)) {\n console.warn(\n `Warning: ${source} uses absolute path \"${filePath}\". Prefer relative paths for portability.`,\n );\n resolvedPath = filePath;\n } else {\n resolvedPath = path.resolve(gauntletPath, filePath);\n }\n // Warn if resolved path escapes the .gauntlet/ directory (including via relative traversal)\n const normalizedGauntletPath = path.resolve(gauntletPath);\n const relativeToDotGauntlet = path.relative(\n normalizedGauntletPath,\n resolvedPath,\n );\n if (\n relativeToDotGauntlet.startsWith('..') ||\n path.isAbsolute(relativeToDotGauntlet)\n ) {\n console.warn(\n `Warning: ${source} references file outside .gauntlet/ directory: \"${filePath}\" (resolves to ${resolvedPath}). Review .gauntlet/ config changes carefully in PRs.`,\n );\n }\n if (!(await fileExists(resolvedPath))) {\n throw new Error(\n `File not found: ${resolvedPath} (referenced by ${source})`,\n );\n }\n return fs.readFile(resolvedPath, 'utf-8');\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n const stat = await fs.stat(path);\n return stat.isFile();\n } catch {\n return false;\n }\n}\n\nasync function dirExists(path: string): Promise<boolean> {\n try {\n const stat = await fs.stat(path);\n return stat.isDirectory();\n } catch {\n return false;\n }\n}\n",
|
|
9
|
+
"import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport matter from 'gray-matter';\nimport YAML from 'yaml';\nimport {\n isBuiltInReview,\n loadBuiltInReview,\n} from '../built-in-reviews/index.js';\nimport {\n checkGateSchema,\n gauntletConfigSchema,\n reviewPromptFrontmatterSchema,\n reviewYamlSchema,\n} from './schema.js';\nimport type {\n CheckGateConfig,\n GauntletConfig,\n LoadedCheckGateConfig,\n LoadedConfig,\n LoadedReviewGateConfig,\n} from './types.js';\n\nconst GAUNTLET_DIR = '.gauntlet';\nconst CONFIG_FILE = 'config.yml';\nconst CHECKS_DIR = 'checks';\nconst REVIEWS_DIR = 'reviews';\n\nexport async function loadConfig(\n rootDir: string = process.cwd(),\n): Promise<LoadedConfig> {\n const gauntletPath = path.join(rootDir, GAUNTLET_DIR);\n const configPath = path.join(gauntletPath, CONFIG_FILE);\n\n // 1. Load project config\n if (!(await fileExists(configPath))) {\n throw new Error(`Configuration file not found at ${configPath}`);\n }\n\n const configContent = await fs.readFile(configPath, 'utf-8');\n const projectConfigRaw = YAML.parse(configContent);\n const projectConfig = gauntletConfigSchema.parse(projectConfigRaw);\n\n // 2. Load checks\n const checks = await loadCheckGates(gauntletPath);\n\n // 3. Load reviews\n const reviews = await loadReviewGates(gauntletPath);\n\n // 3b. Merge default CLI preference if not specified\n mergeCliPreferences(reviews, projectConfig);\n\n // 4. Validate entry point references\n validateLoadedEntryPoints(projectConfig, checks, reviews);\n\n return {\n project: projectConfig,\n checks,\n reviews,\n };\n}\n\nasync function loadCheckGates(\n gauntletPath: string,\n): Promise<Record<string, LoadedCheckGateConfig>> {\n const checksPath = path.join(gauntletPath, CHECKS_DIR);\n const checks: Record<string, LoadedCheckGateConfig> = {};\n\n if (!(await dirExists(checksPath))) {\n return checks;\n }\n\n const checkFiles = await fs.readdir(checksPath);\n for (const file of checkFiles) {\n if (!(file.endsWith('.yml') || file.endsWith('.yaml'))) {\n continue;\n }\n\n const filePath = path.join(checksPath, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const raw = YAML.parse(content);\n const name = path.basename(file, path.extname(file));\n const parsed: CheckGateConfig = checkGateSchema.parse(raw);\n\n // Normalize deprecated alias in loader (not schema) for reliability\n const fixFile = parsed.fix_instructions_file || parsed.fix_instructions;\n\n const loadedCheck: LoadedCheckGateConfig = {\n ...parsed,\n name,\n };\n\n // Load fix instructions file if specified\n if (fixFile) {\n loadedCheck.fixInstructionsContent = await loadPromptFile(\n fixFile,\n gauntletPath,\n `check \"${name}\"`,\n );\n }\n\n // Store fix_with_skill if specified\n if (parsed.fix_with_skill) {\n loadedCheck.fixWithSkill = parsed.fix_with_skill;\n }\n\n checks[name] = loadedCheck;\n }\n\n return checks;\n}\n\nasync function loadReviewGates(\n gauntletPath: string,\n): Promise<Record<string, LoadedReviewGateConfig>> {\n const reviewsPath = path.join(gauntletPath, REVIEWS_DIR);\n const reviews: Record<string, LoadedReviewGateConfig> = {};\n\n if (!(await dirExists(reviewsPath))) {\n return reviews;\n }\n\n const reviewFiles = await fs.readdir(reviewsPath);\n detectDuplicateReviewNames(reviewFiles);\n\n for (const file of reviewFiles) {\n if (file.endsWith('.md')) {\n reviews[path.basename(file, '.md')] = await loadMarkdownReview(\n file,\n reviewsPath,\n gauntletPath,\n );\n } else if (file.endsWith('.yml') || file.endsWith('.yaml')) {\n reviews[path.basename(file, path.extname(file))] = await loadYamlReview(\n file,\n reviewsPath,\n gauntletPath,\n );\n }\n }\n\n return reviews;\n}\n\nfunction detectDuplicateReviewNames(reviewFiles: string[]): void {\n const reviewNameSources = new Map<string, string[]>();\n for (const file of reviewFiles) {\n if (\n !(file.endsWith('.md') || file.endsWith('.yml') || file.endsWith('.yaml'))\n ) {\n continue;\n }\n\n const name = path.basename(file, path.extname(file));\n\n // Reject user-defined review files with the reserved built-in: prefix\n if (isBuiltInReview(name)) {\n throw new Error(\n `Review file \"${file}\" uses the reserved \"built-in:\" prefix. Rename the file to avoid conflicts with built-in reviews.`,\n );\n }\n\n const sources = reviewNameSources.get(name) || [];\n sources.push(file);\n reviewNameSources.set(name, sources);\n }\n\n for (const [name, sources] of reviewNameSources) {\n if (sources.length > 1) {\n throw new Error(\n `Duplicate review name \"${name}\" found across files: ${sources.join(', ')}. Each review name must be unique.`,\n );\n }\n }\n}\n\nasync function loadMarkdownReview(\n file: string,\n reviewsPath: string,\n gauntletPath: string,\n): Promise<LoadedReviewGateConfig> {\n const filePath = path.join(reviewsPath, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const { data: frontmatter, content: promptBody } = matter(content);\n\n const parsedFrontmatter = reviewPromptFrontmatterSchema.parse(frontmatter);\n const name = path.basename(file, '.md');\n\n const review: LoadedReviewGateConfig = {\n name,\n prompt: file,\n promptContent: promptBody,\n model: parsedFrontmatter.model,\n cli_preference: parsedFrontmatter.cli_preference,\n num_reviews: parsedFrontmatter.num_reviews,\n parallel: parsedFrontmatter.parallel,\n run_in_ci: parsedFrontmatter.run_in_ci,\n run_locally: parsedFrontmatter.run_locally,\n timeout: parsedFrontmatter.timeout,\n enabled: parsedFrontmatter.enabled,\n };\n\n // If prompt_file is specified, override the markdown body\n if (parsedFrontmatter.prompt_file) {\n review.promptContent = await loadPromptFile(\n parsedFrontmatter.prompt_file,\n gauntletPath,\n `review \"${name}\"`,\n );\n }\n\n // If skill_name is specified, ignore body and set skillName\n if (parsedFrontmatter.skill_name) {\n review.promptContent = undefined;\n review.skillName = parsedFrontmatter.skill_name;\n }\n\n return review;\n}\n\nasync function loadYamlReview(\n file: string,\n reviewsPath: string,\n gauntletPath: string,\n): Promise<LoadedReviewGateConfig> {\n const filePath = path.join(reviewsPath, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const raw = YAML.parse(content);\n const parsed = reviewYamlSchema.parse(raw);\n const name = path.basename(file, path.extname(file));\n\n const review: LoadedReviewGateConfig = {\n name,\n prompt: file,\n model: parsed.model,\n cli_preference: parsed.cli_preference,\n num_reviews: parsed.num_reviews,\n parallel: parsed.parallel,\n run_in_ci: parsed.run_in_ci,\n run_locally: parsed.run_locally,\n timeout: parsed.timeout,\n enabled: parsed.enabled,\n };\n\n if (parsed.prompt_file) {\n review.promptContent = await loadPromptFile(\n parsed.prompt_file,\n gauntletPath,\n `review \"${name}\"`,\n );\n }\n\n if (parsed.skill_name) {\n review.skillName = parsed.skill_name;\n }\n\n if (parsed.builtin) {\n review.promptContent = loadBuiltInReview(parsed.builtin);\n }\n\n return review;\n}\n\nfunction mergeCliPreferences(\n reviews: Record<string, LoadedReviewGateConfig>,\n projectConfig: GauntletConfig,\n): void {\n for (const [name, review] of Object.entries(reviews)) {\n if (review.cli_preference) {\n const allowedTools = new Set(projectConfig.cli.default_preference);\n for (const tool of review.cli_preference) {\n if (!allowedTools.has(tool)) {\n throw new Error(\n `Review \"${name}\" uses CLI tool \"${tool}\" which is not in the project-level allowed list (cli.default_preference).`,\n );\n }\n }\n } else {\n review.cli_preference = projectConfig.cli.default_preference;\n }\n }\n}\n\nfunction validateLoadedEntryPoints(\n projectConfig: GauntletConfig,\n checks: Record<string, LoadedCheckGateConfig>,\n reviews: Record<string, LoadedReviewGateConfig>,\n): void {\n const checkNames = new Set(Object.keys(checks));\n const reviewNames = new Set(Object.keys(reviews));\n\n for (const entryPoint of projectConfig.entry_points) {\n validateGateReferences(\n entryPoint.path,\n 'check',\n entryPoint.checks,\n checkNames,\n );\n validateGateReferences(\n entryPoint.path,\n 'review',\n entryPoint.reviews,\n reviewNames,\n );\n }\n}\n\nfunction validateGateReferences(\n entryPointPath: string,\n gateKind: string,\n references: string[] | undefined,\n knownNames: Set<string>,\n): void {\n if (!references) {\n return;\n }\n for (const name of references) {\n if (!knownNames.has(name)) {\n throw new Error(\n `Entry point \"${entryPointPath}\" references non-existent ${gateKind} gate: \"${name}\"`,\n );\n }\n }\n}\n\nasync function loadPromptFile(\n filePath: string,\n gauntletPath: string,\n source: string,\n): Promise<string> {\n let resolvedPath: string;\n if (path.isAbsolute(filePath)) {\n console.warn(\n `Warning: ${source} uses absolute path \"${filePath}\". Prefer relative paths for portability.`,\n );\n resolvedPath = filePath;\n } else {\n resolvedPath = path.resolve(gauntletPath, filePath);\n }\n // Warn if resolved path escapes the .gauntlet/ directory (including via relative traversal)\n const normalizedGauntletPath = path.resolve(gauntletPath);\n const relativeToDotGauntlet = path.relative(\n normalizedGauntletPath,\n resolvedPath,\n );\n if (\n relativeToDotGauntlet.startsWith('..') ||\n path.isAbsolute(relativeToDotGauntlet)\n ) {\n console.warn(\n `Warning: ${source} references file outside .gauntlet/ directory: \"${filePath}\" (resolves to ${resolvedPath}). Review .gauntlet/ config changes carefully in PRs.`,\n );\n }\n if (!(await fileExists(resolvedPath))) {\n throw new Error(\n `File not found: ${resolvedPath} (referenced by ${source})`,\n );\n }\n return fs.readFile(resolvedPath, 'utf-8');\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n const stat = await fs.stat(path);\n return stat.isFile();\n } catch {\n return false;\n }\n}\n\nasync function dirExists(path: string): Promise<boolean> {\n try {\n const stat = await fs.stat(path);\n return stat.isDirectory();\n } catch {\n return false;\n }\n}\n",
|
|
10
10
|
"// @ts-expect-error Bun text import\nimport codeQualityContent from './code-quality.md' with { type: 'text' };\n\nconst BUILT_IN_PREFIX = 'built-in:';\n\nconst builtInSources: Record<string, string> = {\n 'code-quality': codeQualityContent,\n};\n\n/**\n * Check if a review name uses the built-in prefix.\n */\nexport function isBuiltInReview(name: string): boolean {\n return name.startsWith(BUILT_IN_PREFIX);\n}\n\n/**\n * Load a built-in review prompt by name. Returns the raw markdown content.\n */\nexport function loadBuiltInReview(name: string): string {\n const source = builtInSources[name];\n\n if (!source) {\n throw new Error(`Unknown built-in review: \"${name}\"`);\n }\n\n return source;\n}\n",
|
|
11
|
-
"import { z } from 'zod';\n\nexport const adapterConfigSchema = z.object({\n allow_tool_use: z.boolean().default(true),\n thinking_budget: z.enum(['off', 'low', 'medium', 'high']).optional(),\n model: z.string().optional(),\n});\n\nexport const cliConfigSchema = z.object({\n default_preference: z.array(z.string().min(1)).min(1),\n adapters: z.record(z.string(), adapterConfigSchema).optional(),\n});\n\nexport const checkGateSchema = z\n .object({\n command: z.string().min(1),\n rerun_command: z.string().min(1).optional(),\n working_directory: z.string().optional(),\n parallel: z.boolean().default(false),\n run_in_ci: z.boolean().default(true),\n run_locally: z.boolean().default(true),\n timeout: z.number().optional(),\n fail_fast: z.boolean().optional(),\n fix_instructions: z.string().optional(), // Deprecated alias for fix_instructions_file\n fix_instructions_file: z.string().optional(),\n fix_with_skill: z.string().optional(),\n })\n .superRefine((data, ctx) => {\n // fail_fast can only be used when parallel is false\n if (data.fail_fast === true && data.parallel === true) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'fail_fast can only be used when parallel is false',\n });\n }\n // Cannot specify both deprecated fix_instructions and fix_instructions_file\n if (data.fix_instructions && data.fix_instructions_file) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Cannot specify both 'fix_instructions' (deprecated) and 'fix_instructions_file'. Use only 'fix_instructions_file'.\",\n });\n }\n // fix_instructions_file (or its deprecated alias) and fix_with_skill are mutually exclusive\n const effectiveFixFile =\n data.fix_instructions_file || data.fix_instructions;\n if (effectiveFixFile && data.fix_with_skill) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"'fix_instructions_file' and 'fix_with_skill' are mutually exclusive. Specify only one.\",\n });\n }\n });\n\nexport const reviewGateSchema = z.object({\n name: z.string().min(1),\n prompt: z.string().min(1), // Path relative to .gauntlet/reviews/\n cli_preference: z.array(z.string().min(1)).optional(),\n num_reviews: z.number().default(1),\n parallel: z.boolean().default(true),\n run_in_ci: z.boolean().default(true),\n run_locally: z.boolean().default(true),\n timeout: z.number().optional(),\n});\n\nexport const reviewPromptFrontmatterSchema = z\n .object({\n model: z.string().optional(),\n cli_preference: z.array(z.string().min(1)).optional(),\n num_reviews: z.number().default(1),\n parallel: z.boolean().default(true),\n run_in_ci: z.boolean().default(true),\n run_locally: z.boolean().default(true),\n timeout: z.number().optional(),\n prompt_file: z.string().optional(),\n skill_name: z.string().optional(),\n })\n .refine((data) => !(data.prompt_file && data.skill_name), {\n message:\n \"'prompt_file' and 'skill_name' are mutually exclusive. Specify only one.\",\n });\n\nexport const reviewYamlSchema = z\n .object({\n model: z.string().optional(),\n cli_preference: z.array(z.string().min(1)).optional(),\n num_reviews: z.number().default(1),\n parallel: z.boolean().default(true),\n run_in_ci: z.boolean().default(true),\n run_locally: z.boolean().default(true),\n timeout: z.number().optional(),\n prompt_file: z.string().optional(),\n skill_name: z.string().optional(),\n builtin: z.string().optional(),\n })\n .superRefine((data, ctx) => {\n const sources = [data.prompt_file, data.skill_name, data.builtin].filter(\n Boolean,\n );\n if (sources.length > 1) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"'prompt_file', 'skill_name', and 'builtin' are mutually exclusive. Specify only one.\",\n });\n }\n if (sources.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"YAML review files must specify exactly one of 'prompt_file', 'skill_name', or 'builtin'.\",\n });\n }\n });\n\nexport const entryPointSchema = z.object({\n path: z.string().min(1),\n exclude: z.array(z.string().min(1)).optional(),\n checks: z.array(z.string().min(1)).optional(),\n reviews: z.array(z.string().min(1)).optional(),\n});\n\nexport const debugLogConfigSchema = z.object({\n enabled: z.boolean().default(false),\n max_size_mb: z.number().default(10),\n});\n\nexport const loggingConsoleConfigSchema = z.object({\n enabled: z.boolean().default(true),\n format: z.enum(['pretty', 'json']).default('pretty'),\n});\n\nexport const loggingFileConfigSchema = z.object({\n enabled: z.boolean().default(true),\n format: z.enum(['text', 'json']).default('text'),\n});\n\nexport const loggingConfigSchema = z.object({\n level: z.enum(['debug', 'info', 'warning', 'error']).default('debug'),\n console: loggingConsoleConfigSchema.optional(),\n file: loggingFileConfigSchema.optional(),\n});\n\nexport const stopHookConfigSchema = z.object({\n enabled: z.boolean().optional(),\n run_interval_minutes: z.number().int().min(0).optional(),\n});\n\nexport const gauntletConfigSchema = z.object({\n base_branch: z.string().min(1).default('origin/main'),\n log_dir: z.string().min(1).default('gauntlet_logs'),\n allow_parallel: z.boolean().default(true),\n max_retries: z.number().default(3),\n max_previous_logs: z.number().int().min(0).default(3),\n rerun_new_issue_threshold: z\n .enum(['critical', 'high', 'medium', 'low'])\n .default('medium'),\n cli: cliConfigSchema,\n entry_points: z.array(entryPointSchema).min(1),\n debug_log: debugLogConfigSchema.optional(),\n logging: loggingConfigSchema.optional(),\n stop_hook: stopHookConfigSchema.optional(),\n});\n",
|
|
12
|
-
"import { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execAsync = promisify(exec);\n\n/** Validate that a string is a safe git ref (hex SHA or branch-like name). */\nfunction isValidGitRef(ref: string): boolean {\n return /^[a-zA-Z0-9._\\-/]+$/.test(ref);\n}\n\nexport interface ChangeDetectorOptions {\n commit?: string; // If provided, get diff for this commit vs its parent\n uncommitted?: boolean; // If true, only get uncommitted changes (staged + unstaged)\n fixBase?: string; // If provided, get diff from this ref to current working tree\n}\n\nexport class ChangeDetector {\n constructor(\n private baseBranch: string = 'origin/main',\n private options: ChangeDetectorOptions = {},\n ) {}\n\n async getChangedFiles(): Promise<string[]> {\n // Validate base branch before any shell interpolation\n if (!isValidGitRef(this.baseBranch)) {\n throw new Error(`Invalid base branch ref: ${this.baseBranch}`);\n }\n\n // Priority 1: If commit option is provided, use that\n if (this.options.commit) {\n if (!isValidGitRef(this.options.commit)) {\n throw new Error(`Invalid commit ref: ${this.options.commit}`);\n }\n return this.getCommitChangedFiles(this.options.commit);\n }\n\n // Priority 2: If fixBase is provided, diff against it\n if (this.options.fixBase) {\n if (!isValidGitRef(this.options.fixBase)) {\n throw new Error(`Invalid fixBase ref: ${this.options.fixBase}`);\n }\n return this.getFixBaseChangedFiles(this.options.fixBase);\n }\n\n // Priority 3: If uncommitted option is provided, only get uncommitted changes\n if (this.options.uncommitted) {\n return this.getUncommittedChangedFiles();\n }\n\n // Priority 4: CI detection / local base branch diff\n const isCI =\n process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true';\n\n if (isCI) {\n return this.getCIChangedFiles();\n }\n return this.getLocalChangedFiles();\n }\n\n private async getCIChangedFiles(): Promise<string[]> {\n // In GitHub Actions, GITHUB_SHA is the commit being built\n // Base branch priority is already resolved by caller\n const baseRef = this.baseBranch;\n const headRef = process.env.GITHUB_SHA || 'HEAD';\n\n if (!isValidGitRef(baseRef)) {\n throw new Error(`Invalid base ref: ${baseRef}`);\n }\n if (!isValidGitRef(headRef)) {\n throw new Error(`Invalid head ref: ${headRef}`);\n }\n\n // We might need to fetch first in some shallow clones, but assuming strictly for now\n // git diff --name-only base...head\n try {\n const { stdout } = await execAsync(\n `git diff --name-only ${baseRef}...${headRef}`,\n );\n return this.parseOutput(stdout);\n } catch (error) {\n console.warn(\n 'Failed to detect changes via git diff in CI, falling back to HEAD^...HEAD',\n error,\n );\n // Fallback for push events where base ref might not be available\n const { stdout } = await execAsync('git diff --name-only HEAD^...HEAD');\n return this.parseOutput(stdout);\n }\n }\n\n /** Collect uncommitted (staged + unstaged) and untracked file paths. */\n private async getWorkingTreeFiles(): Promise<string[]> {\n const { stdout: staged } = await execAsync('git diff --name-only --cached');\n const { stdout: unstaged } = await execAsync('git diff --name-only');\n const { stdout: untracked } = await execAsync(\n 'git ls-files --others --exclude-standard',\n );\n return [\n ...this.parseOutput(staged),\n ...this.parseOutput(unstaged),\n ...this.parseOutput(untracked),\n ];\n }\n\n /** Combine committed diff (against a base ref) with working tree changes. */\n private async getDiffWithWorkingTree(baseRef: string): Promise<string[]> {\n const { stdout: committed } = await execAsync(\n `git diff --name-only ${baseRef}...HEAD`,\n );\n const files = new Set([\n ...this.parseOutput(committed),\n ...(await this.getWorkingTreeFiles()),\n ]);\n return Array.from(files);\n }\n\n private async getLocalChangedFiles(): Promise<string[]> {\n return this.getDiffWithWorkingTree(
|
|
11
|
+
"import { z } from 'zod';\n\nexport const adapterConfigSchema = z.object({\n allow_tool_use: z.boolean().default(true),\n thinking_budget: z.enum(['off', 'low', 'medium', 'high']).optional(),\n model: z.string().optional(),\n});\n\nexport const cliConfigSchema = z.object({\n default_preference: z.array(z.string().min(1)).min(1),\n adapters: z.record(z.string(), adapterConfigSchema).optional(),\n});\n\nexport const checkGateSchema = z\n .object({\n command: z.string().min(1),\n rerun_command: z.string().min(1).optional(),\n working_directory: z.string().optional(),\n parallel: z.boolean().default(false),\n run_in_ci: z.boolean().default(true),\n run_locally: z.boolean().default(true),\n timeout: z.number().optional(),\n fail_fast: z.boolean().optional(),\n fix_instructions: z.string().optional(), // Deprecated alias for fix_instructions_file\n fix_instructions_file: z.string().optional(),\n fix_with_skill: z.string().optional(),\n })\n .superRefine((data, ctx) => {\n // fail_fast can only be used when parallel is false\n if (data.fail_fast === true && data.parallel === true) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'fail_fast can only be used when parallel is false',\n });\n }\n // Cannot specify both deprecated fix_instructions and fix_instructions_file\n if (data.fix_instructions && data.fix_instructions_file) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Cannot specify both 'fix_instructions' (deprecated) and 'fix_instructions_file'. Use only 'fix_instructions_file'.\",\n });\n }\n // fix_instructions_file (or its deprecated alias) and fix_with_skill are mutually exclusive\n const effectiveFixFile =\n data.fix_instructions_file || data.fix_instructions;\n if (effectiveFixFile && data.fix_with_skill) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"'fix_instructions_file' and 'fix_with_skill' are mutually exclusive. Specify only one.\",\n });\n }\n });\n\nexport const reviewGateSchema = z.object({\n name: z.string().min(1),\n prompt: z.string().min(1), // Path relative to .gauntlet/reviews/\n cli_preference: z.array(z.string().min(1)).optional(),\n num_reviews: z.number().default(1),\n parallel: z.boolean().default(true),\n run_in_ci: z.boolean().default(true),\n run_locally: z.boolean().default(true),\n timeout: z.number().optional(),\n enabled: z.boolean().default(true),\n});\n\nexport const reviewPromptFrontmatterSchema = z\n .object({\n model: z.string().optional(),\n cli_preference: z.array(z.string().min(1)).optional(),\n num_reviews: z.number().default(1),\n parallel: z.boolean().default(true),\n run_in_ci: z.boolean().default(true),\n run_locally: z.boolean().default(true),\n timeout: z.number().optional(),\n prompt_file: z.string().optional(),\n skill_name: z.string().optional(),\n enabled: z.boolean().default(true),\n })\n .refine((data) => !(data.prompt_file && data.skill_name), {\n message:\n \"'prompt_file' and 'skill_name' are mutually exclusive. Specify only one.\",\n });\n\nexport const reviewYamlSchema = z\n .object({\n model: z.string().optional(),\n cli_preference: z.array(z.string().min(1)).optional(),\n num_reviews: z.number().default(1),\n parallel: z.boolean().default(true),\n run_in_ci: z.boolean().default(true),\n run_locally: z.boolean().default(true),\n timeout: z.number().optional(),\n prompt_file: z.string().optional(),\n skill_name: z.string().optional(),\n builtin: z.string().optional(),\n enabled: z.boolean().default(true),\n })\n .superRefine((data, ctx) => {\n const sources = [data.prompt_file, data.skill_name, data.builtin].filter(\n Boolean,\n );\n if (sources.length > 1) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"'prompt_file', 'skill_name', and 'builtin' are mutually exclusive. Specify only one.\",\n });\n }\n if (sources.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"YAML review files must specify exactly one of 'prompt_file', 'skill_name', or 'builtin'.\",\n });\n }\n });\n\nexport const entryPointSchema = z.object({\n path: z.string().min(1),\n exclude: z.array(z.string().min(1)).optional(),\n checks: z.array(z.string().min(1)).optional(),\n reviews: z.array(z.string().min(1)).optional(),\n});\n\nexport const debugLogConfigSchema = z.object({\n enabled: z.boolean().default(false),\n max_size_mb: z.number().default(10),\n});\n\nexport const loggingConsoleConfigSchema = z.object({\n enabled: z.boolean().default(true),\n format: z.enum(['pretty', 'json']).default('pretty'),\n});\n\nexport const loggingFileConfigSchema = z.object({\n enabled: z.boolean().default(true),\n format: z.enum(['text', 'json']).default('text'),\n});\n\nexport const loggingConfigSchema = z.object({\n level: z.enum(['debug', 'info', 'warning', 'error']).default('debug'),\n console: loggingConsoleConfigSchema.optional(),\n file: loggingFileConfigSchema.optional(),\n});\n\nexport const stopHookConfigSchema = z.object({\n enabled: z.boolean().optional(),\n run_interval_minutes: z.number().int().min(0).optional(),\n});\n\nexport const gauntletConfigSchema = z.object({\n base_branch: z.string().min(1).default('origin/main'),\n log_dir: z.string().min(1).default('gauntlet_logs'),\n allow_parallel: z.boolean().default(true),\n max_retries: z.number().default(3),\n max_previous_logs: z.number().int().min(0).default(3),\n rerun_new_issue_threshold: z\n .enum(['critical', 'high', 'medium', 'low'])\n .default('medium'),\n cli: cliConfigSchema,\n entry_points: z.array(entryPointSchema).min(1),\n debug_log: debugLogConfigSchema.optional(),\n logging: loggingConfigSchema.optional(),\n stop_hook: stopHookConfigSchema.optional(),\n});\n",
|
|
12
|
+
"import { exec, execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execAsync = promisify(exec);\nconst execFileAsync = promisify(execFile);\n\n/** Validate that a string is a safe git ref (hex SHA or branch-like name). */\nfunction isValidGitRef(ref: string): boolean {\n return /^[a-zA-Z0-9._\\-/]+$/.test(ref);\n}\n\nexport interface ChangeDetectorOptions {\n commit?: string; // If provided, get diff for this commit vs its parent\n uncommitted?: boolean; // If true, only get uncommitted changes (staged + unstaged)\n fixBase?: string; // If provided, get diff from this ref to current working tree\n}\n\nexport class ChangeDetector {\n constructor(\n private baseBranch: string = 'origin/main',\n private options: ChangeDetectorOptions = {},\n ) {}\n\n async getChangedFiles(): Promise<string[]> {\n // Validate base branch before any shell interpolation\n if (!isValidGitRef(this.baseBranch)) {\n throw new Error(`Invalid base branch ref: ${this.baseBranch}`);\n }\n\n // Priority 1: If commit option is provided, use that\n if (this.options.commit) {\n if (!isValidGitRef(this.options.commit)) {\n throw new Error(`Invalid commit ref: ${this.options.commit}`);\n }\n return this.getCommitChangedFiles(this.options.commit);\n }\n\n // Priority 2: If fixBase is provided, diff against it\n if (this.options.fixBase) {\n if (!isValidGitRef(this.options.fixBase)) {\n throw new Error(`Invalid fixBase ref: ${this.options.fixBase}`);\n }\n return this.getFixBaseChangedFiles(this.options.fixBase);\n }\n\n // Priority 3: If uncommitted option is provided, only get uncommitted changes\n if (this.options.uncommitted) {\n return this.getUncommittedChangedFiles();\n }\n\n // Priority 4: CI detection / local base branch diff\n const isCI =\n process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true';\n\n if (isCI) {\n return this.getCIChangedFiles();\n }\n return this.getLocalChangedFiles();\n }\n\n private async getCIChangedFiles(): Promise<string[]> {\n // In GitHub Actions, GITHUB_SHA is the commit being built\n // Base branch priority is already resolved by caller\n const baseRef = this.baseBranch;\n const headRef = process.env.GITHUB_SHA || 'HEAD';\n\n if (!isValidGitRef(baseRef)) {\n throw new Error(`Invalid base ref: ${baseRef}`);\n }\n if (!isValidGitRef(headRef)) {\n throw new Error(`Invalid head ref: ${headRef}`);\n }\n\n // We might need to fetch first in some shallow clones, but assuming strictly for now\n // git diff --name-only base...head\n try {\n const { stdout } = await execAsync(\n `git diff --name-only ${baseRef}...${headRef}`,\n );\n return this.parseOutput(stdout);\n } catch (error) {\n console.warn(\n 'Failed to detect changes via git diff in CI, falling back to HEAD^...HEAD',\n error,\n );\n // Fallback for push events where base ref might not be available\n const { stdout } = await execAsync('git diff --name-only HEAD^...HEAD');\n return this.parseOutput(stdout);\n }\n }\n\n /** Collect uncommitted (staged + unstaged) and untracked file paths. */\n private async getWorkingTreeFiles(): Promise<string[]> {\n const { stdout: staged } = await execAsync('git diff --name-only --cached');\n const { stdout: unstaged } = await execAsync('git diff --name-only');\n const { stdout: untracked } = await execAsync(\n 'git ls-files --others --exclude-standard',\n );\n return [\n ...this.parseOutput(staged),\n ...this.parseOutput(unstaged),\n ...this.parseOutput(untracked),\n ];\n }\n\n /** Combine committed diff (against a base ref) with working tree changes. */\n private async getDiffWithWorkingTree(baseRef: string): Promise<string[]> {\n const { stdout: committed } = await execAsync(\n `git diff --name-only ${baseRef}...HEAD`,\n );\n const files = new Set([\n ...this.parseOutput(committed),\n ...(await this.getWorkingTreeFiles()),\n ]);\n return Array.from(files);\n }\n\n /**\n * Resolve base branch to whichever of local or origin/<branch> is more up-to-date.\n * Uses commit-ahead counts to pick the ref with more recent history.\n */\n private async resolveLocalBaseBranch(): Promise<string> {\n const base = this.baseBranch;\n if (base.startsWith('origin/')) return base;\n const remoteRef = `origin/${base}`;\n\n const [localExists, remoteExists] = await Promise.all([\n execFileAsync('git', ['rev-parse', '--verify', base]).then(\n () => true,\n () => false,\n ),\n execFileAsync('git', ['rev-parse', '--verify', remoteRef]).then(\n () => true,\n () => false,\n ),\n ]);\n\n if (!remoteExists) return base;\n if (!localExists) return remoteRef;\n\n try {\n const [{ stdout: remoteAhead }, { stdout: localAhead }] =\n await Promise.all([\n execFileAsync('git', [\n 'rev-list',\n '--count',\n `${base}..${remoteRef}`,\n ]),\n execFileAsync('git', [\n 'rev-list',\n '--count',\n `${remoteRef}..${base}`,\n ]),\n ]);\n\n return parseInt(localAhead.trim(), 10) > parseInt(remoteAhead.trim(), 10)\n ? base\n : remoteRef;\n } catch {\n // Shallow clone or unreachable history — fall back to remote ref\n return remoteRef;\n }\n }\n\n private async getLocalChangedFiles(): Promise<string[]> {\n const resolvedBase = await this.resolveLocalBaseBranch();\n return this.getDiffWithWorkingTree(resolvedBase);\n }\n\n private async getCommitChangedFiles(commit: string): Promise<string[]> {\n try {\n const { stdout } = await execAsync(\n `git diff --name-only ${commit}^..${commit}`,\n );\n return this.parseOutput(stdout);\n } catch (_error) {\n try {\n const { stdout } = await execAsync(\n `git diff --name-only --root ${commit}`,\n );\n return this.parseOutput(stdout);\n } catch {\n throw new Error(`Failed to get changes for commit ${commit}`);\n }\n }\n }\n\n private async getFixBaseChangedFiles(fixBase: string): Promise<string[]> {\n return this.getDiffWithWorkingTree(fixBase);\n }\n\n private async getUncommittedChangedFiles(): Promise<string[]> {\n const files = new Set(await this.getWorkingTreeFiles());\n return Array.from(files);\n }\n\n private parseOutput(stdout: string): string[] {\n return stdout\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n }\n}\n",
|
|
13
13
|
"import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport picomatch from 'picomatch';\nimport type { EntryPointConfig } from '../config/types.js';\n\nexport interface ExpandedEntryPoint {\n path: string; // The specific directory (e.g., \"engines/billing\")\n config: EntryPointConfig; // The config that generated this (e.g., \"engines/*\")\n}\n\nexport class EntryPointExpander {\n async expand(\n entryPoints: EntryPointConfig[],\n changedFiles: string[],\n ): Promise<ExpandedEntryPoint[]> {\n const results: ExpandedEntryPoint[] = [];\n\n this.expandRootEntryPoint(entryPoints, changedFiles, results);\n\n for (const ep of entryPoints) {\n if (ep.path === '.') continue;\n await this.expandNonRootEntry(ep, changedFiles, results);\n }\n\n return results;\n }\n\n private expandRootEntryPoint(\n entryPoints: EntryPointConfig[],\n changedFiles: string[],\n results: ExpandedEntryPoint[],\n ): void {\n if (changedFiles.length === 0) return;\n\n const rootConfig = entryPoints.find((ep) => ep.path === '.') ?? {\n path: '.',\n };\n const filteredRootChanges = this.filterExcludedFiles(\n changedFiles,\n rootConfig.exclude,\n );\n\n if (filteredRootChanges.length > 0) {\n results.push({ path: '.', config: rootConfig });\n }\n }\n\n private async expandNonRootEntry(\n ep: EntryPointConfig,\n changedFiles: string[],\n results: ExpandedEntryPoint[],\n ): Promise<void> {\n const filteredChanges = this.filterExcludedFiles(changedFiles, ep.exclude);\n if (filteredChanges.length === 0) return;\n\n if (ep.path.endsWith('*') && !ep.path.includes('**')) {\n const parentDir = ep.path.slice(0, -2);\n const expandedPaths = await this.expandWildcard(\n parentDir,\n filteredChanges,\n );\n for (const subDir of expandedPaths) {\n results.push({ path: subDir, config: ep });\n }\n } else if (this.isGlobPattern(ep.path)) {\n if (this.hasMatchingFiles(ep.path, filteredChanges)) {\n results.push({ path: ep.path, config: ep });\n }\n } else if (this.hasChangesInDir(ep.path, filteredChanges)) {\n results.push({ path: ep.path, config: ep });\n }\n }\n\n async expandAll(\n entryPoints: EntryPointConfig[],\n ): Promise<ExpandedEntryPoint[]> {\n const results: ExpandedEntryPoint[] = [];\n\n for (const ep of entryPoints) {\n if (ep.path === '.') {\n results.push({ path: '.', config: ep });\n continue;\n }\n\n if (ep.path.endsWith('*') && !ep.path.includes('**')) {\n // Single-level wildcard directory (e.g., \"engines/*\")\n const parentDir = ep.path.slice(0, -2);\n const subDirs = await this.listSubDirectories(parentDir);\n for (const subDir of subDirs) {\n results.push({ path: subDir, config: ep });\n }\n } else if (this.isGlobPattern(ep.path)) {\n // Glob pattern (e.g., \"openspec/changes/**/spec.md\")\n // Include as-is for expandAll since it's a virtual entry point\n results.push({ path: ep.path, config: ep });\n } else {\n results.push({ path: ep.path, config: ep });\n }\n }\n\n return results;\n }\n\n private filterExcludedFiles(files: string[], patterns?: string[]): string[] {\n if (!patterns || patterns.length === 0) {\n return files;\n }\n\n // Pre-compile matchers\n const matchers: picomatch.Matcher[] = [];\n const prefixes: string[] = [];\n\n for (const pattern of patterns) {\n if (pattern.match(/[*?[{]/)) {\n matchers.push(picomatch(pattern));\n } else {\n prefixes.push(pattern);\n }\n }\n\n return files.filter((file) => {\n // If matches ANY pattern, exclude it\n const isExcluded =\n prefixes.some((p) => file === p || file.startsWith(`${p}/`)) ||\n matchers.some((m) => m(file));\n\n return !isExcluded;\n });\n }\n\n private async expandWildcard(\n parentDir: string,\n changedFiles: string[],\n ): Promise<string[]> {\n const affectedSubDirs = new Set<string>();\n\n // Filter changes that are inside this parent directory\n const relevantChanges = changedFiles.filter((f) =>\n f.startsWith(`${parentDir}/`),\n );\n\n for (const file of relevantChanges) {\n // file: \"engines/billing/src/foo.ts\", parentDir: \"engines\"\n // relPath: \"billing/src/foo.ts\"\n const relPath = file.slice(parentDir.length + 1);\n const subDirName = relPath.split('/')[0];\n\n if (subDirName) {\n affectedSubDirs.add(path.join(parentDir, subDirName));\n }\n }\n\n return Array.from(affectedSubDirs);\n }\n\n private async listSubDirectories(parentDir: string): Promise<string[]> {\n try {\n const dirents = await fs.readdir(parentDir, { withFileTypes: true });\n return dirents\n .filter((d) => d.isDirectory())\n .map((d) => path.join(parentDir, d.name));\n } catch {\n return [];\n }\n }\n\n private hasChangesInDir(dirPath: string, changedFiles: string[]): boolean {\n // Check if any changed file starts with the dirPath\n // Need to ensure exact match or subdirectory (e.g. \"app\" should not match \"apple\")\n const dirPrefix = dirPath.endsWith('/') ? dirPath : `${dirPath}/`;\n return changedFiles.some((f) => f === dirPath || f.startsWith(dirPrefix));\n }\n\n private isGlobPattern(pattern: string): boolean {\n // Check if the pattern contains glob characters\n return /[*?[{]/.test(pattern);\n }\n\n private hasMatchingFiles(pattern: string, changedFiles: string[]): boolean {\n const matcher = picomatch(pattern);\n return changedFiles.some((file) => matcher(file));\n }\n}\n",
|
|
14
|
-
"import type {\n CheckGateConfig,\n LoadedConfig,\n LoadedReviewGateConfig,\n} from '../config/types.js';\nimport type { ExpandedEntryPoint } from './entry-point.js';\n\nexport type JobType = 'check' | 'review';\n\nexport interface Job {\n id: string; // unique id for logging/tracking\n type: JobType;\n name: string;\n entryPoint: string;\n gateConfig: CheckGateConfig | LoadedReviewGateConfig;\n workingDirectory: string;\n}\n\n/** Check if a gate should run in the current environment. */\nfunction shouldRunGate(\n gateConfig: { run_in_ci?: boolean; run_locally?: boolean },\n isCI: boolean,\n): boolean {\n if (isCI && !gateConfig.run_in_ci) return false;\n if (!(isCI || gateConfig.run_locally)) return false;\n return true;\n}\n\nexport class JobGenerator {\n constructor(private config: LoadedConfig) {}\n\n generateJobs(expandedEntryPoints: ExpandedEntryPoint[]): Job[] {\n const jobs: Job[] = [];\n const seenJobs = new Set<string>();\n const isCI =\n process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true';\n\n for (const ep of expandedEntryPoints) {\n this.collectCheckJobs(ep, isCI, seenJobs, jobs);\n this.collectReviewJobs(ep, isCI, jobs);\n }\n\n return jobs;\n }\n\n private collectCheckJobs(\n ep: ExpandedEntryPoint,\n isCI: boolean,\n seenJobs: Set<string>,\n jobs: Job[],\n ): void {\n if (!ep.config.checks) return;\n\n for (const checkName of ep.config.checks) {\n const checkConfig = this.config.checks[checkName];\n if (!checkConfig) {\n console.warn(\n `Warning: Check gate '${checkName}' configured in entry point '${ep.path}' but not found in checks definitions.`,\n );\n continue;\n }\n\n if (!shouldRunGate(checkConfig, isCI)) continue;\n\n const workingDirectory =\n checkConfig.working_directory === 'entrypoint'\n ? ep.path\n : checkConfig.working_directory || ep.path;\n const jobKey = `check:${checkName}:${workingDirectory}`;\n\n if (seenJobs.has(jobKey)) continue;\n seenJobs.add(jobKey);\n\n jobs.push({\n id: `check:${workingDirectory}:${checkName}`,\n type: 'check',\n name: checkName,\n entryPoint: ep.path,\n gateConfig: checkConfig,\n workingDirectory,\n });\n }\n }\n\n private collectReviewJobs(\n ep: ExpandedEntryPoint,\n isCI: boolean,\n jobs: Job[],\n ): void {\n if (!ep.config.reviews) return;\n\n for (const reviewName of ep.config.reviews) {\n const reviewConfig = this.config.reviews[reviewName];\n if (!reviewConfig) {\n console.warn(\n `Warning: Review gate '${reviewName}' configured in entry point '${ep.path}' but not found in reviews definitions.`,\n );\n continue;\n }\n\n if (!shouldRunGate(reviewConfig, isCI)) continue;\n\n jobs.push({\n id: `review:${ep.path}:${reviewName}`,\n type: 'review',\n name: reviewName,\n entryPoint: ep.path,\n gateConfig: reviewConfig,\n workingDirectory: ep.path,\n });\n }\n }\n}\n",
|
|
14
|
+
"import type {\n CheckGateConfig,\n LoadedConfig,\n LoadedReviewGateConfig,\n} from '../config/types.js';\nimport type { ExpandedEntryPoint } from './entry-point.js';\n\nexport type JobType = 'check' | 'review';\n\nexport interface Job {\n id: string; // unique id for logging/tracking\n type: JobType;\n name: string;\n entryPoint: string;\n gateConfig: CheckGateConfig | LoadedReviewGateConfig;\n workingDirectory: string;\n}\n\n/** Check if a gate should run in the current environment. */\nfunction shouldRunGate(\n gateConfig: { run_in_ci?: boolean; run_locally?: boolean },\n isCI: boolean,\n): boolean {\n if (isCI && !gateConfig.run_in_ci) return false;\n if (!(isCI || gateConfig.run_locally)) return false;\n return true;\n}\n\nexport class JobGenerator {\n constructor(\n private config: LoadedConfig,\n private enableReviews: Set<string> = new Set(),\n ) {}\n\n generateJobs(expandedEntryPoints: ExpandedEntryPoint[]): Job[] {\n const jobs: Job[] = [];\n const seenJobs = new Set<string>();\n const isCI =\n process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true';\n\n for (const ep of expandedEntryPoints) {\n this.collectCheckJobs(ep, isCI, seenJobs, jobs);\n this.collectReviewJobs(ep, isCI, jobs);\n }\n\n return jobs;\n }\n\n private collectCheckJobs(\n ep: ExpandedEntryPoint,\n isCI: boolean,\n seenJobs: Set<string>,\n jobs: Job[],\n ): void {\n if (!ep.config.checks) return;\n\n for (const checkName of ep.config.checks) {\n const checkConfig = this.config.checks[checkName];\n if (!checkConfig) {\n console.warn(\n `Warning: Check gate '${checkName}' configured in entry point '${ep.path}' but not found in checks definitions.`,\n );\n continue;\n }\n\n if (!shouldRunGate(checkConfig, isCI)) continue;\n\n const workingDirectory =\n checkConfig.working_directory === 'entrypoint'\n ? ep.path\n : checkConfig.working_directory || ep.path;\n const jobKey = `check:${checkName}:${workingDirectory}`;\n\n if (seenJobs.has(jobKey)) continue;\n seenJobs.add(jobKey);\n\n jobs.push({\n id: `check:${workingDirectory}:${checkName}`,\n type: 'check',\n name: checkName,\n entryPoint: ep.path,\n gateConfig: checkConfig,\n workingDirectory,\n });\n }\n }\n\n private collectReviewJobs(\n ep: ExpandedEntryPoint,\n isCI: boolean,\n jobs: Job[],\n ): void {\n if (!ep.config.reviews) return;\n\n for (const reviewName of ep.config.reviews) {\n const reviewConfig = this.config.reviews[reviewName];\n if (!reviewConfig) {\n console.warn(\n `Warning: Review gate '${reviewName}' configured in entry point '${ep.path}' but not found in reviews definitions.`,\n );\n continue;\n }\n\n if (!shouldRunGate(reviewConfig, isCI)) continue;\n\n // Skip disabled reviews unless explicitly enabled via CLI override\n if (!(reviewConfig.enabled || this.enableReviews.has(reviewName)))\n continue;\n\n jobs.push({\n id: `review:${ep.path}:${reviewName}`,\n type: 'review',\n name: reviewName,\n entryPoint: ep.path,\n gateConfig: reviewConfig,\n workingDirectory: ep.path,\n });\n }\n }\n}\n",
|
|
15
15
|
"import { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport type { LoadedCheckGateConfig } from '../config/types.js';\nimport { MAX_BUFFER_BYTES } from '../constants.js';\nimport { resolveCheckCommand } from './resolve-check-command.js';\nimport type { GateResult } from './result.js';\n\nconst execAsync = promisify(exec);\n\nexport class CheckGateExecutor {\n async execute(\n jobId: string,\n config: LoadedCheckGateConfig,\n workingDirectory: string,\n logger: (output: string) => Promise<void>,\n options?: { baseBranch?: string; isRerun?: boolean },\n ): Promise<GateResult> {\n const startTime = Date.now();\n\n const command = resolveCheckCommand(config, options);\n\n try {\n await logger(\n `[${new Date().toISOString()}] Starting check: ${config.name}\\n`,\n );\n await logger(`Executing command: ${command}\\n`);\n await logger(`Working directory: ${workingDirectory}\\n\\n`);\n\n const { stdout, stderr } = await execAsync(command, {\n cwd: workingDirectory,\n timeout: config.timeout ? config.timeout * 1000 : undefined,\n maxBuffer: MAX_BUFFER_BYTES,\n });\n\n if (stdout) await logger(stdout);\n if (stderr) await logger(`\\nSTDERR:\\n${stderr}`);\n\n const result: GateResult = {\n jobId,\n status: 'pass',\n duration: Date.now() - startTime,\n message: 'Command exited with code 0',\n };\n\n await logger(`Result: ${result.status} - ${result.message}\\n`);\n return result;\n } catch (error: unknown) {\n const err = error as {\n stdout?: string;\n stderr?: string;\n message?: string;\n signal?: string;\n code?: number;\n };\n if (err.stdout) await logger(err.stdout);\n if (err.stderr) await logger(`\\nSTDERR:\\n${err.stderr}`);\n\n await logger(`\\nCommand failed: ${err.message}`);\n\n // If it's a timeout\n if (err.signal === 'SIGTERM' && config.timeout) {\n const result: GateResult = {\n jobId,\n status: 'fail',\n duration: Date.now() - startTime,\n message: `Timed out after ${config.timeout}s`,\n fixInstructions: config.fixInstructionsContent,\n fixWithSkill: config.fixWithSkill,\n };\n await logger(`Result: ${result.status} - ${result.message}\\n`);\n await this.logFixInfo(config, logger);\n return result;\n }\n\n // If it's a non-zero exit code\n if (typeof err.code === 'number') {\n const result: GateResult = {\n jobId,\n status: 'fail',\n duration: Date.now() - startTime,\n message: `Exited with code ${err.code}`,\n fixInstructions: config.fixInstructionsContent,\n fixWithSkill: config.fixWithSkill,\n };\n await logger(`Result: ${result.status} - ${result.message}\\n`);\n await this.logFixInfo(config, logger);\n return result;\n }\n\n // Other errors\n const result: GateResult = {\n jobId,\n status: 'error',\n duration: Date.now() - startTime,\n message: err.message || 'Unknown error',\n fixInstructions: config.fixInstructionsContent,\n fixWithSkill: config.fixWithSkill,\n };\n await logger(`Result: ${result.status} - ${result.message}\\n`);\n await this.logFixInfo(config, logger);\n return result;\n }\n }\n\n private async logFixInfo(\n config: LoadedCheckGateConfig,\n logger: (output: string) => Promise<void>,\n ): Promise<void> {\n if (config.fixInstructionsContent) {\n await logger(\n `\\n--- Fix Instructions ---\\n${config.fixInstructionsContent}\\n`,\n );\n }\n if (config.fixWithSkill) {\n await logger(`\\n--- Fix Skill: ${config.fixWithSkill} ---\\n`);\n }\n }\n}\n",
|
|
16
16
|
"/** Maximum buffer size for child process output (10 MB). */\nexport const MAX_BUFFER_BYTES = 10 * 1024 * 1024;\n",
|
|
17
17
|
"import type { LoadedCheckGateConfig } from '../config/types.js';\n\n/**\n * Resolves which command to execute for a check gate, selecting rerun_command\n * when in rerun mode and performing variable substitution.\n */\nexport function resolveCheckCommand(\n config: Pick<LoadedCheckGateConfig, 'command' | 'rerun_command'>,\n options?: { baseBranch?: string; isRerun?: boolean },\n): string {\n const rawCommand =\n options?.isRerun && config.rerun_command\n ? config.rerun_command\n : config.command;\n let result = rawCommand;\n const baseBranch = options?.baseBranch;\n if (baseBranch) {\n result = result.replace(/\\$\\{BASE_BRANCH\\}/g, () => baseBranch);\n }\n return result;\n}\n",
|
|
@@ -25,18 +25,19 @@
|
|
|
25
25
|
"import fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\nimport path from 'node:path';\nimport {\n configure,\n getLogger,\n type LogRecord,\n type Logger as LogTapeLogger,\n} from '@logtape/logtape';\nimport { createConsoleSink } from './sinks/console-sink.js';\n\n/**\n * Logger modes that determine sink configuration:\n * - \"interactive\": Console output to stderr (file capture via console-log.ts)\n * - \"stop-hook\": NO console output (JSON protocol on stdout must be clean)\n * - \"ci\": Console output to stderr\n */\nexport type LoggerMode = 'interactive' | 'stop-hook' | 'ci';\n\n/**\n * Log level options.\n */\nexport type LogLevel = 'debug' | 'info' | 'warning' | 'error';\n\n/**\n * App logger configuration options.\n */\nexport interface AppLoggerConfig {\n mode: LoggerMode;\n logDir?: string;\n level?: LogLevel;\n debugLog?: {\n enabled: boolean;\n maxSizeMb?: number;\n };\n}\n\n// Global state for cleanup (file descriptor for debug log, configuration flag)\nlet debugLogFd: number | null = null;\nlet isConfigured = false;\n\n/**\n * Safely serialize a value, handling circular references.\n */\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value);\n } catch {\n return '[Unserializable]';\n }\n}\n\n/**\n * Create a debug log sink that writes to .debug.log file.\n * Format matches existing DebugLogger: [ISO_TIMESTAMP] message\n */\nfunction createDebugLogSink(logDir: string): (record: LogRecord) => void {\n const debugLogPath = path.join(logDir, '.debug.log');\n\n // Open file for append\n debugLogFd = fs.openSync(\n debugLogPath,\n fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_APPEND,\n );\n\n return (record: LogRecord) => {\n if (debugLogFd === null) return;\n\n const timestamp = new Date(record.timestamp).toISOString();\n const level = record.level.toUpperCase();\n const category = record.category.join('.');\n const message = record.message\n .map((part) => (typeof part === 'string' ? part : safeStringify(part)))\n .join('');\n\n const line = `[${timestamp}] ${level} [${category}] ${message}\\n`;\n\n try {\n fs.writeSync(debugLogFd, line);\n } catch {\n // Suppress write errors\n }\n };\n}\n\n/**\n * Initialize the application logger with LogTape.\n *\n * IMPORTANT: In stop-hook mode, NO console output is generated.\n * stdout must remain clean for the JSON protocol response.\n * File logging is handled separately by console-log.ts which captures stderr.\n *\n * @param config - Logger configuration\n * @returns Promise that resolves when logger is configured\n */\nexport async function initLogger(config: AppLoggerConfig): Promise<void> {\n // Reset if already configured\n if (isConfigured) {\n await resetLogger();\n }\n\n const { mode, level = 'info', logDir, debugLog } = config;\n\n // Ensure log directory exists if we need it for debug log\n if (logDir && debugLog?.enabled) {\n await fsPromises.mkdir(logDir, { recursive: true });\n }\n\n // Build sink configuration\n const sinks: Record<string, (record: LogRecord) => void> = {};\n const activeSinks: string[] = [];\n\n // Console sink (only for interactive and ci modes)\n // Outputs to stderr, which gets captured by console-log.ts\n if (mode !== 'stop-hook') {\n sinks.console = createConsoleSink();\n activeSinks.push('console');\n }\n\n // Debug log sink (writes directly to .debug.log)\n if (logDir && debugLog?.enabled) {\n sinks.debugLog = createDebugLogSink(logDir);\n activeSinks.push('debugLog');\n }\n\n // Configure LogTape (reset: true needed if LogTape was previously configured)\n // IMPORTANT: Configure the meta logger to suppress its default stdout output.\n // Without this, LogTape writes \"LogTape loggers are configured...\" to stdout,\n // which breaks the stop-hook JSON protocol.\n try {\n await configure({\n sinks,\n loggers: [\n {\n category: ['gauntlet'],\n lowestLevel: level,\n sinks: activeSinks,\n },\n {\n // Suppress LogTape's internal meta logger (writes to stdout by default)\n category: ['logtape', 'meta'],\n lowestLevel: 'fatal',\n sinks: [],\n },\n ],\n reset: true,\n });\n isConfigured = true;\n } catch (error) {\n // Close debug log fd if initialization fails to prevent leaks\n if (debugLogFd !== null) {\n try {\n fs.closeSync(debugLogFd);\n } catch {\n // Ignore close errors\n }\n debugLogFd = null;\n }\n throw error;\n }\n}\n\n/**\n * Reset the logger configuration and close file handles.\n */\nexport async function resetLogger(): Promise<void> {\n if (debugLogFd !== null) {\n try {\n fs.closeSync(debugLogFd);\n } catch {\n // Ignore close errors\n }\n debugLogFd = null;\n }\n\n // Reset LogTape configuration (reset: true required after initial configure)\n // Also suppress meta logger to avoid stdout pollution\n await configure({\n sinks: {},\n loggers: [\n {\n category: ['logtape', 'meta'],\n lowestLevel: 'fatal',\n sinks: [],\n },\n ],\n reset: true,\n });\n isConfigured = false;\n}\n\n/**\n * Get the root application logger.\n */\nexport function getAppLogger(): LogTapeLogger {\n return getLogger(['gauntlet']);\n}\n\n/**\n * Get a child logger for a specific category.\n * Categories are hierarchical, e.g., [\"gauntlet\", \"runner\"] or [\"gauntlet\", \"gate\", \"check\"]\n *\n * @param category - The category path (after \"gauntlet\" prefix)\n */\nexport function getCategoryLogger(...category: string[]): LogTapeLogger {\n return getLogger(['gauntlet', ...category]);\n}\n\n/**\n * Check if the logger has been configured.\n */\nexport function isLoggerConfigured(): boolean {\n return isConfigured;\n}\n",
|
|
26
26
|
"import type { LogRecord, Sink } from '@logtape/logtape';\nimport chalk from 'chalk';\n\n/**\n * Safely serialize a value, handling circular references.\n */\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value);\n } catch {\n return '[Unserializable]';\n }\n}\n\n/**\n * Format a log record with chalk colors for console output.\n * Level prefixes: [DEBUG] dim, [INFO] blue, [WARN] yellow, [ERROR] red\n */\nfunction formatLogRecord(record: LogRecord): string {\n const level = record.level.toUpperCase();\n const category = record.category.join('.');\n const message = record.message\n .map((part) => (typeof part === 'string' ? part : safeStringify(part)))\n .join('');\n\n let levelStr: string;\n switch (record.level) {\n case 'debug':\n levelStr = chalk.dim(`[${level}]`);\n break;\n case 'info':\n levelStr = chalk.blue(`[${level}]`);\n break;\n case 'warning':\n levelStr = chalk.yellow(`[${level}]`);\n break;\n case 'error':\n case 'fatal':\n levelStr = chalk.red(`[${level}]`);\n break;\n default:\n levelStr = `[${level}]`;\n }\n\n const categoryStr = category ? chalk.dim(`[${category}]`) : '';\n\n return `${levelStr}${categoryStr} ${message}`;\n}\n\n/**\n * Create a console sink that outputs to stderr with chalk formatting.\n * Uses stderr to keep stdout clean for JSON protocol responses (stop-hook).\n */\nexport function createConsoleSink(): Sink {\n return (record: LogRecord) => {\n const formatted = formatLogRecord(record);\n console.error(formatted);\n };\n}\n",
|
|
27
27
|
"import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport {\n createWorkingTreeRef,\n readExecutionState,\n} from '../utils/execution-state.js';\n\n/** Window in milliseconds to detect rapid-fire blocks */\nexport const LOOP_WINDOW_MS = 60_000;\n\n/** Number of blocks within the window to trigger loop detection */\nexport const LOOP_THRESHOLD = 3;\n\n/** Filename for storing block timestamps */\nconst BLOCK_TIMESTAMPS_FILE = '.block-timestamps';\n\n/** Lock file for atomic timestamp updates */\nconst BLOCK_TIMESTAMPS_LOCK = '.block-timestamps.lock';\n\n/** Max time to wait for lock acquisition (ms) */\nconst LOCK_TIMEOUT_MS = 2000;\n\n/** Retry interval when waiting for lock (ms) */\nconst LOCK_RETRY_MS = 50;\n\n/**\n * Acquire a file-based lock using exclusive create (wx flag).\n * Returns a release function. Throws if lock cannot be acquired within timeout.\n */\nasync function acquireTimestampLock(\n logDir: string,\n): Promise<() => Promise<void>> {\n const lockPath = path.join(logDir, BLOCK_TIMESTAMPS_LOCK);\n const deadline = Date.now() + LOCK_TIMEOUT_MS;\n\n while (Date.now() < deadline) {\n try {\n const handle = await fs.open(lockPath, 'wx');\n await handle.close();\n return async () => {\n await fs.rm(lockPath, { force: true }).catch(() => {});\n };\n } catch (err: unknown) {\n const code = (err as { code?: string }).code;\n if (code !== 'EEXIST') throw err;\n // Lock held by another process — wait and retry\n await new Promise((r) => setTimeout(r, LOCK_RETRY_MS));\n }\n }\n // Timeout: another process may legitimately hold the lock — throw\n // so the caller can proceed with the original result safely.\n throw new Error('Could not acquire block-timestamps lock within timeout');\n}\n\n/**\n * Check if the log directory contains gate result files (indicating a\n * failed or in-progress run that hasn't been archived).\n *\n * Reuses the same detection logic as `hasExistingLogs()` in shared.ts —\n * looks for .log and .json files, ignoring dot-files, console.* files,\n * and the \"previous\" directory.\n */\nexport async function hasFailedRunLogs(logDir: string): Promise<boolean> {\n try {\n const entries = await fs.readdir(logDir);\n return entries.some(\n (f) =>\n (f.endsWith('.log') || f.endsWith('.json')) &&\n f !== 'previous' &&\n !f.startsWith('console.') &&\n !f.startsWith('.'),\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Check if the working tree has changed since the last passing run.\n *\n * Reads the stored `working_tree_ref` from `.execution_state`, creates\n * a new working tree ref via `git stash create`, and compares.\n * Returns true if changes exist (refs differ), false if identical.\n * Returns null if no execution state exists (caller should fall back).\n */\nexport async function hasChangesSinceLastRun(\n logDir: string,\n): Promise<boolean | null> {\n const state = await readExecutionState(logDir);\n if (!state?.working_tree_ref) {\n return null; // No execution state — caller should use fallback\n }\n\n try {\n const currentRef = await createWorkingTreeRef();\n return currentRef !== state.working_tree_ref;\n } catch {\n // If git fails, assume changes exist so the caller can block safely\n return true;\n }\n}\n\n/**\n * Check if the run interval has elapsed since the last gauntlet run.\n * Returns true if the interval has elapsed (should run/block).\n * Returns true if no execution state exists or state is corrupted.\n * Returns true if intervalMinutes is 0 (always run).\n */\nexport async function checkRunInterval(\n logDir: string,\n intervalMinutes: number,\n): Promise<boolean> {\n if (intervalMinutes <= 0) return true;\n\n const state = await readExecutionState(logDir);\n if (!state) return true;\n\n const lastRun = new Date(state.last_run_completed_at);\n if (Number.isNaN(lastRun.getTime())) return true;\n\n const elapsedMinutes = (Date.now() - lastRun.getTime()) / (1000 * 60);\n return elapsedMinutes >= intervalMinutes;\n}\n\n/**\n * Check if changes exist vs the base branch.\n * Used as fallback when no execution state exists.\n * Uses `git diff --name-only <baseBranch>...HEAD` to detect changes.\n */\nexport async function hasChangesVsBaseBranch(\n cwd: string,\n baseBranch: string,\n): Promise<boolean> {\n const { execFile } = await import('node:child_process');\n const { promisify } = await import('node:util');\n const execFileAsync = promisify(execFile);\n\n try {\n const { stdout } = await execFileAsync(\n 'git',\n ['diff', '--name-only', `${baseBranch}...HEAD`],\n { cwd },\n );\n return stdout.trim().length > 0;\n } catch {\n // If the base branch doesn't exist or git fails, assume changes exist\n return true;\n }\n}\n\n/**\n * Get the last run status from execution state.\n * Returns the status string if determinable, null otherwise.\n */\nexport async function getLastRunStatus(logDir: string): Promise<string | null> {\n const state = await readExecutionState(logDir);\n if (!state) return null;\n // ExecutionState has no status field yet — return null until schema is extended\n return null;\n}\n\n/**\n * Read block timestamps from the timestamps file.\n * Returns an empty array if the file is missing or corrupt.\n */\nexport async function readBlockTimestamps(logDir: string): Promise<number[]> {\n try {\n const filePath = path.join(logDir, BLOCK_TIMESTAMPS_FILE);\n const content = await fs.readFile(filePath, 'utf-8');\n const parsed = JSON.parse(content);\n if (!Array.isArray(parsed)) return [];\n return parsed.filter((ts): ts is number => typeof ts === 'number');\n } catch {\n return [];\n }\n}\n\n/**\n * Record a block timestamp: read existing timestamps, filter to the\n * detection window, append the current time, and write back.\n * Uses a file-based lock for atomicity under concurrent invocations.\n * Returns the updated (filtered + appended) array.\n */\nexport async function recordBlockTimestamp(logDir: string): Promise<number[]> {\n const release = await acquireTimestampLock(logDir);\n try {\n const now = Date.now();\n const existing = await readBlockTimestamps(logDir);\n const recent = existing.filter((ts) => now - ts < LOOP_WINDOW_MS);\n recent.push(now);\n const filePath = path.join(logDir, BLOCK_TIMESTAMPS_FILE);\n await fs.writeFile(filePath, JSON.stringify(recent), 'utf-8');\n return recent;\n } finally {\n await release();\n }\n}\n\n/**\n * Reset (delete) the block timestamps file.\n * Called when a non-blocking result occurs, indicating the loop is resolved.\n */\nexport async function resetBlockTimestamps(logDir: string): Promise<void> {\n try {\n const filePath = path.join(logDir, BLOCK_TIMESTAMPS_FILE);\n await fs.rm(filePath, { force: true });\n } catch {\n // Best-effort cleanup — ignore errors\n }\n}\n",
|
|
28
|
-
"import { spawn } from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { getDebugLogger } from './debug-log.js';\n\nconst EXECUTION_STATE_FILENAME = '.execution_state';\nconst SESSION_REF_FILENAME = '.session_ref';\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n // Use loose equality to check both null and undefined in one comparison\n if (value == null) return false;\n if (Array.isArray(value)) return false;\n return typeof value === 'object';\n}\n\nfunction extractUnhealthyAdapters(\n rawData: Record<string, unknown> | null,\n): Record<string, UnhealthyAdapter> | undefined {\n const adapters = rawData?.unhealthy_adapters;\n if (!isPlainRecord(adapters)) {\n return undefined;\n }\n return adapters as Record<string, UnhealthyAdapter>;\n}\n\nexport interface UnhealthyAdapter {\n marked_at: string;\n reason: string;\n}\n\nexport interface ExecutionState {\n last_run_completed_at: string;\n branch: string;\n commit: string;\n working_tree_ref?: string;\n unhealthy_adapters?: Record<string, UnhealthyAdapter>;\n}\n\n/**\n * Read the execution state from the log directory.\n * Returns null if the state file or directory doesn't exist.\n */\nfunction isValidStateData(data: unknown): data is Record<string, unknown> & {\n last_run_completed_at: string;\n branch: string;\n commit: string;\n} {\n if (typeof data !== 'object' || data === null) return false;\n const record = data as Record<string, unknown>;\n return (\n typeof record.last_run_completed_at === 'string' &&\n typeof record.branch === 'string' &&\n typeof record.commit === 'string'\n );\n}\n\nexport async function readExecutionState(\n logDir: string,\n): Promise<ExecutionState | null> {\n try {\n const statePath = path.join(logDir, EXECUTION_STATE_FILENAME);\n const content = await fs.readFile(statePath, 'utf-8');\n const data = JSON.parse(content) as unknown;\n\n if (!isValidStateData(data)) return null;\n\n const state: ExecutionState = {\n last_run_completed_at: data.last_run_completed_at,\n branch: data.branch,\n commit: data.commit,\n };\n\n if (typeof data.working_tree_ref === 'string') {\n state.working_tree_ref = data.working_tree_ref;\n }\n\n if (\n data.unhealthy_adapters &&\n typeof data.unhealthy_adapters === 'object'\n ) {\n state.unhealthy_adapters = data.unhealthy_adapters as Record<\n string,\n UnhealthyAdapter\n >;\n }\n\n return state;\n } catch {\n return null;\n }\n}\n\n/**\n * Create a stash SHA that captures the current working tree state.\n * Uses `git stash create --include-untracked` which creates a stash commit\n * without modifying the working tree.\n * Returns the stash SHA, or HEAD SHA if working tree is clean.\n */\n/** Resolve a stash create result: use stash SHA, or fall back to HEAD. */\nasync function resolveStashResult(\n code: number | null,\n stdout: string,\n): Promise<string> {\n if (code === 0) {\n const sha = stdout.trim();\n if (sha) return sha;\n return getCurrentCommit();\n }\n // Non-zero exit: try HEAD as fallback\n return getCurrentCommit().catch(() => {\n throw new Error(`git stash create failed with code ${code}`);\n });\n}\n\nexport async function createWorkingTreeRef(): Promise<string> {\n return new Promise((resolve, reject) => {\n const child = spawn('git', ['stash', 'create', '--include-untracked'], {\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n child.stdout.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.on('close', (code) => {\n resolveStashResult(code, stdout).then(resolve, reject);\n });\n\n child.on('error', reject);\n });\n}\n\n/**\n * Write the execution state to the log directory.\n * Records the current branch, commit SHA, working tree ref, and timestamp.\n * Also cleans up legacy .session_ref file if it exists.\n */\nexport async function writeExecutionState(logDir: string): Promise<void> {\n const statePath = path.join(logDir, EXECUTION_STATE_FILENAME);\n const [branch, commit, workingTreeRef, rawState] = await Promise.all([\n getCurrentBranch(),\n getCurrentCommit(),\n createWorkingTreeRef(),\n readRawState(statePath),\n ]);\n const existingUnhealthy = extractUnhealthyAdapters(rawState);\n\n const state: ExecutionState = {\n last_run_completed_at: new Date().toISOString(),\n branch,\n commit,\n working_tree_ref: workingTreeRef,\n };\n\n // Preserve unhealthy_adapters from existing state\n if (existingUnhealthy) {\n state.unhealthy_adapters = existingUnhealthy;\n }\n\n // Log changed fields (skip last_run_completed_at since every log line is timestamped)\n const changes: Record<string, string> = {};\n const oldState = rawState as Record<string, unknown> | null;\n if (oldState) {\n if (oldState.branch !== branch) changes.branch = branch;\n if (oldState.commit !== commit) changes.commit = commit;\n if (oldState.working_tree_ref !== workingTreeRef)\n changes.working_tree_ref = workingTreeRef;\n } else {\n // First write - log all fields\n changes.branch = branch;\n changes.commit = commit;\n changes.working_tree_ref = workingTreeRef;\n }\n await getDebugLogger()?.logStateWrite(changes);\n\n // Ensure the log directory exists\n await fs.mkdir(logDir, { recursive: true });\n await fs.writeFile(statePath, JSON.stringify(state, null, 2), 'utf-8');\n\n // Clean up legacy .session_ref file if it exists\n try {\n const sessionRefPath = path.join(logDir, SESSION_REF_FILENAME);\n await fs.rm(sessionRefPath, { force: true });\n } catch {\n // Ignore errors\n }\n}\n\n/**\n * Get the current git branch name.\n */\nexport async function getCurrentBranch(): Promise<string> {\n return new Promise((resolve, reject) => {\n const child = spawn('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n child.stdout.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve(stdout.trim());\n } else {\n reject(new Error(`git rev-parse failed with code ${code}`));\n }\n });\n\n child.on('error', reject);\n });\n}\n\n/**\n * Get the current HEAD commit SHA.\n */\nexport async function getCurrentCommit(): Promise<string> {\n return new Promise((resolve, reject) => {\n const child = spawn('git', ['rev-parse', 'HEAD'], {\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n child.stdout.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve(stdout.trim());\n } else {\n reject(new Error(`git rev-parse failed with code ${code}`));\n }\n });\n\n child.on('error', reject);\n });\n}\n\n/**\n * Check if a commit is an ancestor of a branch (i.e., the commit has been merged).\n * Uses `git merge-base --is-ancestor`.\n * Returns true if commit is reachable from branch.\n */\nexport async function isCommitInBranch(\n commit: string,\n branch: string,\n): Promise<boolean> {\n return new Promise((resolve) => {\n const child = spawn(\n 'git',\n ['merge-base', '--is-ancestor', commit, branch],\n { stdio: ['ignore', 'pipe', 'pipe'] },\n );\n\n child.on('close', (code) => {\n // Exit 0 = is ancestor (merged), exit 1 = not ancestor\n resolve(code === 0);\n });\n\n child.on('error', () => {\n resolve(false);\n });\n });\n}\n\n/**\n * Get the execution state filename (for use in clean operations).\n */\nexport function getExecutionStateFilename(): string {\n return EXECUTION_STATE_FILENAME;\n}\n\n/**\n * Check if the working tree has any changes (staged, unstaged, or untracked files).\n * Uses `git status --porcelain` which correctly reports all change types,\n * unlike `git stash create --include-untracked` which returns empty for untracked-only changes.\n */\nexport async function hasWorkingTreeChanges(): Promise<boolean> {\n return new Promise((resolve) => {\n const child = spawn('git', ['status', '--porcelain'], {\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n child.stdout.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve(stdout.trim().length > 0);\n } else {\n // If git status fails, assume changes exist to prevent accidental state deletion\n resolve(true);\n }\n });\n\n child.on('error', () => {\n resolve(true);\n });\n });\n}\n\n/**\n * Check if a git object (commit, tree, blob, etc.) exists in the repository.\n * Uses `git cat-file -t <sha>` to check object type.\n */\nexport async function gitObjectExists(sha: string): Promise<boolean> {\n return new Promise((resolve) => {\n const child = spawn('git', ['cat-file', '-t', sha], {\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n child.on('close', (code) => {\n resolve(code === 0);\n });\n\n child.on('error', () => {\n resolve(false);\n });\n });\n}\n\n/**\n * When a commit has been merged, check if working_tree_ref still scopes valid changes.\n */\nasync function resolveFixBaseForMergedCommit(\n working_tree_ref: string | undefined,\n): Promise<{ fixBase: string | null; warning?: string }> {\n if (!working_tree_ref) {\n return { fixBase: null };\n }\n const refExists = await gitObjectExists(working_tree_ref);\n if (!refExists) {\n return { fixBase: null };\n }\n return {\n fixBase: working_tree_ref,\n warning:\n 'Commit merged into base branch, using working tree ref for diff scope',\n };\n}\n\n/**\n * Resolve the fixBase for change detection based on execution state.\n * Used for post-clean runs to scope diffs to changes since the last passing run.\n *\n * Returns:\n * - working_tree_ref if valid (not gc'd) and commit not merged\n * - commit as fallback if working_tree_ref is gc'd\n * - null if state is stale (commit merged) or all refs are invalid\n */\nexport async function resolveFixBase(\n executionState: ExecutionState,\n baseBranch: string,\n): Promise<{ fixBase: string | null; warning?: string }> {\n const { commit, working_tree_ref } = executionState;\n\n // Check if commit has been merged into base branch (state is stale)\n const commitMerged = await isCommitInBranch(commit, baseBranch);\n if (commitMerged) {\n return resolveFixBaseForMergedCommit(working_tree_ref);\n }\n\n // Check if working_tree_ref exists\n if (working_tree_ref) {\n const refExists = await gitObjectExists(working_tree_ref);\n if (refExists) {\n // Use working tree ref for precise diff\n return { fixBase: working_tree_ref };\n }\n }\n\n // working_tree_ref doesn't exist or was gc'd, try commit as fallback\n const commitExists = await gitObjectExists(commit);\n if (commitExists) {\n return {\n fixBase: commit,\n warning: 'Session stash was garbage collected, using commit as fallback',\n };\n }\n\n // Everything is gone, fall back to base branch\n return { fixBase: null };\n}\n\nconst COOLDOWN_MS = 60 * 60 * 1000; // 1 hour\n\n/**\n * Check if an unhealthy adapter entry is still within the cooldown period.\n * Returns true if marked_at is less than 1 hour ago.\n * Invalid or missing timestamps default to \"expired\" (returns false).\n */\nexport function isAdapterCoolingDown(entry: UnhealthyAdapter): boolean {\n const markedAt = new Date(entry.marked_at).getTime();\n if (Number.isNaN(markedAt)) return false;\n return Date.now() - markedAt < COOLDOWN_MS;\n}\n\n/**\n * Get the unhealthy adapters map from execution state.\n * Returns an empty object if no unhealthy adapters are recorded.\n */\nexport async function getUnhealthyAdapters(\n logDir: string,\n): Promise<Record<string, UnhealthyAdapter>> {\n const statePath = path.join(logDir, EXECUTION_STATE_FILENAME);\n const rawState = await readRawState(statePath);\n return extractUnhealthyAdapters(rawState) ?? {};\n}\n\n/**\n * Read raw state data from the state file.\n * Returns null if the file doesn't exist or is invalid.\n */\nasync function readRawState(\n statePath: string,\n): Promise<Record<string, unknown> | null> {\n try {\n const content = await fs.readFile(statePath, 'utf-8');\n return JSON.parse(content) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\n/**\n * Mark an adapter as unhealthy in the execution state.\n * Reads the current state, upserts the entry, and writes back.\n */\nexport async function markAdapterUnhealthy(\n logDir: string,\n adapterName: string,\n reason: string,\n): Promise<void> {\n await getDebugLogger()?.logAdapterHealthChange(adapterName, false, reason);\n\n const statePath = path.join(logDir, EXECUTION_STATE_FILENAME);\n const rawData = (await readRawState(statePath)) ?? {};\n\n const adapters =\n (rawData.unhealthy_adapters as Record<string, UnhealthyAdapter>) ?? {};\n adapters[adapterName] = {\n marked_at: new Date().toISOString(),\n reason,\n };\n rawData.unhealthy_adapters = adapters;\n\n await fs.mkdir(logDir, { recursive: true });\n await fs.writeFile(statePath, JSON.stringify(rawData, null, 2), 'utf-8');\n}\n\n/**\n * Mark an adapter as healthy by removing it from the unhealthy list.\n * Reads the current state, removes the entry, and writes back.\n */\nexport async function markAdapterHealthy(\n logDir: string,\n adapterName: string,\n): Promise<void> {\n await getDebugLogger()?.logAdapterHealthChange(adapterName, true);\n\n const statePath = path.join(logDir, EXECUTION_STATE_FILENAME);\n const rawData = await readRawState(statePath);\n if (!rawData) return;\n\n const adapters = rawData.unhealthy_adapters as\n | Record<string, UnhealthyAdapter>\n | undefined;\n if (!(adapters && adapterName in adapters)) return;\n\n delete adapters[adapterName];\n if (Object.keys(adapters).length === 0) {\n delete rawData.unhealthy_adapters;\n } else {\n rawData.unhealthy_adapters = adapters;\n }\n\n await fs.writeFile(statePath, JSON.stringify(rawData, null, 2), 'utf-8');\n}\n\n/**\n * Delete the execution state file.\n * Used when auto-clean resets state due to context change.\n */\nexport async function deleteExecutionState(logDir: string): Promise<void> {\n try {\n await getDebugLogger()?.logStateDelete();\n const statePath = path.join(logDir, EXECUTION_STATE_FILENAME);\n await fs.rm(statePath, { force: true });\n } catch {\n // Ignore errors\n }\n}\n",
|
|
28
|
+
"import { execFile, spawn } from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { StringDecoder } from 'node:string_decoder';\nimport { getDebugLogger } from './debug-log.js';\n\nconst EXECUTION_STATE_FILENAME = '.execution_state';\nconst SESSION_REF_FILENAME = '.session_ref';\n\nfunction getStatePath(logDir: string): string {\n return path.join(logDir, EXECUTION_STATE_FILENAME);\n}\n\n/**\n * Run a git command via spawn, returning trimmed stdout.\n * Rejects with an error if the process exits non-zero or errors.\n */\nfunction spawnGit(args: string[]): Promise<string> {\n return new Promise((resolve, reject) => {\n const child = spawn('git', args, { stdio: ['ignore', 'pipe', 'pipe'] });\n\n // StringDecoder correctly handles multi-byte UTF-8 characters split across\n // chunk boundaries. Both pipes are consumed to prevent OS buffer deadlock (~64 KB).\n const stdoutDecoder = new StringDecoder('utf8');\n const stderrDecoder = new StringDecoder('utf8');\n let stdout = '';\n child.stdout.on('data', (chunk: Buffer | string) => {\n stdout += typeof chunk === 'string' ? chunk : stdoutDecoder.write(chunk);\n });\n\n let stderr = '';\n child.stderr.on('data', (chunk: Buffer | string) => {\n stderr += typeof chunk === 'string' ? chunk : stderrDecoder.write(chunk);\n });\n\n child.on('close', (code) => {\n // Flush decoders to emit any bytes buffered at stream end.\n stdout += stdoutDecoder.end();\n stderr += stderrDecoder.end();\n if (code === 0) resolve(stdout.trim());\n else {\n const detail = stderr.trim();\n reject(\n new Error(\n detail\n ? `git ${args.join(' ')} failed with code ${code}: ${detail}`\n : `git ${args.join(' ')} failed with code ${code}`,\n ),\n );\n }\n });\n\n child.on('error', reject);\n });\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n // Use loose equality to check both null and undefined in one comparison\n if (value == null) return false;\n if (Array.isArray(value)) return false;\n return typeof value === 'object';\n}\n\nfunction extractUnhealthyAdapters(\n rawData: Record<string, unknown> | null,\n): Record<string, UnhealthyAdapter> | undefined {\n const adapters = rawData?.unhealthy_adapters;\n if (!isPlainRecord(adapters)) {\n return undefined;\n }\n return adapters as Record<string, UnhealthyAdapter>;\n}\n\nexport interface UnhealthyAdapter {\n marked_at: string;\n reason: string;\n}\n\nexport interface ExecutionState {\n last_run_completed_at: string;\n branch: string;\n commit: string;\n working_tree_ref?: string;\n unhealthy_adapters?: Record<string, UnhealthyAdapter>;\n}\n\n/**\n * Read the execution state from the log directory.\n * Returns null if the state file or directory doesn't exist.\n */\nfunction isValidStateData(data: unknown): data is Record<string, unknown> & {\n last_run_completed_at: string;\n branch: string;\n commit: string;\n} {\n if (typeof data !== 'object' || data === null) return false;\n const record = data as Record<string, unknown>;\n return (\n typeof record.last_run_completed_at === 'string' &&\n typeof record.branch === 'string' &&\n typeof record.commit === 'string'\n );\n}\n\nexport async function readExecutionState(\n logDir: string,\n): Promise<ExecutionState | null> {\n try {\n const statePath = getStatePath(logDir);\n const content = await fs.readFile(statePath, 'utf-8');\n const data = JSON.parse(content) as unknown;\n\n if (!isValidStateData(data)) return null;\n\n const state: ExecutionState = {\n last_run_completed_at: data.last_run_completed_at,\n branch: data.branch,\n commit: data.commit,\n };\n\n if (typeof data.working_tree_ref === 'string') {\n state.working_tree_ref = data.working_tree_ref;\n }\n\n if (\n data.unhealthy_adapters &&\n typeof data.unhealthy_adapters === 'object'\n ) {\n state.unhealthy_adapters = data.unhealthy_adapters as Record<\n string,\n UnhealthyAdapter\n >;\n }\n\n return state;\n } catch {\n return null;\n }\n}\n\n/**\n * Create a stash SHA that captures the current working tree state.\n * Uses `git stash push --include-untracked` which creates a proper 3-parent stash,\n * then immediately pops it to restore the working tree.\n * Returns the stash SHA, or HEAD SHA if working tree is clean or on error.\n */\nexport async function createWorkingTreeRef(): Promise<string> {\n const hasChanges = await hasWorkingTreeChanges();\n if (!hasChanges) {\n return getCurrentCommit();\n }\n\n // Returns trimmed stdout, or rejects on git error.\n const runGit = (args: string[]) =>\n new Promise<string>((resolve, reject) => {\n execFile('git', args, (error, stdout) => {\n if (error) reject(error);\n else resolve(stdout.trim());\n });\n });\n\n // Snapshot the pre-push stash top (empty string = no stash).\n // If stash@{0} is unchanged after push, git stashed nothing and we must\n // NOT pop — that would silently discard the user's pre-existing stash entry.\n const prevTop = await runGit(['rev-parse', '--verify', 'stash@{0}']).catch(\n () => '',\n );\n\n try {\n await runGit([\n 'stash',\n 'push',\n '--include-untracked',\n '-m',\n 'gauntlet-snapshot',\n ]);\n } catch {\n return getCurrentCommit();\n }\n\n const newTop = await runGit(['rev-parse', 'stash@{0}']).catch(() => '');\n // A new stash was created if newTop is non-empty and differs from prevTop.\n const createdStash = !!newTop && newTop !== prevTop;\n\n if (!createdStash) {\n // Push was a no-op or post-push rev-parse failed unexpectedly. If there was\n // a pre-existing stash (prevTop) but newTop is missing, we can't confirm the\n // push state — avoid destructive pop of an unrelated user stash.\n if (prevTop && !newTop) {\n console.error(\n 'gauntlet: unable to verify stash snapshot; leaving stash untouched. Run `git stash pop` manually if needed.',\n );\n }\n return getCurrentCommit();\n }\n\n try {\n await runGit(['stash', 'pop']);\n } catch {\n console.error(\n 'gauntlet: stash pop failed — run `git stash pop` manually to restore your working tree',\n );\n }\n\n return newTop;\n}\n\n/**\n * Write the execution state to the log directory.\n * Records the current branch, commit SHA, working tree ref, and timestamp.\n * Also cleans up legacy .session_ref file if it exists.\n */\nexport async function writeExecutionState(logDir: string): Promise<void> {\n const statePath = getStatePath(logDir);\n // createWorkingTreeRef runs first (sequentially) to avoid git index lock\n // contention between stash push/pop and the parallel rev-parse calls below.\n const workingTreeRef = await createWorkingTreeRef();\n const [branch, commit, rawState] = await Promise.all([\n getCurrentBranch(),\n getCurrentCommit(),\n readRawState(statePath),\n ]);\n const existingUnhealthy = extractUnhealthyAdapters(rawState);\n\n const state: ExecutionState = {\n last_run_completed_at: new Date().toISOString(),\n branch,\n commit,\n working_tree_ref: workingTreeRef,\n };\n\n // Preserve unhealthy_adapters from existing state\n if (existingUnhealthy) {\n state.unhealthy_adapters = existingUnhealthy;\n }\n\n // Log changed fields (skip last_run_completed_at since every log line is timestamped)\n const changes: Record<string, string> = {};\n const oldState = rawState as Record<string, unknown> | null;\n if (oldState) {\n if (oldState.branch !== branch) changes.branch = branch;\n if (oldState.commit !== commit) changes.commit = commit;\n if (oldState.working_tree_ref !== workingTreeRef)\n changes.working_tree_ref = workingTreeRef;\n } else {\n // First write - log all fields\n changes.branch = branch;\n changes.commit = commit;\n changes.working_tree_ref = workingTreeRef;\n }\n await getDebugLogger()?.logStateWrite(changes);\n\n // Ensure the log directory exists\n await fs.mkdir(logDir, { recursive: true });\n await fs.writeFile(statePath, JSON.stringify(state, null, 2), 'utf-8');\n\n // Clean up legacy .session_ref file if it exists\n try {\n const sessionRefPath = path.join(logDir, SESSION_REF_FILENAME);\n await fs.rm(sessionRefPath, { force: true });\n } catch {\n // Ignore errors\n }\n}\n\n/**\n * Get the current git branch name.\n */\nexport function getCurrentBranch(): Promise<string> {\n return spawnGit(['rev-parse', '--abbrev-ref', 'HEAD']);\n}\n\n/**\n * Get the current HEAD commit SHA.\n */\nexport function getCurrentCommit(): Promise<string> {\n return spawnGit(['rev-parse', 'HEAD']);\n}\n\n/**\n * Check if a commit is an ancestor of a branch (i.e., the commit has been merged).\n * Uses `git merge-base --is-ancestor`.\n * Returns true if commit is reachable from branch.\n */\nexport function isCommitInBranch(\n commit: string,\n branch: string,\n): Promise<boolean> {\n // Exit 0 = is ancestor (merged), exit 1 = not ancestor\n return spawnGit(['merge-base', '--is-ancestor', commit, branch])\n .then(() => true)\n .catch(() => false);\n}\n\n/**\n * Get the execution state filename (for use in clean operations).\n */\nexport function getExecutionStateFilename(): string {\n return EXECUTION_STATE_FILENAME;\n}\n\n/**\n * Check if the working tree has any changes (staged, unstaged, or untracked files).\n * Uses `git status --porcelain` which correctly reports all change types,\n * unlike `git stash create --include-untracked` which returns empty for untracked-only changes.\n */\nexport function hasWorkingTreeChanges(): Promise<boolean> {\n // Conservative default: assume changes on error to prevent accidental state deletion.\n return spawnGit(['status', '--porcelain'])\n .then((out) => out.length > 0)\n .catch(() => true);\n}\n\n/**\n * Check if a git object (commit, tree, blob, etc.) exists in the repository.\n * Uses `git cat-file -t <sha>` to check object type.\n */\nexport function gitObjectExists(sha: string): Promise<boolean> {\n return spawnGit(['cat-file', '-t', sha])\n .then(() => true)\n .catch(() => false);\n}\n\n/**\n * When a commit has been merged, check if working_tree_ref still scopes valid changes.\n */\nasync function resolveFixBaseForMergedCommit(\n working_tree_ref: string | undefined,\n): Promise<{ fixBase: string | null; warning?: string }> {\n if (!working_tree_ref) {\n return { fixBase: null };\n }\n const refExists = await gitObjectExists(working_tree_ref);\n if (!refExists) {\n return { fixBase: null };\n }\n return {\n fixBase: working_tree_ref,\n warning:\n 'Commit merged into base branch, using working tree ref for diff scope',\n };\n}\n\n/**\n * Resolve the fixBase for change detection based on execution state.\n * Used for post-clean runs to scope diffs to changes since the last passing run.\n *\n * Returns:\n * - working_tree_ref if valid (not gc'd) and commit not merged\n * - commit as fallback if working_tree_ref is gc'd\n * - null if state is stale (commit merged) or all refs are invalid\n */\nexport async function resolveFixBase(\n executionState: ExecutionState,\n baseBranch: string,\n): Promise<{ fixBase: string | null; warning?: string }> {\n const { commit, working_tree_ref } = executionState;\n\n // Check if commit has been merged into base branch (state is stale)\n const commitMerged = await isCommitInBranch(commit, baseBranch);\n if (commitMerged) {\n return resolveFixBaseForMergedCommit(working_tree_ref);\n }\n\n // Check if working_tree_ref exists\n if (working_tree_ref) {\n const refExists = await gitObjectExists(working_tree_ref);\n if (refExists) {\n // Use working tree ref for precise diff\n return { fixBase: working_tree_ref };\n }\n }\n\n // working_tree_ref doesn't exist or was gc'd, try commit as fallback\n const commitExists = await gitObjectExists(commit);\n if (commitExists) {\n return {\n fixBase: commit,\n warning: 'Session stash was garbage collected, using commit as fallback',\n };\n }\n\n // Everything is gone, fall back to base branch\n return { fixBase: null };\n}\n\nconst COOLDOWN_MS = 60 * 60 * 1000; // 1 hour\n\n/**\n * Check if an unhealthy adapter entry is still within the cooldown period.\n * Returns true if marked_at is less than 1 hour ago.\n * Invalid or missing timestamps default to \"expired\" (returns false).\n */\nexport function isAdapterCoolingDown(entry: UnhealthyAdapter): boolean {\n const markedAt = new Date(entry.marked_at).getTime();\n if (Number.isNaN(markedAt)) return false;\n return Date.now() - markedAt < COOLDOWN_MS;\n}\n\n/**\n * Get the unhealthy adapters map from execution state.\n * Returns an empty object if no unhealthy adapters are recorded.\n */\nexport async function getUnhealthyAdapters(\n logDir: string,\n): Promise<Record<string, UnhealthyAdapter>> {\n const statePath = getStatePath(logDir);\n const rawState = await readRawState(statePath);\n return extractUnhealthyAdapters(rawState) ?? {};\n}\n\n/**\n * Read raw state data from the state file.\n * Returns null if the file doesn't exist or is invalid.\n */\nasync function readRawState(\n statePath: string,\n): Promise<Record<string, unknown> | null> {\n try {\n const content = await fs.readFile(statePath, 'utf-8');\n return JSON.parse(content) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\n/**\n * Mark an adapter as unhealthy in the execution state.\n * Reads the current state, upserts the entry, and writes back.\n */\nexport async function markAdapterUnhealthy(\n logDir: string,\n adapterName: string,\n reason: string,\n): Promise<void> {\n await getDebugLogger()?.logAdapterHealthChange(adapterName, false, reason);\n\n const statePath = getStatePath(logDir);\n const rawData = (await readRawState(statePath)) ?? {};\n\n const adapters =\n (rawData.unhealthy_adapters as Record<string, UnhealthyAdapter>) ?? {};\n adapters[adapterName] = {\n marked_at: new Date().toISOString(),\n reason,\n };\n rawData.unhealthy_adapters = adapters;\n\n await fs.mkdir(logDir, { recursive: true });\n await fs.writeFile(statePath, JSON.stringify(rawData, null, 2), 'utf-8');\n}\n\n/**\n * Mark an adapter as healthy by removing it from the unhealthy list.\n * Reads the current state, removes the entry, and writes back.\n */\nexport async function markAdapterHealthy(\n logDir: string,\n adapterName: string,\n): Promise<void> {\n await getDebugLogger()?.logAdapterHealthChange(adapterName, true);\n\n const statePath = getStatePath(logDir);\n const rawData = await readRawState(statePath);\n if (!rawData) return;\n\n const adapters = rawData.unhealthy_adapters as\n | Record<string, UnhealthyAdapter>\n | undefined;\n if (!(adapters && adapterName in adapters)) return;\n\n delete adapters[adapterName];\n if (Object.keys(adapters).length === 0) {\n delete rawData.unhealthy_adapters;\n } else {\n rawData.unhealthy_adapters = adapters;\n }\n\n await fs.writeFile(statePath, JSON.stringify(rawData, null, 2), 'utf-8');\n}\n\n/**\n * Delete the execution state file.\n * Used when auto-clean resets state due to context change.\n */\nexport async function deleteExecutionState(logDir: string): Promise<void> {\n try {\n await getDebugLogger()?.logStateDelete();\n const statePath = getStatePath(logDir);\n await fs.rm(statePath, { force: true });\n } catch {\n // Ignore errors\n }\n}\n",
|
|
29
29
|
"import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { DebugLogConfig as GlobalDebugLogConfig } from '../config/global.js';\nimport type { DiffStats } from '../core/diff-stats.js';\n\nconst DEBUG_LOG_FILENAME = '.debug.log';\nconst DEBUG_LOG_BACKUP_FILENAME = '.debug.log.1';\n\nexport interface DebugLogConfig {\n enabled: boolean;\n maxSizeMb: number;\n}\n\n/**\n * Get the debug log filename constant.\n * Useful for excluding from clean operations.\n */\nexport function getDebugLogFilename(): string {\n return DEBUG_LOG_FILENAME;\n}\n\n/**\n * Get the debug log backup filename constant.\n * Useful for excluding from clean operations.\n */\nexport function getDebugLogBackupFilename(): string {\n return DEBUG_LOG_BACKUP_FILENAME;\n}\n\n/**\n * DebugLogger class for persistent debug logging.\n * Writes to a single, append-only file that survives clean operations.\n */\nexport class DebugLogger {\n private logPath: string;\n private backupPath: string;\n private maxSizeBytes: number;\n private enabled: boolean;\n private runStartTime: number | undefined;\n\n constructor(logDir: string, config: DebugLogConfig) {\n this.logPath = path.join(logDir, DEBUG_LOG_FILENAME);\n this.backupPath = path.join(logDir, DEBUG_LOG_BACKUP_FILENAME);\n this.maxSizeBytes = config.maxSizeMb * 1024 * 1024;\n this.enabled = config.enabled;\n }\n\n /**\n * Check if debug logging is enabled.\n */\n isEnabled(): boolean {\n return this.enabled;\n }\n\n /**\n * Log a CLI command invocation.\n */\n async logCommand(command: string, args: string[]): Promise<void> {\n const argsStr = args.length > 0 ? ` ${args.join(' ')}` : '';\n await this.write(`COMMAND ${command}${argsStr}`);\n }\n\n /**\n * Log the start of a run/check/review command.\n */\n async logRunStart(\n mode: 'full' | 'verification',\n changes: number,\n gates: number,\n ): Promise<void> {\n this.runStartTime = Date.now();\n await this.write(\n `RUN_START mode=${mode} changes=${changes} gates=${gates}`,\n );\n }\n\n /**\n * Log the start of a run/check/review command with diff statistics.\n */\n async logRunStartWithDiff(\n mode: 'full' | 'verification',\n diffStats: DiffStats,\n gates: number,\n ): Promise<void> {\n this.runStartTime = Date.now();\n const parts = [\n 'RUN_START',\n `mode=${mode}`,\n `base_ref=${diffStats.baseRef}`,\n `files_changed=${diffStats.total}`,\n `files_new=${diffStats.newFiles}`,\n `files_modified=${diffStats.modifiedFiles}`,\n `files_deleted=${diffStats.deletedFiles}`,\n `lines_added=${diffStats.linesAdded}`,\n `lines_removed=${diffStats.linesRemoved}`,\n `gates=${gates}`,\n ];\n await this.write(parts.join(' '));\n }\n\n /**\n * Log the start of preflight checks.\n */\n async logPreflightStart(jobCount: number): Promise<void> {\n await this.write(`PREFLIGHT_START jobs=${jobCount}`);\n }\n\n /**\n * Log the result of a single preflight check.\n */\n async logPreflightResult(\n _jobId: string,\n _status: 'pass' | 'fail',\n _reason?: string,\n ): Promise<void> {\n // TODO enable at debug level with logtape\n // const reasonStr = reason ? ` reason=${reason}` : \"\";\n // await this.write(`PREFLIGHT_CHECK ${jobId} status=${status}${reasonStr}`);\n }\n\n /**\n * Log the end of preflight checks.\n */\n async logPreflightEnd(\n runnable: number,\n failed: number,\n durationMs: number,\n ): Promise<void> {\n await this.write(\n `PREFLIGHT_END runnable=${runnable} failed=${failed} duration=${durationMs}ms`,\n );\n }\n\n /**\n * Log the result of a gate execution.\n * When `cli` is provided, the adapter name is included in the log entry.\n */\n async logGateResult(\n gateId: string,\n status: string,\n duration: number,\n opts?: { violations?: number; cli?: string },\n ): Promise<void> {\n const durationStr = `${(duration / 1000).toFixed(1)}s`;\n const cliStr = opts?.cli ? ` cli=${opts.cli}` : '';\n const violationsStr =\n opts?.violations !== undefined ? ` violations=${opts.violations}` : '';\n await this.write(\n `GATE_RESULT ${gateId}${cliStr} status=${status} duration=${durationStr}${violationsStr}`,\n );\n }\n\n /**\n * Log the end of a run/check/review command.\n */\n async logRunEnd(\n status: string,\n fixed: number,\n skipped: number,\n failed: number,\n iterations: number,\n ): Promise<void> {\n const durationStr =\n this.runStartTime !== undefined\n ? ` duration=${((Date.now() - this.runStartTime) / 1000).toFixed(1)}s`\n : '';\n await this.write(\n `RUN_END status=${status} fixed=${fixed} skipped=${skipped} failed=${failed} iterations=${iterations}${durationStr}`,\n );\n }\n\n /**\n * Log a clean operation.\n */\n async logClean(type: 'auto' | 'manual', reason: string): Promise<void> {\n await this.write(`CLEAN type=${type} reason=${reason}`);\n }\n\n /**\n * Log a stop hook decision.\n */\n async logStopHook(\n decision: 'allow' | 'block',\n reason: string,\n ): Promise<void> {\n await this.write(`STOP_HOOK decision=${decision} reason=${reason}`);\n }\n\n /**\n * Log a start hook invocation.\n */\n async logStartHook(adapter: string): Promise<void> {\n await this.write(`START_HOOK adapter=${adapter}`);\n }\n\n /**\n * Log stop hook diagnostic information.\n * Used to debug duplicate/unexpected stop hook invocations.\n */\n async logStopHookDiagnostics(diagnostics: {\n pid: number;\n ppid: number;\n envVarSet: boolean;\n processCwd: string;\n rawStdin: string;\n stdinSessionId?: string;\n stdinStopHookActive?: boolean;\n stdinCwd?: string;\n stdinHookEventName?: string;\n }): Promise<void> {\n const parts = [\n 'STOP_HOOK_DIAG',\n `pid=${diagnostics.pid}`,\n `ppid=${diagnostics.ppid}`,\n `env_var_set=${diagnostics.envVarSet}`,\n `session_id=${diagnostics.stdinSessionId ?? 'none'}`,\n `stop_hook_active=${diagnostics.stdinStopHookActive ?? 'none'}`,\n `hook_event=${diagnostics.stdinHookEventName ?? 'none'}`,\n `stdin_cwd=${diagnostics.stdinCwd ?? 'none'}`,\n `process_cwd=${diagnostics.processCwd}`,\n ];\n await this.write(parts.join(' '));\n }\n\n /**\n * Log a stop hook early exit decision.\n * These exits happen before full initialization, so a specific event\n * is needed to distinguish which code path was taken.\n */\n async logStopHookEarlyExit(\n source: string,\n status: string,\n detail?: string,\n ): Promise<void> {\n const detailStr = detail ? ` detail=${detail}` : '';\n await this.write(\n `STOP_HOOK_EARLY_EXIT source=${source} status=${status}${detailStr}`,\n );\n }\n\n /**\n * Log an execution state write, showing only changed fields.\n * Skips `last_run_completed_at` since every log line is already timestamped.\n */\n async logStateWrite(changes: Record<string, string>): Promise<void> {\n const parts = Object.entries(changes).map(\n ([key, value]) => `${key}=${value}`,\n );\n await this.write(\n `STATE_WRITE${parts.length > 0 ? ` ${parts.join(' ')}` : ''}`,\n );\n }\n\n /**\n * Log an execution state deletion.\n */\n async logStateDelete(): Promise<void> {\n await this.write('STATE_DELETE');\n }\n\n /**\n * Log an adapter health change.\n */\n async logAdapterHealthChange(\n adapter: string,\n healthy: boolean,\n reason?: string,\n ): Promise<void> {\n if (healthy) {\n await this.write(`STATE_ADAPTER_HEALTHY adapter=${adapter}`);\n } else {\n const reasonStr = reason ? ` reason=${reason}` : '';\n await this.write(\n `STATE_ADAPTER_UNHEALTHY adapter=${adapter}${reasonStr}`,\n );\n }\n }\n\n /**\n * Log a telemetry summary line from an adapter.\n * Persists the summary (e.g. \"[otel] cost=$0.12 in=5 out=100\")\n * so it survives log cleaning for longitudinal analysis.\n */\n async logTelemetry(entry: {\n adapter: string;\n summary: string;\n }): Promise<void> {\n await this.write(`TELEMETRY adapter=${entry.adapter} ${entry.summary}`);\n }\n\n /**\n * Write a log entry with timestamp.\n */\n private async write(message: string): Promise<void> {\n if (!this.enabled) {\n return;\n }\n\n const now = new Date();\n const timestamp = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}T${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}.${String(now.getMilliseconds()).padStart(3, '0')}`;\n const entry = `[${timestamp}] ${message}\\n`;\n\n try {\n // Check if rotation is needed before writing\n await this.rotateIfNeeded();\n\n // Ensure directory exists\n await fs.mkdir(path.dirname(this.logPath), { recursive: true });\n\n // Append the entry\n await fs.appendFile(this.logPath, entry, 'utf-8');\n } catch {\n // Silently fail - debug logging should never break the application\n }\n }\n\n /**\n * Rotate the log file if it exceeds the size limit.\n */\n private async rotateIfNeeded(): Promise<void> {\n try {\n const stat = await fs.stat(this.logPath);\n if (stat.size >= this.maxSizeBytes) {\n // Delete the backup if it exists\n try {\n await fs.rm(this.backupPath, { force: true });\n } catch {\n // Ignore\n }\n\n // Rename current log to backup\n await fs.rename(this.logPath, this.backupPath);\n }\n } catch {\n // File doesn't exist yet, no rotation needed\n }\n }\n}\n\n/**\n * Merge project and global debug log configs.\n * Project config overrides global config.\n * If neither specifies enabled, debug logging is disabled.\n */\nexport function mergeDebugLogConfig(\n projectConfig?: { enabled?: boolean; max_size_mb?: number },\n globalConfig?: GlobalDebugLogConfig,\n): DebugLogConfig {\n // Default values\n let enabled = false;\n let maxSizeMb = 10;\n\n // Apply global config if present\n if (globalConfig) {\n enabled = globalConfig.enabled;\n maxSizeMb = globalConfig.max_size_mb;\n }\n\n // Apply project config if present (overrides global)\n if (projectConfig !== undefined) {\n if (projectConfig.enabled !== undefined) {\n enabled = projectConfig.enabled;\n }\n if (projectConfig.max_size_mb !== undefined) {\n maxSizeMb = projectConfig.max_size_mb;\n }\n }\n\n return {\n enabled,\n maxSizeMb,\n };\n}\n\n// Singleton instance for global access\nlet debugLoggerInstance: DebugLogger | null = null;\n\n/**\n * Initialize the global debug logger.\n * Should be called early in command execution.\n */\nexport function initDebugLogger(logDir: string, config: DebugLogConfig): void {\n debugLoggerInstance = new DebugLogger(logDir, config);\n}\n\n/**\n * Get the global debug logger instance.\n * Returns null if not initialized.\n */\nexport function getDebugLogger(): DebugLogger | null {\n return debugLoggerInstance;\n}\n\n/**\n * Reset the global debug logger (for testing).\n */\nexport function resetDebugLogger(): void {\n debugLoggerInstance = null;\n}\n",
|
|
30
30
|
"/**\n * All possible outcomes from gauntlet operations.\n * Used by both the run executor and stop-hook - NO MAPPING REQUIRED.\n */\nexport type GauntletStatus =\n // Run outcomes (from executor)\n | 'passed' // All gates passed\n | 'passed_with_warnings' // Some issues were skipped\n | 'no_applicable_gates' // No gates matched current changes\n | 'no_changes' // No changes detected\n | 'failed' // Gates failed, retries remaining\n | 'retry_limit_exceeded' // Max retries reached\n | 'lock_conflict' // Another run in progress\n | 'error' // Unexpected error (includes config errors)\n // Stop-hook pre-checks (before running executor)\n | 'validation_required' // Changes need validation or previous run has unresolved failures\n | 'no_config' // No .gauntlet/config.yml found\n | 'stop_hook_active' // Infinite loop prevention\n | 'loop_detected' // Rapid-fire block loop detected\n | 'interval_not_elapsed' // Run interval hasn't passed\n | 'invalid_input' // Failed to parse hook JSON input\n | 'stop_hook_disabled'; // Stop hook disabled via configuration\n\nexport interface RunResult {\n status: GauntletStatus;\n /** Human-friendly message explaining the outcome */\n message: string;\n /** Number of gates that ran */\n gatesRun?: number;\n /** Number of gates that failed */\n gatesFailed?: number;\n /** Path to latest console log file */\n consoleLogPath?: string;\n /** Error message if status is \"error\" */\n errorMessage?: string;\n /** Interval minutes (when status is \"interval_not_elapsed\") */\n intervalMinutes?: number;\n /** Individual gate results (available when gates were executed) */\n gateResults?: Array<{\n jobId: string;\n status: 'pass' | 'fail' | 'error';\n logPath?: string;\n logPaths?: string[];\n subResults?: Array<{\n nameSuffix: string;\n status: 'pass' | 'fail' | 'error';\n logPath?: string;\n }>;\n }>;\n}\n\n/**\n * Determine if a status should block the stop hook.\n */\nexport function isBlockingStatus(status: GauntletStatus): boolean {\n return status === 'failed' || status === 'validation_required';\n}\n\n/**\n * Determine if a status indicates successful completion (exit code 0).\n */\nexport function isSuccessStatus(status: GauntletStatus): boolean {\n return (\n status === 'passed' ||\n status === 'passed_with_warnings' ||\n status === 'no_applicable_gates' ||\n status === 'no_changes'\n );\n}\n",
|
|
31
31
|
"/** Maps unified thinking budget levels to Claude MAX_THINKING_TOKENS values. */\nexport const CLAUDE_THINKING_TOKENS: Record<string, number> = {\n off: 0,\n low: 8000,\n medium: 16000,\n high: 31999,\n};\n\n/** Maps unified thinking budget levels to Codex model_reasoning_effort values. */\nexport const CODEX_REASONING_EFFORT: Record<string, string> = {\n off: 'minimal',\n low: 'low',\n medium: 'medium',\n high: 'high',\n};\n\n/** Maps unified thinking budget levels to Gemini thinkingBudget values. */\nexport const GEMINI_THINKING_BUDGET: Record<string, number> = {\n off: 0,\n low: 4096,\n medium: 8192,\n high: 24576,\n};\n",
|
|
32
|
-
"import { exec } from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\nimport { MAX_BUFFER_BYTES } from '../constants.js';\nimport { getDebugLogger } from '../utils/debug-log.js';\nimport { type CLIAdapter, runStreamingCommand } from './shared.js';\nimport { CODEX_REASONING_EFFORT } from './thinking-budget.js';\n\nconst execAsync = promisify(exec);\n\ninterface CodexUsage {\n inputTokens?: number;\n cachedInputTokens?: number;\n outputTokens?: number;\n toolCalls?: number;\n apiRequests?: number;\n}\n\n/** Parse a single JSONL line into a typed event, or undefined on failure. */\nfunction parseJsonlLine(\n line: string,\n): { type: string; [key: string]: unknown } | undefined {\n try {\n const obj = JSON.parse(line);\n if (obj && typeof obj.type === 'string') return obj;\n } catch {\n /* skip malformed lines */\n }\n return undefined;\n}\n\n/** Maps Codex turn usage JSON fields to CodexUsage fields. */\nconst TURN_USAGE_MAP: Array<[string, keyof CodexUsage]> = [\n ['input_tokens', 'inputTokens'],\n ['cached_input_tokens', 'cachedInputTokens'],\n ['output_tokens', 'outputTokens'],\n];\n\n/** Accumulate a turn.completed event's usage into totals. */\nfunction accumulateTurnUsage(\n event: { type: string; [key: string]: unknown },\n usage: CodexUsage,\n): void {\n const u = event.usage as Record<string, number | undefined> | undefined;\n if (!u) return;\n usage.apiRequests = (usage.apiRequests || 0) + 1;\n for (const [jsonKey, usageKey] of TURN_USAGE_MAP) {\n if (u[jsonKey] !== undefined) {\n usage[usageKey] = (usage[usageKey] || 0) + (u[jsonKey] ?? 0);\n }\n }\n}\n\n/** Check if an item.completed event represents a tool call (command, file, mcp). */\nfunction isToolCallItem(event: {\n type: string;\n [key: string]: unknown;\n}): boolean {\n const item = event.item as { type?: string } | undefined;\n if (!item?.type) return false;\n return (\n item.type === 'command_execution' ||\n item.type === 'file_change' ||\n item.type === 'mcp_tool_call'\n );\n}\n\n/** Extract the final agent message text from a completed item. */\nfunction extractAgentMessage(event: {\n type: string;\n [key: string]: unknown;\n}): string | undefined {\n const item = event.item as { type?: string; text?: string } | undefined;\n if (item?.type === 'agent_message' && typeof item.text === 'string') {\n return item.text;\n }\n return undefined;\n}\n\nconst SUMMARY_FIELDS: Array<[keyof CodexUsage, string]> = [\n ['inputTokens', 'in'],\n ['cachedInputTokens', 'cache'],\n ['outputTokens', 'out'],\n ['toolCalls', 'tool_calls'],\n ['apiRequests', 'api_requests'],\n];\n\nfunction formatCodexSummary(usage: CodexUsage): string | null {\n const parts = SUMMARY_FIELDS.filter(([key]) => usage[key] !== undefined).map(\n ([key, label]) => `${label}=${usage[key]}`,\n );\n return parts.length > 0 ? `[codex-telemetry] ${parts.join(' ')}` : null;\n}\n\n/** Process a single item.completed event, updating usage and returning any agent message. */\nfunction processItemCompleted(\n event: { type: string; [key: string]: unknown },\n usage: CodexUsage,\n): string | undefined {\n if (isToolCallItem(event)) {\n usage.toolCalls = (usage.toolCalls || 0) + 1;\n }\n return extractAgentMessage(event);\n}\n\n/** Route a parsed JSONL event to the appropriate handler, returning any agent message. */\nfunction processCodexEvent(\n event: { type: string; [key: string]: unknown },\n usage: CodexUsage,\n): string | undefined {\n if (event.type === 'turn.completed') {\n accumulateTurnUsage(event, usage);\n return undefined;\n }\n if (event.type === 'item.completed') {\n return processItemCompleted(event, usage);\n }\n return undefined;\n}\n\n/** Emit a telemetry summary to logs and debug log. */\nfunction emitCodexSummary(\n usage: CodexUsage,\n onLog?: (msg: string) => void,\n): void {\n const summary = formatCodexSummary(usage);\n if (!summary) return;\n onLog?.(`\\n${summary}\\n`);\n process.stderr.write(`${summary}\\n`);\n getDebugLogger()?.logTelemetry({ adapter: 'codex', summary });\n}\n\n/**\n * Parse JSONL output from `codex exec --json`, extracting the final agent\n * message, token usage, and tool call counts.\n */\nfunction parseCodexJsonl(\n raw: string,\n onLog?: (msg: string) => void,\n): { text: string; usage: CodexUsage } {\n const usage: CodexUsage = {};\n let lastAgentMessage = '';\n\n for (const line of raw.split('\\n')) {\n const event = parseJsonlLine(line.trim());\n if (!event) continue;\n const msg = processCodexEvent(event, usage);\n if (msg !== undefined) lastAgentMessage = msg;\n }\n\n emitCodexSummary(usage, onLog);\n return { text: lastAgentMessage, usage };\n}\n\nexport class CodexAdapter implements CLIAdapter {\n name = 'codex';\n\n async isAvailable(): Promise<boolean> {\n try {\n await execAsync('which codex');\n return true;\n } catch {\n return false;\n }\n }\n\n async checkHealth(): Promise<{\n available: boolean;\n status: 'healthy' | 'missing' | 'unhealthy';\n message?: string;\n }> {\n const available = await this.isAvailable();\n if (!available) {\n return {\n available: false,\n status: 'missing',\n message: 'Command not found',\n };\n }\n\n return { available: true, status: 'healthy', message: 'Installed' };\n }\n\n getProjectCommandDir(): string | null {\n // Codex only supports user-level prompts at ~/.codex/prompts/\n // No project-scoped commands available\n return null;\n }\n\n getUserCommandDir(): string | null {\n // Codex uses user-level prompts at ~/.codex/prompts/\n return path.join(os.homedir(), '.codex', 'prompts');\n }\n\n getProjectSkillDir(): string | null {\n return null;\n }\n\n getUserSkillDir(): string | null {\n return null;\n }\n\n getCommandExtension(): string {\n return '.md';\n }\n\n canUseSymlink(): boolean {\n // Codex uses the same Markdown format as our canonical file\n return true;\n }\n\n transformCommand(markdownContent: string): string {\n // Codex uses the same Markdown format as Claude, no transformation needed\n return markdownContent;\n }\n\n supportsHooks(): boolean {\n return false;\n }\n\n private buildArgs(allowToolUse?: boolean, thinkingBudget?: string): string[] {\n const args = [\n 'exec',\n '--cd',\n process.cwd(),\n '--sandbox',\n 'read-only',\n '-c',\n 'ask_for_approval=\"never\"',\n ];\n if (allowToolUse === false) {\n args.push('--disable', 'shell_tool');\n }\n if (thinkingBudget && thinkingBudget in CODEX_REASONING_EFFORT) {\n const effort = CODEX_REASONING_EFFORT[thinkingBudget];\n args.push('-c', `model_reasoning_effort=\"${effort}\"`);\n }\n args.push('--json', '-');\n return args;\n }\n\n async execute(opts: {\n prompt: string;\n diff: string;\n model?: string;\n timeoutMs?: number;\n onOutput?: (chunk: string) => void;\n allowToolUse?: boolean;\n thinkingBudget?: string;\n }): Promise<string> {\n const fullContent = `${opts.prompt}\\n\\n--- DIFF ---\\n${opts.diff}`;\n\n const tmpDir = os.tmpdir();\n const tmpFile = path.join(tmpDir
|
|
33
|
-
"import { exec } from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\nimport { MAX_BUFFER_BYTES } from '../constants.js';\nimport { getCategoryLogger } from '../output/app-logger.js';\nimport {\n resolveModelFromList,\n SAFE_MODEL_ID_PATTERN,\n} from './model-resolution.js';\nimport { type CLIAdapter, runStreamingCommand } from './shared.js';\n\nconst execAsync = promisify(exec);\n\nconst log = getCategoryLogger('cursor');\n\n/**\n * Parse `agent --list-models` output into an array of model IDs.\n * Each line has the format: \"model-id - Display Name\"\n */\nfunction parseModelList(output: string): string[] {\n return output\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .map((line) => {\n const dashIndex = line.indexOf(' - ');\n return dashIndex >= 0 ? line.substring(0, dashIndex).trim() : line.trim();\n })\n .filter((id) => id.length > 0);\n}\n\nexport class CursorAdapter implements CLIAdapter {\n name = 'cursor';\n\n async isAvailable(): Promise<boolean> {\n try {\n // Note: Cursor's CLI binary is named \"agent\", not \"cursor\"\n await execAsync('which agent');\n return true;\n } catch {\n return false;\n }\n }\n\n async checkHealth(): Promise<{\n available: boolean;\n status: 'healthy' | 'missing' | 'unhealthy';\n message?: string;\n }> {\n const available = await this.isAvailable();\n if (!available) {\n return {\n available: false,\n status: 'missing',\n message: 'Command not found',\n };\n }\n\n return { available: true, status: 'healthy', message: 'Ready' };\n }\n\n getProjectCommandDir(): string | null {\n // Cursor does not support custom commands\n return null;\n }\n\n getUserCommandDir(): string | null {\n // Cursor does not support custom commands\n return null;\n }\n\n getProjectSkillDir(): string | null {\n return null;\n }\n\n getUserSkillDir(): string | null {\n return null;\n }\n\n getCommandExtension(): string {\n return '.md';\n }\n\n canUseSymlink(): boolean {\n // Not applicable - no command directory support\n return false;\n }\n\n transformCommand(markdownContent: string): string {\n // Not applicable - no command directory support\n return markdownContent;\n }\n\n supportsHooks(): boolean {\n return true;\n }\n\n /**\n * Resolve a base model name to a specific model ID using `agent --list-models`.\n * Returns undefined if resolution fails or no matching model is found.\n *\n * Uses exec() directly (instead of the module-level execAsync) so that\n * spyOn(childProcess, \"exec\") can intercept calls in tests.\n */\n private async resolveModel(\n baseName: string,\n thinkingBudget?: string,\n ): Promise<string | undefined> {\n try {\n const stdout = await new Promise<string>((resolve, reject) => {\n exec('agent --list-models', { timeout: 10000 }, (error, stdout) => {\n if (error) reject(error);\n else resolve(stdout);\n });\n });\n const models = parseModelList(stdout);\n const preferThinking =\n thinkingBudget !== undefined && thinkingBudget !== 'off';\n const resolved = resolveModelFromList(models, {\n baseName,\n preferThinking,\n });\n if (resolved === undefined) {\n log.warn(`No matching model found for \"${baseName}\"`);\n return undefined;\n }\n if (!SAFE_MODEL_ID_PATTERN.test(resolved)) {\n log.warn(`Resolved model \"${resolved}\" contains unsafe characters`);\n return undefined;\n }\n return resolved;\n } catch (err) {\n log.warn(\n `Failed to resolve model \"${baseName}\": ${err instanceof Error ? err.message : String(err)}`,\n );\n return undefined;\n }\n }\n\n async execute(opts: {\n prompt: string;\n diff: string;\n model?: string;\n timeoutMs?: number;\n onOutput?: (chunk: string) => void;\n thinkingBudget?: string;\n }): Promise<string> {\n const fullContent = `${opts.prompt}\\n\\n--- DIFF ---\\n${opts.diff}`;\n\n const tmpDir = os.tmpdir();\n // Include process.pid for uniqueness across concurrent
|
|
32
|
+
"import { exec } from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\nimport { MAX_BUFFER_BYTES } from '../constants.js';\nimport { getDebugLogger } from '../utils/debug-log.js';\nimport { type CLIAdapter, runStreamingCommand } from './shared.js';\nimport { CODEX_REASONING_EFFORT } from './thinking-budget.js';\n\nconst execAsync = promisify(exec);\n\n// Module-level counter for unique tmp file names across parallel invocations\nlet _tmpCounter = 0;\n\ninterface CodexUsage {\n inputTokens?: number;\n cachedInputTokens?: number;\n outputTokens?: number;\n toolCalls?: number;\n apiRequests?: number;\n}\n\n/** Parse a single JSONL line into a typed event, or undefined on failure. */\nfunction parseJsonlLine(\n line: string,\n): { type: string; [key: string]: unknown } | undefined {\n try {\n const obj = JSON.parse(line);\n if (obj && typeof obj.type === 'string') return obj;\n } catch {\n /* skip malformed lines */\n }\n return undefined;\n}\n\n/** Maps Codex turn usage JSON fields to CodexUsage fields. */\nconst TURN_USAGE_MAP: Array<[string, keyof CodexUsage]> = [\n ['input_tokens', 'inputTokens'],\n ['cached_input_tokens', 'cachedInputTokens'],\n ['output_tokens', 'outputTokens'],\n];\n\n/** Accumulate a turn.completed event's usage into totals. */\nfunction accumulateTurnUsage(\n event: { type: string; [key: string]: unknown },\n usage: CodexUsage,\n): void {\n const u = event.usage as Record<string, number | undefined> | undefined;\n if (!u) return;\n usage.apiRequests = (usage.apiRequests || 0) + 1;\n for (const [jsonKey, usageKey] of TURN_USAGE_MAP) {\n if (u[jsonKey] !== undefined) {\n usage[usageKey] = (usage[usageKey] || 0) + (u[jsonKey] ?? 0);\n }\n }\n}\n\n/** Check if an item.completed event represents a tool call (command, file, mcp). */\nfunction isToolCallItem(event: {\n type: string;\n [key: string]: unknown;\n}): boolean {\n const item = event.item as { type?: string } | undefined;\n if (!item?.type) return false;\n return (\n item.type === 'command_execution' ||\n item.type === 'file_change' ||\n item.type === 'mcp_tool_call'\n );\n}\n\n/** Extract the final agent message text from a completed item. */\nfunction extractAgentMessage(event: {\n type: string;\n [key: string]: unknown;\n}): string | undefined {\n const item = event.item as { type?: string; text?: string } | undefined;\n if (item?.type === 'agent_message' && typeof item.text === 'string') {\n return item.text;\n }\n return undefined;\n}\n\nconst SUMMARY_FIELDS: Array<[keyof CodexUsage, string]> = [\n ['inputTokens', 'in'],\n ['cachedInputTokens', 'cache'],\n ['outputTokens', 'out'],\n ['toolCalls', 'tool_calls'],\n ['apiRequests', 'api_requests'],\n];\n\nfunction formatCodexSummary(usage: CodexUsage): string | null {\n const parts = SUMMARY_FIELDS.filter(([key]) => usage[key] !== undefined).map(\n ([key, label]) => `${label}=${usage[key]}`,\n );\n return parts.length > 0 ? `[codex-telemetry] ${parts.join(' ')}` : null;\n}\n\n/** Process a single item.completed event, updating usage and returning any agent message. */\nfunction processItemCompleted(\n event: { type: string; [key: string]: unknown },\n usage: CodexUsage,\n): string | undefined {\n if (isToolCallItem(event)) {\n usage.toolCalls = (usage.toolCalls || 0) + 1;\n }\n return extractAgentMessage(event);\n}\n\n/** Route a parsed JSONL event to the appropriate handler, returning any agent message. */\nfunction processCodexEvent(\n event: { type: string; [key: string]: unknown },\n usage: CodexUsage,\n): string | undefined {\n if (event.type === 'turn.completed') {\n accumulateTurnUsage(event, usage);\n return undefined;\n }\n if (event.type === 'item.completed') {\n return processItemCompleted(event, usage);\n }\n return undefined;\n}\n\n/** Emit a telemetry summary to logs and debug log. */\nfunction emitCodexSummary(\n usage: CodexUsage,\n onLog?: (msg: string) => void,\n): void {\n const summary = formatCodexSummary(usage);\n if (!summary) return;\n onLog?.(`\\n${summary}\\n`);\n process.stderr.write(`${summary}\\n`);\n getDebugLogger()?.logTelemetry({ adapter: 'codex', summary });\n}\n\n/**\n * Parse JSONL output from `codex exec --json`, extracting the final agent\n * message, token usage, and tool call counts.\n */\nfunction parseCodexJsonl(\n raw: string,\n onLog?: (msg: string) => void,\n): { text: string; usage: CodexUsage } {\n const usage: CodexUsage = {};\n let lastAgentMessage = '';\n\n for (const line of raw.split('\\n')) {\n const event = parseJsonlLine(line.trim());\n if (!event) continue;\n const msg = processCodexEvent(event, usage);\n if (msg !== undefined) lastAgentMessage = msg;\n }\n\n emitCodexSummary(usage, onLog);\n return { text: lastAgentMessage, usage };\n}\n\nexport class CodexAdapter implements CLIAdapter {\n name = 'codex';\n\n async isAvailable(): Promise<boolean> {\n try {\n await execAsync('which codex');\n return true;\n } catch {\n return false;\n }\n }\n\n async checkHealth(): Promise<{\n available: boolean;\n status: 'healthy' | 'missing' | 'unhealthy';\n message?: string;\n }> {\n const available = await this.isAvailable();\n if (!available) {\n return {\n available: false,\n status: 'missing',\n message: 'Command not found',\n };\n }\n\n return { available: true, status: 'healthy', message: 'Installed' };\n }\n\n getProjectCommandDir(): string | null {\n // Codex only supports user-level prompts at ~/.codex/prompts/\n // No project-scoped commands available\n return null;\n }\n\n getUserCommandDir(): string | null {\n // Codex uses user-level prompts at ~/.codex/prompts/\n return path.join(os.homedir(), '.codex', 'prompts');\n }\n\n getProjectSkillDir(): string | null {\n return null;\n }\n\n getUserSkillDir(): string | null {\n return null;\n }\n\n getCommandExtension(): string {\n return '.md';\n }\n\n canUseSymlink(): boolean {\n // Codex uses the same Markdown format as our canonical file\n return true;\n }\n\n transformCommand(markdownContent: string): string {\n // Codex uses the same Markdown format as Claude, no transformation needed\n return markdownContent;\n }\n\n supportsHooks(): boolean {\n return false;\n }\n\n private buildArgs(allowToolUse?: boolean, thinkingBudget?: string): string[] {\n const args = [\n 'exec',\n '--cd',\n process.cwd(),\n '--sandbox',\n 'read-only',\n '-c',\n 'ask_for_approval=\"never\"',\n ];\n if (allowToolUse === false) {\n args.push('--disable', 'shell_tool');\n }\n if (thinkingBudget && thinkingBudget in CODEX_REASONING_EFFORT) {\n const effort = CODEX_REASONING_EFFORT[thinkingBudget];\n args.push('-c', `model_reasoning_effort=\"${effort}\"`);\n }\n args.push('--json', '-');\n return args;\n }\n\n async execute(opts: {\n prompt: string;\n diff: string;\n model?: string;\n timeoutMs?: number;\n onOutput?: (chunk: string) => void;\n allowToolUse?: boolean;\n thinkingBudget?: string;\n }): Promise<string> {\n const fullContent = `${opts.prompt}\\n\\n--- DIFF ---\\n${opts.diff}`;\n\n const tmpDir = os.tmpdir();\n // Include process.pid and a counter for uniqueness across concurrent invocations\n // in the same process (parallel review gates can call execute() within the same\n // millisecond, causing Date.now() collisions and tmp file overwrites).\n const tmpFile = path.join(\n tmpDir,\n `gauntlet-codex-${process.pid}-${Date.now()}-${_tmpCounter++}.txt`,\n );\n await fs.writeFile(tmpFile, fullContent);\n\n const args = this.buildArgs(opts.allowToolUse, opts.thinkingBudget);\n\n const cleanup = () => fs.unlink(tmpFile).catch(() => {});\n\n // If onOutput callback is provided, use spawn for real-time streaming\n if (opts.onOutput) {\n const raw = await runStreamingCommand({\n command: 'codex',\n args,\n tmpFile,\n timeoutMs: opts.timeoutMs,\n onOutput: (chunk: string) => {\n opts.onOutput?.(chunk);\n },\n cleanup,\n });\n\n const { text } = parseCodexJsonl(raw, opts.onOutput);\n return text || raw.trimEnd();\n }\n\n // Otherwise use exec for buffered output\n try {\n const quoteArg = (a: string) => `\"${a.replace(/([\"\\\\$`])/g, '\\\\$1')}\"`;\n const cmd = `cat \"${tmpFile}\" | codex ${args.map(quoteArg).join(' ')}`;\n const { stdout } = await execAsync(cmd, {\n timeout: opts.timeoutMs,\n maxBuffer: MAX_BUFFER_BYTES,\n });\n const { text } = parseCodexJsonl(stdout);\n return text || stdout.trimEnd();\n } finally {\n await cleanup();\n }\n }\n}\n",
|
|
33
|
+
"import { exec } from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\nimport { MAX_BUFFER_BYTES } from '../constants.js';\nimport { getCategoryLogger } from '../output/app-logger.js';\nimport {\n resolveModelFromList,\n SAFE_MODEL_ID_PATTERN,\n} from './model-resolution.js';\nimport { type CLIAdapter, runStreamingCommand } from './shared.js';\n\nconst execAsync = promisify(exec);\n\n// Module-level counter for unique tmp file names across parallel invocations\nlet _tmpCounter = 0;\n\nconst log = getCategoryLogger('cursor');\n\n/**\n * Parse `agent --list-models` output into an array of model IDs.\n * Each line has the format: \"model-id - Display Name\"\n */\nfunction parseModelList(output: string): string[] {\n return output\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .map((line) => {\n const dashIndex = line.indexOf(' - ');\n return dashIndex >= 0 ? line.substring(0, dashIndex).trim() : line.trim();\n })\n .filter((id) => id.length > 0);\n}\n\nexport class CursorAdapter implements CLIAdapter {\n name = 'cursor';\n\n async isAvailable(): Promise<boolean> {\n try {\n // Note: Cursor's CLI binary is named \"agent\", not \"cursor\"\n await execAsync('which agent');\n return true;\n } catch {\n return false;\n }\n }\n\n async checkHealth(): Promise<{\n available: boolean;\n status: 'healthy' | 'missing' | 'unhealthy';\n message?: string;\n }> {\n const available = await this.isAvailable();\n if (!available) {\n return {\n available: false,\n status: 'missing',\n message: 'Command not found',\n };\n }\n\n return { available: true, status: 'healthy', message: 'Ready' };\n }\n\n getProjectCommandDir(): string | null {\n // Cursor does not support custom commands\n return null;\n }\n\n getUserCommandDir(): string | null {\n // Cursor does not support custom commands\n return null;\n }\n\n getProjectSkillDir(): string | null {\n return null;\n }\n\n getUserSkillDir(): string | null {\n return null;\n }\n\n getCommandExtension(): string {\n return '.md';\n }\n\n canUseSymlink(): boolean {\n // Not applicable - no command directory support\n return false;\n }\n\n transformCommand(markdownContent: string): string {\n // Not applicable - no command directory support\n return markdownContent;\n }\n\n supportsHooks(): boolean {\n return true;\n }\n\n /**\n * Resolve a base model name to a specific model ID using `agent --list-models`.\n * Returns undefined if resolution fails or no matching model is found.\n *\n * Uses exec() directly (instead of the module-level execAsync) so that\n * spyOn(childProcess, \"exec\") can intercept calls in tests.\n */\n private async resolveModel(\n baseName: string,\n thinkingBudget?: string,\n ): Promise<string | undefined> {\n try {\n const stdout = await new Promise<string>((resolve, reject) => {\n exec('agent --list-models', { timeout: 10000 }, (error, stdout) => {\n if (error) reject(error);\n else resolve(stdout);\n });\n });\n const models = parseModelList(stdout);\n const preferThinking =\n thinkingBudget !== undefined && thinkingBudget !== 'off';\n const resolved = resolveModelFromList(models, {\n baseName,\n preferThinking,\n });\n if (resolved === undefined) {\n log.warn(`No matching model found for \"${baseName}\"`);\n return undefined;\n }\n if (!SAFE_MODEL_ID_PATTERN.test(resolved)) {\n log.warn(`Resolved model \"${resolved}\" contains unsafe characters`);\n return undefined;\n }\n return resolved;\n } catch (err) {\n log.warn(\n `Failed to resolve model \"${baseName}\": ${err instanceof Error ? err.message : String(err)}`,\n );\n return undefined;\n }\n }\n\n async execute(opts: {\n prompt: string;\n diff: string;\n model?: string;\n timeoutMs?: number;\n onOutput?: (chunk: string) => void;\n thinkingBudget?: string;\n }): Promise<string> {\n const fullContent = `${opts.prompt}\\n\\n--- DIFF ---\\n${opts.diff}`;\n\n const tmpDir = os.tmpdir();\n // Include process.pid and a counter for uniqueness across concurrent invocations\n // in the same process (parallel review gates can call execute() within the same\n // millisecond, causing Date.now() collisions and tmp file overwrites).\n const tmpFile = path.join(\n tmpDir,\n `gauntlet-cursor-${process.pid}-${Date.now()}-${_tmpCounter++}.txt`,\n );\n await fs.writeFile(tmpFile, fullContent);\n\n // Cursor agent command reads from stdin\n // Note: As of the current version, the Cursor 'agent' CLI does not expose\n // flags for restricting tools or enforcing read-only mode (unlike claude's --allowedTools\n // or codex's --sandbox read-only). The agent is assumed to be repo-scoped and\n // safe for code review use. If Cursor adds such flags in the future, they should\n // be added here for defense-in-depth.\n\n // Resolve model if a base name is provided\n let resolvedModel: string | undefined;\n if (opts.model) {\n resolvedModel = await this.resolveModel(opts.model, opts.thinkingBudget);\n }\n\n const cleanup = () => fs.unlink(tmpFile).catch(() => {});\n\n // Build args with optional --model flag\n const args = ['--trust'];\n if (resolvedModel) {\n args.push('--model', resolvedModel);\n }\n\n // If onOutput callback is provided, use spawn for real-time streaming\n if (opts.onOutput) {\n return runStreamingCommand({\n command: 'agent',\n args,\n tmpFile,\n timeoutMs: opts.timeoutMs,\n onOutput: opts.onOutput,\n cleanup,\n });\n }\n\n // Otherwise use exec for buffered output\n // Shell command construction: We use exec() with shell piping\n // because the agent requires stdin input. The tmpFile path is system-controlled\n // (os.tmpdir() + Date.now() + process.pid), not user-supplied, eliminating injection risk.\n // Double quotes handle paths with spaces.\n try {\n const modelFlag = resolvedModel ? ` --model ${resolvedModel}` : '';\n const cmd = `cat \"${tmpFile}\" | agent --trust${modelFlag}`;\n const { stdout } = await execAsync(cmd, {\n timeout: opts.timeoutMs,\n maxBuffer: MAX_BUFFER_BYTES,\n });\n return stdout;\n } finally {\n // Cleanup errors are intentionally ignored - the tmp file will be cleaned up by OS\n await cleanup();\n }\n }\n}\n",
|
|
34
34
|
"// Tier suffixes to exclude from model resolution\nconst TIER_SUFFIXES = ['-low', '-high', '-xhigh', '-fast'];\n\n/** Only allow model IDs with alphanumeric chars, hyphens, and dots. */\nexport const SAFE_MODEL_ID_PATTERN = /^[a-zA-Z0-9._-]+$/;\n\n/**\n * Apply thinking preference filter to candidate models.\n * When preferThinking is true, narrows to -thinking variants if available.\n * When false, excludes -thinking variants.\n */\nfunction applyThinkingFilter(\n candidates: string[],\n preferThinking: boolean,\n): string[] {\n if (preferThinking) {\n const thinking = candidates.filter((id) => id.endsWith('-thinking'));\n return thinking.length > 0 ? thinking : candidates;\n }\n return candidates.filter((id) => !id.endsWith('-thinking'));\n}\n\n/** Compare two version tuples descending (higher version first). */\nfunction compareVersionsDesc(\n a: [number, number] | null,\n b: [number, number] | null,\n): number {\n if (!(a || b)) return 0;\n if (!a) return 1;\n if (!b) return -1;\n if (a[0] !== b[0]) return b[0] - a[0];\n return b[1] - a[1];\n}\n\n/**\n * Core model resolution logic shared between adapters.\n * Filters by base name segment, excludes tier variants, handles thinking\n * preference, sorts by version descending, and returns the best match.\n */\nexport function resolveModelFromList(\n allModels: string[],\n opts: { baseName: string; preferThinking: boolean },\n): string | undefined {\n const candidates = allModels\n .filter((id) => id.split('-').includes(opts.baseName))\n .filter((id) => !TIER_SUFFIXES.some((s) => id.endsWith(s)));\n\n if (candidates.length === 0) return undefined;\n\n const filtered = applyThinkingFilter(candidates, opts.preferThinking);\n if (filtered.length === 0) return undefined;\n\n filtered.sort((a, b) => {\n const vA = a.match(/(\\d+)\\.(\\d+)/);\n const vB = b.match(/(\\d+)\\.(\\d+)/);\n return compareVersionsDesc(\n vA ? [Number(vA[1]), Number(vA[2])] : null,\n vB ? [Number(vB[1]), Number(vB[2])] : null,\n );\n });\n\n return filtered[0];\n}\n",
|
|
35
35
|
"import { exec } from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\nimport { MAX_BUFFER_BYTES } from '../constants.js';\nimport { getDebugLogger } from '../utils/debug-log.js';\nimport { type CLIAdapter, runStreamingCommand } from './shared.js';\nimport { GEMINI_THINKING_BUDGET } from './thinking-budget.js';\n\nconst execAsync = promisify(exec);\n\ninterface GeminiTelemetryUsage {\n inputTokens?: number;\n outputTokens?: number;\n thoughtTokens?: number;\n cacheTokens?: number;\n toolTokens?: number;\n toolCalls?: number;\n toolContentChars?: number;\n apiRequests?: number;\n}\n\ntype TokenType = 'input' | 'output' | 'thought' | 'cache' | 'tool';\nconst TOKEN_TYPE_MAP: Record<TokenType, keyof GeminiTelemetryUsage> = {\n input: 'inputTokens',\n output: 'outputTokens',\n thought: 'thoughtTokens',\n cache: 'cacheTokens',\n tool: 'toolTokens',\n};\n\n// Gemini CLI telemetry file contains pretty-printed JSON objects (not OTLP).\n// The metric object has { resource, scopeMetrics: [{ scope, metrics }] }.\n// Each metric has { descriptor: { name, type }, dataPoints: [{ value, attributes }] }.\n\ninterface SdkDataPoint {\n value: number | { sum?: number };\n attributes?: Record<string, string | number | boolean>;\n}\n\ninterface SdkMetric {\n descriptor?: { name?: string };\n dataPoints?: SdkDataPoint[];\n}\n\ninterface SdkScopeMetrics {\n metrics?: SdkMetric[];\n}\n\nfunction extractTokenType(dp: SdkDataPoint): TokenType | null {\n const type =\n dp.attributes?.type ?? dp.attributes?.['gen_ai.token.type'] ?? null;\n return typeof type === 'string' && type in TOKEN_TYPE_MAP\n ? (type as TokenType)\n : null;\n}\n\nfunction extractValue(dp: SdkDataPoint): number {\n if (typeof dp.value === 'number') return dp.value;\n return dp.value?.sum ?? 0;\n}\n\nfunction processDataPoints(\n dataPoints: SdkDataPoint[],\n usage: GeminiTelemetryUsage,\n): void {\n for (const dp of dataPoints) {\n const tokenType = extractTokenType(dp);\n if (!tokenType) continue;\n const key = TOKEN_TYPE_MAP[tokenType];\n usage[key] = (usage[key] || 0) + extractValue(dp);\n }\n}\n\nconst TOKEN_METRIC_NAMES = new Set([\n 'gemini_cli.token.usage',\n 'gen_ai.client.token.usage',\n]);\n\n/**\n * Find [start, end) index pairs for each top-level `{…}` in a string\n * whose JSON string literals have already been blanked out.\n */\nfunction handleOpen(i: number, depth: number, start: number): [number, number] {\n return [depth + 1, depth === 0 ? i : start];\n}\n\nfunction handleClose(\n i: number,\n depth: number,\n start: number,\n ranges: Array<[number, number]>,\n): [number, number] {\n const next = depth - 1;\n if (next === 0 && start >= 0) {\n ranges.push([start, i + 1]);\n return [next, -1];\n }\n return [next, start];\n}\n\nfunction findObjectBoundaries(stripped: string): Array<[number, number]> {\n const ranges: Array<[number, number]> = [];\n let depth = 0;\n let start = -1;\n for (let i = 0; i < stripped.length; i++) {\n const ch = stripped[i];\n if (ch === '{') [depth, start] = handleOpen(i, depth, start);\n else if (ch === '}') [depth, start] = handleClose(i, depth, start, ranges);\n }\n return ranges;\n}\n\n/**\n * Parse top-level JSON objects from telemetry content.\n * Blanks string literals (preserving length) before brace-counting\n * so braces inside strings are ignored.\n */\nfunction parseJsonObjects(content: string): unknown[] {\n const stripped = content.replace(/\"(?:[^\"\\\\]|\\\\.)*\"/g, (m) =>\n ' '.repeat(m.length),\n );\n const objects: unknown[] = [];\n for (const [s, e] of findObjectBoundaries(stripped)) {\n try {\n objects.push(JSON.parse(content.slice(s, e)));\n } catch {\n // Skip malformed objects\n }\n }\n return objects;\n}\n\n/** Sum all data point values for a counter metric. */\nfunction sumDataPoints(dataPoints: SdkDataPoint[]): number {\n let total = 0;\n for (const dp of dataPoints) {\n total += extractValue(dp);\n }\n return total;\n}\n\n/** Route a single metric to the appropriate usage field. */\nfunction processMetric(metric: SdkMetric, usage: GeminiTelemetryUsage): void {\n const name = metric.descriptor?.name;\n if (!name) return;\n const dataPoints = metric.dataPoints ?? [];\n\n if (TOKEN_METRIC_NAMES.has(name)) {\n processDataPoints(dataPoints, usage);\n return;\n }\n if (name === 'gemini_cli.tool.call.count') {\n usage.toolCalls = (usage.toolCalls || 0) + sumDataPoints(dataPoints);\n return;\n }\n if (name === 'gemini_cli.api.request.count') {\n usage.apiRequests = (usage.apiRequests || 0) + sumDataPoints(dataPoints);\n }\n}\n\nfunction processMetricObject(data: unknown, usage: GeminiTelemetryUsage): void {\n const obj = data as { scopeMetrics?: SdkScopeMetrics[] };\n if (!obj?.scopeMetrics) return;\n for (const sm of obj.scopeMetrics) {\n for (const metric of sm.metrics ?? []) {\n processMetric(metric, usage);\n }\n }\n}\n\n/**\n * Extract tool call details from OTel log records.\n * The Gemini CLI emits `gemini_cli.tool_call` log events with\n * content_length attributes that reveal how much data tools read.\n */\ninterface SdkLogRecord {\n body?: { stringValue?: string };\n attributes?: Array<{\n key: string;\n value: { intValue?: string; stringValue?: string };\n }>;\n}\n\ninterface SdkScopeLogs {\n logRecords?: SdkLogRecord[];\n}\n\n/** Extract content_length from a tool_call log record, or 0 if absent. */\nfunction extractToolContentLength(record: SdkLogRecord): number {\n const attr = record.attributes?.find((a) => a.key === 'content_length');\n if (!attr?.value?.intValue) return 0;\n const len = parseInt(attr.value.intValue, 10);\n return Number.isNaN(len) ? 0 : len;\n}\n\n/** Sum content_length across all tool_call log records in a scope. */\nfunction sumToolContentChars(records: SdkLogRecord[]): number {\n let total = 0;\n for (const record of records) {\n if (record.body?.stringValue !== 'gemini_cli.tool_call') continue;\n total += extractToolContentLength(record);\n }\n return total;\n}\n\nfunction processLogObject(data: unknown, usage: GeminiTelemetryUsage): void {\n const obj = data as { scopeLogs?: SdkScopeLogs[] };\n if (!obj?.scopeLogs) return;\n for (const sl of obj.scopeLogs) {\n const chars = sumToolContentChars(sl.logRecords ?? []);\n if (chars > 0) {\n usage.toolContentChars = (usage.toolContentChars || 0) + chars;\n }\n }\n}\n\nasync function parseGeminiTelemetry(\n filePath: string,\n): Promise<GeminiTelemetryUsage> {\n const usage: GeminiTelemetryUsage = {};\n let content: string;\n\n try {\n content = await fs.readFile(filePath, 'utf-8');\n } catch {\n return usage;\n }\n\n for (const obj of parseJsonObjects(content)) {\n processMetricObject(obj, usage);\n processLogObject(obj, usage);\n }\n\n return usage;\n}\n\nconst SUMMARY_FIELDS: Array<[keyof GeminiTelemetryUsage, string]> = [\n ['inputTokens', 'in'],\n ['outputTokens', 'out'],\n ['thoughtTokens', 'thought'],\n ['cacheTokens', 'cache'],\n ['toolTokens', 'tool'],\n ['toolCalls', 'tool_calls'],\n ['toolContentChars', 'tool_content_chars'],\n ['apiRequests', 'api_requests'],\n];\n\nfunction formatGeminiSummary(usage: GeminiTelemetryUsage): string | null {\n const parts = SUMMARY_FIELDS.filter(([key]) => usage[key] !== undefined).map(\n ([key, label]) => `${label}=${usage[key]}`,\n );\n return parts.length > 0 ? `[telemetry] ${parts.join(' ')}` : null;\n}\n\nasync function logTelemetryToStderr(telemetryFile: string): Promise<void> {\n if (process.env.GEMINI_TELEMETRY_OUTFILE) return;\n const usage = await parseGeminiTelemetry(telemetryFile);\n const summary = formatGeminiSummary(usage);\n if (summary) {\n process.stderr.write(`${summary}\\n`);\n getDebugLogger()?.logTelemetry({ adapter: 'gemini', summary });\n }\n}\n\nexport class GeminiAdapter implements CLIAdapter {\n name = 'gemini';\n\n async isAvailable(): Promise<boolean> {\n try {\n await execAsync('which gemini');\n return true;\n } catch {\n return false;\n }\n }\n\n async checkHealth(): Promise<{\n available: boolean;\n status: 'healthy' | 'missing' | 'unhealthy';\n message?: string;\n }> {\n const available = await this.isAvailable();\n if (!available) {\n return {\n available: false,\n status: 'missing',\n message: 'Command not found',\n };\n }\n\n return { available: true, status: 'healthy', message: 'Installed' };\n }\n\n getProjectCommandDir(): string | null {\n return '.gemini/commands';\n }\n\n getUserCommandDir(): string | null {\n return path.join(os.homedir(), '.gemini', 'commands');\n }\n\n getProjectSkillDir(): string | null {\n return null;\n }\n\n getUserSkillDir(): string | null {\n return null;\n }\n\n getCommandExtension(): string {\n return '.toml';\n }\n\n canUseSymlink(): boolean {\n return false;\n }\n\n supportsHooks(): boolean {\n return false;\n }\n\n transformCommand(markdownContent: string): string {\n const fmMatch = markdownContent.match(/^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/);\n let description = 'Run the gauntlet verification suite';\n const body = fmMatch ? (fmMatch[2] ?? '') : markdownContent;\n\n if (fmMatch) {\n for (const line of (fmMatch[1] ?? '').split('\\n')) {\n const kv = line.match(/^description:\\s*(.*)$/);\n if (kv?.[1]) description = kv[1].trim();\n }\n }\n\n return `description = ${JSON.stringify(description)}\nprompt = \"\"\"\n${body.trim()}\n\"\"\"\n`;\n }\n\n private async logTelemetry(\n telemetryFile: string,\n onOutput: (chunk: string) => void,\n ): Promise<void> {\n if (process.env.GEMINI_TELEMETRY_OUTFILE) return;\n const usage = await parseGeminiTelemetry(telemetryFile);\n const summary = formatGeminiSummary(usage);\n if (summary) {\n onOutput(`\\n${summary}\\n`);\n process.stderr.write(`${summary}\\n`);\n getDebugLogger()?.logTelemetry({ adapter: 'gemini', summary });\n }\n }\n\n /**\n * Serialize access to .gemini/settings.json across concurrent Gemini instances.\n * When multiple Gemini adapters run in parallel (num_reviews > 1 with\n * cli_preference: [\"gemini\"]), each waits for the previous to finish\n * before writing its settings.\n */\n private static settingsLock: Promise<void> = Promise.resolve();\n\n private async applyThinkingSettings(\n budget: number,\n ): Promise<() => Promise<void>> {\n let releaseLock = () => {};\n const prev = GeminiAdapter.settingsLock;\n GeminiAdapter.settingsLock = new Promise((resolve) => {\n releaseLock = resolve;\n });\n await prev;\n\n const settingsPath = path.join(process.cwd(), '.gemini', 'settings.json');\n let backup: string | null = null;\n let existed = false;\n\n try {\n try {\n backup = await fs.readFile(settingsPath, 'utf-8');\n existed = true;\n } catch {\n // No existing file\n }\n\n const existing = backup ? JSON.parse(backup) : {};\n const merged = {\n ...existing,\n thinkingConfig: { ...existing.thinkingConfig, thinkingBudget: budget },\n };\n\n await fs.mkdir(path.dirname(settingsPath), { recursive: true });\n await fs.writeFile(settingsPath, JSON.stringify(merged, null, 2));\n } catch (err) {\n releaseLock();\n throw err;\n }\n\n return async () => {\n try {\n if (existed && backup !== null) {\n await fs.writeFile(settingsPath, backup);\n } else {\n await fs.unlink(settingsPath).catch(() => {});\n }\n } finally {\n releaseLock();\n }\n };\n }\n\n private buildTelemetryEnv(telemetryFile: string): Record<string, string> {\n const env: Record<string, string> = {};\n if (!process.env.GEMINI_TELEMETRY_ENABLED) {\n env.GEMINI_TELEMETRY_ENABLED = 'true';\n }\n if (!process.env.GEMINI_TELEMETRY_TARGET) {\n env.GEMINI_TELEMETRY_TARGET = 'local';\n }\n if (!process.env.GEMINI_TELEMETRY_OUTFILE) {\n env.GEMINI_TELEMETRY_OUTFILE = telemetryFile;\n }\n return env;\n }\n\n private buildArgs(allowToolUse?: boolean): string[] {\n const args = ['--sandbox'];\n if (allowToolUse !== false) {\n args.push(\n '--allowed-tools',\n 'read_file,list_directory,glob,search_file_content',\n );\n }\n args.push('--output-format', 'text');\n return args;\n }\n\n private async maybeApplyThinking(\n level?: string,\n ): Promise<(() => Promise<void>) | undefined> {\n if (!(level && level in GEMINI_THINKING_BUDGET)) return undefined;\n return this.applyThinkingSettings(GEMINI_THINKING_BUDGET[level] as number);\n }\n\n async execute(opts: {\n prompt: string;\n diff: string;\n model?: string;\n timeoutMs?: number;\n onOutput?: (chunk: string) => void;\n allowToolUse?: boolean;\n thinkingBudget?: string;\n }): Promise<string> {\n const fullContent = `${opts.prompt}\\n\\n--- DIFF ---\\n${opts.diff}`;\n\n const tmpDir = os.tmpdir();\n const tmpFile = path.join(\n tmpDir,\n `gauntlet-gemini-${process.pid}-${Date.now()}.txt`,\n );\n await fs.writeFile(tmpFile, fullContent);\n\n // Use cwd for telemetry file — Gemini's --sandbox restricts writes\n // to the project directory, so os.tmpdir() would fail with EPERM.\n const telemetryFile = path.join(\n process.cwd(),\n `.gauntlet-gemini-telemetry-${process.pid}-${Date.now()}.log`,\n );\n\n const telemetryEnv = this.buildTelemetryEnv(telemetryFile);\n const args = this.buildArgs(opts.allowToolUse);\n const cleanupThinking = await this.maybeApplyThinking(opts.thinkingBudget);\n\n const cleanup = () => fs.unlink(tmpFile).catch(() => {});\n const cleanupTelemetry = () => fs.unlink(telemetryFile).catch(() => {});\n\n try {\n if (opts.onOutput) {\n try {\n const result = await runStreamingCommand({\n command: 'gemini',\n args,\n tmpFile,\n timeoutMs: opts.timeoutMs,\n onOutput: opts.onOutput,\n cleanup,\n env: { ...process.env, ...telemetryEnv },\n });\n await this.logTelemetry(telemetryFile, opts.onOutput);\n return result;\n } finally {\n await cleanupTelemetry();\n }\n }\n\n try {\n const cmd = `gemini ${args.join(' ')} < \"${tmpFile}\"`;\n const { stdout } = await execAsync(cmd, {\n timeout: opts.timeoutMs,\n maxBuffer: MAX_BUFFER_BYTES,\n env: { ...process.env, ...telemetryEnv },\n });\n await logTelemetryToStderr(telemetryFile);\n return stdout;\n } finally {\n await cleanup();\n await cleanupTelemetry();\n }\n } finally {\n await cleanupThinking?.();\n }\n }\n}\n",
|
|
36
|
-
"import { exec } from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\nimport { MAX_BUFFER_BYTES } from '../constants.js';\nimport { getCategoryLogger } from '../output/app-logger.js';\nimport {\n resolveModelFromList,\n SAFE_MODEL_ID_PATTERN,\n} from './model-resolution.js';\nimport { type CLIAdapter, runStreamingCommand } from './shared.js';\n\nconst execAsync = promisify(exec);\n\nconst log = getCategoryLogger('github-copilot');\n\n/**\n * Parse `copilot --help` output to extract model choices.\n * The help output includes a section like:\n * --model <model> Choose a model (choices: \"gpt-5.3-codex\", \"gpt-5.2-codex\", \"opus-4.6\")\n */\nfunction parseCopilotModels(helpOutput: string): string[] {\n const match = helpOutput.match(/choices:\\s*(.+?)\\)/);\n if (!match?.[1]) return [];\n return [...match[1].matchAll(/\"([^\"]+)\"/g)]\n .map((m) => m[1])\n .filter((id): id is string => id !== undefined);\n}\n\nexport class GitHubCopilotAdapter implements CLIAdapter {\n name = 'github-copilot';\n\n async isAvailable(): Promise<boolean> {\n try {\n await execAsync('which copilot');\n return true;\n } catch {\n return false;\n }\n }\n\n async checkHealth(): Promise<{\n available: boolean;\n status: 'healthy' | 'missing' | 'unhealthy';\n message?: string;\n }> {\n const available = await this.isAvailable();\n if (!available) {\n return {\n available: false,\n status: 'missing',\n message: 'Command not found',\n };\n }\n\n return { available: true, status: 'healthy', message: 'Ready' };\n }\n\n getProjectCommandDir(): string | null {\n // GitHub Copilot CLI does not support custom commands (feature request #618)\n return null;\n }\n\n getUserCommandDir(): string | null {\n // GitHub Copilot CLI does not support custom commands (feature request #618)\n return null;\n }\n\n getProjectSkillDir(): string | null {\n return null;\n }\n\n getUserSkillDir(): string | null {\n return null;\n }\n\n getCommandExtension(): string {\n return '.md';\n }\n\n canUseSymlink(): boolean {\n // Not applicable - no command directory support\n return false;\n }\n\n transformCommand(markdownContent: string): string {\n // Not applicable - no command directory support\n return markdownContent;\n }\n\n supportsHooks(): boolean {\n return false;\n }\n\n /**\n * Resolve a base model name to a specific model ID using `copilot --help`.\n * Returns undefined if resolution fails or no matching model is found.\n *\n * Uses exec() directly (instead of the module-level execAsync) so that\n * spyOn(childProcess, \"exec\") can intercept calls in tests.\n */\n private async resolveModel(\n baseName: string,\n _thinkingBudget?: string,\n ): Promise<string | undefined> {\n try {\n const stdout = await new Promise<string>((resolve, reject) => {\n exec('copilot --help', { timeout: 10000 }, (error, stdout) => {\n if (error) reject(error);\n else resolve(stdout);\n });\n });\n const models = parseCopilotModels(stdout);\n // Copilot has NO thinking variants, so always pass preferThinking: false\n const resolved = resolveModelFromList(models, {\n baseName,\n preferThinking: false,\n });\n if (resolved === undefined) {\n log.warn(`No matching model found for \"${baseName}\"`);\n return undefined;\n }\n if (!SAFE_MODEL_ID_PATTERN.test(resolved)) {\n log.warn(`Resolved model \"${resolved}\" contains unsafe characters`);\n return undefined;\n }\n return resolved;\n } catch (err) {\n log.warn(\n `Failed to resolve model \"${baseName}\": ${err instanceof Error ? err.message : String(err)}`,\n );\n return undefined;\n }\n }\n\n async execute(opts: {\n prompt: string;\n diff: string;\n model?: string;\n timeoutMs?: number;\n onOutput?: (chunk: string) => void;\n thinkingBudget?: string;\n }): Promise<string> {\n const fullContent = `${opts.prompt}\\n\\n--- DIFF ---\\n${opts.diff}`;\n\n const tmpDir = os.tmpdir();\n // Include process.pid for uniqueness across concurrent
|
|
36
|
+
"import { exec } from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\nimport { MAX_BUFFER_BYTES } from '../constants.js';\nimport { getCategoryLogger } from '../output/app-logger.js';\nimport {\n resolveModelFromList,\n SAFE_MODEL_ID_PATTERN,\n} from './model-resolution.js';\nimport { type CLIAdapter, runStreamingCommand } from './shared.js';\n\nconst execAsync = promisify(exec);\n\n// Module-level counter for unique tmp file names across parallel invocations\nlet _tmpCounter = 0;\n\nconst log = getCategoryLogger('github-copilot');\n\n/**\n * Parse `copilot --help` output to extract model choices.\n * The help output includes a section like:\n * --model <model> Choose a model (choices: \"gpt-5.3-codex\", \"gpt-5.2-codex\", \"opus-4.6\")\n */\nfunction parseCopilotModels(helpOutput: string): string[] {\n const match = helpOutput.match(/choices:\\s*(.+?)\\)/);\n if (!match?.[1]) return [];\n return [...match[1].matchAll(/\"([^\"]+)\"/g)]\n .map((m) => m[1])\n .filter((id): id is string => id !== undefined);\n}\n\nexport class GitHubCopilotAdapter implements CLIAdapter {\n name = 'github-copilot';\n\n async isAvailable(): Promise<boolean> {\n try {\n await execAsync('which copilot');\n return true;\n } catch {\n return false;\n }\n }\n\n async checkHealth(): Promise<{\n available: boolean;\n status: 'healthy' | 'missing' | 'unhealthy';\n message?: string;\n }> {\n const available = await this.isAvailable();\n if (!available) {\n return {\n available: false,\n status: 'missing',\n message: 'Command not found',\n };\n }\n\n return { available: true, status: 'healthy', message: 'Ready' };\n }\n\n getProjectCommandDir(): string | null {\n // GitHub Copilot CLI does not support custom commands (feature request #618)\n return null;\n }\n\n getUserCommandDir(): string | null {\n // GitHub Copilot CLI does not support custom commands (feature request #618)\n return null;\n }\n\n getProjectSkillDir(): string | null {\n return null;\n }\n\n getUserSkillDir(): string | null {\n return null;\n }\n\n getCommandExtension(): string {\n return '.md';\n }\n\n canUseSymlink(): boolean {\n // Not applicable - no command directory support\n return false;\n }\n\n transformCommand(markdownContent: string): string {\n // Not applicable - no command directory support\n return markdownContent;\n }\n\n supportsHooks(): boolean {\n return false;\n }\n\n /**\n * Resolve a base model name to a specific model ID using `copilot --help`.\n * Returns undefined if resolution fails or no matching model is found.\n *\n * Uses exec() directly (instead of the module-level execAsync) so that\n * spyOn(childProcess, \"exec\") can intercept calls in tests.\n */\n private async resolveModel(\n baseName: string,\n _thinkingBudget?: string,\n ): Promise<string | undefined> {\n try {\n const stdout = await new Promise<string>((resolve, reject) => {\n exec('copilot --help', { timeout: 10000 }, (error, stdout) => {\n if (error) reject(error);\n else resolve(stdout);\n });\n });\n const models = parseCopilotModels(stdout);\n // Copilot has NO thinking variants, so always pass preferThinking: false\n const resolved = resolveModelFromList(models, {\n baseName,\n preferThinking: false,\n });\n if (resolved === undefined) {\n log.warn(`No matching model found for \"${baseName}\"`);\n return undefined;\n }\n if (!SAFE_MODEL_ID_PATTERN.test(resolved)) {\n log.warn(`Resolved model \"${resolved}\" contains unsafe characters`);\n return undefined;\n }\n return resolved;\n } catch (err) {\n log.warn(\n `Failed to resolve model \"${baseName}\": ${err instanceof Error ? err.message : String(err)}`,\n );\n return undefined;\n }\n }\n\n async execute(opts: {\n prompt: string;\n diff: string;\n model?: string;\n timeoutMs?: number;\n onOutput?: (chunk: string) => void;\n thinkingBudget?: string;\n }): Promise<string> {\n const fullContent = `${opts.prompt}\\n\\n--- DIFF ---\\n${opts.diff}`;\n\n const tmpDir = os.tmpdir();\n // Include process.pid and a counter for uniqueness across concurrent invocations\n // in the same process (parallel review gates can call execute() within the same\n // millisecond, causing Date.now() collisions and tmp file overwrites).\n const tmpFile = path.join(\n tmpDir,\n `gauntlet-copilot-${process.pid}-${Date.now()}-${_tmpCounter++}.txt`,\n );\n await fs.writeFile(tmpFile, fullContent);\n\n // Copilot reads from stdin when no -p flag is provided\n // Tool whitelist: cat/grep/ls/find/head/tail are required for the AI to read\n // and analyze code files during review. While these tools can access files,\n // they are read-only and necessary for code review functionality.\n // The copilot CLI is scoped to the repo directory by default.\n // git is excluded to prevent access to commit history (review should only see diff).\n\n // Resolve model if a base name is provided\n let resolvedModel: string | undefined;\n if (opts.model) {\n resolvedModel = await this.resolveModel(opts.model, opts.thinkingBudget);\n }\n\n const args = [\n '--allow-tool',\n 'shell(cat)',\n '--allow-tool',\n 'shell(grep)',\n '--allow-tool',\n 'shell(ls)',\n '--allow-tool',\n 'shell(find)',\n '--allow-tool',\n 'shell(head)',\n '--allow-tool',\n 'shell(tail)',\n ];\n if (resolvedModel) {\n args.push('--model', resolvedModel);\n }\n\n const cleanup = () => fs.unlink(tmpFile).catch(() => {});\n\n // If onOutput callback is provided, use spawn for real-time streaming\n if (opts.onOutput) {\n return runStreamingCommand({\n command: 'copilot',\n args,\n tmpFile,\n timeoutMs: opts.timeoutMs,\n onOutput: opts.onOutput,\n cleanup,\n });\n }\n\n // Otherwise use exec for buffered output\n // Shell command construction: We use exec() with shell piping instead of execFile()\n // because copilot requires stdin input. The tmpFile path is system-controlled\n // (os.tmpdir() + Date.now() + process.pid), not user-supplied, eliminating injection risk.\n // Double quotes handle paths with spaces. This pattern matches claude.ts:131.\n try {\n const argsStr = args\n .map((a) => (a.includes('(') ? `\"${a}\"` : a))\n .join(' ');\n const cmd = `cat \"${tmpFile}\" | copilot ${argsStr}`;\n const { stdout } = await execAsync(cmd, {\n timeout: opts.timeoutMs,\n maxBuffer: MAX_BUFFER_BYTES,\n });\n return stdout;\n } finally {\n // Cleanup errors are intentionally ignored - the tmp file will be cleaned up by OS\n await cleanup();\n }\n }\n}\n",
|
|
37
37
|
"// Re-export shared types and utilities (used by adapter implementations)\nexport {\n type CLIAdapter,\n type CLIAdapterHealth,\n collectStderr,\n finalizeProcessClose,\n isUsageLimit,\n processExitError,\n runStreamingCommand,\n} from './shared.js';\n\nimport { ClaudeAdapter } from './claude.js';\nimport { CodexAdapter } from './codex.js';\nimport { CursorAdapter } from './cursor.js';\nimport { GeminiAdapter } from './gemini.js';\nimport { GitHubCopilotAdapter } from './github-copilot.js';\nimport type { CLIAdapter } from './shared.js';\n\nexport {\n GeminiAdapter,\n CodexAdapter,\n ClaudeAdapter,\n GitHubCopilotAdapter,\n CursorAdapter,\n};\n\n// Adapter registry: keys should use lowercase with hyphens for multi-word names\nconst adapters: Record<string, CLIAdapter> = {\n gemini: new GeminiAdapter(),\n codex: new CodexAdapter(),\n claude: new ClaudeAdapter(),\n 'github-copilot': new GitHubCopilotAdapter(),\n cursor: new CursorAdapter(),\n};\n\nexport function getAdapter(name: string): CLIAdapter | undefined {\n return adapters[name];\n}\n\nexport function getAllAdapters(): CLIAdapter[] {\n return Object.values(adapters);\n}\n\n/**\n * Returns all adapters that support project-scoped commands.\n */\nexport function getProjectCommandAdapters(): CLIAdapter[] {\n return Object.values(adapters).filter(\n (a) => a.getProjectCommandDir() !== null,\n );\n}\n\n/**\n * Returns all adapters that support user-level commands.\n */\nexport function getUserCommandAdapters(): CLIAdapter[] {\n return Object.values(adapters).filter((a) => a.getUserCommandDir() !== null);\n}\n\n/**\n * Returns all valid CLI tool names (adapter registry keys).\n */\nexport function getValidCLITools(): string[] {\n return Object.keys(adapters);\n}\n",
|
|
38
38
|
"import fs from 'node:fs/promises';\nimport { getCategoryLogger } from '../output/app-logger.js';\nimport type { GateResult, ReviewFullJsonOutput } from './result.js';\nimport type {\n ReviewJsonOutput,\n ReviewOutputEntry,\n SkippedSlotOutput,\n} from './review-types.js';\n\nconst log = getCategoryLogger('gate', 'review');\n\n// ── Result Aggregation ──────────────────────────────────────────────\n\nexport function aggregateStatus(outputs: ReviewOutputEntry[]): {\n status: 'pass' | 'fail' | 'error';\n message: string;\n} {\n const errored = outputs.filter((r) => r.status === 'error');\n const failed = outputs.filter((r) => r.status === 'fail');\n\n let status: 'pass' | 'fail' | 'error' = 'pass';\n let message = 'Passed';\n\n if (errored.length > 0) {\n status = 'error';\n message = `Error in ${errored.length} adapter(s)`;\n } else if (failed.length > 0) {\n status = 'fail';\n message = `Failed by ${failed.length} adapter(s)`;\n }\n return { status, message };\n}\n\nexport function buildSubResults(\n outputs: ReviewOutputEntry[],\n skippedSlotOutputs: SkippedSlotOutput[],\n logPaths: string[],\n): Array<{\n nameSuffix: string;\n status: 'pass' | 'fail' | 'error';\n duration?: number;\n message: string;\n logPath?: string;\n errorCount: number;\n fixedCount: number;\n skipped?: Array<{\n file: string;\n line: number | string;\n issue: string;\n result?: string | null;\n }>;\n}> {\n const subResults = outputs.map((out) => buildSingleSubResult(out, logPaths));\n\n for (const skipped of skippedSlotOutputs) {\n subResults.push(buildSkippedSubResult(skipped, logPaths));\n }\n\n subResults.sort((a, b) => {\n const aIdx = Number.parseInt(a.nameSuffix.match(/@(\\d+)/)?.[1] || '0', 10);\n const bIdx = Number.parseInt(b.nameSuffix.match(/@(\\d+)/)?.[1] || '0', 10);\n return aIdx - bIdx;\n });\n\n return subResults;\n}\n\nfunction findLogForReview(\n adapter: string,\n reviewIndex: number,\n logPaths: string[],\n): string | undefined {\n return logPaths.find((p) => {\n const filename = p.split('/').pop() || '';\n return (\n filename.includes(`_${adapter}@${reviewIndex}.`) &&\n filename.endsWith('.log')\n );\n });\n}\n\nfunction buildSingleSubResult(\n out: ReviewOutputEntry,\n logPaths: string[],\n): {\n nameSuffix: string;\n status: 'pass' | 'fail' | 'error';\n duration?: number;\n message: string;\n logPath?: string;\n errorCount: number;\n fixedCount: number;\n skipped?: Array<{\n file: string;\n line: number | string;\n issue: string;\n result?: string | null;\n }>;\n} {\n const specificLog = findLogForReview(out.adapter, out.reviewIndex, logPaths);\n\n let logPath = specificLog;\n if (specificLog && out.json && out.status === 'fail') {\n logPath = specificLog.replace(/\\.log$/, '.json');\n }\n\n const errorCount = computeErrorCount(out);\n const fixedCount =\n out.json && Array.isArray(out.json.violations)\n ? out.json.violations.filter((v) => v.status === 'fixed').length\n : 0;\n\n return {\n nameSuffix: `(${out.adapter}@${out.reviewIndex})`,\n status: out.status,\n duration: out.duration,\n message: out.message,\n logPath,\n errorCount,\n fixedCount,\n skipped: out.skipped,\n };\n}\n\nfunction computeErrorCount(out: ReviewOutputEntry): number {\n if (out.json && Array.isArray(out.json.violations)) {\n return out.json.violations.filter((v) => !v.status || v.status === 'new')\n .length;\n }\n if (out.status === 'fail' || out.status === 'error') {\n return 1;\n }\n return 0;\n}\n\nfunction buildSkippedSubResult(\n skipped: SkippedSlotOutput,\n logPaths: string[],\n): {\n nameSuffix: string;\n status: 'pass' | 'fail' | 'error';\n duration?: number;\n message: string;\n logPath?: string;\n errorCount: number;\n fixedCount: number;\n skipped: undefined;\n} {\n const specificLog = findLogForReview(\n skipped.adapter,\n skipped.reviewIndex,\n logPaths,\n );\n return {\n nameSuffix: `(${skipped.adapter}@${skipped.reviewIndex})`,\n status: 'pass' as const,\n duration: undefined,\n message: skipped.message,\n logPath: specificLog?.replace(/\\.log$/, '.json'),\n errorCount: 0,\n fixedCount: 0,\n skipped: undefined,\n };\n}\n\n// ── JSON Result Writing ─────────────────────────────────────────────\n\nexport async function writeJsonResult(\n logPath: string,\n adapter: string,\n status: 'pass' | 'fail' | 'error',\n rawOutput: string,\n json: ReviewJsonOutput,\n): Promise<string> {\n const jsonPath = logPath.replace(/\\.log$/, '.json');\n const fullOutput: ReviewFullJsonOutput = {\n adapter,\n timestamp: new Date().toISOString(),\n status,\n rawOutput,\n violations: json.violations || [],\n };\n\n await fs.writeFile(jsonPath, JSON.stringify(fullOutput, null, 2));\n return jsonPath;\n}\n\n// ── Gate Result Builders ──────────────────────────────────────────────\n\nexport async function emptyDiffResult(\n jobId: string,\n startTime: number,\n logPaths: string[],\n mainLogger: (msg: string) => Promise<void>,\n): Promise<GateResult> {\n log.debug('Empty diff after trim, returning pass');\n await mainLogger('No changes found in entry point, skipping review.\\n');\n await mainLogger('Result: pass - No changes to review\\n');\n return {\n jobId,\n status: 'pass',\n duration: Date.now() - startTime,\n message: 'No changes to review',\n logPaths,\n };\n}\n\nexport async function noAdaptersResult(\n jobId: string,\n startTime: number,\n logPaths: string[],\n mainLogger: (msg: string) => Promise<void>,\n): Promise<GateResult> {\n const msg = 'Review dispatch failed: no healthy adapters available';\n log.error(`ERROR: ${msg}`);\n await mainLogger(`Result: error - ${msg}\\n`);\n return {\n jobId,\n status: 'error',\n duration: Date.now() - startTime,\n message: msg,\n logPaths,\n };\n}\n\nexport async function incompleteResult(\n jobId: string,\n startTime: number,\n logPaths: string[],\n mainLogger: (msg: string) => Promise<void>,\n expected: number,\n completed: number,\n): Promise<GateResult> {\n const msg = `Failed to complete reviews. Expected: ${expected}, Completed: ${completed}. See logs for details.`;\n await mainLogger(`Result: error - ${msg}\\n`);\n return {\n jobId,\n status: 'error',\n duration: Date.now() - startTime,\n message: msg,\n logPaths,\n };\n}\n\nexport async function buildFinalResult(\n jobId: string,\n startTime: number,\n logPaths: string[],\n outputs: ReviewOutputEntry[],\n skippedSlotOutputs: SkippedSlotOutput[],\n mainLogger: (msg: string) => Promise<void>,\n): Promise<GateResult> {\n const allSkipped = outputs.flatMap((r) => r.skipped || []);\n const { status, message: baseMessage } = aggregateStatus(outputs);\n let message = baseMessage;\n if (skippedSlotOutputs.length > 0) {\n message += ` (${skippedSlotOutputs.length} skipped due to prior pass)`;\n }\n const subResults = buildSubResults(outputs, skippedSlotOutputs, logPaths);\n log.debug(`Complete: ${status} - ${message}`);\n await mainLogger(`Result: ${status} - ${message}\\n`);\n return {\n jobId,\n status,\n duration: Date.now() - startTime,\n message,\n logPaths,\n subResults,\n skipped: allSkipped,\n };\n}\n\nexport async function handleCriticalError(\n error: unknown,\n jobId: string,\n startTime: number,\n logPaths: string[],\n mainLogger: (msg: string) => Promise<void>,\n): Promise<GateResult> {\n const err = error as { message?: string; stack?: string };\n const errMsg = err.message || 'Unknown error';\n // nosemgrep: javascript.lang.security.audit.unsafe-formatstring.unsafe-formatstring\n log.error(`CRITICAL ERROR: ${errMsg} ${err.stack || ''}`);\n await mainLogger(`Critical Error: ${errMsg}\\n`);\n await mainLogger('Result: error\\n');\n return {\n jobId,\n status: 'error',\n duration: Date.now() - startTime,\n message: errMsg,\n logPaths,\n };\n}\n",
|
|
39
|
-
"import { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { getCategoryLogger } from '../output/app-logger.js';\n\nconst log = getCategoryLogger('gate', 'review');\n\nconst execAsync = promisify(exec);\n\nimport { MAX_BUFFER_BYTES } from '../constants.js';\n\n// ── Diff Utilities ──────────────────────────────────────────────────\n\nexport function parseLines(stdout: string): string[] {\n return stdout\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n}\n\nexport function pathArg(entryPointPath: string): string {\n return ` -- ${quoteArg(entryPointPath)}`;\n}\n\nexport function quoteArg(value: string): string {\n return `\"${value.replace(/([\"\\\\$`])/g, '\\\\$1')}\"`;\n}\n\nexport async function execDiff(command: string): Promise<string> {\n try {\n const { stdout } = await execAsync(command, {\n maxBuffer: MAX_BUFFER_BYTES,\n });\n return stdout;\n } catch (error: unknown) {\n const err = error as { code?: number; stdout?: string };\n if (typeof err.code === 'number' && err.stdout) {\n return err.stdout;\n }\n throw error;\n }\n}\n\nexport async function untrackedDiff(entryPointPath: string): Promise<string> {\n const pArg = pathArg(entryPointPath);\n const { stdout } = await execAsync(\n `git ls-files --others --exclude-standard${pArg}`,\n { maxBuffer: MAX_BUFFER_BYTES },\n );\n const files = parseLines(stdout);\n const diffs: string[] = [];\n\n for (const file of files) {\n try {\n const diff = await execDiff(\n `git diff --no-index -- /dev/null ${quoteArg(file)}`,\n );\n if (diff.trim()) diffs.push(diff);\n } catch (error: unknown) {\n const err = error as { message?: string; stderr?: string };\n const msg = [err.message, err.stderr].filter(Boolean).join('\\n');\n if (\n msg.includes('Could not access') ||\n msg.includes('ENOENT') ||\n msg.includes('No such file')\n ) {\n continue;\n }\n throw error;\n }\n }\n\n return diffs.join('\\n');\n}\n\n// ── Top-level getDiff ───────────────────────────────────────────────\n\nexport async function getDiff(\n entryPointPath: string,\n baseBranch: string,\n options?: { commit?: string; uncommitted?: boolean; fixBase?: string },\n): Promise<string> {\n log.debug(\n `getDiff: entryPoint=${entryPointPath}, fixBase=${options?.fixBase ?? 'none'}, uncommitted=${options?.uncommitted ?? false}, commit=${options?.commit ?? 'none'}`,\n );\n\n if (options?.fixBase) {\n const result = await getFixBaseDiff(entryPointPath, options.fixBase);\n if (result !== null) return result;\n }\n\n if (options?.uncommitted) {\n return getUncommittedDiff(entryPointPath);\n }\n\n if (options?.commit) {\n return getCommitDiff(entryPointPath, options.commit);\n }\n\n const isCI =\n process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true';\n return isCI\n ? getCIDiff(entryPointPath, baseBranch)\n : getLocalDiff(entryPointPath, baseBranch);\n}\n\n// ── Fix-base diff ───────────────────────────────────────────────────\n\nasync function getFixBaseDiff(\n entryPointPath: string,\n fixBase: string,\n): Promise<string | null> {\n if (!/^[a-f0-9]+$/.test(fixBase)) {\n throw new Error(`Invalid session ref: ${fixBase}`);\n }\n\n const pArg = pathArg(entryPointPath);\n try {\n const diff = await execDiff(`git diff ${fixBase}${pArg}`);\n\n const { stdout: untrackedStdout } = await execAsync(\n `git ls-files --others --exclude-standard${pArg}`,\n { maxBuffer: MAX_BUFFER_BYTES },\n );\n const currentUntracked = new Set(parseLines(untrackedStdout));\n\n const { stdout: snapshotFilesStdout } = await execAsync(\n `git ls-tree -r --name-only ${fixBase}${pArg}`,\n { maxBuffer: MAX_BUFFER_BYTES },\n );\n const snapshotFiles = new Set(parseLines(snapshotFilesStdout));\n\n const newUntracked = [...currentUntracked].filter(\n (f) => !snapshotFiles.has(f),\n );\n const newUntrackedDiffs = await collectUntrackedDiffs(newUntracked);\n\n const scopedDiff = [diff, ...newUntrackedDiffs].filter(Boolean).join('\\n');\n log.debug(\n `Scoped diff via fixBase: ${scopedDiff.split('\\n').length} lines`,\n );\n return scopedDiff;\n } catch (error) {\n log.warn(\n `Failed to compute diff against fixBase ${fixBase}, falling back to full uncommitted diff. ${error instanceof Error ? error.message : error}`,\n );\n return null;\n }\n}\n\nasync function collectUntrackedDiffs(files: string[]): Promise<string[]> {\n const diffs: string[] = [];\n for (const file of files) {\n try {\n const d = await execDiff(\n `git diff --no-index -- /dev/null ${quoteArg(file)}`,\n );\n if (d.trim()) diffs.push(d);\n } catch (error: unknown) {\n const err = error as { message?: string; stderr?: string };\n const msg = [err.message, err.stderr].filter(Boolean).join('\\n');\n if (\n !(\n msg.includes('Could not access') ||\n msg.includes('ENOENT') ||\n msg.includes('No such file')\n )\n ) {\n throw error;\n }\n }\n }\n return diffs;\n}\n\n// ── Uncommitted / commit / CI / local diff modes ────────────────────\n\nasync function getUncommittedDiff(entryPointPath: string): Promise<string> {\n log.debug(`Using full uncommitted diff (no fixBase)`);\n const pArg = pathArg(entryPointPath);\n const staged = await execDiff(`git diff --cached${pArg}`);\n const unstaged = await execDiff(`git diff${pArg}`);\n const untracked = await untrackedDiff(entryPointPath);\n return [staged, unstaged, untracked].filter(Boolean).join('\\n');\n}\n\nasync function getCommitDiff(\n entryPointPath: string,\n commit: string,\n): Promise<string> {\n if (!/^[a-f0-9]+$/i.test(commit)) {\n throw new Error(`Invalid commit ref: ${commit}`);\n }\n const pArg = pathArg(entryPointPath);\n try {\n return await execDiff(`git diff ${commit}^..${commit}${pArg}`);\n } catch (error: unknown) {\n const err = error as { message?: string; stderr?: string };\n if (\n err.message?.includes('unknown revision') ||\n err.stderr?.includes('unknown revision')\n ) {\n return await execDiff(`git diff --root ${commit}${pArg}`);\n }\n throw error;\n }\n}\n\nexport async function getCIDiff(\n entryPointPath: string,\n baseBranch: string,\n): Promise<string> {\n const baseRef = quoteArg(baseBranch);\n const headRef = process.env.GITHUB_SHA || 'HEAD';\n const pArg = pathArg(entryPointPath);\n\n try {\n return await execDiff(`git diff ${baseRef}...${quoteArg(headRef)}${pArg}`);\n } catch (_error) {\n return await execDiff(`git diff HEAD^...HEAD${pArg}`);\n }\n}\n\nexport async function getLocalDiff(\n entryPointPath: string,\n baseBranch: string,\n): Promise<string> {\n const pArg = pathArg(entryPointPath);\n const committed = await execDiff(\n `git diff ${quoteArg(baseBranch)}...HEAD${pArg}`,\n );\n const uncommitted = await execDiff(`git diff HEAD${pArg}`);\n const untracked = await untrackedDiff(entryPointPath);\n\n return [committed, uncommitted, untracked].filter(Boolean).join('\\n');\n}\n",
|
|
39
|
+
"import { exec } from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\nimport { getCategoryLogger } from '../output/app-logger.js';\n\nconst log = getCategoryLogger('gate', 'review');\n\nconst execAsync = promisify(exec);\n\nimport { MAX_BUFFER_BYTES } from '../constants.js';\nimport { getStashUntrackedFiles } from '../core/diff-stats.js';\n\n// ── Diff Utilities ──────────────────────────────────────────────────\n\nexport function parseLines(stdout: string): string[] {\n return stdout\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n}\n\nexport function pathArg(entryPointPath: string): string {\n return ` -- ${quoteArg(entryPointPath)}`;\n}\n\nexport function quoteArg(value: string): string {\n return `\"${value.replace(/([\"\\\\$`])/g, '\\\\$1')}\"`;\n}\n\nexport async function execDiff(command: string): Promise<string> {\n try {\n const { stdout } = await execAsync(command, {\n maxBuffer: MAX_BUFFER_BYTES,\n });\n return stdout;\n } catch (error: unknown) {\n const err = error as { code?: number; stdout?: string };\n if (typeof err.code === 'number' && err.stdout) {\n return err.stdout;\n }\n throw error;\n }\n}\n\nexport async function untrackedDiff(entryPointPath: string): Promise<string> {\n const pArg = pathArg(entryPointPath);\n const { stdout } = await execAsync(\n `git ls-files --others --exclude-standard${pArg}`,\n { maxBuffer: MAX_BUFFER_BYTES },\n );\n const files = parseLines(stdout);\n const diffs: string[] = [];\n\n for (const file of files) {\n try {\n const diff = await execDiff(\n `git diff --no-index -- /dev/null ${quoteArg(file)}`,\n );\n if (diff.trim()) diffs.push(diff);\n } catch (error: unknown) {\n const err = error as { message?: string; stderr?: string };\n const msg = [err.message, err.stderr].filter(Boolean).join('\\n');\n if (\n msg.includes('Could not access') ||\n msg.includes('ENOENT') ||\n msg.includes('No such file')\n ) {\n continue;\n }\n throw error;\n }\n }\n\n return diffs.join('\\n');\n}\n\n// ── Top-level getDiff ───────────────────────────────────────────────\n\nexport async function getDiff(\n entryPointPath: string,\n baseBranch: string,\n options?: { commit?: string; uncommitted?: boolean; fixBase?: string },\n): Promise<string> {\n log.debug(\n `getDiff: entryPoint=${entryPointPath}, fixBase=${options?.fixBase ?? 'none'}, uncommitted=${options?.uncommitted ?? false}, commit=${options?.commit ?? 'none'}`,\n );\n\n if (options?.fixBase) {\n const result = await getFixBaseDiff(entryPointPath, options.fixBase);\n if (result !== null) return result;\n }\n\n if (options?.uncommitted) {\n return getUncommittedDiff(entryPointPath);\n }\n\n if (options?.commit) {\n return getCommitDiff(entryPointPath, options.commit);\n }\n\n const isCI =\n process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true';\n return isCI\n ? getCIDiff(entryPointPath, baseBranch)\n : getLocalDiff(entryPointPath, baseBranch);\n}\n\n// ── Fix-base diff ───────────────────────────────────────────────────\n\n/** Check if a file's content has changed compared to a stash's untracked tree. */\nasync function hasFileChangedSinceStash(\n file: string,\n fixBase: string,\n): Promise<boolean> {\n const [{ stdout: oldHashOut }, { stdout: newHashOut }] = await Promise.all([\n execAsync(`git rev-parse ${quoteArg(`${fixBase}^3:${file}`)}`, {\n maxBuffer: MAX_BUFFER_BYTES,\n }),\n execAsync(`git hash-object -- ${quoteArg(file)}`, {\n maxBuffer: MAX_BUFFER_BYTES,\n }),\n ]);\n return oldHashOut.trim() !== newHashOut.trim();\n}\n\n/** Write the old stash version of a file to a temp path for diffing. */\nasync function writeStashFileToTemp(\n file: string,\n fixBase: string,\n tmpDir: string,\n counter: number,\n): Promise<string> {\n // Use encoding: 'buffer' to preserve binary file integrity\n const { stdout: oldContent } = await execAsync(\n `git show ${quoteArg(`${fixBase}^3:${file}`)}`,\n { maxBuffer: MAX_BUFFER_BYTES, encoding: 'buffer' },\n );\n const tmpFile = path.join(tmpDir, `${counter}-${path.basename(file)}`);\n await fs.writeFile(tmpFile, oldContent);\n return tmpFile;\n}\n\n/** Generate a placeholder diff entry when all diff strategies fail for a file. */\nfunction placeholderDiff(file: string): string {\n return `diff --git a/${file} b/${file}\\n--- /dev/null\\n+++ b/${file}\\n@@ -0,0 +1 @@\\n+[gauntlet: diff unavailable for this file]`;\n}\n\n/**\n * Compute diffs for untracked files that existed in a stash's untracked tree.\n * Compares each file against its version in the stash, showing only changes.\n * Files that are unchanged produce no diff and are excluded.\n */\nexport async function collectStashUntrackedDiffs(\n files: string[],\n fixBase: string,\n): Promise<string[]> {\n if (files.length === 0) return [];\n\n const diffs: string[] = [];\n const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'gauntlet-'));\n\n try {\n let counter = 0;\n for (const file of files) {\n const d = await diffSingleStashFile(file, fixBase, tmpDir, counter++);\n if (d) diffs.push(d);\n }\n } finally {\n await fs.rm(tmpDir, { recursive: true, force: true }).catch(() => {});\n }\n\n return diffs;\n}\n\n/** Compute diff for a single file against its stash version, with fallbacks. */\nasync function diffSingleStashFile(\n file: string,\n fixBase: string,\n tmpDir: string,\n counter: number,\n): Promise<string | null> {\n try {\n if (!(await hasFileChangedSinceStash(file, fixBase))) {\n return null; // File unchanged since stash, exclude from diff\n }\n const tmpFile = await writeStashFileToTemp(file, fixBase, tmpDir, counter);\n const d = await execDiff(\n `git diff --no-index -- ${quoteArg(tmpFile)} ${quoteArg(file)}`,\n );\n return d.trim() || null;\n } catch (outerErr) {\n log.debug(\n `Stash diff failed for ${file}, falling back to full diff: ${outerErr instanceof Error ? outerErr.message : outerErr}`,\n );\n return diffFallbackToDevNull(file);\n }\n}\n\n/** Fall back to diffing a file against /dev/null (full content). */\nasync function diffFallbackToDevNull(file: string): Promise<string | null> {\n try {\n const d = await execDiff(\n `git diff --no-index -- /dev/null ${quoteArg(file)}`,\n );\n return d.trim() || null;\n } catch (innerErr) {\n log.warn(\n `Failed to compute any diff for ${file}: ${innerErr instanceof Error ? innerErr.message : innerErr}`,\n );\n return placeholderDiff(file);\n }\n}\n\nasync function getFixBaseDiff(\n entryPointPath: string,\n fixBase: string,\n): Promise<string | null> {\n if (!/^[a-f0-9]+$/.test(fixBase)) {\n throw new Error(`Invalid session ref: ${fixBase}`);\n }\n\n const pArg = pathArg(entryPointPath);\n try {\n // Tracked file changes since fixBase\n const diff = await execDiff(`git diff ${fixBase}${pArg}`);\n\n // Current untracked files\n const { stdout: untrackedStdout } = await execAsync(\n `git ls-files --others --exclude-standard${pArg}`,\n { maxBuffer: MAX_BUFFER_BYTES },\n );\n const currentUntracked = new Set(parseLines(untrackedStdout));\n\n // Files in fixBase's main tree (tracked files)\n const { stdout: snapshotFilesStdout } = await execAsync(\n `git ls-tree -r --name-only ${fixBase}${pArg}`,\n { maxBuffer: MAX_BUFFER_BYTES },\n );\n const snapshotTrackedFiles = new Set(parseLines(snapshotFilesStdout));\n\n // Files in fixBase's untracked tree (stash ^3 parent)\n const snapshotUntrackedFiles = await getStashUntrackedFiles(\n fixBase,\n entryPointPath,\n );\n\n // Combine all snapshot files\n const allSnapshotFiles = new Set([\n ...snapshotTrackedFiles,\n ...snapshotUntrackedFiles,\n ]);\n\n // Truly new files: not in any snapshot tree\n const newUntracked = [...currentUntracked].filter(\n (f) => !allSnapshotFiles.has(f),\n );\n\n // Known untracked: existed in stash's untracked tree and still untracked\n const knownUntracked = [...currentUntracked].filter((f) =>\n snapshotUntrackedFiles.has(f),\n );\n\n // Diffs for truly new files (full content against /dev/null)\n const newUntrackedDiffs = await collectUntrackedDiffs(newUntracked);\n\n // Diffs for known untracked files (only changes since stash)\n const knownUntrackedDiffs = await collectStashUntrackedDiffs(\n knownUntracked,\n fixBase,\n );\n\n const scopedDiff = [diff, ...newUntrackedDiffs, ...knownUntrackedDiffs]\n .filter(Boolean)\n .join('\\n');\n log.debug(\n `Scoped diff via fixBase: ${scopedDiff.split('\\n').length} lines (${newUntracked.length} new, ${knownUntracked.length} known untracked)`,\n );\n return scopedDiff;\n } catch (error) {\n log.warn(\n `Failed to compute diff against fixBase ${fixBase}, falling back to full uncommitted diff. ${error instanceof Error ? error.message : error}`,\n );\n return null;\n }\n}\n\nasync function collectUntrackedDiffs(files: string[]): Promise<string[]> {\n const diffs: string[] = [];\n for (const file of files) {\n try {\n const d = await execDiff(\n `git diff --no-index -- /dev/null ${quoteArg(file)}`,\n );\n if (d.trim()) diffs.push(d);\n } catch (error: unknown) {\n const err = error as { message?: string; stderr?: string };\n const msg = [err.message, err.stderr].filter(Boolean).join('\\n');\n if (\n !(\n msg.includes('Could not access') ||\n msg.includes('ENOENT') ||\n msg.includes('No such file')\n )\n ) {\n throw error;\n }\n }\n }\n return diffs;\n}\n\n// ── Uncommitted / commit / CI / local diff modes ────────────────────\n\nasync function getUncommittedDiff(entryPointPath: string): Promise<string> {\n log.debug(`Using full uncommitted diff (no fixBase)`);\n const pArg = pathArg(entryPointPath);\n const staged = await execDiff(`git diff --cached${pArg}`);\n const unstaged = await execDiff(`git diff${pArg}`);\n const untracked = await untrackedDiff(entryPointPath);\n return [staged, unstaged, untracked].filter(Boolean).join('\\n');\n}\n\nasync function getCommitDiff(\n entryPointPath: string,\n commit: string,\n): Promise<string> {\n if (!/^[a-f0-9]+$/i.test(commit)) {\n throw new Error(`Invalid commit ref: ${commit}`);\n }\n const pArg = pathArg(entryPointPath);\n try {\n return await execDiff(`git diff ${commit}^..${commit}${pArg}`);\n } catch (error: unknown) {\n const err = error as { message?: string; stderr?: string };\n if (\n err.message?.includes('unknown revision') ||\n err.stderr?.includes('unknown revision')\n ) {\n return await execDiff(`git diff --root ${commit}${pArg}`);\n }\n throw error;\n }\n}\n\nexport async function getCIDiff(\n entryPointPath: string,\n baseBranch: string,\n): Promise<string> {\n const baseRef = quoteArg(baseBranch);\n const headRef = process.env.GITHUB_SHA || 'HEAD';\n const pArg = pathArg(entryPointPath);\n\n try {\n return await execDiff(`git diff ${baseRef}...${quoteArg(headRef)}${pArg}`);\n } catch (_error) {\n return await execDiff(`git diff HEAD^...HEAD${pArg}`);\n }\n}\n\nexport async function getLocalDiff(\n entryPointPath: string,\n baseBranch: string,\n): Promise<string> {\n const pArg = pathArg(entryPointPath);\n const committed = await execDiff(\n `git diff ${quoteArg(baseBranch)}...HEAD${pArg}`,\n );\n const uncommitted = await execDiff(`git diff HEAD${pArg}`);\n const untracked = await untrackedDiff(entryPointPath);\n\n return [committed, uncommitted, untracked].filter(Boolean).join('\\n');\n}\n",
|
|
40
|
+
"import { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { MAX_BUFFER_BYTES } from '../constants.js';\n\nconst execFileAsyncOriginal = promisify(execFile);\nexport let execFileAsync = execFileAsyncOriginal;\n\nexport function setExecFileAsync(fn: typeof execFileAsyncOriginal) {\n execFileAsync = fn;\n}\n\n/**\n * Run a git command safely using execFile (no shell interpolation).\n */\nasync function gitExec(args: string[]): Promise<string> {\n const { stdout } = await execFileAsync('git', args, {\n maxBuffer: MAX_BUFFER_BYTES,\n });\n return stdout;\n}\n\nexport interface DiffStats {\n baseRef: string; // e.g., \"origin/main\", \"abc123\", \"uncommitted\"\n total: number; // Total files changed\n newFiles: number; // Files added\n modifiedFiles: number; // Files modified\n deletedFiles: number; // Files deleted\n linesAdded: number; // Total lines added\n linesRemoved: number; // Total lines removed\n}\n\nexport interface DiffStatsOptions {\n commit?: string; // If provided, get diff for this commit vs its parent\n uncommitted?: boolean; // If true, only get uncommitted changes\n fixBase?: string; // If provided, get diff from this ref to current working tree\n}\n\n/**\n * Compute diff statistics for changed files.\n */\nexport async function computeDiffStats(\n baseBranch: string,\n options: DiffStatsOptions = {},\n): Promise<DiffStats> {\n // Determine what we're diffing\n if (options.commit) {\n return computeCommitDiffStats(options.commit);\n }\n\n // If fixBase is provided, compute diff from that ref to current working tree\n // This is used in verification mode to show only NEW changes since the snapshot\n if (options.fixBase) {\n return computeFixBaseDiffStats(options.fixBase);\n }\n\n if (options.uncommitted) {\n return computeUncommittedDiffStats();\n }\n\n const isCI =\n process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true';\n\n if (isCI) {\n return computeCIDiffStats(baseBranch);\n }\n\n return computeLocalDiffStats(baseBranch);\n}\n\n/**\n * Compute diff stats for a specific commit vs its parent.\n */\nasync function computeCommitDiffStats(commit: string): Promise<DiffStats> {\n try {\n // Get numstat for line counts\n const numstat = await gitExec([\n 'diff',\n '--numstat',\n `${commit}^..${commit}`,\n ]);\n const lineStats = parseNumstat(numstat);\n\n // Get name-status for file categorization\n const nameStatus = await gitExec([\n 'diff',\n '--name-status',\n `${commit}^..${commit}`,\n ]);\n const fileStats = parseNameStatus(nameStatus);\n\n return {\n baseRef: `${commit}^`,\n ...fileStats,\n ...lineStats,\n };\n } catch {\n // If commit has no parent (initial commit), try --root\n try {\n const numstat = await gitExec(['diff', '--numstat', '--root', commit]);\n const lineStats = parseNumstat(numstat);\n\n const nameStatus = await gitExec([\n 'diff',\n '--name-status',\n '--root',\n commit,\n ]);\n const fileStats = parseNameStatus(nameStatus);\n\n return {\n baseRef: 'root',\n ...fileStats,\n ...lineStats,\n };\n } catch {\n return emptyDiffStats(commit);\n }\n }\n}\n\n/**\n * Compute diff stats for uncommitted changes (staged + unstaged + untracked).\n */\nasync function computeUncommittedDiffStats(): Promise<DiffStats> {\n // Get stats for staged changes\n const stagedNumstat = await gitExec(['diff', '--numstat', '--cached']);\n const stagedLines = parseNumstat(stagedNumstat);\n\n const stagedStatus = await gitExec(['diff', '--name-status', '--cached']);\n const stagedFiles = parseNameStatus(stagedStatus);\n\n // Get stats for unstaged changes\n const unstagedNumstat = await gitExec(['diff', '--numstat']);\n const unstagedLines = parseNumstat(unstagedNumstat);\n\n const unstagedStatus = await gitExec(['diff', '--name-status']);\n const unstagedFiles = parseNameStatus(unstagedStatus);\n\n // Get untracked files (all count as new, lines unknown)\n const untrackedList = await gitExec([\n 'ls-files',\n '--others',\n '--exclude-standard',\n ]);\n const untrackedFiles = untrackedList\n .split('\\n')\n .map((f) => f.trim())\n .filter((f) => f.length > 0);\n\n return {\n baseRef: 'uncommitted',\n total:\n stagedFiles.total +\n unstagedFiles.total +\n untrackedFiles.length -\n countOverlap(stagedStatus, unstagedStatus),\n newFiles:\n stagedFiles.newFiles + unstagedFiles.newFiles + untrackedFiles.length,\n modifiedFiles: stagedFiles.modifiedFiles + unstagedFiles.modifiedFiles,\n deletedFiles: stagedFiles.deletedFiles + unstagedFiles.deletedFiles,\n linesAdded: stagedLines.linesAdded + unstagedLines.linesAdded,\n linesRemoved: stagedLines.linesRemoved + unstagedLines.linesRemoved,\n };\n}\n\n/**\n * Get untracked files from a stash commit's ^3 parent.\n * `git stash create --include-untracked` stores untracked files in the 3rd parent.\n * Returns empty set if fixBase is not a stash or has no untracked tree.\n *\n * @param pathFilter — optional path prefix to scope results (e.g. \"src/\")\n */\nexport async function getStashUntrackedFiles(\n fixBase: string,\n pathFilter?: string,\n): Promise<Set<string>> {\n try {\n const args = ['ls-tree', '-r', '--name-only', `${fixBase}^3`];\n if (pathFilter) {\n args.push('--', pathFilter);\n }\n const treeFiles = await gitExec(args);\n return new Set(\n treeFiles\n .split('\\n')\n .map((f) => f.trim())\n .filter((f) => f.length > 0),\n );\n } catch {\n return new Set();\n }\n}\n\n/**\n * Count how many known-untracked files have actually changed since the stash.\n * Compares blob hashes between stash ^3 tree and current working tree.\n */\nasync function countChangedStashUntracked(\n files: string[],\n fixBase: string,\n): Promise<number> {\n let changed = 0;\n for (const file of files) {\n try {\n const [oldHash, newHash] = await Promise.all([\n gitExec(['rev-parse', `${fixBase}^3:${file}`]),\n gitExec(['hash-object', '--', file]),\n ]);\n if (oldHash.trim() !== newHash.trim()) {\n changed++;\n }\n } catch {\n // If comparison fails, count as changed (conservative)\n changed++;\n }\n }\n return changed;\n}\n\n/**\n * Compute diff stats from a fixBase ref (stash or commit) to current working tree.\n * Used in verification mode to show only NEW changes since the snapshot.\n * This includes staged changes, unstaged changes, and new untracked files.\n * For stash refs, also checks the ^3 parent to properly handle files that were\n * untracked when the stash was created.\n */\nasync function computeFixBaseDiffStats(fixBase: string): Promise<DiffStats> {\n try {\n // Get line stats for tracked file changes since fixBase\n const numstat = await gitExec(['diff', '--numstat', fixBase]);\n const lineStats = parseNumstat(numstat);\n\n // Get file categorization for tracked file changes\n const nameStatus = await gitExec(['diff', '--name-status', fixBase]);\n const fileStats = parseNameStatus(nameStatus);\n\n // Current untracked files\n const currentUntracked = (\n await gitExec(['ls-files', '--others', '--exclude-standard'])\n )\n .split('\\n')\n .map((f) => f.trim())\n .filter((f) => f.length > 0);\n\n // Files in fixBase's main tree (tracked files)\n let fixBaseTrackedFiles: Set<string>;\n try {\n const treeFiles = await gitExec([\n 'ls-tree',\n '-r',\n '--name-only',\n fixBase,\n ]);\n fixBaseTrackedFiles = new Set(\n treeFiles\n .split('\\n')\n .map((f) => f.trim())\n .filter((f) => f.length > 0),\n );\n } catch {\n fixBaseTrackedFiles = new Set();\n }\n\n // Files in fixBase's untracked tree (stash ^3 parent)\n const fixBaseUntrackedFiles = await getStashUntrackedFiles(fixBase);\n\n // Combine all snapshot files\n const allSnapshotFiles = new Set([\n ...fixBaseTrackedFiles,\n ...fixBaseUntrackedFiles,\n ]);\n\n // Truly new untracked files (not in any snapshot tree)\n const newUntrackedFiles = currentUntracked.filter(\n (f) => !allSnapshotFiles.has(f),\n );\n\n // Known untracked: existed in stash's untracked tree and still untracked\n const knownUntrackedFiles = currentUntracked.filter((f) =>\n fixBaseUntrackedFiles.has(f),\n );\n\n // Count how many known-untracked files actually changed\n const changedKnownUntracked = await countChangedStashUntracked(\n knownUntrackedFiles,\n fixBase,\n );\n\n return {\n baseRef: fixBase,\n total: fileStats.total + newUntrackedFiles.length + changedKnownUntracked,\n newFiles: fileStats.newFiles + newUntrackedFiles.length,\n modifiedFiles: fileStats.modifiedFiles + changedKnownUntracked,\n deletedFiles: fileStats.deletedFiles,\n linesAdded: lineStats.linesAdded,\n linesRemoved: lineStats.linesRemoved,\n };\n } catch {\n return emptyDiffStats(fixBase);\n }\n}\n\n/**\n * Compute diff stats in CI environment.\n */\nasync function computeCIDiffStats(baseBranch: string): Promise<DiffStats> {\n const headRef = process.env.GITHUB_SHA || 'HEAD';\n\n try {\n const numstat = await gitExec([\n 'diff',\n '--numstat',\n `${baseBranch}...${headRef}`,\n ]);\n const lineStats = parseNumstat(numstat);\n\n const nameStatus = await gitExec([\n 'diff',\n '--name-status',\n `${baseBranch}...${headRef}`,\n ]);\n const fileStats = parseNameStatus(nameStatus);\n\n return {\n baseRef: baseBranch,\n ...fileStats,\n ...lineStats,\n };\n } catch {\n // Fallback for push events\n try {\n const numstat = await gitExec(['diff', '--numstat', 'HEAD^...HEAD']);\n const lineStats = parseNumstat(numstat);\n\n const nameStatus = await gitExec([\n 'diff',\n '--name-status',\n 'HEAD^...HEAD',\n ]);\n const fileStats = parseNameStatus(nameStatus);\n\n return {\n baseRef: 'HEAD^',\n ...fileStats,\n ...lineStats,\n };\n } catch {\n return emptyDiffStats(baseBranch);\n }\n }\n}\n\n/**\n * Compute diff stats for local development.\n */\nasync function computeLocalDiffStats(baseBranch: string): Promise<DiffStats> {\n // 1. Committed changes relative to base branch\n const committedNumstat = await gitExec([\n 'diff',\n '--numstat',\n `${baseBranch}...HEAD`,\n ]);\n const committedLines = parseNumstat(committedNumstat);\n\n const committedStatus = await gitExec([\n 'diff',\n '--name-status',\n `${baseBranch}...HEAD`,\n ]);\n const committedFiles = parseNameStatus(committedStatus);\n\n // 2. Uncommitted changes (staged and unstaged)\n const uncommittedNumstat = await gitExec(['diff', '--numstat', 'HEAD']);\n const uncommittedLines = parseNumstat(uncommittedNumstat);\n\n const uncommittedStatus = await gitExec(['diff', '--name-status', 'HEAD']);\n const uncommittedFiles = parseNameStatus(uncommittedStatus);\n\n // 3. Untracked files\n const untrackedList = await gitExec([\n 'ls-files',\n '--others',\n '--exclude-standard',\n ]);\n const untrackedFiles = untrackedList\n .split('\\n')\n .map((f) => f.trim())\n .filter((f) => f.length > 0);\n\n // Combine counts (with overlap detection)\n const totalNew =\n committedFiles.newFiles + uncommittedFiles.newFiles + untrackedFiles.length;\n const totalModified =\n committedFiles.modifiedFiles + uncommittedFiles.modifiedFiles;\n const totalDeleted =\n committedFiles.deletedFiles + uncommittedFiles.deletedFiles;\n\n return {\n baseRef: baseBranch,\n total: totalNew + totalModified + totalDeleted,\n newFiles: totalNew,\n modifiedFiles: totalModified,\n deletedFiles: totalDeleted,\n linesAdded: committedLines.linesAdded + uncommittedLines.linesAdded,\n linesRemoved: committedLines.linesRemoved + uncommittedLines.linesRemoved,\n };\n}\n\n/**\n * Parse git diff --numstat output for line counts.\n * Format: <added>\\t<removed>\\t<file>\n * Binary files show as \"-\\t-\\t<file>\"\n */\nfunction parseNumstat(output: string): {\n linesAdded: number;\n linesRemoved: number;\n} {\n let linesAdded = 0;\n let linesRemoved = 0;\n\n for (const line of output.split('\\n')) {\n if (!line.trim()) continue;\n const parts = line.split('\\t');\n if (parts.length < 3) continue;\n\n const added = parts[0];\n const removed = parts[1];\n // Binary files show as \"-\"\n if (added && added !== '-') {\n linesAdded += parseInt(added, 10) || 0;\n }\n if (removed && removed !== '-') {\n linesRemoved += parseInt(removed, 10) || 0;\n }\n }\n\n return { linesAdded, linesRemoved };\n}\n\n/**\n * Parse git diff --name-status output for file categorization.\n * Format: <status>\\t<file> (and optionally \\t<new-file> for renames)\n * Status codes: A=added, M=modified, D=deleted, R=renamed, C=copied, T=type-change\n */\nfunction parseNameStatus(output: string): {\n total: number;\n newFiles: number;\n modifiedFiles: number;\n deletedFiles: number;\n} {\n let newFiles = 0;\n let modifiedFiles = 0;\n let deletedFiles = 0;\n\n for (const line of output.split('\\n')) {\n if (!line.trim()) continue;\n const status = line[0];\n\n switch (status) {\n case 'A':\n newFiles++;\n break;\n case 'M':\n case 'R':\n case 'C':\n case 'T':\n modifiedFiles++;\n break;\n case 'D':\n deletedFiles++;\n break;\n }\n }\n\n return {\n total: newFiles + modifiedFiles + deletedFiles,\n newFiles,\n modifiedFiles,\n deletedFiles,\n };\n}\n\n/**\n * Count overlapping files between two name-status outputs.\n * Used to avoid double-counting files that appear in both staged and unstaged.\n */\nfunction countOverlap(status1: string, status2: string): number {\n const files1 = new Set<string>();\n for (const line of status1.split('\\n')) {\n if (!line.trim()) continue;\n const parts = line.split('\\t');\n const file = parts[1];\n if (parts.length >= 2 && file) {\n files1.add(file);\n }\n }\n\n let overlap = 0;\n for (const line of status2.split('\\n')) {\n if (!line.trim()) continue;\n const parts = line.split('\\t');\n const file = parts[1];\n if (parts.length >= 2 && file && files1.has(file)) {\n overlap++;\n }\n }\n\n return overlap;\n}\n\n/**\n * Return empty diff stats with the given base ref.\n */\nfunction emptyDiffStats(baseRef: string): DiffStats {\n return {\n baseRef,\n total: 0,\n newFiles: 0,\n modifiedFiles: 0,\n deletedFiles: 0,\n linesAdded: 0,\n linesRemoved: 0,\n };\n}\n",
|
|
40
41
|
"export type DiffFileRange = Set<number>;\n\n/**\n * Parses a unified diff string into a map of filenames to sets of valid line numbers.\n * Valid line numbers are those that appear in the diff as added or modified lines.\n */\nexport function parseDiff(diff: string): Map<string, DiffFileRange> {\n return new DiffParser().parse(diff);\n}\n\nclass DiffParser {\n private fileRanges = new Map<string, DiffFileRange>();\n private currentFile: string | null = null;\n private currentRanges: DiffFileRange | null = null;\n private currentLineNumber = 0;\n\n parse(diff: string): Map<string, DiffFileRange> {\n const lines = diff.split('\\n');\n for (const line of lines) {\n this.processLine(line);\n }\n return this.fileRanges;\n }\n\n private processLine(line: string): void {\n if (this.tryParseFileHeader(line)) return;\n if (!(this.currentFile && this.currentRanges)) return;\n if (this.tryParseHunkHeader(line)) return;\n this.processContentLine(line);\n }\n\n private tryParseFileHeader(line: string): boolean {\n if (!line.startsWith('diff --git')) return false;\n\n const result = parseFileHeader(line);\n if (result) {\n this.currentFile = result;\n this.currentRanges = new Set<number>();\n this.fileRanges.set(this.currentFile, this.currentRanges);\n } else {\n this.currentFile = null;\n this.currentRanges = null;\n }\n return true;\n }\n\n private tryParseHunkHeader(line: string): boolean {\n if (!line.startsWith('@@')) return false;\n\n const newLine = parseHunkHeader(line);\n if (newLine !== null) {\n this.currentLineNumber = newLine;\n }\n return true;\n }\n\n private processContentLine(line: string): void {\n if (!this.currentRanges) return;\n\n if (line.startsWith('+')) {\n if (line.startsWith('+++ ') || line.startsWith('+++\\t')) return;\n this.currentRanges.add(this.currentLineNumber);\n this.currentLineNumber++;\n } else if (line.startsWith(' ')) {\n this.currentLineNumber++;\n }\n }\n}\n\nfunction parseFileHeader(line: string): string | null {\n const match = line.match(/^diff --git a\\/.+ b\\/(.+)$/);\n if (!match?.[1]) return null;\n const file = match[1];\n return file.startsWith('.git/') ? null : file;\n}\n\nfunction parseHunkHeader(line: string): number | null {\n const match = line.match(/@@ -\\d+(?:,\\d+)? \\+(\\d+)(?:,\\d+)? @@/);\n return match?.[1] ? parseInt(match[1], 10) : null;\n}\n\n/**\n * Checks if a violation is valid based on the parsed diff ranges.\n */\nexport function isValidViolationLocation(\n file: string,\n line: number | undefined,\n diffRanges: Map<string, DiffFileRange> | undefined,\n): boolean {\n // If no diff ranges provided (e.g. full file review), assume valid\n if (!diffRanges) return true;\n\n // Line is required for diff-scoped reviews\n if (line === undefined) return false;\n\n const validLines = diffRanges.get(file);\n if (!validLines) {\n // File not in diff\n return false;\n }\n\n return validLines.has(line);\n}\n",
|
|
41
42
|
"import type { LoadedReviewGateConfig } from '../config/types.js';\n\nexport { MAX_BUFFER_BYTES } from '../constants.js';\nexport const MAX_LOG_BUFFER_SIZE = 10000;\nexport const REVIEW_ADAPTER_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes\n\n/** Chars-per-token approximation for rough token estimates. */\nexport const CHARS_PER_TOKEN = 4;\n\nexport const JSON_SYSTEM_INSTRUCTION = `\nYou are in a read-only mode. You may read files in the repository to gather context.\nDo NOT attempt to modify files or run shell commands that change system state.\nDo NOT access files outside the repository root.\nDo NOT access the .git/ directory or read git history/commit information.\nUse your available file-reading and search tools to find information.\nIf the diff is insufficient or ambiguous, use your tools to read the full file content or related files.\n\nCRITICAL SCOPE RESTRICTIONS:\n- ONLY review the code changes shown in the diff below\n- DO NOT review commit history or existing code outside the diff\n- All violations MUST reference file paths and line numbers that appear IN THE DIFF\n- The \"file\" field must match a file from the diff\n- The \"line\" field must be within a changed region (lines starting with + in the diff)\n\nIMPORTANT: You must output ONLY a valid JSON object. Do not output any markdown text, explanations, or code blocks outside of the JSON.\nEach violation MUST include a \"priority\" field with one of: \"critical\", \"high\", \"medium\", \"low\".\nEach violation MUST include a \"status\" field set to \"new\".\n\nIf violations are found:\n{\n \"status\": \"fail\",\n \"violations\": [\n {\n \"file\": \"path/to/file.rb\",\n \"line\": 10,\n \"issue\": \"Description of the violation\",\n \"fix\": \"Suggestion on how to fix it\",\n \"priority\": \"high\",\n \"status\": \"new\"\n }\n ]\n}\n\nIf NO violations are found:\n{\n \"status\": \"pass\",\n \"message\": \"No problems found\"\n}\n`;\n\nexport type ReviewConfig = LoadedReviewGateConfig;\n\nexport interface ReviewJsonOutput {\n status: 'pass' | 'fail';\n message?: string;\n violations?: Array<{\n file: string;\n line: number | string;\n issue: string;\n fix?: string;\n priority: 'critical' | 'high' | 'medium' | 'low';\n status: 'new' | 'fixed' | 'skipped';\n result?: string | null;\n }>;\n}\n\nexport interface ReviewOutputEntry {\n adapter: string;\n reviewIndex: number;\n duration?: number;\n status: 'pass' | 'fail' | 'error';\n message: string;\n json?: ReviewJsonOutput;\n skipped?: Array<{\n file: string;\n line: number | string;\n issue: string;\n result?: string | null;\n }>;\n}\n\nexport interface SkippedSlotOutput {\n adapter: string;\n reviewIndex: number;\n status: 'skipped_prior_pass';\n message: string;\n passIteration: number;\n}\n\nexport interface ReviewAssignment {\n adapter: string;\n reviewIndex: number;\n skip?: boolean;\n skipReason?: string;\n passIteration?: number;\n}\n\nexport interface EvaluationResult {\n status: 'pass' | 'fail' | 'error';\n message: string;\n json?: ReviewJsonOutput;\n filteredCount?: number;\n}\n\nexport interface SingleReviewResult {\n adapter: string;\n reviewIndex: number;\n duration: number;\n evaluation: {\n status: 'pass' | 'fail' | 'error';\n message: string;\n json?: ReviewJsonOutput;\n skipped?: Array<{\n file: string;\n line: number | string;\n issue: string;\n result?: string | null;\n }>;\n };\n}\n",
|
|
42
43
|
"import type { PreviousViolation } from './result.js';\nimport type { ReviewConfig } from './review-types.js';\nimport { JSON_SYSTEM_INSTRUCTION } from './review-types.js';\n\n// ── Prompt Building ─────────────────────────────────────────────────\n\nexport function buildReviewPrompt(\n config: ReviewConfig,\n previousViolations: PreviousViolation[] = [],\n): string {\n const baseContent = config.promptContent || '';\n\n if (previousViolations.length > 0) {\n return (\n baseContent +\n '\\n\\n' +\n buildPreviousFailuresSection(previousViolations) +\n '\\n' +\n JSON_SYSTEM_INSTRUCTION\n );\n }\n\n return `${baseContent}\\n${JSON_SYSTEM_INSTRUCTION}`;\n}\n\nexport function buildPreviousFailuresSection(\n violations: PreviousViolation[],\n): string {\n const toVerify = violations.filter((v) => v.status === 'fixed');\n const unaddressed = violations.filter((v) => v.status === 'new' || !v.status);\n const affectedFiles = [...new Set(violations.map((v) => v.file))];\n const lines: string[] = [];\n\n lines.push(buildRerunHeader());\n lines.push(...formatVerifySection(toVerify));\n lines.push(...formatUnaddressedSection(unaddressed));\n lines.push(buildRerunInstructions(affectedFiles));\n return lines.join('\\n');\n}\n\nfunction formatVerifySection(toVerify: PreviousViolation[]): string[] {\n if (toVerify.length === 0) {\n return ['(No violations were marked as FIXED for verification)\\n'];\n }\n const lines: string[] = [];\n for (const [i, v] of toVerify.entries()) {\n lines.push(`${i + 1}. ${v.file}:${v.line} - ${v.issue}`);\n if (v.fix) lines.push(` Suggested fix: ${v.fix}`);\n if (v.result) lines.push(` Agent result: ${v.result}`);\n lines.push('');\n }\n return lines;\n}\n\nfunction formatUnaddressedSection(unaddressed: PreviousViolation[]): string[] {\n if (unaddressed.length === 0) return [];\n const lines: string[] = [buildUnaddressedHeader()];\n for (const [i, v] of unaddressed.entries()) {\n lines.push(`${i + 1}. ${v.file}:${v.line} - ${v.issue}`);\n }\n lines.push('');\n return lines;\n}\n\nconst RERUN_SEPARATOR = '\\u2501'.repeat(46);\n\nfunction buildRerunHeader(): string {\n return `${RERUN_SEPARATOR}\\nRERUN MODE: VERIFY PREVIOUS FIXES ONLY\\n${RERUN_SEPARATOR}\\n\\nThis is a RERUN review. The agent attempted to fix some of the violations listed below.\\nYour task is STRICTLY LIMITED to verifying the fixes for violations marked as FIXED.\\n\\nPREVIOUS VIOLATIONS TO VERIFY:\\n`;\n}\n\nfunction buildUnaddressedHeader(): string {\n return 'UNADDRESSED VIOLATIONS (STILL FAILING):\\nThe following violations were NOT marked as fixed or skipped and are still active failures:\\n';\n}\n\nfunction buildRerunInstructions(affectedFiles: string[]): string {\n const files = affectedFiles.join(', ');\n return [\n 'STRICT INSTRUCTIONS FOR RERUN MODE:',\n '',\n '1. VERIFY FIXES: Check if each violation marked as FIXED above has been addressed',\n ' - For violations that are fixed, confirm they no longer appear',\n ' - For violations that remain unfixed, include them in your violations array (status: \"new\")',\n '',\n '2. UNADDRESSED VIOLATIONS: You MUST include all UNADDRESSED violations listed above in your output array if they still exist.',\n '',\n '3. CHECK FOR REGRESSIONS ONLY: You may ONLY report NEW violations if they:',\n ` - Are in FILES that were modified to fix the above violations: ${files}`,\n ' - Are DIRECTLY caused by the fix changes (e.g., a fix introduced a new bug)',\n ' - Are in the same function/region that was modified to address a previous violation',\n '',\n '4. Return status \"pass\" ONLY if ALL previous violations (including unaddressed ones) are now fixed AND no regressions were introduced.',\n ' Otherwise, return status \"fail\" and list all remaining violations.',\n '',\n RERUN_SEPARATOR,\n ].join('\\n');\n}\n",
|
|
@@ -65,23 +66,24 @@
|
|
|
65
66
|
"import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport YAML from 'yaml';\nimport { ZodError } from 'zod';\nimport { getValidCLITools } from '../cli-adapters/index.js';\nimport {\n checkGateSchema,\n entryPointSchema,\n gauntletConfigSchema,\n} from './schema.js';\nimport type {\n CheckGateConfig,\n GauntletConfig,\n ReviewPromptFrontmatter,\n} from './types.js';\nimport { validateReviewGates } from './validate-reviews.js';\n\nconst GAUNTLET_DIR = '.gauntlet';\nconst CONFIG_FILE = 'config.yml';\nconst CHECKS_DIR = 'checks';\nconst REVIEWS_DIR = 'reviews';\n\nexport interface ValidationIssue {\n file: string;\n severity: 'error' | 'warning';\n message: string;\n field?: string;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n issues: ValidationIssue[];\n filesChecked: string[];\n}\n\ninterface ValidatorContext {\n gauntletPath: string;\n configPath: string;\n issues: ValidationIssue[];\n filesChecked: string[];\n}\n\nexport async function validateConfig(\n rootDir: string = process.cwd(),\n): Promise<ValidationResult> {\n const gauntletPath = path.join(rootDir, GAUNTLET_DIR);\n const configPath = path.join(gauntletPath, CONFIG_FILE);\n const ctx: ValidatorContext = {\n gauntletPath,\n configPath,\n issues: [],\n filesChecked: [],\n };\n\n const projectConfig = await validateProjectConfig(ctx);\n const { existingCheckNames } = await validateCheckGates(ctx);\n const { reviews, reviewSourceFiles, existingReviewNames } =\n await validateReviewGatesWrapper(ctx);\n\n if (projectConfig?.entry_points) {\n validateEntryPointReferences(\n projectConfig,\n existingCheckNames,\n existingReviewNames,\n ctx,\n );\n }\n\n if (projectConfig) {\n validateProjectLevelConfig(projectConfig, ctx);\n validateCliConfig(projectConfig, reviews, reviewSourceFiles, ctx);\n }\n\n const valid = ctx.issues.filter((i) => i.severity === 'error').length === 0;\n return { valid, issues: ctx.issues, filesChecked: ctx.filesChecked };\n}\n\nasync function validateProjectConfig(\n ctx: ValidatorContext,\n): Promise<GauntletConfig | null> {\n try {\n if (await fileExists(ctx.configPath)) {\n ctx.filesChecked.push(ctx.configPath);\n const configContent = await fs.readFile(ctx.configPath, 'utf-8');\n return parseProjectConfig(configContent, ctx);\n }\n ctx.issues.push({\n file: ctx.configPath,\n severity: 'error',\n message: 'Config file not found',\n });\n return null;\n } catch (error: unknown) {\n const err = error as { message?: string };\n ctx.issues.push({\n file: ctx.configPath,\n severity: 'error',\n message: `Error reading file: ${err.message}`,\n });\n return null;\n }\n}\n\nfunction parseProjectConfig(\n configContent: string,\n ctx: ValidatorContext,\n): GauntletConfig | null {\n try {\n const raw = YAML.parse(configContent);\n return gauntletConfigSchema.parse(raw);\n } catch (error: unknown) {\n if (error instanceof ZodError) {\n for (const err of error.issues) {\n ctx.issues.push({\n file: ctx.configPath,\n severity: 'error',\n message: err.message,\n field: err.path.join('.'),\n });\n }\n } else {\n pushYamlOrParseError(error, ctx.configPath, ctx.issues);\n }\n return null;\n }\n}\n\nasync function validateCheckGates(ctx: ValidatorContext): Promise<{\n checks: Record<string, CheckGateConfig>;\n existingCheckNames: Set<string>;\n}> {\n const checks: Record<string, CheckGateConfig> = {};\n const existingCheckNames = new Set<string>();\n const checksPath = path.join(ctx.gauntletPath, CHECKS_DIR);\n\n if (!(await dirExists(checksPath))) {\n return { checks, existingCheckNames };\n }\n\n try {\n const checkFiles = await fs.readdir(checksPath);\n for (const file of checkFiles) {\n if (file.endsWith('.yml') || file.endsWith('.yaml')) {\n await parseCheckFile(file, checksPath, checks, existingCheckNames, ctx);\n }\n }\n } catch (error: unknown) {\n const err = error as { message?: string };\n ctx.issues.push({\n file: checksPath,\n severity: 'error',\n message: `Error reading checks directory: ${err.message}`,\n });\n }\n\n return { checks, existingCheckNames };\n}\n\nasync function parseCheckFile(\n file: string,\n checksPath: string,\n checks: Record<string, CheckGateConfig>,\n existingCheckNames: Set<string>,\n ctx: ValidatorContext,\n): Promise<void> {\n const filePath = path.join(checksPath, file);\n ctx.filesChecked.push(filePath);\n const name = path.basename(file, path.extname(file));\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const raw = YAML.parse(content);\n const parsed = checkGateSchema.parse(raw);\n existingCheckNames.add(name);\n checks[name] = parsed;\n\n if (!parsed.command || parsed.command.trim() === '') {\n ctx.issues.push({\n file: filePath,\n severity: 'error',\n message: 'command field is required and cannot be empty',\n field: 'command',\n });\n }\n } catch (error: unknown) {\n existingCheckNames.add(name);\n if (error instanceof ZodError) {\n for (const err of error.issues) {\n ctx.issues.push({\n file: filePath,\n severity: 'error',\n message: err.message,\n field: err.path.join('.'),\n });\n }\n } else {\n pushYamlOrParseError(error, filePath, ctx.issues);\n }\n }\n}\n\nasync function validateReviewGatesWrapper(ctx: ValidatorContext): Promise<{\n reviews: Record<string, ReviewPromptFrontmatter>;\n reviewSourceFiles: Record<string, string>;\n existingReviewNames: Set<string>;\n}> {\n const reviewsPath = path.join(ctx.gauntletPath, REVIEWS_DIR);\n\n if (!(await dirExists(reviewsPath))) {\n return {\n reviews: {},\n reviewSourceFiles: {},\n existingReviewNames: new Set<string>(),\n };\n }\n\n return validateReviewGates(reviewsPath, ctx.issues, ctx.filesChecked);\n}\n\nfunction validateEntryPointReferences(\n projectConfig: GauntletConfig,\n existingCheckNames: Set<string>,\n existingReviewNames: Set<string>,\n ctx: ValidatorContext,\n): void {\n for (let i = 0; i < projectConfig.entry_points.length; i++) {\n // biome-ignore lint/style/noNonNullAssertion: index within bounds\n const entryPoint = projectConfig.entry_points[i]!;\n const entryPointPath = `entry_points[${i}]`;\n\n validateEntryPointSchema(entryPoint, entryPointPath, ctx);\n validateReferencedChecks(\n entryPoint,\n entryPointPath,\n existingCheckNames,\n ctx,\n );\n validateReferencedReviews(\n entryPoint,\n entryPointPath,\n existingReviewNames,\n ctx,\n );\n validateEntryPointHasGates(entryPoint, entryPointPath, ctx);\n validateEntryPointPathField(entryPoint, entryPointPath, ctx);\n }\n}\n\nfunction validateEntryPointSchema(\n entryPoint: { path: string; checks?: string[]; reviews?: string[] },\n entryPointPath: string,\n ctx: ValidatorContext,\n): void {\n try {\n entryPointSchema.parse(entryPoint);\n } catch (error: unknown) {\n if (error instanceof ZodError) {\n for (const err of error.issues) {\n ctx.issues.push({\n file: ctx.configPath,\n severity: 'error',\n message: err.message,\n field: `${entryPointPath}.${err.path.join('.')}`,\n });\n }\n }\n }\n}\n\nfunction validateReferencedChecks(\n entryPoint: { checks?: string[] },\n entryPointPath: string,\n existingCheckNames: Set<string>,\n ctx: ValidatorContext,\n): void {\n if (!entryPoint.checks) {\n return;\n }\n for (const checkName of entryPoint.checks) {\n if (!existingCheckNames.has(checkName)) {\n ctx.issues.push({\n file: ctx.configPath,\n severity: 'error',\n message: `Entry point references non-existent check gate: \"${checkName}\"`,\n field: `${entryPointPath}.checks`,\n });\n }\n }\n}\n\nfunction validateReferencedReviews(\n entryPoint: { reviews?: string[] },\n entryPointPath: string,\n existingReviewNames: Set<string>,\n ctx: ValidatorContext,\n): void {\n if (!entryPoint.reviews) {\n return;\n }\n for (const reviewName of entryPoint.reviews) {\n if (!existingReviewNames.has(reviewName)) {\n ctx.issues.push({\n file: ctx.configPath,\n severity: 'error',\n message: `Entry point references non-existent review gate: \"${reviewName}\"`,\n field: `${entryPointPath}.reviews`,\n });\n }\n }\n}\n\nfunction validateEntryPointHasGates(\n entryPoint: { path: string; checks?: string[]; reviews?: string[] },\n entryPointPath: string,\n ctx: ValidatorContext,\n): void {\n if (\n (!entryPoint.checks || entryPoint.checks.length === 0) &&\n (!entryPoint.reviews || entryPoint.reviews.length === 0)\n ) {\n ctx.issues.push({\n file: ctx.configPath,\n severity: 'warning',\n message: `Entry point at \"${entryPoint.path}\" has no checks or reviews configured`,\n field: `${entryPointPath}`,\n });\n }\n}\n\nfunction validateEntryPointPathField(\n entryPoint: { path: string },\n entryPointPath: string,\n ctx: ValidatorContext,\n): void {\n if (!entryPoint.path || entryPoint.path.trim() === '') {\n ctx.issues.push({\n file: ctx.configPath,\n severity: 'error',\n message: 'Entry point path cannot be empty',\n field: `${entryPointPath}.path`,\n });\n }\n}\n\nfunction validateProjectLevelConfig(\n projectConfig: GauntletConfig,\n ctx: ValidatorContext,\n): void {\n if (\n projectConfig.log_dir !== undefined &&\n projectConfig.log_dir.trim() === ''\n ) {\n ctx.issues.push({\n file: ctx.configPath,\n severity: 'error',\n message: 'log_dir cannot be empty',\n field: 'log_dir',\n });\n }\n\n if (\n projectConfig.base_branch !== undefined &&\n projectConfig.base_branch.trim() === ''\n ) {\n ctx.issues.push({\n file: ctx.configPath,\n severity: 'error',\n message: 'base_branch cannot be empty',\n field: 'base_branch',\n });\n }\n\n if (\n projectConfig.entry_points === undefined ||\n projectConfig.entry_points.length === 0\n ) {\n ctx.issues.push({\n file: ctx.configPath,\n severity: 'error',\n message: 'entry_points is required and cannot be empty',\n field: 'entry_points',\n });\n }\n}\n\nfunction validateCliConfig(\n projectConfig: GauntletConfig,\n reviews: Record<string, ReviewPromptFrontmatter>,\n reviewSourceFiles: Record<string, string>,\n ctx: ValidatorContext,\n): void {\n if (!projectConfig.cli) {\n return;\n }\n\n const defaults = projectConfig.cli.default_preference;\n if (!(defaults && Array.isArray(defaults)) || defaults.length === 0) {\n ctx.issues.push({\n file: ctx.configPath,\n severity: 'error',\n message: 'cli.default_preference is required and cannot be empty',\n field: 'cli.default_preference',\n });\n return;\n }\n\n validateDefaultPreferenceTools(defaults, ctx);\n validateReviewPreferencesAgainstDefaults(\n defaults,\n reviews,\n reviewSourceFiles,\n ctx,\n );\n}\n\nfunction validateDefaultPreferenceTools(\n defaults: string[],\n ctx: ValidatorContext,\n): void {\n for (let i = 0; i < defaults.length; i++) {\n const toolName = defaults[i] as string;\n if (!getValidCLITools().includes(toolName)) {\n ctx.issues.push({\n file: ctx.configPath,\n severity: 'error',\n message: `Invalid CLI tool \"${toolName}\" in default_preference. Valid options are: ${getValidCLITools().join(', ')}`,\n field: `cli.default_preference[${i}]`,\n });\n }\n }\n}\n\nfunction validateReviewPreferencesAgainstDefaults(\n defaults: string[],\n reviews: Record<string, ReviewPromptFrontmatter>,\n reviewSourceFiles: Record<string, string>,\n ctx: ValidatorContext,\n): void {\n const reviewsPath = path.join(ctx.gauntletPath, REVIEWS_DIR);\n const allowedTools = new Set(defaults);\n for (const [reviewName, reviewConfig] of Object.entries(reviews)) {\n const pref = reviewConfig.cli_preference;\n if (pref && Array.isArray(pref)) {\n const reviewFile =\n reviewSourceFiles[reviewName] ||\n path.join(reviewsPath, `${reviewName}.md`);\n for (let i = 0; i < pref.length; i++) {\n const tool = pref[i] as string;\n if (!allowedTools.has(tool)) {\n ctx.issues.push({\n file: reviewFile,\n severity: 'error',\n message: `CLI tool \"${tool}\" is not in project-level default_preference. Review gates can only use tools enabled in config.yml`,\n field: `cli_preference[${i}]`,\n });\n }\n }\n }\n }\n}\n\nfunction pushYamlOrParseError(\n error: unknown,\n filePath: string,\n issues: ValidationIssue[],\n): void {\n const err = error as { name?: string; message?: string };\n if (err.name === 'YAMLSyntaxError' || err.message?.includes('YAML')) {\n issues.push({\n file: filePath,\n severity: 'error',\n message: `Malformed YAML: ${err.message}`,\n });\n } else {\n issues.push({\n file: filePath,\n severity: 'error',\n message: `Parse error: ${err.message}`,\n });\n }\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(filePath);\n return stat.isFile();\n } catch {\n return false;\n }\n}\n\nasync function dirExists(dirPath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(dirPath);\n return stat.isDirectory();\n } catch {\n return false;\n }\n}\n",
|
|
66
67
|
"import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport matter from 'gray-matter';\nimport YAML from 'yaml';\nimport { ZodError } from 'zod';\nimport { getValidCLITools } from '../cli-adapters/index.js';\nimport { reviewPromptFrontmatterSchema, reviewYamlSchema } from './schema.js';\nimport type { ReviewPromptFrontmatter } from './types.js';\nimport type { ValidationIssue } from './validator.js';\n\nexport interface ReviewValidationResult {\n reviews: Record<string, ReviewPromptFrontmatter>;\n reviewSourceFiles: Record<string, string>;\n existingReviewNames: Set<string>;\n}\n\nexport async function validateReviewGates(\n reviewsPath: string,\n issues: ValidationIssue[],\n filesChecked: string[],\n): Promise<ReviewValidationResult> {\n const reviews: Record<string, ReviewPromptFrontmatter> = {};\n const reviewSourceFiles: Record<string, string> = {};\n const existingReviewNames = new Set<string>();\n\n try {\n const reviewFiles = await fs.readdir(reviewsPath);\n\n detectDuplicateReviewNames(reviewFiles, reviewsPath, issues);\n\n for (const file of reviewFiles) {\n if (file.endsWith('.md')) {\n await validateMarkdownReview(\n file,\n reviewsPath,\n reviews,\n reviewSourceFiles,\n existingReviewNames,\n issues,\n filesChecked,\n );\n } else if (file.endsWith('.yml') || file.endsWith('.yaml')) {\n await validateYamlReview(\n file,\n reviewsPath,\n reviews,\n reviewSourceFiles,\n existingReviewNames,\n issues,\n filesChecked,\n );\n }\n }\n } catch (error: unknown) {\n const err = error as { message?: string };\n issues.push({\n file: reviewsPath,\n severity: 'error',\n message: `Error reading reviews directory: ${\n err.message || String(error)\n }`,\n });\n }\n\n return { reviews, reviewSourceFiles, existingReviewNames };\n}\n\nfunction detectDuplicateReviewNames(\n reviewFiles: string[],\n reviewsPath: string,\n issues: ValidationIssue[],\n): void {\n const reviewNameSources = new Map<string, string[]>();\n for (const file of reviewFiles) {\n if (\n file.endsWith('.md') ||\n file.endsWith('.yml') ||\n file.endsWith('.yaml')\n ) {\n const name = path.basename(file, path.extname(file));\n const sources = reviewNameSources.get(name) || [];\n sources.push(file);\n reviewNameSources.set(name, sources);\n }\n }\n for (const [name, sources] of reviewNameSources) {\n if (sources.length > 1) {\n issues.push({\n file: reviewsPath,\n severity: 'error',\n message: `Duplicate review name \"${name}\" found across files: ${sources.join(', ')}`,\n });\n }\n }\n}\n\nasync function validateMarkdownReview(\n file: string,\n reviewsPath: string,\n reviews: Record<string, ReviewPromptFrontmatter>,\n reviewSourceFiles: Record<string, string>,\n existingReviewNames: Set<string>,\n issues: ValidationIssue[],\n filesChecked: string[],\n): Promise<void> {\n const filePath = path.join(reviewsPath, file);\n const reviewName = path.basename(file, '.md');\n existingReviewNames.add(reviewName);\n filesChecked.push(filePath);\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const { data: frontmatter, content: _promptBody } = matter(content);\n\n if (!frontmatter || Object.keys(frontmatter).length === 0) {\n issues.push({\n file: filePath,\n severity: 'error',\n message: 'Review gate must have YAML frontmatter',\n });\n return;\n }\n\n validateCliPreferenceTools(frontmatter, filePath, issues);\n\n const parsedFrontmatter = reviewPromptFrontmatterSchema.parse(frontmatter);\n const name = path.basename(file, '.md');\n reviews[name] = parsedFrontmatter;\n reviewSourceFiles[name] = filePath;\n\n validateReviewSemantics(parsedFrontmatter, filePath, issues);\n } catch (error: unknown) {\n handleReviewValidationError(error, filePath, issues);\n }\n}\n\nasync function validateYamlReview(\n file: string,\n reviewsPath: string,\n reviews: Record<string, ReviewPromptFrontmatter>,\n reviewSourceFiles: Record<string, string>,\n existingReviewNames: Set<string>,\n issues: ValidationIssue[],\n filesChecked: string[],\n): Promise<void> {\n const filePath = path.join(reviewsPath, file);\n const reviewName = path.basename(file, path.extname(file));\n existingReviewNames.add(reviewName);\n filesChecked.push(filePath);\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const raw = YAML.parse(content);\n\n validateCliPreferenceTools(raw, filePath, issues);\n\n const parsed = reviewYamlSchema.parse(raw);\n reviews[reviewName] = parsed;\n reviewSourceFiles[reviewName] = filePath;\n\n validateReviewSemantics(parsed, filePath, issues);\n } catch (error: unknown) {\n handleReviewValidationError(error, filePath, issues);\n }\n}\n\nexport function validateCliPreferenceTools(\n data: Record<string, unknown>,\n filePath: string,\n issues: ValidationIssue[],\n): void {\n if (data.cli_preference && Array.isArray(data.cli_preference)) {\n for (let i = 0; i < data.cli_preference.length; i++) {\n const toolName = data.cli_preference[i];\n if (\n typeof toolName === 'string' &&\n !getValidCLITools().includes(toolName)\n ) {\n issues.push({\n file: filePath,\n severity: 'error',\n message: `Invalid CLI tool \"${toolName}\" in cli_preference. Valid options are: ${getValidCLITools().join(', ')}`,\n field: `cli_preference[${i}]`,\n });\n }\n }\n }\n}\n\nexport function validateReviewSemantics(\n parsed: { cli_preference?: string[]; num_reviews?: number; timeout?: number },\n filePath: string,\n issues: ValidationIssue[],\n): void {\n if (parsed.cli_preference !== undefined) {\n validateReviewCliPreference(parsed.cli_preference, filePath, issues);\n }\n\n if (parsed.num_reviews !== undefined && parsed.num_reviews < 1) {\n issues.push({\n file: filePath,\n severity: 'error',\n message: 'num_reviews must be at least 1',\n field: 'num_reviews',\n });\n }\n\n if (parsed.timeout !== undefined && parsed.timeout <= 0) {\n issues.push({\n file: filePath,\n severity: 'error',\n message: 'timeout must be greater than 0',\n field: 'timeout',\n });\n }\n}\n\nfunction validateReviewCliPreference(\n cliPreference: string[],\n filePath: string,\n issues: ValidationIssue[],\n): void {\n if (cliPreference.length === 0) {\n issues.push({\n file: filePath,\n severity: 'error',\n message:\n 'cli_preference if provided cannot be an empty array. Remove it to use defaults.',\n field: 'cli_preference',\n });\n return;\n }\n for (let i = 0; i < cliPreference.length; i++) {\n const toolName = cliPreference[i] as string;\n if (!getValidCLITools().includes(toolName)) {\n issues.push({\n file: filePath,\n severity: 'error',\n message: `Invalid CLI tool \"${toolName}\" in cli_preference. Valid options are: ${getValidCLITools().join(', ')}`,\n field: `cli_preference[${i}]`,\n });\n }\n }\n}\n\nexport function handleReviewValidationError(\n error: unknown,\n filePath: string,\n issues: ValidationIssue[],\n): void {\n if (error instanceof ZodError) {\n pushZodIssues(error, filePath, issues);\n return;\n }\n const err = error as { name?: string; message?: string };\n if (err.name === 'YAMLSyntaxError' || err.message?.includes('YAML')) {\n issues.push({\n file: filePath,\n severity: 'error',\n message: `Malformed YAML: ${err.message || 'Unknown YAML error'}`,\n });\n return;\n }\n pushGenericError(err, error, filePath, issues);\n}\n\nfunction pushZodIssues(\n error: ZodError,\n filePath: string,\n issues: ValidationIssue[],\n): void {\n for (const err of error.issues) {\n const fieldPath =\n err.path && Array.isArray(err.path) ? err.path.join('.') : undefined;\n const message = err.message || `Invalid value for ${fieldPath || 'field'}`;\n issues.push({\n file: filePath,\n severity: 'error',\n message,\n field: fieldPath,\n });\n }\n}\n\nfunction pushGenericError(\n err: { name?: string; message?: string },\n error: unknown,\n filePath: string,\n issues: ValidationIssue[],\n): void {\n const errorMessage = err.message || String(error);\n try {\n const parsed = JSON.parse(errorMessage);\n if (Array.isArray(parsed)) {\n for (const item of parsed) {\n const fieldPath =\n item.path && Array.isArray(item.path)\n ? item.path.join('.')\n : undefined;\n issues.push({\n file: filePath,\n severity: 'error',\n message: item.message || `Invalid value for ${fieldPath || 'field'}`,\n field: fieldPath,\n });\n }\n return;\n }\n issues.push({\n file: filePath,\n severity: 'error',\n message: errorMessage,\n });\n } catch {\n issues.push({\n file: filePath,\n severity: 'error',\n message: errorMessage,\n });\n }\n}\n",
|
|
67
68
|
"import chalk from 'chalk';\nimport type { Command } from 'commander';\n\nexport function registerHelpCommand(program: Command): void {\n program\n .command('help')\n .description('Show help information')\n .action(() => {\n console.log(chalk.bold('Agent Gauntlet - AI-assisted quality gates\\n'));\n console.log(\n 'Agent Gauntlet runs quality gates (checks + AI reviews) for only the parts',\n );\n console.log(\n 'of your repo that changed, based on a configurable set of entry points.\\n',\n );\n console.log(chalk.bold('Commands:\\n'));\n console.log(' run Run gates for detected changes');\n console.log(' check Run only applicable checks');\n console.log(' review Run only applicable reviews');\n console.log(' clean Archive logs (move current logs into previous/)');\n console.log(\n ' detect Show what gates would run (without executing them)',\n );\n console.log(' list List configured gates');\n console.log(' health Check CLI tool availability');\n console.log(' init Initialize .gauntlet configuration');\n console.log(' ci CI integration commands (init, list-jobs)');\n console.log(' help Show this help message\\n');\n console.log(\n 'For more information, see: https://github.com/your-repo/agent-gauntlet',\n );\n console.log('Or run: agent-gauntlet <command> --help');\n });\n}\n",
|
|
68
|
-
"import { execFileSync } from 'node:child_process';\nimport { statSync } from 'node:fs';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport chalk from 'chalk';\nimport type { Command } from 'commander';\nimport { type CLIAdapter, getAllAdapters } from '../cli-adapters/index.js';\nimport { computeSkillChecksum } from './init-checksums.js';\nimport { installHooksForAdapters } from './init-hooks.js';\nimport {\n promptDevCLIs,\n promptFileOverwrite,\n promptNumReviews,\n promptReviewCLIs,\n} from './init-prompts.js';\nimport { exists } from './shared.js';\n\n// Re-export hook utilities for external consumers\nexport {\n installCursorStartHook,\n installCursorStopHook,\n installStartHook,\n installStopHook,\n mergeHookConfig,\n} from './init-hooks.js';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\n// After bundling, __dirname is `dist/` (one level below package root).\n// In dev, __dirname is `src/commands/` (two levels below package root).\n// Detect context by checking which path actually contains the skills directory.\nconst SKILLS_SOURCE_DIR = (() => {\n const bundled = path.join(__dirname, '..', 'skills');\n const dev = path.join(__dirname, '..', '..', 'skills');\n try {\n statSync(bundled);\n return bundled;\n } catch (err: unknown) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code === 'ENOENT' || code === 'ENOTDIR') return dev;\n throw err;\n }\n})();\n\nconst SKILL_ACTIONS = ['run', 'check', 'status', 'help', 'setup'] as const;\n\nconst SKILL_DESCRIPTIONS: Record<(typeof SKILL_ACTIONS)[number], string> = {\n run: 'Run the verification suite',\n check: 'Run checks only (no reviews)',\n status: 'Show gauntlet status',\n help: 'Diagnose and explain gauntlet behavior',\n setup: 'Configure checks and reviews interactively',\n};\n\nconst CLI_PREFERENCE_ORDER = [\n 'codex',\n 'claude',\n 'cursor',\n 'github-copilot',\n 'gemini',\n];\n\ntype AdapterCfg = {\n allow_tool_use: boolean;\n thinking_budget: string;\n model?: string;\n};\nconst ADAPTER_CONFIG: Record<string, AdapterCfg> = {\n claude: { allow_tool_use: false, thinking_budget: 'high' },\n codex: { allow_tool_use: false, thinking_budget: 'low' },\n gemini: { allow_tool_use: false, thinking_budget: 'low' },\n cursor: { allow_tool_use: false, thinking_budget: 'low', model: 'codex' },\n 'github-copilot': {\n allow_tool_use: false,\n thinking_budget: 'low',\n model: 'codex',\n },\n};\n\ninterface InitOptions {\n yes?: boolean;\n}\n\n/** Native CLIs that support the /gauntlet-setup skill invocation. */\nconst NATIVE_CLIS = new Set(['claude', 'cursor']);\n\nexport function registerInitCommand(program: Command): void {\n program\n .command('init')\n .description('Initialize .gauntlet configuration')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .action(async (options: InitOptions) => {\n await runInit(options);\n });\n}\n\nasync function runInit(options: InitOptions): Promise<void> {\n const projectRoot = process.cwd();\n const targetDir = path.join(projectRoot, '.gauntlet');\n const skipPrompts = options.yes ?? false;\n\n console.log('Detecting available CLI agents...');\n const availableAdapters = await detectAvailableCLIs();\n\n if (availableAdapters.length === 0) {\n printNoCLIsMessage();\n return;\n }\n\n const detectedNames = availableAdapters.map((a) => a.name);\n const gauntletExists = await exists(targetDir);\n\n let hookAdapters: CLIAdapter[];\n let instructionCLINames: string[];\n\n if (gauntletExists) {\n console.log(chalk.dim('.gauntlet/ already exists, skipping scaffolding'));\n hookAdapters = availableAdapters;\n instructionCLINames = detectedNames;\n } else {\n const devCLINames = await promptDevCLIs(detectedNames, skipPrompts);\n hookAdapters = availableAdapters.filter((a) =>\n devCLINames.includes(a.name),\n );\n\n for (const adapter of hookAdapters) {\n if (!adapter.supportsHooks()) {\n console.log(\n chalk.yellow(\n ` ${adapter.name} doesn't support hooks yet, skipping hook installation`,\n ),\n );\n }\n }\n\n const reviewCLINames = await promptReviewCLIs(detectedNames, skipPrompts);\n const numReviews = await promptNumReviews(\n reviewCLINames.length,\n skipPrompts,\n );\n console.log(\n chalk.cyan(\n \"Agent Gauntlet's built-in code quality reviewer will be installed.\",\n ),\n );\n\n await scaffoldGauntletDir(\n projectRoot,\n targetDir,\n reviewCLINames,\n numReviews,\n );\n instructionCLINames = devCLINames;\n }\n\n await installExternalFiles(projectRoot, hookAdapters, skipPrompts);\n await addToGitignore(projectRoot, 'gauntlet_logs');\n printPostInitInstructions(instructionCLINames);\n}\n\nfunction printNoCLIsMessage(): void {\n console.log();\n console.log(chalk.red('Error: No CLI agents found. Install at least one:'));\n console.log(' - Claude: https://docs.anthropic.com/en/docs/claude-code');\n console.log(' - Gemini: https://github.com/google-gemini/gemini-cli');\n console.log(' - Codex: https://github.com/openai/codex');\n console.log();\n}\n\nasync function scaffoldGauntletDir(\n _projectRoot: string,\n targetDir: string,\n reviewCLINames: string[],\n numReviews: number,\n): Promise<void> {\n if (await exists(targetDir)) {\n console.log(chalk.dim('.gauntlet/ already exists, skipping scaffolding'));\n return;\n }\n\n await fs.mkdir(targetDir);\n await fs.mkdir(path.join(targetDir, 'checks'));\n await fs.mkdir(path.join(targetDir, 'reviews'));\n\n await writeConfigYml(targetDir, reviewCLINames);\n\n await fs.writeFile(\n path.join(targetDir, 'reviews', 'code-quality.yml'),\n `builtin: code-quality\\nnum_reviews: ${numReviews}\\n`,\n );\n console.log(chalk.green('Created .gauntlet/reviews/code-quality.yml'));\n}\n\nasync function copyDirRecursive(opts: {\n src: string;\n dest: string;\n}): Promise<void> {\n await fs.mkdir(opts.dest, { recursive: true });\n const entries = await fs.readdir(opts.src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(opts.src, entry.name);\n const destPath = path.join(opts.dest, entry.name);\n if (entry.isDirectory()) {\n await copyDirRecursive({ src: srcPath, dest: destPath });\n } else {\n await fs.copyFile(srcPath, destPath);\n }\n }\n}\n\nasync function installSkillsWithChecksums(\n projectRoot: string,\n skipPrompts: boolean,\n): Promise<void> {\n const skillsDir = path.join(projectRoot, '.claude', 'skills');\n for (const action of SKILL_ACTIONS) {\n const dirName = `gauntlet-${action}`;\n const sourceDir = path.join(SKILLS_SOURCE_DIR, dirName);\n const targetDir = path.join(skillsDir, dirName);\n const relativeDir = `${path.relative(projectRoot, targetDir)}/`;\n\n if (!(await exists(targetDir))) {\n await copyDirRecursive({ src: sourceDir, dest: targetDir });\n console.log(chalk.green(`Created ${relativeDir}`));\n continue;\n }\n\n const sourceChecksum = await computeSkillChecksum(sourceDir);\n const targetChecksum = await computeSkillChecksum(targetDir);\n if (sourceChecksum === targetChecksum) continue;\n\n const shouldOverwrite = await promptFileOverwrite(dirName, skipPrompts);\n if (!shouldOverwrite) continue;\n\n await fs.rm(targetDir, { recursive: true, force: true });\n await copyDirRecursive({ src: sourceDir, dest: targetDir });\n console.log(chalk.green(`Updated ${relativeDir}`));\n }\n}\n\nasync function installExternalFiles(\n projectRoot: string,\n devAdapters: CLIAdapter[],\n skipPrompts: boolean,\n): Promise<void> {\n await installSkillsWithChecksums(projectRoot, skipPrompts);\n await installHooksForAdapters(projectRoot, devAdapters, skipPrompts);\n}\n\nfunction printPostInitInstructions(devCLINames: string[]): void {\n const hasNative = devCLINames.some((name) => NATIVE_CLIS.has(name));\n const nonNativeNames = devCLINames.filter((name) => !NATIVE_CLIS.has(name));\n const hasNonNative = nonNativeNames.length > 0;\n\n console.log();\n if (hasNative) {\n console.log(\n chalk.bold(\n 'To complete setup, run /gauntlet-setup in your CLI. This will guide you through configuring the static checks (unit tests, linters, etc.) that Agent Gauntlet will run.',\n ),\n );\n }\n if (hasNonNative) {\n console.log(\n chalk.bold(\n 'To complete setup, reference the setup skill in your CLI: @.claude/skills/gauntlet-setup/SKILL.md. This will guide you through configuring the static checks (unit tests, linters, etc.) that Agent Gauntlet will run.',\n ),\n );\n console.log();\n console.log('Available skills:');\n for (const action of SKILL_ACTIONS) {\n console.log(\n ` @.claude/skills/gauntlet-${action}/SKILL.md — ${SKILL_DESCRIPTIONS[action]}`,\n );\n }\n }\n}\n\nasync function writeConfigYml(\n targetDir: string,\n reviewCLINames: string[],\n): Promise<void> {\n const baseBranch = await detectBaseBranch();\n const cliList = reviewCLINames.map((name) => ` - ${name}`).join('\\n');\n const adapterSettings = buildAdapterSettingsBlock(reviewCLINames);\n\n const content = `# Ordered list of CLI agents to try for reviews\ncli:\n default_preference:\n${cliList}\n${adapterSettings}\n# entry_points configured by /gauntlet-setup\nentry_points: []\n\n# -------------------------------------------------------------------\n# All settings below are optional. Uncomment and change as needed.\n# -------------------------------------------------------------------\n\n# Git ref for detecting local changes via git diff (default: origin/main)\n# base_branch: ${baseBranch}\n\n# Directory for per-job logs (default: gauntlet_logs)\n# log_dir: gauntlet_logs\n\n# Run gates in parallel when possible (default: true)\n# allow_parallel: true\n\n# Maximum retry attempts before declaring \"Retry limit exceeded\" (default: 3)\n# max_retries: 3\n\n# Archived session directories to keep during log rotation (default: 3, 0 = disable)\n# max_previous_logs: 3\n\n# Priority threshold for filtering new violations during reruns (default: medium)\n# Options: critical, high, medium, low\n# rerun_new_issue_threshold: medium\n\n# Stop hook — auto-run gauntlet when the agent stops\n# Precedence: env vars > project config > global config (~/.config/agent-gauntlet/config.yml)\n# Env overrides: GAUNTLET_STOP_HOOK_ENABLED, GAUNTLET_STOP_HOOK_INTERVAL_MINUTES\n# stop_hook:\n# enabled: false\n# run_interval_minutes: 5 # Minimum minutes between runs (0 = always run)\n\n# Debug log — persistent debug logging to .debug.log\n# debug_log:\n# enabled: false\n# max_size_mb: 10 # Max size before rotation to .debug.log.1\n\n# Structured logging via LogTape\n# logging:\n# level: debug # Options: debug, info, warning, error\n# console:\n# enabled: true\n# format: pretty # Options: pretty, json\n# file:\n# enabled: true\n# format: text # Options: text, json\n`;\n await fs.writeFile(path.join(targetDir, 'config.yml'), content);\n console.log(chalk.green('Created .gauntlet/config.yml'));\n}\n\nasync function addToGitignore(\n projectRoot: string,\n entry: string,\n): Promise<void> {\n const gitignorePath = path.join(projectRoot, '.gitignore');\n\n let content = '';\n if (await exists(gitignorePath)) {\n content = await fs.readFile(gitignorePath, 'utf-8');\n const lines = content.split('\\n').map((l) => l.trim());\n if (lines.includes(entry)) return;\n }\n\n const suffix = content.length > 0 && !content.endsWith('\\n') ? '\\n' : '';\n await fs.appendFile(gitignorePath, `${suffix}${entry}\\n`);\n console.log(chalk.green(`Added ${entry} to .gitignore`));\n}\n\nfunction gitSilent(args: string[], opts?: { timeout?: number }): string | null {\n try {\n return (\n execFileSync('git', args, {\n encoding: 'utf-8',\n timeout: opts?.timeout,\n stdio: ['pipe', 'pipe', 'ignore'],\n }) as string\n ).trim();\n } catch {\n return null;\n }\n}\n\nasync function detectBaseBranch(): Promise<string> {\n gitSilent(['remote', 'set-head', 'origin', '--auto'], { timeout: 5000 });\n const ref = gitSilent(['symbolic-ref', 'refs/remotes/origin/HEAD']);\n if (ref) return ref.replace('refs/remotes/', '');\n\n for (const candidate of ['origin/main', 'origin/master']) {\n if (gitSilent(['rev-parse', '--verify', candidate]) !== null) {\n return candidate;\n }\n }\n return 'origin/main';\n}\n\nfunction buildAdapterSettingsBlock(adapterNames: string[]): string {\n const items = adapterNames.filter((name) => ADAPTER_CONFIG[name]);\n if (items.length === 0) return '';\n const lines = items.map((name) => {\n const c = ADAPTER_CONFIG[name];\n let block = ` ${name}:\\n allow_tool_use: ${c?.allow_tool_use}\\n thinking_budget: ${c?.thinking_budget}`;\n if (c?.model) {\n block += `\\n model: ${c.model}`;\n }\n return block;\n });\n return ` # Recommended settings (see docs/eval-results.md)\\n adapters:\\n${lines.join('\\n')}\\n`;\n}\n\nasync function detectAvailableCLIs(): Promise<CLIAdapter[]> {\n const allAdapters = [...getAllAdapters()].sort(\n (a, b) =>\n CLI_PREFERENCE_ORDER.indexOf(a.name) -\n CLI_PREFERENCE_ORDER.indexOf(b.name),\n );\n const available: CLIAdapter[] = [];\n\n for (const adapter of allAdapters) {\n const isAvailable = await adapter.isAvailable();\n if (isAvailable) {\n console.log(chalk.green(` \\u2713 ${adapter.name}`));\n available.push(adapter);\n } else {\n console.log(chalk.dim(` \\u2717 ${adapter.name} (not installed)`));\n }\n }\n return available;\n}\n",
|
|
69
|
+
"import { execFileSync } from 'node:child_process';\nimport { statSync } from 'node:fs';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport chalk from 'chalk';\nimport type { Command } from 'commander';\nimport { type CLIAdapter, getAllAdapters } from '../cli-adapters/index.js';\nimport { computeSkillChecksum } from './init-checksums.js';\nimport { installHooksForAdapters } from './init-hooks.js';\nimport {\n promptDevCLIs,\n promptFileOverwrite,\n promptNumReviews,\n promptReviewCLIs,\n} from './init-prompts.js';\nimport { exists } from './shared.js';\n\n// Re-export hook utilities for external consumers\nexport {\n installCursorStartHook,\n installCursorStopHook,\n installStartHook,\n installStopHook,\n mergeHookConfig,\n} from './init-hooks.js';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\n// After bundling, __dirname is `dist/` (one level below package root).\n// In dev, __dirname is `src/commands/` (two levels below package root).\n// Detect context by checking which path actually contains the skills directory.\nconst SKILLS_SOURCE_DIR = (() => {\n const bundled = path.join(__dirname, '..', 'skills');\n const dev = path.join(__dirname, '..', '..', 'skills');\n try {\n statSync(bundled);\n return bundled;\n } catch (err: unknown) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code === 'ENOENT' || code === 'ENOTDIR') return dev;\n throw err;\n }\n})();\n\nasync function getSkillDirNames(): Promise<string[]> {\n const entries = await fs.readdir(SKILLS_SOURCE_DIR, { withFileTypes: true });\n return entries\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort();\n}\n\nconst CLI_PREFERENCE_ORDER = [\n 'codex',\n 'claude',\n 'cursor',\n 'github-copilot',\n 'gemini',\n];\n\ntype AdapterCfg = {\n allow_tool_use: boolean;\n thinking_budget: string;\n model?: string;\n};\nconst ADAPTER_CONFIG: Record<string, AdapterCfg> = {\n claude: { allow_tool_use: false, thinking_budget: 'high' },\n codex: { allow_tool_use: false, thinking_budget: 'low' },\n gemini: { allow_tool_use: false, thinking_budget: 'low' },\n cursor: { allow_tool_use: false, thinking_budget: 'low', model: 'codex' },\n 'github-copilot': {\n allow_tool_use: false,\n thinking_budget: 'low',\n model: 'codex',\n },\n};\n\ninterface InitOptions {\n yes?: boolean;\n}\n\n/** Native CLIs that support the /gauntlet-setup skill invocation. */\nconst NATIVE_CLIS = new Set(['claude', 'cursor']);\n\nexport function registerInitCommand(program: Command): void {\n program\n .command('init')\n .description('Initialize .gauntlet configuration')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .action(async (options: InitOptions) => {\n await runInit(options);\n });\n}\n\nasync function runInit(options: InitOptions): Promise<void> {\n const projectRoot = process.cwd();\n const targetDir = path.join(projectRoot, '.gauntlet');\n const skipPrompts = options.yes ?? false;\n\n console.log('Detecting available CLI agents...');\n const availableAdapters = await detectAvailableCLIs();\n\n if (availableAdapters.length === 0) {\n printNoCLIsMessage();\n return;\n }\n\n const detectedNames = availableAdapters.map((a) => a.name);\n const gauntletExists = await exists(targetDir);\n\n let hookAdapters: CLIAdapter[];\n let instructionCLINames: string[];\n\n if (gauntletExists) {\n console.log(chalk.dim('.gauntlet/ already exists, skipping scaffolding'));\n hookAdapters = availableAdapters;\n instructionCLINames = detectedNames;\n } else {\n const devCLINames = await promptDevCLIs(detectedNames, skipPrompts);\n hookAdapters = availableAdapters.filter((a) =>\n devCLINames.includes(a.name),\n );\n\n for (const adapter of hookAdapters) {\n if (!adapter.supportsHooks()) {\n console.log(\n chalk.yellow(\n ` ${adapter.name} doesn't support hooks yet, skipping hook installation`,\n ),\n );\n }\n }\n\n const reviewCLINames = await promptReviewCLIs(detectedNames, skipPrompts);\n const numReviews = await promptNumReviews(\n reviewCLINames.length,\n skipPrompts,\n );\n console.log(\n chalk.cyan(\n \"Agent Gauntlet's built-in code quality reviewer will be installed.\",\n ),\n );\n\n await scaffoldGauntletDir(\n projectRoot,\n targetDir,\n reviewCLINames,\n numReviews,\n );\n instructionCLINames = devCLINames;\n }\n\n await installExternalFiles(projectRoot, hookAdapters, skipPrompts);\n await addToGitignore(projectRoot, 'gauntlet_logs');\n await printPostInitInstructions(instructionCLINames);\n}\n\nfunction printNoCLIsMessage(): void {\n console.log();\n console.log(chalk.red('Error: No CLI agents found. Install at least one:'));\n console.log(' - Claude: https://docs.anthropic.com/en/docs/claude-code');\n console.log(' - Gemini: https://github.com/google-gemini/gemini-cli');\n console.log(' - Codex: https://github.com/openai/codex');\n console.log();\n}\n\nasync function scaffoldGauntletDir(\n _projectRoot: string,\n targetDir: string,\n reviewCLINames: string[],\n numReviews: number,\n): Promise<void> {\n if (await exists(targetDir)) {\n console.log(chalk.dim('.gauntlet/ already exists, skipping scaffolding'));\n return;\n }\n\n await fs.mkdir(targetDir);\n await fs.mkdir(path.join(targetDir, 'checks'));\n await fs.mkdir(path.join(targetDir, 'reviews'));\n\n await writeConfigYml(targetDir, reviewCLINames);\n\n await fs.writeFile(\n path.join(targetDir, 'reviews', 'code-quality.yml'),\n `builtin: code-quality\\nnum_reviews: ${numReviews}\\n`,\n );\n console.log(chalk.green('Created .gauntlet/reviews/code-quality.yml'));\n}\n\nasync function copyDirRecursive(opts: {\n src: string;\n dest: string;\n}): Promise<void> {\n await fs.mkdir(opts.dest, { recursive: true });\n const entries = await fs.readdir(opts.src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(opts.src, entry.name);\n const destPath = path.join(opts.dest, entry.name);\n if (entry.isDirectory()) {\n await copyDirRecursive({ src: srcPath, dest: destPath });\n } else {\n await fs.copyFile(srcPath, destPath);\n }\n }\n}\n\nasync function installSkillsWithChecksums(\n projectRoot: string,\n skipPrompts: boolean,\n): Promise<void> {\n const skillsDir = path.join(projectRoot, '.claude', 'skills');\n for (const dirName of await getSkillDirNames()) {\n const sourceDir = path.join(SKILLS_SOURCE_DIR, dirName);\n const targetDir = path.join(skillsDir, dirName);\n const relativeDir = `${path.relative(projectRoot, targetDir)}/`;\n\n if (!(await exists(targetDir))) {\n await copyDirRecursive({ src: sourceDir, dest: targetDir });\n console.log(chalk.green(`Created ${relativeDir}`));\n continue;\n }\n\n const sourceChecksum = await computeSkillChecksum(sourceDir);\n const targetChecksum = await computeSkillChecksum(targetDir);\n if (sourceChecksum === targetChecksum) continue;\n\n const shouldOverwrite = await promptFileOverwrite(dirName, skipPrompts);\n if (!shouldOverwrite) continue;\n\n await fs.rm(targetDir, { recursive: true, force: true });\n await copyDirRecursive({ src: sourceDir, dest: targetDir });\n console.log(chalk.green(`Updated ${relativeDir}`));\n }\n}\n\nasync function installExternalFiles(\n projectRoot: string,\n devAdapters: CLIAdapter[],\n skipPrompts: boolean,\n): Promise<void> {\n await installSkillsWithChecksums(projectRoot, skipPrompts);\n await installHooksForAdapters(projectRoot, devAdapters, skipPrompts);\n}\n\nasync function printPostInitInstructions(devCLINames: string[]): Promise<void> {\n const hasNative = devCLINames.some((name) => NATIVE_CLIS.has(name));\n const nonNativeNames = devCLINames.filter((name) => !NATIVE_CLIS.has(name));\n const hasNonNative = nonNativeNames.length > 0;\n\n console.log();\n if (hasNative) {\n console.log(\n chalk.bold(\n 'To complete setup, run /gauntlet-setup in your CLI. This will guide you through configuring the static checks (unit tests, linters, etc.) that Agent Gauntlet will run.',\n ),\n );\n }\n if (hasNonNative) {\n console.log(\n chalk.bold(\n 'To complete setup, reference the setup skill in your CLI: @.claude/skills/gauntlet-setup/SKILL.md. This will guide you through configuring the static checks (unit tests, linters, etc.) that Agent Gauntlet will run.',\n ),\n );\n console.log();\n console.log('Available skills:');\n for (const dirName of await getSkillDirNames()) {\n console.log(` @.claude/skills/${dirName}/SKILL.md`);\n }\n }\n}\n\nasync function writeConfigYml(\n targetDir: string,\n reviewCLINames: string[],\n): Promise<void> {\n const baseBranch = await detectBaseBranch();\n const cliList = reviewCLINames.map((name) => ` - ${name}`).join('\\n');\n const adapterSettings = buildAdapterSettingsBlock(reviewCLINames);\n\n const content = `# Ordered list of CLI agents to try for reviews\ncli:\n default_preference:\n${cliList}\n${adapterSettings}\n# entry_points configured by /gauntlet-setup\nentry_points: []\n\n# -------------------------------------------------------------------\n# All settings below are optional. Uncomment and change as needed.\n# -------------------------------------------------------------------\n\n# Git ref for detecting local changes via git diff (default: origin/main)\n# base_branch: ${baseBranch}\n\n# Directory for per-job logs (default: gauntlet_logs)\n# log_dir: gauntlet_logs\n\n# Run gates in parallel when possible (default: true)\n# allow_parallel: true\n\n# Maximum retry attempts before declaring \"Retry limit exceeded\" (default: 3)\n# max_retries: 3\n\n# Archived session directories to keep during log rotation (default: 3, 0 = disable)\n# max_previous_logs: 3\n\n# Priority threshold for filtering new violations during reruns (default: medium)\n# Options: critical, high, medium, low\n# rerun_new_issue_threshold: medium\n\n# Stop hook — auto-run gauntlet when the agent stops\n# Precedence: env vars > project config > global config (~/.config/agent-gauntlet/config.yml)\n# Env overrides: GAUNTLET_STOP_HOOK_ENABLED, GAUNTLET_STOP_HOOK_INTERVAL_MINUTES\n# stop_hook:\n# enabled: false\n# run_interval_minutes: 5 # Minimum minutes between runs (0 = always run)\n\n# Debug log — persistent debug logging to .debug.log\n# debug_log:\n# enabled: false\n# max_size_mb: 10 # Max size before rotation to .debug.log.1\n\n# Structured logging via LogTape\n# logging:\n# level: debug # Options: debug, info, warning, error\n# console:\n# enabled: true\n# format: pretty # Options: pretty, json\n# file:\n# enabled: true\n# format: text # Options: text, json\n`;\n await fs.writeFile(path.join(targetDir, 'config.yml'), content);\n console.log(chalk.green('Created .gauntlet/config.yml'));\n}\n\nasync function addToGitignore(\n projectRoot: string,\n entry: string,\n): Promise<void> {\n const gitignorePath = path.join(projectRoot, '.gitignore');\n\n let content = '';\n if (await exists(gitignorePath)) {\n content = await fs.readFile(gitignorePath, 'utf-8');\n const lines = content.split('\\n').map((l) => l.trim());\n if (lines.includes(entry)) return;\n }\n\n const suffix = content.length > 0 && !content.endsWith('\\n') ? '\\n' : '';\n await fs.appendFile(gitignorePath, `${suffix}${entry}\\n`);\n console.log(chalk.green(`Added ${entry} to .gitignore`));\n}\n\nfunction gitSilent(args: string[], opts?: { timeout?: number }): string | null {\n try {\n return (\n execFileSync('git', args, {\n encoding: 'utf-8',\n timeout: opts?.timeout,\n stdio: ['pipe', 'pipe', 'ignore'],\n }) as string\n ).trim();\n } catch {\n return null;\n }\n}\n\nasync function detectBaseBranch(): Promise<string> {\n gitSilent(['remote', 'set-head', 'origin', '--auto'], { timeout: 5000 });\n const ref = gitSilent(['symbolic-ref', 'refs/remotes/origin/HEAD']);\n if (ref) return ref.replace('refs/remotes/', '');\n\n for (const candidate of ['origin/main', 'origin/master']) {\n if (gitSilent(['rev-parse', '--verify', candidate]) !== null) {\n return candidate;\n }\n }\n return 'origin/main';\n}\n\nfunction buildAdapterSettingsBlock(adapterNames: string[]): string {\n const items = adapterNames.filter((name) => ADAPTER_CONFIG[name]);\n if (items.length === 0) return '';\n const lines = items.map((name) => {\n const c = ADAPTER_CONFIG[name];\n let block = ` ${name}:\\n allow_tool_use: ${c?.allow_tool_use}\\n thinking_budget: ${c?.thinking_budget}`;\n if (c?.model) {\n block += `\\n model: ${c.model}`;\n }\n return block;\n });\n return ` # Recommended settings (see docs/eval-results.md)\\n adapters:\\n${lines.join('\\n')}\\n`;\n}\n\nasync function detectAvailableCLIs(): Promise<CLIAdapter[]> {\n const allAdapters = [...getAllAdapters()].sort(\n (a, b) =>\n CLI_PREFERENCE_ORDER.indexOf(a.name) -\n CLI_PREFERENCE_ORDER.indexOf(b.name),\n );\n const available: CLIAdapter[] = [];\n\n for (const adapter of allAdapters) {\n const isAvailable = await adapter.isAvailable();\n if (isAvailable) {\n console.log(chalk.green(` \\u2713 ${adapter.name}`));\n available.push(adapter);\n } else {\n console.log(chalk.dim(` \\u2717 ${adapter.name} (not installed)`));\n }\n }\n return available;\n}\n",
|
|
69
70
|
"import { createHash } from 'node:crypto';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\n/**\n * Compute SHA-256 checksum of all files in a skill directory.\n * Files are sorted by relative path for determinism.\n */\nexport async function computeSkillChecksum(skillDir: string): Promise<string> {\n const files = await collectFiles(skillDir);\n files.sort((a, b) => a.relativePath.localeCompare(b.relativePath));\n\n const hash = createHash('sha256');\n for (const file of files) {\n hash.update(file.relativePath);\n hash.update(file.content);\n }\n return hash.digest('hex');\n}\n\n/**\n * Compute checksum over gauntlet-specific hook entries only.\n */\nexport function computeHookChecksum(\n entries: Record<string, unknown>[],\n): string {\n const gauntletEntries = entries.filter((entry) => isGauntletHookEntry(entry));\n const hash = createHash('sha256');\n hash.update(JSON.stringify(gauntletEntries));\n return hash.digest('hex');\n}\n\n/**\n * Compute the expected checksum for hook entries from their definitions.\n */\nexport function computeExpectedHookChecksum(\n hookEntries: Record<string, unknown>[],\n): string {\n return computeHookChecksum(hookEntries);\n}\n\n/**\n * Returns true if the hook entry contains an \"agent-gauntlet\" command.\n */\nexport function isGauntletHookEntry(entry: Record<string, unknown>): boolean {\n if (\n typeof entry.command === 'string' &&\n entry.command.startsWith('agent-gauntlet')\n ) {\n return true;\n }\n const nested = entry.hooks as { command?: string }[] | undefined;\n if (Array.isArray(nested)) {\n return nested.some(\n (h) =>\n typeof h.command === 'string' && h.command.startsWith('agent-gauntlet'),\n );\n }\n return false;\n}\n\nasync function collectFiles(\n dir: string,\n baseDir?: string,\n): Promise<{ relativePath: string; content: string }[]> {\n const base = baseDir ?? dir;\n const results: { relativePath: string; content: string }[] = [];\n const entries = await fs.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n results.push(...(await collectFiles(fullPath, base)));\n } else if (entry.isFile()) {\n const content = await fs.readFile(fullPath, 'utf-8');\n results.push({ relativePath: path.relative(base, fullPath), content });\n }\n }\n return results;\n}\n",
|
|
70
71
|
"import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport chalk from 'chalk';\nimport type { CLIAdapter } from '../cli-adapters/index.js';\nimport {\n computeExpectedHookChecksum,\n computeHookChecksum,\n isGauntletHookEntry,\n} from './init-checksums.js';\nimport { promptHookOverwrite } from './init-prompts.js';\nimport { exists } from './shared.js';\n\nexport interface HookTarget {\n projectRoot: string;\n variant: 'claude' | 'cursor';\n kind: 'stop' | 'start';\n}\n\n/** Check whether a command string already exists in a hook entries array. */\nfunction hookHasCommand(\n entries: Record<string, unknown>[],\n cmd: string,\n): boolean {\n return entries.some((hook) => {\n if (hook.command === cmd) return true;\n const nested = hook.hooks as { command?: string }[] | undefined;\n return Array.isArray(nested) && nested.some((h) => h.command === cmd);\n });\n}\n\n/**\n * Shared helper: read/create a JSON config file, merge a hook entry under the\n * given hookKey, deduplicate, and write back.\n */\nexport async function mergeHookConfig(opts: {\n filePath: string;\n hookKey: string;\n hookEntry: Record<string, unknown>;\n deduplicateCmd: string;\n wrapInHooksArray: boolean;\n baseConfig?: Record<string, unknown>;\n}): Promise<boolean> {\n const {\n filePath,\n hookKey,\n hookEntry,\n deduplicateCmd,\n wrapInHooksArray,\n baseConfig,\n } = opts;\n\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n\n let existing: Record<string, unknown> = {};\n if (await exists(filePath)) {\n try {\n existing = JSON.parse(await fs.readFile(filePath, 'utf-8'));\n } catch {\n existing = {};\n }\n }\n\n const existingHooks = (existing.hooks as Record<string, unknown>) || {};\n const existingEntries = Array.isArray(existingHooks[hookKey])\n ? (existingHooks[hookKey] as Record<string, unknown>[])\n : [];\n\n if (hookHasCommand(existingEntries, deduplicateCmd)) {\n return false;\n }\n\n const entryToAdd = wrapInHooksArray ? { hooks: [hookEntry] } : hookEntry;\n const newEntries = [...existingEntries, entryToAdd];\n\n const merged: Record<string, unknown> = {\n ...(baseConfig ?? {}),\n ...existing,\n hooks: { ...existingHooks, [hookKey]: newEntries },\n };\n\n await fs.writeFile(filePath, `${JSON.stringify(merged, null, 2)}\\n`);\n return true;\n}\n\nconst START_HOOK_ENTRY = {\n matcher: 'startup|resume|clear|compact',\n hooks: [\n { type: 'command', command: 'agent-gauntlet start-hook', async: false },\n ],\n} as const;\n\nconst CURSOR_START_HOOK_ENTRY = {\n command: 'agent-gauntlet start-hook --adapter cursor',\n} as const;\n\nconst STOP_HOOK_ENTRY = {\n type: 'command',\n command: 'agent-gauntlet stop-hook',\n timeout: 300,\n} as const;\n\nconst CURSOR_STOP_HOOK_ENTRY = {\n command: 'agent-gauntlet stop-hook',\n loop_limit: 10,\n} as const;\n\nasync function installHookWithLog(\n config: Parameters<typeof mergeHookConfig>[0],\n installedMsg: string,\n existsMsg: string,\n): Promise<void> {\n const added = await mergeHookConfig(config);\n console.log(added ? chalk.green(installedMsg) : chalk.dim(existsMsg));\n}\n\ninterface HookInstallSpec {\n config: Parameters<typeof mergeHookConfig>[0];\n installedMsg: string;\n existsMsg: string;\n}\n\nfunction buildHookSpec(target: HookTarget): HookInstallSpec {\n const { projectRoot, variant, kind } = target;\n const isCursor = variant === 'cursor';\n const isStop = kind === 'stop';\n const hookConfigs = {\n 'claude-stop': {\n dir: '.claude',\n file: 'settings.local.json',\n hookKey: 'Stop',\n entry: STOP_HOOK_ENTRY as Record<string, unknown>,\n cmd: 'agent-gauntlet stop-hook',\n wrap: true,\n },\n 'cursor-stop': {\n dir: '.cursor',\n file: 'hooks.json',\n hookKey: 'stop',\n entry: CURSOR_STOP_HOOK_ENTRY as Record<string, unknown>,\n cmd: 'agent-gauntlet stop-hook',\n wrap: false,\n },\n 'claude-start': {\n dir: '.claude',\n file: 'settings.local.json',\n hookKey: 'SessionStart',\n entry: START_HOOK_ENTRY as Record<string, unknown>,\n cmd: 'agent-gauntlet start-hook',\n wrap: false,\n },\n 'cursor-start': {\n dir: '.cursor',\n file: 'hooks.json',\n hookKey: 'sessionStart',\n entry: CURSOR_START_HOOK_ENTRY as Record<string, unknown>,\n cmd: 'agent-gauntlet start-hook --adapter cursor',\n wrap: false,\n },\n } as const;\n\n const key = `${variant}-${kind}` as keyof typeof hookConfigs;\n const cfg = hookConfigs[key];\n const prefix = isCursor ? 'Cursor ' : '';\n let kindLabel: string;\n if (isCursor) kindLabel = kind;\n else if (isStop) kindLabel = 'Stop';\n else kindLabel = 'Start';\n const purpose = isStop\n ? 'gauntlet will run automatically when agent stops'\n : 'agent will be primed with gauntlet instructions at session start';\n\n return {\n config: {\n filePath: path.join(projectRoot, cfg.dir, cfg.file),\n hookKey: cfg.hookKey,\n hookEntry: cfg.entry,\n deduplicateCmd: cfg.cmd,\n wrapInHooksArray: cfg.wrap,\n ...(isCursor ? { baseConfig: { version: 1 } } : {}),\n },\n installedMsg: `${prefix}${kindLabel} hook installed - ${purpose}`,\n existsMsg: `${prefix}${kindLabel} hook already installed`,\n };\n}\n\n/** Install or update hooks for a single adapter + kind using checksum-based comparison. */\nexport async function installHookWithChecksums(\n target: HookTarget,\n skipPrompts: boolean,\n): Promise<void> {\n const spec = buildHookSpec(target);\n\n let existingConfig: Record<string, unknown> = {};\n if (await exists(spec.config.filePath)) {\n try {\n existingConfig = JSON.parse(\n await fs.readFile(spec.config.filePath, 'utf-8'),\n );\n } catch {\n existingConfig = {};\n }\n }\n\n const existingHooks = (existingConfig.hooks as Record<string, unknown>) || {};\n const existingEntries = Array.isArray(existingHooks[spec.config.hookKey])\n ? (existingHooks[spec.config.hookKey] as Record<string, unknown>[])\n : [];\n\n const gauntletEntries = existingEntries.filter((e) => isGauntletHookEntry(e));\n\n if (gauntletEntries.length === 0) {\n await installHookWithLog(spec.config, spec.installedMsg, spec.existsMsg);\n return;\n }\n\n const expectedEntry = spec.config.wrapInHooksArray\n ? { hooks: [spec.config.hookEntry] }\n : spec.config.hookEntry;\n const expectedChecksum = computeExpectedHookChecksum([\n expectedEntry as Record<string, unknown>,\n ]);\n const actualChecksum = computeHookChecksum(existingEntries);\n\n if (expectedChecksum === actualChecksum) {\n console.log(chalk.dim(spec.existsMsg));\n return;\n }\n\n const shouldOverwrite = await promptHookOverwrite(\n spec.config.filePath,\n skipPrompts,\n );\n if (!shouldOverwrite) {\n console.log(chalk.dim(spec.existsMsg));\n return;\n }\n\n const nonGauntletEntries = existingEntries.filter(\n (e) => !isGauntletHookEntry(e),\n );\n const entryToAdd = spec.config.wrapInHooksArray\n ? { hooks: [spec.config.hookEntry] }\n : spec.config.hookEntry;\n const newEntries = [...nonGauntletEntries, entryToAdd];\n\n const merged: Record<string, unknown> = {\n ...(spec.config.baseConfig ?? {}),\n ...existingConfig,\n hooks: { ...existingHooks, [spec.config.hookKey]: newEntries },\n };\n await fs.mkdir(path.dirname(spec.config.filePath), { recursive: true });\n await fs.writeFile(\n spec.config.filePath,\n `${JSON.stringify(merged, null, 2)}\\n`,\n );\n console.log(chalk.green(spec.installedMsg));\n}\n\nasync function installHookBySpec(target: HookTarget): Promise<void> {\n const spec = buildHookSpec(target);\n await installHookWithLog(spec.config, spec.installedMsg, spec.existsMsg);\n}\n\nexport async function installStopHook(projectRoot: string): Promise<void> {\n await installHookBySpec({ projectRoot, variant: 'claude', kind: 'stop' });\n}\n\nexport async function installCursorStopHook(\n projectRoot: string,\n): Promise<void> {\n await installHookBySpec({ projectRoot, variant: 'cursor', kind: 'stop' });\n}\n\nexport async function installStartHook(projectRoot: string): Promise<void> {\n await installHookBySpec({ projectRoot, variant: 'claude', kind: 'start' });\n}\n\nexport async function installCursorStartHook(\n projectRoot: string,\n): Promise<void> {\n await installHookBySpec({ projectRoot, variant: 'cursor', kind: 'start' });\n}\n\n/** Install hooks for all adapters that support them. */\nexport async function installHooksForAdapters(\n projectRoot: string,\n devAdapters: CLIAdapter[],\n skipPrompts: boolean,\n): Promise<void> {\n for (const adapter of devAdapters) {\n if (!adapter.supportsHooks()) continue;\n if (adapter.name !== 'claude' && adapter.name !== 'cursor') continue;\n for (const kind of ['stop', 'start'] as const) {\n const target: HookTarget = { projectRoot, variant: adapter.name, kind };\n await installHookWithChecksums(target, skipPrompts);\n }\n }\n}\n",
|
|
71
72
|
"import { checkbox, confirm, number } from '@inquirer/prompts';\nimport chalk from 'chalk';\n\nexport async function promptDevCLIs(\n detectedNames: string[],\n skipPrompts: boolean,\n): Promise<string[]> {\n if (skipPrompts) return detectedNames;\n\n console.log();\n console.log(\n chalk.bold(\n 'Select your development CLI(s). These are the main tools you work in.',\n ),\n );\n const selected = await checkbox({\n message: 'Development CLIs:',\n choices: detectedNames.map((name) => ({ name, value: name })),\n required: true,\n });\n return selected;\n}\n\nexport async function promptReviewCLIs(\n detectedNames: string[],\n skipPrompts: boolean,\n): Promise<string[]> {\n if (skipPrompts) return detectedNames;\n\n console.log();\n console.log(\n chalk.bold(\n 'Select your reviewer CLI(s). These are the CLIs that will be used for AI code reviews.',\n ),\n );\n const selected = await checkbox({\n message: 'Review CLIs:',\n choices: detectedNames.map((name) => ({ name, value: name })),\n required: true,\n });\n return selected;\n}\n\nexport async function promptNumReviews(\n reviewCliCount: number,\n skipPrompts: boolean,\n): Promise<number> {\n if (reviewCliCount === 1) return 1;\n if (skipPrompts) return reviewCliCount;\n\n const result = await number({\n message: 'How many of these CLIs would you like to run on every review?',\n min: 1,\n max: reviewCliCount,\n default: 1,\n });\n return result ?? 1;\n}\n\nexport async function promptFileOverwrite(\n name: string,\n skipPrompts: boolean,\n): Promise<boolean> {\n if (skipPrompts) return true;\n\n return confirm({\n message: `Skill \\`${name}\\` has changed, update it?`,\n default: true,\n });\n}\n\nexport async function promptHookOverwrite(\n hookFile: string,\n skipPrompts: boolean,\n): Promise<boolean> {\n if (skipPrompts) return true;\n\n return confirm({\n message: `Hook configuration in ${hookFile} has changed, update it?`,\n default: true,\n });\n}\n",
|
|
72
73
|
"import chalk from 'chalk';\nimport type { Command } from 'commander';\nimport { loadConfig } from '../config/loader.js';\n\nexport function registerListCommand(program: Command): void {\n program\n .command('list')\n .description('List configured gates')\n .action(async () => {\n try {\n const config = await loadConfig();\n console.log(chalk.bold('Check Gates:'));\n for (const c of Object.values(config.checks)) {\n console.log(` - ${c.name}`);\n }\n\n console.log(chalk.bold('\\nReview Gates:'));\n for (const r of Object.values(config.reviews)) {\n console.log(` - ${r.name} (Tools: ${r.cli_preference?.join(', ')})`);\n }\n\n console.log(chalk.bold('\\nEntry Points:'));\n for (const ep of config.project.entry_points) {\n console.log(` - ${ep.path}`);\n if (ep.checks) console.log(` Checks: ${ep.checks.join(', ')}`);\n if (ep.reviews) console.log(` Reviews: ${ep.reviews.join(', ')}`);\n }\n } catch (error: unknown) {\n const err = error as { message?: string };\n console.error(chalk.red('Error:'), err.message);\n }\n });\n}\n",
|
|
73
|
-
"import type { Command } from 'commander';\nimport { executeGateCommand } from './gate-command.js';\n\nexport function registerReviewCommand(program: Command): void {\n program\n .command('review')\n .description('Run only applicable reviews for detected changes')\n .option(\n '-b, --base-branch <branch>',\n 'Override base branch for change detection',\n )\n .option('-g, --gate <name>', 'Run specific review gate only')\n .option('-c, --commit <sha>', 'Use diff for a specific commit')\n .option(\n '-u, --uncommitted',\n 'Use diff for current uncommitted changes (staged and unstaged)',\n )\n .action((options)
|
|
74
|
-
"import { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execFileAsyncOriginal = promisify(execFile);\nexport let execFileAsync = execFileAsyncOriginal;\n\nexport function setExecFileAsync(fn: typeof execFileAsyncOriginal) {\n execFileAsync = fn;\n}\n\n/**\n * Run a git command safely using execFile (no shell interpolation).\n */\nasync function gitExec(args: string[]): Promise<string> {\n const { stdout } = await execFileAsync('git', args);\n return stdout;\n}\n\nexport interface DiffStats {\n baseRef: string; // e.g., \"origin/main\", \"abc123\", \"uncommitted\"\n total: number; // Total files changed\n newFiles: number; // Files added\n modifiedFiles: number; // Files modified\n deletedFiles: number; // Files deleted\n linesAdded: number; // Total lines added\n linesRemoved: number; // Total lines removed\n}\n\nexport interface DiffStatsOptions {\n commit?: string; // If provided, get diff for this commit vs its parent\n uncommitted?: boolean; // If true, only get uncommitted changes\n fixBase?: string; // If provided, get diff from this ref to current working tree\n}\n\n/**\n * Compute diff statistics for changed files.\n */\nexport async function computeDiffStats(\n baseBranch: string,\n options: DiffStatsOptions = {},\n): Promise<DiffStats> {\n // Determine what we're diffing\n if (options.commit) {\n return computeCommitDiffStats(options.commit);\n }\n\n // If fixBase is provided, compute diff from that ref to current working tree\n // This is used in verification mode to show only NEW changes since the snapshot\n if (options.fixBase) {\n return computeFixBaseDiffStats(options.fixBase);\n }\n\n if (options.uncommitted) {\n return computeUncommittedDiffStats();\n }\n\n const isCI =\n process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true';\n\n if (isCI) {\n return computeCIDiffStats(baseBranch);\n }\n\n return computeLocalDiffStats(baseBranch);\n}\n\n/**\n * Compute diff stats for a specific commit vs its parent.\n */\nasync function computeCommitDiffStats(commit: string): Promise<DiffStats> {\n try {\n // Get numstat for line counts\n const numstat = await gitExec([\n 'diff',\n '--numstat',\n `${commit}^..${commit}`,\n ]);\n const lineStats = parseNumstat(numstat);\n\n // Get name-status for file categorization\n const nameStatus = await gitExec([\n 'diff',\n '--name-status',\n `${commit}^..${commit}`,\n ]);\n const fileStats = parseNameStatus(nameStatus);\n\n return {\n baseRef: `${commit}^`,\n ...fileStats,\n ...lineStats,\n };\n } catch {\n // If commit has no parent (initial commit), try --root\n try {\n const numstat = await gitExec(['diff', '--numstat', '--root', commit]);\n const lineStats = parseNumstat(numstat);\n\n const nameStatus = await gitExec([\n 'diff',\n '--name-status',\n '--root',\n commit,\n ]);\n const fileStats = parseNameStatus(nameStatus);\n\n return {\n baseRef: 'root',\n ...fileStats,\n ...lineStats,\n };\n } catch {\n return emptyDiffStats(commit);\n }\n }\n}\n\n/**\n * Compute diff stats for uncommitted changes (staged + unstaged + untracked).\n */\nasync function computeUncommittedDiffStats(): Promise<DiffStats> {\n // Get stats for staged changes\n const stagedNumstat = await gitExec(['diff', '--numstat', '--cached']);\n const stagedLines = parseNumstat(stagedNumstat);\n\n const stagedStatus = await gitExec(['diff', '--name-status', '--cached']);\n const stagedFiles = parseNameStatus(stagedStatus);\n\n // Get stats for unstaged changes\n const unstagedNumstat = await gitExec(['diff', '--numstat']);\n const unstagedLines = parseNumstat(unstagedNumstat);\n\n const unstagedStatus = await gitExec(['diff', '--name-status']);\n const unstagedFiles = parseNameStatus(unstagedStatus);\n\n // Get untracked files (all count as new, lines unknown)\n const untrackedList = await gitExec([\n 'ls-files',\n '--others',\n '--exclude-standard',\n ]);\n const untrackedFiles = untrackedList\n .split('\\n')\n .filter((f) => f.trim().length > 0);\n\n return {\n baseRef: 'uncommitted',\n total:\n stagedFiles.total +\n unstagedFiles.total +\n untrackedFiles.length -\n countOverlap(stagedStatus, unstagedStatus),\n newFiles:\n stagedFiles.newFiles + unstagedFiles.newFiles + untrackedFiles.length,\n modifiedFiles: stagedFiles.modifiedFiles + unstagedFiles.modifiedFiles,\n deletedFiles: stagedFiles.deletedFiles + unstagedFiles.deletedFiles,\n linesAdded: stagedLines.linesAdded + unstagedLines.linesAdded,\n linesRemoved: stagedLines.linesRemoved + unstagedLines.linesRemoved,\n };\n}\n\n/**\n * Compute diff stats from a fixBase ref (stash or commit) to current working tree.\n * Used in verification mode to show only NEW changes since the snapshot.\n * This includes staged changes, unstaged changes, and new untracked files.\n */\nasync function computeFixBaseDiffStats(fixBase: string): Promise<DiffStats> {\n try {\n // Get line stats for tracked file changes since fixBase\n // We need to diff against working tree (staged + unstaged changes)\n const numstat = await gitExec(['diff', '--numstat', fixBase]);\n const lineStats = parseNumstat(numstat);\n\n // Get file categorization for tracked file changes\n const nameStatus = await gitExec(['diff', '--name-status', fixBase]);\n const fileStats = parseNameStatus(nameStatus);\n\n // Handle untracked files: only count NEW untracked files that weren't in fixBase\n // Current untracked files\n const currentUntracked = (\n await gitExec(['ls-files', '--others', '--exclude-standard'])\n )\n .split('\\n')\n .filter((f) => f.trim().length > 0);\n\n // Files that existed in fixBase\n let fixBaseFiles: Set<string>;\n try {\n const treeFiles = await gitExec([\n 'ls-tree',\n '-r',\n '--name-only',\n fixBase,\n ]);\n fixBaseFiles = new Set(\n treeFiles.split('\\n').filter((f) => f.trim().length > 0),\n );\n } catch {\n // If fixBase is invalid or has no tree, assume empty\n fixBaseFiles = new Set();\n }\n\n // New untracked files = current untracked - files that existed in fixBase\n const newUntrackedFiles = currentUntracked.filter(\n (f) => !fixBaseFiles.has(f),\n );\n\n return {\n baseRef: fixBase,\n total: fileStats.total + newUntrackedFiles.length,\n newFiles: fileStats.newFiles + newUntrackedFiles.length,\n modifiedFiles: fileStats.modifiedFiles,\n deletedFiles: fileStats.deletedFiles,\n linesAdded: lineStats.linesAdded,\n linesRemoved: lineStats.linesRemoved,\n };\n } catch {\n return emptyDiffStats(fixBase);\n }\n}\n\n/**\n * Compute diff stats in CI environment.\n */\nasync function computeCIDiffStats(baseBranch: string): Promise<DiffStats> {\n const headRef = process.env.GITHUB_SHA || 'HEAD';\n\n try {\n const numstat = await gitExec([\n 'diff',\n '--numstat',\n `${baseBranch}...${headRef}`,\n ]);\n const lineStats = parseNumstat(numstat);\n\n const nameStatus = await gitExec([\n 'diff',\n '--name-status',\n `${baseBranch}...${headRef}`,\n ]);\n const fileStats = parseNameStatus(nameStatus);\n\n return {\n baseRef: baseBranch,\n ...fileStats,\n ...lineStats,\n };\n } catch {\n // Fallback for push events\n try {\n const numstat = await gitExec(['diff', '--numstat', 'HEAD^...HEAD']);\n const lineStats = parseNumstat(numstat);\n\n const nameStatus = await gitExec([\n 'diff',\n '--name-status',\n 'HEAD^...HEAD',\n ]);\n const fileStats = parseNameStatus(nameStatus);\n\n return {\n baseRef: 'HEAD^',\n ...fileStats,\n ...lineStats,\n };\n } catch {\n return emptyDiffStats(baseBranch);\n }\n }\n}\n\n/**\n * Compute diff stats for local development.\n */\nasync function computeLocalDiffStats(baseBranch: string): Promise<DiffStats> {\n // 1. Committed changes relative to base branch\n const committedNumstat = await gitExec([\n 'diff',\n '--numstat',\n `${baseBranch}...HEAD`,\n ]);\n const committedLines = parseNumstat(committedNumstat);\n\n const committedStatus = await gitExec([\n 'diff',\n '--name-status',\n `${baseBranch}...HEAD`,\n ]);\n const committedFiles = parseNameStatus(committedStatus);\n\n // 2. Uncommitted changes (staged and unstaged)\n const uncommittedNumstat = await gitExec(['diff', '--numstat', 'HEAD']);\n const uncommittedLines = parseNumstat(uncommittedNumstat);\n\n const uncommittedStatus = await gitExec(['diff', '--name-status', 'HEAD']);\n const uncommittedFiles = parseNameStatus(uncommittedStatus);\n\n // 3. Untracked files\n const untrackedList = await gitExec([\n 'ls-files',\n '--others',\n '--exclude-standard',\n ]);\n const untrackedFiles = untrackedList\n .split('\\n')\n .filter((f) => f.trim().length > 0);\n\n // Combine counts (with overlap detection)\n const totalNew =\n committedFiles.newFiles + uncommittedFiles.newFiles + untrackedFiles.length;\n const totalModified =\n committedFiles.modifiedFiles + uncommittedFiles.modifiedFiles;\n const totalDeleted =\n committedFiles.deletedFiles + uncommittedFiles.deletedFiles;\n\n return {\n baseRef: baseBranch,\n total: totalNew + totalModified + totalDeleted,\n newFiles: totalNew,\n modifiedFiles: totalModified,\n deletedFiles: totalDeleted,\n linesAdded: committedLines.linesAdded + uncommittedLines.linesAdded,\n linesRemoved: committedLines.linesRemoved + uncommittedLines.linesRemoved,\n };\n}\n\n/**\n * Parse git diff --numstat output for line counts.\n * Format: <added>\\t<removed>\\t<file>\n * Binary files show as \"-\\t-\\t<file>\"\n */\nfunction parseNumstat(output: string): {\n linesAdded: number;\n linesRemoved: number;\n} {\n let linesAdded = 0;\n let linesRemoved = 0;\n\n for (const line of output.split('\\n')) {\n if (!line.trim()) continue;\n const parts = line.split('\\t');\n if (parts.length < 3) continue;\n\n const added = parts[0];\n const removed = parts[1];\n // Binary files show as \"-\"\n if (added && added !== '-') {\n linesAdded += parseInt(added, 10) || 0;\n }\n if (removed && removed !== '-') {\n linesRemoved += parseInt(removed, 10) || 0;\n }\n }\n\n return { linesAdded, linesRemoved };\n}\n\n/**\n * Parse git diff --name-status output for file categorization.\n * Format: <status>\\t<file> (and optionally \\t<new-file> for renames)\n * Status codes: A=added, M=modified, D=deleted, R=renamed, C=copied, T=type-change\n */\nfunction parseNameStatus(output: string): {\n total: number;\n newFiles: number;\n modifiedFiles: number;\n deletedFiles: number;\n} {\n let newFiles = 0;\n let modifiedFiles = 0;\n let deletedFiles = 0;\n\n for (const line of output.split('\\n')) {\n if (!line.trim()) continue;\n const status = line[0];\n\n switch (status) {\n case 'A':\n newFiles++;\n break;\n case 'M':\n case 'R':\n case 'C':\n case 'T':\n modifiedFiles++;\n break;\n case 'D':\n deletedFiles++;\n break;\n }\n }\n\n return {\n total: newFiles + modifiedFiles + deletedFiles,\n newFiles,\n modifiedFiles,\n deletedFiles,\n };\n}\n\n/**\n * Count overlapping files between two name-status outputs.\n * Used to avoid double-counting files that appear in both staged and unstaged.\n */\nfunction countOverlap(status1: string, status2: string): number {\n const files1 = new Set<string>();\n for (const line of status1.split('\\n')) {\n if (!line.trim()) continue;\n const parts = line.split('\\t');\n const file = parts[1];\n if (parts.length >= 2 && file) {\n files1.add(file);\n }\n }\n\n let overlap = 0;\n for (const line of status2.split('\\n')) {\n if (!line.trim()) continue;\n const parts = line.split('\\t');\n const file = parts[1];\n if (parts.length >= 2 && file && files1.has(file)) {\n overlap++;\n }\n }\n\n return overlap;\n}\n\n/**\n * Return empty diff stats with the given base ref.\n */\nfunction emptyDiffStats(baseRef: string): DiffStats {\n return {\n baseRef,\n total: 0,\n newFiles: 0,\n modifiedFiles: 0,\n deletedFiles: 0,\n linesAdded: 0,\n linesRemoved: 0,\n };\n}\n",
|
|
74
|
+
"import type { Command } from 'commander';\nimport { executeGateCommand } from './gate-command.js';\n\nexport function registerReviewCommand(program: Command): void {\n program\n .command('review')\n .description('Run only applicable reviews for detected changes')\n .option(\n '-b, --base-branch <branch>',\n 'Override base branch for change detection',\n )\n .option('-g, --gate <name>', 'Run specific review gate only')\n .option('-c, --commit <sha>', 'Use diff for a specific commit')\n .option(\n '-u, --uncommitted',\n 'Use diff for current uncommitted changes (staged and unstaged)',\n )\n .option(\n '-e, --enable-review <name>',\n 'Activate a disabled review for this run (repeatable)',\n (value: string, prev: string[] = []) => [...prev, value],\n [] as string[],\n )\n .action((options) =>\n executeGateCommand('review', {\n ...options,\n enableReviews: new Set<string>(options.enableReview ?? []),\n }),\n );\n}\n",
|
|
75
|
+
"import fs from 'node:fs';\nimport path from 'node:path';\nimport readline from 'node:readline';\n\ninterface ReviewGate {\n reviewType: string;\n cli: string;\n durationS: number;\n violations: number;\n}\n\ninterface TelemetryEntry {\n adapter: string;\n inTokens: number;\n cacheTokens: number;\n outTokens: number;\n thoughtTokens: number;\n toolTokens: number;\n apiRequests: number;\n cacheRead: number;\n cacheWrite: number;\n}\n\ninterface RunEndInfo {\n status: string;\n fixed: number;\n skipped: number;\n failed: number;\n}\n\ninterface RunBlock {\n timestamp: string;\n mode: string;\n linesAdded: number;\n linesRemoved: number;\n reviewGates: ReviewGate[];\n priorPassSkips: number;\n telemetry: TelemetryEntry[];\n end?: RunEndInfo;\n}\n\ninterface GateStat {\n count: number;\n totalDuration: number;\n totalViolations: number;\n}\n\ninterface CrossTab {\n cells: Map<string, Map<string, GateStat>>;\n cliTotals: Map<string, GateStat>;\n typeTotals: Map<string, GateStat>;\n grandTotal: GateStat;\n allTypes: string[];\n allClis: string[];\n per100: Map<string, { dur: number; diff: number }>;\n}\n\ninterface TokenStats {\n adapter: string;\n inTokens: number;\n cacheTokens: number;\n outTokens: number;\n thoughtTokens: number;\n toolTokens: number;\n apiRequests: number;\n cacheRead: number;\n cacheWrite: number;\n runsWithTelemetry: number;\n}\n\nfunction parseKeyValue(text: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [, key, value] of text.matchAll(/(\\w+)=(\\S+)/g))\n if (key && value) result[key] = value;\n return result;\n}\nconst parseTimestamp = (line: string): string =>\n line.match(/^\\[([^\\]]+)\\]/)?.[1] ?? '';\nconst parseEventType = (line: string): string =>\n line.match(/^\\[[^\\]]+\\]\\s+(\\S+)/)?.[1] ?? '';\nconst parseEventBody = (line: string): string =>\n line.match(/^\\[[^\\]]+\\]\\s+\\S+\\s*(.*)/)?.[1] ?? '';\nconst safeNum = (v: string | undefined): number => {\n const n = Number(v ?? 0);\n return Number.isNaN(n) ? 0 : n;\n};\nconst parseDuration = (d: string): number => {\n const m = d.match(/^([\\d.]+)(ms|s|m)?$/);\n const val = safeNum(m?.[1]);\n if (m?.[2] === 'ms') return val / 1000;\n if (m?.[2] === 'm') return val * 60;\n return val;\n};\n\nfunction getLogDir(cwd: string): string {\n const configPath = path.join(cwd, '.gauntlet', 'config.yml');\n try {\n const content = fs.readFileSync(configPath, 'utf-8');\n const match = content.match(/^log_dir:\\s*(.+)$/m);\n if (match?.[1]) return match[1].trim();\n } catch {\n // Config not found — use default\n }\n return 'gauntlet_logs';\n}\n\nfunction handleRunStart(ts: string, body: string): RunBlock {\n const kv = parseKeyValue(body);\n return {\n timestamp: ts,\n mode: kv.mode ?? 'unknown',\n linesAdded: safeNum(kv.lines_added),\n linesRemoved: safeNum(kv.lines_removed),\n reviewGates: [],\n priorPassSkips: 0,\n telemetry: [],\n };\n}\nfunction handleGateResult(current: RunBlock, body: string): void {\n const gateIdMatch = body.match(/^(\\S+)/);\n const gateId = gateIdMatch?.[1] ?? '';\n if (!gateId.startsWith('review:')) return;\n const kv = parseKeyValue(body);\n if (kv.cli) {\n current.reviewGates.push({\n reviewType: gateId.split(':').at(-1) ?? 'other',\n cli: kv.cli,\n durationS: parseDuration(kv.duration ?? '0s'),\n violations: safeNum(kv.violations),\n });\n } else {\n current.priorPassSkips++;\n }\n}\nfunction handleTelemetry(current: RunBlock, body: string): void {\n const kv = parseKeyValue(body);\n if (!kv.adapter) return;\n current.telemetry.push({\n adapter: kv.adapter,\n inTokens: safeNum(kv.in),\n cacheTokens: safeNum(kv.cache),\n outTokens: safeNum(kv.out),\n thoughtTokens: safeNum(kv.thought),\n toolTokens: safeNum(kv.tool),\n apiRequests: safeNum(kv.api_requests),\n cacheRead: safeNum(kv.cacheRead),\n cacheWrite: safeNum(kv.cacheWrite),\n });\n}\nfunction handleRunEnd(current: RunBlock, body: string): void {\n const kv = parseKeyValue(body);\n current.end = {\n status: kv.status ?? 'unknown',\n fixed: safeNum(kv.fixed),\n skipped: safeNum(kv.skipped),\n failed: safeNum(kv.failed),\n };\n}\n\nconst emptyStat = (): GateStat => ({\n count: 0,\n totalDuration: 0,\n totalViolations: 0,\n});\nfunction addGate(s: GateStat, g: ReviewGate): void {\n s.count++;\n s.totalDuration += g.durationS;\n s.totalViolations += g.violations;\n}\nfunction getOrCreate<V>(map: Map<string, V>, key: string, init: () => V): V {\n if (!map.has(key)) map.set(key, init());\n return map.get(key) as V;\n}\n\nconst REVIEW_TYPES = ['code-quality', 'task-compliance', 'artifact-review'];\n\ntype CrossTabAccum = Pick<\n CrossTab,\n 'cells' | 'cliTotals' | 'typeTotals' | 'grandTotal' | 'per100'\n>;\nfunction accumulateBlock(block: RunBlock, a: CrossTabAccum): void {\n for (const g of block.reviewGates) {\n const inner = getOrCreate(\n a.cells,\n g.reviewType,\n () => new Map<string, GateStat>(),\n );\n addGate(getOrCreate(inner, g.cli, emptyStat), g);\n addGate(getOrCreate(a.cliTotals, g.cli, emptyStat), g);\n addGate(getOrCreate(a.typeTotals, g.reviewType, emptyStat), g);\n addGate(a.grandTotal, g);\n }\n const diff = block.linesAdded + block.linesRemoved;\n if (diff <= 0) return;\n for (const cli of new Set(block.reviewGates.map((g) => g.cli))) {\n const dur = block.reviewGates\n .filter((g) => g.cli === cli)\n .reduce((s, g) => s + g.durationS, 0);\n const p = getOrCreate(a.per100, cli, () => ({ dur: 0, diff: 0 }));\n p.dur += dur;\n p.diff += diff;\n }\n}\n\nexport function buildCrossTab(blocks: RunBlock[]): CrossTab {\n const a: CrossTabAccum = {\n cells: new Map(),\n cliTotals: new Map(),\n typeTotals: new Map(),\n per100: new Map(),\n grandTotal: emptyStat(),\n };\n for (const block of blocks) accumulateBlock(block, a);\n const allTypes = [\n ...REVIEW_TYPES.filter((t) => a.typeTotals.has(t)),\n ...[...a.typeTotals.keys()].filter((t) => !REVIEW_TYPES.includes(t)),\n ];\n return { ...a, allTypes, allClis: [...a.cliTotals.keys()] };\n}\n\nconst emptyTokenStats = (adapter: string): TokenStats => ({\n adapter,\n inTokens: 0,\n cacheTokens: 0,\n outTokens: 0,\n thoughtTokens: 0,\n toolTokens: 0,\n apiRequests: 0,\n cacheRead: 0,\n cacheWrite: 0,\n runsWithTelemetry: 0,\n});\n\nfunction accumulateTelemetryEntry(\n t: TelemetryEntry,\n statsMap: Map<string, TokenStats>,\n): void {\n const s = statsMap.get(t.adapter) ?? emptyTokenStats(t.adapter);\n statsMap.set(t.adapter, s);\n s.inTokens += t.inTokens;\n s.cacheTokens += t.cacheTokens;\n s.outTokens += t.outTokens;\n s.thoughtTokens += t.thoughtTokens;\n s.toolTokens += t.toolTokens;\n s.apiRequests += t.apiRequests;\n s.cacheRead += t.cacheRead;\n s.cacheWrite += t.cacheWrite;\n}\n\nexport function aggregateTokenStats(blocks: RunBlock[]): TokenStats[] {\n const statsMap = new Map<string, TokenStats>();\n for (const block of blocks) {\n const adaptersInBlock = new Set(block.telemetry.map((t) => t.adapter));\n for (const t of block.telemetry) accumulateTelemetryEntry(t, statsMap);\n for (const adapter of adaptersInBlock) {\n const s = statsMap.get(adapter);\n if (s) s.runsWithTelemetry++;\n }\n }\n return Array.from(statsMap.values());\n}\n\nconst formatNum = (n: number): string => n.toLocaleString('en-US');\nconst padRight = (s: string, w: number): string =>\n s + ' '.repeat(Math.max(0, w - s.length));\nconst padLeft = (s: string, w: number): string =>\n ' '.repeat(Math.max(0, w - s.length)) + s;\nconst capitalize = (s: string): string =>\n s.charAt(0).toUpperCase() + s.slice(1);\nconst fmtType = (t: string): string => t.split('-').map(capitalize).join('-');\n\nfunction formatCrossTable(\n title: string,\n rowLabels: string[],\n colLabels: string[],\n cell: (row: string, col: string) => string,\n rowTotal: (row: string) => string,\n colTotal: (col: string) => string,\n grandTotal: string,\n): string[] {\n const rlW = Math.max(17, ...rowLabels.map((r) => fmtType(r).length)) + 2;\n const cW = 12;\n const hdr =\n padRight('', rlW) +\n colLabels.map((c) => padRight(capitalize(c), cW)).join('') +\n 'Total';\n const rows = rowLabels.map(\n (r) =>\n padRight(fmtType(r), rlW) +\n colLabels.map((c) => padRight(cell(r, c), cW)).join('') +\n rowTotal(r),\n );\n const totalRow =\n padRight('Total', rlW) +\n colLabels.map((c) => padRight(colTotal(c), cW)).join('') +\n grandTotal;\n return [title, hdr, ...rows, totalRow, ''];\n}\n\nfunction formatRunCounts(ct: CrossTab): string[] {\n return formatCrossTable(\n '=== Run Counts ===',\n ct.allTypes,\n ct.allClis,\n (t, c) => String(ct.cells.get(t)?.get(c)?.count ?? 0),\n (t) => String(ct.typeTotals.get(t)?.count ?? 0),\n (c) => String(ct.cliTotals.get(c)?.count ?? 0),\n String(ct.grandTotal.count),\n );\n}\n\nfunction formatTiming(ct: CrossTab): string[] {\n const avg = (s: GateStat | undefined): string =>\n s && s.count > 0 ? `${(s.totalDuration / s.count).toFixed(1)}s` : 'n/a';\n const lines = formatCrossTable(\n '=== Timing ===',\n ct.allTypes,\n ct.allClis,\n (t, c) => avg(ct.cells.get(t)?.get(c)),\n (t) => avg(ct.typeTotals.get(t)),\n (c) => avg(ct.cliTotals.get(c)),\n avg(ct.grandTotal),\n );\n const p100parts = ct.allClis\n .map((c) => {\n const p = ct.per100.get(c);\n return p && p.diff > 0\n ? `${c}=${((p.dur / p.diff) * 100).toFixed(1)}s`\n : '';\n })\n .filter(Boolean);\n if (p100parts.length > 0)\n lines.splice(\n lines.length - 1,\n 0,\n `Per 100 diff lines (excl. zero-diff): ${p100parts.join(' ')}`,\n );\n return lines;\n}\n\nfunction formatViolations(ct: CrossTab): string[] {\n const avg = (s: GateStat | undefined): string =>\n s && s.count > 0 ? (s.totalViolations / s.count).toFixed(2) : 'n/a';\n return formatCrossTable(\n '=== Violations (avg per run) ===',\n ct.allTypes,\n ct.allClis,\n (t, c) => avg(ct.cells.get(t)?.get(c)),\n (t) => avg(ct.typeTotals.get(t)),\n (c) => avg(ct.cliTotals.get(c)),\n avg(ct.grandTotal),\n );\n}\n\nfunction formatTokenEntry(t: TokenStats, totalRuns: number): string[] {\n const out: string[] = [\n `${capitalize(t.adapter)} (${t.runsWithTelemetry} of ${totalRuns} runs had telemetry):`,\n ];\n if (t.inTokens > 0 || t.cacheTokens > 0) {\n const total = t.inTokens + t.cacheTokens;\n out.push(\n ` Input: ${padLeft(formatNum(total), 12)} (non-cached: ${formatNum(t.inTokens)} | cached: ${formatNum(t.cacheTokens)})`,\n );\n }\n if (t.outTokens > 0)\n out.push(` Output: ${padLeft(formatNum(t.outTokens), 12)}`);\n if (t.thoughtTokens > 0)\n out.push(` Thinking: ${padLeft(formatNum(t.thoughtTokens), 12)}`);\n if (t.toolTokens > 0)\n out.push(` Tool tokens: ${padLeft(formatNum(t.toolTokens), 12)}`);\n if (t.cacheRead > 0 || t.cacheWrite > 0) {\n out.push(` Cache reads: ${padLeft(formatNum(t.cacheRead), 12)}`);\n out.push(` Cache writes: ${padLeft(formatNum(t.cacheWrite), 12)}`);\n }\n if (t.apiRequests > 0) {\n const avg =\n t.runsWithTelemetry > 0\n ? (t.apiRequests / t.runsWithTelemetry).toFixed(1)\n : '?';\n out.push(\n ` API requests: ${padLeft(formatNum(t.apiRequests), 12)} (avg ${avg}/run)`,\n );\n }\n out.push('');\n return out;\n}\n\nfunction formatTokenUsage(ts: TokenStats[], m: Map<string, number>): string[] {\n if (ts.length === 0)\n return ['=== Token Usage ===', 'No telemetry data found.', ''];\n return [\n '=== Token Usage ===',\n ...ts.flatMap((t) =>\n formatTokenEntry(t, m.get(t.adapter) ?? t.runsWithTelemetry),\n ),\n ];\n}\n\nfunction formatFixSkip(blocks: RunBlock[]): string[] {\n const withEnd = blocks.filter((b) => b.end);\n const total = withEnd.length;\n const passed = withEnd.filter((b) => b.end?.status === 'pass').length;\n const fixed = withEnd.reduce((s, b) => s + (b.end?.fixed ?? 0), 0);\n const skipped = withEnd.reduce((s, b) => s + (b.end?.skipped ?? 0), 0);\n const failed = withEnd.reduce((s, b) => s + (b.end?.failed ?? 0), 0);\n const priorPass = blocks.reduce((s, b) => s + b.priorPassSkips, 0);\n const lines = [\n '=== Fix / Skip ===',\n `Gauntlet runs: ${total} total (${passed} passed, ${total - passed} failed)`,\n ` Violations fixed: ${fixed}`,\n ` Violations skipped: ${skipped}`,\n ` Gates failed: ${failed}`,\n ` Review gates skipped (prior pass): ${priorPass}`,\n ];\n const totalFixedSkipped = fixed + skipped;\n if (totalFixedSkipped > 0) {\n const fp = ((fixed / totalFixedSkipped) * 100).toFixed(1);\n const sp = ((skipped / totalFixedSkipped) * 100).toFixed(1);\n lines.push(` (fixed: ${fp}% | skipped: ${sp}% of fixed+skipped)`);\n }\n return lines;\n}\n\nexport function formatAuditReport(blocks: RunBlock[], date: string): string {\n if (blocks.length === 0)\n return `Review Execution Audit — ${date}\\n\\nNo gauntlet runs found for this date.`;\n const ct = buildCrossTab(blocks);\n const tokenStats = aggregateTokenStats(blocks);\n const cliBlockCount = new Map<string, number>();\n for (const block of blocks) {\n for (const cli of new Set(block.reviewGates.map((g) => g.cli)))\n cliBlockCount.set(cli, (cliBlockCount.get(cli) ?? 0) + 1);\n }\n return [\n `Review Execution Audit — ${date}`,\n '',\n ...formatRunCounts(ct),\n ...formatTiming(ct),\n ...formatViolations(ct),\n ...formatTokenUsage(tokenStats, cliBlockCount),\n ...formatFixSkip(blocks),\n ].join('\\n');\n}\n\nfunction todayLocalDate(): string {\n const now = new Date();\n const y = now.getFullYear();\n const mo = String(now.getMonth() + 1).padStart(2, '0');\n const d = String(now.getDate()).padStart(2, '0');\n return `${y}-${mo}-${d}`;\n}\n\nasync function readBlocks(filePath: string, date: string): Promise<RunBlock[]> {\n const rl = readline.createInterface({\n input: fs.createReadStream(filePath),\n });\n const blocks: RunBlock[] = [];\n let current: RunBlock | null = null;\n for await (const line of rl) {\n if (!line.trim()) continue;\n const ts = parseTimestamp(line);\n if (!ts.startsWith(date)) continue;\n const event = parseEventType(line);\n const body = parseEventBody(line);\n if (event === 'RUN_START') {\n current = handleRunStart(ts, body);\n blocks.push(current);\n continue;\n }\n if (!current) continue;\n if (event === 'GATE_RESULT') handleGateResult(current, body);\n else if (event === 'TELEMETRY') handleTelemetry(current, body);\n else if (event === 'RUN_END') handleRunEnd(current, body);\n }\n return blocks;\n}\nexport async function main(date?: string): Promise<void> {\n const cwd = process.cwd();\n if (date && !/^\\d{4}-\\d{2}-\\d{2}$/.test(date)) {\n console.error('Invalid --date. Expected YYYY-MM-DD');\n process.exit(1);\n }\n const targetDate = date ?? todayLocalDate();\n const debugLogPath = path.join(cwd, getLogDir(cwd), '.debug.log');\n if (!fs.existsSync(debugLogPath)) {\n console.log(`No debug log found. (looked in ${getLogDir(cwd)}/.debug.log)`);\n process.exit(0);\n }\n const blocks = await readBlocks(debugLogPath, targetDate);\n console.log(formatAuditReport(blocks, targetDate));\n}\n\nconst isDirectRun =\n (import.meta.url === `file://${process.argv[1]}` ||\n (typeof Bun !== 'undefined' && import.meta.url === `file://${Bun.main}`)) &&\n (process.argv[1]?.endsWith('review-audit.ts') ||\n process.argv[1]?.endsWith('review-audit.js'));\nif (isDirectRun) void main();\n",
|
|
76
|
+
"import type { Command } from 'commander';\nimport { main } from '../scripts/review-audit.js';\n\nexport function registerReviewAuditCommand(program: Command): void {\n program\n .command('review-audit')\n .description('Audit review execution for a given date from the debug log')\n .option('--date <YYYY-MM-DD>', 'Date to filter (default: today)')\n .action(async (opts: { date?: string }) => {\n await main(opts.date);\n });\n}\n",
|
|
75
77
|
"import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nconst LOCK_FILENAME = '.gauntlet-run.lock';\nconst STALE_LOCK_MS = 10 * 60 * 1000;\n\nfunction isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (err: unknown) {\n if (\n typeof err === 'object' &&\n err !== null &&\n 'code' in err &&\n (err as { code: string }).code === 'EPERM'\n ) {\n return true;\n }\n return false;\n }\n}\n\nasync function isLockStale(lockPath: string): Promise<boolean> {\n try {\n const lockContent = await fs.readFile(lockPath, 'utf-8');\n const lockPid = Number.parseInt(lockContent.trim(), 10);\n const lockStat = await fs.stat(lockPath);\n const lockAgeMs = Date.now() - lockStat.mtimeMs;\n\n const pidValid = !Number.isNaN(lockPid);\n if (pidValid && !isProcessAlive(lockPid)) {\n return true;\n }\n if (!pidValid && lockAgeMs > STALE_LOCK_MS) {\n return true;\n }\n return false;\n } catch {\n return false;\n }\n}\n\n/** Acquire the lock file. Returns true if successful, false if lock exists. */\nexport async function tryAcquireLock(logDir: string): Promise<boolean> {\n await fs.mkdir(logDir, { recursive: true });\n const lockPath = path.resolve(logDir, LOCK_FILENAME);\n try {\n await fs.writeFile(lockPath, String(process.pid), { flag: 'wx' });\n return true;\n } catch (err: unknown) {\n const isExist =\n typeof err === 'object' &&\n err !== null &&\n 'code' in err &&\n (err as { code: string }).code === 'EEXIST';\n\n if (!isExist) {\n throw err;\n }\n\n const stale = await isLockStale(lockPath);\n if (!stale) {\n return false;\n }\n\n await fs.rm(lockPath, { force: true });\n try {\n await fs.writeFile(lockPath, String(process.pid), { flag: 'wx' });\n return true;\n } catch {\n return false;\n }\n }\n}\n\n/** Find the latest console.N.log file in the log directory. */\nexport async function findLatestConsoleLog(\n logDir: string,\n): Promise<string | null> {\n try {\n const files = await fs.readdir(logDir);\n let maxNum = -1;\n let latestFile: string | null = null;\n\n for (const file of files) {\n if (!(file.startsWith('console.') && file.endsWith('.log'))) {\n continue;\n }\n const middle = file.slice('console.'.length, file.length - '.log'.length);\n if (/^\\d+$/.test(middle)) {\n const n = Number.parseInt(middle, 10);\n if (n > maxNum) {\n maxNum = n;\n latestFile = file;\n }\n }\n }\n\n return latestFile ? path.join(logDir, latestFile) : null;\n } catch {\n return null;\n }\n}\n",
|
|
76
|
-
"import { cleanLogs, hasExistingLogs } from '../commands/shared.js';\nimport { loadGlobalConfig } from '../config/global.js';\nimport type { loadConfig } from '../config/loader.js';\nimport { resolveStopHookConfig } from '../config/stop-hook-config.js';\nimport { getCategoryLogger, resetLogger } from '../output/app-logger.js';\nimport { ConsoleReporter } from '../output/console.js';\nimport type { ConsoleLogHandle } from '../output/console-log.js';\nimport type { Logger } from '../output/logger.js';\nimport type { GauntletStatus, RunResult } from '../types/gauntlet-status.js';\nimport { getDebugLogger } from '../utils/debug-log.js';\nimport {\n readExecutionState,\n resolveFixBase,\n writeExecutionState,\n} from '../utils/execution-state.js';\nimport {\n findPreviousFailures,\n hasSkippedViolationsInLogs,\n type PassedSlot,\n type PreviousViolation,\n} from '../utils/log-parser.js';\nimport { ChangeDetector } from './change-detector.js';\nimport { computeDiffStats } from './diff-stats.js';\nimport { EntryPointExpander } from './entry-point.js';\nimport { JobGenerator } from './job.js';\nimport { findLatestConsoleLog, tryAcquireLock } from './run-executor-lock.js';\nimport { Runner } from './runner.js';\n\n// Re-export lock helpers so existing imports from run-executor-helpers still work\nexport { findLatestConsoleLog, tryAcquireLock };\n\nexport type ChangeOptions = {\n commit?: string;\n uncommitted?: boolean;\n fixBase?: string;\n};\n\nexport type LoadedConfig = Awaited<ReturnType<typeof loadConfig>>;\n\nexport interface RunContext {\n options: {\n baseBranch?: string;\n gate?: string;\n commit?: string;\n uncommitted?: boolean;\n cwd?: string;\n checkInterval?: boolean;\n };\n config: LoadedConfig;\n loggerInitializedHere: boolean;\n effectiveBaseBranch: string;\n}\n\nconst statusMessages: Record<GauntletStatus, string> = {\n passed: 'All gates passed.',\n passed_with_warnings: 'Passed with warnings -- some issues were skipped.',\n no_applicable_gates: 'No applicable gates for these changes.',\n no_changes: 'No changes detected.',\n failed: 'Gates failed -- issues must be fixed.',\n retry_limit_exceeded:\n 'Retry limit exceeded -- logs have been automatically archived.',\n lock_conflict: 'Another gauntlet run is already in progress.',\n error: 'Unexpected error occurred.',\n no_config: 'No .gauntlet/config.yml found.',\n stop_hook_active: 'Stop hook already active.',\n loop_detected: 'Loop detected -- rapid blocks overridden.',\n interval_not_elapsed: 'Run interval not elapsed.',\n invalid_input: 'Invalid input.',\n stop_hook_disabled: '',\n validation_required:\n 'Changes need validation or previous run has unresolved failures.',\n};\n\nexport function getStatusMessage(status: GauntletStatus): string {\n return statusMessages[status] || 'Unknown status';\n}\n\nfunction getRunLogger() {\n return getCategoryLogger('run');\n}\n\nexport async function finalizeAndReturn(\n loggerInitializedHere: boolean,\n result: RunResult,\n consoleLogHandle?: ConsoleLogHandle,\n): Promise<RunResult> {\n consoleLogHandle?.restore();\n if (loggerInitializedHere) {\n await resetLogger();\n }\n return result;\n}\n\nexport async function shouldRunBasedOnInterval(\n logDir: string,\n intervalMinutes: number,\n): Promise<boolean> {\n const state = await readExecutionState(logDir);\n if (!state) {\n return true;\n }\n\n const lastRun = new Date(state.last_run_completed_at);\n if (Number.isNaN(lastRun.getTime())) {\n return true;\n }\n\n const now = new Date();\n const elapsedMinutes = (now.getTime() - lastRun.getTime()) / (1000 * 60);\n return elapsedMinutes >= intervalMinutes;\n}\n\nexport async function checkRunInterval(\n ctx: RunContext,\n): Promise<RunResult | null> {\n if (!ctx.options.checkInterval) {\n return null;\n }\n\n const globalConfig = await loadGlobalConfig();\n const stopHookConfig = resolveStopHookConfig(\n ctx.config.project.stop_hook,\n globalConfig,\n );\n\n const log = getRunLogger();\n\n if (!stopHookConfig.enabled) {\n log.debug('Stop hook is disabled via configuration, skipping');\n return {\n status: 'stop_hook_disabled',\n message: getStatusMessage('stop_hook_disabled'),\n };\n }\n\n const logsExist = await hasExistingLogs(ctx.config.project.log_dir);\n if (!logsExist && stopHookConfig.run_interval_minutes > 0) {\n const intervalMinutes = stopHookConfig.run_interval_minutes;\n const shouldRun = await shouldRunBasedOnInterval(\n ctx.config.project.log_dir,\n intervalMinutes,\n );\n if (!shouldRun) {\n log.debug(`Run interval (${intervalMinutes} min) not elapsed, skipping`);\n return {\n status: 'interval_not_elapsed',\n message: `Run interval (${intervalMinutes} min) not elapsed.`,\n intervalMinutes,\n };\n }\n }\n\n return null;\n}\n\nfunction buildFailuresMap(\n previousFailures: Awaited<\n ReturnType<typeof findPreviousFailures>\n >['failures'],\n): Map<string, Map<string, PreviousViolation[]>> {\n const failuresMap = new Map<string, Map<string, PreviousViolation[]>>();\n for (const gateFailure of previousFailures) {\n const adapterMap = new Map<string, PreviousViolation[]>();\n for (const af of gateFailure.adapterFailures) {\n const key = af.reviewIndex ? String(af.reviewIndex) : af.adapterName;\n adapterMap.set(key, af.violations);\n }\n failuresMap.set(gateFailure.jobId, adapterMap);\n }\n return failuresMap;\n}\n\nasync function handleRerunMode(ctx: RunContext): Promise<{\n failuresMap: Map<string, Map<string, PreviousViolation[]>>;\n passedSlotsMap: Map<string, Map<number, PassedSlot>> | undefined;\n changeOptions: ChangeOptions;\n}> {\n const log = getRunLogger();\n log.debug('Existing logs detected -- running in verification mode...');\n\n const { failures: previousFailures, passedSlots } =\n await findPreviousFailures(\n ctx.config.project.log_dir,\n ctx.options.gate,\n true,\n );\n\n const failuresMap = buildFailuresMap(previousFailures);\n\n if (previousFailures.length > 0) {\n const totalViolations = previousFailures.reduce(\n (sum, gf) =>\n sum + gf.adapterFailures.reduce((s, af) => s + af.violations.length, 0),\n 0,\n );\n log.warn(\n `Found ${previousFailures.length} gate(s) with ${totalViolations} previous violation(s)`,\n );\n }\n\n const changeOptions: ChangeOptions = { uncommitted: true };\n const executionState = await readExecutionState(ctx.config.project.log_dir);\n if (executionState?.working_tree_ref) {\n changeOptions.fixBase = executionState.working_tree_ref;\n }\n\n return { failuresMap, passedSlotsMap: passedSlots, changeOptions };\n}\n\nasync function handleFreshRunMode(\n ctx: RunContext,\n): Promise<ChangeOptions | undefined> {\n const log = getRunLogger();\n const executionState = await readExecutionState(ctx.config.project.log_dir);\n if (!executionState) {\n return undefined;\n }\n\n const resolved = await resolveFixBase(\n executionState,\n ctx.effectiveBaseBranch,\n );\n if (resolved.warning) {\n log.warn(`Warning: ${resolved.warning}`);\n }\n return resolved.fixBase ? { fixBase: resolved.fixBase } : undefined;\n}\n\nexport async function processRerunMode(\n ctx: RunContext,\n isRerun: boolean,\n logsExist: boolean,\n): Promise<{\n failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined;\n passedSlotsMap: Map<string, Map<number, PassedSlot>> | undefined;\n changeOptions: ChangeOptions | undefined;\n}> {\n let failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined;\n let passedSlotsMap: Map<string, Map<number, PassedSlot>> | undefined;\n let changeOptions: ChangeOptions | undefined;\n\n if (isRerun) {\n const rerunResult = await handleRerunMode(ctx);\n failuresMap = rerunResult.failuresMap;\n passedSlotsMap = rerunResult.passedSlotsMap;\n changeOptions = rerunResult.changeOptions;\n } else if (!logsExist) {\n changeOptions = await handleFreshRunMode(ctx);\n }\n\n if (ctx.options.commit || ctx.options.uncommitted) {\n changeOptions = {\n commit: ctx.options.commit,\n uncommitted: ctx.options.uncommitted,\n fixBase: changeOptions?.fixBase,\n };\n }\n\n return { failuresMap, passedSlotsMap, changeOptions };\n}\n\nexport async function handleNoChanges(\n ctx: RunContext,\n failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined,\n): Promise<RunResult> {\n const log = getRunLogger();\n const debugLogger = getDebugLogger();\n\n if (failuresMap && failuresMap.size === 0) {\n const hasSkipped = await hasSkippedViolationsInLogs({\n logDir: ctx.config.project.log_dir,\n });\n const status: GauntletStatus = hasSkipped\n ? 'passed_with_warnings'\n : 'passed';\n\n if (status === 'passed') {\n await debugLogger?.logClean('auto', 'all_passed');\n await cleanLogs(\n ctx.config.project.log_dir,\n ctx.config.project.max_previous_logs,\n );\n }\n\n log.info(getStatusMessage(status));\n return { status, message: getStatusMessage(status), gatesRun: 0 };\n }\n\n if (failuresMap && failuresMap.size > 0) {\n let totalViolations = 0;\n for (const adapterMap of failuresMap.values()) {\n for (const violations of adapterMap.values()) {\n totalViolations += violations.length;\n }\n }\n const message = `No changes detected — ${totalViolations} violation(s) still outstanding.`;\n log.warn(message);\n return { status: 'failed', message, gatesRun: 0 };\n }\n\n log.info('No changes detected.');\n return {\n status: 'no_changes',\n message: getStatusMessage('no_changes'),\n gatesRun: 0,\n };\n}\n\nexport async function detectAndPrepareChanges(\n ctx: RunContext,\n isRerun: boolean,\n failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined,\n changeOptions: ChangeOptions | undefined,\n): Promise<\n | { earlyResult: RunResult }\n | {\n jobs: ReturnType<JobGenerator['generateJobs']>;\n changeOpts: ChangeOptions;\n }\n> {\n const log = getRunLogger();\n const effectiveChangeOptions = changeOptions || {\n commit: ctx.options.commit,\n uncommitted: ctx.options.uncommitted,\n };\n\n const changeDetector = new ChangeDetector(\n ctx.effectiveBaseBranch,\n effectiveChangeOptions,\n );\n const expander = new EntryPointExpander();\n const jobGen = new JobGenerator(ctx.config);\n\n log.debug('Detecting changes...');\n const changes = await changeDetector.getChangedFiles();\n\n if (changes.length === 0 && isRerun) {\n return { earlyResult: await handleNoChanges(ctx, failuresMap) };\n }\n if (changes.length === 0) {\n return { earlyResult: await handleNoChanges(ctx, undefined) };\n }\n\n log.debug(`Found ${changes.length} changed files.`);\n\n const entryPoints = await expander.expand(\n ctx.config.project.entry_points,\n changes,\n );\n let jobs = jobGen.generateJobs(entryPoints);\n\n if (ctx.options.gate) {\n jobs = jobs.filter((j) => j.name === ctx.options.gate);\n }\n\n if (jobs.length === 0) {\n log.warn('No applicable gates for these changes.');\n return {\n earlyResult: {\n status: 'no_applicable_gates',\n message: getStatusMessage('no_applicable_gates'),\n gatesRun: 0,\n },\n };\n }\n\n return { jobs, changeOpts: effectiveChangeOptions };\n}\n\nfunction determineStatus(outcome: {\n allPassed: boolean;\n anySkipped: boolean;\n retryLimitExceeded: boolean;\n}): GauntletStatus {\n if (outcome.retryLimitExceeded) {\n return 'retry_limit_exceeded';\n }\n if (outcome.allPassed && outcome.anySkipped) {\n return 'passed_with_warnings';\n }\n if (outcome.allPassed) {\n return 'passed';\n }\n return 'failed';\n}\n\n/** Build the result object from runner outcome. */\nasync function buildRunResult(\n ctx: RunContext,\n outcome: Awaited<ReturnType<Runner['run']>>,\n jobs: ReturnType<JobGenerator['generateJobs']>,\n): Promise<RunResult> {\n const consoleLogPath = await findLatestConsoleLog(ctx.config.project.log_dir);\n const status = determineStatus(outcome);\n\n if (status === 'passed' || status === 'retry_limit_exceeded') {\n const reason = status === 'passed' ? 'all_passed' : 'retry_limit_exceeded';\n const debugLogger = getDebugLogger();\n await debugLogger?.logClean('auto', reason);\n await cleanLogs(\n ctx.config.project.log_dir,\n ctx.config.project.max_previous_logs,\n );\n }\n\n return {\n status,\n message: getStatusMessage(status),\n gatesRun: jobs.length,\n gatesFailed: outcome.allPassed ? 0 : jobs.length,\n consoleLogPath: consoleLogPath ?? undefined,\n gateResults: outcome.gateResults,\n };\n}\n\nexport async function executeAndReport(\n ctx: RunContext,\n logger: Logger,\n isRerun: boolean,\n failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined,\n passedSlotsMap: Map<string, Map<number, PassedSlot>> | undefined,\n changeOptions: ChangeOptions | undefined,\n jobs: ReturnType<JobGenerator['generateJobs']>,\n): Promise<RunResult> {\n const debugLogger = getDebugLogger();\n\n const runMode = isRerun ? 'verification' : 'full';\n const effectiveChangeOptions = changeOptions || {\n commit: ctx.options.commit,\n uncommitted: ctx.options.uncommitted,\n };\n const diffStats = await computeDiffStats(\n ctx.effectiveBaseBranch,\n effectiveChangeOptions,\n );\n await debugLogger?.logRunStartWithDiff(runMode, diffStats, jobs.length);\n\n getRunLogger().debug(`Running ${jobs.length} gates...`);\n\n const reporter = new ConsoleReporter();\n const runner = new Runner(\n ctx.config,\n logger,\n reporter,\n failuresMap,\n changeOptions,\n ctx.effectiveBaseBranch,\n passedSlotsMap,\n debugLogger ?? undefined,\n isRerun,\n );\n\n const outcome = await runner.run(jobs);\n\n await debugLogger?.logRunEnd(\n outcome.allPassed ? 'pass' : 'fail',\n outcome.stats.fixed,\n outcome.stats.skipped,\n outcome.stats.failed,\n logger.getRunNumber(),\n );\n\n await writeExecutionState(ctx.config.project.log_dir);\n\n return buildRunResult(ctx, outcome, jobs);\n}\n",
|
|
77
|
-
"import {\n hasExistingLogs,\n performAutoClean,\n releaseLock,\n shouldAutoClean,\n} from '../commands/shared.js';\nimport { loadGlobalConfig } from '../config/global.js';\nimport { loadConfig } from '../config/loader.js';\nimport {\n getCategoryLogger,\n initLogger,\n isLoggerConfigured,\n resetLogger,\n} from '../output/app-logger.js';\nimport { startConsoleLog } from '../output/console-log.js';\nimport { Logger } from '../output/logger.js';\nimport type { RunResult } from '../types/gauntlet-status.js';\nimport {\n getDebugLogger,\n initDebugLogger,\n mergeDebugLogConfig,\n} from '../utils/debug-log.js';\nimport { resolveBaseBranch } from '../utils/git.js';\nimport {\n checkRunInterval,\n detectAndPrepareChanges,\n executeAndReport,\n finalizeAndReturn,\n getStatusMessage,\n processRerunMode,\n type RunContext,\n tryAcquireLock,\n} from './run-executor-helpers.js';\n\nexport interface ExecuteRunOptions {\n baseBranch?: string;\n gate?: string;\n commit?: string;\n uncommitted?: boolean;\n /** Working directory for config loading (defaults to process.cwd()) */\n cwd?: string;\n /**\n * When true, check if run interval has elapsed before proceeding.\n * Only stop-hook uses this; CLI commands (run, check, review) always run immediately.\n * If interval hasn't elapsed, returns { status: \"interval_not_elapsed\", ... }.\n */\n checkInterval?: boolean;\n}\n\n/** Initialize app logger and debug logger, returning a RunContext. */\nasync function initRunContext(\n options: ExecuteRunOptions,\n config: Awaited<ReturnType<typeof loadConfig>>,\n): Promise<{ ctx: RunContext; loggerInitializedHere: boolean }> {\n let loggerInitializedHere = false;\n\n if (!isLoggerConfigured()) {\n await initLogger({\n mode: 'interactive',\n logDir: config.project.log_dir,\n });\n loggerInitializedHere = true;\n }\n\n const globalConfig = await loadGlobalConfig();\n const debugLogConfig = mergeDebugLogConfig(\n config.project.debug_log,\n globalConfig.debug_log,\n );\n initDebugLogger(config.project.log_dir, debugLogConfig);\n\n await logCommandInvocation(options);\n\n const effectiveBaseBranch = resolveBaseBranch(options, config);\n\n const ctx: RunContext = {\n options,\n config,\n loggerInitializedHere,\n effectiveBaseBranch,\n };\n\n return { ctx, loggerInitializedHere };\n}\n\n/** Log the command invocation to debug logger. */\nasync function logCommandInvocation(options: ExecuteRunOptions): Promise<void> {\n const debugLogger = getDebugLogger();\n const args = [\n options.baseBranch ? `-b ${options.baseBranch}` : '',\n options.gate ? `-g ${options.gate}` : '',\n options.commit ? `-c ${options.commit}` : '',\n options.uncommitted ? '-u' : '',\n options.checkInterval ? '--check-interval' : '',\n ].filter(Boolean);\n await debugLogger?.logCommand('run', args);\n}\n\n/** Handle auto-cleaning of logs on context change. */\nasync function handleAutoClean(ctx: RunContext): Promise<void> {\n const autoCleanResult = await shouldAutoClean(\n ctx.config.project.log_dir,\n ctx.effectiveBaseBranch,\n );\n if (autoCleanResult.clean) {\n getCategoryLogger('run').debug(\n `Auto-cleaning logs (${autoCleanResult.reason})...`,\n );\n const debugLogger = getDebugLogger();\n await debugLogger?.logClean('auto', autoCleanResult.reason || 'unknown');\n await performAutoClean(\n ctx.config.project.log_dir,\n autoCleanResult,\n ctx.config.project.max_previous_logs,\n );\n }\n}\n\n/** The inner run logic executed while holding the lock. */\nasync function runWithLock(\n ctx: RunContext,\n isRerun: boolean,\n logsExist: boolean,\n): Promise<RunResult> {\n const logger = new Logger(ctx.config.project.log_dir);\n await logger.init();\n const runNumber = logger.getRunNumber();\n\n const consoleLogHandle = await startConsoleLog(\n ctx.config.project.log_dir,\n runNumber,\n );\n\n const { failuresMap, passedSlotsMap, changeOptions } = await processRerunMode(\n ctx,\n isRerun,\n logsExist,\n );\n\n const prepared = await detectAndPrepareChanges(\n ctx,\n isRerun,\n failuresMap,\n changeOptions,\n );\n\n if ('earlyResult' in prepared) {\n return finalizeAndReturn(\n ctx.loggerInitializedHere,\n prepared.earlyResult,\n consoleLogHandle,\n );\n }\n\n const result = await executeAndReport(\n ctx,\n logger,\n isRerun,\n failuresMap,\n passedSlotsMap,\n changeOptions,\n prepared.jobs,\n );\n\n consoleLogHandle?.restore();\n if (ctx.loggerInitializedHere) {\n await resetLogger();\n }\n return result;\n}\n\n/**\n * Execute the gauntlet run logic. Returns a structured RunResult.\n * This function never calls process.exit() - the caller is responsible for that.\n */\nexport async function executeRun(\n options: ExecuteRunOptions = {},\n): Promise<RunResult> {\n let loggerInitializedHere = false;\n\n try {\n const config = await loadConfig(options.cwd);\n const { ctx, loggerInitializedHere: lih } = await initRunContext(\n options,\n config,\n );\n loggerInitializedHere = lih;\n\n const intervalResult = await checkRunInterval(ctx);\n if (intervalResult) {\n return finalizeAndReturn(loggerInitializedHere, intervalResult);\n }\n\n await handleAutoClean(ctx);\n\n const logsExist = await hasExistingLogs(config.project.log_dir);\n const isRerun = logsExist && !options.commit;\n\n const lockAcquired = await tryAcquireLock(config.project.log_dir);\n if (!lockAcquired) {\n return finalizeAndReturn(loggerInitializedHere, {\n status: 'lock_conflict',\n message: getStatusMessage('lock_conflict'),\n });\n }\n\n try {\n return await runWithLock(ctx, isRerun, logsExist);\n } finally {\n await releaseLock(config.project.log_dir);\n }\n } catch (error: unknown) {\n if (loggerInitializedHere) {\n try {\n await resetLogger();\n } catch {\n // Ignore errors resetting logger during error handling\n }\n }\n const err = error as { message?: string };\n return {\n status: 'error',\n message: getStatusMessage('error'),\n errorMessage: err.message || 'unknown error',\n };\n }\n}\n",
|
|
78
|
-
"import type { Command } from 'commander';\nimport { executeRun } from '../core/run-executor.js';\nimport { isSuccessStatus } from '../types/gauntlet-status.js';\n\nexport function registerRunCommand(program: Command): void {\n program\n .command('run')\n .description('Run gates for detected changes')\n .option(\n '-b, --base-branch <branch>',\n 'Override base branch for change detection',\n )\n .option('-g, --gate <name>', 'Run specific gate only')\n .option('-c, --commit <sha>', 'Use diff for a specific commit')\n .option(\n '-u, --uncommitted',\n 'Use diff for current uncommitted changes (staged and unstaged)',\n )\n .action(async (options) => {\n const result = await executeRun({\n baseBranch: options.baseBranch,\n gate: options.gate,\n commit: options.commit,\n uncommitted: options.uncommitted,\n });\n\n const code = isSuccessStatus(result.status) ? 0 : 1;\n process.exit(code);\n });\n}\n",
|
|
78
|
+
"import { cleanLogs, hasExistingLogs } from '../commands/shared.js';\nimport { loadGlobalConfig } from '../config/global.js';\nimport type { loadConfig } from '../config/loader.js';\nimport { resolveStopHookConfig } from '../config/stop-hook-config.js';\nimport { getCategoryLogger, resetLogger } from '../output/app-logger.js';\nimport { ConsoleReporter } from '../output/console.js';\nimport type { ConsoleLogHandle } from '../output/console-log.js';\nimport type { Logger } from '../output/logger.js';\nimport type { GauntletStatus, RunResult } from '../types/gauntlet-status.js';\nimport { getDebugLogger } from '../utils/debug-log.js';\nimport {\n readExecutionState,\n resolveFixBase,\n writeExecutionState,\n} from '../utils/execution-state.js';\nimport {\n findPreviousFailures,\n hasSkippedViolationsInLogs,\n type PassedSlot,\n type PreviousViolation,\n} from '../utils/log-parser.js';\nimport { ChangeDetector } from './change-detector.js';\nimport { computeDiffStats } from './diff-stats.js';\nimport { EntryPointExpander } from './entry-point.js';\nimport { JobGenerator } from './job.js';\nimport { findLatestConsoleLog, tryAcquireLock } from './run-executor-lock.js';\nimport { Runner } from './runner.js';\n\n// Re-export lock helpers so existing imports from run-executor-helpers still work\nexport { findLatestConsoleLog, tryAcquireLock };\n\nexport type ChangeOptions = {\n commit?: string;\n uncommitted?: boolean;\n fixBase?: string;\n};\n\nexport type LoadedConfig = Awaited<ReturnType<typeof loadConfig>>;\n\nexport interface RunContext {\n options: {\n baseBranch?: string;\n gate?: string;\n commit?: string;\n uncommitted?: boolean;\n cwd?: string;\n checkInterval?: boolean;\n enableReviews?: Set<string>;\n };\n config: LoadedConfig;\n loggerInitializedHere: boolean;\n effectiveBaseBranch: string;\n}\n\nconst statusMessages: Record<GauntletStatus, string> = {\n passed: 'All gates passed.',\n passed_with_warnings: 'Passed with warnings -- some issues were skipped.',\n no_applicable_gates: 'No applicable gates for these changes.',\n no_changes: 'No changes detected.',\n failed: 'Gates failed -- issues must be fixed.',\n retry_limit_exceeded:\n 'Retry limit exceeded -- logs have been automatically archived.',\n lock_conflict: 'Another gauntlet run is already in progress.',\n error: 'Unexpected error occurred.',\n no_config: 'No .gauntlet/config.yml found.',\n stop_hook_active: 'Stop hook already active.',\n loop_detected: 'Loop detected -- rapid blocks overridden.',\n interval_not_elapsed: 'Run interval not elapsed.',\n invalid_input: 'Invalid input.',\n stop_hook_disabled: '',\n validation_required:\n 'Changes need validation or previous run has unresolved failures.',\n};\n\nexport function getStatusMessage(status: GauntletStatus): string {\n return statusMessages[status] || 'Unknown status';\n}\n\nfunction getRunLogger() {\n return getCategoryLogger('run');\n}\n\nexport async function finalizeAndReturn(\n loggerInitializedHere: boolean,\n result: RunResult,\n consoleLogHandle?: ConsoleLogHandle,\n): Promise<RunResult> {\n consoleLogHandle?.restore();\n if (loggerInitializedHere) {\n await resetLogger();\n }\n return result;\n}\n\nexport async function shouldRunBasedOnInterval(\n logDir: string,\n intervalMinutes: number,\n): Promise<boolean> {\n const state = await readExecutionState(logDir);\n if (!state) {\n return true;\n }\n\n const lastRun = new Date(state.last_run_completed_at);\n if (Number.isNaN(lastRun.getTime())) {\n return true;\n }\n\n const now = new Date();\n const elapsedMinutes = (now.getTime() - lastRun.getTime()) / (1000 * 60);\n return elapsedMinutes >= intervalMinutes;\n}\n\nexport async function checkRunInterval(\n ctx: RunContext,\n): Promise<RunResult | null> {\n if (!ctx.options.checkInterval) {\n return null;\n }\n\n const globalConfig = await loadGlobalConfig();\n const stopHookConfig = resolveStopHookConfig(\n ctx.config.project.stop_hook,\n globalConfig,\n );\n\n const log = getRunLogger();\n\n if (!stopHookConfig.enabled) {\n log.debug('Stop hook is disabled via configuration, skipping');\n return {\n status: 'stop_hook_disabled',\n message: getStatusMessage('stop_hook_disabled'),\n };\n }\n\n const logsExist = await hasExistingLogs(ctx.config.project.log_dir);\n if (!logsExist && stopHookConfig.run_interval_minutes > 0) {\n const intervalMinutes = stopHookConfig.run_interval_minutes;\n const shouldRun = await shouldRunBasedOnInterval(\n ctx.config.project.log_dir,\n intervalMinutes,\n );\n if (!shouldRun) {\n log.debug(`Run interval (${intervalMinutes} min) not elapsed, skipping`);\n return {\n status: 'interval_not_elapsed',\n message: `Run interval (${intervalMinutes} min) not elapsed.`,\n intervalMinutes,\n };\n }\n }\n\n return null;\n}\n\nfunction buildFailuresMap(\n previousFailures: Awaited<\n ReturnType<typeof findPreviousFailures>\n >['failures'],\n): Map<string, Map<string, PreviousViolation[]>> {\n const failuresMap = new Map<string, Map<string, PreviousViolation[]>>();\n for (const gateFailure of previousFailures) {\n const adapterMap = new Map<string, PreviousViolation[]>();\n for (const af of gateFailure.adapterFailures) {\n const key = af.reviewIndex ? String(af.reviewIndex) : af.adapterName;\n adapterMap.set(key, af.violations);\n }\n failuresMap.set(gateFailure.jobId, adapterMap);\n }\n return failuresMap;\n}\n\nasync function handleRerunMode(ctx: RunContext): Promise<{\n failuresMap: Map<string, Map<string, PreviousViolation[]>>;\n passedSlotsMap: Map<string, Map<number, PassedSlot>> | undefined;\n changeOptions: ChangeOptions;\n}> {\n const log = getRunLogger();\n log.debug('Existing logs detected -- running in verification mode...');\n\n const { failures: previousFailures, passedSlots } =\n await findPreviousFailures(\n ctx.config.project.log_dir,\n ctx.options.gate,\n true,\n );\n\n const failuresMap = buildFailuresMap(previousFailures);\n\n if (previousFailures.length > 0) {\n const totalViolations = previousFailures.reduce(\n (sum, gf) =>\n sum + gf.adapterFailures.reduce((s, af) => s + af.violations.length, 0),\n 0,\n );\n log.warn(\n `Found ${previousFailures.length} gate(s) with ${totalViolations} previous violation(s)`,\n );\n }\n\n const changeOptions: ChangeOptions = { uncommitted: true };\n const executionState = await readExecutionState(ctx.config.project.log_dir);\n if (executionState?.working_tree_ref) {\n changeOptions.fixBase = executionState.working_tree_ref;\n }\n\n return { failuresMap, passedSlotsMap: passedSlots, changeOptions };\n}\n\nasync function handleFreshRunMode(\n ctx: RunContext,\n): Promise<ChangeOptions | undefined> {\n const log = getRunLogger();\n const executionState = await readExecutionState(ctx.config.project.log_dir);\n if (!executionState) {\n return undefined;\n }\n\n const resolved = await resolveFixBase(\n executionState,\n ctx.effectiveBaseBranch,\n );\n if (resolved.warning) {\n log.warn(`Warning: ${resolved.warning}`);\n }\n return resolved.fixBase ? { fixBase: resolved.fixBase } : undefined;\n}\n\nexport async function processRerunMode(\n ctx: RunContext,\n isRerun: boolean,\n logsExist: boolean,\n): Promise<{\n failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined;\n passedSlotsMap: Map<string, Map<number, PassedSlot>> | undefined;\n changeOptions: ChangeOptions | undefined;\n}> {\n let failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined;\n let passedSlotsMap: Map<string, Map<number, PassedSlot>> | undefined;\n let changeOptions: ChangeOptions | undefined;\n\n if (isRerun) {\n const rerunResult = await handleRerunMode(ctx);\n failuresMap = rerunResult.failuresMap;\n passedSlotsMap = rerunResult.passedSlotsMap;\n changeOptions = rerunResult.changeOptions;\n } else if (!logsExist) {\n changeOptions = await handleFreshRunMode(ctx);\n }\n\n if (ctx.options.commit || ctx.options.uncommitted) {\n changeOptions = {\n commit: ctx.options.commit,\n uncommitted: ctx.options.uncommitted,\n fixBase: changeOptions?.fixBase,\n };\n }\n\n return { failuresMap, passedSlotsMap, changeOptions };\n}\n\nexport async function handleNoChanges(\n ctx: RunContext,\n failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined,\n): Promise<RunResult> {\n const log = getRunLogger();\n const debugLogger = getDebugLogger();\n\n if (failuresMap && failuresMap.size === 0) {\n const hasSkipped = await hasSkippedViolationsInLogs({\n logDir: ctx.config.project.log_dir,\n });\n const status: GauntletStatus = hasSkipped\n ? 'passed_with_warnings'\n : 'passed';\n\n if (status === 'passed') {\n await debugLogger?.logClean('auto', 'all_passed');\n await cleanLogs(\n ctx.config.project.log_dir,\n ctx.config.project.max_previous_logs,\n );\n }\n\n log.info(getStatusMessage(status));\n return { status, message: getStatusMessage(status), gatesRun: 0 };\n }\n\n if (failuresMap && failuresMap.size > 0) {\n let totalViolations = 0;\n for (const adapterMap of failuresMap.values()) {\n for (const violations of adapterMap.values()) {\n totalViolations += violations.length;\n }\n }\n const message = `No changes detected — ${totalViolations} violation(s) still outstanding.`;\n log.warn(message);\n return { status: 'failed', message, gatesRun: 0 };\n }\n\n log.info('No changes detected.');\n return {\n status: 'no_changes',\n message: getStatusMessage('no_changes'),\n gatesRun: 0,\n };\n}\n\nexport async function detectAndPrepareChanges(\n ctx: RunContext,\n isRerun: boolean,\n failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined,\n changeOptions: ChangeOptions | undefined,\n): Promise<\n | { earlyResult: RunResult }\n | {\n jobs: ReturnType<JobGenerator['generateJobs']>;\n changeOpts: ChangeOptions;\n }\n> {\n const log = getRunLogger();\n const effectiveChangeOptions = changeOptions || {\n commit: ctx.options.commit,\n uncommitted: ctx.options.uncommitted,\n };\n\n const changeDetector = new ChangeDetector(\n ctx.effectiveBaseBranch,\n effectiveChangeOptions,\n );\n const expander = new EntryPointExpander();\n const jobGen = new JobGenerator(ctx.config, ctx.options.enableReviews);\n\n log.debug('Detecting changes...');\n const changes = await changeDetector.getChangedFiles();\n\n if (changes.length === 0 && isRerun) {\n return { earlyResult: await handleNoChanges(ctx, failuresMap) };\n }\n if (changes.length === 0) {\n return { earlyResult: await handleNoChanges(ctx, undefined) };\n }\n\n log.debug(`Found ${changes.length} changed files.`);\n\n const entryPoints = await expander.expand(\n ctx.config.project.entry_points,\n changes,\n );\n let jobs = jobGen.generateJobs(entryPoints);\n\n if (ctx.options.gate) {\n jobs = jobs.filter((j) => j.name === ctx.options.gate);\n }\n\n if (jobs.length === 0) {\n log.warn('No applicable gates for these changes.');\n return {\n earlyResult: {\n status: 'no_applicable_gates',\n message: getStatusMessage('no_applicable_gates'),\n gatesRun: 0,\n },\n };\n }\n\n return { jobs, changeOpts: effectiveChangeOptions };\n}\n\nfunction determineStatus(outcome: {\n allPassed: boolean;\n anySkipped: boolean;\n retryLimitExceeded: boolean;\n}): GauntletStatus {\n if (outcome.retryLimitExceeded) {\n return 'retry_limit_exceeded';\n }\n if (outcome.allPassed && outcome.anySkipped) {\n return 'passed_with_warnings';\n }\n if (outcome.allPassed) {\n return 'passed';\n }\n return 'failed';\n}\n\n/** Build the result object from runner outcome. */\nasync function buildRunResult(\n ctx: RunContext,\n outcome: Awaited<ReturnType<Runner['run']>>,\n jobs: ReturnType<JobGenerator['generateJobs']>,\n): Promise<RunResult> {\n const consoleLogPath = await findLatestConsoleLog(ctx.config.project.log_dir);\n const status = determineStatus(outcome);\n\n if (status === 'passed' || status === 'retry_limit_exceeded') {\n const reason = status === 'passed' ? 'all_passed' : 'retry_limit_exceeded';\n const debugLogger = getDebugLogger();\n await debugLogger?.logClean('auto', reason);\n await cleanLogs(\n ctx.config.project.log_dir,\n ctx.config.project.max_previous_logs,\n );\n }\n\n return {\n status,\n message: getStatusMessage(status),\n gatesRun: jobs.length,\n gatesFailed: outcome.allPassed ? 0 : jobs.length,\n consoleLogPath: consoleLogPath ?? undefined,\n gateResults: outcome.gateResults,\n };\n}\n\nexport async function executeAndReport(\n ctx: RunContext,\n logger: Logger,\n isRerun: boolean,\n failuresMap: Map<string, Map<string, PreviousViolation[]>> | undefined,\n passedSlotsMap: Map<string, Map<number, PassedSlot>> | undefined,\n changeOptions: ChangeOptions | undefined,\n jobs: ReturnType<JobGenerator['generateJobs']>,\n): Promise<RunResult> {\n const debugLogger = getDebugLogger();\n\n const runMode = isRerun ? 'verification' : 'full';\n const effectiveChangeOptions = changeOptions || {\n commit: ctx.options.commit,\n uncommitted: ctx.options.uncommitted,\n };\n const diffStats = await computeDiffStats(\n ctx.effectiveBaseBranch,\n effectiveChangeOptions,\n );\n await debugLogger?.logRunStartWithDiff(runMode, diffStats, jobs.length);\n\n getRunLogger().debug(`Running ${jobs.length} gates...`);\n\n const reporter = new ConsoleReporter();\n const runner = new Runner(\n ctx.config,\n logger,\n reporter,\n failuresMap,\n changeOptions,\n ctx.effectiveBaseBranch,\n passedSlotsMap,\n debugLogger ?? undefined,\n isRerun,\n );\n\n const outcome = await runner.run(jobs);\n\n await debugLogger?.logRunEnd(\n outcome.allPassed ? 'pass' : 'fail',\n outcome.stats.fixed,\n outcome.stats.skipped,\n outcome.stats.failed,\n logger.getRunNumber(),\n );\n\n await writeExecutionState(ctx.config.project.log_dir);\n\n return buildRunResult(ctx, outcome, jobs);\n}\n",
|
|
79
|
+
"import {\n hasExistingLogs,\n performAutoClean,\n releaseLock,\n shouldAutoClean,\n} from '../commands/shared.js';\nimport { loadGlobalConfig } from '../config/global.js';\nimport { loadConfig } from '../config/loader.js';\nimport {\n getCategoryLogger,\n initLogger,\n isLoggerConfigured,\n resetLogger,\n} from '../output/app-logger.js';\nimport { startConsoleLog } from '../output/console-log.js';\nimport { Logger } from '../output/logger.js';\nimport type { RunResult } from '../types/gauntlet-status.js';\nimport {\n getDebugLogger,\n initDebugLogger,\n mergeDebugLogConfig,\n} from '../utils/debug-log.js';\nimport { resolveBaseBranch } from '../utils/git.js';\nimport {\n checkRunInterval,\n detectAndPrepareChanges,\n executeAndReport,\n finalizeAndReturn,\n getStatusMessage,\n processRerunMode,\n type RunContext,\n tryAcquireLock,\n} from './run-executor-helpers.js';\n\nexport interface ExecuteRunOptions {\n baseBranch?: string;\n gate?: string;\n commit?: string;\n uncommitted?: boolean;\n /** Working directory for config loading (defaults to process.cwd()) */\n cwd?: string;\n /**\n * When true, check if run interval has elapsed before proceeding.\n * Only stop-hook uses this; CLI commands (run, check, review) always run immediately.\n * If interval hasn't elapsed, returns { status: \"interval_not_elapsed\", ... }.\n */\n checkInterval?: boolean;\n /** Set of review names to activate even if their config has enabled: false */\n enableReviews?: Set<string>;\n}\n\n/** Initialize app logger and debug logger, returning a RunContext. */\nasync function initRunContext(\n options: ExecuteRunOptions,\n config: Awaited<ReturnType<typeof loadConfig>>,\n): Promise<{ ctx: RunContext; loggerInitializedHere: boolean }> {\n let loggerInitializedHere = false;\n\n if (!isLoggerConfigured()) {\n await initLogger({\n mode: 'interactive',\n logDir: config.project.log_dir,\n });\n loggerInitializedHere = true;\n }\n\n const globalConfig = await loadGlobalConfig();\n const debugLogConfig = mergeDebugLogConfig(\n config.project.debug_log,\n globalConfig.debug_log,\n );\n initDebugLogger(config.project.log_dir, debugLogConfig);\n\n await logCommandInvocation(options);\n\n const effectiveBaseBranch = resolveBaseBranch(options, config);\n\n const ctx: RunContext = {\n options,\n config,\n loggerInitializedHere,\n effectiveBaseBranch,\n };\n\n return { ctx, loggerInitializedHere };\n}\n\n/** Log the command invocation to debug logger. */\nasync function logCommandInvocation(options: ExecuteRunOptions): Promise<void> {\n const debugLogger = getDebugLogger();\n const args = [\n options.baseBranch ? `-b ${options.baseBranch}` : '',\n options.gate ? `-g ${options.gate}` : '',\n options.commit ? `-c ${options.commit}` : '',\n options.uncommitted ? '-u' : '',\n options.checkInterval ? '--check-interval' : '',\n ].filter(Boolean);\n await debugLogger?.logCommand('run', args);\n}\n\n/** Handle auto-cleaning of logs on context change. */\nasync function handleAutoClean(ctx: RunContext): Promise<void> {\n const autoCleanResult = await shouldAutoClean(\n ctx.config.project.log_dir,\n ctx.effectiveBaseBranch,\n );\n if (autoCleanResult.clean) {\n getCategoryLogger('run').debug(\n `Auto-cleaning logs (${autoCleanResult.reason})...`,\n );\n const debugLogger = getDebugLogger();\n await debugLogger?.logClean('auto', autoCleanResult.reason || 'unknown');\n await performAutoClean(\n ctx.config.project.log_dir,\n autoCleanResult,\n ctx.config.project.max_previous_logs,\n );\n }\n}\n\n/** The inner run logic executed while holding the lock. */\nasync function runWithLock(\n ctx: RunContext,\n isRerun: boolean,\n logsExist: boolean,\n): Promise<RunResult> {\n const logger = new Logger(ctx.config.project.log_dir);\n await logger.init();\n const runNumber = logger.getRunNumber();\n\n const consoleLogHandle = await startConsoleLog(\n ctx.config.project.log_dir,\n runNumber,\n );\n\n const { failuresMap, passedSlotsMap, changeOptions } = await processRerunMode(\n ctx,\n isRerun,\n logsExist,\n );\n\n const prepared = await detectAndPrepareChanges(\n ctx,\n isRerun,\n failuresMap,\n changeOptions,\n );\n\n if ('earlyResult' in prepared) {\n return finalizeAndReturn(\n ctx.loggerInitializedHere,\n prepared.earlyResult,\n consoleLogHandle,\n );\n }\n\n const result = await executeAndReport(\n ctx,\n logger,\n isRerun,\n failuresMap,\n passedSlotsMap,\n changeOptions,\n prepared.jobs,\n );\n\n consoleLogHandle?.restore();\n if (ctx.loggerInitializedHere) {\n await resetLogger();\n }\n return result;\n}\n\n/**\n * Execute the gauntlet run logic. Returns a structured RunResult.\n * This function never calls process.exit() - the caller is responsible for that.\n */\nexport async function executeRun(\n options: ExecuteRunOptions = {},\n): Promise<RunResult> {\n let loggerInitializedHere = false;\n\n try {\n const config = await loadConfig(options.cwd);\n const { ctx, loggerInitializedHere: lih } = await initRunContext(\n options,\n config,\n );\n loggerInitializedHere = lih;\n\n const intervalResult = await checkRunInterval(ctx);\n if (intervalResult) {\n return finalizeAndReturn(loggerInitializedHere, intervalResult);\n }\n\n await handleAutoClean(ctx);\n\n const logsExist = await hasExistingLogs(config.project.log_dir);\n const isRerun = logsExist && !options.commit;\n\n const lockAcquired = await tryAcquireLock(config.project.log_dir);\n if (!lockAcquired) {\n return finalizeAndReturn(loggerInitializedHere, {\n status: 'lock_conflict',\n message: getStatusMessage('lock_conflict'),\n });\n }\n\n try {\n return await runWithLock(ctx, isRerun, logsExist);\n } finally {\n await releaseLock(config.project.log_dir);\n }\n } catch (error: unknown) {\n if (loggerInitializedHere) {\n try {\n await resetLogger();\n } catch {\n // Ignore errors resetting logger during error handling\n }\n }\n const err = error as { message?: string };\n return {\n status: 'error',\n message: getStatusMessage('error'),\n errorMessage: err.message || 'unknown error',\n };\n }\n}\n",
|
|
80
|
+
"import type { Command } from 'commander';\nimport { executeRun } from '../core/run-executor.js';\nimport { isSuccessStatus } from '../types/gauntlet-status.js';\n\nexport function registerRunCommand(program: Command): void {\n program\n .command('run')\n .description('Run gates for detected changes')\n .option(\n '-b, --base-branch <branch>',\n 'Override base branch for change detection',\n )\n .option('-g, --gate <name>', 'Run specific gate only')\n .option('-c, --commit <sha>', 'Use diff for a specific commit')\n .option(\n '-u, --uncommitted',\n 'Use diff for current uncommitted changes (staged and unstaged)',\n )\n .option(\n '-e, --enable-review <name>',\n 'Activate a disabled review for this run (repeatable)',\n (value: string, prev: string[] = []) => [...prev, value],\n [] as string[],\n )\n .action(async (options) => {\n const result = await executeRun({\n baseBranch: options.baseBranch,\n gate: options.gate,\n commit: options.commit,\n uncommitted: options.uncommitted,\n enableReviews: new Set<string>(options.enableReview ?? []),\n });\n\n const code = isSuccessStatus(result.status) ? 0 : 1;\n process.exit(code);\n });\n}\n",
|
|
79
81
|
"import chalk from 'chalk';\nimport type { Command } from 'commander';\nimport { loadGlobalConfig } from '../config/global.js';\nimport { loadConfig } from '../config/loader.js';\nimport {\n getDebugLogger,\n initDebugLogger,\n mergeDebugLogConfig,\n} from '../utils/debug-log.js';\nimport {\n getCurrentCommit,\n writeExecutionState,\n} from '../utils/execution-state.js';\nimport { acquireLock, cleanLogs, releaseLock } from './shared.js';\n\nexport function registerSkipCommand(program: Command): void {\n program\n .command('skip')\n .description('Advance execution state baseline without running gates')\n .action(async () => {\n let config: Awaited<ReturnType<typeof loadConfig>> | undefined;\n let lockAcquired = false;\n try {\n config = await loadConfig();\n\n // Initialize debug logger\n const globalConfig = await loadGlobalConfig();\n const debugLogConfig = mergeDebugLogConfig(\n config.project.debug_log,\n globalConfig.debug_log,\n );\n initDebugLogger(config.project.log_dir, debugLogConfig);\n\n // Acquire lock BEFORE any state changes\n await acquireLock(config.project.log_dir);\n lockAcquired = true;\n\n // Log the command invocation\n const debugLogger = getDebugLogger();\n await debugLogger?.logCommand('skip', []);\n\n // Archive existing logs\n await cleanLogs(\n config.project.log_dir,\n config.project.max_previous_logs,\n );\n\n // Write execution state with current branch/commit/working-tree-ref\n await writeExecutionState(config.project.log_dir);\n\n // Get abbreviated commit SHA for confirmation message\n const commit = await getCurrentCommit();\n const shortSha = commit.slice(0, 7);\n\n await releaseLock(config.project.log_dir);\n console.log(\n chalk.green(\n `Baseline advanced to ${shortSha}. Next run will diff from here.`,\n ),\n );\n } catch (error: unknown) {\n if (config && lockAcquired) {\n await releaseLock(config.project.log_dir);\n }\n const err = error as { message?: string };\n console.error(chalk.red('Error:'), err.message);\n process.exit(1);\n }\n });\n}\n",
|
|
80
82
|
"import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { Command } from 'commander';\nimport YAML from 'yaml';\nimport { loadGlobalConfig } from '../config/global.js';\nimport { getDebugLogConfig, getLogDir } from '../hooks/stop-hook-handler.js';\nimport { DebugLogger, mergeDebugLogConfig } from '../utils/debug-log.js';\n\nconst START_HOOK_MESSAGE = `<IMPORTANT>\nThis project uses Agent Gauntlet for automated quality verification.\n\nBEFORE reporting any coding task as complete, you MUST run /gauntlet-run\nto verify your changes pass all quality gates.\n\nRun /gauntlet-run when ALL of these are true:\n 1. You completed a coding task (implemented a feature, fixed a bug,\n refactored code, or made other substantive code changes)\n 2. You are about to report the work as done, complete, or fixed\n\nDo NOT run /gauntlet-run when:\n - You only answered questions, explored code, or ran read-only commands\n - You are in the middle of a multi-step task (run it at the end, not\n after every individual change)\n - The user explicitly asked to skip verification\n\nIf you are unsure whether to run it, run it. False positives (running\nunnecessarily) are far less costly than false negatives (skipping\nverification on code that needed it).\n</IMPORTANT>`;\n\nfunction formatClaudeOutput(message: string): string {\n return JSON.stringify({\n hookSpecificOutput: {\n hookEventName: 'SessionStart',\n additionalContext: message,\n },\n });\n}\n\nfunction formatCursorOutput(message: string): string {\n return message;\n}\n\n/**\n * Validate that the config file contains parseable YAML with at least some content.\n * Returns true if valid, false if empty or invalid.\n */\nfunction isValidConfig(content: string): boolean {\n const trimmed = content.trim();\n if (!trimmed) {\n return false;\n }\n try {\n const parsed = YAML.parse(trimmed);\n // YAML.parse returns null for empty documents, undefined for some edge cases\n return parsed != null && typeof parsed === 'object';\n } catch {\n return false;\n }\n}\n\nexport function registerStartHookCommand(program: Command): void {\n program\n .command('start-hook')\n .description(\n 'Session start hook - primes agent with gauntlet verification instructions',\n )\n .option('--adapter <adapter>', 'Output format: claude or cursor', 'claude')\n .action(async (options: { adapter: string }) => {\n // Fast exit if not a gauntlet project\n const configPath = path.join(process.cwd(), '.gauntlet', 'config.yml');\n try {\n const content = await fs.readFile(configPath, 'utf-8');\n if (!isValidConfig(content)) {\n return;\n }\n } catch {\n // No config file — silent exit\n return;\n }\n\n const adapter = options.adapter;\n\n // Log to .debug.log\n try {\n const cwd = process.cwd();\n const logDir = path.join(cwd, await getLogDir(cwd));\n const globalConfig = await loadGlobalConfig();\n const projectDebugLogConfig = await getDebugLogConfig(cwd);\n const debugLogConfig = mergeDebugLogConfig(\n projectDebugLogConfig,\n globalConfig.debug_log,\n );\n const debugLogger = new DebugLogger(logDir, debugLogConfig);\n await debugLogger.logStartHook(adapter);\n } catch {\n // Debug logging should never break the hook\n }\n\n const output =\n adapter === 'cursor'\n ? formatCursorOutput(START_HOOK_MESSAGE)\n : formatClaudeOutput(START_HOOK_MESSAGE);\n\n console.log(output);\n });\n}\n",
|
|
81
83
|
"import type { Command } from 'commander';\nimport { main } from '../scripts/status.js';\n\nexport function registerStatusCommand(program: Command): void {\n program\n .command('status')\n .description('Show a summary of the most recent gauntlet session')\n .action(() => {\n main();\n });\n}\n",
|
|
82
84
|
"import chalk from 'chalk';\nimport type { Command } from 'commander';\nimport { loadConfig } from '../config/loader.js';\n\nexport function registerValidateCommand(program: Command): void {\n program\n .command('validate')\n .description('Validate .gauntlet/ config files against schemas')\n .action(async () => {\n try {\n await loadConfig();\n console.log(chalk.green('All config files are valid.'));\n process.exitCode = 0;\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(chalk.red('Validation failed:'), message);\n process.exitCode = 1;\n }\n });\n}\n"
|
|
83
85
|
],
|
|
84
|
-
"mappings": "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",
|
|
85
|
-
"debugId": "
|
|
86
|
+
"mappings": "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",
|
|
87
|
+
"debugId": "CAFA132ED75F0B9564756E2164756E21",
|
|
86
88
|
"names": []
|
|
87
89
|
}
|