flakelab 0.1.5 → 0.1.7

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/README.md CHANGED
@@ -350,13 +350,19 @@ received. FlakeLab rejects test changes,
350
350
  assertion weakening, lint suppressions, credential-like additions, path escapes, and numeric-only
351
351
  timeout increases before execution.
352
352
 
353
- The candidate is copied into a disposable Solari microVM. Typecheck, lint, hostile trials, clean
353
+ The candidate diff is rendered in an interactive terminal and saved to `candidate.diff` before
354
+ proof begins, without changing the working tree. The candidate is then copied into a disposable
355
+ Solari microVM. Typecheck, lint, hostile trials, clean
354
356
  controls, and up to 50 nested or co-located `.spec.*` and `.test.*` regression files all run there.
355
357
  The machine is destroyed afterward, and the
356
358
  candidate is returned as a reviewable diff; FlakeLab never applies it to the local checkout.
357
359
  Cold validation installs the pinned Node/pnpm toolchain and Chromium, so it is intentionally
358
360
  slower than the future snapshot-backed warm path.
359
361
 
362
+ While an interactive stage is waiting on Playwright, Groq, or Solari, FlakeLab prints a small
363
+ `working...` pulse. Redirected output and CI logs remain static, and machine-readable stdout is
364
+ unchanged.
365
+
360
366
  ## Evidence report
361
367
 
362
368
  Turn the validated investigation, reproducer, candidate, and proof into one portable report:
package/dist/cli.js CHANGED
@@ -2,6 +2,7 @@ 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",
@@ -109,6 +110,7 @@ async function main() {
109
110
  await runCommand(invocation);
110
111
  }
