@post-print/agent-test 2.0.0 → 2.0.2

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 (138) hide show
  1. package/dist/sdk/cli.d.ts +1 -1
  2. package/dist/sdk/cli.d.ts.map +1 -1
  3. package/dist/sdk/cli.js +49 -14
  4. package/dist/sdk/cli.js.map +1 -1
  5. package/dist/sdk/criteria.d.ts +3 -0
  6. package/dist/sdk/criteria.d.ts.map +1 -0
  7. package/dist/sdk/criteria.js +162 -0
  8. package/dist/sdk/criteria.js.map +1 -0
  9. package/dist/sdk/definitions.js +1 -1
  10. package/dist/sdk/definitions.js.map +1 -1
  11. package/dist/sdk/execution-reporter.d.ts +18 -0
  12. package/dist/sdk/execution-reporter.d.ts.map +1 -0
  13. package/dist/sdk/execution-reporter.js +171 -0
  14. package/dist/sdk/execution-reporter.js.map +1 -0
  15. package/dist/sdk/execution-runner.d.ts +14 -0
  16. package/dist/sdk/execution-runner.d.ts.map +1 -0
  17. package/dist/sdk/execution-runner.js +80 -0
  18. package/dist/sdk/execution-runner.js.map +1 -0
  19. package/dist/sdk/execution-store.d.ts +92 -0
  20. package/dist/sdk/execution-store.d.ts.map +1 -0
  21. package/dist/sdk/execution-store.js +357 -0
  22. package/dist/sdk/execution-store.js.map +1 -0
  23. package/dist/sdk/expect.d.ts.map +1 -1
  24. package/dist/sdk/expect.js +33 -5
  25. package/dist/sdk/expect.js.map +1 -1
  26. package/dist/sdk/playwright-cli.d.ts +2 -0
  27. package/dist/sdk/playwright-cli.d.ts.map +1 -0
  28. package/dist/sdk/playwright-cli.js +6 -0
  29. package/dist/sdk/playwright-cli.js.map +1 -0
  30. package/dist/sdk/reporter.d.ts.map +1 -1
  31. package/dist/sdk/reporter.js +40 -0
  32. package/dist/sdk/reporter.js.map +1 -1
  33. package/dist/sdk/runtime.d.ts +1 -1
  34. package/dist/sdk/runtime.d.ts.map +1 -1
  35. package/dist/sdk/runtime.js +14 -5
  36. package/dist/sdk/runtime.js.map +1 -1
  37. package/dist/sdk/test.d.ts +10 -1
  38. package/dist/sdk/test.d.ts.map +1 -1
  39. package/dist/sdk/test.js +49 -4
  40. package/dist/sdk/test.js.map +1 -1
  41. package/dist/sdk/types.d.ts +2 -1
  42. package/dist/sdk/types.d.ts.map +1 -1
  43. package/dist/sdk/viewer.d.ts +3 -9
  44. package/dist/sdk/viewer.d.ts.map +1 -1
  45. package/dist/sdk/viewer.js +41 -127
  46. package/dist/sdk/viewer.js.map +1 -1
  47. package/dist/viewer/bootstrap.d.ts +10 -0
  48. package/dist/viewer/bootstrap.d.ts.map +1 -0
  49. package/dist/viewer/bootstrap.js +2 -0
  50. package/dist/viewer/bootstrap.js.map +1 -0
  51. package/dist/viewer/client-entry.d.ts +2 -0
  52. package/dist/viewer/client-entry.d.ts.map +1 -0
  53. package/dist/viewer/client-entry.js +31 -0
  54. package/dist/viewer/client-entry.js.map +1 -0
  55. package/dist/viewer/generated-api.d.ts +15 -0
  56. package/dist/viewer/generated-api.d.ts.map +1 -0
  57. package/dist/viewer/generated-api.js +42 -0
  58. package/dist/viewer/generated-api.js.map +1 -0
  59. package/dist/viewer/generated-contracts.d.ts +13 -0
  60. package/dist/viewer/generated-contracts.d.ts.map +1 -0
  61. package/dist/viewer/generated-contracts.js +12 -0
  62. package/dist/viewer/generated-contracts.js.map +1 -0
  63. package/dist/viewer/main.js +64 -3
  64. package/dist/viewer/main.js.map +1 -1
  65. package/dist/viewer/page.d.ts +2 -4
  66. package/dist/viewer/page.d.ts.map +1 -1
  67. package/dist/viewer/page.js +18 -194
  68. package/dist/viewer/page.js.map +1 -1
  69. package/dist/viewer/presentation.d.ts +12 -0
  70. package/dist/viewer/presentation.d.ts.map +1 -0
  71. package/dist/viewer/presentation.js +48 -0
  72. package/dist/viewer/presentation.js.map +1 -0
  73. package/dist/viewer/protocol.d.ts +21 -0
  74. package/dist/viewer/protocol.d.ts.map +1 -0
  75. package/dist/viewer/protocol.js +6 -0
  76. package/dist/viewer/protocol.js.map +1 -0
  77. package/dist/viewer/server.d.ts +5 -10
  78. package/dist/viewer/server.d.ts.map +1 -1
  79. package/dist/viewer/server.js +301 -199
  80. package/dist/viewer/server.js.map +1 -1
  81. package/dist/viewer/styles.d.ts +1 -1
  82. package/dist/viewer/styles.d.ts.map +1 -1
  83. package/dist/viewer/styles.js +82 -429
  84. package/dist/viewer/styles.js.map +1 -1
  85. package/dist/viewer/stylex.css +1322 -0
  86. package/dist/viewer/test-catalog.d.ts +43 -0
  87. package/dist/viewer/test-catalog.d.ts.map +1 -0
  88. package/dist/viewer/test-catalog.js +27 -0
  89. package/dist/viewer/test-catalog.js.map +1 -0
  90. package/dist/viewer/v2-client.d.ts +7 -0
  91. package/dist/viewer/v2-client.d.ts.map +1 -0
  92. package/dist/viewer/v2-client.js +1862 -0
  93. package/dist/viewer/v2-client.js.map +1 -0
  94. package/package.json +14 -4
  95. package/dist/compare-scenario.d.ts +0 -65
  96. package/dist/compare-scenario.d.ts.map +0 -1
  97. package/dist/compare-scenario.js +0 -325
  98. package/dist/compare-scenario.js.map +0 -1
  99. package/dist/failures.d.ts +0 -8
  100. package/dist/failures.d.ts.map +0 -1
  101. package/dist/failures.js +0 -7
  102. package/dist/failures.js.map +0 -1
  103. package/dist/scenario-story.d.ts +0 -41
  104. package/dist/scenario-story.d.ts.map +0 -1
  105. package/dist/scenario-story.js +0 -477
  106. package/dist/scenario-story.js.map +0 -1
  107. package/dist/scenario-usage.d.ts +0 -15
  108. package/dist/scenario-usage.d.ts.map +0 -1
  109. package/dist/scenario-usage.js +0 -18
  110. package/dist/scenario-usage.js.map +0 -1
  111. package/dist/sdk/viewer-results.d.ts +0 -43
  112. package/dist/sdk/viewer-results.d.ts.map +0 -1
  113. package/dist/sdk/viewer-results.js +0 -126
  114. package/dist/sdk/viewer-results.js.map +0 -1
  115. package/dist/types.d.ts +0 -328
  116. package/dist/types.d.ts.map +0 -1
  117. package/dist/types.js +0 -2
  118. package/dist/types.js.map +0 -1
  119. package/dist/viewer/catalog.d.ts +0 -66
  120. package/dist/viewer/catalog.d.ts.map +0 -1
  121. package/dist/viewer/catalog.js +0 -49
  122. package/dist/viewer/catalog.js.map +0 -1
  123. package/dist/viewer/client.d.ts +0 -7
  124. package/dist/viewer/client.d.ts.map +0 -1
  125. package/dist/viewer/client.js +0 -14
  126. package/dist/viewer/client.js.map +0 -1
  127. package/dist/viewer/events.d.ts +0 -118
  128. package/dist/viewer/events.d.ts.map +0 -1
  129. package/dist/viewer/events.js +0 -51
  130. package/dist/viewer/events.js.map +0 -1
  131. package/dist/viewer/run-controller.d.ts +0 -43
  132. package/dist/viewer/run-controller.d.ts.map +0 -1
  133. package/dist/viewer/run-controller.js +0 -475
  134. package/dist/viewer/run-controller.js.map +0 -1
  135. package/dist/worker-pool.d.ts +0 -12
  136. package/dist/worker-pool.d.ts.map +0 -1
  137. package/dist/worker-pool.js +0 -26
  138. package/dist/worker-pool.js.map +0 -1
