agent-eval-opencode 0.10.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.
Files changed (129) hide show
  1. package/dist/cli.d.ts +6 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +590 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/index.d.ts +30 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +29 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/lib/agents/claude-code.d.ts +12 -0
  10. package/dist/lib/agents/claude-code.d.ts.map +1 -0
  11. package/dist/lib/agents/claude-code.js +231 -0
  12. package/dist/lib/agents/claude-code.js.map +1 -0
  13. package/dist/lib/agents/codex.d.ts +12 -0
  14. package/dist/lib/agents/codex.d.ts.map +1 -0
  15. package/dist/lib/agents/codex.js +267 -0
  16. package/dist/lib/agents/codex.js.map +1 -0
  17. package/dist/lib/agents/cursor.d.ts +10 -0
  18. package/dist/lib/agents/cursor.d.ts.map +1 -0
  19. package/dist/lib/agents/cursor.js +204 -0
  20. package/dist/lib/agents/cursor.js.map +1 -0
  21. package/dist/lib/agents/gemini.d.ts +10 -0
  22. package/dist/lib/agents/gemini.d.ts.map +1 -0
  23. package/dist/lib/agents/gemini.js +207 -0
  24. package/dist/lib/agents/gemini.js.map +1 -0
  25. package/dist/lib/agents/index.d.ts +7 -0
  26. package/dist/lib/agents/index.d.ts.map +1 -0
  27. package/dist/lib/agents/index.js +20 -0
  28. package/dist/lib/agents/index.js.map +1 -0
  29. package/dist/lib/agents/opencode.d.ts +11 -0
  30. package/dist/lib/agents/opencode.d.ts.map +1 -0
  31. package/dist/lib/agents/opencode.js +245 -0
  32. package/dist/lib/agents/opencode.js.map +1 -0
  33. package/dist/lib/agents/registry.d.ts +23 -0
  34. package/dist/lib/agents/registry.d.ts.map +1 -0
  35. package/dist/lib/agents/registry.js +35 -0
  36. package/dist/lib/agents/registry.js.map +1 -0
  37. package/dist/lib/agents/shared.d.ts +83 -0
  38. package/dist/lib/agents/shared.d.ts.map +1 -0
  39. package/dist/lib/agents/shared.js +192 -0
  40. package/dist/lib/agents/shared.js.map +1 -0
  41. package/dist/lib/agents/types.d.ts +73 -0
  42. package/dist/lib/agents/types.d.ts.map +1 -0
  43. package/dist/lib/agents/types.js +5 -0
  44. package/dist/lib/agents/types.js.map +1 -0
  45. package/dist/lib/classifier.d.ts +89 -0
  46. package/dist/lib/classifier.d.ts.map +1 -0
  47. package/dist/lib/classifier.js +285 -0
  48. package/dist/lib/classifier.js.map +1 -0
  49. package/dist/lib/config.d.ts +37 -0
  50. package/dist/lib/config.d.ts.map +1 -0
  51. package/dist/lib/config.js +187 -0
  52. package/dist/lib/config.js.map +1 -0
  53. package/dist/lib/dashboard.d.ts +65 -0
  54. package/dist/lib/dashboard.d.ts.map +1 -0
  55. package/dist/lib/dashboard.js +237 -0
  56. package/dist/lib/dashboard.js.map +1 -0
  57. package/dist/lib/docker-sandbox.d.ts +92 -0
  58. package/dist/lib/docker-sandbox.d.ts.map +1 -0
  59. package/dist/lib/docker-sandbox.js +375 -0
  60. package/dist/lib/docker-sandbox.js.map +1 -0
  61. package/dist/lib/fingerprint.d.ts +15 -0
  62. package/dist/lib/fingerprint.d.ts.map +1 -0
  63. package/dist/lib/fingerprint.js +59 -0
  64. package/dist/lib/fingerprint.js.map +1 -0
  65. package/dist/lib/fixture.d.ts +55 -0
  66. package/dist/lib/fixture.d.ts.map +1 -0
  67. package/dist/lib/fixture.js +215 -0
  68. package/dist/lib/fixture.js.map +1 -0
  69. package/dist/lib/housekeeping.d.ts +26 -0
  70. package/dist/lib/housekeeping.d.ts.map +1 -0
  71. package/dist/lib/housekeeping.js +170 -0
  72. package/dist/lib/housekeeping.js.map +1 -0
  73. package/dist/lib/init.d.ts +21 -0
  74. package/dist/lib/init.d.ts.map +1 -0
  75. package/dist/lib/init.js +275 -0
  76. package/dist/lib/init.js.map +1 -0
  77. package/dist/lib/o11y/index.d.ts +13 -0
  78. package/dist/lib/o11y/index.d.ts.map +1 -0
  79. package/dist/lib/o11y/index.js +13 -0
  80. package/dist/lib/o11y/index.js.map +1 -0
  81. package/dist/lib/o11y/parsers/claude-code.d.ts +18 -0
  82. package/dist/lib/o11y/parsers/claude-code.d.ts.map +1 -0
  83. package/dist/lib/o11y/parsers/claude-code.js +343 -0
  84. package/dist/lib/o11y/parsers/claude-code.js.map +1 -0
  85. package/dist/lib/o11y/parsers/codex.d.ts +17 -0
  86. package/dist/lib/o11y/parsers/codex.d.ts.map +1 -0
  87. package/dist/lib/o11y/parsers/codex.js +364 -0
  88. package/dist/lib/o11y/parsers/codex.js.map +1 -0
  89. package/dist/lib/o11y/parsers/cursor.d.ts +21 -0
  90. package/dist/lib/o11y/parsers/cursor.d.ts.map +1 -0
  91. package/dist/lib/o11y/parsers/cursor.js +226 -0
  92. package/dist/lib/o11y/parsers/cursor.js.map +1 -0
  93. package/dist/lib/o11y/parsers/gemini.d.ts +21 -0
  94. package/dist/lib/o11y/parsers/gemini.d.ts.map +1 -0
  95. package/dist/lib/o11y/parsers/gemini.js +241 -0
  96. package/dist/lib/o11y/parsers/gemini.js.map +1 -0
  97. package/dist/lib/o11y/parsers/index.d.ts +55 -0
  98. package/dist/lib/o11y/parsers/index.d.ts.map +1 -0
  99. package/dist/lib/o11y/parsers/index.js +284 -0
  100. package/dist/lib/o11y/parsers/index.js.map +1 -0
  101. package/dist/lib/o11y/parsers/opencode.d.ts +17 -0
  102. package/dist/lib/o11y/parsers/opencode.d.ts.map +1 -0
  103. package/dist/lib/o11y/parsers/opencode.js +320 -0
  104. package/dist/lib/o11y/parsers/opencode.js.map +1 -0
  105. package/dist/lib/o11y/types.d.ts +113 -0
  106. package/dist/lib/o11y/types.d.ts.map +1 -0
  107. package/dist/lib/o11y/types.js +6 -0
  108. package/dist/lib/o11y/types.js.map +1 -0
  109. package/dist/lib/results.d.ts +91 -0
  110. package/dist/lib/results.d.ts.map +1 -0
  111. package/dist/lib/results.js +361 -0
  112. package/dist/lib/results.js.map +1 -0
  113. package/dist/lib/runner.d.ts +71 -0
  114. package/dist/lib/runner.d.ts.map +1 -0
  115. package/dist/lib/runner.js +267 -0
  116. package/dist/lib/runner.js.map +1 -0
  117. package/dist/lib/sandbox.d.ts +173 -0
  118. package/dist/lib/sandbox.d.ts.map +1 -0
  119. package/dist/lib/sandbox.js +337 -0
  120. package/dist/lib/sandbox.js.map +1 -0
  121. package/dist/lib/types.d.ts +258 -0
  122. package/dist/lib/types.d.ts.map +1 -0
  123. package/dist/lib/types.js +15 -0
  124. package/dist/lib/types.js.map +1 -0
  125. package/dist/test-setup.d.ts +2 -0
  126. package/dist/test-setup.d.ts.map +1 -0
  127. package/dist/test-setup.js +6 -0
  128. package/dist/test-setup.js.map +1 -0
  129. package/package.json +72 -0
