flakelab 0.1.5 → 0.1.6

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:
@@ -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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAW9D,SAAS,aAAa,CAAC,OAAsB;IAC3C,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAA;IACpD,QAAQ,CAAC,KAAK,CACZ,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAC1C,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,0BAA0B,EACxE,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,qCAAqC;UACtE,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,EAAE,CAC/D,CAAA;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC;QACnB,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE;QAC5C,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE;KACvC,CAAC,CAAC,MAAM,EAAE,CAAA;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB,EAAE,MAAqB;IAClE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACjC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,kBAAkB,CACxE,wBAAwB,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAClE;QACE,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC;QAC7D,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,kBAAkB,EAAE,UAAU,CAAC,eAAe,CAAC,WAAW;QAC1D,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,MAAM;QACN,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CACF,CAAC,CAAA;IACF,MAAM,gBAAgB,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS;WACzD,UAAU,CAAC,eAAe,CAAC,SAAS,KAAK,MAAM,CAAC,wBAAwB,CAAA;IAC7E,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,IAAI,gBAAgB,CAAA;IACvD,WAAW,CAAC,aAAa,CACvB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI;QAC1F,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAC1B,CAAC,CAAA;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9E,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACtB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"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"}
@@ -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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"}
@@ -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;
@@ -19,3 +24,4 @@ export declare class ProgressReporter {
19
24
  done(detail?: string): void;
20
25
  fail(detail?: string): void;
21
26
  }
27
+ export {};
@@ -2,32 +2,51 @@ import { formatDuration } from "./format.js";
2
2
  import { statusMark } from "./status.js";
3
3
  import { paint } from "./style.js";
4
4
  import { sanitizeLine, truncate } from "./text.js";
5
- import { stderrTheme } from "./theme.js";
5
+ import { stderrTheme, terminalActivityEnabled } from "./theme.js";
6
6
  const MAXIMUM_DETAIL_LENGTH = 200;
7
7
  function defaultWriter(chunk) {
8
8
  process.stderr.write(chunk);
9
9
  }
10
+ function defaultPulseScheduler(pulse, intervalMs) {
11
+ const timer = setInterval(pulse, intervalMs);
12
+ timer.unref();
13
+ return () => clearInterval(timer);
14
+ }
10
15
  /**
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.
16
+ * Line-oriented stage progress on stderr. Interactive terminals receive a
17
+ * growing dot pulse during quiet work; redirected and CI output stays static.
18
+ * It never emits cursor movement, carriage returns, or erase sequences.
14
19
  */
15
20
  export class ProgressReporter {
21
+ #animate;
22
+ #cancelPulse;
16
23
  #label;
24
+ #pulseDots = 0;
25
+ #pulseLineOpen = false;
26
+ #pulseIntervalMs;
27
+ #schedulePulse;
17
28
  #startedAt = 0;
18
29
  #theme;
19
30
  #write;
20
31
  constructor(options = {}) {
32
+ this.#animate = options.animate ?? terminalActivityEnabled();
33
+ this.#pulseIntervalMs = options.pulseIntervalMs ?? 1_000;
34
+ this.#schedulePulse = options.schedulePulse ?? defaultPulseScheduler;
21
35
  this.#theme = options.theme ?? stderrTheme();
22
36
  this.#write = options.write ?? defaultWriter;
23
37
  }
24
38
  start(label, detail) {
39
+ this.#stopPulse();
25
40
  this.#label = sanitizeLine(label);
26
41
  this.#startedAt = Date.now();
27
42
  this.#line("running", this.#label, detail);
43
+ if (this.#animate) {
44
+ this.#cancelPulse = this.#schedulePulse(() => this.#pulse(), this.#pulseIntervalMs);
45
+ }
28
46
  }
29
47
  /** A subordinate observation inside the running stage. */
30
48
  step(text, tone = "muted") {
49
+ this.#finishPulseLine();
31
50
  this.#write(` ${statusMark(this.#theme, tone)} ${this.#detail(text)}\n`);
32
51
  }
33
52
  done(detail) {
@@ -41,9 +60,36 @@ export class ProgressReporter {
41
60
  if (!label) {
42
61
  return;
43
62
  }
63
+ this.#stopPulse();
44
64
  this.#label = undefined;
45
65
  this.#line(tone, label, detail, formatDuration(Date.now() - this.#startedAt));
46
66
  }
67
+ #finishPulseLine() {
68
+ if (this.#pulseLineOpen) {
69
+ this.#write("\n");
70
+ this.#pulseLineOpen = false;
71
+ this.#pulseDots = 0;
72
+ }
73
+ }
74
+ #pulse() {
75
+ if (!this.#label) {
76
+ return;
77
+ }
78
+ if (!this.#pulseLineOpen) {
79
+ this.#write(` ${statusMark(this.#theme, "muted")} ${this.#detail("working")}`);
80
+ this.#pulseLineOpen = true;
81
+ }
82
+ this.#write(paint(this.#theme, "dim", "."));
83
+ this.#pulseDots += 1;
84
+ if (this.#pulseDots >= 12) {
85
+ this.#finishPulseLine();
86
+ }
87
+ }
88
+ #stopPulse() {
89
+ this.#cancelPulse?.();
90
+ this.#cancelPulse = undefined;
91
+ this.#finishPulseLine();
92
+ }
47
93
  #line(tone, label, ...details) {
48
94
  const separator = this.#theme.unicode ? " · " : " | ";
49
95
  const suffix = details
@@ -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.6",
4
4
  "description": "Find, reproduce, and prove fixes for flaky Playwright tests.",
5
5
  "type": "module",
6
6
  "license": "MIT",