flakewatch-core 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # flakewatch-core
2
+
3
+ Core logic for [Flakewatch](https://github.com/jlawrence6809/flakewatch) -- AI-powered Playwright test failure triage.
4
+
5
+ This package contains the shared libraries used by the CLI, reporter, browser agent, and GitHub Action. Most users should use `flakewatch` (CLI) or `flakewatch-playwright` (reporter) instead of this package directly.
6
+
7
+ ## What's inside
8
+
9
+ - **Config** -- loading, validation, and defaults
10
+ - **Context** -- packaging test failures with source code, page objects, error info, and screenshots
11
+ - **Grouping** -- clustering failures by normalized error signature
12
+ - **LLM** -- Anthropic client with verdict-focused system prompt
13
+ - **Verdicts** -- type definitions for all verdict types
14
+ - **Reporting** -- Markdown, JSON, and GitHub comment output
15
+ - **Triage** -- the main pipeline that groups, investigates, and reports
16
+
17
+ ## Usage
18
+
19
+ ```ts
20
+ import {
21
+ loadConfig,
22
+ triageFailures,
23
+ formatMarkdownReport,
24
+ parsePlaywrightJsonReport,
25
+ } from 'flakewatch-core';
26
+
27
+ const config = await loadConfig();
28
+ const { failures, totalTests } = parsePlaywrightJsonReport(jsonReport);
29
+
30
+ const report = await triageFailures({ failures, totalTests, config });
31
+ console.log(formatMarkdownReport(report));
32
+ ```
33
+
34
+ ## License
35
+
36
+ MIT
package/dist/config.d.ts CHANGED
@@ -1,7 +1,10 @@
1
+ export type LLMProviderType = 'anthropic' | 'openai';
1
2
  export interface LLMConfig {
2
- provider: 'anthropic';
3
+ provider: LLMProviderType;
3
4
  model: string;
4
5
  apiKey?: string;
6
+ /** Base URL override (useful for OpenAI-compatible APIs like Azure, Ollama, etc.) */
7
+ baseURL?: string;
5
8
  }
6
9
  export interface BrowserConfig {
7
10
  method: 'mcp';
@@ -28,7 +31,7 @@ export interface OutputConfig {
28
31
  format: 'markdown' | 'json' | 'github-comment';
29
32
  dir: string;
30
33
  }
31
- export interface SmartRetryConfig {
34
+ export interface FlakewatchConfig {
32
35
  llm: LLMConfig;
33
36
  browser: BrowserConfig;
34
37
  investigation: InvestigationConfig;
@@ -36,6 +39,8 @@ export interface SmartRetryConfig {
36
39
  context: ContextConfig;
37
40
  output: OutputConfig;
38
41
  }
39
- export declare function loadConfig(configPath?: string, overrides?: Partial<SmartRetryConfig>): Promise<SmartRetryConfig>;
40
- export declare function validateConfig(config: SmartRetryConfig): string[];
42
+ /** @deprecated Use FlakewatchConfig instead */
43
+ export type SmartRetryConfig = FlakewatchConfig;
44
+ export declare function loadConfig(configPath?: string, overrides?: Partial<FlakewatchConfig>): Promise<FlakewatchConfig>;
45
+ export declare function validateConfig(config: FlakewatchConfig): string[];
41
46
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,KAAK,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,iBAAiB,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,gBAAgB,CAAC;IAC/C,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,SAAS,CAAC;IACf,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,EAAE,mBAAmB,CAAC;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB;AA+BD,wBAAsB,UAAU,CAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACpC,OAAO,CAAC,gBAAgB,CAAC,CA6B3B;AA0BD,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAyBjE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,KAAK,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,iBAAiB,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,gBAAgB,CAAC;IAC/C,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,SAAS,CAAC;IACf,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,EAAE,mBAAmB,CAAC;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAoDhD,wBAAsB,UAAU,CAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACpC,OAAO,CAAC,gBAAgB,CAAC,CA6B3B;AA+BD,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CA0BjE"}
package/dist/config.js CHANGED
@@ -1,32 +1,52 @@
1
1
  import { resolve } from 'node:path';
2
- const DEFAULT_CONFIG = {
3
- llm: {
2
+ function detectProvider() {
3
+ if (process.env['ANTHROPIC_API_KEY']) {
4
+ return {
5
+ provider: 'anthropic',
6
+ model: 'claude-sonnet-4-20250514',
7
+ apiKey: process.env['ANTHROPIC_API_KEY'],
8
+ };
9
+ }
10
+ if (process.env['OPENAI_API_KEY']) {
11
+ return {
12
+ provider: 'openai',
13
+ model: 'gpt-4o',
14
+ apiKey: process.env['OPENAI_API_KEY'],
15
+ };
16
+ }
17
+ return {
4
18
  provider: 'anthropic',
5
19
  model: 'claude-sonnet-4-20250514',
6
- apiKey: process.env['ANTHROPIC_API_KEY'],
7
- },
8
- browser: {
9
- method: 'mcp',
10
- mcpServerCommand: 'npx chrome-devtools-mcp --headless --isolated',
11
- },
12
- investigation: {
13
- mode: 'screenshot',
14
- maxConcurrent: 3,
15
- maxTotal: 10,
16
- massFailureThreshold: 0.5,
17
- },
18
- auth: {},
19
- context: {
20
- includeTrace: true,
21
- includeConsole: true,
22
- includeNetwork: true,
23
- maxTestSourceTokens: 6000,
24
- },
25
- output: {
26
- format: 'markdown',
27
- dir: './flakewatch-reports',
28
- },
29
- };
20
+ apiKey: undefined,
21
+ };
22
+ }
23
+ function buildDefaultConfig() {
24
+ const llm = detectProvider();
25
+ return {
26
+ llm,
27
+ browser: {
28
+ method: 'mcp',
29
+ mcpServerCommand: 'npx chrome-devtools-mcp --headless --isolated',
30
+ },
31
+ investigation: {
32
+ mode: 'screenshot',
33
+ maxConcurrent: 3,
34
+ maxTotal: 10,
35
+ massFailureThreshold: 0.5,
36
+ },
37
+ auth: {},
38
+ context: {
39
+ includeTrace: true,
40
+ includeConsole: true,
41
+ includeNetwork: true,
42
+ maxTestSourceTokens: 6000,
43
+ },
44
+ output: {
45
+ format: 'markdown',
46
+ dir: './flakewatch-reports',
47
+ },
48
+ };
49
+ }
30
50
  export async function loadConfig(configPath, overrides) {
31
51
  let fileConfig = {};
32
52
  if (configPath) {
@@ -52,7 +72,7 @@ export async function loadConfig(configPath, overrides) {
52
72
  }
53
73
  }
54
74
  }
55
- return deepMerge(DEFAULT_CONFIG, fileConfig, (overrides ?? {}));
75
+ return deepMerge(buildDefaultConfig(), fileConfig, (overrides ?? {}));
56
76
  }
57
77
  function deepMerge(...sources) {
58
78
  const result = {};
@@ -71,10 +91,15 @@ function deepMerge(...sources) {
71
91
  }
72
92
  return result;
73
93
  }
94
+ const ENV_KEY_NAMES = {
95
+ anthropic: 'ANTHROPIC_API_KEY',
96
+ openai: 'OPENAI_API_KEY',
97
+ };
74
98
  export function validateConfig(config) {
75
99
  const errors = [];
76
100
  if (!config.llm.apiKey) {
77
- errors.push('Missing LLM API key. Set ANTHROPIC_API_KEY env var or configure llm.apiKey.');
101
+ const envVar = ENV_KEY_NAMES[config.llm.provider] ?? 'ANTHROPIC_API_KEY';
102
+ errors.push(`Missing API key for ${config.llm.provider}. Set the ${envVar} environment variable or configure llm.apiKey in flakewatch.config.ts.`);
78
103
  }
79
104
  if (config.investigation.maxConcurrent < 1) {
80
105
  errors.push('investigation.maxConcurrent must be >= 1');
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuDpC,SAAS,cAAc;IACrB,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,0BAA0B;YACjC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;SACzC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;SACtC,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,0BAA0B;QACjC,MAAM,EAAE,SAAS;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;IAC7B,OAAO;QACL,GAAG;QACH,OAAO,EAAE;YACP,MAAM,EAAE,KAAK;YACb,gBAAgB,EAAE,+CAA+C;SAClE;QACD,aAAa,EAAE;YACb,IAAI,EAAE,YAAY;YAClB,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,EAAE;YACZ,oBAAoB,EAAE,GAAG;SAC1B;QACD,IAAI,EAAE,EAAE;QACR,OAAO,EAAE;YACP,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,IAAI;YACpB,cAAc,EAAE,IAAI;YACpB,mBAAmB,EAAE,IAAI;SAC1B;QACD,MAAM,EAAE;YACN,MAAM,EAAE,UAAU;YAClB,GAAG,EAAE,sBAAsB;SAC5B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAmB,EACnB,SAAqC;IAErC,IAAI,UAAU,GAA8B,EAAE,CAAC;IAE/C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YAC1C,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,8BAA8B,YAAY,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+BAA+B;QAC/B,KAAK,MAAM,IAAI,IAAI,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3C,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;gBACtC,MAAM;YACR,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CACd,kBAAkB,EAAwC,EAC1D,UAAqC,EACrC,CAAC,SAAS,IAAI,EAAE,CAA4B,CACd,CAAC;AACnC,CAAC;AAED,SAAS,SAAS,CAChB,GAAG,OAAkC;IAErC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IACE,KAAK,KAAK,SAAS;gBACnB,OAAO,KAAK,KAAK,QAAQ;gBACzB,KAAK,KAAK,IAAI;gBACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACrB,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACpB,MAAM,CAAC,GAAG,CAA6B,IAAI,EAAE,EAC9C,KAAgC,CACjC,CAAC;YACJ,CAAC;iBAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,aAAa,GAAoC;IACrD,SAAS,EAAE,mBAAmB;IAC9B,MAAM,EAAE,gBAAgB;CACzB,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,MAAwB;IACrD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC;QACzE,MAAM,CAAC,IAAI,CACT,uBAAuB,MAAM,CAAC,GAAG,CAAC,QAAQ,aAAa,MAAM,wEAAwE,CACtI,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;IAED,IACE,MAAM,CAAC,aAAa,CAAC,oBAAoB,IAAI,CAAC;QAC9C,MAAM,CAAC,aAAa,CAAC,oBAAoB,GAAG,CAAC,EAC7C,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,14 +1,14 @@
1
1
  export { loadConfig, validateConfig } from './config.js';
2
- export type { SmartRetryConfig, LLMConfig, BrowserConfig, InvestigationConfig, InvestigationMode, AuthConfig, ContextConfig, OutputConfig } from './config.js';
2
+ export type { FlakewatchConfig, SmartRetryConfig, LLMConfig, LLMProviderType, BrowserConfig, InvestigationConfig, InvestigationMode, AuthConfig, ContextConfig, OutputConfig } from './config.js';
3
3
  export { packageFailureContext, formatContextForLLM } from './context.js';
4
4
  export type { TestFailure, FailureContext, FailingLine, TraceAction, NetworkRequest } from './context.js';
5
5
  export { groupFailures, selectGroupsForInvestigation } from './grouping.js';
6
6
  export type { FailureGroup } from './grouping.js';
7
- export { createLLMProvider } from './llm.js';
7
+ export { createLLMProvider, parseVerdictResponse } from './llm.js';
8
8
  export type { LLMProvider, LLMAnalysisResult } from './llm.js';
9
9
  export type { Verdict, VerdictType, VerdictEvidence, ProposedFix, ProposedComment, InvestigationResult, TriageReport, FailureGroupSummary } from './verdicts.js';
10
10
  export { formatMarkdownReport, formatGitHubComment, formatJsonReport, writeReport } from './report.js';
11
11
  export { parsePlaywrightJsonReport } from './playwright-json.js';
12
12
  export { triageFailures } from './triage.js';
13
- export type { TriageOptions, BrowserInvestigatorFn } from './triage.js';
13
+ export type { TriageOptions, BrowserInvestigatorFn, TriageProgress } from './triage.js';
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/J,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC1E,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE1G,OAAO,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC5E,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE/D,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEjK,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvG,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAElM,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC1E,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE1G,OAAO,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC5E,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACnE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE/D,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEjK,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvG,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  export { loadConfig, validateConfig } from './config.js';
2
2
  export { packageFailureContext, formatContextForLLM } from './context.js';
3
3
  export { groupFailures, selectGroupsForInvestigation } from './grouping.js';
4
- export { createLLMProvider } from './llm.js';
4
+ export { createLLMProvider, parseVerdictResponse } from './llm.js';
5
5
  export { formatMarkdownReport, formatGitHubComment, formatJsonReport, writeReport } from './report.js';
6
6
  export { parsePlaywrightJsonReport } from './playwright-json.js';
7
7
  export { triageFailures } from './triage.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAG1E,OAAO,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAG5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAK7C,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvG,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAG1E,OAAO,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAG5E,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAKnE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvG,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
package/dist/llm.d.ts CHANGED
@@ -9,4 +9,5 @@ export interface LLMAnalysisResult {
9
9
  tokensUsed: number;
10
10
  }
11
11
  export declare function createLLMProvider(config: LLMConfig): LLMProvider;
12
+ export declare function parseVerdictResponse(text: string): Verdict;
12
13
  //# sourceMappingURL=llm.d.ts.map
package/dist/llm.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACzF;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AA8CD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,CAKhE"}
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACzF;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AA8CD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,CAWhE;AAyMD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA0B1D"}
package/dist/llm.js CHANGED
@@ -28,38 +28,51 @@ IMPORTANT: You MUST respond with ONLY valid JSON and nothing else. No markdown,
28
28
  "summary": string,
29
29
  "evidence": {
30
30
  "reasoning": string,
31
- "networkErrors": [{ "url": string, "status": number, "method": string }] | undefined,
32
- "consoleErrors": [string] | undefined
31
+ "networkErrors": [{ "url": string, "status": number, "method": string }] | null,
32
+ "consoleErrors": [string] | null
33
33
  },
34
34
  "proposedFix": {
35
35
  "filePath": string,
36
36
  "originalCode": string,
37
37
  "fixedCode": string,
38
38
  "explanation": string
39
- } | undefined,
39
+ } | null,
40
40
  "proposedComments": [{
41
41
  "filePath": string,
42
42
  "line": number,
43
43
  "comment": string
44
- }] | undefined
44
+ }] | null
45
45
  }`;
46
46
  export function createLLMProvider(config) {
47
- if (config.provider === 'anthropic') {
48
- return new AnthropicProvider(config);
47
+ switch (config.provider) {
48
+ case 'anthropic':
49
+ return new AnthropicProvider(config);
50
+ case 'openai':
51
+ return new OpenAICompatibleProvider(config);
52
+ default:
53
+ throw new Error(`Unsupported LLM provider: "${config.provider}". Supported providers: anthropic, openai`);
49
54
  }
50
- throw new Error(`Unsupported LLM provider: ${config.provider}`);
51
55
  }
52
- async function callWithRetry(client, params, maxRetries = 3) {
56
+ // ── Anthropic Provider ───────────────────────────────────────────────
57
+ async function callWithRetry(callFn, providerName, maxRetries = 3) {
53
58
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
54
59
  try {
55
- return await client.messages.create(params);
60
+ return await callFn();
56
61
  }
57
62
  catch (e) {
63
+ const msg = e instanceof Error ? e.message : String(e);
58
64
  const isRateLimit = e instanceof Anthropic.RateLimitError ||
59
- (e instanceof Error && e.message.includes('rate_limit'));
65
+ msg.includes('rate_limit') ||
66
+ msg.includes('429');
67
+ const isAuth = e instanceof Anthropic.AuthenticationError ||
68
+ msg.includes('401') ||
69
+ msg.includes('invalid') && msg.includes('key');
70
+ if (isAuth) {
71
+ throw new Error(`Authentication failed for ${providerName}. Check that your API key is valid and has sufficient credits.`);
72
+ }
60
73
  if (isRateLimit && attempt < maxRetries) {
61
74
  const waitMs = Math.min(30_000, (attempt + 1) * 15_000);
62
- console.log(` Rate limited, waiting ${waitMs / 1000}s...`);
75
+ process.stderr.write(` Rate limited by ${providerName}, retrying in ${waitMs / 1000}s...\n`);
63
76
  await new Promise((r) => setTimeout(r, waitMs));
64
77
  continue;
65
78
  }
@@ -72,17 +85,18 @@ class AnthropicProvider {
72
85
  client;
73
86
  model;
74
87
  constructor(config) {
75
- this.client = new Anthropic({ apiKey: config.apiKey });
88
+ this.client = new Anthropic({
89
+ apiKey: config.apiKey,
90
+ ...(config.baseURL ? { baseURL: config.baseURL } : {}),
91
+ });
76
92
  this.model = config.model;
77
93
  }
78
94
  async analyze(context, screenshotBase64) {
79
95
  const userContent = [];
80
- // Add the failure context as text
81
96
  userContent.push({
82
97
  type: 'text',
83
98
  text: formatContextForLLM(context),
84
99
  });
85
- // Add screenshot if available
86
100
  if (screenshotBase64) {
87
101
  userContent.push({
88
102
  type: 'image',
@@ -101,22 +115,92 @@ class AnthropicProvider {
101
115
  type: 'text',
102
116
  text: 'Analyze this test failure and respond with the JSON verdict.',
103
117
  });
104
- const response = await callWithRetry(this.client, {
105
- model: this.model,
106
- max_tokens: 2048,
107
- system: SYSTEM_PROMPT,
108
- messages: [{ role: 'user', content: userContent }],
118
+ const result = await callWithRetry(async () => {
119
+ const response = await this.client.messages.create({
120
+ model: this.model,
121
+ max_tokens: 2048,
122
+ system: SYSTEM_PROMPT,
123
+ messages: [{ role: 'user', content: userContent }],
124
+ });
125
+ const textBlock = response.content.find((block) => block.type === 'text');
126
+ return {
127
+ text: textBlock?.text ?? '',
128
+ tokensUsed: (response.usage.input_tokens ?? 0) +
129
+ (response.usage.output_tokens ?? 0),
130
+ };
131
+ }, 'Anthropic');
132
+ if (!result.text) {
133
+ throw new Error('No text response from Anthropic');
134
+ }
135
+ const verdict = parseVerdictResponse(result.text);
136
+ return { verdict, tokensUsed: result.tokensUsed };
137
+ }
138
+ }
139
+ // ── OpenAI-Compatible Provider ───────────────────────────────────────
140
+ class OpenAICompatibleProvider {
141
+ apiKey;
142
+ model;
143
+ baseURL;
144
+ constructor(config) {
145
+ this.apiKey = config.apiKey ?? '';
146
+ this.model = config.model;
147
+ this.baseURL = config.baseURL ?? 'https://api.openai.com/v1';
148
+ }
149
+ async analyze(context, screenshotBase64) {
150
+ const userContent = [];
151
+ userContent.push({
152
+ type: 'text',
153
+ text: formatContextForLLM(context),
109
154
  });
110
- const textBlock = response.content.find((block) => block.type === 'text');
111
- if (!textBlock) {
112
- throw new Error('No text response from LLM');
155
+ if (screenshotBase64) {
156
+ userContent.push({
157
+ type: 'image_url',
158
+ image_url: { url: `data:image/png;base64,${screenshotBase64}` },
159
+ });
160
+ userContent.push({
161
+ type: 'text',
162
+ text: 'Above is the screenshot captured at the moment of failure.',
163
+ });
164
+ }
165
+ userContent.push({
166
+ type: 'text',
167
+ text: 'Analyze this test failure and respond with the JSON verdict.',
168
+ });
169
+ const result = await callWithRetry(async () => {
170
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
171
+ method: 'POST',
172
+ headers: {
173
+ 'Content-Type': 'application/json',
174
+ Authorization: `Bearer ${this.apiKey}`,
175
+ },
176
+ body: JSON.stringify({
177
+ model: this.model,
178
+ max_tokens: 2048,
179
+ messages: [
180
+ { role: 'system', content: SYSTEM_PROMPT },
181
+ { role: 'user', content: userContent },
182
+ ],
183
+ }),
184
+ });
185
+ if (!response.ok) {
186
+ const body = await response.text();
187
+ throw new Error(`${response.status} ${body}`);
188
+ }
189
+ const data = (await response.json());
190
+ const text = data.choices?.[0]?.message?.content ?? '';
191
+ const tokensUsed = (data.usage?.prompt_tokens ?? 0) +
192
+ (data.usage?.completion_tokens ?? 0);
193
+ return { text, tokensUsed };
194
+ }, 'OpenAI');
195
+ if (!result.text) {
196
+ throw new Error('No text response from OpenAI');
113
197
  }
114
- const verdict = parseVerdictResponse(textBlock.text);
115
- const tokensUsed = (response.usage.input_tokens ?? 0) + (response.usage.output_tokens ?? 0);
116
- return { verdict, tokensUsed };
198
+ const verdict = parseVerdictResponse(result.text);
199
+ return { verdict, tokensUsed: result.tokensUsed };
117
200
  }
118
201
  }
119
- function parseVerdictResponse(text) {
202
+ // ── Verdict Parsing ──────────────────────────────────────────────────
203
+ export function parseVerdictResponse(text) {
120
204
  // Extract JSON from the response (may be wrapped in markdown code block)
121
205
  const jsonMatch = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/) ?? [
122
206
  null,
@@ -142,17 +226,13 @@ function parseVerdictResponse(text) {
142
226
  }
143
227
  }
144
228
  }
145
- /**
146
- * When the LLM responds with natural language instead of JSON,
147
- * try to infer a verdict from keywords in the response.
148
- */
149
229
  function inferVerdictFromText(text) {
150
230
  const lower = text.toLowerCase();
151
231
  let type;
152
232
  if (lower.includes('environment variable') || lower.includes('missing data') || lower.includes('test data')) {
153
233
  type = 'data_issue';
154
234
  }
155
- else if (lower.includes('stale') || lower.includes('selector') && lower.includes('renamed') || lower.includes('outdated')) {
235
+ else if (lower.includes('stale') || (lower.includes('selector') && lower.includes('renamed')) || lower.includes('outdated')) {
156
236
  type = 'stale_test';
157
237
  }
158
238
  else if (lower.includes('timeout') || lower.includes('flaky') || lower.includes('race condition') || lower.includes('intermittent')) {
@@ -167,7 +247,6 @@ function inferVerdictFromText(text) {
167
247
  else {
168
248
  return null;
169
249
  }
170
- // Extract a summary from the first ~200 chars
171
250
  const summary = text.replace(/```[\s\S]*?```/g, '').trim().slice(0, 300);
172
251
  return {
173
252
  type,
@@ -176,11 +255,6 @@ function inferVerdictFromText(text) {
176
255
  evidence: { reasoning: text.slice(0, 1000) },
177
256
  };
178
257
  }
179
- /**
180
- * Fix common issues in LLM-generated JSON:
181
- * - Replace bare `undefined` with `null`
182
- * - Strip trailing commas before } or ]
183
- */
184
258
  function sanitizeJsonString(str) {
185
259
  return str
186
260
  .replace(/:\s*undefined\b/g, ': null')
package/dist/llm.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"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"}
package/dist/report.js CHANGED
@@ -87,7 +87,7 @@ export function formatMarkdownReport(report) {
87
87
  }
88
88
  export function formatGitHubComment(report) {
89
89
  const markdown = formatMarkdownReport(report);
90
- const footer = '\n\n---\n*Generated by [flakewatch](https://github.com/smart-retry/smart-retry)*';
90
+ const footer = '\n\n---\n*Generated by [flakewatch](https://github.com/jlawrence6809/flakewatch)*';
91
91
  return markdown + footer;
92
92
  }
93
93
  export function formatJsonReport(report) {
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
package/dist/triage.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import type { SmartRetryConfig } from './config.js';
1
+ import type { FlakewatchConfig } from './config.js';
2
2
  import type { TestFailure, FailureContext } from './context.js';
3
- import type { TriageReport, Verdict } from './verdicts.js';
3
+ import type { TriageReport, Verdict, VerdictType } from './verdicts.js';
4
4
  /**
5
5
  * Browser investigator interface — allows browser-agent to plug in
6
6
  * without core depending on it.
@@ -14,9 +14,18 @@ export interface BrowserInvestigatorFn {
14
14
  export interface TriageOptions {
15
15
  failures: TestFailure[];
16
16
  totalTests: number;
17
- config: SmartRetryConfig;
17
+ config: FlakewatchConfig;
18
18
  /** Optional browser investigator for 'full' mode */
19
19
  browserInvestigator?: BrowserInvestigatorFn;
20
+ /** Called with progress updates during investigation */
21
+ onProgress?: (progress: TriageProgress) => void;
22
+ }
23
+ export interface TriageProgress {
24
+ phase: 'grouping' | 'investigating' | 'reporting';
25
+ current: number;
26
+ total: number;
27
+ testTitle?: string;
28
+ verdict?: VerdictType;
20
29
  }
21
30
  /**
22
31
  * Main triage pipeline: group failures, select samples, investigate, report.
@@ -1 +1 @@
1
- {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../src/triage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAIhE,OAAO,KAAK,EACV,YAAY,EAEZ,OAAO,EACR,MAAM,eAAe,CAAC;AAGvB;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,qBAAqB,CAAC;CAC7C;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CA0CvB"}
1
+ {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../src/triage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAIhE,OAAO,KAAK,EACV,YAAY,EAEZ,OAAO,EACP,WAAW,EACZ,MAAM,eAAe,CAAC;AAGvB;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,qBAAqB,CAAC;IAC5C,wDAAwD;IACxD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,UAAU,GAAG,eAAe,GAAG,WAAW,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CAmDvB"}
package/dist/triage.js CHANGED
@@ -7,15 +7,20 @@ import { writeReport } from './report.js';
7
7
  * Main triage pipeline: group failures, select samples, investigate, report.
8
8
  */
9
9
  export async function triageFailures(options) {
10
- const { failures, totalTests, config } = options;
10
+ const { failures, totalTests, config, onProgress } = options;
11
11
  // 1. Group failures by error signature
12
+ onProgress?.({ phase: 'grouping', current: 0, total: failures.length });
12
13
  const groups = groupFailures(failures);
13
14
  // 2. Select groups to investigate (respecting limits + circuit breaker)
14
15
  const { selected, circuitBroken } = selectGroupsForInvestigation(groups, totalTests, config.investigation);
15
- // 3. Investigate samples concurrently
16
+ if (circuitBroken) {
17
+ process.stderr.write(` Circuit breaker: ${failures.length}/${totalTests} tests failed (>${Math.round(config.investigation.massFailureThreshold * 100)}%). Investigating top ${selected.length} groups only.\n`);
18
+ }
19
+ // 3. Investigate samples
16
20
  const llm = createLLMProvider(config.llm);
17
- const results = await investigateGroups(selected, config, llm, options.browserInvestigator);
21
+ const results = await investigateGroups(selected, config, llm, options.browserInvestigator, onProgress);
18
22
  // 4. Build report
23
+ onProgress?.({ phase: 'reporting', current: 0, total: 1 });
19
24
  const report = {
20
25
  timestamp: new Date().toISOString(),
21
26
  totalFailures: failures.length,
@@ -34,13 +39,30 @@ export async function triageFailures(options) {
34
39
  await writeReport(report, config.output);
35
40
  return report;
36
41
  }
37
- async function investigateGroups(groups, config, llm, browserInvestigator) {
42
+ async function investigateGroups(groups, config, llm, browserInvestigator, onProgress) {
38
43
  const results = [];
39
44
  const maxConcurrent = config.investigation.maxConcurrent;
40
- // Process in batches of maxConcurrent
45
+ let completed = 0;
41
46
  for (let i = 0; i < groups.length; i += maxConcurrent) {
42
47
  const batch = groups.slice(i, i + maxConcurrent);
43
- const batchResults = await Promise.all(batch.map((group) => investigateSample(group, config, llm, browserInvestigator)));
48
+ const batchResults = await Promise.all(batch.map(async (group) => {
49
+ onProgress?.({
50
+ phase: 'investigating',
51
+ current: completed + 1,
52
+ total: groups.length,
53
+ testTitle: group.sample.testTitle,
54
+ });
55
+ const result = await investigateSample(group, config, llm, browserInvestigator);
56
+ completed++;
57
+ onProgress?.({
58
+ phase: 'investigating',
59
+ current: completed,
60
+ total: groups.length,
61
+ testTitle: group.sample.testTitle,
62
+ verdict: result.verdict.type,
63
+ });
64
+ return result;
65
+ }));
44
66
  results.push(...batchResults);
45
67
  }
46
68
  return results;
@@ -48,13 +70,10 @@ async function investigateGroups(groups, config, llm, browserInvestigator) {
48
70
  async function investigateSample(group, config, llm, browserInvestigator) {
49
71
  const start = Date.now();
50
72
  const sample = group.sample;
51
- // Package context
52
73
  const context = await packageFailureContext(sample, config.context);
53
- // Choose investigation mode
54
74
  const mode = config.investigation.mode;
55
75
  const baseURL = config.investigation.baseURL;
56
76
  if (mode === 'full' && browserInvestigator && baseURL) {
57
- // Full browser investigation
58
77
  const { verdict, tokensUsed } = await browserInvestigator(context, baseURL);
59
78
  return {
60
79
  testId: sample.testId,
@@ -74,7 +93,7 @@ async function investigateSample(group, config, llm, browserInvestigator) {
74
93
  screenshotBase64 = buffer.toString('base64');
75
94
  }
76
95
  catch {
77
- // Screenshot not available — continue without it
96
+ // Screenshot not available
78
97
  }
79
98
  }
80
99
  const { verdict, tokensUsed } = await llm.analyze(context, screenshotBase64);
@@ -1 +1 @@
1
- {"version":3,"file":"triage.js","sourceRoot":"","sources":["../src/triage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAoB,MAAM,UAAU,CAAC;AAM/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAqB1C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAsB;IAEtB,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEjD,uCAAuC;IACvC,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAEvC,wEAAwE;IACxE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,4BAA4B,CAC9D,MAAM,EACN,UAAU,EACV,MAAM,CAAC,aAAa,CACrB,CAAC;IAEF,sCAAsC;IACtC,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,iBAAiB,CACrC,QAAQ,EACR,MAAM,EACN,GAAG,EACH,OAAO,CAAC,mBAAmB,CAC5B,CAAC;IAEF,kBAAkB;IAClB,MAAM,MAAM,GAAiB;QAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,aAAa,EAAE,QAAQ,CAAC,MAAM;QAC9B,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,uBAAuB,EAAE,aAAa;QACtC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,cAAc,EAAE,CAAC,CAAC,SAAS;YAC3B,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM;YACxB,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;YAC7B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI;SAC/D,CAAC,CAAC;QACH,OAAO;KACR,CAAC;IAEF,kBAAkB;IAClB,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAEzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAwC,EACxC,MAAwB,EACxB,GAAgB,EAChB,mBAA2C;IAE3C,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC;IAEzD,sCAAsC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAC3D,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,KAA+C,EAC/C,MAAwB,EACxB,GAAgB,EAChB,mBAA2C;IAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,kBAAkB;IAClB,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAEpE,4BAA4B;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;IAE7C,IAAI,IAAI,KAAK,MAAM,IAAI,mBAAmB,IAAI,OAAO,EAAE,CAAC;QACtD,6BAA6B;QAC7B,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE5E,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,OAAO;YACP,uBAAuB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;YAC3C,UAAU;SACX,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,IAAI,gBAAoC,CAAC;IACzC,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACtD,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;QACnD,CAAC;IACH,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAE7E,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,OAAO;QACP,uBAAuB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;QAC3C,UAAU;KACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"triage.js","sourceRoot":"","sources":["../src/triage.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flakewatch-core",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Core logic for flakewatch: failure grouping, context packaging, LLM interface",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -30,7 +30,7 @@
30
30
  "license": "MIT",
31
31
  "repository": {
32
32
  "type": "git",
33
- "url": "https://github.com/jlawrence6809/smart-retry",
33
+ "url": "https://github.com/jlawrence6809/flakewatch",
34
34
  "directory": "packages/core"
35
35
  },
36
36
  "keywords": [