@req2rank/core 0.1.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/dist/adaptive-calibration.d.ts +13 -0
- package/dist/adaptive-calibration.d.ts.map +1 -0
- package/dist/adaptive-calibration.js +39 -0
- package/dist/adaptive-calibration.js.map +1 -0
- package/dist/adaptive-calibration.test.d.ts +2 -0
- package/dist/adaptive-calibration.test.d.ts.map +1 -0
- package/dist/adaptive-calibration.test.js +20 -0
- package/dist/adaptive-calibration.test.js.map +1 -0
- package/dist/checkpoint-key.d.ts +3 -0
- package/dist/checkpoint-key.d.ts.map +1 -0
- package/dist/checkpoint-key.js +27 -0
- package/dist/checkpoint-key.js.map +1 -0
- package/dist/checkpoint-key.test.d.ts +2 -0
- package/dist/checkpoint-key.test.d.ts.map +1 -0
- package/dist/checkpoint-key.test.js +24 -0
- package/dist/checkpoint-key.test.js.map +1 -0
- package/dist/config.d.ts +162 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +68 -0
- package/dist/config.js.map +1 -0
- package/dist/domain-taxonomy.d.ts +13 -0
- package/dist/domain-taxonomy.d.ts.map +1 -0
- package/dist/domain-taxonomy.js +12 -0
- package/dist/domain-taxonomy.js.map +1 -0
- package/dist/evaluation-panel.d.ts +27 -0
- package/dist/evaluation-panel.d.ts.map +1 -0
- package/dist/evaluation-panel.js +158 -0
- package/dist/evaluation-panel.js.map +1 -0
- package/dist/evaluation-panel.test.d.ts +2 -0
- package/dist/evaluation-panel.test.d.ts.map +1 -0
- package/dist/evaluation-panel.test.js +160 -0
- package/dist/evaluation-panel.test.js.map +1 -0
- package/dist/evidence-chain.d.ts +11 -0
- package/dist/evidence-chain.d.ts.map +1 -0
- package/dist/evidence-chain.js +33 -0
- package/dist/evidence-chain.js.map +1 -0
- package/dist/evidence-chain.test.d.ts +2 -0
- package/dist/evidence-chain.test.d.ts.map +1 -0
- package/dist/evidence-chain.test.js +16 -0
- package/dist/evidence-chain.test.js.map +1 -0
- package/dist/execution-engine.d.ts +29 -0
- package/dist/execution-engine.d.ts.map +1 -0
- package/dist/execution-engine.js +102 -0
- package/dist/execution-engine.js.map +1 -0
- package/dist/execution-engine.test.d.ts +2 -0
- package/dist/execution-engine.test.d.ts.map +1 -0
- package/dist/execution-engine.test.js +81 -0
- package/dist/execution-engine.test.js.map +1 -0
- package/dist/hub-client.d.ts +21 -0
- package/dist/hub-client.d.ts.map +1 -0
- package/dist/hub-client.js +103 -0
- package/dist/hub-client.js.map +1 -0
- package/dist/hub-client.test.d.ts +2 -0
- package/dist/hub-client.test.d.ts.map +1 -0
- package/dist/hub-client.test.js +129 -0
- package/dist/hub-client.test.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/leaderboard-query.d.ts +29 -0
- package/dist/leaderboard-query.d.ts.map +1 -0
- package/dist/leaderboard-query.js +59 -0
- package/dist/leaderboard-query.js.map +1 -0
- package/dist/leaderboard-query.test.d.ts +2 -0
- package/dist/leaderboard-query.test.d.ts.map +1 -0
- package/dist/leaderboard-query.test.js +34 -0
- package/dist/leaderboard-query.test.js.map +1 -0
- package/dist/local-store.d.ts +17 -0
- package/dist/local-store.d.ts.map +1 -0
- package/dist/local-store.js +144 -0
- package/dist/local-store.js.map +1 -0
- package/dist/local-store.test.d.ts +2 -0
- package/dist/local-store.test.d.ts.map +1 -0
- package/dist/local-store.test.js +116 -0
- package/dist/local-store.test.js.map +1 -0
- package/dist/pipeline-stage-handoff.test.d.ts +2 -0
- package/dist/pipeline-stage-handoff.test.d.ts.map +1 -0
- package/dist/pipeline-stage-handoff.test.js +290 -0
- package/dist/pipeline-stage-handoff.test.js.map +1 -0
- package/dist/pipeline.d.ts +67 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +482 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/providers/anthropic.d.ts +8 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +45 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +36 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +47 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/custom.d.ts +6 -0
- package/dist/providers/custom.d.ts.map +1 -0
- package/dist/providers/custom.js +6 -0
- package/dist/providers/custom.js.map +1 -0
- package/dist/providers/google.d.ts +8 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +48 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +23 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +31 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +8 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +40 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/providers.test.d.ts +2 -0
- package/dist/providers/providers.test.d.ts.map +1 -0
- package/dist/providers/providers.test.js +44 -0
- package/dist/providers/providers.test.js.map +1 -0
- package/dist/requirement-generator.d.ts +29 -0
- package/dist/requirement-generator.d.ts.map +1 -0
- package/dist/requirement-generator.js +358 -0
- package/dist/requirement-generator.js.map +1 -0
- package/dist/requirement-generator.test.d.ts +2 -0
- package/dist/requirement-generator.test.d.ts.map +1 -0
- package/dist/requirement-generator.test.js +148 -0
- package/dist/requirement-generator.test.js.map +1 -0
- package/dist/sandbox.d.ts +32 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +123 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/sandbox.test.d.ts +2 -0
- package/dist/sandbox.test.d.ts.map +1 -0
- package/dist/sandbox.test.js +20 -0
- package/dist/sandbox.test.js.map +1 -0
- package/dist/scoring-engine.d.ts +15 -0
- package/dist/scoring-engine.d.ts.map +1 -0
- package/dist/scoring-engine.js +109 -0
- package/dist/scoring-engine.js.map +1 -0
- package/dist/scoring-engine.test.d.ts +2 -0
- package/dist/scoring-engine.test.d.ts.map +1 -0
- package/dist/scoring-engine.test.js +137 -0
- package/dist/scoring-engine.test.js.map +1 -0
- package/dist/submit-payload-builder.d.ts +9 -0
- package/dist/submit-payload-builder.d.ts.map +1 -0
- package/dist/submit-payload-builder.js +23 -0
- package/dist/submit-payload-builder.js.map +1 -0
- package/dist/submit-payload-builder.test.d.ts +2 -0
- package/dist/submit-payload-builder.test.d.ts.map +1 -0
- package/dist/submit-payload-builder.test.js +75 -0
- package/dist/submit-payload-builder.test.js.map +1 -0
- package/dist/submitter-types.d.ts +54 -0
- package/dist/submitter-types.d.ts.map +1 -0
- package/dist/submitter-types.js +2 -0
- package/dist/submitter-types.js.map +1 -0
- package/dist/types.d.ts +40 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
function parseJsonObject(raw) {
|
|
2
|
+
try {
|
|
3
|
+
const parsed = JSON.parse(raw);
|
|
4
|
+
if (parsed && typeof parsed === "object") {
|
|
5
|
+
return parsed;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
// continue
|
|
10
|
+
}
|
|
11
|
+
const fenced = raw.match(/```json\n([\s\S]*?)```/i);
|
|
12
|
+
if (!fenced) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
const parsed = JSON.parse(fenced[1]);
|
|
17
|
+
if (parsed && typeof parsed === "object") {
|
|
18
|
+
return parsed;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
function toDimensionScoreMap(raw) {
|
|
27
|
+
const parsed = parseJsonObject(raw);
|
|
28
|
+
if (!parsed) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
const pick = (key) => {
|
|
32
|
+
const value = parsed?.[key];
|
|
33
|
+
return typeof value === "number" ? clampScore(value) : undefined;
|
|
34
|
+
};
|
|
35
|
+
const functionalCompleteness = pick("functionalCompleteness");
|
|
36
|
+
const codeQuality = pick("codeQuality");
|
|
37
|
+
const logicAccuracy = pick("logicAccuracy");
|
|
38
|
+
const security = pick("security");
|
|
39
|
+
const engineeringPractice = pick("engineeringPractice");
|
|
40
|
+
if (functionalCompleteness === undefined ||
|
|
41
|
+
codeQuality === undefined ||
|
|
42
|
+
logicAccuracy === undefined ||
|
|
43
|
+
security === undefined ||
|
|
44
|
+
engineeringPractice === undefined) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
functionalCompleteness,
|
|
49
|
+
codeQuality,
|
|
50
|
+
logicAccuracy,
|
|
51
|
+
security,
|
|
52
|
+
engineeringPractice
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function clampScore(score) {
|
|
56
|
+
return Math.max(0, Math.min(100, score));
|
|
57
|
+
}
|
|
58
|
+
function calculateStdDev(values) {
|
|
59
|
+
if (values.length <= 1) {
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
const mean = values.reduce((sum, value) => sum + value, 0) / values.length;
|
|
63
|
+
const variance = values.reduce((sum, value) => sum + (value - mean) ** 2, 0) / values.length;
|
|
64
|
+
return Math.sqrt(variance);
|
|
65
|
+
}
|
|
66
|
+
export function calculateIja(results) {
|
|
67
|
+
if (results.length <= 1) {
|
|
68
|
+
return 1;
|
|
69
|
+
}
|
|
70
|
+
const overallScores = results.map((result) => {
|
|
71
|
+
const values = Object.values(result.dimensions);
|
|
72
|
+
return values.reduce((sum, value) => sum + value, 0) / values.length;
|
|
73
|
+
});
|
|
74
|
+
const stdDev = calculateStdDev(overallScores);
|
|
75
|
+
const normalized = 1 - Math.min(stdDev / 25, 1);
|
|
76
|
+
return Math.round(normalized * 1000) / 1000;
|
|
77
|
+
}
|
|
78
|
+
export class EvaluationPanel {
|
|
79
|
+
latestDroppedJudges = [];
|
|
80
|
+
async collectEvaluations(requirement, execution, judges, providerForJudge) {
|
|
81
|
+
const settled = await Promise.allSettled(judges.map(async (judge) => {
|
|
82
|
+
const provider = providerForJudge(judge);
|
|
83
|
+
const prompt = [
|
|
84
|
+
"You are an expert software code reviewer.",
|
|
85
|
+
"Score this code against the requirement on exactly five dimensions (0-100):",
|
|
86
|
+
"functionalCompleteness, codeQuality, logicAccuracy, security, engineeringPractice.",
|
|
87
|
+
"Return strict JSON only.",
|
|
88
|
+
"",
|
|
89
|
+
`Requirement title: ${requirement.title}`,
|
|
90
|
+
`Requirement description: ${requirement.description}`,
|
|
91
|
+
"Functional requirements:",
|
|
92
|
+
...requirement.functionalRequirements.map((item) => `- ${item.id}: ${item.description}`),
|
|
93
|
+
"Constraints:",
|
|
94
|
+
...requirement.constraints.map((item) => `- ${item}`),
|
|
95
|
+
"Code under review:",
|
|
96
|
+
"```",
|
|
97
|
+
execution.code,
|
|
98
|
+
"```"
|
|
99
|
+
].join("\n");
|
|
100
|
+
const response = await provider.chat({
|
|
101
|
+
model: judge.model,
|
|
102
|
+
temperature: 0,
|
|
103
|
+
maxTokens: 1_024,
|
|
104
|
+
responseFormat: "json",
|
|
105
|
+
messages: [
|
|
106
|
+
{
|
|
107
|
+
role: "system",
|
|
108
|
+
content: "You are strict and objective. Output only valid JSON."
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
role: "user",
|
|
112
|
+
content: prompt
|
|
113
|
+
}
|
|
114
|
+
]
|
|
115
|
+
});
|
|
116
|
+
const dimensions = toDimensionScoreMap(response.content);
|
|
117
|
+
if (!dimensions) {
|
|
118
|
+
throw new Error("invalid judge response");
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
judgeId: `${judge.provider}/${judge.model}`,
|
|
122
|
+
dimensions
|
|
123
|
+
};
|
|
124
|
+
}));
|
|
125
|
+
const results = [];
|
|
126
|
+
const droppedJudges = [];
|
|
127
|
+
for (let index = 0; index < settled.length; index += 1) {
|
|
128
|
+
const result = settled[index];
|
|
129
|
+
const judge = judges[index];
|
|
130
|
+
const judgeId = `${judge.provider}/${judge.model}`;
|
|
131
|
+
if (result.status === "fulfilled") {
|
|
132
|
+
results.push(result.value);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
droppedJudges.push(judgeId);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return { results, droppedJudges };
|
|
139
|
+
}
|
|
140
|
+
async evaluate(requirement, execution, judges, providerForJudge) {
|
|
141
|
+
const { results, droppedJudges } = await this.collectEvaluations(requirement, execution, judges, providerForJudge);
|
|
142
|
+
this.latestDroppedJudges = droppedJudges;
|
|
143
|
+
if (results.length === 0) {
|
|
144
|
+
throw new Error(`all judges failed (${droppedJudges.join(", ")})`);
|
|
145
|
+
}
|
|
146
|
+
return results;
|
|
147
|
+
}
|
|
148
|
+
async evaluateWithIja(requirement, execution, judges, providerForJudge) {
|
|
149
|
+
this.latestDroppedJudges = [];
|
|
150
|
+
const results = await this.evaluate(requirement, execution, judges, providerForJudge);
|
|
151
|
+
return {
|
|
152
|
+
results,
|
|
153
|
+
ija: calculateIja(results),
|
|
154
|
+
droppedJudges: this.latestDroppedJudges
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=evaluation-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluation-panel.js","sourceRoot":"","sources":["../src/evaluation-panel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluation-panel.test.d.ts","sourceRoot":"","sources":["../src/evaluation-panel.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { calculateIja, EvaluationPanel } from "./evaluation-panel.js";
|
|
3
|
+
class StubJudgeProvider {
|
|
4
|
+
id = "stub-judge";
|
|
5
|
+
name = "Stub Judge";
|
|
6
|
+
async chat() {
|
|
7
|
+
return {
|
|
8
|
+
content: JSON.stringify({
|
|
9
|
+
functionalCompleteness: 84,
|
|
10
|
+
codeQuality: 79,
|
|
11
|
+
logicAccuracy: 86,
|
|
12
|
+
security: 75,
|
|
13
|
+
engineeringPractice: 80
|
|
14
|
+
}),
|
|
15
|
+
usage: { promptTokens: 10, completionTokens: 12 },
|
|
16
|
+
latencyMs: 15
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
class ThrowingJudgeProvider {
|
|
21
|
+
id = "throw-judge";
|
|
22
|
+
name = "Throw Judge";
|
|
23
|
+
async chat() {
|
|
24
|
+
throw new Error("judge unavailable");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function makeRequirement() {
|
|
28
|
+
return {
|
|
29
|
+
id: "req-1",
|
|
30
|
+
version: "1.0",
|
|
31
|
+
title: "Demo",
|
|
32
|
+
description: "Do demo",
|
|
33
|
+
functionalRequirements: [
|
|
34
|
+
{
|
|
35
|
+
id: "FR-1",
|
|
36
|
+
description: "Implement feature",
|
|
37
|
+
acceptanceCriteria: "Feature works",
|
|
38
|
+
priority: "must"
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
constraints: [],
|
|
42
|
+
expectedDeliverables: ["source code"],
|
|
43
|
+
metadata: {
|
|
44
|
+
skills: ["api-design"],
|
|
45
|
+
complexity: "C2",
|
|
46
|
+
domain: "generic",
|
|
47
|
+
scenario: "demo",
|
|
48
|
+
techStack: ["typescript"],
|
|
49
|
+
mutationLog: []
|
|
50
|
+
},
|
|
51
|
+
evaluationGuidance: {
|
|
52
|
+
keyDifferentiators: ["clean structure"],
|
|
53
|
+
commonPitfalls: ["missing validation"],
|
|
54
|
+
edgeCases: ["empty input"]
|
|
55
|
+
},
|
|
56
|
+
generatedBy: "test",
|
|
57
|
+
generatedAt: new Date().toISOString(),
|
|
58
|
+
selfReviewPassed: true
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
describe("calculateIja", () => {
|
|
62
|
+
it("returns high agreement when judges are close", () => {
|
|
63
|
+
const ija = calculateIja([
|
|
64
|
+
{
|
|
65
|
+
judgeId: "j1",
|
|
66
|
+
dimensions: {
|
|
67
|
+
functionalCompleteness: 80,
|
|
68
|
+
codeQuality: 79,
|
|
69
|
+
logicAccuracy: 81,
|
|
70
|
+
security: 78,
|
|
71
|
+
engineeringPractice: 80
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
judgeId: "j2",
|
|
76
|
+
dimensions: {
|
|
77
|
+
functionalCompleteness: 81,
|
|
78
|
+
codeQuality: 80,
|
|
79
|
+
logicAccuracy: 82,
|
|
80
|
+
security: 79,
|
|
81
|
+
engineeringPractice: 81
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
]);
|
|
85
|
+
expect(ija).toBeGreaterThan(0.9);
|
|
86
|
+
});
|
|
87
|
+
it("returns low agreement when judges diverge strongly", () => {
|
|
88
|
+
const ija = calculateIja([
|
|
89
|
+
{
|
|
90
|
+
judgeId: "j1",
|
|
91
|
+
dimensions: {
|
|
92
|
+
functionalCompleteness: 20,
|
|
93
|
+
codeQuality: 20,
|
|
94
|
+
logicAccuracy: 20,
|
|
95
|
+
security: 20,
|
|
96
|
+
engineeringPractice: 20
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
judgeId: "j2",
|
|
101
|
+
dimensions: {
|
|
102
|
+
functionalCompleteness: 95,
|
|
103
|
+
codeQuality: 95,
|
|
104
|
+
logicAccuracy: 95,
|
|
105
|
+
security: 95,
|
|
106
|
+
engineeringPractice: 95
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
]);
|
|
110
|
+
expect(ija).toBe(0);
|
|
111
|
+
});
|
|
112
|
+
it("evaluates through judge providers and parses structured scores", async () => {
|
|
113
|
+
const panel = new EvaluationPanel();
|
|
114
|
+
const requirement = makeRequirement();
|
|
115
|
+
const execution = {
|
|
116
|
+
code: "export const answer = 42;",
|
|
117
|
+
language: "typescript",
|
|
118
|
+
timeoutMs: 60_000,
|
|
119
|
+
maxTokens: 8_192
|
|
120
|
+
};
|
|
121
|
+
const judges = [{ provider: "openai", model: "gpt-4o", weight: 1 }];
|
|
122
|
+
const provider = new StubJudgeProvider();
|
|
123
|
+
const results = await panel.evaluate(requirement, execution, judges, () => provider);
|
|
124
|
+
expect(results).toHaveLength(1);
|
|
125
|
+
expect(results[0].dimensions.logicAccuracy).toBe(86);
|
|
126
|
+
expect(results[0].judgeId).toBe("openai/gpt-4o");
|
|
127
|
+
});
|
|
128
|
+
it("tolerates failed judges when at least one judge succeeds", async () => {
|
|
129
|
+
const panel = new EvaluationPanel();
|
|
130
|
+
const requirement = makeRequirement();
|
|
131
|
+
const execution = {
|
|
132
|
+
code: "export const answer = 42;",
|
|
133
|
+
language: "typescript",
|
|
134
|
+
timeoutMs: 60_000,
|
|
135
|
+
maxTokens: 8_192
|
|
136
|
+
};
|
|
137
|
+
const judges = [
|
|
138
|
+
{ provider: "openai", model: "gpt-4o", weight: 1 },
|
|
139
|
+
{ provider: "openai", model: "gpt-4o-mini", weight: 1 }
|
|
140
|
+
];
|
|
141
|
+
const stable = new StubJudgeProvider();
|
|
142
|
+
const flaky = new ThrowingJudgeProvider();
|
|
143
|
+
const output = await panel.evaluateWithIja(requirement, execution, judges, (judge) => judge.model === "gpt-4o" ? stable : flaky);
|
|
144
|
+
expect(output.results).toHaveLength(1);
|
|
145
|
+
expect(output.droppedJudges).toContain("openai/gpt-4o-mini");
|
|
146
|
+
});
|
|
147
|
+
it("throws when all judges fail", async () => {
|
|
148
|
+
const panel = new EvaluationPanel();
|
|
149
|
+
const requirement = makeRequirement();
|
|
150
|
+
const execution = {
|
|
151
|
+
code: "export const answer = 42;",
|
|
152
|
+
language: "typescript",
|
|
153
|
+
timeoutMs: 60_000,
|
|
154
|
+
maxTokens: 8_192
|
|
155
|
+
};
|
|
156
|
+
const judges = [{ provider: "openai", model: "gpt-4o", weight: 1 }];
|
|
157
|
+
await expect(panel.evaluateWithIja(requirement, execution, judges, () => new ThrowingJudgeProvider())).rejects.toThrow("all judges failed");
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
//# sourceMappingURL=evaluation-panel.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluation-panel.test.js","sourceRoot":"","sources":["../src/evaluation-panel.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EvidenceChain } from "./submitter-types.js";
|
|
2
|
+
export interface CreateEvidenceChainInput {
|
|
3
|
+
requirement?: string;
|
|
4
|
+
codeSubmission?: string;
|
|
5
|
+
judgeModels?: string[];
|
|
6
|
+
timeline?: EvidenceChain["timeline"];
|
|
7
|
+
samples?: EvidenceChain["samples"];
|
|
8
|
+
now?: Date;
|
|
9
|
+
}
|
|
10
|
+
export declare function createEvidenceChain(input: CreateEvidenceChainInput): EvidenceChain;
|
|
11
|
+
//# sourceMappingURL=evidence-chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-chain.d.ts","sourceRoot":"","sources":["../src/evidence-chain.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,wBAAwB;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,aAAa,CAmClF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { platform } from "node:os";
|
|
2
|
+
export function createEvidenceChain(input) {
|
|
3
|
+
const now = input.now ?? new Date();
|
|
4
|
+
const startedAt = new Date(now.getTime() - 1_500).toISOString();
|
|
5
|
+
const completedAt = now.toISOString();
|
|
6
|
+
const timeline = input.timeline && input.timeline.length > 0
|
|
7
|
+
? input.timeline
|
|
8
|
+
: [
|
|
9
|
+
{ phase: "generate", startedAt, completedAt, model: "system-generator" },
|
|
10
|
+
{ phase: "execute", startedAt, completedAt, model: "target-model" },
|
|
11
|
+
{ phase: "evaluate", startedAt, completedAt, model: (input.judgeModels ?? []).join(",") || "judge-model" },
|
|
12
|
+
{ phase: "score", startedAt, completedAt, model: "scoring-engine" }
|
|
13
|
+
];
|
|
14
|
+
const samples = input.samples && input.samples.length > 0
|
|
15
|
+
? input.samples
|
|
16
|
+
: [
|
|
17
|
+
{
|
|
18
|
+
roundIndex: 0,
|
|
19
|
+
requirement: input.requirement ?? "requirement-unavailable",
|
|
20
|
+
codeSubmission: input.codeSubmission ?? "code-unavailable"
|
|
21
|
+
}
|
|
22
|
+
];
|
|
23
|
+
return {
|
|
24
|
+
timeline,
|
|
25
|
+
samples,
|
|
26
|
+
environment: {
|
|
27
|
+
os: platform(),
|
|
28
|
+
nodeVersion: process.version,
|
|
29
|
+
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=evidence-chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-chain.js","sourceRoot":"","sources":["../src/evidence-chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAYnC,MAAM,UAAU,mBAAmB,CAAC,KAA+B;IACjE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAChE,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAEtC,MAAM,QAAQ,GACZ,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QACzC,CAAC,CAAC,KAAK,CAAC,QAAQ;QAChB,CAAC,CAAC;YACE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE;YACxE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE;YACnE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,aAAa,EAAE;YAC1G,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,EAAE;SACpE,CAAC;IAER,MAAM,OAAO,GACX,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QACvC,CAAC,CAAC,KAAK,CAAC,OAAO;QACf,CAAC,CAAC;YACE;gBACE,UAAU,EAAE,CAAC;gBACb,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,yBAAyB;gBAC3D,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,kBAAkB;aAC3D;SACF,CAAC;IAER,OAAO;QACL,QAAQ;QACR,OAAO;QACP,WAAW,EAAE;YACX,EAAE,EAAE,QAAQ,EAAE;YACd,WAAW,EAAE,OAAO,CAAC,OAAO;YAC5B,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;SAC3D;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-chain.test.d.ts","sourceRoot":"","sources":["../src/evidence-chain.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { createEvidenceChain } from "./evidence-chain.js";
|
|
3
|
+
describe("createEvidenceChain", () => {
|
|
4
|
+
it("builds timeline samples and environment fields", () => {
|
|
5
|
+
const chain = createEvidenceChain({
|
|
6
|
+
requirement: "Build API",
|
|
7
|
+
codeSubmission: "export const ok = true;",
|
|
8
|
+
judgeModels: ["openai/gpt-4o"],
|
|
9
|
+
now: new Date("2026-01-01T00:00:00.000Z")
|
|
10
|
+
});
|
|
11
|
+
expect(chain.timeline).toHaveLength(4);
|
|
12
|
+
expect(chain.samples).toHaveLength(1);
|
|
13
|
+
expect(chain.environment.os.length).toBeGreaterThan(0);
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=evidence-chain.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-chain.test.js","sourceRoot":"","sources":["../src/evidence-chain.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,KAAK,GAAG,mBAAmB,CAAC;YAChC,WAAW,EAAE,WAAW;YACxB,cAAc,EAAE,yBAAyB;YACzC,WAAW,EAAE,CAAC,eAAe,CAAC;YAC9B,GAAG,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC;SAC1C,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ProjectRequirement } from "./types.js";
|
|
2
|
+
import { LLMProvider } from "./providers/base.js";
|
|
3
|
+
export interface ExecutionResult {
|
|
4
|
+
code: string;
|
|
5
|
+
language: string;
|
|
6
|
+
timeoutMs: number;
|
|
7
|
+
maxTokens: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ExecutionTarget {
|
|
10
|
+
provider: string;
|
|
11
|
+
model: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ExecutionBudget {
|
|
14
|
+
timeoutMs: number;
|
|
15
|
+
maxTokens: number;
|
|
16
|
+
}
|
|
17
|
+
export interface ExecuteOptions {
|
|
18
|
+
rawResponse?: string;
|
|
19
|
+
provider?: LLMProvider;
|
|
20
|
+
}
|
|
21
|
+
export declare function parseExecutionResponse(rawResponse: string): {
|
|
22
|
+
code: string;
|
|
23
|
+
language: string;
|
|
24
|
+
};
|
|
25
|
+
export declare function resolveExecutionBudget(complexity: ProjectRequirement["metadata"]["complexity"]): ExecutionBudget;
|
|
26
|
+
export declare class ExecutionEngine {
|
|
27
|
+
execute(requirement: ProjectRequirement, target: ExecutionTarget, options?: ExecuteOptions): Promise<ExecutionResult>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=execution-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-engine.d.ts","sourceRoot":"","sources":["../src/execution-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAmCD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAoB9F;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,GAAG,eAAe,CAEhH;AAED,qBAAa,eAAe;IACpB,OAAO,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;CAuDhI"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
const EXECUTION_BUDGETS = {
|
|
2
|
+
C1: { timeoutMs: 30_000, maxTokens: 4_096 },
|
|
3
|
+
C2: { timeoutMs: 60_000, maxTokens: 8_192 },
|
|
4
|
+
C3: { timeoutMs: 120_000, maxTokens: 16_384 },
|
|
5
|
+
C4: { timeoutMs: 180_000, maxTokens: 32_768 }
|
|
6
|
+
};
|
|
7
|
+
function extractFromJson(value) {
|
|
8
|
+
if (!value || typeof value !== "object") {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
const record = value;
|
|
12
|
+
if (typeof record.code === "string") {
|
|
13
|
+
return {
|
|
14
|
+
code: record.code,
|
|
15
|
+
language: typeof record.language === "string" ? record.language : "typescript"
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (Array.isArray(record.files)) {
|
|
19
|
+
const firstFile = record.files[0];
|
|
20
|
+
if (firstFile && typeof firstFile.content === "string") {
|
|
21
|
+
return {
|
|
22
|
+
code: firstFile.content,
|
|
23
|
+
language: typeof firstFile.language === "string" ? firstFile.language : "typescript"
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
export function parseExecutionResponse(rawResponse) {
|
|
30
|
+
try {
|
|
31
|
+
const parsed = JSON.parse(rawResponse);
|
|
32
|
+
const fromJson = extractFromJson(parsed);
|
|
33
|
+
if (fromJson) {
|
|
34
|
+
return fromJson;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// fall through to code-block extraction
|
|
39
|
+
}
|
|
40
|
+
const match = rawResponse.match(/```([a-zA-Z0-9_-]+)?\n([\s\S]*?)```/);
|
|
41
|
+
if (match) {
|
|
42
|
+
return {
|
|
43
|
+
language: match[1] ?? "text",
|
|
44
|
+
code: match[2].trim()
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
throw new Error("Unable to parse execution response");
|
|
48
|
+
}
|
|
49
|
+
export function resolveExecutionBudget(complexity) {
|
|
50
|
+
return EXECUTION_BUDGETS[complexity];
|
|
51
|
+
}
|
|
52
|
+
export class ExecutionEngine {
|
|
53
|
+
async execute(requirement, target, options = {}) {
|
|
54
|
+
const budget = resolveExecutionBudget(requirement.metadata.complexity);
|
|
55
|
+
let rawResponse = options.rawResponse;
|
|
56
|
+
if (!rawResponse) {
|
|
57
|
+
if (!options.provider) {
|
|
58
|
+
throw new Error("Execution provider is required when rawResponse is not provided.");
|
|
59
|
+
}
|
|
60
|
+
const executionPrompt = [
|
|
61
|
+
"You are implementing code for a software requirement.",
|
|
62
|
+
"Return code as JSON `{\"language\":\"...\",\"code\":\"...\"}`.",
|
|
63
|
+
"If JSON is not possible, return a single fenced code block.",
|
|
64
|
+
"",
|
|
65
|
+
`Target provider: ${target.provider}`,
|
|
66
|
+
`Target model: ${target.model}`,
|
|
67
|
+
`Requirement title: ${requirement.title}`,
|
|
68
|
+
`Requirement description: ${requirement.description}`,
|
|
69
|
+
"Functional requirements:",
|
|
70
|
+
...requirement.functionalRequirements.map((item) => `- ${item.id}: ${item.description} | acceptance: ${item.acceptanceCriteria}`),
|
|
71
|
+
"Constraints:",
|
|
72
|
+
...requirement.constraints.map((item) => `- ${item}`),
|
|
73
|
+
"Expected deliverables:",
|
|
74
|
+
...requirement.expectedDeliverables.map((item) => `- ${item}`)
|
|
75
|
+
].join("\n");
|
|
76
|
+
const response = await options.provider.chat({
|
|
77
|
+
model: target.model,
|
|
78
|
+
temperature: 0.2,
|
|
79
|
+
maxTokens: budget.maxTokens,
|
|
80
|
+
messages: [
|
|
81
|
+
{
|
|
82
|
+
role: "system",
|
|
83
|
+
content: "You generate production-ready code that strictly follows requirements."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
role: "user",
|
|
87
|
+
content: executionPrompt
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
});
|
|
91
|
+
rawResponse = response.content;
|
|
92
|
+
}
|
|
93
|
+
const parsed = parseExecutionResponse(rawResponse);
|
|
94
|
+
return {
|
|
95
|
+
code: parsed.code,
|
|
96
|
+
language: parsed.language,
|
|
97
|
+
timeoutMs: budget.timeoutMs,
|
|
98
|
+
maxTokens: budget.maxTokens
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=execution-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-engine.js","sourceRoot":"","sources":["../src/execution-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-engine.test.d.ts","sourceRoot":"","sources":["../src/execution-engine.test.ts"],"names":[],"mappings":""}
|