codex-orchestrator 0.1.35 → 0.1.36

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 (35) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +5 -0
  3. package/dist/src/cli.js +32 -3
  4. package/dist/src/cli.js.map +1 -1
  5. package/dist/src/config/schema.d.ts +6 -0
  6. package/dist/src/config/schema.d.ts.map +1 -1
  7. package/dist/src/config/schema.js +11 -0
  8. package/dist/src/config/schema.js.map +1 -1
  9. package/dist/src/runner/auto-visual-proof-command.d.ts +15 -0
  10. package/dist/src/runner/auto-visual-proof-command.d.ts.map +1 -0
  11. package/dist/src/runner/auto-visual-proof-command.js +41 -0
  12. package/dist/src/runner/auto-visual-proof-command.js.map +1 -0
  13. package/dist/src/runner/browser-proof-contract.d.ts +134 -0
  14. package/dist/src/runner/browser-proof-contract.d.ts.map +1 -0
  15. package/dist/src/runner/browser-proof-contract.js +400 -0
  16. package/dist/src/runner/browser-proof-contract.js.map +1 -0
  17. package/dist/src/runner/browser-visual-proof-command.d.ts +101 -0
  18. package/dist/src/runner/browser-visual-proof-command.d.ts.map +1 -0
  19. package/dist/src/runner/browser-visual-proof-command.js +532 -0
  20. package/dist/src/runner/browser-visual-proof-command.js.map +1 -0
  21. package/dist/src/runner/review-gate-policy.d.ts +12 -0
  22. package/dist/src/runner/review-gate-policy.d.ts.map +1 -1
  23. package/dist/src/runner/review-gate-policy.js +37 -2
  24. package/dist/src/runner/review-gate-policy.js.map +1 -1
  25. package/dist/src/runner/visual-proof-runner.d.ts.map +1 -1
  26. package/dist/src/runner/visual-proof-runner.js +15 -4
  27. package/dist/src/runner/visual-proof-runner.js.map +1 -1
  28. package/dist/src/setup/project-config.d.ts +1 -0
  29. package/dist/src/setup/project-config.d.ts.map +1 -1
  30. package/dist/src/setup/project-config.js +9 -4
  31. package/dist/src/setup/project-config.js.map +1 -1
  32. package/docs/deep-dive.md +25 -3
  33. package/package.json +4 -1
  34. package/prompts/workflows/acceptance-proof.md +4 -0
  35. package/prompts/workflows/scoped-implementation.md +5 -0
