donobu 2.46.6 → 2.47.1

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.
Files changed (47) hide show
  1. package/dist/assets/generated/version +1 -1
  2. package/dist/cli/donobu-cli.d.ts +3 -0
  3. package/dist/cli/donobu-cli.d.ts.map +1 -0
  4. package/dist/cli/donobu-cli.js +1698 -0
  5. package/dist/cli/donobu-cli.js.map +1 -0
  6. package/dist/cli/playwright-json-to-markdown.js +43 -22
  7. package/dist/cli/playwright-json-to-markdown.js.map +1 -1
  8. package/dist/envVars.d.ts +23 -0
  9. package/dist/envVars.d.ts.map +1 -1
  10. package/dist/envVars.js +13 -0
  11. package/dist/envVars.js.map +1 -1
  12. package/dist/esm/assets/generated/version +1 -1
  13. package/dist/esm/cli/donobu-cli.d.ts +3 -0
  14. package/dist/esm/cli/donobu-cli.d.ts.map +1 -0
  15. package/dist/esm/cli/donobu-cli.js +1698 -0
  16. package/dist/esm/cli/donobu-cli.js.map +1 -0
  17. package/dist/esm/cli/playwright-json-to-markdown.js +43 -22
  18. package/dist/esm/cli/playwright-json-to-markdown.js.map +1 -1
  19. package/dist/esm/envVars.d.ts +23 -0
  20. package/dist/esm/envVars.d.ts.map +1 -1
  21. package/dist/esm/envVars.js +13 -0
  22. package/dist/esm/envVars.js.map +1 -1
  23. package/dist/esm/lib/DonobuExtendedPage.d.ts +3 -0
  24. package/dist/esm/lib/DonobuExtendedPage.d.ts.map +1 -1
  25. package/dist/esm/lib/PageAi.d.ts.map +1 -1
  26. package/dist/esm/lib/PageAi.js +7 -1
  27. package/dist/esm/lib/PageAi.js.map +1 -1
  28. package/dist/esm/lib/testExtension.d.ts.map +1 -1
  29. package/dist/esm/lib/testExtension.js +53 -9
  30. package/dist/esm/lib/testExtension.js.map +1 -1
  31. package/dist/esm/lib/utils/triageTestFailure.d.ts +231 -0
  32. package/dist/esm/lib/utils/triageTestFailure.d.ts.map +1 -0
  33. package/dist/esm/lib/utils/triageTestFailure.js +1267 -0
  34. package/dist/esm/lib/utils/triageTestFailure.js.map +1 -0
  35. package/dist/lib/DonobuExtendedPage.d.ts +3 -0
  36. package/dist/lib/DonobuExtendedPage.d.ts.map +1 -1
  37. package/dist/lib/PageAi.d.ts.map +1 -1
  38. package/dist/lib/PageAi.js +7 -1
  39. package/dist/lib/PageAi.js.map +1 -1
  40. package/dist/lib/testExtension.d.ts.map +1 -1
  41. package/dist/lib/testExtension.js +53 -9
  42. package/dist/lib/testExtension.js.map +1 -1
  43. package/dist/lib/utils/triageTestFailure.d.ts +231 -0
  44. package/dist/lib/utils/triageTestFailure.d.ts.map +1 -0
  45. package/dist/lib/utils/triageTestFailure.js +1267 -0
  46. package/dist/lib/utils/triageTestFailure.js.map +1 -0
  47. package/package.json +2 -1
