autodocs-engine 0.5.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/LICENSE +21 -0
- package/README.md +185 -0
- package/dist/analysis-builder.d.ts +13 -0
- package/dist/analysis-builder.js +268 -0
- package/dist/analysis-builder.js.map +1 -0
- package/dist/anti-pattern-detector.d.ts +9 -0
- package/dist/anti-pattern-detector.js +58 -0
- package/dist/anti-pattern-detector.js.map +1 -0
- package/dist/architecture-detector.d.ts +7 -0
- package/dist/architecture-detector.js +212 -0
- package/dist/architecture-detector.js.map +1 -0
- package/dist/ast-parser.d.ts +5 -0
- package/dist/ast-parser.js +635 -0
- package/dist/ast-parser.js.map +1 -0
- package/dist/benchmark/code-generator.d.ts +20 -0
- package/dist/benchmark/code-generator.js +206 -0
- package/dist/benchmark/code-generator.js.map +1 -0
- package/dist/benchmark/pr-miner.d.ts +61 -0
- package/dist/benchmark/pr-miner.js +304 -0
- package/dist/benchmark/pr-miner.js.map +1 -0
- package/dist/benchmark/pr-runner.d.ts +58 -0
- package/dist/benchmark/pr-runner.js +346 -0
- package/dist/benchmark/pr-runner.js.map +1 -0
- package/dist/benchmark/pr-scorer.d.ts +48 -0
- package/dist/benchmark/pr-scorer.js +222 -0
- package/dist/benchmark/pr-scorer.js.map +1 -0
- package/dist/benchmark/pr-task-gen.d.ts +16 -0
- package/dist/benchmark/pr-task-gen.js +129 -0
- package/dist/benchmark/pr-task-gen.js.map +1 -0
- package/dist/benchmark/report.d.ts +9 -0
- package/dist/benchmark/report.js +131 -0
- package/dist/benchmark/report.js.map +1 -0
- package/dist/benchmark/runner.d.ts +6 -0
- package/dist/benchmark/runner.js +183 -0
- package/dist/benchmark/runner.js.map +1 -0
- package/dist/benchmark/scorer.d.ts +6 -0
- package/dist/benchmark/scorer.js +549 -0
- package/dist/benchmark/scorer.js.map +1 -0
- package/dist/benchmark/shuffler.d.ts +5 -0
- package/dist/benchmark/shuffler.js +70 -0
- package/dist/benchmark/shuffler.js.map +1 -0
- package/dist/benchmark/statistics.d.ts +36 -0
- package/dist/benchmark/statistics.js +159 -0
- package/dist/benchmark/statistics.js.map +1 -0
- package/dist/benchmark/task-generator.d.ts +20 -0
- package/dist/benchmark/task-generator.js +388 -0
- package/dist/benchmark/task-generator.js.map +1 -0
- package/dist/benchmark/types.d.ts +111 -0
- package/dist/benchmark/types.js +3 -0
- package/dist/benchmark/types.js.map +1 -0
- package/dist/bin/autodocs-engine.d.ts +2 -0
- package/dist/bin/autodocs-engine.js +296 -0
- package/dist/bin/autodocs-engine.js.map +1 -0
- package/dist/bin/benchmark.d.ts +14 -0
- package/dist/bin/benchmark.js +172 -0
- package/dist/bin/benchmark.js.map +1 -0
- package/dist/bin/check.d.ts +13 -0
- package/dist/bin/check.js +79 -0
- package/dist/bin/check.js.map +1 -0
- package/dist/bin/init.d.ts +11 -0
- package/dist/bin/init.js +268 -0
- package/dist/bin/init.js.map +1 -0
- package/dist/bin/serve.d.ts +4 -0
- package/dist/bin/serve.js +29 -0
- package/dist/bin/serve.js.map +1 -0
- package/dist/budget-validator.d.ts +22 -0
- package/dist/budget-validator.js +119 -0
- package/dist/budget-validator.js.map +1 -0
- package/dist/command-extractor.d.ts +10 -0
- package/dist/command-extractor.js +276 -0
- package/dist/command-extractor.js.map +1 -0
- package/dist/config-analyzer.d.ts +5 -0
- package/dist/config-analyzer.js +364 -0
- package/dist/config-analyzer.js.map +1 -0
- package/dist/config.d.ts +33 -0
- package/dist/config.js +172 -0
- package/dist/config.js.map +1 -0
- package/dist/contribution-patterns.d.ts +6 -0
- package/dist/contribution-patterns.js +263 -0
- package/dist/contribution-patterns.js.map +1 -0
- package/dist/convention-extractor.d.ts +17 -0
- package/dist/convention-extractor.js +90 -0
- package/dist/convention-extractor.js.map +1 -0
- package/dist/cross-package.d.ts +5 -0
- package/dist/cross-package.js +71 -0
- package/dist/cross-package.js.map +1 -0
- package/dist/dependency-analyzer.d.ts +5 -0
- package/dist/dependency-analyzer.js +233 -0
- package/dist/dependency-analyzer.js.map +1 -0
- package/dist/detectors/build-tool.d.ts +2 -0
- package/dist/detectors/build-tool.js +67 -0
- package/dist/detectors/build-tool.js.map +1 -0
- package/dist/detectors/component-patterns.d.ts +2 -0
- package/dist/detectors/component-patterns.js +49 -0
- package/dist/detectors/component-patterns.js.map +1 -0
- package/dist/detectors/data-fetching.d.ts +2 -0
- package/dist/detectors/data-fetching.js +127 -0
- package/dist/detectors/data-fetching.js.map +1 -0
- package/dist/detectors/database.d.ts +2 -0
- package/dist/detectors/database.js +54 -0
- package/dist/detectors/database.js.map +1 -0
- package/dist/detectors/error-handling.d.ts +2 -0
- package/dist/detectors/error-handling.js +47 -0
- package/dist/detectors/error-handling.js.map +1 -0
- package/dist/detectors/export-patterns.d.ts +2 -0
- package/dist/detectors/export-patterns.js +64 -0
- package/dist/detectors/export-patterns.js.map +1 -0
- package/dist/detectors/file-naming.d.ts +2 -0
- package/dist/detectors/file-naming.js +74 -0
- package/dist/detectors/file-naming.js.map +1 -0
- package/dist/detectors/graphql-patterns.d.ts +2 -0
- package/dist/detectors/graphql-patterns.js +47 -0
- package/dist/detectors/graphql-patterns.js.map +1 -0
- package/dist/detectors/hook-patterns.d.ts +2 -0
- package/dist/detectors/hook-patterns.js +105 -0
- package/dist/detectors/hook-patterns.js.map +1 -0
- package/dist/detectors/import-patterns.d.ts +2 -0
- package/dist/detectors/import-patterns.js +88 -0
- package/dist/detectors/import-patterns.js.map +1 -0
- package/dist/detectors/telemetry-patterns.d.ts +2 -0
- package/dist/detectors/telemetry-patterns.js +42 -0
- package/dist/detectors/telemetry-patterns.js.map +1 -0
- package/dist/detectors/test-framework-ecosystem.d.ts +2 -0
- package/dist/detectors/test-framework-ecosystem.js +95 -0
- package/dist/detectors/test-framework-ecosystem.js.map +1 -0
- package/dist/detectors/test-patterns.d.ts +2 -0
- package/dist/detectors/test-patterns.js +60 -0
- package/dist/detectors/test-patterns.js.map +1 -0
- package/dist/detectors/web-framework.d.ts +2 -0
- package/dist/detectors/web-framework.js +51 -0
- package/dist/detectors/web-framework.js.map +1 -0
- package/dist/deterministic-formatter.d.ts +54 -0
- package/dist/deterministic-formatter.js +922 -0
- package/dist/deterministic-formatter.js.map +1 -0
- package/dist/diff-analyzer.d.ts +7 -0
- package/dist/diff-analyzer.js +126 -0
- package/dist/diff-analyzer.js.map +1 -0
- package/dist/example-extractor.d.ts +6 -0
- package/dist/example-extractor.js +115 -0
- package/dist/example-extractor.js.map +1 -0
- package/dist/existing-docs.d.ts +36 -0
- package/dist/existing-docs.js +257 -0
- package/dist/existing-docs.js.map +1 -0
- package/dist/file-discovery.d.ts +6 -0
- package/dist/file-discovery.js +154 -0
- package/dist/file-discovery.js.map +1 -0
- package/dist/git-history.d.ts +41 -0
- package/dist/git-history.js +401 -0
- package/dist/git-history.js.map +1 -0
- package/dist/impact-classifier.d.ts +22 -0
- package/dist/impact-classifier.js +87 -0
- package/dist/impact-classifier.js.map +1 -0
- package/dist/impact-radius.d.ts +23 -0
- package/dist/impact-radius.js +130 -0
- package/dist/impact-radius.js.map +1 -0
- package/dist/import-chain.d.ts +12 -0
- package/dist/import-chain.js +93 -0
- package/dist/import-chain.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/inferability.d.ts +16 -0
- package/dist/inferability.js +142 -0
- package/dist/inferability.js.map +1 -0
- package/dist/llm/adapter.d.ts +33 -0
- package/dist/llm/adapter.js +202 -0
- package/dist/llm/adapter.js.map +1 -0
- package/dist/llm/client.d.ts +5 -0
- package/dist/llm/client.js +68 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/llm/hierarchical.d.ts +23 -0
- package/dist/llm/hierarchical.js +126 -0
- package/dist/llm/hierarchical.js.map +1 -0
- package/dist/llm/serializer.d.ts +19 -0
- package/dist/llm/serializer.js +363 -0
- package/dist/llm/serializer.js.map +1 -0
- package/dist/llm/template-selector.d.ts +7 -0
- package/dist/llm/template-selector.js +21 -0
- package/dist/llm/template-selector.js.map +1 -0
- package/dist/llm-adapter.d.ts +2 -0
- package/dist/llm-adapter.js +5 -0
- package/dist/llm-adapter.js.map +1 -0
- package/dist/mcp/cache.d.ts +30 -0
- package/dist/mcp/cache.js +112 -0
- package/dist/mcp/cache.js.map +1 -0
- package/dist/mcp/errors.d.ts +21 -0
- package/dist/mcp/errors.js +27 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/queries.d.ts +27 -0
- package/dist/mcp/queries.js +121 -0
- package/dist/mcp/queries.js.map +1 -0
- package/dist/mcp/server.d.ts +14 -0
- package/dist/mcp/server.js +131 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +39 -0
- package/dist/mcp/tools.js +249 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mermaid-generator.d.ts +6 -0
- package/dist/mermaid-generator.js +59 -0
- package/dist/mermaid-generator.js.map +1 -0
- package/dist/meta-tool-detector.d.ts +23 -0
- package/dist/meta-tool-detector.js +177 -0
- package/dist/meta-tool-detector.js.map +1 -0
- package/dist/output-validator.d.ts +6 -0
- package/dist/output-validator.js +471 -0
- package/dist/output-validator.js.map +1 -0
- package/dist/pattern-fingerprinter.d.ts +7 -0
- package/dist/pattern-fingerprinter.js +241 -0
- package/dist/pattern-fingerprinter.js.map +1 -0
- package/dist/pipeline.d.ts +5 -0
- package/dist/pipeline.js +374 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/plugin-loader.d.ts +19 -0
- package/dist/plugin-loader.js +124 -0
- package/dist/plugin-loader.js.map +1 -0
- package/dist/role-inferrer.d.ts +5 -0
- package/dist/role-inferrer.js +159 -0
- package/dist/role-inferrer.js.map +1 -0
- package/dist/symbol-graph.d.ts +11 -0
- package/dist/symbol-graph.js +613 -0
- package/dist/symbol-graph.js.map +1 -0
- package/dist/templates/agents-md.d.ts +20 -0
- package/dist/templates/agents-md.js +346 -0
- package/dist/templates/agents-md.js.map +1 -0
- package/dist/templates/claude-md.d.ts +4 -0
- package/dist/templates/claude-md.js +23 -0
- package/dist/templates/claude-md.js.map +1 -0
- package/dist/templates/cursorrules.d.ts +4 -0
- package/dist/templates/cursorrules.js +18 -0
- package/dist/templates/cursorrules.js.map +1 -0
- package/dist/tier-classifier.d.ts +7 -0
- package/dist/tier-classifier.js +32 -0
- package/dist/tier-classifier.js.map +1 -0
- package/dist/types.d.ts +428 -0
- package/dist/types.js +42 -0
- package/dist/types.js.map +1 -0
- package/dist/workflow-rules.d.ts +18 -0
- package/dist/workflow-rules.js +131 -0
- package/dist/workflow-rules.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
// src/benchmark/task-generator.ts — Generate benchmark tasks from ContributionPatterns
|
|
2
|
+
// Tasks are self-referential: the engine tests whether its own AGENTS.md helps AI follow
|
|
3
|
+
// the patterns the engine detected.
|
|
4
|
+
import { readFileSync, readdirSync, statSync } from "node:fs";
|
|
5
|
+
import { join, basename, relative } from "node:path";
|
|
6
|
+
import { SOURCE_EXTENSIONS } from "../types.js";
|
|
7
|
+
// ─── Constants ───────────────────────────────────────────────────────────────
|
|
8
|
+
const MAX_SIBLING_LINES = 100;
|
|
9
|
+
const TASK_NAME_POOL = [
|
|
10
|
+
"import-ordering", "error-boundary", "accessibility", "keyboard-navigation",
|
|
11
|
+
"dark-mode", "internationalization", "pagination", "search-filter",
|
|
12
|
+
"form-validation", "notification", "authentication", "rate-limiting",
|
|
13
|
+
"caching", "retry-logic", "health-check", "metric-collection",
|
|
14
|
+
];
|
|
15
|
+
// ─── Public API ──────────────────────────────────────────────────────────────
|
|
16
|
+
/**
|
|
17
|
+
* Generate benchmark tasks from analysis results.
|
|
18
|
+
* Returns tasks sorted by tier (A > B > C) with deterministic sibling selection.
|
|
19
|
+
*/
|
|
20
|
+
export function generateTasksFromAnalysis(analysis, repoPath, maxTasks = 20) {
|
|
21
|
+
const tasks = [];
|
|
22
|
+
for (const pkg of analysis.packages) {
|
|
23
|
+
const patterns = pkg.contributionPatterns ?? [];
|
|
24
|
+
const conventions = pkg.conventions ?? [];
|
|
25
|
+
const antiPatterns = pkg.antiPatterns ?? [];
|
|
26
|
+
const pkgPath = join(repoPath, pkg.relativePath);
|
|
27
|
+
for (const pattern of patterns) {
|
|
28
|
+
const tier = classifyTier(pattern);
|
|
29
|
+
const task = generateTaskFromPattern(pattern, pkg.name, pkgPath, tier, conventions, antiPatterns);
|
|
30
|
+
if (task)
|
|
31
|
+
tasks.push(task);
|
|
32
|
+
}
|
|
33
|
+
// Command tasks — generate from pkg.commands
|
|
34
|
+
const cmdTasks = generateCommandTasks(pkg, pkgPath, conventions, antiPatterns);
|
|
35
|
+
tasks.push(...cmdTasks);
|
|
36
|
+
// Architecture tasks — generate from pkg.architecture.directories
|
|
37
|
+
const archTasks = generateArchitectureTasks(pkg, pkgPath, conventions, antiPatterns);
|
|
38
|
+
tasks.push(...archTasks);
|
|
39
|
+
}
|
|
40
|
+
// Sort by tier quality (A first), then by maxScoringPoints descending
|
|
41
|
+
tasks.sort((a, b) => {
|
|
42
|
+
const tierOrder = { A: 0, B: 1, C: 2 };
|
|
43
|
+
const tierDiff = tierOrder[a.tier] - tierOrder[b.tier];
|
|
44
|
+
if (tierDiff !== 0)
|
|
45
|
+
return tierDiff;
|
|
46
|
+
return b.maxScoringPoints - a.maxScoringPoints;
|
|
47
|
+
});
|
|
48
|
+
return tasks.slice(0, maxTasks);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Classify a ContributionPattern into a tier based on deep signal richness.
|
|
52
|
+
*/
|
|
53
|
+
export function classifyTier(pattern) {
|
|
54
|
+
const hasCommonImports = (pattern.commonImports?.length ?? 0) > 0;
|
|
55
|
+
const hasExportSuffix = !!pattern.exportSuffix;
|
|
56
|
+
const hasRegistration = !!pattern.registrationFile;
|
|
57
|
+
const signals = [hasCommonImports, hasExportSuffix, hasRegistration].filter(Boolean).length;
|
|
58
|
+
if (signals === 3)
|
|
59
|
+
return "A";
|
|
60
|
+
if (signals >= 1)
|
|
61
|
+
return "B";
|
|
62
|
+
return "C";
|
|
63
|
+
}
|
|
64
|
+
// ─── Task Generation ─────────────────────────────────────────────────────────
|
|
65
|
+
function generateTaskFromPattern(pattern, packageName, pkgPath, tier, conventions, antiPatterns) {
|
|
66
|
+
const absDir = join(pkgPath, pattern.directory);
|
|
67
|
+
// Derive a task name that doesn't collide with existing files
|
|
68
|
+
const taskName = deriveTaskName(pattern, absDir);
|
|
69
|
+
if (!taskName)
|
|
70
|
+
return null;
|
|
71
|
+
// Build the prompt (deliberately vague — AGENTS.md should fill in the details)
|
|
72
|
+
const prompt = buildTaskPrompt(pattern, taskName, packageName);
|
|
73
|
+
// Collect context files (siblings, registration, barrel)
|
|
74
|
+
const context = collectContext(pattern, pkgPath, absDir);
|
|
75
|
+
// Calculate max scoring points based on tier
|
|
76
|
+
const maxPoints = tier === "A" ? 25 : tier === "B" ? 18 : 12;
|
|
77
|
+
return {
|
|
78
|
+
id: `pattern-${pattern.directory.replace(/\//g, "-")}-${taskName}`,
|
|
79
|
+
repoPath: pkgPath,
|
|
80
|
+
packageName,
|
|
81
|
+
tier,
|
|
82
|
+
taskType: "pattern",
|
|
83
|
+
prompt,
|
|
84
|
+
contributionPattern: pattern,
|
|
85
|
+
conventions,
|
|
86
|
+
antiPatterns,
|
|
87
|
+
expectedDirectory: pattern.directory,
|
|
88
|
+
expectedFilePattern: pattern.filePattern,
|
|
89
|
+
maxScoringPoints: maxPoints,
|
|
90
|
+
context,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Derive a plausible task name that doesn't collide with existing exports.
|
|
95
|
+
*/
|
|
96
|
+
export function deriveTaskName(pattern, absDir) {
|
|
97
|
+
// List existing files in the directory
|
|
98
|
+
let existingFiles = [];
|
|
99
|
+
try {
|
|
100
|
+
existingFiles = readdirSync(absDir)
|
|
101
|
+
.filter(f => SOURCE_EXTENSIONS.test(f))
|
|
102
|
+
.map(f => basename(f, f.slice(f.lastIndexOf("."))));
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const existing = new Set(existingFiles.map(f => f.toLowerCase()));
|
|
108
|
+
// Try names from the pool, applying the pattern's naming convention
|
|
109
|
+
for (const candidate of TASK_NAME_POOL) {
|
|
110
|
+
const name = pattern.exportSuffix
|
|
111
|
+
? candidate // Will get suffix applied later
|
|
112
|
+
: candidate;
|
|
113
|
+
if (!existing.has(name.toLowerCase())) {
|
|
114
|
+
return name;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
function buildTaskPrompt(pattern, taskName, packageName) {
|
|
120
|
+
const typeLabel = pattern.type === "function" ? "utility function"
|
|
121
|
+
: pattern.type === "hook" ? "React hook"
|
|
122
|
+
: pattern.type === "component" ? "React component"
|
|
123
|
+
: pattern.type;
|
|
124
|
+
// Deliberately vague — doesn't mention imports, suffixes, or registration
|
|
125
|
+
return `Add a new ${typeLabel} for "${taskName}" to the ${packageName} project. `
|
|
126
|
+
+ `It should handle ${taskName.replace(/-/g, " ")} functionality. `
|
|
127
|
+
+ `Include implementation, any necessary registration or re-exports, and a test file.`;
|
|
128
|
+
}
|
|
129
|
+
// ─── Context Collection ──────────────────────────────────────────────────────
|
|
130
|
+
/**
|
|
131
|
+
* Collect context files for benchmark conditions.
|
|
132
|
+
* Deterministic sibling selection: exampleFile + most recent + median-dated.
|
|
133
|
+
*/
|
|
134
|
+
export function collectContext(pattern, pkgPath, absDir) {
|
|
135
|
+
const siblingFiles = selectSiblings(pattern, pkgPath, absDir);
|
|
136
|
+
const directoryListing = listDirectory(absDir);
|
|
137
|
+
let registrationFile;
|
|
138
|
+
if (pattern.registrationFile) {
|
|
139
|
+
const regPath = join(pkgPath, pattern.registrationFile);
|
|
140
|
+
try {
|
|
141
|
+
registrationFile = {
|
|
142
|
+
path: pattern.registrationFile,
|
|
143
|
+
content: readFileSync(regPath, "utf-8"),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
catch { /* file doesn't exist */ }
|
|
147
|
+
}
|
|
148
|
+
// Find barrel file (index.ts in directory or parent)
|
|
149
|
+
let barrelFile;
|
|
150
|
+
for (const candidate of ["index.ts", "index.tsx", "../index.ts"]) {
|
|
151
|
+
const barrelPath = join(absDir, candidate);
|
|
152
|
+
try {
|
|
153
|
+
const content = readFileSync(barrelPath, "utf-8");
|
|
154
|
+
barrelFile = {
|
|
155
|
+
path: relative(pkgPath, barrelPath),
|
|
156
|
+
content,
|
|
157
|
+
};
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
catch { /* try next */ }
|
|
161
|
+
}
|
|
162
|
+
return { siblingFiles, registrationFile, barrelFile, directoryListing };
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Deterministic sibling selection algorithm.
|
|
166
|
+
* 1. Always include exampleFile
|
|
167
|
+
* 2. Most recently modified non-example sibling
|
|
168
|
+
* 3. If 5+ files, add median-dated file
|
|
169
|
+
*/
|
|
170
|
+
function selectSiblings(pattern, pkgPath, absDir) {
|
|
171
|
+
const result = [];
|
|
172
|
+
// 1. Always include the example file
|
|
173
|
+
const examplePath = join(pkgPath, pattern.exampleFile);
|
|
174
|
+
try {
|
|
175
|
+
result.push({
|
|
176
|
+
path: pattern.exampleFile,
|
|
177
|
+
content: truncateFile(readFileSync(examplePath, "utf-8")),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
catch { /* missing */ }
|
|
181
|
+
// List all source files in directory, with modification times
|
|
182
|
+
let filesWithMtime = [];
|
|
183
|
+
try {
|
|
184
|
+
filesWithMtime = readdirSync(absDir)
|
|
185
|
+
.filter(f => SOURCE_EXTENSIONS.test(f) && !f.includes(".test.") && !f.includes(".spec.") && f !== "index.ts" && f !== "index.tsx")
|
|
186
|
+
.map(f => {
|
|
187
|
+
try {
|
|
188
|
+
return { name: f, mtime: statSync(join(absDir, f)).mtimeMs };
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
return { name: f, mtime: 0 };
|
|
192
|
+
}
|
|
193
|
+
})
|
|
194
|
+
.filter(f => {
|
|
195
|
+
const relPath = relative(pkgPath, join(absDir, f.name));
|
|
196
|
+
return relPath !== pattern.exampleFile;
|
|
197
|
+
})
|
|
198
|
+
.sort((a, b) => b.mtime - a.mtime);
|
|
199
|
+
}
|
|
200
|
+
catch { /* dir read error */ }
|
|
201
|
+
// 2. Most recently modified non-example sibling
|
|
202
|
+
if (filesWithMtime.length > 0) {
|
|
203
|
+
const newest = filesWithMtime[0];
|
|
204
|
+
const newestPath = join(absDir, newest.name);
|
|
205
|
+
try {
|
|
206
|
+
result.push({
|
|
207
|
+
path: relative(pkgPath, newestPath),
|
|
208
|
+
content: truncateFile(readFileSync(newestPath, "utf-8")),
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
catch { /* read error */ }
|
|
212
|
+
}
|
|
213
|
+
// 3. If 5+ files, add median-dated file
|
|
214
|
+
if (filesWithMtime.length >= 4) {
|
|
215
|
+
const medianIdx = Math.floor(filesWithMtime.length / 2);
|
|
216
|
+
const median = filesWithMtime[medianIdx];
|
|
217
|
+
const medianPath = join(absDir, median.name);
|
|
218
|
+
// Skip if same as newest
|
|
219
|
+
if (median.name !== filesWithMtime[0]?.name) {
|
|
220
|
+
try {
|
|
221
|
+
result.push({
|
|
222
|
+
path: relative(pkgPath, medianPath),
|
|
223
|
+
content: truncateFile(readFileSync(medianPath, "utf-8")),
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
catch { /* read error */ }
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return result;
|
|
230
|
+
}
|
|
231
|
+
function listDirectory(absDir) {
|
|
232
|
+
try {
|
|
233
|
+
return readdirSync(absDir)
|
|
234
|
+
.filter(f => SOURCE_EXTENSIONS.test(f))
|
|
235
|
+
.sort();
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
return [];
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
function truncateFile(content) {
|
|
242
|
+
const lines = content.split("\n");
|
|
243
|
+
if (lines.length <= MAX_SIBLING_LINES)
|
|
244
|
+
return content;
|
|
245
|
+
return lines.slice(0, MAX_SIBLING_LINES).join("\n") + "\n// ... truncated";
|
|
246
|
+
}
|
|
247
|
+
// ─── Command Task Generation ─────────────────────────────────────────────────
|
|
248
|
+
const COMMAND_TASK_PROMPTS = [
|
|
249
|
+
{
|
|
250
|
+
id: "ci-workflow",
|
|
251
|
+
prompt: (pkg) => `Write a GitHub Actions CI workflow (YAML) for the ${pkg} project that runs the standard build, test, and lint commands. Use the correct package manager and exact script names from this project.`,
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
id: "pre-commit",
|
|
255
|
+
prompt: (pkg) => `Write a shell script that acts as a pre-commit hook for the ${pkg} project. It should run the project's lint and type-check commands before allowing a commit.`,
|
|
256
|
+
},
|
|
257
|
+
];
|
|
258
|
+
function generateCommandTasks(pkg, pkgPath, conventions, antiPatterns) {
|
|
259
|
+
const commands = pkg.commands;
|
|
260
|
+
if (!commands)
|
|
261
|
+
return [];
|
|
262
|
+
// Need at least build + test
|
|
263
|
+
const availableCommands = [];
|
|
264
|
+
if (commands.build)
|
|
265
|
+
availableCommands.push(commands.build.run);
|
|
266
|
+
if (commands.test)
|
|
267
|
+
availableCommands.push(commands.test.run);
|
|
268
|
+
if (commands.lint)
|
|
269
|
+
availableCommands.push(commands.lint.run);
|
|
270
|
+
if (commands.start)
|
|
271
|
+
availableCommands.push(commands.start.run);
|
|
272
|
+
if (availableCommands.length < 2)
|
|
273
|
+
return [];
|
|
274
|
+
const allNames = [];
|
|
275
|
+
if (commands.build)
|
|
276
|
+
allNames.push("build");
|
|
277
|
+
if (commands.test)
|
|
278
|
+
allNames.push("test");
|
|
279
|
+
if (commands.lint)
|
|
280
|
+
allNames.push("lint");
|
|
281
|
+
if (commands.start)
|
|
282
|
+
allNames.push("start");
|
|
283
|
+
for (const cmd of commands.other) {
|
|
284
|
+
allNames.push(cmd.run.split(" ").pop() ?? cmd.run);
|
|
285
|
+
}
|
|
286
|
+
const tier = availableCommands.length >= 4 ? "A" : availableCommands.length >= 3 ? "B" : "C";
|
|
287
|
+
// Read package.json scripts for condition B context
|
|
288
|
+
let packageJsonScripts = "";
|
|
289
|
+
try {
|
|
290
|
+
const pkgJson = JSON.parse(readFileSync(join(pkgPath, "package.json"), "utf-8"));
|
|
291
|
+
if (pkgJson.scripts) {
|
|
292
|
+
packageJsonScripts = JSON.stringify(pkgJson.scripts, null, 2);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
catch { /* no package.json */ }
|
|
296
|
+
const dirListing = listDirectory(join(pkgPath, "src")) ?? listDirectory(pkgPath);
|
|
297
|
+
const taskDef = COMMAND_TASK_PROMPTS[0]; // CI workflow task
|
|
298
|
+
return [{
|
|
299
|
+
id: `command-${taskDef.id}`,
|
|
300
|
+
repoPath: pkgPath,
|
|
301
|
+
packageName: pkg.name,
|
|
302
|
+
tier,
|
|
303
|
+
taskType: "command",
|
|
304
|
+
prompt: taskDef.prompt(pkg.name),
|
|
305
|
+
conventions,
|
|
306
|
+
antiPatterns,
|
|
307
|
+
expectedDirectory: "",
|
|
308
|
+
expectedFilePattern: "",
|
|
309
|
+
maxScoringPoints: 8,
|
|
310
|
+
context: {
|
|
311
|
+
siblingFiles: packageJsonScripts ? [{ path: "package.json (scripts)", content: packageJsonScripts }] : [],
|
|
312
|
+
directoryListing: dirListing,
|
|
313
|
+
},
|
|
314
|
+
commandData: {
|
|
315
|
+
expectedCommands: availableCommands,
|
|
316
|
+
packageManager: commands.packageManager,
|
|
317
|
+
allCommandNames: allNames,
|
|
318
|
+
},
|
|
319
|
+
}];
|
|
320
|
+
}
|
|
321
|
+
// ─── Architecture Task Generation ────────────────────────────────────────────
|
|
322
|
+
const ARCHITECTURE_FEATURE_MAP = {
|
|
323
|
+
"hooks": { feature: "a new React hook for clipboard management", keywords: ["hooks", "hook", "use"] },
|
|
324
|
+
"components": { feature: "a new UI component for notifications", keywords: ["components", "component", "ui"] },
|
|
325
|
+
"utils": { feature: "a new utility function for string formatting", keywords: ["utils", "utilities", "helpers"] },
|
|
326
|
+
"middleware": { feature: "new authentication middleware", keywords: ["middleware", "interceptor"] },
|
|
327
|
+
"api": { feature: "a new REST API endpoint for user preferences", keywords: ["api", "routes", "endpoints", "handlers"] },
|
|
328
|
+
"services": { feature: "a new service for email notifications", keywords: ["services", "service"] },
|
|
329
|
+
"detectors": { feature: "a new convention detector for import patterns", keywords: ["detectors", "detector", "plugins"] },
|
|
330
|
+
"lib": { feature: "a new shared library module", keywords: ["lib", "core", "shared"] },
|
|
331
|
+
"types": { feature: "new TypeScript type definitions for configuration", keywords: ["types", "interfaces", "models"] },
|
|
332
|
+
"test": { feature: "new integration test helpers", keywords: ["test", "tests", "testing", "spec"] },
|
|
333
|
+
};
|
|
334
|
+
function generateArchitectureTasks(pkg, pkgPath, conventions, antiPatterns) {
|
|
335
|
+
const arch = pkg.architecture;
|
|
336
|
+
if (!arch || arch.directories.length < 3)
|
|
337
|
+
return [];
|
|
338
|
+
const tasks = [];
|
|
339
|
+
const dirListing = listDirectory(join(pkgPath, "src")) ?? listDirectory(pkgPath);
|
|
340
|
+
const allDirNames = arch.directories.map(d => d.path);
|
|
341
|
+
// Find directories that match our feature map
|
|
342
|
+
for (const dir of arch.directories) {
|
|
343
|
+
const dirName = dir.path.split("/").filter(Boolean).pop()?.toLowerCase() ?? "";
|
|
344
|
+
// Find a matching feature for this directory
|
|
345
|
+
let featureMatch;
|
|
346
|
+
for (const [key, value] of Object.entries(ARCHITECTURE_FEATURE_MAP)) {
|
|
347
|
+
if (value.keywords.some(k => dirName.includes(k))) {
|
|
348
|
+
featureMatch = value;
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
if (!featureMatch)
|
|
353
|
+
continue;
|
|
354
|
+
// Find alternative acceptable directories
|
|
355
|
+
const alternatives = arch.directories
|
|
356
|
+
.filter(d => d.path !== dir.path && d.purpose?.toLowerCase().includes(dirName))
|
|
357
|
+
.map(d => d.path);
|
|
358
|
+
const tier = arch.directories.length >= 5 ? "A" : "B";
|
|
359
|
+
tasks.push({
|
|
360
|
+
id: `architecture-${dirName}`,
|
|
361
|
+
repoPath: pkgPath,
|
|
362
|
+
packageName: pkg.name,
|
|
363
|
+
tier,
|
|
364
|
+
taskType: "architecture",
|
|
365
|
+
prompt: `You need to add ${featureMatch.feature} to the ${pkg.name} project. `
|
|
366
|
+
+ `Which directory should this code go in? Respond with the directory path and a brief justification for your choice.`,
|
|
367
|
+
conventions,
|
|
368
|
+
antiPatterns,
|
|
369
|
+
expectedDirectory: dir.path,
|
|
370
|
+
expectedFilePattern: "",
|
|
371
|
+
maxScoringPoints: 8,
|
|
372
|
+
context: {
|
|
373
|
+
siblingFiles: [],
|
|
374
|
+
directoryListing: dirListing,
|
|
375
|
+
},
|
|
376
|
+
architectureData: {
|
|
377
|
+
expectedDirectory: dir.path,
|
|
378
|
+
directoryPurpose: dir.purpose,
|
|
379
|
+
alternatives,
|
|
380
|
+
allDirectories: allDirNames,
|
|
381
|
+
},
|
|
382
|
+
});
|
|
383
|
+
if (tasks.length >= 2)
|
|
384
|
+
break; // Max 2 architecture tasks per package
|
|
385
|
+
}
|
|
386
|
+
return tasks;
|
|
387
|
+
}
|
|
388
|
+
//# sourceMappingURL=task-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-generator.js","sourceRoot":"","sources":["../../src/benchmark/task-generator.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,yFAAyF;AACzF,oCAAoC;AAEpC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAW,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,gFAAgF;AAEhF,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,cAAc,GAAG;IACrB,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAqB;IAC3E,WAAW,EAAE,sBAAsB,EAAE,YAAY,EAAE,eAAe;IAClE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe;IACpE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB;CAC9D,CAAC;AAEF,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAA4B,EAC5B,QAAgB,EAChB,WAAmB,EAAE;IAErB,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC;QAChD,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QAEjD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,uBAAuB,CAClC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,CAC5D,CAAC;YACF,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC/E,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAExB,kEAAkE;QAClE,MAAM,SAAS,GAAG,yBAAyB,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACrF,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IAC3B,CAAC;IAED,sEAAsE;IACtE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAClB,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,QAAQ,CAAC;QACpC,OAAO,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAC/C,MAAM,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACnD,MAAM,OAAO,GAAG,CAAC,gBAAgB,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAE5F,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAC9B,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gFAAgF;AAEhF,SAAS,uBAAuB,CAC9B,OAA4B,EAC5B,WAAmB,EACnB,OAAe,EACf,IAAc,EACd,WAAyB,EACzB,YAA2B;IAE3B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhD,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,+EAA+E;IAC/E,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE/D,yDAAyD;IACzD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEzD,6CAA6C;IAC7C,MAAM,SAAS,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7D,OAAO;QACL,EAAE,EAAE,WAAW,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE;QAClE,QAAQ,EAAE,OAAO;QACjB,WAAW;QACX,IAAI;QACJ,QAAQ,EAAE,SAAkB;QAC5B,MAAM;QACN,mBAAmB,EAAE,OAAO;QAC5B,WAAW;QACX,YAAY;QACZ,iBAAiB,EAAE,OAAO,CAAC,SAAS;QACpC,mBAAmB,EAAE,OAAO,CAAC,WAAW;QACxC,gBAAgB,EAAE,SAAS;QAC3B,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,OAA4B,EAC5B,MAAc;IAEd,uCAAuC;IACvC,IAAI,aAAa,GAAa,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC;aAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAElE,oEAAoE;IACpE,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY;YAC/B,CAAC,CAAC,SAAS,CAAE,gCAAgC;YAC7C,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CACtB,OAA4B,EAC5B,QAAgB,EAChB,WAAmB;IAEnB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,kBAAkB;QAChE,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY;YACxC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,iBAAiB;gBAClD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAEjB,0EAA0E;IAC1E,OAAO,aAAa,SAAS,SAAS,QAAQ,YAAY,WAAW,YAAY;UAC7E,oBAAoB,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,kBAAkB;UACjE,oFAAoF,CAAC;AAC3F,CAAC;AAED,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,OAA4B,EAC5B,OAAe,EACf,MAAc;IAEd,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAE/C,IAAI,gBAAiD,CAAC;IACtD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,gBAAgB,GAAG;gBACjB,IAAI,EAAE,OAAO,CAAC,gBAAgB;gBAC9B,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC;aACxC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,CAAC;IACtC,CAAC;IAED,qDAAqD;IACrD,IAAI,UAAqC,CAAC;IAC1C,KAAK,MAAM,SAAS,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAClD,UAAU,GAAG;gBACX,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;gBACnC,OAAO;aACR,CAAC;YACF,MAAM;QACR,CAAC;QAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;AAC1E,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CACrB,OAA4B,EAC5B,OAAe,EACf,MAAc;IAEd,MAAM,MAAM,GAAgC,EAAE,CAAC;IAE/C,qCAAqC;IACrC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,OAAO,CAAC,WAAW;YACzB,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;SAC1D,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;IAEzB,8DAA8D;IAC9D,IAAI,cAAc,GAAsC,EAAE,CAAC;IAC3D,IAAI,CAAC;QACH,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC;aACjC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,WAAW,CAAC;aACjI,GAAG,CAAC,CAAC,CAAC,EAAE;YACP,IAAI,CAAC;gBACH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC/D,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE;YACV,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACxD,OAAO,OAAO,KAAK,OAAO,CAAC,WAAW,CAAC;QACzC,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAEhC,gDAAgD;IAChD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;gBACnC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;aACzD,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC9B,CAAC;IAED,wCAAwC;IACxC,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,yBAAyB;QACzB,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;oBACnC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;iBACzD,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,MAAM,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACtC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,IAAI,iBAAiB;QAAE,OAAO,OAAO,CAAC;IACtD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC;AAC7E,CAAC;AAED,gFAAgF;AAEhF,MAAM,oBAAoB,GAAG;IAC3B;QACE,EAAE,EAAE,aAAa;QACjB,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE,CACtB,qDAAqD,GAAG,2IAA2I;KACtM;IACD;QACE,EAAE,EAAE,YAAY;QAChB,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE,CACtB,+DAA+D,GAAG,8FAA8F;KACnK;CACF,CAAC;AAEF,SAAS,oBAAoB,CAC3B,GAA0C,EAC1C,OAAe,EACf,WAAyB,EACzB,YAA2B;IAE3B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEzB,6BAA6B;IAC7B,MAAM,iBAAiB,GAAa,EAAE,CAAC;IACvC,IAAI,QAAQ,CAAC,KAAK;QAAE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/D,IAAI,QAAQ,CAAC,IAAI;QAAE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7D,IAAI,QAAQ,CAAC,IAAI;QAAE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7D,IAAI,QAAQ,CAAC,KAAK;QAAE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/D,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAE5C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,QAAQ,CAAC,KAAK;QAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,QAAQ,CAAC,IAAI;QAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,QAAQ,CAAC,IAAI;QAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,QAAQ,CAAC,KAAK;QAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,IAAI,GAAa,iBAAiB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAEvG,oDAAoD;IACpD,IAAI,kBAAkB,GAAG,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACjF,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAEjC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAEjF,MAAM,OAAO,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;IAC5D,OAAO,CAAC;YACN,EAAE,EAAE,WAAW,OAAO,CAAC,EAAE,EAAE;YAC3B,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,GAAG,CAAC,IAAI;YACrB,IAAI;YACJ,QAAQ,EAAE,SAAkB;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAChC,WAAW;YACX,YAAY;YACZ,iBAAiB,EAAE,EAAE;YACrB,mBAAmB,EAAE,EAAE;YACvB,gBAAgB,EAAE,CAAC;YACnB,OAAO,EAAE;gBACP,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;gBACzG,gBAAgB,EAAE,UAAU;aAC7B;YACD,WAAW,EAAE;gBACX,gBAAgB,EAAE,iBAAiB;gBACnC,cAAc,EAAE,QAAQ,CAAC,cAAc;gBACvC,eAAe,EAAE,QAAQ;aAC1B;SACF,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAEhF,MAAM,wBAAwB,GAA4D;IACxF,OAAO,EAAE,EAAE,OAAO,EAAE,2CAA2C,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;IACrG,YAAY,EAAE,EAAE,OAAO,EAAE,sCAAsC,EAAE,QAAQ,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE;IAC9G,OAAO,EAAE,EAAE,OAAO,EAAE,8CAA8C,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE;IACjH,YAAY,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE;IACnG,KAAK,EAAE,EAAE,OAAO,EAAE,8CAA8C,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE;IACxH,UAAU,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE;IACnG,WAAW,EAAE,EAAE,OAAO,EAAE,+CAA+C,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE;IACzH,KAAK,EAAE,EAAE,OAAO,EAAE,6BAA6B,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;IACtF,OAAO,EAAE,EAAE,OAAO,EAAE,mDAAmD,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE;IACtH,MAAM,EAAE,EAAE,OAAO,EAAE,8BAA8B,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;CACpG,CAAC;AAEF,SAAS,yBAAyB,CAChC,GAA0C,EAC1C,OAAe,EACf,WAAyB,EACzB,YAA2B;IAE3B,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC;IAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpD,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEtD,8CAA8C;IAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAE/E,6CAA6C;QAC7C,IAAI,YAAiE,CAAC;QACtE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,EAAE,CAAC;YACpE,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,YAAY,GAAG,KAAK,CAAC;gBACrB,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY;YAAE,SAAS;QAE5B,0CAA0C;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW;aAClC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aAC9E,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEpB,MAAM,IAAI,GAAa,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAEhE,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,gBAAgB,OAAO,EAAE;YAC7B,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,GAAG,CAAC,IAAI;YACrB,IAAI;YACJ,QAAQ,EAAE,cAAuB;YACjC,MAAM,EAAE,mBAAmB,YAAY,CAAC,OAAO,WAAW,GAAG,CAAC,IAAI,YAAY;kBAC1E,oHAAoH;YACxH,WAAW;YACX,YAAY;YACZ,iBAAiB,EAAE,GAAG,CAAC,IAAI;YAC3B,mBAAmB,EAAE,EAAE;YACvB,gBAAgB,EAAE,CAAC;YACnB,OAAO,EAAE;gBACP,YAAY,EAAE,EAAE;gBAChB,gBAAgB,EAAE,UAAU;aAC7B;YACD,gBAAgB,EAAE;gBAChB,iBAAiB,EAAE,GAAG,CAAC,IAAI;gBAC3B,gBAAgB,EAAE,GAAG,CAAC,OAAO;gBAC7B,YAAY;gBACZ,cAAc,EAAE,WAAW;aAC5B;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE,MAAM,CAAC,uCAAuC;IACvE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { ContributionPattern, Convention, AntiPattern } from "../types.js";
|
|
2
|
+
export type BenchmarkCondition = "treatment" | "realistic-control" | "impoverished-control" | "negative-control";
|
|
3
|
+
export type TaskTier = "A" | "B" | "C";
|
|
4
|
+
export type TaskType = "pattern" | "command" | "architecture";
|
|
5
|
+
export interface BenchmarkTask {
|
|
6
|
+
id: string;
|
|
7
|
+
repoPath: string;
|
|
8
|
+
packageName: string;
|
|
9
|
+
tier: TaskTier;
|
|
10
|
+
taskType: TaskType;
|
|
11
|
+
prompt: string;
|
|
12
|
+
contributionPattern?: ContributionPattern;
|
|
13
|
+
conventions: Convention[];
|
|
14
|
+
antiPatterns: AntiPattern[];
|
|
15
|
+
expectedDirectory: string;
|
|
16
|
+
expectedFilePattern: string;
|
|
17
|
+
maxScoringPoints: number;
|
|
18
|
+
context: TaskContext;
|
|
19
|
+
commandData?: {
|
|
20
|
+
expectedCommands: string[];
|
|
21
|
+
packageManager: string;
|
|
22
|
+
allCommandNames: string[];
|
|
23
|
+
};
|
|
24
|
+
architectureData?: {
|
|
25
|
+
expectedDirectory: string;
|
|
26
|
+
directoryPurpose: string;
|
|
27
|
+
alternatives?: string[];
|
|
28
|
+
allDirectories: string[];
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface TaskContext {
|
|
32
|
+
siblingFiles: {
|
|
33
|
+
path: string;
|
|
34
|
+
content: string;
|
|
35
|
+
}[];
|
|
36
|
+
registrationFile?: {
|
|
37
|
+
path: string;
|
|
38
|
+
content: string;
|
|
39
|
+
};
|
|
40
|
+
barrelFile?: {
|
|
41
|
+
path: string;
|
|
42
|
+
content: string;
|
|
43
|
+
};
|
|
44
|
+
directoryListing: string[];
|
|
45
|
+
}
|
|
46
|
+
export interface BenchmarkResults {
|
|
47
|
+
meta: {
|
|
48
|
+
engineVersion: string;
|
|
49
|
+
model: string;
|
|
50
|
+
repoPath: string;
|
|
51
|
+
timestamp: string;
|
|
52
|
+
mode: "quick" | "full";
|
|
53
|
+
conditions: BenchmarkCondition[];
|
|
54
|
+
};
|
|
55
|
+
summary: ConditionSummary;
|
|
56
|
+
tasks: TaskResult[];
|
|
57
|
+
}
|
|
58
|
+
export interface ConditionSummary {
|
|
59
|
+
tasksRun: number;
|
|
60
|
+
conditions: Record<BenchmarkCondition, {
|
|
61
|
+
meanScore: number;
|
|
62
|
+
passRate: number;
|
|
63
|
+
scores: number[];
|
|
64
|
+
meanTokens: number;
|
|
65
|
+
}>;
|
|
66
|
+
headlineDelta: number;
|
|
67
|
+
upperBoundDelta: number;
|
|
68
|
+
pValue?: number;
|
|
69
|
+
effectSize?: number;
|
|
70
|
+
ci95?: [number, number];
|
|
71
|
+
}
|
|
72
|
+
export interface TaskResult {
|
|
73
|
+
taskId: string;
|
|
74
|
+
tier: TaskTier;
|
|
75
|
+
taskType: TaskType;
|
|
76
|
+
prompt: string;
|
|
77
|
+
results: Record<BenchmarkCondition, RunResult>;
|
|
78
|
+
}
|
|
79
|
+
export interface RunResult {
|
|
80
|
+
score: number;
|
|
81
|
+
rawScore: number;
|
|
82
|
+
maxPoints: number;
|
|
83
|
+
passed: boolean;
|
|
84
|
+
checks: CheckResult[];
|
|
85
|
+
filesCreated: string[];
|
|
86
|
+
tokensUsed: number;
|
|
87
|
+
latencyMs: number;
|
|
88
|
+
error?: string;
|
|
89
|
+
}
|
|
90
|
+
export interface CheckResult {
|
|
91
|
+
name: string;
|
|
92
|
+
category: "convention" | "integration" | "structure" | "quality" | "command" | "architecture";
|
|
93
|
+
weight: number;
|
|
94
|
+
score: number;
|
|
95
|
+
passed: boolean;
|
|
96
|
+
detail: string;
|
|
97
|
+
}
|
|
98
|
+
export interface BenchmarkOptions {
|
|
99
|
+
repoPath: string;
|
|
100
|
+
rootDir?: string;
|
|
101
|
+
mode: "quick" | "full";
|
|
102
|
+
model?: string;
|
|
103
|
+
outputDir?: string;
|
|
104
|
+
verbose?: boolean;
|
|
105
|
+
dryRun?: boolean;
|
|
106
|
+
maxTasks?: number;
|
|
107
|
+
}
|
|
108
|
+
export interface GeneratedFile {
|
|
109
|
+
path: string;
|
|
110
|
+
content: string;
|
|
111
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/benchmark/types.ts"],"names":[],"mappings":"AAAA,6DAA6D"}
|