@@ -0,0 +1,400 @@
1
+ import { normalizePath } from '../path-policy.js';
2
+ export const browserProofScenarioVersion = 1;
3
+ export const browserProofRuntimeEnv = {
4
+ proofDir: 'CODEX_ORCHESTRATOR_PROOF_DIR',
5
+ reportPath: 'CODEX_ORCHESTRATOR_PROOF_REPORT_PATH',
6
+ playwrightProfileDir: 'CODEX_ORCHESTRATOR_PLAYWRIGHT_PROFILE_DIR',
7
+ playwrightBrowsersPath: 'PLAYWRIGHT_BROWSERS_PATH',
8
+ browserCacheDir: 'CODEX_ORCHESTRATOR_BROWSER_CACHE_DIR',
9
+ browserExecutablePath: 'CODEX_ORCHESTRATOR_BROWSER_EXECUTABLE_PATH',
10
+ };
11
+ export function validateBrowserProofScenario(input, options) {
12
+ const errors = [];
13
+ const record = objectRecord(input);
14
+ if (!record) {
15
+ return { ok: false, errors: ['scenario must be an object'] };
16
+ }
17
+ if (record.version !== browserProofScenarioVersion) {
18
+ errors.push('version must be 1');
19
+ }
20
+ validateHttpUrl(record.baseUrl, 'baseUrl', errors);
21
+ validateViewports(record.viewports, errors);
22
+ validateCriteria(record.criteria, errors);
23
+ validateSourceInputs(record.sourceInputs, errors);
24
+ validateAuth(record.auth, options.envPassthrough, errors);
25
+ validateSteps(record.steps, record.criteria, options, errors);
26
+ if (errors.length > 0) {
27
+ return { ok: false, errors };
28
+ }
29
+ return { ok: true, scenario: input };
30
+ }
31
+ export function assembleBlockedBrowserProofReport(input) {
32
+ const diagnosticPath = proofArtifactPath(input.artifactDir, input.issueNumber, 'browser-proof-diagnostics.json');
33
+ const diagnosticArtifactRefs = [
34
+ diagnosticPath,
35
+ ...diagnosticArtifacts(input.diagnostics ?? {}, input.artifactDir, input.issueNumber)
36
+ .map((artifact) => artifact.path)
37
+ .filter((path) => Boolean(path)),
38
+ ];
39
+ const criteria = input.scenario?.criteria.length
40
+ ? input.scenario.criteria
41
+ : [{ id: 'browser-proof-runtime', description: 'Browser proof runtime is available before launch.' }];
42
+ return {
43
+ status: 'blocked',
44
+ criteria: criteria.map((criterion) => ({
45
+ id: criterion.id,
46
+ description: criterion.description,
47
+ status: 'unknown',
48
+ confidence: 'low',
49
+ reasoningSummary: input.issue.diagnostic,
50
+ artifactRefs: diagnosticArtifactRefs,
51
+ })),
52
+ artifacts: [
53
+ {
54
+ type: 'log',
55
+ path: diagnosticPath,
56
+ description: `Browser proof blocked before launch: ${input.issue.kind}`,
57
+ },
58
+ ...diagnosticArtifacts(input.diagnostics ?? {}, input.artifactDir, input.issueNumber),
59
+ ],
60
+ proofPhaseDiff: {
61
+ allowedProofPaths: diagnosticArtifactRefs,
62
+ forbiddenProductPaths: [],
63
+ },
64
+ reworkRequest: {
65
+ summary: `Browser proof blocked before launch: ${input.issue.kind}`,
66
+ requiredChanges: input.issue.requiredChanges,
67
+ evidenceRefs: diagnosticArtifactRefs,
68
+ },
69
+ residualRisks: [],
70
+ };
71
+ }
72
+ export function assembleBrowserAcceptanceProofReport(input) {
73
+ const artifacts = [
74
+ ...input.checkpoints.map((checkpoint) => ({
75
+ type: checkpoint.kind === 'screenshot' ? 'screenshot' : 'ui-dump',
76
+ path: assertProofArtifactPath(checkpoint.path, input.artifactDir, input.issueNumber),
77
+ description: checkpoint.description,
78
+ })),
79
+ ...diagnosticArtifacts(input.diagnostics, input.artifactDir, input.issueNumber),
80
+ ];
81
+ const artifactRefsByCriterion = new Map();
82
+ for (const checkpoint of input.checkpoints) {
83
+ const path = assertProofArtifactPath(checkpoint.path, input.artifactDir, input.issueNumber);
84
+ for (const criterionRef of checkpoint.criteriaRefs) {
85
+ artifactRefsByCriterion.set(criterionRef, [...(artifactRefsByCriterion.get(criterionRef) ?? []), path]);
86
+ }
87
+ }
88
+ const currentArtifactRefs = artifacts.map((artifact) => artifact.path).filter((path) => Boolean(path));
89
+ return {
90
+ status: 'passed',
91
+ criteria: input.scenario.criteria.map((criterion) => ({
92
+ id: criterion.id,
93
+ description: criterion.description,
94
+ status: 'passed',
95
+ confidence: 'high',
96
+ reasoningSummary: 'Browser proof scenario reached the mapped checkpoint evidence.',
97
+ artifactRefs: artifactRefsByCriterion.get(criterion.id) ?? [],
98
+ })),
99
+ artifacts,
100
+ uiEvidence: assembleUiEvidence(input, currentArtifactRefs),
101
+ proofPhaseDiff: {
102
+ allowedProofPaths: currentArtifactRefs,
103
+ forbiddenProductPaths: [],
104
+ },
105
+ residualRisks: [],
106
+ };
107
+ }
108
+ function assembleUiEvidence(input, currentArtifactRefs) {
109
+ return {
110
+ workflowScope: {
111
+ entrypoint: input.workflow.entrypoint,
112
+ path: input.workflow.path,
113
+ screenState: input.workflow.screenState,
114
+ authPath: input.scenario.auth?.mode ?? 'not-required',
115
+ authShortcutReason: input.scenario.auth?.mode === 'seeded-session' ? input.scenario.auth.shortcutReason : undefined,
116
+ },
117
+ viewportCoverage: input.scenario.viewports.map((viewport) => ({
118
+ name: viewport.name,
119
+ width: viewport.width,
120
+ height: viewport.height,
121
+ requiredBy: viewport.requiredBy,
122
+ artifactRefs: input.checkpoints
123
+ .filter((checkpoint) => checkpoint.viewportName === viewport.name)
124
+ .map((checkpoint) => assertProofArtifactPath(checkpoint.path, input.artifactDir, input.issueNumber)),
125
+ })),
126
+ artifactFreshness: {
127
+ currentArtifactRefs,
128
+ checkedAfterFinalRun: true,
129
+ },
130
+ layoutReview: {
131
+ checked: true,
132
+ findings: input.layoutFindings.map((summary) => ({ summary, artifactRefs: currentArtifactRefs })),
133
+ },
134
+ copyReview: {
135
+ checked: true,
136
+ findings: input.copyFindings.map((summary) => ({ summary, artifactRefs: currentArtifactRefs })),
137
+ },
138
+ sourceInputs: input.scenario.sourceInputs,
139
+ };
140
+ }
141
+ function diagnosticArtifacts(diagnostics, artifactDir, issueNumber) {
142
+ const artifacts = [];
143
+ if (diagnostics.consoleLogPath) {
144
+ artifacts.push({
145
+ type: 'log',
146
+ path: assertProofArtifactPath(diagnostics.consoleLogPath, artifactDir, issueNumber),
147
+ description: 'Browser console log',
148
+ });
149
+ }
150
+ if (diagnostics.networkLogPath) {
151
+ artifacts.push({
152
+ type: 'log',
153
+ path: assertProofArtifactPath(diagnostics.networkLogPath, artifactDir, issueNumber),
154
+ description: 'Browser failed network request log',
155
+ });
156
+ }
157
+ if (diagnostics.runSummaryPath) {
158
+ artifacts.push({
159
+ type: 'other',
160
+ path: assertProofArtifactPath(diagnostics.runSummaryPath, artifactDir, issueNumber),
161
+ description: 'Browser proof run summary',
162
+ });
163
+ }
164
+ return artifacts;
165
+ }
166
+ function validateViewports(value, errors) {
167
+ if (!Array.isArray(value) || value.length === 0) {
168
+ errors.push('viewports must be a non-empty array');
169
+ return;
170
+ }
171
+ const requiredByValues = ['desktop-web-layout', 'mobile-or-responsive', 'issue-specific', 'other'];
172
+ for (const [index, viewport] of value.entries()) {
173
+ const record = objectRecord(viewport);
174
+ if (!record) {
175
+ errors.push(`viewport[${index}] must be an object`);
176
+ continue;
177
+ }
178
+ if (!nonEmptyString(record.name))
179
+ errors.push(`viewport[${index}].name is required`);
180
+ if (!positiveInteger(record.width) || !positiveInteger(record.height)) {
181
+ errors.push(`viewport[${index}] must include positive integer width and height`);
182
+ }
183
+ if (!requiredByValues.includes(record.requiredBy)) {
184
+ errors.push(`viewport[${index}].requiredBy is invalid`);
185
+ }
186
+ }
187
+ }
188
+ function validateCriteria(value, errors) {
189
+ if (!Array.isArray(value) || value.length === 0) {
190
+ errors.push('criteria must be a non-empty array');
191
+ return;
192
+ }
193
+ for (const [index, criterion] of value.entries()) {
194
+ const record = objectRecord(criterion);
195
+ if (!record) {
196
+ errors.push(`criteria[${index}] must be an object`);
197
+ continue;
198
+ }
199
+ if (!nonEmptyString(record.id))
200
+ errors.push(`criteria[${index}].id is required`);
201
+ if (!nonEmptyString(record.description))
202
+ errors.push(`criteria[${index}].description is required`);
203
+ }
204
+ }
205
+ function validateSourceInputs(value, errors) {
206
+ const record = objectRecord(value);
207
+ if (!record) {
208
+ errors.push('sourceInputs is required');
209
+ return;
210
+ }
211
+ if (!nonEmptyStringArray(record.acceptanceCriteriaRefs)) {
212
+ errors.push('sourceInputs.acceptanceCriteriaRefs must be non-empty');
213
+ }
214
+ if (!nonEmptyStringArray(record.implementationEvidenceRefs)) {
215
+ errors.push('sourceInputs.implementationEvidenceRefs must be non-empty');
216
+ }
217
+ }
218
+ function validateAuth(value, envPassthrough, errors) {
219
+ if (value === undefined)
220
+ return;
221
+ const record = objectRecord(value);
222
+ if (!record) {
223
+ errors.push('auth must be an object');
224
+ return;
225
+ }
226
+ if (!['real-login', 'seeded-session', 'not-required', 'blocked'].includes(String(record.mode))) {
227
+ errors.push('auth.mode is invalid');
228
+ }
229
+ if (record.mode === 'seeded-session' && !nonEmptyString(record.shortcutReason)) {
230
+ errors.push('seeded-session auth requires shortcutReason');
231
+ }
232
+ if (record.env !== undefined) {
233
+ if (!Array.isArray(record.env)) {
234
+ errors.push('auth env must be an array');
235
+ return;
236
+ }
237
+ for (const envName of record.env) {
238
+ if (typeof envName !== 'string' || /(?:^|\/)\.env(?:\.|$)/u.test(envName)) {
239
+ errors.push(`auth env references a secret file: ${String(envName)}`);
240
+ }
241
+ else if (!/^[A-Z_][A-Z0-9_]*$/u.test(envName)) {
242
+ errors.push(`auth env name is invalid: ${envName}`);
243
+ }
244
+ else if (!envPassthrough.includes(envName)) {
245
+ errors.push(`auth env is not configured for passthrough: ${envName}`);
246
+ }
247
+ }
248
+ }
249
+ }
250
+ function validateSteps(value, criteriaValue, options, errors) {
251
+ if (!Array.isArray(value) || value.length === 0) {
252
+ errors.push('steps must be a non-empty array');
253
+ return;
254
+ }
255
+ const criterionIds = new Set(Array.isArray(criteriaValue)
256
+ ? criteriaValue.map((criterion) => objectRecord(criterion)?.id).filter((id) => typeof id === 'string')
257
+ : []);
258
+ const mappedCriteria = new Set();
259
+ for (const [index, step] of value.entries()) {
260
+ const record = objectRecord(step);
261
+ if (!record) {
262
+ errors.push(`step[${index}] must be an object`);
263
+ continue;
264
+ }
265
+ validateStep(record, index, criterionIds, mappedCriteria, options, errors);
266
+ }
267
+ for (const id of criterionIds) {
268
+ if (!mappedCriteria.has(id)) {
269
+ errors.push(`criteria ${id} must be mapped to at least one checkpoint`);
270
+ }
271
+ }
272
+ }
273
+ function validateStep(record, index, criterionIds, mappedCriteria, options, errors) {
274
+ switch (record.action) {
275
+ case 'navigate':
276
+ if (nonEmptyString(record.url) === nonEmptyString(record.path))
277
+ errors.push(`navigate step[${index}] requires exactly one of url or path`);
278
+ if (nonEmptyString(record.url))
279
+ validateHttpUrl(record.url, `step[${index}].url`, errors);
280
+ if (nonEmptyString(record.path) && !String(record.path).startsWith('/'))
281
+ errors.push(`step[${index}].path must start with /`);
282
+ return;
283
+ case 'click':
284
+ if (nonEmptyString(record.selector) === nonEmptyString(record.text))
285
+ errors.push(`click step[${index}] requires exactly one of selector or text`);
286
+ return;
287
+ case 'fill':
288
+ if (!nonEmptyString(record.selector) || !nonEmptyString(record.value))
289
+ errors.push(`fill step[${index}] requires selector and value`);
290
+ return;
291
+ case 'press':
292
+ if (!nonEmptyString(record.selector) || !nonEmptyString(record.key))
293
+ errors.push(`press step[${index}] requires selector and key`);
294
+ return;
295
+ case 'waitForSelector':
296
+ if (!nonEmptyString(record.selector))
297
+ errors.push(`waitForSelector step[${index}] requires selector`);
298
+ return;
299
+ case 'waitForText':
300
+ if (!nonEmptyString(record.text))
301
+ errors.push(`waitForText step[${index}] requires text`);
302
+ return;
303
+ case 'assertText':
304
+ if (!nonEmptyString(record.text))
305
+ errors.push(`assertText step[${index}] requires text`);
306
+ return;
307
+ case 'assertUrl':
308
+ if (!nonEmptyString(record.expected))
309
+ errors.push(`assertUrl step[${index}] requires expected`);
310
+ return;
311
+ case 'screenshot':
312
+ case 'domSnapshot':
313
+ validateCheckpoint(record, index, criterionIds, mappedCriteria, options, errors);
314
+ return;
315
+ default:
316
+ errors.push(`unknown action at step[${index}]: ${String(record.action)}`);
317
+ }
318
+ }
319
+ function validateCheckpoint(record, index, criterionIds, mappedCriteria, options, errors) {
320
+ if (!nonEmptyString(record.checkpointId))
321
+ errors.push(`checkpoint step[${index}] requires checkpointId`);
322
+ if (!nonEmptyString(record.viewportName))
323
+ errors.push(`checkpoint step[${index}] requires viewportName`);
324
+ if (!nonEmptyString(record.path)) {
325
+ errors.push(`checkpoint step[${index}] requires path`);
326
+ }
327
+ else {
328
+ try {
329
+ assertProofArtifactPath(record.path, options.artifactDir, options.issueNumber);
330
+ }
331
+ catch (error) {
332
+ errors.push(error instanceof Error ? error.message : `checkpoint step[${index}] has invalid path`);
333
+ }
334
+ }
335
+ if (!nonEmptyStringArray(record.criteriaRefs)) {
336
+ errors.push(`checkpoint step[${index}] requires criteriaRefs`);
337
+ return;
338
+ }
339
+ for (const ref of record.criteriaRefs) {
340
+ if (!criterionIds.has(ref)) {
341
+ errors.push(`checkpoint step[${index}] references unknown criteria ${ref}`);
342
+ }
343
+ else {
344
+ mappedCriteria.add(ref);
345
+ }
346
+ }
347
+ }
348
+ export function assertBrowserProofArtifactPath(path, artifactDir, issueNumber) {
349
+ const normalized = normalizePath(path);
350
+ const prefix = proofArtifactPath(artifactDir, issueNumber, '');
351
+ if (normalized.startsWith('/')
352
+ || normalized.includes('../')
353
+ || normalized === '..'
354
+ || !normalized.startsWith(prefix)
355
+ || normalized.startsWith(`${prefix}playwright-profile/`)
356
+ || normalized.startsWith(`${prefix}ms-playwright/`)) {
357
+ throw new Error(`Invalid browser proof artifact path: ${path}`);
358
+ }
359
+ return normalized;
360
+ }
361
+ export function browserProofArtifactPath(artifactDir, issueNumber, leaf) {
362
+ return proofArtifactPath(artifactDir, issueNumber, leaf);
363
+ }
364
+ function assertProofArtifactPath(path, artifactDir, issueNumber) {
365
+ return assertBrowserProofArtifactPath(path, artifactDir, issueNumber);
366
+ }
367
+ function proofArtifactPath(artifactDir, issueNumber, leaf) {
368
+ const prefix = `${normalizePath(artifactDir).replace(/\/+$/u, '')}/issue-${issueNumber}/`;
369
+ return `${prefix}${leaf}`;
370
+ }
371
+ function validateHttpUrl(value, path, errors) {
372
+ if (!nonEmptyString(value)) {
373
+ errors.push(`${path} must be an absolute http/https URL`);
374
+ return;
375
+ }
376
+ try {
377
+ const url = new URL(value);
378
+ if (url.protocol !== 'http:' && url.protocol !== 'https:') {
379
+ errors.push(`${path} must be an absolute http/https URL`);
380
+ }
381
+ }
382
+ catch {
383
+ errors.push(`${path} must be an absolute http/https URL`);
384
+ }
385
+ }
386
+ function objectRecord(value) {
387
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
388
+ ? value
389
+ : undefined;
390
+ }
391
+ function nonEmptyString(value) {
392
+ return typeof value === 'string' && value.length > 0;
393
+ }
394
+ function positiveInteger(value) {
395
+ return typeof value === 'number' && Number.isInteger(value) && value > 0;
396
+ }
397
+ function nonEmptyStringArray(value) {
398
+ return Array.isArray(value) && value.length > 0 && value.every(nonEmptyString);
399
+ }
400
+ //# sourceMappingURL=browser-proof-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-proof-contract.js","sourceRoot":"","sources":["../../../src/runner/browser-proof-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import { type BrowserProofCheckpointEvidence, type BrowserProofDiagnostics, type BrowserProofScenario } from './browser-proof-contract.js';
2
+ import type { AcceptanceProofStatus } from './acceptance-proof.js';
3
+ export interface BrowserVisualProofCommandInput {
4
+ issueNumber: number;
5
+ worktreePath?: string;
6
+ artifactDir?: string;
7
+ scenarioPath?: string;
8
+ baseUrl?: string;
9
+ env?: NodeJS.ProcessEnv;
10
+ envPassthrough?: string[];
11
+ strictConsoleErrors?: boolean;
12
+ strictNetworkFailures?: boolean;
13
+ adapter?: BrowserProofAdapter;
14
+ }
15
+ export interface BrowserProofRunResult {
16
+ checkpoints: BrowserProofCheckpointEvidence[];
17
+ diagnostics: BrowserProofDiagnostics;
18
+ consoleErrors: string[];
19
+ networkFailures: string[];
20
+ browserRuntime?: {
21
+ executablePath?: string;
22
+ chromiumInstallAttempted: boolean;
23
+ };
24
+ }
25
+ export interface BrowserProofAdapter {
26
+ run(input: {
27
+ scenario: BrowserProofScenario;
28
+ worktreePath: string;
29
+ proofDir: string;
30
+ artifactDir: string;
31
+ issueNumber: number;
32
+ env: NodeJS.ProcessEnv;
33
+ }): Promise<BrowserProofRunResult>;
34
+ }
35
+ export declare function parseBrowserVisualProofArgs(args: string[], env?: NodeJS.ProcessEnv): {
36
+ ok: true;
37
+ value: BrowserVisualProofCommandInput;
38
+ } | {
39
+ ok: false;
40
+ error: string;
41
+ };
42
+ export declare function runBrowserVisualProofCommand(input: BrowserVisualProofCommandInput): Promise<{
43
+ status: AcceptanceProofStatus;
44
+ reportPath: string;
45
+ }>;
46
+ type PlaywrightLikeModule = {
47
+ chromium?: {
48
+ launchPersistentContext: (profileDir: string, options: {
49
+ headless: boolean;
50
+ executablePath?: string;
51
+ }) => Promise<{
52
+ newPage: () => Promise<PlaywrightLikePage>;
53
+ close: () => Promise<void>;
54
+ }>;
55
+ };
56
+ };
57
+ interface BrowserProofAdapterRuntime {
58
+ playwright: PlaywrightLikeModule;
59
+ installedBrowserPaths: string[];
60
+ installChromium: (env: NodeJS.ProcessEnv) => Promise<void>;
61
+ }
62
+ export declare function createDefaultBrowserProofAdapterForTest(runtime: PlaywrightLikeModule | Partial<BrowserProofAdapterRuntime>): BrowserProofAdapter;
63
+ type PlaywrightLikePage = {
64
+ on: (event: 'console' | 'requestfailed', handler: (value: PlaywrightLikeConsoleMessage & PlaywrightLikeRequest) => void) => void;
65
+ setViewportSize: (size: {
66
+ width: number;
67
+ height: number;
68
+ }) => Promise<void>;
69
+ goto: (url: string) => Promise<unknown>;
70
+ click: (selector: string) => Promise<void>;
71
+ getByText: (text: string) => {
72
+ click: () => Promise<void>;
73
+ waitFor: () => Promise<void>;
74
+ };
75
+ fill: (selector: string, value: string) => Promise<void>;
76
+ press: (selector: string, key: string) => Promise<void>;
77
+ waitForSelector: (selector: string) => Promise<void>;
78
+ locator: (selector: string) => {
79
+ textContent: () => Promise<string | null>;
80
+ waitFor: () => Promise<void>;
81
+ evaluate: <T>(fn: (element: Element) => T) => Promise<T>;
82
+ };
83
+ url: () => string;
84
+ screenshot: (options: {
85
+ path: string;
86
+ fullPage: boolean;
87
+ }) => Promise<unknown>;
88
+ };
89
+ type PlaywrightLikeConsoleMessage = {
90
+ type: () => string;
91
+ text: () => string;
92
+ };
93
+ type PlaywrightLikeRequest = {
94
+ method: () => string;
95
+ url: () => string;
96
+ failure: () => {
97
+ errorText?: string;
98
+ } | null;
99
+ };
100
+ export {};
101
+ //# sourceMappingURL=browser-visual-proof-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-visual-proof-command.d.ts","sourceRoot":"","sources":["../../../src/runner/browser-visual-proof-command.ts"],"names":[],"mappings":"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"}