111
112
  catch (error) {
113
+ ProgressReporter.failActive();
112
114
  let message = "FlakeLab failed";
113
115
  if (error instanceof Error) {
114
116
  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":"AAAA,OAAO,EAAE,iBAAiB,EAAsB,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAQxD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAkC;IACjE,QAAQ;IACR,aAAa;IACb,OAAO;IACP,QAAQ;IACR,QAAQ;CACT,CAAC,CAAA;AAEF,KAAK,UAAU,iBAAiB,CAAC,UAA6B;IAC5D,QAAQ,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3B,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;YACvD,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YAChC,OAAM;QACR,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;YAC3D,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;YACrD,OAAM;QACR,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;YAC3D,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;YACrD,OAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;YACvD,MAAM,MAAM,EAAE,CAAA;YACd,OAAM;QACR,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAA;YACjE,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;YACxD,OAAM;QACR,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;YACrD,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;YAClD,OAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;YACvD,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;YACnD,OAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;YACvD,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;YACnD,OAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;YAC/D,MAAM,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;YAC3D,OAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,UAAgC;IACxD,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;QACzD,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;QACpD,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAClC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;QACnD,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;QAClE,MAAM,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QACxC,OAAM;IACR,CAAC;IACD,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAA;AACrC,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,KAAY;IAC9C,IAAI,CAAC;QACH,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;QACjE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,OAAO,CAAA;IACtB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,IAAI,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAA;AAC/E,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,eAAe,GAAG,KAAK,CAAA;IAC3B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3D,IAAI,UAAU,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;YAC/D,OAAM;QACR,CAAC;QACD,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACrC,WAAW,CAAC,OAAO,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QACD,eAAe,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QAC3D,MAAM,UAAU,CAAC,UAAU,CAAC,CAAA;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gBAAgB,CAAC,UAAU,EAAE,CAAA;QAC7B,IAAI,OAAO,GAAG,iBAAiB,CAAA;QAC/B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAA;QAC/E,CAAC;QACD,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;QACjC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACtB,CAAC;AACH,CAAC;AAED,MAAM,IAAI,EAAE,CAAA"}
@@ -10,9 +10,11 @@ import { withSolariTransport } from "../solari/transport.js";
10
10
  import { formatProviderBoundary } from "../ui/boundary.js";
11
11
  import { writeStderr } from "../ui/console.js";
12
12
  import { formatCount } from "../ui/format.js";
13
+ import { formatCandidateDiff } from "../ui/diff.js";
13
14
  import { ProgressReporter } from "../ui/progress.js";
14
- import { stderrTheme } from "../ui/theme.js";
15
+ import { stderrTheme, terminalActivityEnabled } from "../ui/theme.js";
15
16
  import { formatProofSummary } from "../repair/summary.js";
17
+ import { createCandidateDiff } from "../repair/workspace.js";
16
18
  import { integerOption, positiveNumberOption, withInterruption } from "./options.js";
17
19
  export async function repair(investigationPath, values) {
18
20
  writeStderr(formatProviderBoundary({
@@ -53,6 +55,11 @@ export async function repair(investigationPath, values) {
53
55
  sourcePaths: values.source,
54
56
  });
55
57
  progress.done(formatCount(generated.candidate.edits.length, "source edit"));
58
+ const previewDiff = await createCandidateDiff(projectRoot, generated.candidate);
59
+ await writeFile(patchPath, previewDiff, "utf8");
60
+ if (terminalActivityEnabled()) {
61
+ writeStderr(formatCandidateDiff(previewDiff, values.patch, stderrTheme()));
62
+ }
56
63
  progress.start("isolated proof", "Solari microVM");
57
64
  const validated = await withSolariTransport(async () => validateProofOfFix({
58
65
  apiKey: solariApiKey,
@@ -1 +1 @@
1
- {"version":3,"file":"repair.js","sourceRoot":"","sources":["../../src/commands/repair.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repair.js","sourceRoot":"","sources":["../../src/commands/repair.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ import { readReproducer } from "../reproducer/file.js";
4
4
  import { createPlaywrightExecutor } from "../runner/playwright-executor.js";
5
5
  import { writeStderr } from "../ui/console.js";
6
6
  import { TerminalDocument } from "../ui/document.js";
7
+ import { formatCount } from "../ui/format.js";
8
+ import { ProgressReporter } from "../ui/progress.js";
7
9
  import { stderrTheme } from "../ui/theme.js";
8
10
  import { integerOption, withInterruption } from "./options.js";
9
11
  function replaySummary(verdict) {
@@ -18,6 +20,8 @@ function replaySummary(verdict) {
18
20
  export async function replay(filePath, values) {
19
21
  const projectRoot = process.cwd();
20
22
  const reproducer = await readReproducer(resolve(projectRoot, filePath));
23
+ const progress = new ProgressReporter();
24
+ progress.start("reproducer replay", `${formatCount(reproducer.trials, "trial")} under the recorded fault`);
21
25
  const result = await withInterruption(async (signal) => evaluateExperiment(createPlaywrightExecutor(projectRoot, reproducer.test, { signal }), {
22
26
  concurrency: integerOption(values.concurrency, "concurrency"),
23
27
  faults: reproducer.faults,
@@ -29,6 +33,8 @@ export async function replay(filePath, values) {
29
33
  const signatureMatches = !reproducer.expectedFailure.signature
30
34
  || reproducer.expectedFailure.signature === result.dominantFailureSignature;
31
35
  const reproduced = result.confirmed && signatureMatches;
36
+ progress.done(`${result.failed}/${result.trials} failed · signature `
37
+ + `${signatureMatches ? "matched" : "did not match"}`);
32
38
  writeStderr(replaySummary({ failed: result.failed, path: filePath, reproduced, signatureMatches, test: reproducer.test,
33
39
  trials: result.trials }));
34
40
  console.log(JSON.stringify({ reproduced, signatureMatches, result }, null, 2));
@@ -1 +1 @@
1
- {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"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"}
@@ -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 generateText({
151
- model: options.model,
152
- output: Output.object({ schema: investigationPlanSchema }),
153
- prompt: planningPrompt(options.test, sources, options.maximumDelayMs),
154
- maxOutputTokens: options.outputTokenLimit,
155
- maxRetries: 2,
156
- timeout: { totalMs: budget.remainingMs() },
157
- abortSignal: signal,
158
- temperature: 0.2,
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.output;
161
- validatePlan(plan, options);
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 < 3) {
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 = (planResult.usage.inputTokens ?? 0) + assessmentResults.reduce((total, result) => total + (result.usage.inputTokens ?? 0), 0);
208
- const outputTokens = (planResult.usage.outputTokens ?? 0) + assessmentResults.reduce((total, result) => total + (result.usage.outputTokens ?? 0), 0);
209
- const cost = estimatedCost(inputTokens, outputTokens, options);
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":"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"}
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":"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"}
@@ -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>>;
@@ -5,3 +5,5 @@ export interface PatchWorkspace {
5
5
  }
6
6
  export declare function createPatchWorkspace(projectRoot: string): Promise<PatchWorkspace>;
7
7
  export declare function applyCandidatePatch(workspaceRoot: string, candidate: CandidatePatch): Promise<string>;
8
+ /** Builds the exact patch without changing the developer's working tree. */
9
+ export declare function createCandidateDiff(projectRoot: string, candidate: CandidatePatch): Promise<string>;
@@ -37,4 +37,16 @@ export async function applyCandidatePatch(workspaceRoot, candidate) {
37
37
  }
38
38
  return patches.join("\n");
39
39
  }
40
+ /** Builds the exact patch without changing the developer's working tree. */
41
+ export async function createCandidateDiff(projectRoot, candidate) {
42
+ const patches = await Promise.all(candidate.edits.map(async (edit) => {
43
+ const beforeFile = await readFile(resolve(projectRoot, edit.path), "utf8");
44
+ const afterFile = beforeFile.replace(edit.before, edit.after);
45
+ if (afterFile === beforeFile) {
46
+ throw new Error(`Candidate edit did not change ${edit.path}`);
47
+ }
48
+ return createTwoFilesPatch(`a/${edit.path}`, `b/${edit.path}`, beforeFile, afterFile, "before", "candidate", { context: 3 });
49
+ }));
50
+ return patches.join("\n");
51
+ }
40
52
  //# sourceMappingURL=workspace.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/repair/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAA;AAC1C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,MAAM,YAAY,GAAG;IACnB,KAAK;IACL,OAAO;IACP,mBAAmB;IACnB,cAAc;IACd,gBAAgB;IAChB,qBAAqB;IACrB,sBAAsB;IACtB,eAAe;CACP,CAAA;AAOV,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAA;IACnE,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;IACzD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KAChE,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,aAAqB,EACrB,SAAyB;IAEzB,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAClD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QACnD,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7D,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAC/D,CAAC;QACD,MAAM,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAC5C,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAC9B,KAAK,IAAI,CAAC,IAAI,EAAE,EAChB,KAAK,IAAI,CAAC,IAAI,EAAE,EAChB,UAAU,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,EAAE,OAAO,EAAE,CAAC,EAAE,CACf,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC"}
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/repair/workspace.ts"],"names":[],"mappings":"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"}
@@ -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>>;
@@ -0,0 +1,3 @@
1
+ import type { TerminalTheme } from "./theme.js";
2
+ /** A bounded, sanitized terminal preview; the complete exact patch remains on disk. */
3
+ export declare function formatCandidateDiff(diff: string, patchPath: string, theme?: TerminalTheme): string;
@@ -0,0 +1,36 @@
1
+ import { paint } from "./style.js";
2
+ import { sanitizeText } from "./text.js";
3
+ import { PLAIN_THEME } from "./theme.js";
4
+ const MAXIMUM_RENDERED_LINES = 240;
5
+ function diffStyle(line) {
6
+ if (line.startsWith("+++ ") || line.startsWith("--- ")) {
7
+ return "bold";
8
+ }
9
+ if (line.startsWith("@@")) {
10
+ return "cyan";
11
+ }
12
+ if (line.startsWith("+")) {
13
+ return "green";
14
+ }
15
+ if (line.startsWith("-")) {
16
+ return "red";
17
+ }
18
+ if (line.startsWith("Index:") || line.startsWith("=")) {
19
+ return "dim";
20
+ }
21
+ return undefined;
22
+ }
23
+ /** A bounded, sanitized terminal preview; the complete exact patch remains on disk. */
24
+ export function formatCandidateDiff(diff, patchPath, theme = PLAIN_THEME) {
25
+ const lines = sanitizeText(diff).split("\n");
26
+ const visible = lines.slice(0, MAXIMUM_RENDERED_LINES);
27
+ const rendered = visible.map((line) => {
28
+ const style = diffStyle(line);
29
+ return style ? paint(theme, style, line) : line;
30
+ });
31
+ if (lines.length > MAXIMUM_RENDERED_LINES) {
32
+ rendered.push(paint(theme, "dim", `... preview truncated; complete diff saved to ${patchPath}`));
33
+ }
34
+ return ["", paint(theme, "bold", "Candidate diff"), ...rendered].join("\n");
35
+ }
36
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/ui/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,sBAAsB,GAAG,GAAG,CAAA;AAElC,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvD,OAAO,MAAM,CAAA;IACf,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAA;IACf,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,SAAiB,EACjB,QAAuB,WAAW;IAElC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAA;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACpC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAC7B,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACjD,CAAC,CAAC,CAAA;IACF,IAAI,KAAK,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,KAAK,CACjB,KAAK,EACL,KAAK,EACL,iDAAiD,SAAS,EAAE,CAC7D,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC7E,CAAC"}
@@ -2,13 +2,18 @@ import type { StatusTone } from "./status.js";
2
2
  import type { TerminalTheme } from "./theme.js";
3
3
  export type ProgressWriter = (chunk: string) => void;
4
4
  export interface ProgressOptions {
5
+ animate?: boolean;
6
+ pulseIntervalMs?: number;
7
+ schedulePulse?: PulseScheduler;
5
8
  theme?: TerminalTheme;
6
9
  write?: ProgressWriter;
7
10
  }
11
+ type CancelPulse = () => void;
12
+ type PulseScheduler = (pulse: () => void, intervalMs: number) => CancelPulse;
8
13
  /**
9
- * Line-oriented stage progress on stderr. It never emits cursor movement,
10
- * carriage returns, or erase sequences, so a redirected or CI log is identical
11
- * to what an interactive terminal shows apart from color.
14
+ * Line-oriented stage progress on stderr. Interactive terminals receive a
15
+ * growing dot pulse during quiet work; redirected and CI output stays static.
16
+ * It never emits cursor movement, carriage returns, or erase sequences.
12
17
  */
13
18
  export declare class ProgressReporter {
14
19
  #private;
@@ -18,4 +23,7 @@ export declare class ProgressReporter {
18
23
  step(text: string, tone?: StatusTone): void;
19
24
  done(detail?: string): void;
20
25
  fail(detail?: string): void;
26
+ /** Closes any live pulse before the command-level error is rendered. */
27
+ static failActive(): void;
21
28
  }
29
+ export {};
@@ -1,33 +1,55 @@
1
+ var _a;
1
2
  import { formatDuration } from "./format.js";
2
3
  import { statusMark } from "./status.js";
3
4
  import { paint } from "./style.js";
4
5
  import { sanitizeLine, truncate } from "./text.js";
5
- import { stderrTheme } from "./theme.js";
6
+ import { stderrTheme, terminalActivityEnabled } from "./theme.js";
6
7
  const MAXIMUM_DETAIL_LENGTH = 200;
7
8
  function defaultWriter(chunk) {
8
9
  process.stderr.write(chunk);
9
10
  }
11
+ function defaultPulseScheduler(pulse, intervalMs) {
12
+ const timer = setInterval(pulse, intervalMs);
13
+ timer.unref();
14
+ return () => clearInterval(timer);
15
+ }
10
16
  /**
11
- * Line-oriented stage progress on stderr. It never emits cursor movement,
12
- * carriage returns, or erase sequences, so a redirected or CI log is identical
13
- * to what an interactive terminal shows apart from color.
17
+ * Line-oriented stage progress on stderr. Interactive terminals receive a
18
+ * growing dot pulse during quiet work; redirected and CI output stays static.
19
+ * It never emits cursor movement, carriage returns, or erase sequences.
14
20
  */
15
21
  export class ProgressReporter {
22
+ static #active = new Set();
23
+ #animate;
24
+ #cancelPulse;
16
25
  #label;
26
+ #pulseDots = 0;
27
+ #pulseLineOpen = false;
28
+ #pulseIntervalMs;
29
+ #schedulePulse;
17
30
  #startedAt = 0;
18
31
  #theme;
19
32
  #write;
20
33
  constructor(options = {}) {
34
+ this.#animate = options.animate ?? terminalActivityEnabled();
35
+ this.#pulseIntervalMs = options.pulseIntervalMs ?? 1_000;
36
+ this.#schedulePulse = options.schedulePulse ?? defaultPulseScheduler;
21
37
  this.#theme = options.theme ?? stderrTheme();
22
38
  this.#write = options.write ?? defaultWriter;
23
39
  }
24
40
  start(label, detail) {
41
+ this.#stopPulse();
25
42
  this.#label = sanitizeLine(label);
26
43
  this.#startedAt = Date.now();
27
44
  this.#line("running", this.#label, detail);
45
+ _a.#active.add(this);
46
+ if (this.#animate) {
47
+ this.#cancelPulse = this.#schedulePulse(() => this.#pulse(), this.#pulseIntervalMs);
48
+ }
28
49
  }
29
50
  /** A subordinate observation inside the running stage. */
30
51
  step(text, tone = "muted") {
52
+ this.#finishPulseLine();
31
53
  this.#write(` ${statusMark(this.#theme, tone)} ${this.#detail(text)}\n`);
32
54
  }
33
55
  done(detail) {
@@ -36,14 +58,48 @@ export class ProgressReporter {
36
58
  fail(detail) {
37
59
  this.#close("failure", detail);
38
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
+ }
39
67
  #close(tone, detail) {
40
68
  const label = this.#label;
41
69
  if (!label) {
42
70
  return;
43
71
  }
72
+ this.#stopPulse();
44
73
  this.#label = undefined;
74
+ _a.#active.delete(this);
45
75
  this.#line(tone, label, detail, formatDuration(Date.now() - this.#startedAt));
46
76
  }
77
+ #finishPulseLine() {
78
+ if (this.#pulseLineOpen) {
79
+ this.#write("\n");
80
+ this.#pulseLineOpen = false;
81
+ this.#pulseDots = 0;
82
+ }
83
+ }
84
+ #pulse() {
85
+ if (!this.#label) {
86
+ return;
87
+ }
88
+ if (!this.#pulseLineOpen) {
89
+ this.#write(` ${statusMark(this.#theme, "muted")} ${this.#detail("working")}`);
90
+ this.#pulseLineOpen = true;
91
+ }
92
+ this.#write(paint(this.#theme, "dim", "."));
93
+ this.#pulseDots += 1;
94
+ if (this.#pulseDots >= 12) {
95
+ this.#finishPulseLine();
96
+ }
97
+ }
98
+ #stopPulse() {
99
+ this.#cancelPulse?.();
100
+ this.#cancelPulse = undefined;
101
+ this.#finishPulseLine();
102
+ }
47
103
  #line(tone, label, ...details) {
48
104
  const separator = this.#theme.unicode ? " · " : " | ";
49
105
  const suffix = details
@@ -56,4 +112,5 @@ export class ProgressReporter {
56
112
  return paint(this.#theme, "dim", truncate(sanitizeLine(value), MAXIMUM_DETAIL_LENGTH));
57
113
  }
58
114
  }
115
+ _a = ProgressReporter;
59
116
  //# sourceMappingURL=progress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/ui/progress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/ui/progress.ts"],"names":[],"mappings":"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"}
@@ -21,3 +21,5 @@ export declare function createTheme(context: TerminalContext): TerminalTheme;
21
21
  export declare function streamTheme(stream: NodeJS.WriteStream, env?: NodeJS.ProcessEnv): TerminalTheme;
22
22
  export declare function stdoutTheme(): TerminalTheme;
23
23
  export declare function stderrTheme(): TerminalTheme;
24
+ /** Live terminal affordances stay out of redirected output and CI logs. */
25
+ export declare function terminalActivityEnabled(stream?: NodeJS.WriteStream, env?: NodeJS.ProcessEnv): boolean;
package/dist/ui/theme.js CHANGED
@@ -74,4 +74,8 @@ export function stdoutTheme() {
74
74
  export function stderrTheme() {
75
75
  return streamTheme(process.stderr);
76
76
  }
77
+ /** Live terminal affordances stay out of redirected output and CI logs. */
78
+ export function terminalActivityEnabled(stream = process.stderr, env = process.env) {
79
+ return Boolean(stream.isTTY) && !present(env.CI) && env.TERM !== "dumb";
80
+ }
77
81
  //# sourceMappingURL=theme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/ui/theme.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/ui/theme.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flakelab",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Find, reproduce, and prove fixes for flaky Playwright tests.",
5
5
  "type": "module",
6
6
  "license": "MIT",