package/dist/sdk/cli.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export declare function playwrightCli(): string;
1
+ export { playwrightCli } from "./playwright-cli.js";
2
2
  export declare function runSdkCli(args: string[]): Promise<number>;
3
3
  //# sourceMappingURL=cli.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/sdk/cli.ts"],"names":[],"mappings":"AAKA,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AACD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAe/D"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/sdk/cli.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAwCpD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAe/D"}
package/dist/sdk/cli.js CHANGED
@@ -1,20 +1,55 @@
1
- import { spawn } from "node:child_process";
2
- import { createRequire } from "node:module";
3
1
  import { resolve } from "node:path";
4
- const require = createRequire(import.meta.url);
5
- export function playwrightCli() {
6
- return require.resolve("@playwright/test/cli");
2
+ import { startRecordedExecution } from "./execution-runner.js";
3
+ export { playwrightCli } from "./playwright-cli.js";
4
+ function runnerArgument(args, index) {
5
+ const value = args[index] ?? "";
6
+ if (value === "--config" || value === "-c")
7
+ return { kind: "config", value: args[index + 1] ?? "agent-test.config.ts", next: index + 2 };
8
+ if (value === "--reporter")
9
+ return { kind: "reporter", value: args[index + 1] ?? "list", next: index + 2 };
10
+ if (value.startsWith("--reporter="))
11
+ return {
12
+ kind: "reporter",
13
+ value: value.slice("--reporter=".length) || "list",
14
+ next: index + 1,
15
+ };
16
+ return { kind: "pass", value, next: index + 1 };
17
+ }
18
+ function runnerArguments(args) {
19
+ let config = resolve("agent-test.config.ts");
20
+ let reporter = "list";
21
+ const passThrough = [];
22
+ for (let index = 0; index < args.length;) {
23
+ const argument = runnerArgument(args, index);
24
+ index = argument.next;
25
+ switch (argument.kind) {
26
+ case "config":
27
+ config = resolve(argument.value);
28
+ break;
29
+ case "reporter":
30
+ reporter = argument.value;
31
+ break;
32
+ case "pass":
33
+ passThrough.push(argument.value);
34
+ }
35
+ }
36
+ return { config, reporter, passThrough };
7
37
  }
8
38
  export async function runSdkCli(args) {
9
- return new Promise((resolveCode, reject) => {
10
- const child = spawn(process.execPath, [playwrightCli(), "test", "--config", resolve("agent-test.config.ts"), ...args], { stdio: "inherit" });
11
- const cancel = () => child.kill("SIGTERM");
12
- process.once("SIGINT", cancel);
13
- child.once("error", reject);
14
- child.once("close", (code) => {
15
- process.removeListener("SIGINT", cancel);
16
- resolveCode(code ?? 1);
17
- });
39
+ const { config, reporter: requestedReporter, passThrough } = runnerArguments(args);
40
+ const execution = await startRecordedExecution({
41
+ config,
42
+ args: passThrough,
43
+ reporter: requestedReporter,
44
+ onOutput: (line) => process.stdout.write(`${line}\n`),
18
45
  });
46
+ const cancel = () => execution.cancel();
47
+ process.once("SIGINT", cancel);
48
+ try {
49
+ return await execution.completed;
50
+ }
51
+ finally {
52
+ process.removeListener("SIGINT", cancel);
53
+ }
19
54
  }
20
55
  //# sourceMappingURL=cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/sdk/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,UAAU,aAAa;IAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAChD,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,KAAK,CAClB,OAAO,CAAC,QAAQ,EAChB,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,sBAAsB,CAAC,EAAE,GAAG,IAAI,CAAC,EAC/E,EAAE,KAAK,EAAE,SAAS,EAAE,CACpB,CAAC;QACF,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5B,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACzC,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/sdk/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Returns direct expect(...) assertions in declaration order for viewer discovery. */
2
+ export declare function derivedExpectCriteria(source: string): string[];
3
+ //# sourceMappingURL=criteria.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"criteria.d.ts","sourceRoot":"","sources":["../../src/sdk/criteria.ts"],"names":[],"mappings":"AAIA,uFAAuF;AACvF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAc9D"}
@@ -0,0 +1,162 @@
1
+ const IDENTIFIER = /[\w$]/;
2
+ const WHITESPACE = /\s/;
3
+ const REGULAR_EXPRESSION_FLAG = /[a-z]/i;
4
+ /** Returns direct expect(...) assertions in declaration order for viewer discovery. */
5
+ export function derivedExpectCriteria(source) {
6
+ const criteria = [];
7
+ for (let index = 0; index < source.length; index++) {
8
+ const ignoredEnd = ignoredTokenEnd(source, index);
9
+ if (ignoredEnd > index) {
10
+ index = ignoredEnd - 1;
11
+ continue;
12
+ }
13
+ if (!isExpectCall(source, index))
14
+ continue;
15
+ const end = assertionEnd(source, index);
16
+ criteria.push(normalizeAssertion(source.slice(index, end)));
17
+ index = end - 1;
18
+ }
19
+ return criteria;
20
+ }
21
+ function isExpectCall(source, index) {
22
+ if (!source.startsWith("expect", index))
23
+ return false;
24
+ const previous = source[index - 1];
25
+ if (previous && (IDENTIFIER.test(previous) || previous === "."))
26
+ return false;
27
+ const next = source[index + "expect".length];
28
+ if (next && IDENTIFIER.test(next))
29
+ return false;
30
+ return source
31
+ .slice(index + "expect".length)
32
+ .trimStart()
33
+ .startsWith("(");
34
+ }
35
+ function assertionEnd(source, start) {
36
+ const depths = { parentheses: 0, brackets: 0, braces: 0 };
37
+ for (let index = start; index < source.length; index++) {
38
+ const ignoredEnd = ignoredTokenEnd(source, index);
39
+ if (ignoredEnd > index) {
40
+ index = ignoredEnd - 1;
41
+ continue;
42
+ }
43
+ const character = source[index];
44
+ if ((character === ";" || character === "}") && isTopLevel(depths))
45
+ return index;
46
+ updateDepths(depths, character);
47
+ }
48
+ return source.length;
49
+ }
50
+ function isTopLevel(depths) {
51
+ return depths.parentheses === 0 && depths.brackets === 0 && depths.braces === 0;
52
+ }
53
+ function updateDepths(depths, character) {
54
+ if (character === "(")
55
+ depths.parentheses++;
56
+ if (character === ")")
57
+ depths.parentheses--;
58
+ if (character === "[")
59
+ depths.brackets++;
60
+ if (character === "]")
61
+ depths.brackets--;
62
+ if (character === "{")
63
+ depths.braces++;
64
+ if (character === "}")
65
+ depths.braces--;
66
+ }
67
+ function ignoredTokenEnd(source, index) {
68
+ const character = source[index];
69
+ if (character === '"' || character === "'" || character === "`")
70
+ return quotedTokenEnd(source, index, character);
71
+ if (source.startsWith("//", index))
72
+ return lineCommentEnd(source, index);
73
+ if (source.startsWith("/*", index))
74
+ return blockCommentEnd(source, index);
75
+ if (character === "/" && startsRegularExpression(source, index))
76
+ return regularExpressionEnd(source, index);
77
+ return index;
78
+ }
79
+ function quotedTokenEnd(source, start, quote) {
80
+ for (let index = start + 1; index < source.length; index++) {
81
+ if (source[index] === "\\")
82
+ index++;
83
+ else if (source[index] === quote)
84
+ return index + 1;
85
+ }
86
+ return source.length;
87
+ }
88
+ function lineCommentEnd(source, start) {
89
+ const end = source.indexOf("\n", start + 2);
90
+ return end < 0 ? source.length : end;
91
+ }
92
+ function blockCommentEnd(source, start) {
93
+ const end = source.indexOf("*/", start + 2);
94
+ return end < 0 ? source.length : end + 2;
95
+ }
96
+ function startsRegularExpression(source, index) {
97
+ let previous = index - 1;
98
+ while (previous >= 0 && WHITESPACE.test(source[previous] ?? ""))
99
+ previous--;
100
+ return previous < 0 || "([{:;,=!?&|".includes(source[previous] ?? "");
101
+ }
102
+ function regularExpressionEnd(source, start) {
103
+ let inCharacterClass = false;
104
+ for (let index = start + 1; index < source.length; index++) {
105
+ const character = source[index];
106
+ if (character === "\\") {
107
+ index++;
108
+ continue;
109
+ }
110
+ inCharacterClass = nextCharacterClassState(inCharacterClass, character);
111
+ if (!closesRegularExpression(character, inCharacterClass))
112
+ continue;
113
+ while (REGULAR_EXPRESSION_FLAG.test(source[index + 1] ?? ""))
114
+ index++;
115
+ return index + 1;
116
+ }
117
+ return source.length;
118
+ }
119
+ function nextCharacterClassState(current, character) {
120
+ if (character === "[")
121
+ return true;
122
+ if (character === "]")
123
+ return false;
124
+ return current;
125
+ }
126
+ function closesRegularExpression(character, inCharacterClass) {
127
+ return character === "/" && !inCharacterClass;
128
+ }
129
+ function normalizeAssertion(source) {
130
+ let normalized = "";
131
+ let pendingSpace = false;
132
+ for (let index = 0; index < source.length; index++) {
133
+ const ignoredEnd = ignoredTokenEnd(source, index);
134
+ if (ignoredEnd > index)
135
+ ({ normalized, pendingSpace, index } = appendIgnoredToken({
136
+ source,
137
+ index,
138
+ end: ignoredEnd,
139
+ normalized,
140
+ pendingSpace,
141
+ }));
142
+ else if (WHITESPACE.test(source[index] ?? ""))
143
+ pendingSpace = true;
144
+ else
145
+ ({ normalized, pendingSpace } = appendText(normalized, source[index] ?? "", pendingSpace));
146
+ }
147
+ return normalized.trim();
148
+ }
149
+ function appendIgnoredToken(input) {
150
+ const { source, index, end, normalized, pendingSpace } = input;
151
+ if (source.startsWith("//", index) || source.startsWith("/*", index))
152
+ return { normalized, pendingSpace: true, index: end - 1 };
153
+ const appended = appendText(normalized, source.slice(index, end), pendingSpace);
154
+ return { ...appended, index: end - 1 };
155
+ }
156
+ function appendText(normalized, text, pendingSpace) {
157
+ return {
158
+ normalized: `${normalized}${pendingSpace && normalized ? " " : ""}${text}`,
159
+ pendingSpace: false,
160
+ };
161
+ }
162
+ //# sourceMappingURL=criteria.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"criteria.js","sourceRoot":"","sources":["../../src/sdk/criteria.ts"],"names":[],"mappings":"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"}
@@ -40,7 +40,7 @@ export function configuredAgent(defaultAgent, settings) {
40
40
  const selected = settings.agent ?? defaultAgent;
41
41
  if (!selected)
42
42
  throw new Error("Configure an agent definition for this resource");
43
- const { agent: _agent, workspace: _workspace, ...options } = settings;
43
+ const { agent: _agent, description: _description, workspace: _workspace, ...options } = settings;
44
44
  return {
45
45
  ...selected,
46
46
  options: mergeSettings(selected.options, options),
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/sdk/definitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/sdk/definitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { FullConfig, FullResult, Reporter, Suite, TestCase, TestResult } from "@playwright/test/reporter";
2
+ export declare function storedValue(value: unknown, key?: string): unknown;
3
+ /** Records Playwright lifecycle and agent SDK events without changing terminal output. */
4
+ export default class ExecutionReporter implements Reporter {
5
+ private readonly store;
6
+ private readonly buffers;
7
+ private writes;
8
+ private record;
9
+ onBegin(_config: FullConfig, suite: Suite): void;
10
+ onTestBegin(test: TestCase, result: TestResult): void;
11
+ onStdOut(chunk: string | Buffer, test?: TestCase, result?: TestResult): void;
12
+ onStdErr(chunk: string | Buffer, test?: TestCase, result?: TestResult): void;
13
+ private capture;
14
+ private captureLine;
15
+ onTestEnd(test: TestCase, result: TestResult): void;
16
+ onEnd(result: FullResult): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=execution-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-reporter.d.ts","sourceRoot":"","sources":["../../src/sdk/execution-reporter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,UAAU,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,UAAU,EAEV,MAAM,2BAA2B,CAAC;AAqEnC,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAWjE;AAED,0FAA0F;AAC1F,MAAM,CAAC,OAAO,OAAO,iBAAkB,YAAW,QAAQ;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyE;IAC/F,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,QAIxC;IACD,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,QAY7C;IACD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,UAAU,QAEpE;IACD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,UAAU,QAEpE;IACD,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,WAAW;IAmCnB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,QAa3C;IACK,KAAK,CAAC,MAAM,EAAE,UAAU,iBAS7B;CACD"}
@@ -0,0 +1,171 @@
1
+ import { basename } from "node:path";
2
+ import { stripAnsi } from "../viewer/presentation.js";
3
+ import { ExecutionStore } from "./execution-store.js";
4
+ function executionInput() {
5
+ const root = process.env.AGENT_TEST_EXECUTION_ROOT;
6
+ const id = process.env.AGENT_TEST_EXECUTION_ID;
7
+ const config = process.env.AGENT_TEST_EXECUTION_CONFIG;
8
+ if (!root || !id || !config)
9
+ throw new Error("Execution reporter requires AGENT_TEST_EXECUTION_* variables");
10
+ return { root, id, config };
11
+ }
12
+ function attemptId(test, result) {
13
+ return `${test.id}:${result.retry}`;
14
+ }
15
+ function errorData(result) {
16
+ return result.errors.map((error) => ({
17
+ message: error.message ? stripAnsi(error.message) : error.message,
18
+ stack: error.stack ? stripAnsi(error.stack) : error.stack,
19
+ }));
20
+ }
21
+ function declaredCriteria(test) {
22
+ const raw = test.annotations.find((entry) => entry.type === "agent-test.criteria")?.description;
23
+ if (!raw)
24
+ return [];
25
+ try {
26
+ const parsed = JSON.parse(raw);
27
+ return Array.isArray(parsed) && parsed.every((value) => typeof value === "string")
28
+ ? parsed
29
+ : [];
30
+ }
31
+ catch {
32
+ return [];
33
+ }
34
+ }
35
+ function expectationSteps(steps) {
36
+ return steps.flatMap((step) => [
37
+ ...(step.category === "expect" ? [step] : []),
38
+ ...expectationSteps(step.steps),
39
+ ]);
40
+ }
41
+ function criterionData(test, result) {
42
+ const assertions = expectationSteps(result.steps);
43
+ const criteria = declaredCriteria(test);
44
+ return criteria.map((criterion, index) => {
45
+ const assertion = assertions[index];
46
+ if (!assertion)
47
+ return {
48
+ criterion,
49
+ status: result.status === "passed" ? "passed" : "not-recorded",
50
+ };
51
+ return {
52
+ criterion,
53
+ status: assertion?.error ? "failed" : "passed",
54
+ assertion: assertion?.title,
55
+ };
56
+ });
57
+ }
58
+ const PRIVATE_PATH = /\/(?:Users|home|private|tmp|var\/folders)\/[^\s"']+/g;
59
+ function redactLocalPath(value) {
60
+ return value.replace(PRIVATE_PATH, (path) => `<local-path>/${basename(path)}`);
61
+ }
62
+ export function storedValue(value, key) {
63
+ if (typeof value === "string")
64
+ return key === "artifact" || key === "root" ? "<local-path>" : redactLocalPath(value);
65
+ if (Array.isArray(value))
66
+ return value.map((item) => storedValue(item, key));
67
+ if (typeof value !== "object" || value === null)
68
+ return value;
69
+ return Object.fromEntries(Object.entries(value).map(([entryKey, item]) => [
70
+ entryKey,
71
+ storedValue(item, entryKey),
72
+ ]));
73
+ }
74
+ /** Records Playwright lifecycle and agent SDK events without changing terminal output. */
75
+ export default class ExecutionReporter {
76
+ store = ExecutionStore.create({ ...executionInput(), ownerPid: process.pid });
77
+ buffers = new Map();
78
+ writes = Promise.resolve();
79
+ record(event) {
80
+ this.writes = this.writes.then(async () => {
81
+ await (await this.store).record(event);
82
+ });
83
+ }
84
+ onBegin(_config, suite) {
85
+ this.writes = this.writes.then(async () => {
86
+ await (await this.store).setTests(suite.allTests().map((test) => test.id));
87
+ });
88
+ }
89
+ onTestBegin(test, result) {
90
+ this.record({
91
+ type: "attempt.started",
92
+ level: "info",
93
+ attemptId: attemptId(test, result),
94
+ data: {
95
+ testId: test.id,
96
+ title: test.titlePath(),
97
+ retry: result.retry,
98
+ project: test.parent.project()?.name,
99
+ },
100
+ });
101
+ }
102
+ onStdOut(chunk, test, result) {
103
+ this.capture({ stream: "stdout", chunk: chunk.toString(), test, result });
104
+ }
105
+ onStdErr(chunk, test, result) {
106
+ this.capture({ stream: "stderr", chunk: chunk.toString(), test, result });
107
+ }
108
+ capture(output) {
109
+ const { chunk, test, result } = output;
110
+ const key = test && result ? attemptId(test, result) : "global";
111
+ const lines = `${this.buffers.get(key) ?? ""}${chunk}`.split("\n");
112
+ this.buffers.set(key, lines.pop() ?? "");
113
+ for (const line of lines)
114
+ this.captureLine({ ...output, chunk: line });
115
+ }
116
+ captureLine(output) {
117
+ const { stream, chunk: line, test, result } = output;
118
+ const attempt = test && result ? attemptId(test, result) : undefined;
119
+ if (!line.startsWith("@@agent-test:")) {
120
+ if (line.trim())
121
+ this.record({
122
+ type: `test.${stream}`,
123
+ level: stream === "stderr" ? "warn" : "info",
124
+ attemptId: attempt,
125
+ data: { text: line },
126
+ });
127
+ return;
128
+ }
129
+ try {
130
+ const event = JSON.parse(line.slice("@@agent-test:".length));
131
+ this.record({
132
+ type: `operation.${event.type}`,
133
+ level: "debug",
134
+ attemptId: attempt,
135
+ operationId: event.runId,
136
+ data: storedValue(event.value),
137
+ });
138
+ }
139
+ catch {
140
+ this.record({
141
+ type: "recorder.parse_failed",
142
+ level: "warn",
143
+ attemptId: attempt,
144
+ data: { line },
145
+ });
146
+ }
147
+ }
148
+ onTestEnd(test, result) {
149
+ this.record({
150
+ type: "attempt.finished",
151
+ level: result.status === test.expectedStatus ? "info" : "error",
152
+ attemptId: attemptId(test, result),
153
+ data: {
154
+ status: result.status,
155
+ expectedStatus: test.expectedStatus,
156
+ durationMs: result.duration,
157
+ errors: errorData(result),
158
+ criterionResults: criterionData(test, result),
159
+ },
160
+ });
161
+ }
162
+ async onEnd(result) {
163
+ await this.writes;
164
+ await (await this.store).finish(result.status === "passed"
165
+ ? "passed"
166
+ : result.status === "interrupted"
167
+ ? "interrupted"
168
+ : "failed");
169
+ }
170
+ }
171
+ //# sourceMappingURL=execution-reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-reporter.js","sourceRoot":"","sources":["../../src/sdk/execution-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAUrC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAwB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE5E,SAAS,cAAc;IACtB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACnD,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IACvD,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM;QAC1B,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IACjF,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AACD,SAAS,SAAS,CAAC,IAAc,EAAE,MAAkB;IACpD,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;AACrC,CAAC;AACD,SAAS,SAAS,CAAC,MAAkB;IACpC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;QACjE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK;KACzD,CAAC,CAAC,CAAC;AACL,CAAC;AACD,SAAS,gBAAgB,CAAC,IAAc;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,qBAAqB,CAAC,EAAE,WAAW,CAAC;IAChG,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACJ,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;YACjF,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC;AACD,SAAS,gBAAgB,CAAC,KAAiB;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;KAC/B,CAAC,CAAC;AACJ,CAAC;AACD,SAAS,aAAa,CAAC,IAAc,EAAE,MAAkB;IACxD,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS;YACb,OAAO;gBACN,SAAS;gBACT,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc;aAC9D,CAAC;QACH,OAAO;YACN,SAAS;YACT,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;YAC9C,SAAS,EAAE,SAAS,EAAE,KAAK;SAC3B,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC;AAQD,MAAM,YAAY,GAAG,sDAAsD,CAAC;AAE5E,SAAS,eAAe,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,GAAY;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC5B,OAAO,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACvF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,OAAO,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1E,QAAQ;QACR,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;KAC3B,CAAC,CACF,CAAC;AACH,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpB,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9E,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,MAAM,CAAC,KAA8C;QAC5D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACzC,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,OAAmB,EAAE,KAAY;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACzC,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,WAAW,CAAC,IAAc,EAAE,MAAkB;QAC7C,IAAI,CAAC,MAAM,CAAC;YACX,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;YAClC,IAAI,EAAE;gBACL,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI;aACpC;SACD,CAAC,CAAC;IACJ,CAAC;IACD,QAAQ,CAAC,KAAsB,EAAE,IAAe,EAAE,MAAmB;QACpE,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,QAAQ,CAAC,KAAsB,EAAE,IAAe,EAAE,MAAmB;QACpE,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3E,CAAC;IACO,OAAO,CAAC,MAAsB;QACrC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChE,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IACO,WAAW,CAAC,MAAsB;QACzC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,IAAI,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC;oBACX,IAAI,EAAE,QAAQ,MAAM,EAAE;oBACtB,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;oBAC5C,SAAS,EAAE,OAAO;oBAClB,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;iBACpB,CAAC,CAAC;YACJ,OAAO;QACR,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAI1D,CAAC;YACF,IAAI,CAAC,MAAM,CAAC;gBACX,IAAI,EAAE,aAAa,KAAK,CAAC,IAAI,EAAE;gBAC/B,KAAK,EAAE,OAAO;gBACd,SAAS,EAAE,OAAO;gBAClB,WAAW,EAAE,KAAK,CAAC,KAAK;gBACxB,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;aAC9B,CAAC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACR,IAAI,CAAC,MAAM,CAAC;gBACX,IAAI,EAAE,uBAAuB;gBAC7B,KAAK,EAAE,MAAM;gBACb,SAAS,EAAE,OAAO;gBAClB,IAAI,EAAE,EAAE,IAAI,EAAE;aACd,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IACD,SAAS,CAAC,IAAc,EAAE,MAAkB;QAC3C,IAAI,CAAC,MAAM,CAAC;YACX,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YAC/D,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;YAClC,IAAI,EAAE;gBACL,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,UAAU,EAAE,MAAM,CAAC,QAAQ;gBAC3B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC;gBACzB,gBAAgB,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;aAC7C;SACD,CAAC,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,MAAkB;QAC7B,MAAM,IAAI,CAAC,MAAM,CAAC;QAClB,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC9B,MAAM,CAAC,MAAM,KAAK,QAAQ;YACzB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,aAAa;gBAChC,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,QAAQ,CACZ,CAAC;IACH,CAAC;CACD"}
@@ -0,0 +1,14 @@
1
+ export type StartedExecution = {
2
+ id: string;
3
+ cancel: () => void;
4
+ completed: Promise<number>;
5
+ };
6
+ export type StartExecutionOptions = {
7
+ config: string;
8
+ args: string[];
9
+ reporter?: string;
10
+ onOutput?: (line: string) => void;
11
+ };
12
+ /** Starts one recorded Playwright process. CLI and viewer share this boundary. */
13
+ export declare function startRecordedExecution(options: StartExecutionOptions): Promise<StartedExecution>;
14
+ //# sourceMappingURL=execution-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-runner.d.ts","sourceRoot":"","sources":["../../src/sdk/execution-runner.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,gBAAgB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,CAAC;AAEF,kFAAkF;AAClF,wBAAsB,sBAAsB,CAC3C,OAAO,EAAE,qBAAqB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAqC3B"}
@@ -0,0 +1,80 @@
1
+ import { spawn } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { ExecutionStore, executionHistoryRoot, finishExecutionIfRunning, } from "./execution-store.js";
6
+ import { playwrightCli } from "./playwright-cli.js";
7
+ /** Starts one recorded Playwright process. CLI and viewer share this boundary. */
8
+ export async function startRecordedExecution(options) {
9
+ const id = crypto.randomUUID();
10
+ const root = resolve(executionHistoryRoot(options.config), id);
11
+ await ExecutionStore.create({
12
+ root,
13
+ id,
14
+ config: options.config,
15
+ ownerPid: process.pid,
16
+ });
17
+ const child = spawn(process.execPath, recordedExecutionArgs(options, root), {
18
+ stdio: ["inherit", "pipe", "inherit"],
19
+ env: {
20
+ ...process.env,
21
+ AGENT_TEST_RECORDER: "1",
22
+ AGENT_TEST_EXECUTION_ID: id,
23
+ AGENT_TEST_EXECUTION_ROOT: root,
24
+ AGENT_TEST_EXECUTION_CONFIG: options.config,
25
+ },
26
+ });
27
+ pipeOutput(child.stdout, options.onOutput);
28
+ let cancelRequested = false;
29
+ return {
30
+ id,
31
+ cancel: () => {
32
+ cancelRequested = true;
33
+ child.kill("SIGTERM");
34
+ },
35
+ completed: new Promise((resolveCode, reject) => {
36
+ child.once("error", reject);
37
+ child.once("close", (code) => {
38
+ void finishExecutionIfRunning(root, cancelRequested ? "interrupted" : "failed").then(() => resolveCode(code ?? 1), reject);
39
+ });
40
+ }),
41
+ };
42
+ }
43
+ function recordedExecutionArgs(options, root) {
44
+ return [
45
+ playwrightCli(),
46
+ "test",
47
+ "--config",
48
+ options.config,
49
+ "--reporter",
50
+ `${options.reporter ?? "list"},${executionReporterPath()}`,
51
+ "--output",
52
+ resolve(root, "test-results"),
53
+ ...options.args,
54
+ ];
55
+ }
56
+ function executionReporterPath() {
57
+ const adjacent = new URL("./execution-reporter.js", import.meta.url);
58
+ if (existsSync(adjacent))
59
+ return fileURLToPath(adjacent);
60
+ return fileURLToPath(new URL("../../dist/sdk/execution-reporter.js", import.meta.url));
61
+ }
62
+ function pipeOutput(stream, onOutput) {
63
+ if (!stream || !onOutput)
64
+ return;
65
+ let buffered = "";
66
+ stream.setEncoding("utf8");
67
+ stream.on("data", (chunk) => {
68
+ const lines = `${buffered}${chunk}`.split("\n");
69
+ buffered = lines.pop() ?? "";
70
+ for (const line of lines) {
71
+ if (!line.startsWith("@@agent-test:"))
72
+ onOutput(line);
73
+ }
74
+ });
75
+ stream.once("end", () => {
76
+ if (buffered && !buffered.startsWith("@@agent-test:"))
77
+ onOutput(buffered);
78
+ });
79
+ }
80
+ //# sourceMappingURL=execution-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-runner.js","sourceRoot":"","sources":["../../src/sdk/execution-runner.ts"],"names":[],"mappings":"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"}