agent-gauntlet 1.2.1 → 1.3.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/.claude-plugin/marketplace.json +25 -0
- package/.claude-plugin/plugin.json +6 -0
- package/.cursor-plugin/plugin.json +6 -0
- package/README.md +2 -1
- package/dist/index.js +905 -368
- package/dist/index.js.map +23 -17
- package/hooks/cursor-hooks.json +16 -0
- package/hooks/hooks.json +27 -0
- package/package.json +5 -2
- package/skills/gauntlet-commit/SKILL.md +7 -3
package/dist/index.js.map
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
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/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-
|
|
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/plugin/claude-cli.ts", "../src/cli-adapters/claude-otel.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-plugin.ts", "../src/commands/init-prompts.ts", "../src/commands/plugin-update.ts", "../src/commands/list.ts", "../src/commands/review.ts", "../src/scripts/review-audit.ts", "../src/commands/review-audit.ts", "../src/core/run-executor.ts", "../src/output/report.ts", "../src/core/run-executor-helpers.ts", "../src/core/run-executor-lock.ts", "../src/commands/run.ts", "../src/commands/skip.ts", "../src/commands/start-hook.ts", "../src/commands/status.ts", "../src/commands/update.ts", "../src/commands/update-review.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 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",
|
|
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 registerUpdateCommand,\n registerUpdateReviewCommand,\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);\nregisterUpdateCommand(program);\nregisterUpdateReviewCommand(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
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
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",
|
|
@@ -12,11 +12,11 @@
|
|
|
12
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
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
|
-
"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
|
|
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 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 command,\n workingDirectory,\n };\n\n await logger(`Result: ${result.status} - ${result.message}\\n`);\n return result;\n } catch (error: unknown) {\n return this.handleExecutionError(\n error,\n jobId,\n command,\n workingDirectory,\n config,\n startTime,\n logger,\n );\n }\n }\n\n private async handleExecutionError(\n error: unknown,\n jobId: string,\n command: string,\n workingDirectory: string,\n config: LoadedCheckGateConfig,\n startTime: number,\n logger: (output: string) => Promise<void>,\n ): Promise<GateResult> {\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 const result = this.buildErrorResult(\n err,\n jobId,\n command,\n workingDirectory,\n config,\n startTime,\n );\n\n await logger(`Result: ${result.status} - ${result.message}\\n`);\n await this.logFixInfo(config, logger);\n return result;\n }\n\n private buildErrorResult(\n err: { signal?: string; code?: number; message?: string },\n jobId: string,\n command: string,\n workingDirectory: string,\n config: LoadedCheckGateConfig,\n startTime: number,\n ): GateResult {\n const base = {\n jobId,\n duration: Date.now() - startTime,\n command,\n workingDirectory,\n fixInstructions: config.fixInstructionsContent,\n fixWithSkill: config.fixWithSkill,\n };\n\n if (err.signal === 'SIGTERM' && config.timeout) {\n return {\n ...base,\n status: 'fail',\n message: `Timed out after ${config.timeout}s`,\n };\n }\n if (typeof err.code === 'number') {\n return {\n ...base,\n status: 'fail',\n message: `Exited with code ${err.code}`,\n };\n }\n return {\n ...base,\n status: 'error',\n message: err.message || 'Unknown error',\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",
|
|
18
|
-
"import { type ChildProcess, spawn } from 'node:child_process';\nimport type { FileHandle } from 'node:fs/promises';\nimport fs from 'node:fs/promises';\n\nexport interface CLIAdapterHealth {\n available: boolean;\n status: 'healthy' | 'missing' | 'unhealthy';\n message?: string;\n}\n\n/**\n * Collects stderr from a child process and returns a getter for the accumulated output.\n * Also forwards each chunk to the optional onOutput callback.\n */\nexport function collectStderr(\n child: ChildProcess,\n onOutput?: (text: string) => void,\n): () => string {\n const chunks: string[] = [];\n child.stderr?.on('data', (data: Buffer) => {\n const text = data.toString();\n chunks.push(text);\n onOutput?.(text);\n });\n return () => chunks.join('');\n}\n\n/**\n * Builds an Error for a non-zero process exit, including stdout and stderr if available.\n * Both stdout and stderr are included to ensure usage limit messages are captured\n * regardless of which stream the CLI writes them to.\n */\nexport function processExitError(\n code: number | null,\n getStderr: () => string,\n getStdout?: () => string,\n): Error {\n const stderr = getStderr();\n const stdout = getStdout?.() ?? '';\n const output = [stdout, stderr].filter(Boolean).join('\\n');\n return new Error(\n `Process exited with code ${code}${output ? `\\n${output}` : ''}`,\n );\n}\n\nexport async function runStreamingCommand(opts: {\n command: string;\n args: string[];\n tmpFile: string;\n timeoutMs?: number;\n onOutput?: (chunk: string) => void;\n cleanup: () => Promise<void>;\n env?: NodeJS.ProcessEnv;\n}): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: string[] = [];\n const inputStream = fs.open(opts.tmpFile, 'r').then((handle) => {\n const stream = handle.createReadStream();\n return { stream, handle };\n });\n\n inputStream\n .then(({ stream, handle }) => {\n const child = spawn(opts.command, opts.args, {\n stdio: ['pipe', 'pipe', 'pipe'],\n env: opts.env,\n });\n\n stream.pipe(child.stdin);\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n if (opts.timeoutMs) {\n timeoutId = setTimeout(() => {\n child.kill('SIGTERM');\n reject(new Error('Command timed out'));\n }, opts.timeoutMs);\n }\n\n child.stdout.on('data', (data: Buffer) => {\n const chunk = data.toString();\n chunks.push(chunk);\n opts.onOutput?.(chunk);\n });\n\n const getStderr = collectStderr(child, opts.onOutput);\n\n child.on('close', (code) => {\n void finalizeProcessClose({\n code,\n timeoutId,\n handle,\n cleanup: opts.cleanup,\n chunks,\n getStderr,\n resolve,\n reject,\n });\n });\n\n child.on('error', async (err) => {\n if (timeoutId) clearTimeout(timeoutId);\n try {\n await handle.close();\n } catch {\n /* ignore */\n }\n try {\n await opts.cleanup();\n } catch {\n /* ignore */\n }\n reject(err);\n });\n })\n .catch(async (err) => {\n try {\n await opts.cleanup();\n } catch {\n /* ignore */\n }\n reject(err);\n });\n });\n}\n\nexport async function finalizeProcessClose(opts: {\n code: number | null;\n timeoutId?: ReturnType<typeof setTimeout>;\n handle: FileHandle;\n cleanup: () => Promise<void>;\n chunks: string[];\n getStderr: () => string;\n resolve: (value: string) => void;\n reject: (error: Error) => void;\n}): Promise<void> {\n if (opts.timeoutId) clearTimeout(opts.timeoutId);\n await opts.handle.close().catch(() => {});\n try {\n await opts.cleanup();\n } catch {\n /* ignore cleanup errors during finalization */\n }\n\n if (opts.code === 0 || opts.code === null) {\n opts.resolve(opts.chunks.join(''));\n } else {\n opts.reject(\n processExitError(opts.code, opts.getStderr, () => opts.chunks.join('')),\n );\n }\n}\n\nexport function isUsageLimit(output: string): boolean {\n const lower = output.toLowerCase();\n return (\n lower.includes('usage limit') ||\n lower.includes('quota exceeded') ||\n lower.includes('quota will reset') ||\n lower.includes('credit balance is too low') ||\n lower.includes('out of extra usage') ||\n lower.includes('out of usage')\n );\n}\n\nexport interface CLIAdapter {\n name: string;\n isAvailable(): Promise<boolean>;\n checkHealth(): Promise<CLIAdapterHealth>;\n execute(opts: {\n prompt: string;\n diff: string;\n model?: string;\n timeoutMs?: number;\n /** Optional callback for real-time output streaming */\n onOutput?: (chunk: string) => void;\n /** Whether to allow tool use for this adapter. Defaults to true. */\n allowToolUse?: boolean;\n /** Thinking budget level (off/low/medium/high). */\n thinkingBudget?: string;\n }): Promise<string>;\n /**\n * Returns the project-scoped command directory path (relative to project root).\n * Returns null if the CLI only supports user-level commands.\n */\n getProjectCommandDir(): string | null;\n /**\n * Returns the user-level command directory path (absolute path).\n * Returns null if the CLI doesn't support user-level commands.\n */\n getUserCommandDir(): string | null;\n /**\n * Returns the project-scoped skill directory path (relative to project root).\n * Returns null if the CLI doesn't support the skills model.\n */\n getProjectSkillDir(): string | null;\n /**\n * Returns the user-level skill directory path (absolute path).\n * Returns null if the CLI doesn't support the skills model.\n */\n getUserSkillDir(): string | null;\n /**\n * Returns the command file extension used by this CLI.\n */\n getCommandExtension(): string;\n /**\n * Returns true if this adapter can use symlinks (same format as source Markdown).\n */\n canUseSymlink(): boolean;\n /**\n * Transforms gauntlet command content to this CLI's format.\n * The source content is always Markdown with YAML frontmatter.\n */\n transformCommand(markdownContent: string): string;\n /**\n * Returns true if this CLI supports hooks (stop hook, start hook).\n */\n supportsHooks(): boolean;\n}\n",
|
|
19
|
-
"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 { GAUNTLET_STOP_HOOK_ACTIVE_ENV } from '../commands/stop-hook.js';\nimport { MAX_BUFFER_BYTES } from '../constants.js';\nimport { getDebugLogger } from '../utils/debug-log.js';\nimport { type CLIAdapter, runStreamingCommand } from './shared.js';\nimport { CLAUDE_THINKING_TOKENS } from './thinking-budget.js';\n\nconst execAsync = promisify(exec);\n\n// ─── OTel Usage Types ────────────────────────────────────────────────────────\n\ninterface OtelUsage {\n cost?: number;\n input?: number;\n output?: number;\n cacheRead?: number;\n cacheCreation?: number;\n toolCalls?: number;\n toolContentBytes?: number;\n apiRequests?: number;\n}\n\n// ─── O(n) Line-Based OTel Block Scanner ──────────────────────────────────────\n// Replaces regex-based block detection to avoid catastrophic backtracking\n// on large outputs (~400KB+). Single-pass, string-aware brace tracking.\n\nexport interface ScanResult {\n metricBlocks: string[];\n logBlocks: string[];\n cleaned: string;\n}\n\n/** Strip backslash-escaped characters and quoted strings, then count net brace depth. */\nexport function countBraceChange(line: string): number {\n // Remove escaped characters, then quoted strings, leaving only structural chars\n const stripped = line\n .replace(/\\\\./g, '')\n .replace(/\"[^\"]*\"/g, '')\n .replace(/'[^']*'/g, '');\n let depth = 0;\n for (const ch of stripped) {\n if (ch === '{') depth++;\n else if (ch === '}') depth--;\n }\n return depth;\n}\n\n/** Classify a captured block as metric, log, or neither. */\nexport function classifyBlock(block: string): 'metric' | 'log' | 'other' {\n if (\n block.includes('descriptor:') &&\n block.includes('dataPointType:') &&\n block.includes('dataPoints:')\n ) {\n return 'metric';\n }\n if (\n block.includes('resource:') &&\n /body:\\s*['\"]claude_code\\.\\w+['\"]/.test(block)\n ) {\n return 'log';\n }\n return 'other';\n}\n\n/** Check if a line starts a brace block (standalone `{` or `[otel] {`). */\nfunction isBlockStart(line: string): boolean {\n const trimmed = line.trimStart();\n return (\n trimmed === '{' || (trimmed.startsWith('[otel]') && trimmed.includes('{'))\n );\n}\n\n/** Route a completed block into the correct bucket. */\nfunction routeBlock(\n blockLines: string[],\n metricBlocks: string[],\n logBlocks: string[],\n cleanedLines: string[],\n): void {\n const block = blockLines.join('\\n');\n const kind = classifyBlock(block);\n if (kind === 'metric') metricBlocks.push(block);\n else if (kind === 'log') logBlocks.push(block);\n else cleanedLines.push(...blockLines);\n}\n\n/**\n * Single-pass line scanner that extracts OTel metric and log blocks from raw output.\n * Returns classified blocks and cleaned output with OTel blocks removed.\n */\nexport function scanOtelBlocks(raw: string): ScanResult {\n const lines = raw.split('\\n');\n const metricBlocks: string[] = [];\n const logBlocks: string[] = [];\n const cleanedLines: string[] = [];\n\n let blockLines: string[] | null = null;\n let depth = 0;\n\n for (const line of lines) {\n if (blockLines === null) {\n if (!isBlockStart(line)) {\n cleanedLines.push(line);\n continue;\n }\n blockLines = [line];\n depth = countBraceChange(line);\n } else {\n blockLines.push(line);\n depth += countBraceChange(line);\n }\n\n if (depth <= 0) {\n routeBlock(blockLines, metricBlocks, logBlocks, cleanedLines);\n blockLines = null;\n depth = 0;\n }\n }\n\n // If block never closed, restore lines to avoid data loss\n if (blockLines !== null) {\n cleanedLines.push(...blockLines);\n }\n\n return { metricBlocks, logBlocks, cleaned: cleanedLines.join('\\n') };\n}\n\n// ─── Metric Parsing (unchanged) ─────────────────────────────────────────────\n\nconst TOKEN_TYPES = ['input', 'output', 'cacheRead', 'cacheCreation'] as const;\n\nfunction parseCostBlock(block: string): number | undefined {\n const match = block.match(/value:\\s*([\\d.]+)/);\n return match?.[1] ? Number.parseFloat(match[1]) : undefined;\n}\n\nfunction parseTokenBlock(block: string): Partial<OtelUsage> {\n const result: Partial<OtelUsage> = {};\n const re = /type:\\s*\"(\\w+)\"[\\s\\S]*?value:\\s*(\\d+)(?:,|\\s*\\})/g;\n for (const match of block.matchAll(re)) {\n const type = match[1] as (typeof TOKEN_TYPES)[number] | undefined;\n const value = match[2];\n if (!(type && value)) continue;\n if (TOKEN_TYPES.includes(type)) {\n result[type] = Number.parseInt(value, 10);\n }\n }\n return result;\n}\n\nfunction parseOtelMetrics(blocks: string[]): OtelUsage {\n const usage: OtelUsage = {};\n for (const block of blocks) {\n const nameMatch = block.match(/name:\\s*\"([^\"]+)\"/);\n if (!nameMatch) continue;\n\n if (nameMatch[1] === 'claude_code.cost.usage') {\n usage.cost = parseCostBlock(block);\n } else if (nameMatch[1] === 'claude_code.token.usage') {\n Object.assign(usage, parseTokenBlock(block));\n }\n }\n return usage;\n}\n\n// ─── Log Event Parsing ──────────────────────────────────────────────────────\n\n/** Pre-compiled regexes for extracting quoted attribute values from OTel log blocks. */\nconst OTEL_ATTR_RE = {\n body: /body:\\s*['\"]([^'\"]*)['\"]/,\n tool_result_size_bytes: /tool_result_size_bytes:\\s*['\"]([^'\"]*)['\"]/,\n input_tokens: /input_tokens:\\s*['\"]([^'\"]*)['\"]/,\n output_tokens: /output_tokens:\\s*['\"]([^'\"]*)['\"]/,\n cache_read_tokens: /cache_read_tokens:\\s*['\"]([^'\"]*)['\"]/,\n cache_creation_tokens: /cache_creation_tokens:\\s*['\"]([^'\"]*)['\"]/,\n cost_usd: /cost_usd:\\s*['\"]([^'\"]*)['\"]/,\n} as const;\n\n/** Maps OTel api_request attribute regexes to OtelUsage fields. */\nconst API_REQUEST_FIELDS: Array<[RegExp, keyof OtelUsage]> = [\n [OTEL_ATTR_RE.input_tokens, 'input'],\n [OTEL_ATTR_RE.output_tokens, 'output'],\n [OTEL_ATTR_RE.cache_read_tokens, 'cacheRead'],\n [OTEL_ATTR_RE.cache_creation_tokens, 'cacheCreation'],\n [OTEL_ATTR_RE.cost_usd, 'cost'],\n];\n\n/** Accumulate a tool_result log block into usage. */\nfunction accumulateToolResult(block: string, usage: OtelUsage): void {\n usage.toolCalls = (usage.toolCalls || 0) + 1;\n const bytes = block.match(OTEL_ATTR_RE.tool_result_size_bytes)?.[1];\n if (bytes !== undefined) {\n usage.toolContentBytes = (usage.toolContentBytes || 0) + Number(bytes);\n }\n}\n\n/** Accumulate an api_request log block into usage. */\nfunction accumulateApiRequest(block: string, usage: OtelUsage): void {\n usage.apiRequests = (usage.apiRequests || 0) + 1;\n for (const [re, field] of API_REQUEST_FIELDS) {\n const val = block.match(re)?.[1];\n if (val !== undefined) {\n usage[field] = (usage[field] || 0) + Number(val);\n }\n }\n}\n\n// ─── OTel Summary Formatting ────────────────────────────────────────────────\n\nconst OTEL_SUMMARY_FIELDS: Array<[keyof OtelUsage, string]> = [\n ['input', 'in'],\n ['output', 'out'],\n ['cacheRead', 'cacheRead'],\n ['cacheCreation', 'cacheWrite'],\n ['toolCalls', 'tool_calls'],\n ['toolContentBytes', 'tool_content_bytes'],\n ['apiRequests', 'api_requests'],\n];\n\nfunction formatOtelSummary(usage: OtelUsage): string | null {\n if (usage.cost === undefined && usage.input === undefined) return null;\n\n const parts: string[] = [];\n if (usage.cost !== undefined) parts.push(`cost=$${usage.cost.toFixed(4)}`);\n for (const [key, label] of OTEL_SUMMARY_FIELDS) {\n if (usage[key] !== undefined) parts.push(`${label}=${usage[key]}`);\n }\n\n return `[otel] ${parts.join(' ')}`;\n}\n\n// ─── Main Extraction (uses scanner instead of regexes) ──────────────────────\n\nexport function extractOtelMetrics(\n raw: string,\n onLog?: (msg: string) => void,\n): string {\n const { metricBlocks, logBlocks, cleaned } = scanOtelBlocks(raw);\n\n const usage = metricBlocks.length > 0 ? parseOtelMetrics(metricBlocks) : {};\n\n // Process log blocks for tool call and API request counts\n for (const block of logBlocks) {\n const body = block.match(OTEL_ATTR_RE.body)?.[1];\n if (body === 'claude_code.tool_result') {\n accumulateToolResult(block, usage);\n } else if (body === 'claude_code.api_request') {\n accumulateApiRequest(block, usage);\n }\n }\n\n const summary = formatOtelSummary(usage);\n if (summary) {\n onLog?.(`\\n${summary}\\n`);\n process.stderr.write(`${summary}\\n`);\n getDebugLogger()?.logTelemetry({ adapter: 'claude', summary });\n }\n\n return cleaned.trimEnd();\n}\n\n/** Safety wrapper: catches exceptions and returns raw output with a warning. */\nfunction safeExtractOtelMetrics(\n raw: string,\n onLog?: (msg: string) => void,\n): string {\n try {\n return extractOtelMetrics(raw, onLog);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n process.stderr.write(`[gauntlet] OTel extraction failed: ${msg}\\n`);\n return raw;\n }\n}\n\n// ─── OTel Environment ───────────────────────────────────────────────────────\n\n/** Build OTel environment overrides for console export. */\nfunction buildOtelEnv(): Record<string, string> {\n const env: Record<string, string> = {};\n if (!process.env.CLAUDE_CODE_ENABLE_TELEMETRY) {\n env.CLAUDE_CODE_ENABLE_TELEMETRY = '1';\n }\n if (!process.env.OTEL_METRICS_EXPORTER) {\n env.OTEL_METRICS_EXPORTER = 'console';\n }\n if (!process.env.OTEL_LOGS_EXPORTER) {\n env.OTEL_LOGS_EXPORTER = 'console';\n }\n return env;\n}\n\n// ─── Adapter ────────────────────────────────────────────────────────────────\n\nconst POST_PROCESS_BUFFER_MS = 30_000;\n\nexport class ClaudeAdapter implements CLIAdapter {\n name = 'claude';\n\n async isAvailable(): Promise<boolean> {\n try {\n await execAsync('which claude');\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 return '.claude/commands';\n }\n\n getUserCommandDir(): string | null {\n return path.join(os.homedir(), '.claude', 'commands');\n }\n\n getProjectSkillDir(): string | null {\n return '.claude/skills';\n }\n\n getUserSkillDir(): string | null {\n return path.join(os.homedir(), '.claude', 'skills');\n }\n\n getCommandExtension(): string {\n return '.md';\n }\n\n canUseSymlink(): boolean {\n return true;\n }\n\n transformCommand(markdownContent: string): string {\n return markdownContent;\n }\n\n supportsHooks(): boolean {\n return true;\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 totalTimeout = (opts.timeoutMs ?? 300_000) + POST_PROCESS_BUFFER_MS;\n let timer: ReturnType<typeof setTimeout>;\n return Promise.race([\n this.doExecute(opts).finally(() => clearTimeout(timer)),\n new Promise<never>((_, reject) => {\n timer = setTimeout(\n () =>\n reject(\n new Error(\n 'Adapter execution timed out (post-processing exceeded limit)',\n ),\n ),\n totalTimeout,\n );\n }),\n ]);\n }\n\n private async doExecute(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 tmpFile = path.join(\n os.tmpdir(),\n `gauntlet-claude-${process.pid}-${Date.now()}.txt`,\n );\n await fs.writeFile(tmpFile, fullContent);\n\n const args = ['-p'];\n // Task is always allowed so Claude can dispatch pr-review-toolkit\n // subagents. allow_tool_use only controls file-reading tools\n // (Read, Glob, Grep) which increase token usage without improving\n // review quality.\n if (opts.allowToolUse === false) {\n args.push('--allowedTools', 'Task');\n } else {\n args.push('--allowedTools', 'Read,Glob,Grep,Task');\n }\n args.push('--max-turns', '25');\n\n const otelEnv = buildOtelEnv();\n const thinkingEnv: Record<string, string> = {};\n if (opts.thinkingBudget && opts.thinkingBudget in CLAUDE_THINKING_TOKENS) {\n thinkingEnv.MAX_THINKING_TOKENS = String(\n CLAUDE_THINKING_TOKENS[opts.thinkingBudget],\n );\n }\n\n const cleanup = () => fs.unlink(tmpFile).catch(() => {});\n // Exclude CLAUDECODE so the child doesn't hit the nesting guard\n const { CLAUDECODE: _, ...parentEnv } = process.env;\n const execEnv = {\n ...parentEnv,\n [GAUNTLET_STOP_HOOK_ACTIVE_ENV]: '1',\n ...otelEnv,\n ...thinkingEnv,\n };\n\n if (opts.onOutput) {\n const raw = await runStreamingCommand({\n command: 'claude',\n args,\n tmpFile,\n timeoutMs: opts.timeoutMs,\n cleanup,\n env: execEnv,\n });\n const cleaned = safeExtractOtelMetrics(raw, opts.onOutput);\n opts.onOutput(cleaned);\n return cleaned;\n }\n\n try {\n const cmd = `cat \"${tmpFile}\" | claude ${args.map((a) => (a === '' ? '\"\"' : a)).join(' ')}`;\n const { stdout } = await execAsync(cmd, {\n timeout: opts.timeoutMs,\n maxBuffer: MAX_BUFFER_BYTES,\n env: execEnv,\n });\n return safeExtractOtelMetrics(stdout);\n } finally {\n await cleanup();\n }\n }\n}\n",
|
|
18
|
+
"import { type ChildProcess, spawn } from 'node:child_process';\nimport type { FileHandle } from 'node:fs/promises';\nimport fs from 'node:fs/promises';\n\nexport interface CLIAdapterHealth {\n available: boolean;\n status: 'healthy' | 'missing' | 'unhealthy';\n message?: string;\n}\n\n/**\n * Collects stderr from a child process and returns a getter for the accumulated output.\n * Also forwards each chunk to the optional onOutput callback.\n */\nexport function collectStderr(\n child: ChildProcess,\n onOutput?: (text: string) => void,\n): () => string {\n const chunks: string[] = [];\n child.stderr?.on('data', (data: Buffer) => {\n const text = data.toString();\n chunks.push(text);\n onOutput?.(text);\n });\n return () => chunks.join('');\n}\n\n/**\n * Builds an Error for a non-zero process exit, including stdout and stderr if available.\n * Both stdout and stderr are included to ensure usage limit messages are captured\n * regardless of which stream the CLI writes them to.\n */\nexport function processExitError(\n code: number | null,\n getStderr: () => string,\n getStdout?: () => string,\n): Error {\n const stderr = getStderr();\n const stdout = getStdout?.() ?? '';\n const output = [stdout, stderr].filter(Boolean).join('\\n');\n return new Error(\n `Process exited with code ${code}${output ? `\\n${output}` : ''}`,\n );\n}\n\nexport async function runStreamingCommand(opts: {\n command: string;\n args: string[];\n tmpFile: string;\n timeoutMs?: number;\n onOutput?: (chunk: string) => void;\n cleanup: () => Promise<void>;\n env?: NodeJS.ProcessEnv;\n}): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: string[] = [];\n const inputStream = fs.open(opts.tmpFile, 'r').then((handle) => {\n const stream = handle.createReadStream();\n return { stream, handle };\n });\n\n inputStream\n .then(({ stream, handle }) => {\n const child = spawn(opts.command, opts.args, {\n stdio: ['pipe', 'pipe', 'pipe'],\n env: opts.env,\n });\n\n stream.pipe(child.stdin);\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n if (opts.timeoutMs) {\n timeoutId = setTimeout(() => {\n child.kill('SIGTERM');\n reject(new Error('Command timed out'));\n }, opts.timeoutMs);\n }\n\n child.stdout.on('data', (data: Buffer) => {\n const chunk = data.toString();\n chunks.push(chunk);\n opts.onOutput?.(chunk);\n });\n\n const getStderr = collectStderr(child, opts.onOutput);\n\n child.on('close', (code) => {\n void finalizeProcessClose({\n code,\n timeoutId,\n handle,\n cleanup: opts.cleanup,\n chunks,\n getStderr,\n resolve,\n reject,\n });\n });\n\n child.on('error', async (err) => {\n if (timeoutId) clearTimeout(timeoutId);\n try {\n await handle.close();\n } catch {\n /* ignore */\n }\n try {\n await opts.cleanup();\n } catch {\n /* ignore */\n }\n reject(err);\n });\n })\n .catch(async (err) => {\n try {\n await opts.cleanup();\n } catch {\n /* ignore */\n }\n reject(err);\n });\n });\n}\n\nexport async function finalizeProcessClose(opts: {\n code: number | null;\n timeoutId?: ReturnType<typeof setTimeout>;\n handle: FileHandle;\n cleanup: () => Promise<void>;\n chunks: string[];\n getStderr: () => string;\n resolve: (value: string) => void;\n reject: (error: Error) => void;\n}): Promise<void> {\n if (opts.timeoutId) clearTimeout(opts.timeoutId);\n await opts.handle.close().catch(() => {});\n try {\n await opts.cleanup();\n } catch {\n /* ignore cleanup errors during finalization */\n }\n\n if (opts.code === 0 || opts.code === null) {\n opts.resolve(opts.chunks.join(''));\n } else {\n opts.reject(\n processExitError(opts.code, opts.getStderr, () => opts.chunks.join('')),\n );\n }\n}\n\nexport function isUsageLimit(output: string): boolean {\n const lower = output.toLowerCase();\n return (\n lower.includes('usage limit') ||\n lower.includes('quota exceeded') ||\n lower.includes('quota will reset') ||\n lower.includes('credit balance is too low') ||\n lower.includes('out of extra usage') ||\n lower.includes('out of usage')\n );\n}\n\nexport interface CLIAdapter {\n name: string;\n isAvailable(): Promise<boolean>;\n checkHealth(): Promise<CLIAdapterHealth>;\n execute(opts: {\n prompt: string;\n diff: string;\n model?: string;\n timeoutMs?: number;\n /** Optional callback for real-time output streaming */\n onOutput?: (chunk: string) => void;\n /** Whether to allow tool use for this adapter. Defaults to true. */\n allowToolUse?: boolean;\n /** Thinking budget level (off/low/medium/high). */\n thinkingBudget?: string;\n }): Promise<string>;\n /**\n * Returns the project-scoped command directory path (relative to project root).\n * Returns null if the CLI only supports user-level commands.\n */\n getProjectCommandDir(): string | null;\n /**\n * Returns the user-level command directory path (absolute path).\n * Returns null if the CLI doesn't support user-level commands.\n */\n getUserCommandDir(): string | null;\n /**\n * Returns the project-scoped skill directory path (relative to project root).\n * Returns null if the CLI doesn't support the skills model.\n */\n getProjectSkillDir(): string | null;\n /**\n * Returns the user-level skill directory path (absolute path).\n * Returns null if the CLI doesn't support the skills model.\n */\n getUserSkillDir(): string | null;\n /**\n * Returns the command file extension used by this CLI.\n */\n getCommandExtension(): string;\n /**\n * Returns true if this adapter can use symlinks (same format as source Markdown).\n */\n canUseSymlink(): boolean;\n /**\n * Transforms gauntlet command content to this CLI's format.\n * The source content is always Markdown with YAML frontmatter.\n */\n transformCommand(markdownContent: string): string;\n /**\n * Returns true if this CLI supports hooks (stop hook, start hook).\n */\n supportsHooks(): boolean;\n /**\n * Detect if the plugin is already installed.\n * Returns 'user' or 'project' scope if found, null otherwise.\n */\n detectPlugin?(projectRoot: string): Promise<'user' | 'project' | null>;\n /**\n * Install the plugin at the given scope.\n */\n installPlugin?(\n scope: 'user' | 'project',\n projectRoot?: string,\n ): Promise<{ success: boolean; error?: string }>;\n /**\n * Update the plugin at the given scope (re-copy assets, always overwrite).\n * Same signature as installPlugin.\n */\n updatePlugin?(\n scope: 'user' | 'project',\n projectRoot?: string,\n ): Promise<{ success: boolean; error?: string }>;\n /**\n * Get manual installation instructions for when automatic install fails.\n */\n getManualInstallInstructions?(scope: 'user' | 'project'): string[];\n}\n",
|
|
19
|
+
"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 { GAUNTLET_STOP_HOOK_ACTIVE_ENV } from '../commands/stop-hook.js';\nimport { MAX_BUFFER_BYTES } from '../constants.js';\nimport {\n addMarketplace,\n installPlugin as installPluginCli,\n listPlugins,\n} from '../plugin/claude-cli.js';\nimport { buildOtelEnv, safeExtractOtelMetrics } from './claude-otel.js';\nimport { type CLIAdapter, runStreamingCommand } from './shared.js';\nimport { CLAUDE_THINKING_TOKENS } from './thinking-budget.js';\n\nconst execAsync = promisify(exec);\n\n// Re-export OTel functions for consumers that import from claude.ts\nexport {\n classifyBlock,\n countBraceChange,\n extractOtelMetrics,\n type ScanResult,\n scanOtelBlocks,\n} from './claude-otel.js';\n\nconst POST_PROCESS_BUFFER_MS = 30_000;\n\nexport class ClaudeAdapter implements CLIAdapter {\n name = 'claude';\n\n async isAvailable(): Promise<boolean> {\n try {\n await execAsync('which claude');\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 return '.claude/commands';\n }\n\n getUserCommandDir(): string | null {\n return path.join(os.homedir(), '.claude', 'commands');\n }\n\n getProjectSkillDir(): string | null {\n return '.claude/skills';\n }\n\n getUserSkillDir(): string | null {\n return path.join(os.homedir(), '.claude', 'skills');\n }\n\n getCommandExtension(): string {\n return '.md';\n }\n\n canUseSymlink(): boolean {\n return true;\n }\n\n transformCommand(markdownContent: string): string {\n return markdownContent;\n }\n\n supportsHooks(): boolean {\n return true;\n }\n\n async detectPlugin(projectRoot: string): Promise<'user' | 'project' | null> {\n try {\n const entries = await listPlugins();\n const pluginEntries = entries.filter((entry) => {\n const e = entry as { name?: unknown; id?: unknown };\n const name = e.name ?? e.id;\n return (\n name === 'agent-gauntlet' ||\n (typeof name === 'string' && name.startsWith('agent-gauntlet@'))\n );\n });\n const resolved = path.resolve(projectRoot);\n if (\n pluginEntries.some((entry) => {\n const e = entry as { scope?: unknown; projectPath?: unknown };\n return (\n e.scope === 'project' &&\n typeof e.projectPath === 'string' &&\n path.resolve(e.projectPath) === resolved\n );\n })\n ) {\n return 'project';\n }\n if (\n pluginEntries.some(\n (entry) => (entry as { scope?: unknown }).scope === 'user',\n )\n ) {\n return 'user';\n }\n } catch {\n // Claude CLI not available or plugin list failed\n }\n return null;\n }\n\n async installPlugin(\n scope: 'user' | 'project',\n _projectRoot?: string,\n ): Promise<{ success: boolean; error?: string }> {\n const addResult = await addMarketplace();\n if (!addResult.success) {\n return { success: false, error: addResult.stderr };\n }\n\n const installResult = await installPluginCli(scope);\n if (!installResult.success) {\n return { success: false, error: installResult.stderr };\n }\n\n return { success: true };\n }\n\n getManualInstallInstructions(scope: 'user' | 'project'): string[] {\n return [\n 'claude plugin marketplace add pcaplan/agent-gauntlet',\n `claude plugin install agent-gauntlet --scope ${scope}`,\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 allowToolUse?: boolean;\n thinkingBudget?: string;\n }): Promise<string> {\n const totalTimeout = (opts.timeoutMs ?? 300_000) + POST_PROCESS_BUFFER_MS;\n let timer: ReturnType<typeof setTimeout>;\n return Promise.race([\n this.doExecute(opts).finally(() => clearTimeout(timer)),\n new Promise<never>((_, reject) => {\n timer = setTimeout(\n () =>\n reject(\n new Error(\n 'Adapter execution timed out (post-processing exceeded limit)',\n ),\n ),\n totalTimeout,\n );\n }),\n ]);\n }\n\n private async doExecute(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 tmpFile = path.join(\n os.tmpdir(),\n `gauntlet-claude-${process.pid}-${Date.now()}.txt`,\n );\n await fs.writeFile(tmpFile, fullContent);\n\n const args = ['-p'];\n // Task is always allowed so Claude can dispatch pr-review-toolkit\n // subagents. allow_tool_use only controls file-reading tools\n // (Read, Glob, Grep) which increase token usage without improving\n // review quality.\n if (opts.allowToolUse === false) {\n args.push('--allowedTools', 'Task');\n } else {\n args.push('--allowedTools', 'Read,Glob,Grep,Task');\n }\n args.push('--max-turns', '25');\n\n const otelEnv = buildOtelEnv();\n const thinkingEnv: Record<string, string> = {};\n if (opts.thinkingBudget && opts.thinkingBudget in CLAUDE_THINKING_TOKENS) {\n thinkingEnv.MAX_THINKING_TOKENS = String(\n CLAUDE_THINKING_TOKENS[opts.thinkingBudget],\n );\n }\n\n const cleanup = () => fs.unlink(tmpFile).catch(() => {});\n // Exclude CLAUDECODE so the child doesn't hit the nesting guard\n const { CLAUDECODE: _, ...parentEnv } = process.env;\n const execEnv = {\n ...parentEnv,\n [GAUNTLET_STOP_HOOK_ACTIVE_ENV]: '1',\n ...otelEnv,\n ...thinkingEnv,\n };\n\n if (opts.onOutput) {\n const raw = await runStreamingCommand({\n command: 'claude',\n args,\n tmpFile,\n timeoutMs: opts.timeoutMs,\n cleanup,\n env: execEnv,\n });\n const cleaned = safeExtractOtelMetrics(raw, opts.onOutput);\n opts.onOutput(cleaned);\n return cleaned;\n }\n\n try {\n const cmd = `cat \"${tmpFile}\" | claude ${args.map((a) => (a === '' ? '\"\"' : a)).join(' ')}`;\n const { stdout } = await execAsync(cmd, {\n timeout: opts.timeoutMs,\n maxBuffer: MAX_BUFFER_BYTES,\n env: execEnv,\n });\n return safeExtractOtelMetrics(stdout);\n } finally {\n await cleanup();\n }\n }\n}\n",
|
|
20
20
|
"import fsSync from 'node:fs';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { Command } from 'commander';\nimport { loadGlobalConfig } from '../config/global.js';\nimport { ClaudeStopHookAdapter } from '../hooks/adapters/claude-stop-hook.js';\nimport { CursorStopHookAdapter } from '../hooks/adapters/cursor-stop-hook.js';\nimport type {\n StopHookAdapter,\n StopHookResult,\n} from '../hooks/adapters/types.js';\nimport {\n getDebugLogConfig,\n getLogDir,\n getStatusMessage,\n StopHookHandler,\n} from '../hooks/stop-hook-handler.js';\nimport {\n LOOP_THRESHOLD,\n recordBlockTimestamp,\n resetBlockTimestamps,\n} from '../hooks/stop-hook-state.js';\nimport {\n getCategoryLogger,\n initLogger,\n resetLogger,\n} from '../output/app-logger.js';\nimport {\n type GauntletStatus,\n isBlockingStatus,\n} from '../types/gauntlet-status.js';\nimport { DebugLogger, mergeDebugLogConfig } from '../utils/debug-log.js';\n\nconst STDIN_TIMEOUT_MS = 5000;\nexport const GAUNTLET_STOP_HOOK_ACTIVE_ENV = 'GAUNTLET_STOP_HOOK_ACTIVE';\n\nconst STOP_HOOK_MARKER_FILE = '.stop-hook-active';\nconst STOP_HOOK_TIMEOUT_MS = 5 * 60 * 1000;\nconst STALE_MARKER_MS = 10 * 60 * 1000;\nconst adapters: StopHookAdapter[] = [\n new CursorStopHookAdapter(),\n new ClaudeStopHookAdapter(),\n];\n\nasync function readStdin(): Promise<string> {\n return new Promise((resolve) => {\n let data = '';\n let resolved = false;\n\n const onEnd = () => cleanup(data.trim());\n const onError = () => cleanup('');\n\n const cleanup = (result: string) => {\n if (!resolved) {\n resolved = true;\n clearTimeout(timeout);\n process.stdin.removeListener('data', onData);\n process.stdin.removeListener('end', onEnd);\n process.stdin.removeListener('error', onError);\n resolve(result);\n }\n };\n\n const timeout = setTimeout(() => {\n cleanup(data.trim());\n }, STDIN_TIMEOUT_MS);\n\n const onData = (chunk: Buffer) => {\n data += chunk.toString();\n if (data.includes('\\n')) {\n cleanup(data.trim());\n }\n };\n\n process.stdin.on('data', onData);\n process.stdin.on('end', onEnd);\n process.stdin.on('error', onError);\n\n if (process.stdin.readableEnded) {\n cleanup(data.trim());\n }\n });\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await fs.stat(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction getStopHookLogger() {\n return getCategoryLogger('stop-hook');\n}\n\nfunction outputResult(adapter: StopHookAdapter, result: StopHookResult): void {\n console.log(adapter.formatOutput(result));\n}\n\nfunction createEarlyExitResult(\n status: GauntletStatus,\n options?: { intervalMinutes?: number; errorMessage?: string },\n): StopHookResult {\n return {\n status,\n shouldBlock: false,\n message: getStatusMessage(status, options),\n intervalMinutes: options?.intervalMinutes,\n };\n}\n\nasync function applyLoopDetection(\n result: StopHookResult,\n logDir: string,\n log: ReturnType<typeof getStopHookLogger>,\n debugLogger: DebugLogger | null,\n): Promise<StopHookResult> {\n if (!result.shouldBlock) {\n resetBlockTimestamps(logDir).catch(() => {});\n return result;\n }\n try {\n const timestamps = await recordBlockTimestamp(logDir);\n if (timestamps.length >= LOOP_THRESHOLD) {\n log.info(\n `Loop detected: ${timestamps.length} blocks within window — overriding to allow`,\n );\n await debugLogger?.logStopHook('allow', 'loop_detected');\n return {\n status: 'loop_detected',\n shouldBlock: false,\n message: getStatusMessage('loop_detected'),\n };\n }\n } catch (loopErr: unknown) {\n const errMsg = (loopErr as { message?: string }).message ?? 'unknown';\n log.warn(\n `Loop detection error: ${errMsg} — proceeding with original result`,\n );\n }\n return result;\n}\n\nexport function outputHookResponse(\n status: GauntletStatus,\n options?: {\n reason?: string;\n intervalMinutes?: number;\n errorMessage?: string;\n },\n): void {\n const claudeAdapter = new ClaudeStopHookAdapter();\n const shouldBlock = isBlockingStatus(status);\n const message = getStatusMessage(status, {\n intervalMinutes: options?.intervalMinutes,\n errorMessage: options?.errorMessage,\n });\n\n const result: StopHookResult = {\n status,\n shouldBlock,\n message,\n reason: options?.reason,\n intervalMinutes: options?.intervalMinutes,\n };\n\n console.log(claudeAdapter.formatOutput(result));\n}\n\nexport { getStatusMessage };\nexport type {\n GauntletStatus as StopHookStatus,\n StopHookResult as HookResponse,\n};\n\ninterface StopHookContext {\n adapter: StopHookAdapter;\n debugLogger: DebugLogger | null;\n loggerInitialized: boolean;\n markerFilePath: string | null;\n log: ReturnType<typeof getStopHookLogger>;\n}\n\nasync function initDebugLogger(\n logDir: string,\n projectCwd: string,\n log: ReturnType<typeof getStopHookLogger>,\n): Promise<DebugLogger | null> {\n try {\n const globalConfig = await loadGlobalConfig();\n const projectDebugLogConfig = await getDebugLogConfig(projectCwd);\n const debugLogConfig = mergeDebugLogConfig(\n projectDebugLogConfig,\n globalConfig.debug_log,\n );\n return new DebugLogger(logDir, debugLogConfig);\n } catch (initErr: unknown) {\n log.warn(\n `Debug logger init failed: ${(initErr as { message?: string }).message ?? 'unknown'}`,\n );\n return null;\n }\n}\n\nasync function checkMarkerFile(\n markerPath: string,\n debugLogger: DebugLogger | null,\n): Promise<StopHookResult | null> {\n if (!(await fileExists(markerPath))) return null;\n\n try {\n const stat = await fs.stat(markerPath);\n const ageMs = Date.now() - stat.mtimeMs;\n if (ageMs > STALE_MARKER_MS) {\n await debugLogger?.logStopHookEarlyExit(\n 'marker_stale',\n 'proceeding',\n `age=${Math.round(ageMs / 1000)}s threshold=${Math.round(STALE_MARKER_MS / 1000)}s`,\n );\n await fs.rm(markerPath, { force: true });\n return null;\n }\n await debugLogger?.logStopHookEarlyExit(\n 'marker_fresh',\n 'stop_hook_active',\n `age=${Math.round(ageMs / 1000)}s`,\n );\n return createEarlyExitResult('stop_hook_active');\n } catch (markerErr: unknown) {\n const errMsg = (markerErr as { message?: string }).message ?? 'unknown';\n await debugLogger?.logStopHookEarlyExit(\n 'marker_stat_error',\n 'stop_hook_active',\n `error=${errMsg}`,\n );\n return createEarlyExitResult('stop_hook_active');\n }\n}\n\n/** Diagnostic info captured early for later logging. */\ninterface StopHookDiagnostics {\n pid: number;\n ppid: number;\n envVarSet: boolean;\n processCwd: string;\n rawStdin: string;\n stdinSessionId: string | undefined;\n stdinStopHookActive: boolean | undefined;\n stdinCwd: string | undefined;\n stdinHookEventName: string | undefined;\n}\n\n/** Parse stdin input and populate diagnostics. Returns null on parse failure. */\nasync function parseStdinInput(\n ctx: StopHookContext,\n diagnostics: StopHookDiagnostics,\n): Promise<Record<string, unknown> | null> {\n const input = await readStdin();\n diagnostics.rawStdin = input;\n\n try {\n if (!input.trim()) return {};\n const parsed = JSON.parse(input) as Record<string, unknown>;\n diagnostics.stdinSessionId = parsed.session_id as string | undefined;\n diagnostics.stdinStopHookActive = parsed.stop_hook_active as\n | boolean\n | undefined;\n diagnostics.stdinCwd = parsed.cwd as string | undefined;\n diagnostics.stdinHookEventName = parsed.hook_event_name as\n | string\n | undefined;\n return parsed;\n } catch (parseErr: unknown) {\n const errMsg = (parseErr as { message?: string }).message ?? 'unknown';\n ctx.log.info(`Invalid hook input (${errMsg}), allowing stop`);\n await ctx.debugLogger?.logStopHookEarlyExit(\n 'stdin_parse_error',\n 'invalid_input',\n `error=${errMsg}`,\n );\n outputResult(ctx.adapter, createEarlyExitResult('invalid_input'));\n return null;\n }\n}\n\n/** Execute the gauntlet and produce a result. */\nasync function executeGauntlet(\n ctx: StopHookContext,\n projectCwd: string,\n logDir: string,\n diagnostics: StopHookDiagnostics,\n parsedInput: Record<string, unknown>,\n): Promise<void> {\n // biome-ignore lint/style/noNonNullAssertion: adapters array always has index 1\n ctx.adapter = adapters.find((a) => a.detect(parsedInput)) ?? adapters[1]!;\n const adapterCtx = ctx.adapter.parseInput(parsedInput);\n const skipResult = ctx.adapter.shouldSkipExecution(adapterCtx);\n if (skipResult) {\n await ctx.debugLogger?.logStopHookEarlyExit(\n 'adapter_skip',\n skipResult.status,\n `adapter=${ctx.adapter.name}`,\n );\n outputResult(ctx.adapter, skipResult);\n return;\n }\n\n ctx.log.info('Starting gauntlet validation...');\n if (adapterCtx.cwd !== process.cwd()) {\n const configPath = path.join(projectCwd, '.gauntlet', 'config.yml');\n if (!(await fileExists(configPath))) {\n ctx.log.info('No gauntlet config found at hook cwd, allowing stop');\n await ctx.debugLogger?.logStopHookEarlyExit(\n 'no_config_at_cwd',\n 'no_config',\n `cwd=${projectCwd}`,\n );\n outputResult(ctx.adapter, createEarlyExitResult('no_config'));\n return;\n }\n }\n\n await initLogger({ mode: 'stop-hook', logDir });\n ctx.loggerInitialized = true;\n const earlyLogDir = path.join(process.cwd(), await getLogDir(process.cwd()));\n if (logDir !== earlyLogDir) {\n ctx.debugLogger =\n (await initDebugLogger(logDir, projectCwd, ctx.log)) ?? ctx.debugLogger;\n }\n\n await ctx.debugLogger?.logStopHookDiagnostics(diagnostics);\n ctx.markerFilePath = path.join(logDir, STOP_HOOK_MARKER_FILE);\n try {\n await fs.writeFile(ctx.markerFilePath, `${process.pid}`, 'utf-8');\n } catch (mkErr: unknown) {\n const errMsg = (mkErr as { message?: string }).message ?? 'unknown';\n ctx.log.warn(`Failed to create marker file: ${errMsg}`);\n ctx.markerFilePath = null;\n }\n\n ctx.log.info('Running gauntlet gates...');\n const handler = new StopHookHandler(ctx.debugLogger ?? undefined);\n handler.setLogDir(logDir);\n let result: StopHookResult;\n try {\n result = await handler.execute(adapterCtx);\n } finally {\n await removeMarkerFile(ctx);\n }\n\n result = await applyLoopDetection(result, logDir, ctx.log, ctx.debugLogger);\n outputResult(ctx.adapter, result);\n await safeResetLogger(ctx);\n}\n\n/** Remove marker file if it exists. */\nasync function removeMarkerFile(ctx: StopHookContext): Promise<void> {\n if (!ctx.markerFilePath) return;\n try {\n await fs.rm(ctx.markerFilePath, { force: true });\n } catch (rmErr: unknown) {\n const errMsg = (rmErr as { message?: string }).message ?? 'unknown';\n ctx.log.warn(`Failed to remove marker file: ${errMsg}`);\n }\n ctx.markerFilePath = null;\n}\n\nasync function safeResetLogger(ctx: StopHookContext): Promise<void> {\n if (!ctx.loggerInitialized) return;\n try {\n await resetLogger();\n } catch (resetErr: unknown) {\n const resetMsg = (resetErr as { message?: string }).message ?? 'unknown';\n ctx.log.warn(`Logger reset failed: ${resetMsg}`);\n }\n}\n\n/** Handle errors in the stop hook action. */\nasync function handleStopHookError(\n ctx: StopHookContext,\n error: unknown,\n): Promise<void> {\n const err = error as { message?: string };\n const errorMessage = err.message || 'unknown error';\n ctx.log.error(`Stop hook error: ${errorMessage}`);\n await ctx.debugLogger?.logStopHook('allow', `error: ${errorMessage}`);\n outputResult(ctx.adapter, createEarlyExitResult('error', { errorMessage }));\n await removeMarkerFile(ctx);\n\n if (ctx.loggerInitialized) {\n try {\n await resetLogger();\n } catch (resetErr: unknown) {\n const resetMsg = (resetErr as { message?: string }).message ?? 'unknown';\n process.stderr.write(`stop-hook: logger reset failed: ${resetMsg}\\n`);\n }\n }\n}\n\nexport function registerStopHookCommand(program: Command): void {\n program\n .command('stop-hook')\n .description('Claude Code stop hook - validates gauntlet completion')\n .action(async () => {\n const ctx: StopHookContext = {\n adapter: adapters[1] as StopHookAdapter,\n debugLogger: null,\n loggerInitialized: false,\n markerFilePath: null,\n log: getStopHookLogger(),\n };\n\n const selfTimeout = setTimeout(() => {\n if (ctx.markerFilePath) {\n try {\n fsSync.rmSync(ctx.markerFilePath, { force: true });\n } catch {\n // Best-effort cleanup\n }\n }\n outputResult(\n ctx.adapter,\n createEarlyExitResult('error', {\n errorMessage: 'stop hook timed out',\n }),\n );\n process.exit(0);\n }, STOP_HOOK_TIMEOUT_MS);\n selfTimeout.unref();\n\n try {\n await handleStopHookAction(ctx);\n } catch (error: unknown) {\n await handleStopHookError(ctx, error);\n } finally {\n clearTimeout(selfTimeout);\n }\n });\n}\n\n/** Main stop-hook action logic, broken into phases. */\nasync function handleStopHookAction(ctx: StopHookContext): Promise<void> {\n // Phase 1: Fast exit checks\n if (process.env[GAUNTLET_STOP_HOOK_ACTIVE_ENV]) {\n outputResult(ctx.adapter, createEarlyExitResult('stop_hook_active'));\n return;\n }\n\n const quickConfigCheck = path.join(process.cwd(), '.gauntlet', 'config.yml');\n if (!(await fileExists(quickConfigCheck))) {\n outputResult(ctx.adapter, createEarlyExitResult('no_config'));\n return;\n }\n\n // Phase 2: Initialize debug logger\n const earlyLogDir = path.join(process.cwd(), await getLogDir(process.cwd()));\n ctx.debugLogger = await initDebugLogger(earlyLogDir, process.cwd(), ctx.log);\n await ctx.debugLogger?.logCommand('stop-hook', []);\n\n // Phase 3: Check marker file\n const markerLogDir = await getLogDir(process.cwd());\n const markerPath = path.join(\n process.cwd(),\n markerLogDir,\n STOP_HOOK_MARKER_FILE,\n );\n const markerResult = await checkMarkerFile(markerPath, ctx.debugLogger);\n if (markerResult) {\n outputResult(ctx.adapter, markerResult);\n return;\n }\n\n // Phase 4: Parse stdin\n const diagnostics: StopHookDiagnostics = {\n pid: process.pid,\n ppid: process.ppid,\n envVarSet: !!process.env[GAUNTLET_STOP_HOOK_ACTIVE_ENV],\n processCwd: process.cwd(),\n rawStdin: '',\n stdinSessionId: undefined,\n stdinStopHookActive: undefined,\n stdinCwd: undefined,\n stdinHookEventName: undefined,\n };\n\n const parsed = await parseStdinInput(ctx, diagnostics);\n if (parsed === null) return;\n const projectCwd = (parsed.cwd as string) || process.cwd();\n const logDir = path.join(projectCwd, await getLogDir(projectCwd));\n await executeGauntlet(ctx, projectCwd, logDir, diagnostics, parsed);\n}\n",
|
|
21
21
|
"import type {\n StopHookAdapter,\n StopHookContext,\n StopHookResult,\n} from './types.js';\n\n/**\n * Claude Code hook response format.\n */\ninterface ClaudeHookResponse {\n decision: 'block' | 'approve';\n reason?: string;\n stopReason?: string;\n systemMessage?: string;\n status: string;\n message?: string;\n}\n\n/**\n * Adapter for Claude Code stop hook protocol.\n *\n * Claude Code protocol:\n * - Input: { cwd, stop_hook_active, session_id, transcript_path, hook_event_name, permission_mode }\n * - Output: { decision: \"block\"|\"approve\", reason?, stopReason, systemMessage?, status, message }\n * - Block mechanism: decision: \"block\" with reason (fed back to Claude as prompt)\n * - Allow mechanism: decision: \"approve\"\n */\nexport class ClaudeStopHookAdapter implements StopHookAdapter {\n name = 'claude';\n\n /**\n * Detect if this adapter should handle the given input.\n * Claude Code doesn't send cursor_version, so we detect by absence.\n */\n detect(raw: Record<string, unknown>): boolean {\n // Claude Code doesn't send cursor_version\n return !('cursor_version' in raw);\n }\n\n /**\n * Parse Claude Code input into normalized context.\n */\n parseInput(raw: Record<string, unknown>): StopHookContext {\n return {\n cwd: (raw.cwd as string) ?? process.cwd(),\n isNestedHook: raw.stop_hook_active === true,\n sessionId: raw.session_id as string | undefined,\n rawInput: raw,\n };\n }\n\n /**\n * Get the block reason for a given result based on status.\n */\n private getBlockReason(result: StopHookResult): string | undefined {\n return result.reason;\n }\n\n /**\n * Format handler result into Claude Code protocol output.\n */\n formatOutput(result: StopHookResult): string {\n const blockReason = this.getBlockReason(result);\n const stopReason =\n result.shouldBlock && blockReason ? blockReason : result.message;\n\n const response: ClaudeHookResponse = {\n decision: result.shouldBlock ? 'block' : 'approve',\n status: result.status,\n };\n\n if (stopReason) response.stopReason = stopReason;\n if (result.message) {\n response.systemMessage = result.message;\n response.message = result.message;\n }\n if (result.shouldBlock && blockReason) {\n response.reason = blockReason;\n }\n\n return JSON.stringify(response);\n }\n\n /**\n * Check if execution should be skipped based on Claude-specific conditions.\n * Note: stop_hook_active from stdin is currently disabled in the main entry point\n * because Claude Code sends it after blocking twice, but we need to re-run.\n */\n shouldSkipExecution(_ctx: StopHookContext): StopHookResult | null {\n // The isNestedHook check is handled at the entry point level\n // via the marker file mechanism, not here.\n // This method is available for future protocol-specific skip conditions.\n return null;\n }\n}\n",
|
|
22
22
|
"import type {\n StopHookAdapter,\n StopHookContext,\n StopHookResult,\n} from './types.js';\n\n/**\n * Cursor hook response format.\n * - Empty object {} = allow stop (no feedback)\n * - { systemMessage: \"...\" } = allow stop with user-visible message\n * - { followup_message: \"...\" } = block stop and continue with message\n */\ninterface CursorHookResponse {\n followup_message?: string;\n systemMessage?: string;\n}\n\n/**\n * Default maximum loop count before allowing stop.\n * Cursor has built-in loop_limit (default 5, configurable in hooks.json),\n * but we provide defense-in-depth with our own check.\n */\nconst DEFAULT_MAX_LOOPS = 10;\n\n/**\n * Adapter for Cursor IDE stop hook protocol.\n *\n * Cursor protocol:\n * - Input: { status, loop_count, cursor_version, workspace_roots, conversation_id, ... }\n * - Output: { followup_message?: \"...\" } or {}\n * - Block mechanism: { followup_message: \"instructions\" } - continues agent with message\n * - Allow mechanism: {} (empty object) - allows stop\n * - Loop prevention: loop_count field (Cursor has built-in loop_limit)\n */\nexport class CursorStopHookAdapter implements StopHookAdapter {\n name = 'cursor';\n\n /**\n * Maximum loop count before forcing stop.\n * Can be configured via hooks.json loop_limit.\n */\n private maxLoops: number;\n\n constructor(maxLoops: number = DEFAULT_MAX_LOOPS) {\n this.maxLoops = maxLoops;\n }\n\n /**\n * Detect if this adapter should handle the given input.\n * Cursor sends cursor_version in hook input.\n */\n detect(raw: Record<string, unknown>): boolean {\n return 'cursor_version' in raw;\n }\n\n /**\n * Parse Cursor input into normalized context.\n */\n parseInput(raw: Record<string, unknown>): StopHookContext {\n const workspaceRoots = raw.workspace_roots;\n const loopCount = raw.loop_count as number | undefined;\n\n return {\n cwd:\n (Array.isArray(workspaceRoots) ? workspaceRoots[0] : null) ??\n process.cwd(),\n isNestedHook: false, // Cursor uses loop_count instead of nested hook flag\n loopCount,\n sessionId: raw.conversation_id as string | undefined,\n rawInput: raw,\n };\n }\n\n /**\n * Get the block message for a given result based on status.\n */\n private getBlockMessage(result: StopHookResult): string {\n return result.reason || result.message;\n }\n\n /**\n * Format handler result into Cursor protocol output.\n */\n formatOutput(result: StopHookResult): string {\n if (result.shouldBlock) {\n const response: CursorHookResponse = {\n followup_message: this.getBlockMessage(result),\n };\n return JSON.stringify(response);\n }\n\n // Include systemMessage for user feedback even when not blocking\n const response: CursorHookResponse = {\n ...(result.message ? { systemMessage: result.message } : {}),\n };\n return JSON.stringify(response);\n }\n\n /**\n * Check if execution should be skipped based on Cursor-specific conditions.\n * Returns early if loop_count exceeds threshold.\n */\n shouldSkipExecution(ctx: StopHookContext): StopHookResult | null {\n // Cursor has built-in loop_limit (default 5), but we can check here too\n // for defense-in-depth\n if (ctx.loopCount !== undefined && ctx.loopCount >= this.maxLoops) {\n return {\n status: 'retry_limit_exceeded',\n shouldBlock: false,\n message:\n 'Loop limit reached — run `agent-gauntlet clean` to archive and continue.',\n };\n }\n return null;\n }\n}\n",
|
|
@@ -27,10 +27,12 @@
|
|
|
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
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
|
-
"/**\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",
|
|
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 /** Plain-text report for --report flag (written to stdout by caller) */\n reportText?: string;\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
|
+
"import { execFileSync } from 'node:child_process';\n\nexport interface ClaudeCliResult {\n success: boolean;\n stderr?: string;\n}\n\ninterface ClaudeCommandResult {\n success: boolean;\n stdout?: string;\n stderr?: string;\n}\n\nfunction runClaudeCommand(args: string[]): ClaudeCommandResult {\n try {\n const stdout = execFileSync('claude', args, {\n encoding: 'utf-8',\n stdio: ['pipe', 'pipe', 'pipe'],\n timeout: 60_000,\n }) as string;\n return { success: true, stdout };\n } catch (error: unknown) {\n const err = error as NodeJS.ErrnoException & { stderr?: string | Buffer };\n let stderr = err.message;\n if (typeof err.stderr === 'string') {\n stderr = err.stderr;\n } else if (err.stderr instanceof Buffer) {\n stderr = err.stderr.toString('utf-8');\n }\n return { success: false, stderr: stderr.trim() };\n }\n}\n\nfunction runClaudePluginCommand(args: string[]): ClaudeCliResult {\n const result = runClaudeCommand(args);\n return {\n success: result.success,\n stderr: result.stderr,\n };\n}\n\nexport async function addMarketplace(): Promise<ClaudeCliResult> {\n return runClaudePluginCommand([\n 'plugin',\n 'marketplace',\n 'add',\n 'pcaplan/agent-gauntlet',\n ]);\n}\n\nexport async function installPlugin(\n scope: 'user' | 'project',\n): Promise<ClaudeCliResult> {\n return runClaudePluginCommand([\n 'plugin',\n 'install',\n 'agent-gauntlet',\n '--scope',\n scope,\n ]);\n}\n\nexport async function listPlugins(): Promise<unknown[]> {\n const result = runClaudeCommand(['plugin', 'list', '--json']);\n if (!result.success) {\n throw new Error(result.stderr ?? 'Failed to list Claude plugins');\n }\n\n try {\n const parsed = JSON.parse(result.stdout ?? '') as unknown;\n if (Array.isArray(parsed)) {\n return parsed;\n }\n return ((parsed as { plugins?: unknown[] })?.plugins ?? []) as unknown[];\n } catch {\n throw new Error('Failed to parse `claude plugin list --json` output');\n }\n}\n\nexport async function updateMarketplace(): Promise<ClaudeCliResult> {\n return runClaudePluginCommand([\n 'plugin',\n 'marketplace',\n 'update',\n 'agent-gauntlet',\n ]);\n}\n\nexport async function updatePlugin(): Promise<ClaudeCliResult> {\n return runClaudePluginCommand([\n 'plugin',\n 'update',\n 'agent-gauntlet@pcaplan/agent-gauntlet',\n ]);\n}\n",
|
|
32
|
+
"import { getDebugLogger } from '../utils/debug-log.js';\n\n// ─── OTel Usage Types ────────────────────────────────────────────────────────\n\ninterface OtelUsage {\n cost?: number;\n input?: number;\n output?: number;\n cacheRead?: number;\n cacheCreation?: number;\n toolCalls?: number;\n toolContentBytes?: number;\n apiRequests?: number;\n}\n\n// ─── O(n) Line-Based OTel Block Scanner ──────────────────────────────────────\n// Replaces regex-based block detection to avoid catastrophic backtracking\n// on large outputs (~400KB+). Single-pass, string-aware brace tracking.\n\nexport interface ScanResult {\n metricBlocks: string[];\n logBlocks: string[];\n cleaned: string;\n}\n\n/** Strip backslash-escaped characters and quoted strings, then count net brace depth. */\nexport function countBraceChange(line: string): number {\n // Remove escaped characters, then quoted strings, leaving only structural chars\n const stripped = line\n .replace(/\\\\./g, '')\n .replace(/\"[^\"]*\"/g, '')\n .replace(/'[^']*'/g, '');\n let depth = 0;\n for (const ch of stripped) {\n if (ch === '{') depth++;\n else if (ch === '}') depth--;\n }\n return depth;\n}\n\n/** Classify a captured block as metric, log, or neither. */\nexport function classifyBlock(block: string): 'metric' | 'log' | 'other' {\n if (\n block.includes('descriptor:') &&\n block.includes('dataPointType:') &&\n block.includes('dataPoints:')\n ) {\n return 'metric';\n }\n if (\n block.includes('resource:') &&\n /body:\\s*['\"]claude_code\\.\\w+['\"]/.test(block)\n ) {\n return 'log';\n }\n return 'other';\n}\n\n/** Check if a line starts a brace block (standalone `{` or `[otel] {`). */\nfunction isBlockStart(line: string): boolean {\n const trimmed = line.trimStart();\n return (\n trimmed === '{' || (trimmed.startsWith('[otel]') && trimmed.includes('{'))\n );\n}\n\n/** Route a completed block into the correct bucket. */\nfunction routeBlock(\n blockLines: string[],\n metricBlocks: string[],\n logBlocks: string[],\n cleanedLines: string[],\n): void {\n const block = blockLines.join('\\n');\n const kind = classifyBlock(block);\n if (kind === 'metric') metricBlocks.push(block);\n else if (kind === 'log') logBlocks.push(block);\n else cleanedLines.push(...blockLines);\n}\n\n/**\n * Single-pass line scanner that extracts OTel metric and log blocks from raw output.\n * Returns classified blocks and cleaned output with OTel blocks removed.\n */\nexport function scanOtelBlocks(raw: string): ScanResult {\n const lines = raw.split('\\n');\n const metricBlocks: string[] = [];\n const logBlocks: string[] = [];\n const cleanedLines: string[] = [];\n\n let blockLines: string[] | null = null;\n let depth = 0;\n\n for (const line of lines) {\n if (blockLines === null) {\n if (!isBlockStart(line)) {\n cleanedLines.push(line);\n continue;\n }\n blockLines = [line];\n depth = countBraceChange(line);\n } else {\n blockLines.push(line);\n depth += countBraceChange(line);\n }\n\n if (depth <= 0) {\n routeBlock(blockLines, metricBlocks, logBlocks, cleanedLines);\n blockLines = null;\n depth = 0;\n }\n }\n\n // If block never closed, restore lines to avoid data loss\n if (blockLines !== null) {\n cleanedLines.push(...blockLines);\n }\n\n return { metricBlocks, logBlocks, cleaned: cleanedLines.join('\\n') };\n}\n\n// ─── Metric Parsing (unchanged) ─────────────────────────────────────────────\n\nconst TOKEN_TYPES = ['input', 'output', 'cacheRead', 'cacheCreation'] as const;\n\nfunction parseCostBlock(block: string): number | undefined {\n const match = block.match(/value:\\s*([\\d.]+)/);\n return match?.[1] ? Number.parseFloat(match[1]) : undefined;\n}\n\nfunction parseTokenBlock(block: string): Partial<OtelUsage> {\n const result: Partial<OtelUsage> = {};\n const re = /type:\\s*\"(\\w+)\"[\\s\\S]*?value:\\s*(\\d+)(?:,|\\s*\\})/g;\n for (const match of block.matchAll(re)) {\n const type = match[1] as (typeof TOKEN_TYPES)[number] | undefined;\n const value = match[2];\n if (!(type && value)) continue;\n if (TOKEN_TYPES.includes(type)) {\n result[type] = Number.parseInt(value, 10);\n }\n }\n return result;\n}\n\nfunction parseOtelMetrics(blocks: string[]): OtelUsage {\n const usage: OtelUsage = {};\n for (const block of blocks) {\n const nameMatch = block.match(/name:\\s*\"([^\"]+)\"/);\n if (!nameMatch) continue;\n\n if (nameMatch[1] === 'claude_code.cost.usage') {\n usage.cost = parseCostBlock(block);\n } else if (nameMatch[1] === 'claude_code.token.usage') {\n Object.assign(usage, parseTokenBlock(block));\n }\n }\n return usage;\n}\n\n// ─── Log Event Parsing ──────────────────────────────────────────────────────\n\n/** Pre-compiled regexes for extracting quoted attribute values from OTel log blocks. */\nconst OTEL_ATTR_RE = {\n body: /body:\\s*['\"]([^'\"]*)['\"]/,\n tool_result_size_bytes: /tool_result_size_bytes:\\s*['\"]([^'\"]*)['\"]/,\n input_tokens: /input_tokens:\\s*['\"]([^'\"]*)['\"]/,\n output_tokens: /output_tokens:\\s*['\"]([^'\"]*)['\"]/,\n cache_read_tokens: /cache_read_tokens:\\s*['\"]([^'\"]*)['\"]/,\n cache_creation_tokens: /cache_creation_tokens:\\s*['\"]([^'\"]*)['\"]/,\n cost_usd: /cost_usd:\\s*['\"]([^'\"]*)['\"]/,\n} as const;\n\n/** Maps OTel api_request attribute regexes to OtelUsage fields. */\nconst API_REQUEST_FIELDS: Array<[RegExp, keyof OtelUsage]> = [\n [OTEL_ATTR_RE.input_tokens, 'input'],\n [OTEL_ATTR_RE.output_tokens, 'output'],\n [OTEL_ATTR_RE.cache_read_tokens, 'cacheRead'],\n [OTEL_ATTR_RE.cache_creation_tokens, 'cacheCreation'],\n [OTEL_ATTR_RE.cost_usd, 'cost'],\n];\n\n/** Accumulate a tool_result log block into usage. */\nfunction accumulateToolResult(block: string, usage: OtelUsage): void {\n usage.toolCalls = (usage.toolCalls || 0) + 1;\n const bytes = block.match(OTEL_ATTR_RE.tool_result_size_bytes)?.[1];\n if (bytes !== undefined) {\n usage.toolContentBytes = (usage.toolContentBytes || 0) + Number(bytes);\n }\n}\n\n/** Accumulate an api_request log block into usage. */\nfunction accumulateApiRequest(block: string, usage: OtelUsage): void {\n usage.apiRequests = (usage.apiRequests || 0) + 1;\n for (const [re, field] of API_REQUEST_FIELDS) {\n const val = block.match(re)?.[1];\n if (val !== undefined) {\n usage[field] = (usage[field] || 0) + Number(val);\n }\n }\n}\n\n// ─── OTel Summary Formatting ────────────────────────────────────────────────\n\nconst OTEL_SUMMARY_FIELDS: Array<[keyof OtelUsage, string]> = [\n ['input', 'in'],\n ['output', 'out'],\n ['cacheRead', 'cacheRead'],\n ['cacheCreation', 'cacheWrite'],\n ['toolCalls', 'tool_calls'],\n ['toolContentBytes', 'tool_content_bytes'],\n ['apiRequests', 'api_requests'],\n];\n\nfunction formatOtelSummary(usage: OtelUsage): string | null {\n if (usage.cost === undefined && usage.input === undefined) return null;\n\n const parts: string[] = [];\n if (usage.cost !== undefined) parts.push(`cost=$${usage.cost.toFixed(4)}`);\n for (const [key, label] of OTEL_SUMMARY_FIELDS) {\n if (usage[key] !== undefined) parts.push(`${label}=${usage[key]}`);\n }\n\n return `[otel] ${parts.join(' ')}`;\n}\n\n// ─── Main Extraction (uses scanner instead of regexes) ──────────────────────\n\nexport function extractOtelMetrics(\n raw: string,\n onLog?: (msg: string) => void,\n): string {\n const { metricBlocks, logBlocks, cleaned } = scanOtelBlocks(raw);\n\n const usage = metricBlocks.length > 0 ? parseOtelMetrics(metricBlocks) : {};\n\n // Process log blocks for tool call and API request counts\n for (const block of logBlocks) {\n const body = block.match(OTEL_ATTR_RE.body)?.[1];\n if (body === 'claude_code.tool_result') {\n accumulateToolResult(block, usage);\n } else if (body === 'claude_code.api_request') {\n accumulateApiRequest(block, usage);\n }\n }\n\n const summary = formatOtelSummary(usage);\n if (summary) {\n onLog?.(`\\n${summary}\\n`);\n process.stderr.write(`${summary}\\n`);\n getDebugLogger()?.logTelemetry({ adapter: 'claude', summary });\n }\n\n return cleaned.trimEnd();\n}\n\n/** Safety wrapper: catches exceptions and returns raw output with a warning. */\nexport function safeExtractOtelMetrics(\n raw: string,\n onLog?: (msg: string) => void,\n): string {\n try {\n return extractOtelMetrics(raw, onLog);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n process.stderr.write(`[gauntlet] OTel extraction failed: ${msg}\\n`);\n return raw;\n }\n}\n\n/** Build OTel environment overrides for console export. */\nexport function buildOtelEnv(): Record<string, string> {\n const env: Record<string, string> = {};\n if (!process.env.CLAUDE_CODE_ENABLE_TELEMETRY) {\n env.CLAUDE_CODE_ENABLE_TELEMETRY = '1';\n }\n if (!process.env.OTEL_METRICS_EXPORTER) {\n env.OTEL_METRICS_EXPORTER = 'console';\n }\n if (!process.env.OTEL_LOGS_EXPORTER) {\n env.OTEL_LOGS_EXPORTER = 'console';\n }\n return env;\n}\n",
|
|
31
33
|
"/** 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\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
|
|
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
|
+
"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 '.agents/skills';\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",
|
|
35
|
+
"import { exec } from 'node:child_process';\nimport { statSync } from 'node:fs';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\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 '.cursor/skills';\n }\n\n getUserSkillDir(): string | null {\n return path.join(os.homedir(), '.cursor', 'skills');\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 async detectPlugin(projectRoot: string): Promise<'user' | 'project' | null> {\n // Check project scope: <projectRoot>/.cursor/plugins/agent-gauntlet/.cursor-plugin/plugin.json\n const projectPluginPath = path.join(\n projectRoot,\n '.cursor',\n 'plugins',\n 'agent-gauntlet',\n '.cursor-plugin',\n 'plugin.json',\n );\n try {\n await fs.access(projectPluginPath);\n return 'project';\n } catch {}\n\n // Check user scope: ~/.cursor/plugins/agent-gauntlet/.cursor-plugin/plugin.json\n const userPluginPath = path.join(\n os.homedir(),\n '.cursor',\n 'plugins',\n 'agent-gauntlet',\n '.cursor-plugin',\n 'plugin.json',\n );\n try {\n await fs.access(userPluginPath);\n return 'user';\n } catch {}\n\n return null;\n }\n\n async installPlugin(\n scope: 'user' | 'project',\n projectRoot?: string,\n ): Promise<{ success: boolean; error?: string }> {\n try {\n const baseDir =\n scope === 'user'\n ? path.join(os.homedir(), '.cursor', 'plugins', 'agent-gauntlet')\n : path.join(\n projectRoot ?? '.',\n '.cursor',\n 'plugins',\n 'agent-gauntlet',\n );\n\n // Find package root (where .cursor-plugin/ lives)\n const packageRoot = this.findPackageRoot();\n\n // Copy plugin assets: .cursor-plugin/, skills/, hooks/cursor-hooks.json\n await this.copyPluginAssets(packageRoot, baseDir);\n return { success: true };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n async updatePlugin(\n scope: 'user' | 'project',\n projectRoot?: string,\n ): Promise<{ success: boolean; error?: string }> {\n return this.installPlugin(scope, projectRoot);\n }\n\n getManualInstallInstructions(scope: 'user' | 'project'): string[] {\n const targetDir =\n scope === 'user'\n ? '~/.cursor/plugins/agent-gauntlet/'\n : '.cursor/plugins/agent-gauntlet/';\n return [\n `Copy plugin files to ${targetDir}`,\n 'Or install via /add-plugin in Cursor or at the Cursor marketplace',\n ];\n }\n\n private findPackageRoot(): string {\n const moduleDir = path.dirname(fileURLToPath(import.meta.url));\n // Bundled: moduleDir is dist/ (one level below root)\n const bundled = path.join(moduleDir, '..');\n // Dev: moduleDir is src/cli-adapters/ (two levels below root)\n const dev = path.join(moduleDir, '..', '..');\n\n try {\n statSync(path.join(bundled, '.cursor-plugin', 'plugin.json'));\n return bundled;\n } catch {\n return dev;\n }\n }\n\n private async copyPluginAssets(\n packageRoot: string,\n targetDir: string,\n ): Promise<void> {\n await fs.mkdir(targetDir, { recursive: true });\n\n // Copy .cursor-plugin/\n const pluginSrc = path.join(packageRoot, '.cursor-plugin');\n const pluginDest = path.join(targetDir, '.cursor-plugin');\n await this.copyDirRecursive(pluginSrc, pluginDest);\n\n // Copy skills/\n const skillsSrc = path.join(packageRoot, 'skills');\n const skillsDest = path.join(targetDir, 'skills');\n await this.copyDirRecursive(skillsSrc, skillsDest);\n\n // Copy hooks/cursor-hooks.json\n const hooksSrc = path.join(packageRoot, 'hooks', 'cursor-hooks.json');\n const hooksDest = path.join(targetDir, 'hooks');\n await fs.mkdir(hooksDest, { recursive: true });\n await fs.copyFile(hooksSrc, path.join(hooksDest, 'hooks.json'));\n }\n\n private async copyDirRecursive(src: string, dest: string): Promise<void> {\n await fs.mkdir(dest, { recursive: true });\n const entries = await fs.readdir(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n if (entry.isDirectory()) {\n await this.copyDirRecursive(srcPath, destPath);\n } else {\n await fs.copyFile(srcPath, destPath);\n }\n }\n }\n}\n",
|
|
34
36
|
"// 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
37
|
"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
38
|
"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",
|
|
@@ -61,29 +63,33 @@
|
|
|
61
63
|
"import { loadCIConfig } from '../../config/ci-loader.js';\nimport { loadConfig } from '../../config/loader.js';\nimport type {\n CheckGateConfig,\n CICheckConfig,\n CISetupStep,\n LoadedConfig,\n} from '../../config/types.js';\nimport {\n EntryPointExpander,\n type ExpandedEntryPoint,\n} from '../../core/entry-point.js';\n\ninterface MatrixJob {\n id: string;\n name: string;\n entry_point: string;\n working_directory: string;\n command: string;\n runtimes: string[];\n services: string[];\n setup: string;\n global_setup: string;\n}\n\n/** Build a matrix job from an entry point and check, if valid and not a duplicate. */\nfunction buildMatrixJob(\n ep: ExpandedEntryPoint,\n check: CICheckConfig,\n checkDef: CheckGateConfig,\n seenJobs: Set<string>,\n globalSetup: string,\n): MatrixJob | null {\n const workingDirectory = checkDef.working_directory || ep.path;\n const jobKey = `${check.name}:${workingDirectory}`;\n if (seenJobs.has(jobKey)) return null;\n seenJobs.add(jobKey);\n\n return {\n id: `${check.name}-${ep.path.replace(/\\//g, '-')}`,\n name: check.name,\n entry_point: ep.path,\n working_directory: workingDirectory,\n command: checkDef.command,\n runtimes: check.requires_runtimes || [],\n services: check.requires_services || [],\n setup: formatSetup(check.setup || undefined),\n global_setup: globalSetup,\n };\n}\n\n/** Collect matrix jobs for a single entry point across all CI checks. */\nfunction collectJobsForEntryPoint(\n ep: ExpandedEntryPoint,\n ciChecks: CICheckConfig[],\n config: LoadedConfig,\n seenJobs: Set<string>,\n globalSetup: string,\n): MatrixJob[] {\n const jobs: MatrixJob[] = [];\n const allowedChecks = new Set(ep.config.checks || []);\n\n for (const check of ciChecks) {\n if (!allowedChecks.has(check.name)) continue;\n\n const checkDef = config.checks[check.name];\n if (!checkDef) {\n console.warn(\n `Warning: Check '${check.name}' found in CI config but not defined in checks/*.yml`,\n );\n continue;\n }\n\n const job = buildMatrixJob(ep, check, checkDef, seenJobs, globalSetup);\n if (job) jobs.push(job);\n }\n return jobs;\n}\n\nexport async function listJobs(): Promise<void> {\n try {\n const config = await loadConfig();\n const ciConfig = await loadCIConfig();\n const expander = new EntryPointExpander();\n const expandedEntryPoints = await expander.expandAll(\n config.project.entry_points,\n );\n\n const matrixJobs: MatrixJob[] = [];\n const seenJobs = new Set<string>();\n const globalSetup = formatSetup(ciConfig.setup || undefined);\n\n if (ciConfig.checks) {\n for (const ep of expandedEntryPoints) {\n const jobs = collectJobsForEntryPoint(\n ep,\n ciConfig.checks,\n config,\n seenJobs,\n globalSetup,\n );\n matrixJobs.push(...jobs);\n }\n }\n\n const output = {\n matrix: matrixJobs,\n services: ciConfig.services || {},\n runtimes: ciConfig.runtimes || {},\n };\n\n console.log(JSON.stringify(output));\n } catch (e) {\n console.error('Error generating CI jobs:', e);\n process.exit(1);\n }\n}\n\nconst formatSetup = (steps: CISetupStep[] | null | undefined): string => {\n if (!steps || steps.length === 0) return '';\n return steps\n .map((s) => {\n const cmd = s.working_directory\n ? `(cd \"${s.working_directory}\" && ${s.run})`\n : s.run;\n return `echo \"::group::${s.name}\"\n${cmd}\necho \"::endgroup::\"`;\n })\n .join('\\n');\n};\n",
|
|
62
64
|
"import type { Command } from 'commander';\nimport { initCI } from './init.js';\nimport { listJobs } from './list-jobs.js';\n\nexport function registerCICommand(program: Command): void {\n const ci = program.command('ci').description('Manage CI integration');\n\n ci.command('init')\n .description('Initialize CI workflow and configuration')\n .action(initCI);\n\n ci.command('list-jobs')\n .description('List CI jobs (used by workflow)')\n .action(listJobs);\n}\n",
|
|
63
65
|
"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 { acquireLock, cleanLogs, releaseLock } from './shared.js';\n\nexport function registerCleanCommand(program: Command): void {\n program\n .command('clean')\n .description('Archive logs')\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 logging - prevents clean from running during active gauntlet run\n await acquireLock(config.project.log_dir);\n lockAcquired = true;\n\n // Log the command invocation (only after lock acquired)\n const debugLogger = getDebugLogger();\n await debugLogger?.logCommand('clean', []);\n await debugLogger?.logClean('manual', 'user_request');\n\n await cleanLogs(\n config.project.log_dir,\n config.project.max_previous_logs,\n );\n await releaseLock(config.project.log_dir);\n console.log(chalk.green('Logs archived successfully.'));\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",
|
|
64
|
-
"import chalk from 'chalk';\nimport type { Command } from 'commander';\nimport { loadConfig } from '../config/loader.js';\nimport { ChangeDetector } from '../core/change-detector.js';\nimport { EntryPointExpander } from '../core/entry-point.js';\nimport { type Job, JobGenerator } from '../core/job.js';\nimport {\n readExecutionState,\n resolveFixBase,\n} from '../utils/execution-state.js';\nimport {\n hasExistingLogs,\n performAutoClean,\n shouldAutoClean,\n} from './shared.js';\n\ninterface ChangeOptions {\n commit?: string;\n uncommitted?: boolean;\n fixBase?: string;\n}\n\nasync function autoCleanIfNeeded(\n logDir: string,\n baseBranch: string,\n): Promise<void> {\n const result = await shouldAutoClean(logDir, baseBranch);\n if (result.clean) {\n await performAutoClean(logDir, result);\n }\n}\n\nasync function resolveFreshFixBase(\n logDir: string,\n baseBranch: string,\n): Promise<string | undefined> {\n const state = await readExecutionState(logDir);\n if (!state) return undefined;\n return (await resolveFixBase(state, baseBranch)).fixBase ?? undefined;\n}\n\n/**\n * Resolve change detection options using the same logic as run-executor.\n * Handles rerun mode (existing logs → uncommitted-only diff) and fixBase resolution.\n */\nasync function resolveChangeOptions(\n logDir: string,\n baseBranch: string,\n cliOptions: { commit?: string; uncommitted?: boolean },\n): Promise<ChangeOptions> {\n await autoCleanIfNeeded(logDir, baseBranch);\n\n const logsExist = await hasExistingLogs(logDir);\n const isRerun = logsExist && !cliOptions.commit;\n\n const opts: ChangeOptions = {};\n if (isRerun) {\n const state = await readExecutionState(logDir);\n opts.uncommitted = true;\n opts.fixBase = state?.working_tree_ref;\n } else if (!logsExist) {\n const fixBase = await resolveFreshFixBase(logDir, baseBranch);\n if (fixBase) opts.fixBase = fixBase;\n }\n\n if (cliOptions.commit || cliOptions.uncommitted) {\n return {\n commit: cliOptions.commit,\n uncommitted: cliOptions.uncommitted,\n fixBase: opts.fixBase,\n };\n }\n return opts;\n}\n\nexport function registerDetectCommand(program: Command): void {\n program\n .command('detect')\n .description(\n 'Show what gates would run for detected changes (without executing them)',\n )\n .option(\n '-b, --base-branch <branch>',\n 'Override base branch for change detection',\n )\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 try {\n const config = await loadConfig();\n\n // Priority: CLI override > CI env var > config\n const effectiveBaseBranch =\n options.baseBranch ||\n (process.env.GITHUB_BASE_REF &&\n (process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true')\n ? process.env.GITHUB_BASE_REF\n : null) ||\n config.project.base_branch;\n\n const changeOptions = await resolveChangeOptions(\n config.project.log_dir,\n effectiveBaseBranch,\n { commit: options.commit, uncommitted: options.uncommitted },\n );\n\n const changeDetector = new ChangeDetector(\n effectiveBaseBranch,\n changeOptions,\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 console.log(chalk.green('No changes detected.'));\n
|
|
66
|
+
"import chalk from 'chalk';\nimport type { Command } from 'commander';\nimport { loadConfig } from '../config/loader.js';\nimport { ChangeDetector } from '../core/change-detector.js';\nimport { EntryPointExpander } from '../core/entry-point.js';\nimport { type Job, JobGenerator } from '../core/job.js';\nimport {\n readExecutionState,\n resolveFixBase,\n} from '../utils/execution-state.js';\nimport {\n hasExistingLogs,\n performAutoClean,\n shouldAutoClean,\n} from './shared.js';\n\ninterface ChangeOptions {\n commit?: string;\n uncommitted?: boolean;\n fixBase?: string;\n}\n\nasync function autoCleanIfNeeded(\n logDir: string,\n baseBranch: string,\n): Promise<void> {\n const result = await shouldAutoClean(logDir, baseBranch);\n if (result.clean) {\n await performAutoClean(logDir, result);\n }\n}\n\nasync function resolveFreshFixBase(\n logDir: string,\n baseBranch: string,\n): Promise<string | undefined> {\n const state = await readExecutionState(logDir);\n if (!state) return undefined;\n return (await resolveFixBase(state, baseBranch)).fixBase ?? undefined;\n}\n\n/**\n * Resolve change detection options using the same logic as run-executor.\n * Handles rerun mode (existing logs → uncommitted-only diff) and fixBase resolution.\n */\nasync function resolveChangeOptions(\n logDir: string,\n baseBranch: string,\n cliOptions: { commit?: string; uncommitted?: boolean },\n): Promise<ChangeOptions> {\n await autoCleanIfNeeded(logDir, baseBranch);\n\n const logsExist = await hasExistingLogs(logDir);\n const isRerun = logsExist && !cliOptions.commit;\n\n const opts: ChangeOptions = {};\n if (isRerun) {\n const state = await readExecutionState(logDir);\n opts.uncommitted = true;\n opts.fixBase = state?.working_tree_ref;\n } else if (!logsExist) {\n const fixBase = await resolveFreshFixBase(logDir, baseBranch);\n if (fixBase) opts.fixBase = fixBase;\n }\n\n if (cliOptions.commit || cliOptions.uncommitted) {\n return {\n commit: cliOptions.commit,\n uncommitted: cliOptions.uncommitted,\n fixBase: opts.fixBase,\n };\n }\n return opts;\n}\n\nexport function registerDetectCommand(program: Command): void {\n program\n .command('detect')\n .description(\n 'Show what gates would run for detected changes (without executing them)',\n )\n .option(\n '-b, --base-branch <branch>',\n 'Override base branch for change detection',\n )\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 try {\n const config = await loadConfig();\n\n // Priority: CLI override > CI env var > config\n const effectiveBaseBranch =\n options.baseBranch ||\n (process.env.GITHUB_BASE_REF &&\n (process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true')\n ? process.env.GITHUB_BASE_REF\n : null) ||\n config.project.base_branch;\n\n const changeOptions = await resolveChangeOptions(\n config.project.log_dir,\n effectiveBaseBranch,\n { commit: options.commit, uncommitted: options.uncommitted },\n );\n\n const changeDetector = new ChangeDetector(\n effectiveBaseBranch,\n changeOptions,\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 console.log(chalk.green('No changes detected.'));\n process.exit(2);\n }\n\n console.log(chalk.dim(`Found ${changes.length} changed files:`));\n for (const file of changes) {\n console.log(chalk.dim(` - ${file}`));\n }\n console.log();\n\n const entryPoints = await expander.expand(\n config.project.entry_points,\n changes,\n );\n const jobs = jobGen.generateJobs(entryPoints);\n\n if (jobs.length === 0) {\n console.log(chalk.yellow('No applicable gates for these changes.'));\n process.exit(2);\n }\n\n console.log(chalk.bold(`Would run ${jobs.length} gate(s):\\n`));\n printJobsByWorkDir(jobs);\n } catch (error: unknown) {\n const err = error as { message?: string };\n console.error(chalk.red('Error:'), err.message);\n process.exit(1);\n }\n });\n}\n\nfunction groupByWorkDir(jobs: Job[]): Map<string, Job[]> {\n const map = new Map<string, Job[]>();\n for (const job of jobs) {\n if (!map.has(job.workingDirectory)) {\n map.set(job.workingDirectory, []);\n }\n map.get(job.workingDirectory)?.push(job);\n }\n return map;\n}\n\nfunction printJobsByWorkDir(jobs: Job[]): void {\n for (const [workDir, wdJobs] of groupByWorkDir(jobs).entries()) {\n console.log(chalk.cyan(`Working directory: ${workDir}`));\n for (const job of wdJobs) {\n const typeLabel =\n job.type === 'check' ? chalk.yellow('check') : chalk.blue('review');\n console.log(` ${typeLabel} ${chalk.bold(job.name)}`);\n }\n console.log();\n }\n}\n",
|
|
65
67
|
"import path from 'node:path';\nimport chalk from 'chalk';\nimport type { Command } from 'commander';\nimport {\n type CLIAdapterHealth,\n getAdapter,\n getAllAdapters,\n} from '../cli-adapters/index.js';\nimport { loadConfig } from '../config/loader.js';\nimport { type ValidationResult, validateConfig } from '../config/validator.js';\n\nfunction formatHealthResult(health: CLIAdapterHealth): string {\n switch (health.status) {\n case 'healthy':\n return chalk.green('Installed');\n case 'missing':\n return chalk.red('Missing');\n case 'unhealthy':\n return chalk.red(`${health.message || 'Unhealthy'}`);\n }\n}\n\nfunction displayValidationIssues(validationResult: ValidationResult): void {\n const issuesByFile = new Map<string, typeof validationResult.issues>();\n for (const issue of validationResult.issues) {\n const relativeFile = path.relative(process.cwd(), issue.file);\n if (!issuesByFile.has(relativeFile)) {\n issuesByFile.set(relativeFile, []);\n }\n issuesByFile.get(relativeFile)?.push(issue);\n }\n\n for (const [file, issues] of issuesByFile.entries()) {\n for (const issue of issues) {\n const icon =\n issue.severity === 'error' ? chalk.red('✗') : chalk.yellow('⚠');\n const fieldInfo = issue.field ? chalk.dim(` (${issue.field})`) : '';\n console.log(` ${icon} ${file}${fieldInfo}`);\n console.log(` ${issue.message}`);\n }\n }\n}\n\nasync function validateAndDisplayConfig(): Promise<void> {\n console.log(chalk.bold('Config validation:'));\n const validationResult = await validateConfig();\n\n if (validationResult.filesChecked.length === 0) {\n console.log(chalk.yellow(' No config files found'));\n return;\n }\n\n for (const file of validationResult.filesChecked) {\n const relativePath = path.relative(process.cwd(), file);\n console.log(chalk.dim(` ${relativePath}`));\n }\n\n if (validationResult.valid && validationResult.issues.length === 0) {\n console.log(chalk.green(' ✓ All config files are valid'));\n } else {\n displayValidationIssues(validationResult);\n }\n}\n\ninterface CollectedAgents {\n preferredAgents: Set<string>;\n reviewsWithEmptyPreference: string[];\n}\n\nfunction collectPreferredAgents(\n reviewEntries: [string, { cli_preference?: string[] }][],\n): CollectedAgents {\n const preferredAgents = new Set<string>();\n const reviewsWithEmptyPreference: string[] = [];\n\n for (const [reviewName, review] of reviewEntries) {\n if (!review.cli_preference || review.cli_preference.length === 0) {\n reviewsWithEmptyPreference.push(reviewName);\n } else {\n for (const agent of review.cli_preference) {\n preferredAgents.add(agent);\n }\n }\n }\n\n return { preferredAgents, reviewsWithEmptyPreference };\n}\n\nfunction reportEmptyPreferences(reviewsWithEmptyPreference: string[]): void {\n if (reviewsWithEmptyPreference.length === 0) {\n return;\n }\n console.log(chalk.yellow(' ⚠️ Misconfiguration detected:'));\n for (const name of reviewsWithEmptyPreference) {\n console.log(\n chalk.yellow(` Review gate \"${name}\" has empty cli_preference`),\n );\n }\n console.log();\n}\n\nasync function checkConfiguredAgentsHealth(): Promise<void> {\n const config = await loadConfig();\n const reviewEntries = Object.entries(config.reviews);\n\n if (reviewEntries.length === 0) {\n console.log(chalk.yellow(' No CLI tools configured'));\n console.log(\n chalk.dim(\n ' No review gates found. Add review gates with cli_preference to check tool availability.',\n ),\n );\n return;\n }\n\n const { preferredAgents, reviewsWithEmptyPreference } =\n collectPreferredAgents(reviewEntries);\n\n reportEmptyPreferences(reviewsWithEmptyPreference);\n\n if (preferredAgents.size === 0) {\n console.log(chalk.yellow(' No CLI tools configured'));\n console.log(\n chalk.dim(\n ' All review gates have empty cli_preference. Add tools to cli_preference to check availability.',\n ),\n );\n return;\n }\n\n for (const agentName of Array.from(preferredAgents).sort()) {\n const adapter = getAdapter(agentName);\n if (adapter) {\n const health = await adapter.checkHealth();\n console.log(\n ` ${adapter.name.padEnd(10)} : ${formatHealthResult(health)}`,\n );\n } else {\n console.log(` ${agentName.padEnd(10)} : ${chalk.yellow('Unknown')}`);\n }\n }\n}\n\nasync function checkAllAgentsHealth(): Promise<void> {\n const adapters = getAllAdapters();\n console.log(chalk.dim(' (Config not found, checking all supported agents)'));\n\n for (const adapter of adapters) {\n const health = await adapter.checkHealth();\n console.log(` ${adapter.name.padEnd(10)} : ${formatHealthResult(health)}`);\n }\n}\n\nexport function registerHealthCommand(program: Command): void {\n program\n .command('health')\n .description('Check CLI tool availability')\n .action(async () => {\n await validateAndDisplayConfig();\n console.log();\n console.log(chalk.bold('CLI Tool Health Check:'));\n\n try {\n await checkConfiguredAgentsHealth();\n } catch (_error: unknown) {\n await checkAllAgentsHealth();\n }\n });\n}\n",
|
|
66
68
|
"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",
|
|
67
69
|
"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",
|
|
68
70
|
"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(\n ' clean Archive logs (move current logs into previous/)',\n );\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(\n ' validate Validate .gauntlet/ config files against schemas',\n );\n console.log(\n ' skip Advance execution state baseline without running gates',\n );\n console.log(\n ' status Show a summary of the most recent gauntlet session',\n );\n console.log(\n ' review-audit Audit review execution from the debug log (--date or --since)',\n );\n console.log(' ci CI integration commands (init, list-jobs)');\n console.log(\n ' start-hook Session start hook (primes agent with verification instructions)',\n );\n console.log(\n ' stop-hook Claude Code stop hook (validates gauntlet completion)',\n );\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",
|
|
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",
|
|
71
|
+
"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 { getCodexSkillsBaseDir, installAdapterPlugin } from './init-plugin.js';\nimport {\n type OverwriteChoice,\n promptDevCLIs,\n promptFileOverwrite,\n promptInstallScope,\n promptNumReviews,\n promptReviewCLIs,\n} from './init-prompts.js';\nimport { runPluginUpdate } from './plugin-update.js';\nimport { exists } from './shared.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 handleRerun(\n projectRoot: string,\n availableAdapters: CLIAdapter[],\n skipPrompts: boolean,\n): Promise<void> {\n try {\n await runPluginUpdate({ skipPrompts });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n if (!message.includes('Claude plugin is not installed')) throw error;\n console.log(\n chalk.yellow('Plugin not installed yet, running fresh install...'),\n );\n await installExternalFiles(projectRoot, availableAdapters, skipPrompts);\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 devAdapters: CLIAdapter[];\n let instructionCLINames: string[];\n\n if (gauntletExists) {\n console.log(chalk.dim('.gauntlet/ already exists, skipping scaffolding'));\n instructionCLINames = detectedNames;\n await handleRerun(projectRoot, availableAdapters, skipPrompts);\n } else {\n const devCLINames = await promptDevCLIs(detectedNames, skipPrompts);\n devAdapters = availableAdapters.filter((a) => devCLINames.includes(a.name));\n\n for (const adapter of devAdapters) {\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 await installExternalFiles(projectRoot, devAdapters, skipPrompts);\n }\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\ninterface UpdateAllState {\n updateAll: boolean;\n}\n\nasync function installSkillsWithChecksums(\n projectRoot: string,\n targetBaseDir: string,\n skipPrompts: boolean,\n updateAllState: UpdateAllState,\n): Promise<void> {\n const skillsDir = path.isAbsolute(targetBaseDir)\n ? targetBaseDir\n : path.join(projectRoot, targetBaseDir);\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 let choice: OverwriteChoice;\n if (skipPrompts || updateAllState.updateAll) {\n choice = 'yes';\n } else {\n choice = await promptFileOverwrite(dirName, skipPrompts);\n if (choice === 'all') {\n updateAllState.updateAll = true;\n }\n }\n if (choice === 'no') 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\n/** Detect which adapters need plugin installation, logging already-installed adapters. */\nasync function detectAdaptersNeedingInstall(\n devAdapters: CLIAdapter[],\n projectRoot: string,\n): Promise<CLIAdapter[]> {\n const result: CLIAdapter[] = [];\n for (const adapter of devAdapters) {\n if (!adapter.installPlugin) continue;\n\n if (adapter.detectPlugin) {\n const existingScope = await adapter.detectPlugin(projectRoot);\n if (existingScope) {\n console.log(\n chalk.dim(\n `${adapter.name} plugin already installed at ${existingScope} scope, skipping install`,\n ),\n );\n continue;\n }\n }\n\n result.push(adapter);\n }\n return result;\n}\n\n/** Install skills for non-Claude/Codex adapters (e.g. Gemini, Cursor). */\nasync function installOtherAdapterSkills(\n projectRoot: string,\n devAdapters: CLIAdapter[],\n skipPrompts: boolean,\n updateAllState: UpdateAllState,\n): Promise<void> {\n const seen = new Set<string>();\n for (const adapter of devAdapters) {\n if (adapter.name === 'claude' || adapter.name === 'codex') continue;\n const dir = adapter.getProjectSkillDir();\n if (dir && !seen.has(dir)) {\n seen.add(dir);\n await installSkillsWithChecksums(\n projectRoot,\n dir,\n skipPrompts,\n updateAllState,\n );\n }\n }\n}\n\nasync function installExternalFiles(\n projectRoot: string,\n devAdapters: CLIAdapter[],\n skipPrompts: boolean,\n): Promise<void> {\n const updateAllState: UpdateAllState = { updateAll: false };\n const devAdapterNames = new Set(devAdapters.map((adapter) => adapter.name));\n\n const adaptersNeedingInstall = await detectAdaptersNeedingInstall(\n devAdapters,\n projectRoot,\n );\n\n // Prompt for scope only when at least one adapter needs installation\n const needsScope =\n adaptersNeedingInstall.length > 0 || devAdapterNames.has('codex');\n const installScope: 'user' | 'project' = needsScope\n ? await promptInstallScope(skipPrompts)\n : 'project';\n\n for (const adapter of adaptersNeedingInstall) {\n await installAdapterPlugin(adapter, projectRoot, installScope);\n }\n\n if (devAdapterNames.has('codex')) {\n const codexBaseDir = getCodexSkillsBaseDir(installScope);\n await installSkillsWithChecksums(\n projectRoot,\n codexBaseDir,\n skipPrompts,\n updateAllState,\n );\n }\n\n await installOtherAdapterSkills(\n projectRoot,\n devAdapters,\n skipPrompts,\n updateAllState,\n );\n}\n\nasync function printPostInitInstructions(devCLINames: string[]): Promise<void> {\n const hasNative = devCLINames.some((name) => NATIVE_CLIS.has(name));\n const hasCodex = devCLINames.includes('codex');\n const otherNonNativeNames = devCLINames.filter(\n (name) => !NATIVE_CLIS.has(name) && name !== 'codex',\n );\n const hasOtherNonNative = otherNonNativeNames.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 (hasCodex) {\n console.log(\n chalk.bold(\n 'To complete setup in Codex, reference the setup skill: .agents/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 Codex skills:');\n for (const dirName of await getSkillDirNames()) {\n console.log(` .agents/skills/${dirName}/SKILL.md`);\n }\n }\n if (hasOtherNonNative) {\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",
|
|
70
72
|
"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",
|
|
71
|
-
"import
|
|
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<
|
|
73
|
+
"import { execFileSync } from 'node:child_process';\nimport os from 'node:os';\nimport path from 'node:path';\nimport chalk from 'chalk';\nimport type { CLIAdapter } from '../cli-adapters/shared.js';\nimport {\n addMarketplace,\n installPlugin,\n listPlugins,\n} from '../plugin/claude-cli.js';\n\nexport function getCodexSkillsBaseDir(scope: 'user' | 'project'): string {\n if (scope === 'project') {\n return path.join('.agents', 'skills');\n }\n const homeDir = process.env.HOME?.trim() || os.homedir();\n return path.join(homeDir, '.agents', 'skills');\n}\n\nexport async function detectInstalledPlugin(\n projectRoot: string,\n): Promise<'user' | 'project' | null> {\n try {\n const entries = await listPlugins();\n const pluginEntries = entries.filter((entry) => {\n const e = entry as { name?: unknown; id?: unknown };\n const name = e.name ?? e.id;\n return (\n name === 'agent-gauntlet' ||\n (typeof name === 'string' && name.startsWith('agent-gauntlet@'))\n );\n });\n const resolved = path.resolve(projectRoot);\n if (\n pluginEntries.some((entry) => {\n const e = entry as { scope?: unknown; projectPath?: unknown };\n return (\n e.scope === 'project' &&\n typeof e.projectPath === 'string' &&\n path.resolve(e.projectPath) === resolved\n );\n })\n ) {\n return 'project';\n }\n if (\n pluginEntries.some(\n (entry) => (entry as { scope?: unknown }).scope === 'user',\n )\n ) {\n return 'user';\n }\n } catch {\n // Claude CLI not available or plugin list failed\n }\n return null;\n}\n\nexport function detectClaudePluginScope(): 'user' | 'project' {\n try {\n const output = execFileSync('claude', ['plugin', 'list', '--json'], {\n encoding: 'utf-8',\n stdio: ['pipe', 'pipe', 'pipe'],\n }) as string;\n const parsed = JSON.parse(output) as unknown;\n const entries = Array.isArray(parsed)\n ? parsed\n : ((parsed as { plugins?: unknown[] })?.plugins ?? []);\n const pluginEntries = entries.filter((entry) => {\n const e = entry as { name?: unknown; id?: unknown };\n const name = e.name ?? e.id;\n return (\n name === 'agent-gauntlet' ||\n (typeof name === 'string' && name.startsWith('agent-gauntlet@'))\n );\n });\n if (\n pluginEntries.some(\n (entry) => (entry as { scope?: unknown }).scope === 'project',\n )\n ) {\n return 'project';\n }\n if (\n pluginEntries.some(\n (entry) => (entry as { scope?: unknown }).scope === 'user',\n )\n ) {\n return 'user';\n }\n } catch {\n // Fall back to user scope for reruns when list output is unavailable.\n }\n return 'user';\n}\n\nexport async function installClaudePluginWithFallback(\n installScope: 'user' | 'project',\n): Promise<void> {\n const addResult = await addMarketplace();\n if (!addResult.success) {\n warnClaudePluginInstallFailure(installScope, addResult.stderr);\n return;\n }\n\n const installResult = await installPlugin(installScope);\n if (!installResult.success) {\n warnClaudePluginInstallFailure(installScope, installResult.stderr);\n }\n}\n\nfunction warnClaudePluginInstallFailure(\n installScope: 'user' | 'project',\n stderr?: string,\n): void {\n console.warn(chalk.yellow('Plugin installation failed. Continuing init.'));\n if (stderr) {\n console.warn(chalk.yellow(stderr.trim()));\n }\n console.warn('Run these commands manually:');\n console.warn(' claude plugin marketplace add pcaplan/agent-gauntlet');\n console.warn(\n ` claude plugin install agent-gauntlet --scope ${installScope}`,\n );\n}\n\n/**\n * Generic adapter plugin installer. Calls the adapter's installPlugin() method\n * and prints fallback manual instructions on failure.\n */\nexport async function installAdapterPlugin(\n adapter: CLIAdapter,\n projectRoot: string,\n installScope: 'user' | 'project',\n): Promise<void> {\n if (!adapter.installPlugin) return;\n const result = await adapter.installPlugin(installScope, projectRoot);\n if (!result.success) {\n console.warn(\n chalk.yellow(\n `${adapter.name} plugin installation failed. Continuing init.`,\n ),\n );\n if (result.error) {\n console.warn(chalk.yellow(result.error.trim()));\n }\n const instructions = adapter.getManualInstallInstructions?.(installScope);\n if (instructions) {\n console.warn('Run these steps manually:');\n for (const step of instructions) {\n console.warn(` ${step}`);\n }\n }\n }\n}\n",
|
|
74
|
+
"import { checkbox, confirm, number, select } 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 promptInstallScope(\n skipPrompts: boolean,\n): Promise<'user' | 'project'> {\n if (skipPrompts) return 'project';\n\n console.log();\n return select({\n message: 'Install scope for Claude plugin and Codex skills:',\n choices: [\n { name: 'Local (project)', value: 'project' as const },\n { name: 'Global (user)', value: 'user' as const },\n ],\n });\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 type OverwriteChoice = 'yes' | 'no' | 'all';\n\nexport async function promptFileOverwrite(\n name: string,\n skipPrompts: boolean,\n): Promise<OverwriteChoice> {\n if (skipPrompts) return 'yes';\n\n return select({\n message: `Skill \\`${name}\\` has changed, update it?`,\n choices: [\n { name: 'Yes', value: 'yes' as const },\n { name: 'No', value: 'no' as const },\n { name: 'Yes to all remaining', value: 'all' as const },\n ],\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",
|
|
75
|
+
"import { realpathSync, statSync } from 'node:fs';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport chalk from 'chalk';\nimport { CursorAdapter } from '../cli-adapters/cursor.js';\nimport {\n listPlugins,\n updateMarketplace,\n updatePlugin,\n} from '../plugin/claude-cli.js';\nimport { computeSkillChecksum } from './init-checksums.js';\nimport { exists } from './shared.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).\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\ninterface PluginEntry {\n name?: unknown;\n id?: unknown;\n scope?: unknown;\n projectPath?: unknown;\n}\n\nexport interface PluginUpdateOptions {\n skipPrompts?: boolean;\n}\n\nasync function getSkillDirNames(): Promise<string[]> {\n const entries = await fs.readdir(SKILLS_SOURCE_DIR, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .sort();\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\nfunction isInProjectScope(cwd: string, projectPath: string): boolean {\n const absoluteCwd = path.resolve(cwd);\n const absoluteProjectPath = path.resolve(projectPath);\n const normalizedCwd = normalizePathForMatch(absoluteCwd);\n const normalizedProjectPath = normalizePathForMatch(absoluteProjectPath);\n return (\n normalizedCwd === normalizedProjectPath ||\n normalizedCwd.startsWith(`${normalizedProjectPath}${path.sep}`)\n );\n}\n\nfunction normalizePathForMatch(inputPath: string): string {\n try {\n return realpathSync.native(inputPath);\n } catch {\n return inputPath;\n }\n}\n\nfunction detectInstalledScope(\n entries: PluginEntry[],\n cwd: string,\n): 'project' | 'user' | null {\n const pluginEntries = entries.filter((entry) => {\n const name = entry.name ?? entry.id;\n return (\n name === 'agent-gauntlet' ||\n (typeof name === 'string' && name.startsWith('agent-gauntlet@'))\n );\n });\n\n const projectEntries = pluginEntries.filter(\n (entry) =>\n entry.scope === 'project' &&\n typeof entry.projectPath === 'string' &&\n isInProjectScope(cwd, entry.projectPath),\n );\n if (projectEntries.length > 0) {\n return 'project';\n }\n\n const hasUserInstall = pluginEntries.some((entry) => entry.scope === 'user');\n if (hasUserInstall) {\n return 'user';\n }\n\n return null;\n}\n\nfunction printManualUpdateInstructions(): void {\n console.error('Run these commands manually:');\n console.error(' claude plugin marketplace update agent-gauntlet');\n console.error(' claude plugin update agent-gauntlet@pcaplan/agent-gauntlet');\n}\n\nasync function refreshCodexSkills(cwd: string): Promise<void> {\n const localBase = path.join(cwd, '.agents', 'skills');\n const localMarker = path.join(localBase, 'gauntlet-run');\n\n const homeDir = process.env.HOME?.trim() || os.homedir();\n const globalBase = path.join(homeDir, '.agents', 'skills');\n const globalMarker = path.join(globalBase, 'gauntlet-run');\n\n let targetBase: string | null = null;\n if (await exists(localMarker)) {\n targetBase = localBase;\n } else if (await exists(globalMarker)) {\n targetBase = globalBase;\n }\n\n if (!targetBase) {\n return;\n }\n\n for (const dirName of await getSkillDirNames()) {\n const sourceDir = path.join(SKILLS_SOURCE_DIR, dirName);\n const targetDir = path.join(targetBase, dirName);\n if (!(await exists(targetDir))) {\n await copyDirRecursive({ src: sourceDir, dest: targetDir });\n continue;\n }\n\n const sourceChecksum = await computeSkillChecksum(sourceDir);\n const targetChecksum = await computeSkillChecksum(targetDir);\n if (sourceChecksum === targetChecksum) {\n continue;\n }\n\n await fs.rm(targetDir, { recursive: true, force: true });\n await copyDirRecursive({ src: sourceDir, dest: targetDir });\n }\n}\n\nfunction isCliUnavailableError(err: unknown): boolean {\n if (err != null && typeof err === 'object') {\n const code = (err as { code?: unknown }).code;\n if (code === 'ENOENT') {\n return true;\n }\n }\n const msg =\n err instanceof Error\n ? err.message.toLowerCase()\n : String(err).toLowerCase();\n return msg.includes('command not found') || msg.includes('not installed');\n}\n\nasync function detectClaudeScope(\n cwd: string,\n): Promise<'project' | 'user' | null> {\n try {\n const parsedPlugins = (await listPlugins()) as PluginEntry[];\n return detectInstalledScope(parsedPlugins, cwd);\n } catch (error: unknown) {\n if (isCliUnavailableError(error)) {\n // Claude CLI is not installed — treat as not found so Cursor-only\n // setups can still update successfully.\n return null;\n }\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to detect Claude plugin installation: ${message}`);\n }\n}\n\nasync function updateClaudePlugin(scope: 'project' | 'user'): Promise<void> {\n console.log(\n chalk.cyan(`Updating agent-gauntlet Claude plugin (${scope} scope)...`),\n );\n\n const marketplaceResult = await updateMarketplace();\n if (!marketplaceResult.success) {\n console.error(chalk.red('Plugin update failed.'));\n if (marketplaceResult.stderr) {\n console.error(chalk.red(marketplaceResult.stderr.trim()));\n }\n printManualUpdateInstructions();\n throw new Error(\n marketplaceResult.stderr ?? 'Failed to update plugin marketplace entry',\n );\n }\n\n const pluginResult = await updatePlugin();\n if (!pluginResult.success) {\n console.error(chalk.red('Plugin update failed.'));\n if (pluginResult.stderr) {\n console.error(chalk.red(pluginResult.stderr.trim()));\n }\n printManualUpdateInstructions();\n throw new Error(pluginResult.stderr ?? 'Failed to update plugin');\n }\n}\n\nasync function updateCursorPlugin(\n adapter: CursorAdapter,\n scope: 'project' | 'user',\n cwd: string,\n): Promise<void> {\n console.log(\n chalk.cyan(`Updating agent-gauntlet Cursor plugin (${scope} scope)...`),\n );\n\n const cursorResult = await adapter.updatePlugin(scope, cwd);\n if (cursorResult.success) {\n console.log(chalk.green('Cursor plugin updated successfully.'));\n console.log(\n chalk.yellow(\n 'Restart any open Cursor sessions to use the updated plugin.',\n ),\n );\n } else {\n console.error(\n chalk.yellow(\n `Cursor plugin update failed: ${cursorResult.error ?? 'unknown error'}`,\n ),\n );\n }\n}\n\nexport async function runPluginUpdate(\n options?: PluginUpdateOptions,\n): Promise<void> {\n void options?.skipPrompts;\n\n const cwd = process.cwd();\n const claudeScope = await detectClaudeScope(cwd);\n\n // Detect Cursor plugin installation\n const cursorAdapter = new CursorAdapter();\n const cursorScope = await cursorAdapter.detectPlugin(cwd);\n\n // Error if nothing is installed at all\n if (!(claudeScope || cursorScope)) {\n throw new Error(\n 'No agent-gauntlet plugin is installed for this project. Please run `agent-gauntlet init` first.',\n );\n }\n\n if (claudeScope) {\n await updateClaudePlugin(claudeScope);\n }\n\n if (cursorScope) {\n await updateCursorPlugin(cursorAdapter, cursorScope, cwd);\n }\n\n await refreshCodexSkills(cwd);\n\n console.log(chalk.green('Plugin update completed successfully.'));\n console.log(\n chalk.yellow('Restart any open agent sessions to use the updated plugin.'),\n );\n}\n",
|
|
73
76
|
"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",
|
|
74
77
|
"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
78
|
"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 violationsFixed: 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\ntype TelemetryEntry = Omit<TokenStats, 'runsWithTelemetry'>;\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?: { status: string; failed: number };\n}\n\ninterface GateStat {\n count: number;\n totalDuration: number;\n totalViolations: number;\n totalViolationsFixed: 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\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 try {\n const cfg = path.join(cwd, '.gauntlet', 'config.yml');\n const m = fs.readFileSync(cfg, 'utf-8').match(/^log_dir:\\s*(.+)$/m);\n if (m?.[1]) return m[1].trim().replace(/^[\"']|[\"']$/g, '');\n } catch {}\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 gateId = body.match(/^(\\S+)/)?.[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 violationsFixed: 0,\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 = { status: kv.status ?? 'unknown', failed: safeNum(kv.failed) };\n}\n\nconst emptyStat = (): GateStat => ({\n count: 0,\n totalDuration: 0,\n totalViolations: 0,\n totalViolationsFixed: 0,\n});\nfunction addGate(s: GateStat, g: ReviewGate): void {\n s.count++;\n s.totalDuration += g.durationS;\n s.totalViolations += g.violations;\n s.totalViolationsFixed += g.violationsFixed;\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 = a.cells.get(g.reviewType) ?? new Map<string, GateStat>();\n a.cells.set(g.reviewType, inner);\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 hdr =\n padRight('', rlW) +\n colLabels.map((c) => padRight(capitalize(c), 12)).join('') +\n 'Total';\n const rows = rowLabels.map(\n (r) =>\n padRight(fmtType(r), rlW) +\n colLabels.map((c) => padRight(cell(r, c), 12)).join('') +\n rowTotal(r),\n );\n const totalRow =\n padRight('Total', rlW) +\n colLabels.map((c) => padRight(colTotal(c), 12)).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}\nfunction formatViolationsFixed(ct: CrossTab): string[] {\n const avg = (s: GateStat | undefined): string =>\n s && s.count > 0 ? (s.totalViolationsFixed / s.count).toFixed(2) : 'n/a';\n return formatCrossTable(\n '=== Violations Fixed (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}\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 formatSummary(\n blocks: RunBlock[],\n ct: CrossTab,\n totalFixed: number,\n): string[] {\n const total = blocks.filter((b) => b.end).length;\n return [\n '=== Summary ===',\n `Gauntlet rounds: ${total}`,\n ` Total gate executions: ${ct.grandTotal.count}`,\n ` Total review issues fixed: ${totalFixed}`,\n ];\n}\nfunction computeViolationsFixed(blocks: RunBlock[]): void {\n blocks.slice(1).forEach((cur, j) => {\n for (const g of cur.reviewGates) {\n const p = blocks[j]?.reviewGates.find(\n (pg) => pg.reviewType === g.reviewType && pg.cli === g.cli,\n );\n if (p && p.violations > g.violations)\n g.violationsFixed = p.violations - g.violations;\n }\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 computeViolationsFixed(blocks);\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 ...formatViolationsFixed(ct),\n ...formatTokenUsage(tokenStats, cliBlockCount),\n ...formatSummary(blocks, ct, ct.grandTotal.totalViolationsFixed),\n ].join('\\n');\n}\n\nfunction todayLocalDate(): string {\n const now = new Date();\n const mo = String(now.getMonth() + 1).padStart(2, '0');\n const dy = String(now.getDate()).padStart(2, '0');\n return `${now.getFullYear()}-${mo}-${dy}`;\n}\n\nasync function readBlocks(\n filePath: string,\n matchDate: (d: string) => boolean,\n): Promise<RunBlock[]> {\n const rl = readline.createInterface({ input: fs.createReadStream(filePath) });\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 (!matchDate(ts.slice(0, 10))) 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, since?: string): Promise<void> {\n const cwd = process.cwd();\n if (date && since) {\n console.error('Use either --date or --since, not both.');\n process.exit(1);\n }\n const dateRe = /^\\d{4}-\\d{2}-\\d{2}$/;\n if (date && !dateRe.test(date)) {\n console.error('Invalid --date. Expected YYYY-MM-DD');\n process.exit(1);\n }\n if (since && !dateRe.test(since)) {\n console.error('Invalid --since. Expected YYYY-MM-DD');\n process.exit(1);\n }\n const logDir = getLogDir(cwd);\n const debugLogPath = path.join(cwd, logDir, '.debug.log');\n if (!fs.existsSync(debugLogPath)) {\n console.log(`No debug log found. (looked in ${logDir}/.debug.log)`);\n process.exit(0);\n }\n const targetDate = since ?? date ?? todayLocalDate();\n const matchDate: (d: string) => boolean = since\n ? (d) => d >= since\n : (d) => d === targetDate;\n const label = since ? `${since} – ${todayLocalDate()}` : targetDate;\n const blocks = await readBlocks(debugLogPath, matchDate);\n console.log(formatAuditReport(blocks, label));\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
79
|
"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(\n 'Audit review execution from the debug log (--date or --since)',\n )\n .option('--date <YYYY-MM-DD>', 'Date to filter (default: today)')\n .option('--since <YYYY-MM-DD>', 'Include all runs from this date onwards')\n .action(async (opts: { date?: string; since?: string }) => {\n if (opts.date && opts.since) {\n console.error('Use either --date or --since, not both.');\n process.exit(1);\n }\n await main(opts.date, opts.since);\n });\n}\n",
|
|
80
|
+
"import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport {\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 { generateReport } from '../output/report.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 /** When true, generate a plain-text report in RunResult.reportText */\n report?: 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 if (ctx.options.report) {\n const reportText = await generateReport(\n prepared.earlyResult.status,\n prepared.earlyResult.gateResults,\n ctx.config.project.log_dir,\n );\n prepared.earlyResult.reportText = reportText;\n // Write report file as fallback\n try {\n const reportPath = path.join(ctx.config.project.log_dir, 'report.txt');\n await fs.mkdir(ctx.config.project.log_dir, { recursive: true });\n await fs.writeFile(reportPath, reportText, 'utf-8');\n } catch {\n // Best effort\n }\n }\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",
|
|
81
|
+
"import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { ReviewFullJsonOutput } from '../gates/result.js';\nimport type { GauntletStatus } from '../types/gauntlet-status.js';\n\n/**\n * A numbered review violation with metadata for report and update-review.\n */\nexport interface NumberedViolation {\n /** Sequential numeric ID (1-based) */\n id: number;\n /** Gate label (e.g., \"review:src:code-quality\") */\n gateLabel: string;\n /** Adapter suffix (e.g., \"claude@1\") */\n adapterSuffix: string;\n /** File path */\n file: string;\n /** Line number */\n line: number | string;\n /** Issue description */\n issue: string;\n /** Fix suggestion */\n fix?: string;\n /** Priority level */\n priority?: 'critical' | 'high' | 'medium' | 'low';\n /** Path to the JSON file containing the violation */\n jsonPath: string;\n /** Index within the violations array in the JSON file */\n violationIndex: number;\n}\n\n/**\n * Parse a review JSON filename to extract the job ID and review index.\n * Format: <jobId>_<adapter>@<reviewIndex>.<runNumber>.json\n */\nfunction parseReviewJsonFilename(\n filename: string,\n): { jobId: string; adapter: string; reviewIndex: number } | null {\n const m = filename.match(/^(.+)_([^@]+)@(\\d+)\\.\\d+\\.json$/);\n if (!(m?.[1] && m[2] && m[3])) return null;\n return {\n jobId: m[1],\n adapter: m[2],\n reviewIndex: parseInt(m[3], 10),\n };\n}\n\n/** Collect new violations from a single JSON file. */\nasync function collectViolationsFromFile(\n jsonPath: string,\n filename: string,\n startId: number,\n): Promise<NumberedViolation[]> {\n const content = await fs.readFile(jsonPath, 'utf-8');\n // Intentional: ReviewFullJsonOutput is an internal format produced by review-agg.ts.\n // Type assertion is sufficient here; Zod validation is not needed for stable internal data.\n const data: ReviewFullJsonOutput = JSON.parse(content);\n\n if (!(data.violations && Array.isArray(data.violations))) return [];\n\n const parsed = parseReviewJsonFilename(filename);\n if (!parsed) return [];\n\n const violations: NumberedViolation[] = [];\n let nextId = startId;\n\n for (let i = 0; i < data.violations.length; i++) {\n const v = data.violations[i];\n if (!v) continue;\n const status = v.status || 'new';\n if (status !== 'new') continue;\n\n violations.push({\n id: nextId++,\n gateLabel: parsed.jobId,\n adapterSuffix: `${data.adapter}@${parsed.reviewIndex}`,\n file: v.file,\n line: v.line,\n issue: v.issue,\n fix: v.fix,\n priority: v.priority,\n jsonPath,\n violationIndex: i,\n });\n }\n\n return violations;\n}\n\n/**\n * Enumerate all violations with status \"new\" from review JSON files in sorted\n * filename order, assigning sequential numeric IDs. This shared function is\n * used by both the report generator and the update-review command to ensure\n * ID stability.\n */\nexport async function enumerateNewViolations(\n logDir: string,\n): Promise<NumberedViolation[]> {\n let files: string[];\n try {\n files = await fs.readdir(logDir);\n } catch (err: unknown) {\n const code = (err as { code?: string }).code;\n if (code === 'ENOENT') return [];\n throw new Error(`Failed to read log directory ${logDir}: ${err}`);\n }\n\n const reviewFiles = files\n .filter((f) => f.endsWith('.json') && parseReviewJsonFilename(f) !== null)\n .sort();\n const allViolations: NumberedViolation[] = [];\n\n for (const file of reviewFiles) {\n try {\n const fileViolations = await collectViolationsFromFile(\n path.join(logDir, file),\n file,\n allViolations.length + 1,\n );\n allViolations.push(...fileViolations);\n } catch (err) {\n throw new Error(`Failed to read review JSON ${file}: ${err}`);\n }\n }\n\n return allViolations;\n}\n\n/**\n * Map gauntlet status to the report status line text.\n */\nexport function statusLineText(status: GauntletStatus): string {\n switch (status) {\n case 'passed':\n return 'Status: Passed';\n case 'passed_with_warnings':\n return 'Status: Passed with warnings';\n case 'failed':\n return 'Status: Failed';\n case 'retry_limit_exceeded':\n return 'Status: Retry limit exceeded';\n default:\n return `Status: ${status}`;\n }\n}\n\n/** Minimal gate result shape needed for report generation. */\ninterface ReportGateResult {\n jobId: string;\n status: 'pass' | 'fail' | 'error';\n command?: string;\n workingDirectory?: string;\n fixInstructions?: string;\n fixWithSkill?: string;\n logPath?: string;\n}\n\n/** Format a single check failure into report lines. */\nfunction formatCheckFailure(result: ReportGateResult): string[] {\n const lines: string[] = [];\n lines.push(`### ${result.jobId}`);\n if (result.command) lines.push(`Command: ${result.command}`);\n if (result.workingDirectory)\n lines.push(`Directory: ${result.workingDirectory}`);\n if (result.fixInstructions)\n lines.push(`Fix instructions: ${result.fixInstructions}`);\n if (result.fixWithSkill) lines.push(`Fix skill: ${result.fixWithSkill}`);\n if (result.logPath) lines.push(`Log: ${result.logPath}`);\n lines.push('');\n return lines;\n}\n\n/** Format a single review violation into report lines. */\nfunction formatReviewViolation(v: NumberedViolation): string[] {\n const lines: string[] = [];\n const priorityStr = v.priority ? ` [${v.priority}]` : '';\n lines.push(`#${v.id}${priorityStr} ${v.gateLabel} (${v.adapterSuffix})`);\n lines.push(` ${v.file}:${v.line} - ${v.issue}`);\n if (v.fix) lines.push(` Fix: ${v.fix}`);\n lines.push(` JSON: ${v.jsonPath}`);\n lines.push('');\n return lines;\n}\n\n/**\n * Generate a plain-text failure report for the --report flag.\n * The report is self-contained and agent-actionable.\n */\nexport async function generateReport(\n status: GauntletStatus,\n gateResults: ReportGateResult[] | undefined,\n logDir: string,\n): Promise<string> {\n const lines: string[] = [statusLineText(status)];\n\n if (!gateResults || gateResults.length === 0) {\n return lines.join('\\n');\n }\n\n const checkFailures = gateResults.filter(\n (r) =>\n (r.status === 'fail' || r.status === 'error') &&\n r.jobId.startsWith('check:'),\n );\n\n if (checkFailures.length > 0) {\n lines.push('', '## CHECK FAILURES', '');\n for (const result of checkFailures) {\n lines.push(...formatCheckFailure(result));\n }\n }\n\n const reviewViolations = await enumerateNewViolations(logDir);\n if (reviewViolations.length > 0) {\n lines.push('## REVIEW VIOLATIONS', '');\n for (const v of reviewViolations) {\n lines.push(...formatReviewViolation(v));\n }\n }\n\n return lines.join('\\n');\n}\n",
|
|
82
|
+
"import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { 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 { generateReport } from '../output/report.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 report?: 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, 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 // Generate the report BEFORE cleanup archives logs\n let reportText: string | undefined;\n if (ctx.options.report) {\n reportText = await generateReport(\n status,\n outcome.gateResults,\n ctx.config.project.log_dir,\n );\n // Write report file as a fallback\n const reportPath = path.join(ctx.config.project.log_dir, 'report.txt');\n try {\n await fs.writeFile(reportPath, reportText, 'utf-8');\n } catch (err) {\n // Best effort — don't fail the run if we can't write the report file\n console.debug(`Failed to write report file ${reportPath}: ${err}`);\n }\n }\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 reportText,\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
83
|
"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",
|
|
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",
|
|
84
|
+
"import type { Command } from 'commander';\nimport { executeRun } from '../core/run-executor.js';\nimport { statusLineText } from '../output/report.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 .option('--report', 'Write a structured failure report to stdout')\n .action(async (options) => {\n const reportEnabled = options.report ?? false;\n\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 report: reportEnabled,\n });\n\n if (reportEnabled) {\n // Use reportText from the executor, or fall back to a status-only line\n // for early-return paths (no_changes, no_applicable_gates, etc.)\n const text = result.reportText ?? statusLineText(result.status);\n process.stdout.write(`${text}\\n`);\n }\n\n const code = isSuccessStatus(result.status) ? 0 : 1;\n process.exit(code);\n });\n}\n",
|
|
81
85
|
"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",
|
|
82
86
|
"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",
|
|
83
87
|
"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",
|
|
88
|
+
"import type { Command } from 'commander';\nimport { runPluginUpdate } from './plugin-update.js';\n\nexport function registerUpdateCommand(program: Command): void {\n program\n .command('update')\n .description('Update the agent-gauntlet Claude plugin and refresh skills')\n .action(async () => {\n await runPluginUpdate();\n });\n}\n",
|
|
89
|
+
"import fs from 'node:fs/promises';\nimport type { Command } from 'commander';\nimport { loadConfig } from '../config/loader.js';\nimport type { ReviewFullJsonOutput } from '../gates/result.js';\nimport { enumerateNewViolations } from '../output/report.js';\n\nasync function ensureLogDir(logDir: string): Promise<void> {\n try {\n await fs.stat(logDir);\n } catch (error: unknown) {\n const code = (error as { code?: string }).code;\n if (code === 'ENOENT') {\n console.error(`Error: Log directory does not exist: ${logDir}`);\n process.exit(1);\n }\n throw new Error(\n `Failed to access log directory ${logDir}: ${String(error)}`,\n );\n }\n}\n\nfunction printViolation(\n v: ReturnType<typeof enumerateNewViolations> extends Promise<(infer T)[]>\n ? T\n : never,\n): void {\n const priorityStr = v.priority ? ` [${v.priority}]` : '';\n console.log(`#${v.id}${priorityStr} ${v.gateLabel} (${v.adapterSuffix})`);\n console.log(` ${v.file}:${v.line} - ${v.issue}`);\n if (v.fix) {\n console.log(` Fix: ${v.fix}`);\n }\n console.log(` JSON: ${v.jsonPath}`);\n console.log('');\n}\n\nexport function registerUpdateReviewCommand(program: Command): void {\n const cmd = program\n .command('update-review')\n .description('Manage review violations');\n\n cmd\n .command('list')\n .description('List pending review violations with numeric IDs')\n .action(async () => {\n try {\n const config = await loadConfig();\n const logDir = config.project.log_dir;\n\n await ensureLogDir(logDir);\n\n const violations = await enumerateNewViolations(logDir);\n\n if (violations.length === 0) {\n console.log('No pending violations.');\n process.exit(0);\n }\n\n for (const v of violations) {\n printViolation(v);\n }\n\n process.exit(0);\n } catch (error: unknown) {\n const err = error as { message?: string };\n console.error(`Error: ${err.message || 'Unknown error'}`);\n process.exit(1);\n }\n });\n\n cmd\n .command('fix <id> <reason>')\n .description('Mark a violation as fixed')\n .action(async (idStr: string, reason: string | undefined) => {\n await updateViolation(idStr, reason, 'fixed');\n });\n\n cmd\n .command('skip <id> <reason>')\n .description('Mark a violation as skipped')\n .action(async (idStr: string, reason: string | undefined) => {\n await updateViolation(idStr, reason, 'skipped');\n });\n}\n\nasync function updateViolation(\n idStr: string,\n reason: string | undefined,\n newStatus: 'fixed' | 'skipped',\n): Promise<void> {\n try {\n if (!reason) {\n console.error(\n `Error: Missing reason. Usage: agent-gauntlet update-review ${newStatus} <id> \"<reason>\"`,\n );\n process.exit(1);\n }\n\n const id = parseInt(idStr, 10);\n if (Number.isNaN(id) || id < 1) {\n console.error(`Error: Invalid ID: ${idStr}`);\n process.exit(1);\n }\n\n const config = await loadConfig();\n const logDir = config.project.log_dir;\n\n const violations = await enumerateNewViolations(logDir);\n const target = violations.find((v) => v.id === id);\n\n if (!target) {\n console.error(\n `Error: Violation #${id} not found. Use 'update-review list' to see available violations.`,\n );\n process.exit(1);\n }\n\n // Read the JSON file\n const content = await fs.readFile(target.jsonPath, 'utf-8');\n const data: ReviewFullJsonOutput = JSON.parse(content);\n\n // Verify the violation is still \"new\"\n const violation = data.violations[target.violationIndex];\n if (!violation) {\n console.error(\n `Error: Violation at index ${target.violationIndex} not found in ${target.jsonPath}`,\n );\n process.exit(1);\n }\n\n const currentStatus = violation.status || 'new';\n if (currentStatus !== 'new') {\n console.error(\n `Error: Violation #${id} is already ${currentStatus} and cannot be updated.`,\n );\n process.exit(1);\n }\n\n // Update the violation\n violation.status = newStatus;\n violation.result = reason;\n\n // Write back\n await fs.writeFile(target.jsonPath, JSON.stringify(data, null, 2), 'utf-8');\n\n const action = newStatus === 'fixed' ? 'Fixed' : 'Skipped';\n console.log(\n `${action} violation #${id}: ${target.file}:${target.line} - ${target.issue}`,\n );\n process.exit(0);\n } catch (error: unknown) {\n const err = error as { message?: string };\n console.error(`Error: ${err.message || 'Unknown error'}`);\n process.exit(1);\n }\n}\n",
|
|
84
90
|
"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"
|
|
85
91
|
],
|
|
86
|
-
"mappings": "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",
|
|
87
|
-
"debugId": "
|
|
92
|
+
"mappings": "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",
|
|
93
|
+
"debugId": "9B95D114BC2749E764756E2164756E21",
|
|
88
94
|
"names": []
|
|
89
95
|
}
|