@@ -0,0 +1,30 @@
1
+ /**
2
+ * agent-eval
3
+ *
4
+ * Framework for testing AI coding agents in isolated sandboxes.
5
+ */
6
+ export type { AgentType, ModelTier, EvalFilter, Sandbox, SetupFunction, ExperimentConfig, ResolvedExperimentConfig, EvalFixture, EvalRunResult, EvalRunData, EvalSummary, ProgressEvent, ExperimentResults, FailureType, Classification, } from './lib/types.js';
7
+ export { REQUIRED_EVAL_FILES, EXCLUDED_FILES } from './lib/types.js';
8
+ export { CONFIG_DEFAULTS, validateConfig, resolveConfig, loadConfig, resolveEvalNames, } from './lib/config.js';
9
+ export { FixtureValidationError, discoverFixtures, validateFixtureFiles, validatePackageJson, loadFixture, loadAllFixtures, getFixtureFiles, readFixtureFiles, } from './lib/fixture.js';
10
+ export type { SandboxOptions, CommandResult, SandboxFile, SandboxBackend, SandboxBackendInfo, } from './lib/sandbox.js';
11
+ export { SandboxManager, DEFAULT_SANDBOX_TIMEOUT, IGNORED_PATTERNS, TEST_FILE_PATTERNS, collectLocalFiles, splitTestFiles, verifyNoTestFiles, createSandbox, resolveBackend, getSandboxBackendInfo, } from './lib/sandbox.js';
12
+ export type { DockerSandboxOptions } from './lib/docker-sandbox.js';
13
+ export { DockerSandboxManager } from './lib/docker-sandbox.js';
14
+ export type { AgentRunOptions, AgentRunResult } from './lib/agents/types.js';
15
+ export { TRANSCRIPT_CONTEXT_DIR, TRANSCRIPT_CONTEXT_PATH } from './lib/agents/shared.js';
16
+ export type { Agent, ScriptResult } from './lib/agents/types.js';
17
+ export { getAgent, listAgents, registerAgent } from './lib/agents/index.js';
18
+ export type { SaveResultsOptions, ReusableResult } from './lib/results.js';
19
+ export { agentResultToEvalRunData, createEvalSummary, createExperimentResults, saveResults, formatResultsTable, formatRunResult, createProgressDisplay, scanReusableResults, } from './lib/results.js';
20
+ export { computeFingerprint } from './lib/fingerprint.js';
21
+ export { isClassifierEnabled, classifyFailure, classifyWithAI, isNonModelFailure, } from './lib/classifier.js';
22
+ export { housekeep } from './lib/housekeeping.js';
23
+ export type { RunExperimentOptions } from './lib/runner.js';
24
+ export { runExperiment, runSingleEval, StartRateLimiter } from './lib/runner.js';
25
+ export { Dashboard, createConsoleProgressHandler } from './lib/dashboard.js';
26
+ export type { InitOptions } from './lib/init.js';
27
+ export { initProject, getPostInitInstructions } from './lib/init.js';
28
+ export type { ToolName, TranscriptEvent, WebFetchInfo, FileOperationInfo, ShellCommandInfo, TranscriptSummary, Transcript, ParseableAgent, } from './lib/o11y/index.js';
29
+ export { parseTranscript, parseTranscriptSummary, loadTranscript, SUPPORTED_AGENTS, parseClaudeCodeTranscript, parseCodexTranscript, parseOpenCodeTranscript, } from './lib/o11y/index.js';
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,WAAW,EACX,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,cAAc,GACf,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrE,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,UAAU,EACV,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,eAAe,EACf,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,cAAc,EACd,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG7E,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGzF,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG5E,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGjF,OAAO,EAAE,SAAS,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAG7E,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGrE,YAAY,EACV,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ /**
2
+ * agent-eval
3
+ *
4
+ * Framework for testing AI coding agents in isolated sandboxes.
5
+ */
6
+ // Re-export constants
7
+ export { REQUIRED_EVAL_FILES, EXCLUDED_FILES } from './lib/types.js';
8
+ // Re-export config utilities
9
+ export { CONFIG_DEFAULTS, validateConfig, resolveConfig, loadConfig, resolveEvalNames, } from './lib/config.js';
10
+ // Re-export fixture utilities
11
+ export { FixtureValidationError, discoverFixtures, validateFixtureFiles, validatePackageJson, loadFixture, loadAllFixtures, getFixtureFiles, readFixtureFiles, } from './lib/fixture.js';
12
+ export { SandboxManager, DEFAULT_SANDBOX_TIMEOUT, IGNORED_PATTERNS, TEST_FILE_PATTERNS, collectLocalFiles, splitTestFiles, verifyNoTestFiles, createSandbox, resolveBackend, getSandboxBackendInfo, } from './lib/sandbox.js';
13
+ export { DockerSandboxManager } from './lib/docker-sandbox.js';
14
+ // Re-export transcript context constants
15
+ export { TRANSCRIPT_CONTEXT_DIR, TRANSCRIPT_CONTEXT_PATH } from './lib/agents/shared.js';
16
+ export { getAgent, listAgents, registerAgent } from './lib/agents/index.js';
17
+ export { agentResultToEvalRunData, createEvalSummary, createExperimentResults, saveResults, formatResultsTable, formatRunResult, createProgressDisplay, scanReusableResults, } from './lib/results.js';
18
+ // Re-export fingerprinting
19
+ export { computeFingerprint } from './lib/fingerprint.js';
20
+ // Re-export classifier
21
+ export { isClassifierEnabled, classifyFailure, classifyWithAI, isNonModelFailure, } from './lib/classifier.js';
22
+ // Re-export housekeeping
23
+ export { housekeep } from './lib/housekeeping.js';
24
+ export { runExperiment, runSingleEval, StartRateLimiter } from './lib/runner.js';
25
+ // Re-export dashboard utilities
26
+ export { Dashboard, createConsoleProgressHandler } from './lib/dashboard.js';
27
+ export { initProject, getPostInitInstructions } from './lib/init.js';
28
+ export { parseTranscript, parseTranscriptSummary, loadTranscript, SUPPORTED_AGENTS, parseClaudeCodeTranscript, parseCodexTranscript, parseOpenCodeTranscript, } from './lib/o11y/index.js';
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqBH,sBAAsB;AACtB,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErE,6BAA6B;AAC7B,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,UAAU,EACV,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,8BAA8B;AAC9B,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,eAAe,EACf,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAU1B,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAK/D,yCAAyC;AACzC,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAIzF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI5E,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,2BAA2B;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,uBAAuB;AACvB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,yBAAyB;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEjF,gCAAgC;AAChC,OAAO,EAAE,SAAS,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAI7E,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAarE,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Claude Code agent implementation.
3
+ * Uses Vercel AI Gateway for model access.
4
+ */
5
+ import type { Agent } from './types.js';
6
+ /**
7
+ * Create Claude Code agent with specified authentication method.
8
+ */
9
+ export declare function createClaudeCodeAgent({ useVercelAiGateway }: {
10
+ useVercelAiGateway: boolean;
11
+ }): Agent;
12
+ //# sourceMappingURL=claude-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/lib/agents/claude-code.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAmC,MAAM,YAAY,CAAC;AAqDzE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,kBAAkB,EAAE,EAAE;IAAE,kBAAkB,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CA8NpG"}
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Claude Code agent implementation.
3
+ * Uses Vercel AI Gateway for model access.
4
+ */
5
+ import { createSandbox, collectLocalFiles, splitTestFiles, verifyNoTestFiles, } from '../sandbox.js';
6
+ import { runValidation, captureGeneratedFiles, createVitestConfig, AI_GATEWAY, ANTHROPIC_DIRECT, initGitAndCommit, injectTranscriptContext, } from './shared.js';
7
+ /**
8
+ * Capture the Claude Code transcript from the sandbox.
9
+ * Claude Code stores transcripts at ~/.claude/projects/-{workdir}/{session-id}.jsonl
10
+ */
11
+ async function captureTranscript(sandbox) {
12
+ try {
13
+ // Get the working directory to construct the transcript path
14
+ const workdir = sandbox.getWorkingDirectory();
15
+ // Claude Code uses the path with slashes replaced by dashes
16
+ const projectPath = workdir.replace(/\//g, '-');
17
+ const claudeProjectDir = `~/.claude/projects/${projectPath}`;
18
+ // Find the most recent .jsonl file (the transcript)
19
+ const findResult = await sandbox.runShell(`ls -t ${claudeProjectDir}/*.jsonl 2>/dev/null | head -1`);
20
+ if (findResult.exitCode !== 0 || !findResult.stdout.trim()) {
21
+ return undefined;
22
+ }
23
+ const transcriptPath = findResult.stdout.trim();
24
+ const content = await sandbox.readFile(transcriptPath);
25
+ return content || undefined;
26
+ }
27
+ catch {
28
+ // Transcript capture is best-effort
29
+ return undefined;
30
+ }
31
+ }
32
+ /**
33
+ * Create Claude Code agent with specified authentication method.
34
+ */
35
+ export function createClaudeCodeAgent({ useVercelAiGateway }) {
36
+ return {
37
+ name: useVercelAiGateway ? 'vercel-ai-gateway/claude-code' : 'claude-code',
38
+ displayName: useVercelAiGateway ? 'Claude Code (Vercel AI Gateway)' : 'Claude Code',
39
+ getApiKeyEnvVar() {
40
+ return useVercelAiGateway ? AI_GATEWAY.apiKeyEnvVar : ANTHROPIC_DIRECT.apiKeyEnvVar;
41
+ },
42
+ getDefaultModel() {
43
+ return 'opus';
44
+ },
45
+ async run(fixturePath, options) {
46
+ const startTime = Date.now();
47
+ let sandbox = null;
48
+ let agentOutput = '';
49
+ let transcript;
50
+ let aborted = false;
51
+ let sandboxStopped = false;
52
+ let hasReturned = false;
53
+ const captureTranscriptBestEffort = async () => {
54
+ if (!sandbox || sandboxStopped || transcript)
55
+ return;
56
+ transcript = await captureTranscript(sandbox);
57
+ };
58
+ // Handle abort signal
59
+ const abortHandler = () => {
60
+ aborted = true;
61
+ if (sandbox && !sandboxStopped) {
62
+ sandboxStopped = true;
63
+ sandbox.stop().catch(() => { });
64
+ }
65
+ };
66
+ if (options.signal) {
67
+ if (options.signal.aborted) {
68
+ hasReturned = true;
69
+ return {
70
+ success: false,
71
+ output: '',
72
+ error: 'Aborted before start',
73
+ duration: 0,
74
+ };
75
+ }
76
+ options.signal.addEventListener('abort', abortHandler);
77
+ }
78
+ try {
79
+ // Collect files from fixture
80
+ const allFiles = await collectLocalFiles(fixturePath);
81
+ const { workspaceFiles, testFiles } = splitTestFiles(allFiles);
82
+ // Check for abort before expensive operations
83
+ if (aborted) {
84
+ hasReturned = true;
85
+ return {
86
+ success: false,
87
+ output: '',
88
+ error: 'Aborted',
89
+ duration: Date.now() - startTime,
90
+ };
91
+ }
92
+ // Create sandbox
93
+ sandbox = await createSandbox({
94
+ timeout: options.timeout,
95
+ runtime: 'node24',
96
+ backend: options.sandbox,
97
+ });
98
+ // Check for abort after sandbox creation (abort may have fired during create)
99
+ if (aborted) {
100
+ hasReturned = true;
101
+ return {
102
+ success: false,
103
+ output: '',
104
+ error: 'Aborted',
105
+ duration: Date.now() - startTime,
106
+ sandboxId: sandbox.sandboxId,
107
+ };
108
+ }
109
+ // Upload workspace files (excluding tests)
110
+ await sandbox.uploadFiles(workspaceFiles);
111
+ await initGitAndCommit(sandbox);
112
+ // Run setup function if provided
113
+ if (options.setup) {
114
+ await options.setup(sandbox);
115
+ }
116
+ // Install dependencies
117
+ let installResult = await sandbox.runCommand('npm', ['install']);
118
+ if (installResult.exitCode !== 0) {
119
+ installResult = await sandbox.runCommand('npm', ['install']);
120
+ }
121
+ if (installResult.exitCode !== 0) {
122
+ const output = (installResult.stdout + installResult.stderr).trim().split('\n').slice(-10).join('\n');
123
+ throw new Error(`npm install failed (exit code ${installResult.exitCode}):\n${output}`);
124
+ }
125
+ // Install Claude Code CLI globally
126
+ const cliInstall = await sandbox.runCommand('npm', [
127
+ 'install',
128
+ '-g',
129
+ '@anthropic-ai/claude-code',
130
+ ]);
131
+ if (cliInstall.exitCode !== 0) {
132
+ throw new Error(`Claude Code install failed: ${cliInstall.stderr}`);
133
+ }
134
+ // Verify no test files in sandbox
135
+ await verifyNoTestFiles(sandbox);
136
+ // Run Claude Code with appropriate authentication
137
+ const claudeResult = await sandbox.runCommand('claude', ['--print', '--model', options.model, '--dangerously-skip-permissions', options.prompt], {
138
+ env: useVercelAiGateway
139
+ ? {
140
+ // AI Gateway configuration for Claude Code
141
+ ANTHROPIC_BASE_URL: AI_GATEWAY.baseUrl,
142
+ ANTHROPIC_AUTH_TOKEN: options.apiKey,
143
+ ANTHROPIC_API_KEY: '',
144
+ }
145
+ : {
146
+ // Direct Anthropic API
147
+ ANTHROPIC_API_KEY: options.apiKey,
148
+ },
149
+ });
150
+ agentOutput = claudeResult.stdout + claudeResult.stderr;
151
+ if (claudeResult.exitCode !== 0) {
152
+ await captureTranscriptBestEffort();
153
+ // Extract meaningful error from output (last few lines usually contain the error)
154
+ const errorLines = agentOutput.trim().split('\n').slice(-5).join('\n');
155
+ hasReturned = true;
156
+ return {
157
+ success: false,
158
+ output: agentOutput,
159
+ transcript,
160
+ error: errorLines || `Claude Code exited with code ${claudeResult.exitCode}`,
161
+ duration: Date.now() - startTime,
162
+ sandboxId: sandbox.sandboxId,
163
+ };
164
+ }
165
+ // Upload test files for validation
166
+ await sandbox.uploadFiles(testFiles);
167
+ // Create vitest config for EVAL.ts/tsx
168
+ await createVitestConfig(sandbox);
169
+ // Capture transcript before validation when available
170
+ await captureTranscriptBestEffort();
171
+ // Inject transcript context so EVAL.ts tests can assert on agent behavior
172
+ await injectTranscriptContext(sandbox, transcript, 'claude-code', options.model);
173
+ // Run validation scripts
174
+ const validationResults = await runValidation(sandbox, options.scripts ?? []);
175
+ // Capture generated files
176
+ const { generatedFiles, deletedFiles } = await captureGeneratedFiles(sandbox);
177
+ hasReturned = true;
178
+ return {
179
+ success: validationResults.allPassed,
180
+ output: agentOutput,
181
+ transcript,
182
+ duration: Date.now() - startTime,
183
+ testResult: validationResults.test,
184
+ scriptsResults: validationResults.scripts,
185
+ sandboxId: sandbox.sandboxId,
186
+ generatedFiles,
187
+ deletedFiles,
188
+ };
189
+ }
190
+ catch (error) {
191
+ await captureTranscriptBestEffort();
192
+ // Check if this was an abort
193
+ if (aborted) {
194
+ hasReturned = true;
195
+ return {
196
+ success: false,
197
+ output: agentOutput,
198
+ transcript,
199
+ error: 'Aborted',
200
+ duration: Date.now() - startTime,
201
+ sandboxId: sandbox?.sandboxId,
202
+ };
203
+ }
204
+ hasReturned = true;
205
+ return {
206
+ success: false,
207
+ output: agentOutput,
208
+ transcript,
209
+ error: error instanceof Error ? error.message : String(error),
210
+ duration: Date.now() - startTime,
211
+ sandboxId: sandbox?.sandboxId,
212
+ };
213
+ }
214
+ finally {
215
+ // If we're about to return and sandbox is still up, try one final transcript capture.
216
+ if (hasReturned) {
217
+ await captureTranscriptBestEffort();
218
+ }
219
+ // Clean up abort listener
220
+ if (options.signal) {
221
+ options.signal.removeEventListener('abort', abortHandler);
222
+ }
223
+ if (sandbox && !sandboxStopped) {
224
+ sandboxStopped = true;
225
+ await sandbox.stop();
226
+ }
227
+ }
228
+ },
229
+ };
230
+ }
231
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/lib/agents/claude-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * OpenAI Codex CLI agent implementation.
3
+ * Uses Vercel AI Gateway for model access.
4
+ */
5
+ import type { Agent } from './types.js';
6
+ /**
7
+ * Create Codex agent with specified authentication method.
8
+ */
9
+ export declare function createCodexAgent({ useVercelAiGateway }: {
10
+ useVercelAiGateway: boolean;
11
+ }): Agent;
12
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/lib/agents/codex.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAmC,MAAM,YAAY,CAAC;AA8GzE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,EAAE;IAAE,kBAAkB,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CA0M/F"}
@@ -0,0 +1,267 @@
1
+ /**
2
+ * OpenAI Codex CLI agent implementation.
3
+ * Uses Vercel AI Gateway for model access.
4
+ */
5
+ import { createSandbox, collectLocalFiles, splitTestFiles, verifyNoTestFiles, } from '../sandbox.js';
6
+ import { runValidation, captureGeneratedFiles, createVitestConfig, AI_GATEWAY, OPENAI_DIRECT, initGitAndCommit, injectTranscriptContext, } from './shared.js';
7
+ /**
8
+ * Parse model string with optional query parameters.
9
+ * e.g. "gpt-5.2-codex?reasoningEffort=high" → { model: "gpt-5.2-codex", reasoningEffort: "high" }
10
+ */
11
+ function parseModelString(model) {
12
+ const qIndex = model.indexOf('?');
13
+ if (qIndex === -1)
14
+ return { model };
15
+ const base = model.slice(0, qIndex);
16
+ const query = model.slice(qIndex + 1);
17
+ let reasoningEffort;
18
+ for (const pair of query.split('&')) {
19
+ const eqIndex = pair.indexOf('=');
20
+ if (eqIndex === -1)
21
+ continue;
22
+ const key = pair.slice(0, eqIndex);
23
+ const value = decodeURIComponent(pair.slice(eqIndex + 1));
24
+ if (key === 'reasoningEffort') {
25
+ reasoningEffort = value;
26
+ }
27
+ }
28
+ return { model: base, reasoningEffort };
29
+ }
30
+ /**
31
+ * Extract transcript from Codex JSON output.
32
+ * When run with --json, Codex outputs JSONL to stdout with the full transcript.
33
+ */
34
+ function extractTranscriptFromOutput(output) {
35
+ if (!output || !output.trim()) {
36
+ return undefined;
37
+ }
38
+ // The --json output is already the transcript in JSONL format
39
+ // Filter to only include lines that look like JSON objects
40
+ const lines = output.split('\n').filter(line => {
41
+ const trimmed = line.trim();
42
+ return trimmed.startsWith('{') && trimmed.endsWith('}');
43
+ });
44
+ if (lines.length === 0) {
45
+ return undefined;
46
+ }
47
+ return lines.join('\n');
48
+ }
49
+ /**
50
+ * Generate Codex config.toml content.
51
+ */
52
+ function generateCodexConfig(model, useVercelAiGateway) {
53
+ if (useVercelAiGateway) {
54
+ // AI Gateway uses prefixed model names like "openai/gpt-5.2-codex"
55
+ const fullModel = model.includes('/') ? model : `openai/${model}`;
56
+ return `# Codex configuration for Vercel AI Gateway
57
+ profile = "default"
58
+
59
+ [model_providers.vercel]
60
+ name = "Vercel AI Gateway"
61
+ base_url = "${AI_GATEWAY.openAiBaseUrl}"
62
+ env_key = "${AI_GATEWAY.apiKeyEnvVar}"
63
+ wire_api = "responses"
64
+
65
+ [profiles.default]
66
+ model_provider = "vercel"
67
+ model = "${fullModel}"
68
+ `;
69
+ }
70
+ else {
71
+ // Direct OpenAI API uses unprefixed model names like "gpt-5.2-codex"
72
+ const directModel = model.includes('/') ? model.split('/').pop() : model;
73
+ return `# Direct OpenAI API configuration
74
+ profile = "default"
75
+
76
+ [model_providers.openai]
77
+ name = "OpenAI"
78
+ base_url = "${OPENAI_DIRECT.baseUrl}"
79
+ env_key = "${OPENAI_DIRECT.apiKeyEnvVar}"
80
+ wire_api = "responses"
81
+
82
+ [profiles.default]
83
+ model_provider = "openai"
84
+ model = "${directModel}"
85
+ `;
86
+ }
87
+ }
88
+ /**
89
+ * Create Codex agent with specified authentication method.
90
+ */
91
+ export function createCodexAgent({ useVercelAiGateway }) {
92
+ return {
93
+ name: useVercelAiGateway ? 'vercel-ai-gateway/codex' : 'codex',
94
+ displayName: useVercelAiGateway ? 'OpenAI Codex (Vercel AI Gateway)' : 'OpenAI Codex',
95
+ getApiKeyEnvVar() {
96
+ return useVercelAiGateway ? AI_GATEWAY.apiKeyEnvVar : OPENAI_DIRECT.apiKeyEnvVar;
97
+ },
98
+ getDefaultModel() {
99
+ return 'openai/gpt-5.2-codex';
100
+ },
101
+ async run(fixturePath, options) {
102
+ const startTime = Date.now();
103
+ let sandbox = null;
104
+ let agentOutput = '';
105
+ let transcript;
106
+ let aborted = false;
107
+ let sandboxStopped = false;
108
+ // Handle abort signal
109
+ const abortHandler = () => {
110
+ aborted = true;
111
+ if (sandbox && !sandboxStopped) {
112
+ sandboxStopped = true;
113
+ sandbox.stop().catch(() => { });
114
+ }
115
+ };
116
+ if (options.signal) {
117
+ if (options.signal.aborted) {
118
+ return {
119
+ success: false,
120
+ output: '',
121
+ error: 'Aborted before start',
122
+ duration: 0,
123
+ };
124
+ }
125
+ options.signal.addEventListener('abort', abortHandler);
126
+ }
127
+ try {
128
+ // Collect files from fixture
129
+ const allFiles = await collectLocalFiles(fixturePath);
130
+ const { workspaceFiles, testFiles } = splitTestFiles(allFiles);
131
+ // Check for abort before expensive operations
132
+ if (aborted) {
133
+ return {
134
+ success: false,
135
+ output: '',
136
+ error: 'Aborted',
137
+ duration: Date.now() - startTime,
138
+ };
139
+ }
140
+ // Create sandbox
141
+ sandbox = await createSandbox({
142
+ timeout: options.timeout,
143
+ runtime: 'node24',
144
+ backend: options.sandbox,
145
+ });
146
+ // Check for abort after sandbox creation (abort may have fired during create)
147
+ if (aborted) {
148
+ return {
149
+ success: false,
150
+ output: '',
151
+ error: 'Aborted',
152
+ duration: Date.now() - startTime,
153
+ sandboxId: sandbox.sandboxId,
154
+ };
155
+ }
156
+ // Upload workspace files (excluding tests)
157
+ await sandbox.uploadFiles(workspaceFiles);
158
+ await initGitAndCommit(sandbox);
159
+ // Run setup function if provided
160
+ if (options.setup) {
161
+ await options.setup(sandbox);
162
+ }
163
+ // Install dependencies
164
+ let installResult = await sandbox.runCommand('npm', ['install']);
165
+ if (installResult.exitCode !== 0) {
166
+ installResult = await sandbox.runCommand('npm', ['install']);
167
+ }
168
+ if (installResult.exitCode !== 0) {
169
+ const output = (installResult.stdout + installResult.stderr).trim().split('\n').slice(-10).join('\n');
170
+ throw new Error(`npm install failed (exit code ${installResult.exitCode}):\n${output}`);
171
+ }
172
+ // Install Codex CLI globally
173
+ const cliInstall = await sandbox.runCommand('npm', [
174
+ 'install',
175
+ '-g',
176
+ '@openai/codex',
177
+ ]);
178
+ if (cliInstall.exitCode !== 0) {
179
+ throw new Error(`Codex CLI install failed: ${cliInstall.stderr}`);
180
+ }
181
+ // Parse model string for query parameters (e.g. "gpt-5.2-codex?reasoningEffort=high")
182
+ const { model: baseModel, reasoningEffort } = parseModelString(options.model);
183
+ // Create Codex config directory and config file
184
+ await sandbox.runShell('mkdir -p ~/.codex');
185
+ const configContent = generateCodexConfig(baseModel, useVercelAiGateway);
186
+ await sandbox.runShell(`cat > ~/.codex/config.toml << 'EOF'
187
+ ${configContent}
188
+ EOF`);
189
+ // Verify no test files in sandbox
190
+ await verifyNoTestFiles(sandbox);
191
+ // Build Codex CLI command
192
+ // codex login sets up bearer auth for the CLI; env var provides the key for the model provider
193
+ const envVarToSet = useVercelAiGateway ? AI_GATEWAY.apiKeyEnvVar : OPENAI_DIRECT.apiKeyEnvVar;
194
+ const escapedPrompt = options.prompt.replace(/'/g, "'\\''");
195
+ const reasoningFlag = reasoningEffort ? ` -c model_reasoning_effort="${reasoningEffort}"` : '';
196
+ const codexResult = await sandbox.runShell(`echo '${options.apiKey}' | codex login --with-api-key && codex exec --model ${baseModel} --dangerously-bypass-approvals-and-sandbox --json --skip-git-repo-check${reasoningFlag} '${escapedPrompt}'`, { [envVarToSet]: options.apiKey });
197
+ agentOutput = codexResult.stdout + codexResult.stderr;
198
+ transcript = extractTranscriptFromOutput(agentOutput);
199
+ if (codexResult.exitCode !== 0) {
200
+ // Extract meaningful error from output (last few lines usually contain the error)
201
+ const errorLines = agentOutput.trim().split('\n').slice(-5).join('\n');
202
+ return {
203
+ success: false,
204
+ output: agentOutput,
205
+ transcript,
206
+ error: errorLines || `Codex CLI exited with code ${codexResult.exitCode}`,
207
+ duration: Date.now() - startTime,
208
+ sandboxId: sandbox.sandboxId,
209
+ };
210
+ }
211
+ // Upload test files for validation
212
+ await sandbox.uploadFiles(testFiles);
213
+ // Create vitest config for EVAL.ts/tsx
214
+ await createVitestConfig(sandbox);
215
+ // Inject transcript context so EVAL.ts tests can assert on agent behavior
216
+ await injectTranscriptContext(sandbox, transcript, 'codex', options.model);
217
+ // Run validation scripts
218
+ const validationResults = await runValidation(sandbox, options.scripts ?? []);
219
+ // Capture generated files
220
+ const { generatedFiles, deletedFiles } = await captureGeneratedFiles(sandbox);
221
+ return {
222
+ success: validationResults.allPassed,
223
+ output: agentOutput,
224
+ transcript,
225
+ duration: Date.now() - startTime,
226
+ testResult: validationResults.test,
227
+ scriptsResults: validationResults.scripts,
228
+ sandboxId: sandbox.sandboxId,
229
+ generatedFiles,
230
+ deletedFiles,
231
+ };
232
+ }
233
+ catch (error) {
234
+ // Check if this was an abort
235
+ if (aborted) {
236
+ return {
237
+ success: false,
238
+ output: agentOutput,
239
+ transcript,
240
+ error: 'Aborted',
241
+ duration: Date.now() - startTime,
242
+ sandboxId: sandbox?.sandboxId,
243
+ };
244
+ }
245
+ return {
246
+ success: false,
247
+ output: agentOutput,
248
+ transcript,
249
+ error: error instanceof Error ? error.message : String(error),
250
+ duration: Date.now() - startTime,
251
+ sandboxId: sandbox?.sandboxId,
252
+ };
253
+ }
254
+ finally {
255
+ // Clean up abort listener
256
+ if (options.signal) {
257
+ options.signal.removeEventListener('abort', abortHandler);
258
+ }
259
+ if (sandbox && !sandboxStopped) {
260
+ sandboxStopped = true;
261
+ await sandbox.stop();
262
+ }
263
+ }
264
+ },
265
+ };
266
+ }
267
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/lib/agents/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Cursor CLI agent implementation.
3
+ * Uses direct Cursor API access.
4
+ */
5
+ import type { Agent } from './types.js';
6
+ /**
7
+ * Create Cursor CLI agent with direct API authentication.
8
+ */
9
+ export declare function createCursorAgent(): Agent;
10
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/lib/agents/cursor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAmC,MAAM,YAAY,CAAC;AA6CzE;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,KAAK,CA0MzC"}