@@ -0,0 +1,231 @@
1
+ import { TestInfo } from '@playwright/test';
2
+ import { FlowMetadata } from '../../models/FlowMetadata';
3
+ import { GptClient } from '../../clients/GptClient';
4
+ import { DonobuExtendedPage } from '../DonobuExtendedPage';
5
+ import { z } from 'zod/v4';
6
+ /**
7
+ * Utilities for transforming a Playwright test failure into a structured treatment plan
8
+ * that Donobu Studio can surface to engineers or automation. The flow pivots between:
9
+ * 1. Gathering heuristics from the failing run (errors, attachments, Donobu AI history).
10
+ * 2. Asking the GPT-based triage agent for a canonical plan compliant with the schema.
11
+ * 3. Falling back to heuristics when the LLM cannot respond, so automation still receives
12
+ * next steps. The helper functions below exist to keep these stages composable.
13
+ */
14
+ export declare const FailureReasonSchema: z.ZodEnum<{
15
+ UNKNOWN: "UNKNOWN";
16
+ AUTOMATION_SCRIPT_ISSUE: "AUTOMATION_SCRIPT_ISSUE";
17
+ SELECTOR_REGRESSION: "SELECTOR_REGRESSION";
18
+ TIMING_OR_SYNCHRONISATION: "TIMING_OR_SYNCHRONISATION";
19
+ ASSERTION_DRIFT: "ASSERTION_DRIFT";
20
+ APPLICATION_DEFECT: "APPLICATION_DEFECT";
21
+ AUTHENTICATION_FAILURE: "AUTHENTICATION_FAILURE";
22
+ ENVIRONMENT_CONFIGURATION: "ENVIRONMENT_CONFIGURATION";
23
+ TEST_DATA_UNAVAILABLE: "TEST_DATA_UNAVAILABLE";
24
+ NETWORK_OR_DEPENDENCY: "NETWORK_OR_DEPENDENCY";
25
+ }>;
26
+ export type FailureReason = z.infer<typeof FailureReasonSchema>;
27
+ declare const RemediationCategorySchema: z.ZodEnum<{
28
+ UNKNOWN: "UNKNOWN";
29
+ RETRY_AUTOMATION: "RETRY_AUTOMATION";
30
+ UPDATE_TEST_LOGIC: "UPDATE_TEST_LOGIC";
31
+ UPDATE_SELECTORS: "UPDATE_SELECTORS";
32
+ ADJUST_TIMING: "ADJUST_TIMING";
33
+ REFINE_ASSERTIONS: "REFINE_ASSERTIONS";
34
+ FIX_APPLICATION: "FIX_APPLICATION";
35
+ VALIDATE_AUTHENTICATION: "VALIDATE_AUTHENTICATION";
36
+ CHECK_ENVIRONMENT: "CHECK_ENVIRONMENT";
37
+ REFRESH_TEST_DATA: "REFRESH_TEST_DATA";
38
+ STABILIZE_DEPENDENCIES: "STABILIZE_DEPENDENCIES";
39
+ ESCALATE_MANUAL_REVIEW: "ESCALATE_MANUAL_REVIEW";
40
+ }>;
41
+ export type RemediationCategory = z.infer<typeof RemediationCategorySchema>;
42
+ export declare const RemediationStepSchema: z.ZodObject<{
43
+ category: z.ZodEnum<{
44
+ UNKNOWN: "UNKNOWN";
45
+ RETRY_AUTOMATION: "RETRY_AUTOMATION";
46
+ UPDATE_TEST_LOGIC: "UPDATE_TEST_LOGIC";
47
+ UPDATE_SELECTORS: "UPDATE_SELECTORS";
48
+ ADJUST_TIMING: "ADJUST_TIMING";
49
+ REFINE_ASSERTIONS: "REFINE_ASSERTIONS";
50
+ FIX_APPLICATION: "FIX_APPLICATION";
51
+ VALIDATE_AUTHENTICATION: "VALIDATE_AUTHENTICATION";
52
+ CHECK_ENVIRONMENT: "CHECK_ENVIRONMENT";
53
+ REFRESH_TEST_DATA: "REFRESH_TEST_DATA";
54
+ STABILIZE_DEPENDENCIES: "STABILIZE_DEPENDENCIES";
55
+ ESCALATE_MANUAL_REVIEW: "ESCALATE_MANUAL_REVIEW";
56
+ }>;
57
+ summary: z.ZodString;
58
+ details: z.ZodString;
59
+ }, z.core.$strip>;
60
+ export type RemediationStep = z.infer<typeof RemediationStepSchema>;
61
+ export declare const AdditionalDataRequestSchema: z.ZodObject<{
62
+ description: z.ZodString;
63
+ suggestedSources: z.ZodDefault<z.ZodArray<z.ZodString>>;
64
+ }, z.core.$strip>;
65
+ export type AdditionalDataRequest = z.infer<typeof AdditionalDataRequestSchema>;
66
+ declare const AutomationDirectivesSchema: z.ZodObject<{
67
+ clearPageAiCache: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
68
+ targetTestFile: z.ZodOptional<z.ZodOptional<z.ZodString>>;
69
+ targetProject: z.ZodOptional<z.ZodOptional<z.ZodString>>;
70
+ additionalPlaywrightArgs: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
71
+ }, z.core.$strip>;
72
+ export type AutomationDirectives = z.infer<typeof AutomationDirectivesSchema>;
73
+ export declare const TreatmentPlan: z.ZodObject<{
74
+ failureSummary: z.ZodString;
75
+ failureReason: z.ZodEnum<{
76
+ UNKNOWN: "UNKNOWN";
77
+ AUTOMATION_SCRIPT_ISSUE: "AUTOMATION_SCRIPT_ISSUE";
78
+ SELECTOR_REGRESSION: "SELECTOR_REGRESSION";
79
+ TIMING_OR_SYNCHRONISATION: "TIMING_OR_SYNCHRONISATION";
80
+ ASSERTION_DRIFT: "ASSERTION_DRIFT";
81
+ APPLICATION_DEFECT: "APPLICATION_DEFECT";
82
+ AUTHENTICATION_FAILURE: "AUTHENTICATION_FAILURE";
83
+ ENVIRONMENT_CONFIGURATION: "ENVIRONMENT_CONFIGURATION";
84
+ TEST_DATA_UNAVAILABLE: "TEST_DATA_UNAVAILABLE";
85
+ NETWORK_OR_DEPENDENCY: "NETWORK_OR_DEPENDENCY";
86
+ }>;
87
+ confidence: z.ZodNumber;
88
+ observedIndicators: z.ZodDefault<z.ZodArray<z.ZodString>>;
89
+ remediationSteps: z.ZodDefault<z.ZodArray<z.ZodObject<{
90
+ category: z.ZodEnum<{
91
+ UNKNOWN: "UNKNOWN";
92
+ RETRY_AUTOMATION: "RETRY_AUTOMATION";
93
+ UPDATE_TEST_LOGIC: "UPDATE_TEST_LOGIC";
94
+ UPDATE_SELECTORS: "UPDATE_SELECTORS";
95
+ ADJUST_TIMING: "ADJUST_TIMING";
96
+ REFINE_ASSERTIONS: "REFINE_ASSERTIONS";
97
+ FIX_APPLICATION: "FIX_APPLICATION";
98
+ VALIDATE_AUTHENTICATION: "VALIDATE_AUTHENTICATION";
99
+ CHECK_ENVIRONMENT: "CHECK_ENVIRONMENT";
100
+ REFRESH_TEST_DATA: "REFRESH_TEST_DATA";
101
+ STABILIZE_DEPENDENCIES: "STABILIZE_DEPENDENCIES";
102
+ ESCALATE_MANUAL_REVIEW: "ESCALATE_MANUAL_REVIEW";
103
+ }>;
104
+ summary: z.ZodString;
105
+ details: z.ZodString;
106
+ }, z.core.$strip>>>;
107
+ additionalDataRequests: z.ZodDefault<z.ZodArray<z.ZodObject<{
108
+ description: z.ZodString;
109
+ suggestedSources: z.ZodDefault<z.ZodArray<z.ZodString>>;
110
+ }, z.core.$strip>>>;
111
+ shouldRetryAutomation: z.ZodBoolean;
112
+ requiresCodeChange: z.ZodBoolean;
113
+ requiresProductFix: z.ZodBoolean;
114
+ notes: z.ZodOptional<z.ZodString>;
115
+ automationDirectives: z.ZodOptional<z.ZodObject<{
116
+ clearPageAiCache: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
117
+ targetTestFile: z.ZodOptional<z.ZodOptional<z.ZodString>>;
118
+ targetProject: z.ZodOptional<z.ZodOptional<z.ZodString>>;
119
+ additionalPlaywrightArgs: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
120
+ }, z.core.$strip>>;
121
+ }, z.core.$strip>;
122
+ type SanitizedFlowMetadata = {
123
+ id: string;
124
+ name: string | null;
125
+ runMode: FlowMetadata['runMode'];
126
+ state: FlowMetadata['state'];
127
+ targetWebsite: string;
128
+ overallObjective: string | null;
129
+ allowedTools: string[];
130
+ envVars: string[] | null;
131
+ startedAt: number | null;
132
+ completedAt: number | null;
133
+ maxToolCalls: number | null;
134
+ gptConfigName: string | null;
135
+ defaultMessageDuration: number | null;
136
+ resultSummary: string | null;
137
+ };
138
+ type SummarizedToolCall = {
139
+ id: string;
140
+ toolName: string;
141
+ success: boolean;
142
+ outcomeSummary: string;
143
+ durationMs: number;
144
+ page: string;
145
+ startedAtIso: string;
146
+ completedAtIso: string;
147
+ };
148
+ type ErrorSummary = {
149
+ message?: string;
150
+ stack?: string;
151
+ value?: string;
152
+ actual?: string;
153
+ expected?: string;
154
+ name?: string;
155
+ location?: string;
156
+ snippet?: string;
157
+ };
158
+ type FailureContext = {
159
+ testCase: {
160
+ title: string;
161
+ file?: string;
162
+ projectName: string;
163
+ status: TestInfo['status'];
164
+ expectedStatus: TestInfo['expectedStatus'];
165
+ retry: number;
166
+ repeatEachIndex: number;
167
+ workerIndex: number;
168
+ timeout: number;
169
+ duration: number;
170
+ annotations: TestInfo['annotations'];
171
+ };
172
+ failure: {
173
+ errors: ErrorSummary[];
174
+ attachments: {
175
+ name: string;
176
+ contentType: string;
177
+ path?: string | null;
178
+ }[];
179
+ };
180
+ donobuFlow: {
181
+ metadata: SanitizedFlowMetadata | null;
182
+ recentToolCalls: SummarizedToolCall[];
183
+ };
184
+ testSnippet: string | null;
185
+ heuristics: HeuristicAssessment;
186
+ };
187
+ export type FailureEvidenceRecord = {
188
+ schemaVersion: 1;
189
+ evidenceId: string;
190
+ runId: string | null;
191
+ runDirectory: string;
192
+ collectedAtIso: string;
193
+ failureContext: FailureContext;
194
+ };
195
+ export type GatherTestFailureEvidenceOptions = {
196
+ runDirectory?: string;
197
+ persistToDisk?: boolean;
198
+ force?: boolean;
199
+ };
200
+ export type GatherTestFailureEvidenceResult = {
201
+ evidence: FailureEvidenceRecord;
202
+ filePath: string | null;
203
+ };
204
+ type HeuristicAssessment = {
205
+ failureReason: FailureReason;
206
+ evidence: string[];
207
+ confidence: number;
208
+ failureSummary: string;
209
+ shouldRetryAutomation: boolean;
210
+ requiresCodeChange: boolean;
211
+ requiresProductFix: boolean;
212
+ remediationSteps: RemediationStep[];
213
+ additionalDataRequests: AdditionalDataRequest[];
214
+ notes?: string;
215
+ occurredDuringPageAi: boolean;
216
+ staleCacheIndicators: StaleCacheIndicators;
217
+ };
218
+ type StaleCacheIndicators = {
219
+ usedDeterministicMode: boolean;
220
+ selectorFailedDuringPageAi: boolean;
221
+ failedAfterPageAiCompleted: boolean;
222
+ isRetryAttempt: boolean;
223
+ quickFailurePattern: boolean;
224
+ toolCallsShowSelectorIssues: boolean;
225
+ assertionsFailedAfterSuccessfulPageAi: boolean;
226
+ };
227
+ export declare function buildTreatmentPlanFromHeuristics(evidence: FailureEvidenceRecord): z.infer<typeof TreatmentPlan>;
228
+ export declare function gatherTestFailureEvidence(testInfo: TestInfo, page: DonobuExtendedPage, options?: GatherTestFailureEvidenceOptions): Promise<GatherTestFailureEvidenceResult | null>;
229
+ export declare function generateTreatmentPlanFromEvidence(gptClient: GptClient, evidence: FailureEvidenceRecord): Promise<z.infer<typeof TreatmentPlan>>;
230
+ export {};
231
+ //# sourceMappingURL=triageTestFailure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triageTestFailure.d.ts","sourceRoot":"","sources":["../../../../src/lib/utils/triageTestFailure.ts"],"names":[],"mappings":"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"}