@yuaone/core 0.1.3 → 0.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/dist/agent-loop.d.ts +152 -0
- package/dist/agent-loop.d.ts.map +1 -1
- package/dist/agent-loop.js +893 -9
- package/dist/agent-loop.js.map +1 -1
- package/dist/benchmark-runner.d.ts +141 -0
- package/dist/benchmark-runner.d.ts.map +1 -0
- package/dist/benchmark-runner.js +526 -0
- package/dist/benchmark-runner.js.map +1 -0
- package/dist/codebase-context.d.ts +49 -0
- package/dist/codebase-context.d.ts.map +1 -1
- package/dist/codebase-context.js +146 -0
- package/dist/codebase-context.js.map +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -1
- package/dist/context-budget.d.ts +1 -1
- package/dist/context-budget.d.ts.map +1 -1
- package/dist/context-budget.js +4 -2
- package/dist/context-budget.js.map +1 -1
- package/dist/context-compressor.d.ts +1 -1
- package/dist/context-compressor.d.ts.map +1 -1
- package/dist/context-compressor.js +5 -3
- package/dist/context-compressor.js.map +1 -1
- package/dist/context-manager.d.ts +7 -1
- package/dist/context-manager.d.ts.map +1 -1
- package/dist/context-manager.js +34 -2
- package/dist/context-manager.js.map +1 -1
- package/dist/continuation-engine.d.ts +168 -0
- package/dist/continuation-engine.d.ts.map +1 -0
- package/dist/continuation-engine.js +421 -0
- package/dist/continuation-engine.js.map +1 -0
- package/dist/cost-optimizer.d.ts +159 -0
- package/dist/cost-optimizer.d.ts.map +1 -0
- package/dist/cost-optimizer.js +406 -0
- package/dist/cost-optimizer.js.map +1 -0
- package/dist/execution-engine.d.ts.map +1 -1
- package/dist/execution-engine.js +9 -4
- package/dist/execution-engine.js.map +1 -1
- package/dist/execution-policy-engine.d.ts +133 -0
- package/dist/execution-policy-engine.d.ts.map +1 -0
- package/dist/execution-policy-engine.js +367 -0
- package/dist/execution-policy-engine.js.map +1 -0
- package/dist/failure-recovery.d.ts +228 -0
- package/dist/failure-recovery.d.ts.map +1 -0
- package/dist/failure-recovery.js +664 -0
- package/dist/failure-recovery.js.map +1 -0
- package/dist/hierarchical-planner.d.ts +69 -1
- package/dist/hierarchical-planner.d.ts.map +1 -1
- package/dist/hierarchical-planner.js +117 -0
- package/dist/hierarchical-planner.js.map +1 -1
- package/dist/impact-analyzer.d.ts +92 -0
- package/dist/impact-analyzer.d.ts.map +1 -0
- package/dist/impact-analyzer.js +615 -0
- package/dist/impact-analyzer.js.map +1 -0
- package/dist/index.d.ts +28 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -1
- package/dist/llm-client.d.ts +1 -1
- package/dist/llm-client.d.ts.map +1 -1
- package/dist/llm-client.js +74 -7
- package/dist/llm-client.js.map +1 -1
- package/dist/memory-updater.d.ts +189 -0
- package/dist/memory-updater.d.ts.map +1 -0
- package/dist/memory-updater.js +481 -0
- package/dist/memory-updater.js.map +1 -0
- package/dist/prompt-defense.d.ts +59 -0
- package/dist/prompt-defense.d.ts.map +1 -0
- package/dist/prompt-defense.js +311 -0
- package/dist/prompt-defense.js.map +1 -0
- package/dist/reflexion.d.ts +211 -0
- package/dist/reflexion.d.ts.map +1 -0
- package/dist/reflexion.js +559 -0
- package/dist/reflexion.js.map +1 -0
- package/dist/system-prompt.d.ts +19 -3
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +203 -38
- package/dist/system-prompt.js.map +1 -1
- package/dist/task-classifier.d.ts +92 -0
- package/dist/task-classifier.d.ts.map +1 -0
- package/dist/task-classifier.js +566 -0
- package/dist/task-classifier.js.map +1 -0
- package/dist/token-budget.d.ts +131 -0
- package/dist/token-budget.d.ts.map +1 -0
- package/dist/token-budget.js +321 -0
- package/dist/token-budget.js.map +1 -0
- package/dist/types.d.ts +20 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +18 -1
- package/dist/types.js.map +1 -1
- package/dist/world-state.d.ts +87 -0
- package/dist/world-state.d.ts.map +1 -0
- package/dist/world-state.js +435 -0
- package/dist/world-state.js.map +1 -0
- package/package.json +11 -21
|
@@ -0,0 +1,526 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module benchmark-runner
|
|
3
|
+
* @description Runs benchmarks against the YUAN coding agent to measure performance objectively.
|
|
4
|
+
*
|
|
5
|
+
* The BenchmarkRunner does NOT instantiate AgentLoop directly (avoiding circular dependencies).
|
|
6
|
+
* Instead, it records task specs and validates results. The actual agent execution is performed
|
|
7
|
+
* by the caller (CLI or test harness) which passes in AgentLoop results.
|
|
8
|
+
*/
|
|
9
|
+
import { mkdir, readdir, readFile, writeFile, rename } from "fs/promises";
|
|
10
|
+
import { join } from "path";
|
|
11
|
+
import { exec } from "child_process";
|
|
12
|
+
import { randomUUID } from "crypto";
|
|
13
|
+
// ─── Cost Constants ───
|
|
14
|
+
/** Approximate cost per 1M tokens for estimation (Claude Sonnet-class) */
|
|
15
|
+
const COST_PER_MILLION_INPUT = 3.0;
|
|
16
|
+
const COST_PER_MILLION_OUTPUT = 15.0;
|
|
17
|
+
/** Rough ratio: assume 70% input, 30% output */
|
|
18
|
+
const INPUT_RATIO = 0.7;
|
|
19
|
+
const OUTPUT_RATIO = 0.3;
|
|
20
|
+
// ─── Helpers ───
|
|
21
|
+
/**
|
|
22
|
+
* Execute a shell command with timeout. Returns { stdout, stderr, exitCode }.
|
|
23
|
+
*/
|
|
24
|
+
function execWithTimeout(command, cwd, timeoutMs) {
|
|
25
|
+
return new Promise((resolve) => {
|
|
26
|
+
const child = exec(command, { cwd, timeout: timeoutMs, maxBuffer: 10 * 1024 * 1024 }, (error, stdout, stderr) => {
|
|
27
|
+
resolve({
|
|
28
|
+
stdout: typeof stdout === "string" ? stdout : "",
|
|
29
|
+
stderr: typeof stderr === "string" ? stderr : "",
|
|
30
|
+
exitCode: error ? error.code ?? 1 : 0,
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
// Safety: kill if still running after timeout + grace period
|
|
34
|
+
setTimeout(() => {
|
|
35
|
+
try {
|
|
36
|
+
child.kill("SIGKILL");
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// process already exited
|
|
40
|
+
}
|
|
41
|
+
}, timeoutMs + 5000);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Estimate USD cost from token count.
|
|
46
|
+
*/
|
|
47
|
+
function estimateCostUSD(tokens) {
|
|
48
|
+
const inputTokens = tokens * INPUT_RATIO;
|
|
49
|
+
const outputTokens = tokens * OUTPUT_RATIO;
|
|
50
|
+
return (inputTokens / 1_000_000) * COST_PER_MILLION_INPUT + (outputTokens / 1_000_000) * COST_PER_MILLION_OUTPUT;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Atomic write: write to temp file then rename.
|
|
54
|
+
*/
|
|
55
|
+
async function atomicWrite(filePath, content) {
|
|
56
|
+
const tmpPath = filePath + `.tmp.${randomUUID().slice(0, 8)}`;
|
|
57
|
+
await writeFile(tmpPath, content, "utf-8");
|
|
58
|
+
await rename(tmpPath, filePath);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* List files that changed between two directory snapshots (shallow compare by mtime/size).
|
|
62
|
+
* Returns relative paths.
|
|
63
|
+
*/
|
|
64
|
+
async function listChangedFiles(originalDir, modifiedDir) {
|
|
65
|
+
const changed = [];
|
|
66
|
+
async function walk(dir, base) {
|
|
67
|
+
const { readdir: rd, stat } = await import("fs/promises");
|
|
68
|
+
let entries;
|
|
69
|
+
try {
|
|
70
|
+
entries = await rd(dir, { withFileTypes: true });
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
for (const entry of entries) {
|
|
76
|
+
const rel = base ? `${base}/${entry.name}` : entry.name;
|
|
77
|
+
const fullPath = join(dir, entry.name);
|
|
78
|
+
if (entry.isDirectory()) {
|
|
79
|
+
// Skip node_modules, .git, etc.
|
|
80
|
+
if (entry.name === "node_modules" || entry.name === ".git")
|
|
81
|
+
continue;
|
|
82
|
+
await walk(fullPath, rel);
|
|
83
|
+
}
|
|
84
|
+
else if (entry.isFile()) {
|
|
85
|
+
const origPath = join(originalDir, rel);
|
|
86
|
+
try {
|
|
87
|
+
const [origStat, modStat] = await Promise.all([stat(origPath), stat(fullPath)]);
|
|
88
|
+
if (origStat.mtimeMs !== modStat.mtimeMs || origStat.size !== modStat.size) {
|
|
89
|
+
changed.push(rel);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// File exists in modified but not original → new file
|
|
94
|
+
changed.push(rel);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
await walk(modifiedDir, "");
|
|
100
|
+
return changed;
|
|
101
|
+
}
|
|
102
|
+
// ─── BenchmarkRunner ───
|
|
103
|
+
export class BenchmarkRunner {
|
|
104
|
+
config;
|
|
105
|
+
constructor(config) {
|
|
106
|
+
this.config = {
|
|
107
|
+
resultsDir: config.resultsDir || ".yuan/benchmarks",
|
|
108
|
+
maxConcurrent: config.maxConcurrent ?? 1,
|
|
109
|
+
saveResults: config.saveResults ?? true,
|
|
110
|
+
compareBaseline: config.compareBaseline ?? true,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Run a single benchmark task.
|
|
115
|
+
*
|
|
116
|
+
* This method prepares the working directory and validates the result,
|
|
117
|
+
* but does NOT call AgentLoop itself. The caller is responsible for
|
|
118
|
+
* actually running the agent between `runTask` setup and finalization.
|
|
119
|
+
*
|
|
120
|
+
* If `agentResult` is provided, it is used directly. Otherwise, a
|
|
121
|
+
* placeholder result is returned indicating the task is ready for execution.
|
|
122
|
+
*/
|
|
123
|
+
async runTask(task, agentResult) {
|
|
124
|
+
const startTime = Date.now();
|
|
125
|
+
const timeoutMs = task.timeoutMs ?? 300_000;
|
|
126
|
+
const errors = [];
|
|
127
|
+
// If no agent result provided, return a placeholder indicating setup-only mode
|
|
128
|
+
if (!agentResult) {
|
|
129
|
+
return {
|
|
130
|
+
taskId: task.id,
|
|
131
|
+
taskName: task.name,
|
|
132
|
+
success: false,
|
|
133
|
+
tokensUsed: 0,
|
|
134
|
+
durationMs: Date.now() - startTime,
|
|
135
|
+
filesChanged: [],
|
|
136
|
+
errors: ["no_agent_result: task prepared but agent was not executed"],
|
|
137
|
+
terminationReason: "no_execution",
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
// Validate with validation script if provided
|
|
141
|
+
let validationOutput;
|
|
142
|
+
let validationPassed = true;
|
|
143
|
+
if (task.validationScript) {
|
|
144
|
+
try {
|
|
145
|
+
const result = await execWithTimeout(task.validationScript, task.setupDir, Math.min(timeoutMs, 60_000));
|
|
146
|
+
validationOutput = result.stdout + (result.stderr ? `\n[stderr] ${result.stderr}` : "");
|
|
147
|
+
if (result.exitCode !== 0) {
|
|
148
|
+
validationPassed = false;
|
|
149
|
+
errors.push(`validation_failed: exit code ${result.exitCode}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
validationPassed = false;
|
|
154
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
155
|
+
errors.push(`validation_error: ${msg}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Check expected files if specified
|
|
159
|
+
if (task.expectedFiles && task.expectedFiles.length > 0) {
|
|
160
|
+
const missing = task.expectedFiles.filter((f) => !agentResult.filesChanged.includes(f));
|
|
161
|
+
if (missing.length > 0) {
|
|
162
|
+
errors.push(`missing_expected_files: ${missing.join(", ")}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Merge agent errors
|
|
166
|
+
errors.push(...agentResult.errors);
|
|
167
|
+
// Determine success: no fatal errors and validation passed
|
|
168
|
+
const success = validationPassed && agentResult.errors.length === 0;
|
|
169
|
+
const durationMs = Date.now() - startTime;
|
|
170
|
+
return {
|
|
171
|
+
taskId: task.id,
|
|
172
|
+
taskName: task.name,
|
|
173
|
+
success,
|
|
174
|
+
tokensUsed: agentResult.tokensUsed,
|
|
175
|
+
durationMs,
|
|
176
|
+
filesChanged: agentResult.filesChanged,
|
|
177
|
+
errors,
|
|
178
|
+
validationOutput,
|
|
179
|
+
terminationReason: agentResult.terminationReason,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Run all tasks in a benchmark suite.
|
|
184
|
+
*
|
|
185
|
+
* Tasks are run sequentially by default, or concurrently up to maxConcurrent.
|
|
186
|
+
* Each task must be provided with an agent result via the `taskResults` map.
|
|
187
|
+
*/
|
|
188
|
+
async runSuite(tasks, taskResults) {
|
|
189
|
+
const results = [];
|
|
190
|
+
const maxConcurrent = this.config.maxConcurrent;
|
|
191
|
+
if (maxConcurrent <= 1) {
|
|
192
|
+
// Sequential execution
|
|
193
|
+
for (const task of tasks) {
|
|
194
|
+
const agentResult = taskResults?.get(task.id);
|
|
195
|
+
const result = await this.runTask(task, agentResult);
|
|
196
|
+
results.push(result);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
// Concurrent execution in batches
|
|
201
|
+
for (let i = 0; i < tasks.length; i += maxConcurrent) {
|
|
202
|
+
const batch = tasks.slice(i, i + maxConcurrent);
|
|
203
|
+
const batchResults = await Promise.all(batch.map((task) => {
|
|
204
|
+
const agentResult = taskResults?.get(task.id);
|
|
205
|
+
return this.runTask(task, agentResult);
|
|
206
|
+
}));
|
|
207
|
+
results.push(...batchResults);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Aggregate stats
|
|
211
|
+
const passed = results.filter((r) => r.success).length;
|
|
212
|
+
const failed = results.length - passed;
|
|
213
|
+
const totalTokens = results.reduce((sum, r) => sum + r.tokensUsed, 0);
|
|
214
|
+
const totalDuration = results.reduce((sum, r) => sum + r.durationMs, 0);
|
|
215
|
+
// Group by category
|
|
216
|
+
const byCategory = {};
|
|
217
|
+
for (const task of tasks) {
|
|
218
|
+
if (!byCategory[task.category]) {
|
|
219
|
+
byCategory[task.category] = { passed: 0, total: 0 };
|
|
220
|
+
}
|
|
221
|
+
byCategory[task.category].total++;
|
|
222
|
+
const result = results.find((r) => r.taskId === task.id);
|
|
223
|
+
if (result?.success) {
|
|
224
|
+
byCategory[task.category].passed++;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Group by difficulty
|
|
228
|
+
const byDifficulty = {};
|
|
229
|
+
for (const task of tasks) {
|
|
230
|
+
if (!byDifficulty[task.difficulty]) {
|
|
231
|
+
byDifficulty[task.difficulty] = { passed: 0, total: 0 };
|
|
232
|
+
}
|
|
233
|
+
byDifficulty[task.difficulty].total++;
|
|
234
|
+
const result = results.find((r) => r.taskId === task.id);
|
|
235
|
+
if (result?.success) {
|
|
236
|
+
byDifficulty[task.difficulty].passed++;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// Compare with baseline if enabled
|
|
240
|
+
let regressions = [];
|
|
241
|
+
let improvements = [];
|
|
242
|
+
if (this.config.compareBaseline) {
|
|
243
|
+
const baseline = await this.loadBaseline();
|
|
244
|
+
if (baseline) {
|
|
245
|
+
const summary = {
|
|
246
|
+
totalTasks: tasks.length,
|
|
247
|
+
passed,
|
|
248
|
+
failed,
|
|
249
|
+
successRate: tasks.length > 0 ? passed / tasks.length : 0,
|
|
250
|
+
avgTokensPerTask: tasks.length > 0 ? totalTokens / tasks.length : 0,
|
|
251
|
+
avgDurationMs: tasks.length > 0 ? totalDuration / tasks.length : 0,
|
|
252
|
+
totalCostEstimateUSD: estimateCostUSD(totalTokens),
|
|
253
|
+
byCategory,
|
|
254
|
+
byDifficulty,
|
|
255
|
+
regressions: [],
|
|
256
|
+
improvements: [],
|
|
257
|
+
timestamp: new Date().toISOString(),
|
|
258
|
+
results,
|
|
259
|
+
};
|
|
260
|
+
const comparison = this.compareWithBaseline(summary, baseline);
|
|
261
|
+
regressions = comparison.regressions;
|
|
262
|
+
improvements = comparison.improvements;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
const summary = {
|
|
266
|
+
totalTasks: tasks.length,
|
|
267
|
+
passed,
|
|
268
|
+
failed,
|
|
269
|
+
successRate: tasks.length > 0 ? passed / tasks.length : 0,
|
|
270
|
+
avgTokensPerTask: tasks.length > 0 ? totalTokens / tasks.length : 0,
|
|
271
|
+
avgDurationMs: tasks.length > 0 ? totalDuration / tasks.length : 0,
|
|
272
|
+
totalCostEstimateUSD: estimateCostUSD(totalTokens),
|
|
273
|
+
byCategory,
|
|
274
|
+
byDifficulty,
|
|
275
|
+
regressions,
|
|
276
|
+
improvements,
|
|
277
|
+
timestamp: new Date().toISOString(),
|
|
278
|
+
results,
|
|
279
|
+
};
|
|
280
|
+
// Save results if configured
|
|
281
|
+
if (this.config.saveResults) {
|
|
282
|
+
await this.saveResults(summary);
|
|
283
|
+
}
|
|
284
|
+
return summary;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Load the most recent baseline benchmark result from resultsDir.
|
|
288
|
+
* Returns null if no previous results exist.
|
|
289
|
+
*/
|
|
290
|
+
async loadBaseline() {
|
|
291
|
+
try {
|
|
292
|
+
const files = await readdir(this.config.resultsDir);
|
|
293
|
+
const benchmarkFiles = files
|
|
294
|
+
.filter((f) => f.startsWith("benchmark-") && f.endsWith(".json"))
|
|
295
|
+
.sort()
|
|
296
|
+
.reverse();
|
|
297
|
+
if (benchmarkFiles.length === 0)
|
|
298
|
+
return null;
|
|
299
|
+
const latestFile = join(this.config.resultsDir, benchmarkFiles[0]);
|
|
300
|
+
const content = await readFile(latestFile, "utf-8");
|
|
301
|
+
return JSON.parse(content);
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Save benchmark results to disk with atomic write.
|
|
309
|
+
* Returns the path to the saved file.
|
|
310
|
+
*/
|
|
311
|
+
async saveResults(summary) {
|
|
312
|
+
await mkdir(this.config.resultsDir, { recursive: true });
|
|
313
|
+
// Format timestamp for filename: 2026-03-09T12-30-00Z
|
|
314
|
+
const ts = summary.timestamp.replace(/:/g, "-").replace(/\.\d+Z$/, "Z");
|
|
315
|
+
const filename = `benchmark-${ts}.json`;
|
|
316
|
+
const filePath = join(this.config.resultsDir, filename);
|
|
317
|
+
const content = JSON.stringify(summary, null, 2);
|
|
318
|
+
await atomicWrite(filePath, content);
|
|
319
|
+
return filePath;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Compare current results with a baseline.
|
|
323
|
+
* Identifies regressions (was pass, now fail) and improvements (was fail, now pass).
|
|
324
|
+
*/
|
|
325
|
+
compareWithBaseline(current, baseline) {
|
|
326
|
+
const regressions = [];
|
|
327
|
+
const improvements = [];
|
|
328
|
+
// Build lookup maps from results arrays
|
|
329
|
+
const baselineMap = new Map();
|
|
330
|
+
for (const result of baseline.results ?? []) {
|
|
331
|
+
baselineMap.set(result.taskId, result.success);
|
|
332
|
+
}
|
|
333
|
+
const currentMap = new Map();
|
|
334
|
+
for (const result of current.results ?? []) {
|
|
335
|
+
currentMap.set(result.taskId, result.success);
|
|
336
|
+
}
|
|
337
|
+
// Compare tasks that exist in both runs
|
|
338
|
+
for (const [taskId, currentSuccess] of currentMap) {
|
|
339
|
+
const baselineSuccess = baselineMap.get(taskId);
|
|
340
|
+
if (baselineSuccess === undefined)
|
|
341
|
+
continue; // New task, skip
|
|
342
|
+
if (baselineSuccess && !currentSuccess) {
|
|
343
|
+
regressions.push(taskId);
|
|
344
|
+
}
|
|
345
|
+
else if (!baselineSuccess && currentSuccess) {
|
|
346
|
+
improvements.push(taskId);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return { regressions, improvements };
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Generate a Markdown report from benchmark summary.
|
|
353
|
+
*/
|
|
354
|
+
generateReport(summary) {
|
|
355
|
+
const lines = [];
|
|
356
|
+
lines.push("# YUAN Benchmark Report");
|
|
357
|
+
lines.push("");
|
|
358
|
+
lines.push(`**Date:** ${summary.timestamp}`);
|
|
359
|
+
lines.push("");
|
|
360
|
+
// ─── Overview ───
|
|
361
|
+
lines.push("## Overview");
|
|
362
|
+
lines.push("");
|
|
363
|
+
lines.push("| Metric | Value |");
|
|
364
|
+
lines.push("|--------|-------|");
|
|
365
|
+
lines.push(`| Total Tasks | ${summary.totalTasks} |`);
|
|
366
|
+
lines.push(`| Passed | ${summary.passed} |`);
|
|
367
|
+
lines.push(`| Failed | ${summary.failed} |`);
|
|
368
|
+
lines.push(`| Success Rate | ${(summary.successRate * 100).toFixed(1)}% |`);
|
|
369
|
+
lines.push(`| Avg Tokens/Task | ${Math.round(summary.avgTokensPerTask).toLocaleString()} |`);
|
|
370
|
+
lines.push(`| Avg Duration/Task | ${(summary.avgDurationMs / 1000).toFixed(1)}s |`);
|
|
371
|
+
lines.push(`| Est. Total Cost | $${summary.totalCostEstimateUSD.toFixed(4)} |`);
|
|
372
|
+
lines.push("");
|
|
373
|
+
// ─── By Category ───
|
|
374
|
+
lines.push("## Results by Category");
|
|
375
|
+
lines.push("");
|
|
376
|
+
lines.push("| Category | Passed | Total | Rate |");
|
|
377
|
+
lines.push("|----------|--------|-------|------|");
|
|
378
|
+
for (const [category, stats] of Object.entries(summary.byCategory)) {
|
|
379
|
+
const rate = stats.total > 0 ? ((stats.passed / stats.total) * 100).toFixed(0) : "0";
|
|
380
|
+
lines.push(`| ${category} | ${stats.passed} | ${stats.total} | ${rate}% |`);
|
|
381
|
+
}
|
|
382
|
+
lines.push("");
|
|
383
|
+
// ─── By Difficulty ───
|
|
384
|
+
lines.push("## Results by Difficulty");
|
|
385
|
+
lines.push("");
|
|
386
|
+
lines.push("| Difficulty | Passed | Total | Rate |");
|
|
387
|
+
lines.push("|------------|--------|-------|------|");
|
|
388
|
+
for (const [difficulty, stats] of Object.entries(summary.byDifficulty)) {
|
|
389
|
+
const rate = stats.total > 0 ? ((stats.passed / stats.total) * 100).toFixed(0) : "0";
|
|
390
|
+
lines.push(`| ${difficulty} | ${stats.passed} | ${stats.total} | ${rate}% |`);
|
|
391
|
+
}
|
|
392
|
+
lines.push("");
|
|
393
|
+
// ─── Regressions & Improvements ───
|
|
394
|
+
if (summary.regressions.length > 0) {
|
|
395
|
+
lines.push("## Regressions");
|
|
396
|
+
lines.push("");
|
|
397
|
+
lines.push("Tasks that previously passed but now fail:");
|
|
398
|
+
lines.push("");
|
|
399
|
+
for (const id of summary.regressions) {
|
|
400
|
+
lines.push(`- \`${id}\``);
|
|
401
|
+
}
|
|
402
|
+
lines.push("");
|
|
403
|
+
}
|
|
404
|
+
if (summary.improvements.length > 0) {
|
|
405
|
+
lines.push("## Improvements");
|
|
406
|
+
lines.push("");
|
|
407
|
+
lines.push("Tasks that previously failed but now pass:");
|
|
408
|
+
lines.push("");
|
|
409
|
+
for (const id of summary.improvements) {
|
|
410
|
+
lines.push(`- \`${id}\``);
|
|
411
|
+
}
|
|
412
|
+
lines.push("");
|
|
413
|
+
}
|
|
414
|
+
// ─── Individual Results ───
|
|
415
|
+
if (summary.results && summary.results.length > 0) {
|
|
416
|
+
lines.push("## Task Details");
|
|
417
|
+
lines.push("");
|
|
418
|
+
lines.push("| Task | Status | Tokens | Duration | Reason |");
|
|
419
|
+
lines.push("|------|--------|--------|----------|--------|");
|
|
420
|
+
for (const r of summary.results) {
|
|
421
|
+
const status = r.success ? "PASS" : "FAIL";
|
|
422
|
+
const tokens = r.tokensUsed.toLocaleString();
|
|
423
|
+
const duration = `${(r.durationMs / 1000).toFixed(1)}s`;
|
|
424
|
+
const reason = r.terminationReason.slice(0, 40);
|
|
425
|
+
lines.push(`| ${r.taskName} | ${status} | ${tokens} | ${duration} | ${reason} |`);
|
|
426
|
+
}
|
|
427
|
+
lines.push("");
|
|
428
|
+
// ─── Error Details ───
|
|
429
|
+
const failedResults = summary.results.filter((r) => !r.success && r.errors.length > 0);
|
|
430
|
+
if (failedResults.length > 0) {
|
|
431
|
+
lines.push("## Error Details");
|
|
432
|
+
lines.push("");
|
|
433
|
+
for (const r of failedResults) {
|
|
434
|
+
lines.push(`### ${r.taskName} (\`${r.taskId}\`)`);
|
|
435
|
+
lines.push("");
|
|
436
|
+
for (const err of r.errors) {
|
|
437
|
+
lines.push(`- ${err}`);
|
|
438
|
+
}
|
|
439
|
+
if (r.validationOutput) {
|
|
440
|
+
lines.push("");
|
|
441
|
+
lines.push("**Validation output:**");
|
|
442
|
+
lines.push("```");
|
|
443
|
+
lines.push(r.validationOutput.slice(0, 500));
|
|
444
|
+
lines.push("```");
|
|
445
|
+
}
|
|
446
|
+
lines.push("");
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
return lines.join("\n");
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Built-in sample tasks for quick testing.
|
|
454
|
+
* These are simple tasks that can validate the benchmark infrastructure itself.
|
|
455
|
+
*/
|
|
456
|
+
static getSampleTasks() {
|
|
457
|
+
return [
|
|
458
|
+
{
|
|
459
|
+
id: "fix-typo",
|
|
460
|
+
name: "Fix Typo",
|
|
461
|
+
description: "Fix a typo in a README file: 'recieve' should be 'receive'",
|
|
462
|
+
category: "bug_fix",
|
|
463
|
+
difficulty: "easy",
|
|
464
|
+
setupDir: "",
|
|
465
|
+
prompt: "Fix the typo in README.md: 'recieve' should be 'receive'",
|
|
466
|
+
expectedFiles: ["README.md"],
|
|
467
|
+
validationScript: "grep -q 'receive' README.md && ! grep -q 'recieve' README.md",
|
|
468
|
+
maxTokens: 1000,
|
|
469
|
+
timeoutMs: 60_000,
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
id: "add-function",
|
|
473
|
+
name: "Add Function",
|
|
474
|
+
description: "Add a simple utility function that returns the sum of two numbers",
|
|
475
|
+
category: "feature",
|
|
476
|
+
difficulty: "easy",
|
|
477
|
+
setupDir: "",
|
|
478
|
+
prompt: "Add an exported function 'add(a: number, b: number): number' to src/utils.ts that returns the sum of a and b",
|
|
479
|
+
expectedFiles: ["src/utils.ts"],
|
|
480
|
+
validationScript: "grep -q 'export function add' src/utils.ts",
|
|
481
|
+
maxTokens: 2000,
|
|
482
|
+
timeoutMs: 60_000,
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
id: "rename-variable",
|
|
486
|
+
name: "Rename Variable",
|
|
487
|
+
description: "Rename all occurrences of 'data' to 'payload' in src/handler.ts",
|
|
488
|
+
category: "refactor",
|
|
489
|
+
difficulty: "medium",
|
|
490
|
+
setupDir: "",
|
|
491
|
+
prompt: "Rename the variable 'data' to 'payload' in src/handler.ts (all occurrences)",
|
|
492
|
+
expectedFiles: ["src/handler.ts"],
|
|
493
|
+
validationScript: "grep -q 'payload' src/handler.ts && ! grep -q 'const data' src/handler.ts",
|
|
494
|
+
maxTokens: 5000,
|
|
495
|
+
timeoutMs: 120_000,
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
id: "add-unit-test",
|
|
499
|
+
name: "Add Unit Test",
|
|
500
|
+
description: "Add unit tests for the multiply function in src/math.ts",
|
|
501
|
+
category: "test",
|
|
502
|
+
difficulty: "medium",
|
|
503
|
+
setupDir: "",
|
|
504
|
+
prompt: "Write unit tests for the multiply(a, b) function in src/math.ts. Create src/__tests__/math.test.ts with at least 3 test cases including edge cases (zero, negative numbers).",
|
|
505
|
+
expectedFiles: ["src/__tests__/math.test.ts"],
|
|
506
|
+
validationScript: "test -f src/__tests__/math.test.ts && grep -c 'test\\|it(' src/__tests__/math.test.ts",
|
|
507
|
+
maxTokens: 8000,
|
|
508
|
+
timeoutMs: 180_000,
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
id: "multi-file-refactor",
|
|
512
|
+
name: "Multi-File Refactor",
|
|
513
|
+
description: "Extract a shared interface from two files that define similar types, and update both files to import from the shared module",
|
|
514
|
+
category: "refactor",
|
|
515
|
+
difficulty: "hard",
|
|
516
|
+
setupDir: "",
|
|
517
|
+
prompt: "Both src/user-service.ts and src/admin-service.ts define a 'UserRecord' interface with the same fields. Extract it to src/types/user.ts and update both files to import from there.",
|
|
518
|
+
expectedFiles: ["src/types/user.ts", "src/user-service.ts", "src/admin-service.ts"],
|
|
519
|
+
validationScript: 'test -f src/types/user.ts && grep -q "import.*UserRecord.*from" src/user-service.ts && grep -q "import.*UserRecord.*from" src/admin-service.ts',
|
|
520
|
+
maxTokens: 15000,
|
|
521
|
+
timeoutMs: 300_000,
|
|
522
|
+
},
|
|
523
|
+
];
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
//# sourceMappingURL=benchmark-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark-runner.js","sourceRoot":"","sources":["../src/benchmark-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -131,6 +131,24 @@ export interface BlastRadiusResult {
|
|
|
131
131
|
/** Overall risk assessment */
|
|
132
132
|
riskLevel: "low" | "medium" | "high";
|
|
133
133
|
}
|
|
134
|
+
/** A file related through the import graph. */
|
|
135
|
+
export interface RelatedFile {
|
|
136
|
+
/** Absolute file path */
|
|
137
|
+
path: string;
|
|
138
|
+
/** How this file is related to the queried file */
|
|
139
|
+
relation: "imports" | "imported_by" | "co_changed";
|
|
140
|
+
/** Distance in the import graph from the queried file */
|
|
141
|
+
depth: number;
|
|
142
|
+
}
|
|
143
|
+
/** An entry in a call chain search result. */
|
|
144
|
+
export interface CallChainEntry {
|
|
145
|
+
/** Absolute file path containing the call */
|
|
146
|
+
file: string;
|
|
147
|
+
/** Line number of the call site (1-based) */
|
|
148
|
+
line: number;
|
|
149
|
+
/** Source line text around the call */
|
|
150
|
+
context: string;
|
|
151
|
+
}
|
|
134
152
|
/**
|
|
135
153
|
* Codebase Context Engine — indexes TypeScript/JavaScript projects and provides
|
|
136
154
|
* symbol lookup, call graph analysis, blast radius estimation, and semantic search.
|
|
@@ -228,6 +246,37 @@ export declare class CodebaseContext {
|
|
|
228
246
|
* @returns Blast radius analysis
|
|
229
247
|
*/
|
|
230
248
|
getBlastRadius(file: string): BlastRadiusResult;
|
|
249
|
+
/**
|
|
250
|
+
* Find files related to the given file through imports/exports.
|
|
251
|
+
* Walks the import graph up to `maxDepth` hops.
|
|
252
|
+
*
|
|
253
|
+
* @param filePath - Absolute or project-relative path of the file
|
|
254
|
+
* @param maxDepth - Maximum depth to walk (default 2)
|
|
255
|
+
* @returns Array of related files with relation type and depth
|
|
256
|
+
*/
|
|
257
|
+
getRelatedFiles(filePath: string, maxDepth?: number): Promise<RelatedFile[]>;
|
|
258
|
+
/**
|
|
259
|
+
* Find where a function is called across the project.
|
|
260
|
+
* Searches all indexed file contents for occurrences of the function name
|
|
261
|
+
* that look like call sites.
|
|
262
|
+
*
|
|
263
|
+
* @param functionName - Name of the function to search for
|
|
264
|
+
* @param filePath - File where the function is defined (excluded from results)
|
|
265
|
+
* @returns Array of call chain entries with file, line, and context
|
|
266
|
+
*/
|
|
267
|
+
getCallChain(functionName: string, filePath: string): Promise<CallChainEntry[]>;
|
|
268
|
+
/**
|
|
269
|
+
* Calculate the impact radius of a file — how many files depend on it
|
|
270
|
+
* directly and transitively, with a risk score.
|
|
271
|
+
*
|
|
272
|
+
* @param filePath - Absolute or project-relative path of the file
|
|
273
|
+
* @returns Direct/transitive dependent counts and a risk score
|
|
274
|
+
*/
|
|
275
|
+
getImpactRadius(filePath: string): Promise<{
|
|
276
|
+
directDependents: number;
|
|
277
|
+
transitiveDependents: number;
|
|
278
|
+
riskScore: number;
|
|
279
|
+
}>;
|
|
231
280
|
/**
|
|
232
281
|
* Search symbols by a query string using token-based fuzzy matching.
|
|
233
282
|
* Splits the query into tokens and scores symbols by match count against
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codebase-context.d.ts","sourceRoot":"","sources":["../src/codebase-context.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codebase-context.d.ts","sourceRoot":"","sources":["../src/codebase-context.ts"],"names":[],"mappings":"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"}
|