flakelab 0.1.6 → 0.1.8
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/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/domain/schema.d.ts +2 -2
- package/dist/investigator/agent.js +44 -56
- package/dist/investigator/agent.js.map +1 -1
- package/dist/investigator/planning.d.ts +110 -0
- package/dist/investigator/planning.js +78 -0
- package/dist/investigator/planning.js.map +1 -0
- package/dist/investigator/schema.d.ts +3 -3
- package/dist/repair/generator.d.ts +2 -0
- package/dist/repair/generator.js +9 -1
- package/dist/repair/generator.js.map +1 -1
- package/dist/report/schema.d.ts +1 -1
- package/dist/ui/progress.d.ts +2 -0
- package/dist/ui/progress.js +11 -0
- package/dist/ui/progress.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -2,9 +2,11 @@ import { parseCliArguments } from "./cli-arguments.js";
|
|
|
2
2
|
import { helpText, VERSION } from "./cli-help.js";
|
|
3
3
|
import { writeStderr, writeStdout } from "./ui/console.js";
|
|
4
4
|
import { TerminalDocument } from "./ui/document.js";
|
|
5
|
+
import { ProgressReporter } from "./ui/progress.js";
|
|
5
6
|
import { stderrTheme, stdoutTheme } from "./ui/theme.js";
|
|
6
7
|
const PROVIDER_COMMANDS = new Set([
|
|
7
8
|
"bisect",
|
|
9
|
+
"diagnose",
|
|
8
10
|
"investigate",
|
|
9
11
|
"prove",
|
|
10
12
|
"repair",
|
|
@@ -109,6 +111,7 @@ async function main() {
|
|
|
109
111
|
await runCommand(invocation);
|
|
110
112
|
}
|
|
111
113
|
catch (error) {
|
|
114
|
+
ProgressReporter.failActive();
|
|
112
115
|
let message = "FlakeLab failed";
|
|
113
116
|
if (error instanceof Error) {
|
|
114
117
|
message = providerCommand ? await providerErrorMessage(error) : error.message;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/domain/schema.d.ts
CHANGED
|
@@ -600,9 +600,9 @@ export declare const trialOutcomeSchema: z.ZodObject<{
|
|
|
600
600
|
path: z.ZodString;
|
|
601
601
|
}, z.core.$strip>>>;
|
|
602
602
|
status: z.ZodEnum<{
|
|
603
|
+
failed: "failed";
|
|
603
604
|
error: "error";
|
|
604
605
|
passed: "passed";
|
|
605
|
-
failed: "failed";
|
|
606
606
|
}>;
|
|
607
607
|
durationMs: z.ZodNumber;
|
|
608
608
|
exitCode: z.ZodNullable<z.ZodNumber>;
|
|
@@ -925,9 +925,9 @@ export declare const runEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
925
925
|
path: z.ZodString;
|
|
926
926
|
}, z.core.$strip>>>;
|
|
927
927
|
status: z.ZodEnum<{
|
|
928
|
+
failed: "failed";
|
|
928
929
|
error: "error";
|
|
929
930
|
passed: "passed";
|
|
930
|
-
failed: "failed";
|
|
931
931
|
}>;
|
|
932
932
|
durationMs: z.ZodNumber;
|
|
933
933
|
exitCode: z.ZodNullable<z.ZodNumber>;
|
|
@@ -3,19 +3,8 @@ import { z } from "zod";
|
|
|
3
3
|
import { evaluateExperiment } from "../discovery/evaluate.js";
|
|
4
4
|
import { InvestigationBudget } from "./budget.js";
|
|
5
5
|
import { InvestigationLedger } from "./ledger.js";
|
|
6
|
+
import { generateValidInvestigationPlan, investigationPlanSchema, } from "./planning.js";
|
|
6
7
|
import { readSafeTestContext } from "./safe-source.js";
|
|
7
|
-
import { experimentConditionSchema } from "./schema.js";
|
|
8
|
-
const plannedHypothesisSchema = z.object({
|
|
9
|
-
statement: z.string().min(8).max(500),
|
|
10
|
-
prediction: z.string().min(8).max(500),
|
|
11
|
-
});
|
|
12
|
-
const investigationPlanSchema = z.object({
|
|
13
|
-
hypotheses: z.array(plannedHypothesisSchema).min(2).max(3),
|
|
14
|
-
experiments: z.array(z.object({
|
|
15
|
-
hypothesisIndex: z.number().int().nonnegative(),
|
|
16
|
-
condition: experimentConditionSchema,
|
|
17
|
-
})).length(3),
|
|
18
|
-
});
|
|
19
8
|
const assessmentItemSchema = z.object({
|
|
20
9
|
hypothesisId: z.string().regex(/^H\d+$/u),
|
|
21
10
|
status: z.enum(["rejected", "confirmed"]),
|
|
@@ -46,6 +35,13 @@ function estimatedCost(inputTokens, outputTokens, options) {
|
|
|
46
35
|
return (inputTokens * options.inputUsdPerMillion
|
|
47
36
|
+ outputTokens * options.outputUsdPerMillion) / 1_000_000;
|
|
48
37
|
}
|
|
38
|
+
function enforceCostBudget(inputTokens, outputTokens, options, budget) {
|
|
39
|
+
const cost = estimatedCost(inputTokens, outputTokens, options);
|
|
40
|
+
if (cost > budget.maxCostUsd()) {
|
|
41
|
+
throw new Error(`Investigation cost $${cost.toFixed(4)} exceeded its configured budget`);
|
|
42
|
+
}
|
|
43
|
+
return cost;
|
|
44
|
+
}
|
|
49
45
|
function planningPrompt(test, sources, maximumDelayMs) {
|
|
50
46
|
return [
|
|
51
47
|
"You are planning a causal investigation of a flaky Playwright test.",
|
|
@@ -113,32 +109,6 @@ function applyAssessment(state, assessment) {
|
|
|
113
109
|
}
|
|
114
110
|
state.ledger.conclude(assessment.conclusionHypothesisId, assessment.conclusion, assessment.conclusionEvidenceIds);
|
|
115
111
|
}
|
|
116
|
-
function validatePlan(plan, options) {
|
|
117
|
-
if (plan.experiments.length > options.maxExperiments) {
|
|
118
|
-
throw new Error("Model proposed more experiments than the configured budget");
|
|
119
|
-
}
|
|
120
|
-
if (plan.experiments.some((entry) => entry.hypothesisIndex >= plan.hypotheses.length)) {
|
|
121
|
-
throw new Error("Model proposed an experiment for a missing hypothesis");
|
|
122
|
-
}
|
|
123
|
-
const coveredHypotheses = new Set(plan.experiments.map((entry) => entry.hypothesisIndex));
|
|
124
|
-
if (plan.hypotheses.some((_hypothesis, index) => !coveredHypotheses.has(index))) {
|
|
125
|
-
throw new Error("Every proposed hypothesis must receive an experiment");
|
|
126
|
-
}
|
|
127
|
-
if (plan.experiments.some((entry) => (entry.condition.kind === "network-delay" || entry.condition.kind === "resource-loading-delay"
|
|
128
|
-
|| entry.condition.kind === "startup-event-delay"
|
|
129
|
-
|| entry.condition.kind === "storage-state-delay")
|
|
130
|
-
&& entry.condition.delayMs > options.maximumDelayMs)) {
|
|
131
|
-
throw new Error("Model proposed a delay above the configured maximum");
|
|
132
|
-
}
|
|
133
|
-
if (plan.experiments.some((entry) => entry.condition.kind === "event-loop-stall"
|
|
134
|
-
&& entry.condition.durationMs > options.maximumDelayMs)) {
|
|
135
|
-
throw new Error("Model proposed an event-loop stall above the configured maximum");
|
|
136
|
-
}
|
|
137
|
-
const kinds = new Set(plan.experiments.map((entry) => entry.condition.kind));
|
|
138
|
-
if (!kinds.has("baseline") || kinds.size !== 3) {
|
|
139
|
-
throw new Error("Investigation plan must contain a baseline and two distinct interventions");
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
112
|
export async function runInvestigation(options) {
|
|
143
113
|
if (options.maxSteps < 2) {
|
|
144
114
|
throw new Error("Investigation requires a budget of two model steps");
|
|
@@ -147,18 +117,38 @@ export async function runInvestigation(options) {
|
|
|
147
117
|
const timeoutSignal = AbortSignal.timeout(options.maxSeconds * 1_000);
|
|
148
118
|
const signal = options.signal ? AbortSignal.any([options.signal, timeoutSignal]) : timeoutSignal;
|
|
149
119
|
const sources = await readSafeTestContext(options.projectRoot, options.test);
|
|
150
|
-
const planResult = await
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
120
|
+
const planResult = await generateValidInvestigationPlan({
|
|
121
|
+
generate: async (prompt, temperature) => {
|
|
122
|
+
const result = await generateText({
|
|
123
|
+
model: options.model,
|
|
124
|
+
output: Output.object({ schema: investigationPlanSchema }),
|
|
125
|
+
prompt,
|
|
126
|
+
maxOutputTokens: options.outputTokenLimit,
|
|
127
|
+
maxRetries: 2,
|
|
128
|
+
timeout: { totalMs: budget.remainingMs() },
|
|
129
|
+
abortSignal: signal,
|
|
130
|
+
temperature,
|
|
131
|
+
});
|
|
132
|
+
return {
|
|
133
|
+
output: result.output,
|
|
134
|
+
usage: {
|
|
135
|
+
inputTokens: result.usage.inputTokens ?? 0,
|
|
136
|
+
outputTokens: result.usage.outputTokens ?? 0,
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
},
|
|
140
|
+
initialPrompt: planningPrompt(options.test, sources, options.maximumDelayMs),
|
|
141
|
+
maxAttempts: Math.min(2, options.maxSteps - 1),
|
|
142
|
+
rules: {
|
|
143
|
+
maxExperiments: options.maxExperiments,
|
|
144
|
+
maximumDelayMs: options.maximumDelayMs,
|
|
145
|
+
},
|
|
159
146
|
});
|
|
160
|
-
const plan = planResult.
|
|
161
|
-
|
|
147
|
+
const plan = planResult.plan;
|
|
148
|
+
let modelSteps = planResult.generations.length;
|
|
149
|
+
const planningInputTokens = planResult.generations.reduce((total, result) => total + result.usage.inputTokens, 0);
|
|
150
|
+
const planningOutputTokens = planResult.generations.reduce((total, result) => total + result.usage.outputTokens, 0);
|
|
151
|
+
enforceCostBudget(planningInputTokens, planningOutputTokens, options, budget);
|
|
162
152
|
plan.experiments.forEach(() => {
|
|
163
153
|
budget.reserveExperiment(options.trialsPerExperiment);
|
|
164
154
|
});
|
|
@@ -181,12 +171,13 @@ export async function runInvestigation(options) {
|
|
|
181
171
|
abortSignal: signal,
|
|
182
172
|
temperature: 0.2,
|
|
183
173
|
});
|
|
174
|
+
modelSteps += 1;
|
|
184
175
|
const assessmentResults = [assessmentResult];
|
|
185
176
|
try {
|
|
186
177
|
applyAssessment(state, assessmentResult.output);
|
|
187
178
|
}
|
|
188
179
|
catch (error) {
|
|
189
|
-
if (options.maxSteps
|
|
180
|
+
if (modelSteps >= options.maxSteps) {
|
|
190
181
|
throw error;
|
|
191
182
|
}
|
|
192
183
|
const validationError = error instanceof Error ? error.message : "invalid evidence assessment";
|
|
@@ -204,12 +195,9 @@ export async function runInvestigation(options) {
|
|
|
204
195
|
state = createLedgerState(plan, results);
|
|
205
196
|
applyAssessment(state, repairResult.output);
|
|
206
197
|
}
|
|
207
|
-
const inputTokens =
|
|
208
|
-
const outputTokens =
|
|
209
|
-
const cost =
|
|
210
|
-
if (cost > budget.maxCostUsd()) {
|
|
211
|
-
throw new Error(`Investigation cost $${cost.toFixed(4)} exceeded its configured budget`);
|
|
212
|
-
}
|
|
198
|
+
const inputTokens = planningInputTokens + assessmentResults.reduce((total, result) => total + (result.usage.inputTokens ?? 0), 0);
|
|
199
|
+
const outputTokens = planningOutputTokens + assessmentResults.reduce((total, result) => total + (result.usage.outputTokens ?? 0), 0);
|
|
200
|
+
const cost = enforceCostBudget(inputTokens, outputTokens, options, budget);
|
|
213
201
|
return state.ledger.buildReport(options.test, options.modelId, sources.map((source) => source.path), {
|
|
214
202
|
inputTokens,
|
|
215
203
|
outputTokens,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/investigator/agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAI7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/investigator/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const investigationPlanSchema: z.ZodObject<{
|
|
3
|
+
hypotheses: z.ZodArray<z.ZodObject<{
|
|
4
|
+
statement: z.ZodString;
|
|
5
|
+
prediction: z.ZodString;
|
|
6
|
+
}, z.core.$strip>>;
|
|
7
|
+
experiments: z.ZodArray<z.ZodObject<{
|
|
8
|
+
hypothesisIndex: z.ZodNumber;
|
|
9
|
+
condition: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
10
|
+
kind: z.ZodLiteral<"baseline">;
|
|
11
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
12
|
+
kind: z.ZodLiteral<"animation-speed">;
|
|
13
|
+
rate: z.ZodNumber;
|
|
14
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
15
|
+
kind: z.ZodLiteral<"auth-cookie-expiry">;
|
|
16
|
+
cookieName: z.ZodString;
|
|
17
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
18
|
+
kind: z.ZodLiteral<"clock-jump">;
|
|
19
|
+
jumpAfterMs: z.ZodNumber;
|
|
20
|
+
offsetMs: z.ZodNumber;
|
|
21
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
22
|
+
kind: z.ZodLiteral<"event-loop-stall">;
|
|
23
|
+
durationMs: z.ZodNumber;
|
|
24
|
+
startAfterMs: z.ZodNumber;
|
|
25
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
26
|
+
kind: z.ZodLiteral<"network-delay">;
|
|
27
|
+
delayMs: z.ZodNumber;
|
|
28
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
29
|
+
kind: z.ZodLiteral<"locale">;
|
|
30
|
+
locale: z.ZodString;
|
|
31
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
32
|
+
kind: z.ZodLiteral<"request-failure">;
|
|
33
|
+
statusCode: z.ZodNumber;
|
|
34
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
35
|
+
kind: z.ZodLiteral<"reduced-motion">;
|
|
36
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
37
|
+
kind: z.ZodLiteral<"response-truncation">;
|
|
38
|
+
removeBytes: z.ZodNumber;
|
|
39
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
40
|
+
kind: z.ZodLiteral<"response-duplication">;
|
|
41
|
+
duplicateBytes: z.ZodNumber;
|
|
42
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
43
|
+
kind: z.ZodLiteral<"response-reordering">;
|
|
44
|
+
holdMs: z.ZodNumber;
|
|
45
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
46
|
+
kind: z.ZodLiteral<"resource-loading-delay">;
|
|
47
|
+
delayMs: z.ZodNumber;
|
|
48
|
+
resourceType: z.ZodEnum<{
|
|
49
|
+
script: "script";
|
|
50
|
+
document: "document";
|
|
51
|
+
font: "font";
|
|
52
|
+
image: "image";
|
|
53
|
+
stylesheet: "stylesheet";
|
|
54
|
+
}>;
|
|
55
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
56
|
+
kind: z.ZodLiteral<"startup-event-delay">;
|
|
57
|
+
delayMs: z.ZodNumber;
|
|
58
|
+
event: z.ZodEnum<{
|
|
59
|
+
"dom-content-loaded": "dom-content-loaded";
|
|
60
|
+
load: "load";
|
|
61
|
+
}>;
|
|
62
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
63
|
+
kind: z.ZodLiteral<"storage-state-delay">;
|
|
64
|
+
delayMs: z.ZodNumber;
|
|
65
|
+
key: z.ZodString;
|
|
66
|
+
storage: z.ZodEnum<{
|
|
67
|
+
"local-storage": "local-storage";
|
|
68
|
+
"session-storage": "session-storage";
|
|
69
|
+
}>;
|
|
70
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
71
|
+
kind: z.ZodLiteral<"timezone">;
|
|
72
|
+
timezoneId: z.ZodString;
|
|
73
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
74
|
+
kind: z.ZodLiteral<"viewport">;
|
|
75
|
+
height: z.ZodNumber;
|
|
76
|
+
width: z.ZodNumber;
|
|
77
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
78
|
+
kind: z.ZodLiteral<"worker-pressure">;
|
|
79
|
+
workers: z.ZodNumber;
|
|
80
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
81
|
+
copies: z.ZodNumber;
|
|
82
|
+
kind: z.ZodLiteral<"shared-state-interference">;
|
|
83
|
+
}, z.core.$strip>], "kind">;
|
|
84
|
+
}, z.core.$strip>>;
|
|
85
|
+
}, z.core.$strip>;
|
|
86
|
+
export type InvestigationPlan = z.infer<typeof investigationPlanSchema>;
|
|
87
|
+
export interface PlanGeneration {
|
|
88
|
+
output: InvestigationPlan;
|
|
89
|
+
usage: {
|
|
90
|
+
inputTokens: number;
|
|
91
|
+
outputTokens: number;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
interface PlanRules {
|
|
95
|
+
maxExperiments: number;
|
|
96
|
+
maximumDelayMs: number;
|
|
97
|
+
}
|
|
98
|
+
interface GenerateValidPlanOptions {
|
|
99
|
+
generate: (prompt: string, temperature: number) => Promise<PlanGeneration>;
|
|
100
|
+
initialPrompt: string;
|
|
101
|
+
maxAttempts: number;
|
|
102
|
+
rules: PlanRules;
|
|
103
|
+
}
|
|
104
|
+
export interface ValidPlanResult {
|
|
105
|
+
generations: PlanGeneration[];
|
|
106
|
+
plan: InvestigationPlan;
|
|
107
|
+
}
|
|
108
|
+
export declare function validateInvestigationPlan(plan: InvestigationPlan, rules: PlanRules): void;
|
|
109
|
+
export declare function generateValidInvestigationPlan(options: GenerateValidPlanOptions): Promise<ValidPlanResult>;
|
|
110
|
+
export {};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { experimentConditionSchema } from "./schema.js";
|
|
3
|
+
const plannedHypothesisSchema = z.object({
|
|
4
|
+
statement: z.string().min(8).max(500),
|
|
5
|
+
prediction: z.string().min(8).max(500),
|
|
6
|
+
});
|
|
7
|
+
export const investigationPlanSchema = z.object({
|
|
8
|
+
hypotheses: z.array(plannedHypothesisSchema).min(2).max(3),
|
|
9
|
+
experiments: z.array(z.object({
|
|
10
|
+
hypothesisIndex: z.number().int().nonnegative(),
|
|
11
|
+
condition: experimentConditionSchema,
|
|
12
|
+
})).length(3),
|
|
13
|
+
});
|
|
14
|
+
function conditionKinds(plan) {
|
|
15
|
+
return plan.experiments.map((entry) => entry.condition.kind);
|
|
16
|
+
}
|
|
17
|
+
export function validateInvestigationPlan(plan, rules) {
|
|
18
|
+
if (plan.experiments.length > rules.maxExperiments) {
|
|
19
|
+
throw new Error("Model proposed more experiments than the configured budget");
|
|
20
|
+
}
|
|
21
|
+
if (plan.experiments.some((entry) => entry.hypothesisIndex >= plan.hypotheses.length)) {
|
|
22
|
+
throw new Error("Model proposed an experiment for a missing hypothesis");
|
|
23
|
+
}
|
|
24
|
+
const coveredHypotheses = new Set(plan.experiments.map((entry) => entry.hypothesisIndex));
|
|
25
|
+
if (plan.hypotheses.some((_hypothesis, index) => !coveredHypotheses.has(index))) {
|
|
26
|
+
throw new Error("Every proposed hypothesis must receive an experiment");
|
|
27
|
+
}
|
|
28
|
+
const excessiveDelay = plan.experiments.some((entry) => (entry.condition.kind === "network-delay"
|
|
29
|
+
|| entry.condition.kind === "resource-loading-delay"
|
|
30
|
+
|| entry.condition.kind === "startup-event-delay"
|
|
31
|
+
|| entry.condition.kind === "storage-state-delay")
|
|
32
|
+
&& entry.condition.delayMs > rules.maximumDelayMs);
|
|
33
|
+
if (excessiveDelay) {
|
|
34
|
+
throw new Error("Model proposed a delay above the configured maximum");
|
|
35
|
+
}
|
|
36
|
+
const excessiveStall = plan.experiments.some((entry) => entry.condition.kind === "event-loop-stall"
|
|
37
|
+
&& entry.condition.durationMs > rules.maximumDelayMs);
|
|
38
|
+
if (excessiveStall) {
|
|
39
|
+
throw new Error("Model proposed an event-loop stall above the configured maximum");
|
|
40
|
+
}
|
|
41
|
+
const kinds = conditionKinds(plan);
|
|
42
|
+
if (!kinds.includes("baseline") || new Set(kinds).size !== 3) {
|
|
43
|
+
throw new Error("Investigation plan must contain one baseline and two distinct interventions;"
|
|
44
|
+
+ ` received ${kinds.join(", ")}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function repairPrompt(initialPrompt, invalidPlan, validationError) {
|
|
48
|
+
return [
|
|
49
|
+
initialPrompt,
|
|
50
|
+
"Your previous plan passed the output schema but failed deterministic validation.",
|
|
51
|
+
`Validation error: ${validationError}`,
|
|
52
|
+
"Previous invalid plan:",
|
|
53
|
+
JSON.stringify(invalidPlan, null, 2),
|
|
54
|
+
"Return one corrected plan with exactly one baseline and two different intervention kinds.",
|
|
55
|
+
"Keep exactly three experiments, cover every hypothesis, and do not repeat a condition kind.",
|
|
56
|
+
].join("\n");
|
|
57
|
+
}
|
|
58
|
+
export async function generateValidInvestigationPlan(options) {
|
|
59
|
+
const generations = [];
|
|
60
|
+
let prompt = options.initialPrompt;
|
|
61
|
+
for (let attempt = 0; attempt < options.maxAttempts; attempt += 1) {
|
|
62
|
+
const generated = await options.generate(prompt, attempt === 0 ? 0.2 : 0);
|
|
63
|
+
generations.push(generated);
|
|
64
|
+
try {
|
|
65
|
+
validateInvestigationPlan(generated.output, options.rules);
|
|
66
|
+
return { generations, plan: generated.output };
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (attempt + 1 >= options.maxAttempts) {
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
const message = error instanceof Error ? error.message : "invalid investigation plan";
|
|
73
|
+
prompt = repairPrompt(options.initialPrompt, generated.output, message);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
throw new Error("Investigation plan generation exhausted its attempt budget");
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=planning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planning.js","sourceRoot":"","sources":["../../src/investigator/planning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEvD,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACvC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QAC/C,SAAS,EAAE,yBAAyB;KACrC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;CACd,CAAC,CAAA;AA6BF,SAAS,cAAc,CAAC,IAAuB;IAC7C,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAuB,EAAE,KAAgB;IACjF,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;IAC/E,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtF,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC1E,CAAC;IACD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAA;IACzF,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACzE,CAAC;IACD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACrD,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,eAAe;WACpC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,wBAAwB;WACjD,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,qBAAqB;WAC9C,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,qBAAqB,CAAC;WACjD,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAA;IACpD,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IACxE,CAAC;IACD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACrD,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,kBAAkB;WACxC,KAAK,CAAC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,CAAA;IACvD,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAA;IACpF,CAAC;IACD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CACb,8EAA8E;cAC5E,aAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClC,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,aAAqB,EACrB,WAA8B,EAC9B,eAAuB;IAEvB,OAAO;QACL,aAAa;QACb,kFAAkF;QAClF,qBAAqB,eAAe,EAAE;QACtC,wBAAwB;QACxB,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,2FAA2F;QAC3F,6FAA6F;KAC9F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,OAAiC;IAEjC,MAAM,WAAW,GAAqB,EAAE,CAAA;IACxC,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAA;IAClC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAClE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACzE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC3B,IAAI,CAAC;YACH,yBAAyB,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;YAC1D,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,CAAA;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAA;YACb,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAA;YACrF,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACzE,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;AAC/E,CAAC"}
|
|
@@ -33,8 +33,8 @@ export declare const experimentResultSchema: z.ZodObject<{
|
|
|
33
33
|
}, z.core.$strip>>;
|
|
34
34
|
durationMs: z.ZodNumber;
|
|
35
35
|
status: z.ZodEnum<{
|
|
36
|
-
passed: "passed";
|
|
37
36
|
failed: "failed";
|
|
37
|
+
passed: "passed";
|
|
38
38
|
}>;
|
|
39
39
|
trialId: z.ZodString;
|
|
40
40
|
}, z.core.$strip>>;
|
|
@@ -240,8 +240,8 @@ export declare const experimentEvidenceSchema: z.ZodObject<{
|
|
|
240
240
|
}, z.core.$strip>>;
|
|
241
241
|
durationMs: z.ZodNumber;
|
|
242
242
|
status: z.ZodEnum<{
|
|
243
|
-
passed: "passed";
|
|
244
243
|
failed: "failed";
|
|
244
|
+
passed: "passed";
|
|
245
245
|
}>;
|
|
246
246
|
trialId: z.ZodString;
|
|
247
247
|
}, z.core.$strip>>;
|
|
@@ -380,8 +380,8 @@ export declare const investigationReportSchema: z.ZodObject<{
|
|
|
380
380
|
}, z.core.$strip>>;
|
|
381
381
|
durationMs: z.ZodNumber;
|
|
382
382
|
status: z.ZodEnum<{
|
|
383
|
-
passed: "passed";
|
|
384
383
|
failed: "failed";
|
|
384
|
+
passed: "passed";
|
|
385
385
|
}>;
|
|
386
386
|
trialId: z.ZodString;
|
|
387
387
|
}, z.core.$strip>>;
|
|
@@ -19,5 +19,7 @@ export interface GeneratedCandidatePatch {
|
|
|
19
19
|
candidate: CandidatePatch;
|
|
20
20
|
usage: CandidateGenerationUsage;
|
|
21
21
|
}
|
|
22
|
+
/** Keeps one structured repair request below Groq's baseline organization OTPM ceiling. */
|
|
23
|
+
export declare function candidateOutputTokenBudget(outputTokensPerMinute: number): number;
|
|
22
24
|
export declare function generateCandidatePatch(options: PatchGeneratorOptions): Promise<GeneratedCandidatePatch>;
|
|
23
25
|
export {};
|
package/dist/repair/generator.js
CHANGED
|
@@ -3,6 +3,14 @@ import { readSafeRepairContext } from "../investigator/safe-source.js";
|
|
|
3
3
|
import { QWEN_INPUT_USD_PER_MILLION, QWEN_OUTPUT_USD_PER_MILLION, } from "../investigator/groq.js";
|
|
4
4
|
import { validateCandidatePatch } from "./policy.js";
|
|
5
5
|
import { candidatePatchSchema } from "./schema.js";
|
|
6
|
+
const BASELINE_GROQ_OUTPUT_TOKENS_PER_MINUTE = 1_000;
|
|
7
|
+
/** Keeps one structured repair request below Groq's baseline organization OTPM ceiling. */
|
|
8
|
+
export function candidateOutputTokenBudget(outputTokensPerMinute) {
|
|
9
|
+
if (!Number.isInteger(outputTokensPerMinute) || outputTokensPerMinute < 100) {
|
|
10
|
+
throw new Error("Groq output-token limit must be an integer of at least 100");
|
|
11
|
+
}
|
|
12
|
+
return Math.floor(outputTokensPerMinute * 0.9);
|
|
13
|
+
}
|
|
6
14
|
function estimatedCost(inputTokens, outputTokens) {
|
|
7
15
|
return (inputTokens * QWEN_INPUT_USD_PER_MILLION
|
|
8
16
|
+ outputTokens * QWEN_OUTPUT_USD_PER_MILLION) / 1_000_000;
|
|
@@ -30,7 +38,7 @@ async function requestCandidate(options, prompt) {
|
|
|
30
38
|
model: options.model,
|
|
31
39
|
output: Output.object({ schema: candidatePatchSchema }),
|
|
32
40
|
prompt: currentPrompt,
|
|
33
|
-
maxOutputTokens:
|
|
41
|
+
maxOutputTokens: candidateOutputTokenBudget(BASELINE_GROQ_OUTPUT_TOKENS_PER_MINUTE),
|
|
34
42
|
maxRetries: 2,
|
|
35
43
|
timeout: { totalMs: options.maxSeconds * 1_000 },
|
|
36
44
|
abortSignal: options.signal,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/repair/generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAGzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAuBlD,SAAS,aAAa,CAAC,WAAmB,EAAE,YAAoB;IAC9D,OAAO,CACL,WAAW,GAAG,0BAA0B;UACtC,YAAY,GAAG,2BAA2B,CAC7C,GAAG,SAAS,CAAA;AACf,CAAC;AAED,SAAS,WAAW,CAAC,aAAkC,EAAE,OAAqB;IAC5E,OAAO;QACL,yFAAyF;QACzF,6FAA6F;QAC7F,4FAA4F;QAC5F,2FAA2F;QAC3F,6EAA6E;QAC7E,wFAAwF;QACxF,+EAA+E;QAC/E,yBAAyB;QACzB,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,+BAA+B;QAC/B,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;KACvE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,OAA8B,EAC9B,MAAc;IAEd,IAAI,aAAa,GAAG,MAAM,CAAA;IAC1B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAChC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;gBACvD,MAAM,EAAE,aAAa;gBACrB,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/repair/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/report/schema.d.ts
CHANGED
|
@@ -158,8 +158,8 @@ export declare const evidenceReportSchema: z.ZodObject<{
|
|
|
158
158
|
}, z.core.$strip>>;
|
|
159
159
|
durationMs: z.ZodNumber;
|
|
160
160
|
status: z.ZodEnum<{
|
|
161
|
-
passed: "passed";
|
|
162
161
|
failed: "failed";
|
|
162
|
+
passed: "passed";
|
|
163
163
|
}>;
|
|
164
164
|
trialId: z.ZodString;
|
|
165
165
|
}, z.core.$strip>>;
|
package/dist/ui/progress.d.ts
CHANGED
|
@@ -23,5 +23,7 @@ export declare class ProgressReporter {
|
|
|
23
23
|
step(text: string, tone?: StatusTone): void;
|
|
24
24
|
done(detail?: string): void;
|
|
25
25
|
fail(detail?: string): void;
|
|
26
|
+
/** Closes any live pulse before the command-level error is rendered. */
|
|
27
|
+
static failActive(): void;
|
|
26
28
|
}
|
|
27
29
|
export {};
|
package/dist/ui/progress.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
var _a;
|
|
1
2
|
import { formatDuration } from "./format.js";
|
|
2
3
|
import { statusMark } from "./status.js";
|
|
3
4
|
import { paint } from "./style.js";
|
|
@@ -18,6 +19,7 @@ function defaultPulseScheduler(pulse, intervalMs) {
|
|
|
18
19
|
* It never emits cursor movement, carriage returns, or erase sequences.
|
|
19
20
|
*/
|
|
20
21
|
export class ProgressReporter {
|
|
22
|
+
static #active = new Set();
|
|
21
23
|
#animate;
|
|
22
24
|
#cancelPulse;
|
|
23
25
|
#label;
|
|
@@ -40,6 +42,7 @@ export class ProgressReporter {
|
|
|
40
42
|
this.#label = sanitizeLine(label);
|
|
41
43
|
this.#startedAt = Date.now();
|
|
42
44
|
this.#line("running", this.#label, detail);
|
|
45
|
+
_a.#active.add(this);
|
|
43
46
|
if (this.#animate) {
|
|
44
47
|
this.#cancelPulse = this.#schedulePulse(() => this.#pulse(), this.#pulseIntervalMs);
|
|
45
48
|
}
|
|
@@ -55,6 +58,12 @@ export class ProgressReporter {
|
|
|
55
58
|
fail(detail) {
|
|
56
59
|
this.#close("failure", detail);
|
|
57
60
|
}
|
|
61
|
+
/** Closes any live pulse before the command-level error is rendered. */
|
|
62
|
+
static failActive() {
|
|
63
|
+
for (const reporter of [..._a.#active]) {
|
|
64
|
+
reporter.fail("failed");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
58
67
|
#close(tone, detail) {
|
|
59
68
|
const label = this.#label;
|
|
60
69
|
if (!label) {
|
|
@@ -62,6 +71,7 @@ export class ProgressReporter {
|
|
|
62
71
|
}
|
|
63
72
|
this.#stopPulse();
|
|
64
73
|
this.#label = undefined;
|
|
74
|
+
_a.#active.delete(this);
|
|
65
75
|
this.#line(tone, label, detail, formatDuration(Date.now() - this.#startedAt));
|
|
66
76
|
}
|
|
67
77
|
#finishPulseLine() {
|
|
@@ -102,4 +112,5 @@ export class ProgressReporter {
|
|
|
102
112
|
return paint(this.#theme, "dim", truncate(sanitizeLine(value), MAXIMUM_DETAIL_LENGTH));
|
|
103
113
|
}
|
|
104
114
|
}
|
|
115
|
+
_a = ProgressReporter;
|
|
105
116
|
//# sourceMappingURL=progress.js.map
|
package/dist/ui/progress.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/ui/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAElD,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAejE,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAEjC,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAiB,EAAE,UAAkB;IAClE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IAC5C,KAAK,CAAC,KAAK,EAAE,CAAA;IACb,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/ui/progress.ts"],"names":[],"mappings":"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"}
|