@molecule/api-ai-tools 1.6.6 → 1.7.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 +290 -28
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +213 -70
- package/dist/trace-artifacts.d.ts +147 -0
- package/dist/trace-artifacts.d.ts.map +1 -0
- package/dist/trace-artifacts.js +467 -0
- package/dist/utilities.d.ts +77 -18
- package/dist/utilities.d.ts.map +1 -1
- package/dist/utilities.js +112 -26
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -3,15 +3,11 @@ AUTO-GENERATED — DO NOT EDIT THIS FILE.
|
|
|
3
3
|
Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
|
|
4
4
|
Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
|
|
5
5
|
To change this document, edit the module-level JSDoc in src/index.ts.
|
|
6
|
-
Generated: 2026-10-
|
|
6
|
+
Generated: 2026-10-17T00:30:38.264Z
|
|
7
7
|
-->
|
|
8
8
|
|
|
9
9
|
# @molecule/api-ai-tools
|
|
10
10
|
|
|
11
|
-
> **Auto-generated, AI-first package reference** for the [molecule.dev](https://molecule.dev) ecosystem.
|
|
12
|
-
> It is written to be read by coding agents as much as by people, and is generated from this
|
|
13
|
-
> package's source — edit `src/index.ts` JSDoc, not this file.
|
|
14
|
-
|
|
15
11
|
Shared AI agent tool set for molecule.dev — filesystem, search, and shell
|
|
16
12
|
tools an LLM agent can call, with a swappable execution backend.
|
|
17
13
|
|
|
@@ -24,6 +20,10 @@ WHERE they act: `createLocalBackend(projectRoot)` (host filesystem) or
|
|
|
24
20
|
container). `buildAgentPrompt(ctx)` composes a matching system prompt
|
|
25
21
|
(identity, tool listing, project docs, discovered skills).
|
|
26
22
|
|
|
23
|
+
> **Auto-generated, AI-first package reference** for the [molecule.dev](https://molecule.dev) ecosystem.
|
|
24
|
+
> It is written to be read by coding agents as much as by people, and is generated from this
|
|
25
|
+
> package's source — edit `src/index.ts` JSDoc, not this file.
|
|
26
|
+
|
|
27
27
|
## Quick Start
|
|
28
28
|
|
|
29
29
|
```typescript
|
|
@@ -186,6 +186,51 @@ interface SuiteRunInFlight {
|
|
|
186
186
|
}
|
|
187
187
|
```
|
|
188
188
|
|
|
189
|
+
#### `TraceRequest`
|
|
190
|
+
|
|
191
|
+
One request a traced page made, as `*.network` records it.
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
interface TraceRequest {
|
|
195
|
+
/** The HTTP method (`POST`). */
|
|
196
|
+
method: string
|
|
197
|
+
/** The request's path (`/api/articles/x/favorite`), or the whole URL when it is cross-origin. */
|
|
198
|
+
path: string
|
|
199
|
+
/** The response status, or 0 when the request never got a response. */
|
|
200
|
+
status: number
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
#### `TraceArtifact`
|
|
205
|
+
|
|
206
|
+
What one trace says: the test it belongs to, the requests it made, and its console errors.
|
|
207
|
+
|
|
208
|
+
```typescript
|
|
209
|
+
interface TraceArtifact {
|
|
210
|
+
/** The failure's spec file, relative to the run's directory, when the trace names one. */
|
|
211
|
+
spec: string | null
|
|
212
|
+
/** The line of the test's last traced step, 0 when the trace names no spec. */
|
|
213
|
+
line: number
|
|
214
|
+
/** The requests the page made, the interesting ones first ({@link traceArtifactsScript}). */
|
|
215
|
+
requests: TraceRequest[]
|
|
216
|
+
/** The console errors and page errors the page raised. */
|
|
217
|
+
console: string[]
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
#### `DiagnosisTraceRewrite`
|
|
222
|
+
|
|
223
|
+
A command with the trace flag this platform decided to add, and the sentence to report it in.
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
interface DiagnosisTraceRewrite {
|
|
227
|
+
/** The command to run. */
|
|
228
|
+
command: string
|
|
229
|
+
/** One sentence naming the flag and why, or null when nothing was added. */
|
|
230
|
+
change: string | null
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
189
234
|
#### `ExecutionBackend`
|
|
190
235
|
|
|
191
236
|
Abstraction over the execution environment.
|
|
@@ -1025,6 +1070,107 @@ function buildTools(backend: ExecutionBackend, config?: ToolBuildConfig): AITool
|
|
|
1025
1070
|
|
|
1026
1071
|
**Returns:** Array of AITool objects ready to pass to an AI provider
|
|
1027
1072
|
|
|
1073
|
+
#### `traceArtifactsScript()`
|
|
1074
|
+
|
|
1075
|
+
The Node program the sandbox runs to read a failed run's traces: `node <script> <dir>` prints one
|
|
1076
|
+
`TRACE <json>` line per `trace.zip` under `<dir>` (newest first, {@link MAX_TRACE_ARTIFACTS} of
|
|
1077
|
+
them), each with the test it belongs to, the requests its page made and its console errors.
|
|
1078
|
+
|
|
1079
|
+
It is a standalone program, not an import, for the reason `@molecule/api-code-sandbox` runs it:
|
|
1080
|
+
Playwright's own zip reader is not reachable from a project's `node_modules`, and a dependency
|
|
1081
|
+
on `unzip` would make the read fail on every sandbox that has none. The zip is read with the
|
|
1082
|
+
central directory and `zlib.inflateRawSync` — about forty lines, and the only thing that has to
|
|
1083
|
+
be true of a `trace.zip` is that it IS one.
|
|
1084
|
+
|
|
1085
|
+
A request is kept over a static asset when it failed (`status >= 400`) or never answered
|
|
1086
|
+
(`status === 0`), and over anything else when it is the page talking to the app
|
|
1087
|
+
(`fetch`/`xhr`/`document`): a failing test's trace holds the whole page load, and the answer is
|
|
1088
|
+
always at the end of it.
|
|
1089
|
+
|
|
1090
|
+
```typescript
|
|
1091
|
+
function traceArtifactsScript(): string
|
|
1092
|
+
```
|
|
1093
|
+
|
|
1094
|
+
**Returns:** The program's source, to write to a file and run.
|
|
1095
|
+
|
|
1096
|
+
#### `parseTraceArtifacts(stdout)`
|
|
1097
|
+
|
|
1098
|
+
The traces {@link traceArtifactsScript} printed, parsed.
|
|
1099
|
+
|
|
1100
|
+
A line that is not a complete `TRACE <json>` (a truncated read, a program that died mid-write) is
|
|
1101
|
+
dropped: a partial trace is not evidence about the test it came from.
|
|
1102
|
+
|
|
1103
|
+
```typescript
|
|
1104
|
+
function parseTraceArtifacts(stdout: string): TraceArtifact[]
|
|
1105
|
+
```
|
|
1106
|
+
|
|
1107
|
+
- `stdout` — The program's output.
|
|
1108
|
+
|
|
1109
|
+
**Returns:** One entry per trace it printed.
|
|
1110
|
+
|
|
1111
|
+
#### `failureTraceNote(items, target)`
|
|
1112
|
+
|
|
1113
|
+
The note a failed suite run's result carries: what each failing test's page actually sent, and
|
|
1114
|
+
what came back.
|
|
1115
|
+
|
|
1116
|
+
This is the answer to the question a swallowed error hides — a click that changed nothing is
|
|
1117
|
+
usually a request that failed — so the note leads with the failing requests and says what to do
|
|
1118
|
+
with them: read the handler the route reaches, not the selector. It is BOUNDED to
|
|
1119
|
+
{@link MAX_TRACE_NOTE_TESTS} tests with {@link MAX_TRACE_NOTE_REQUESTS} requests each, because it
|
|
1120
|
+
rides in a result the model pays for.
|
|
1121
|
+
|
|
1122
|
+
```typescript
|
|
1123
|
+
function failureTraceNote(items: readonly TraceArtifact[], target: string): string | null
|
|
1124
|
+
```
|
|
1125
|
+
|
|
1126
|
+
- `items` — The traces {@link parseTraceArtifacts} read.
|
|
1127
|
+
- `target` — Where the run went — the deployed host, as the note names it.
|
|
1128
|
+
|
|
1129
|
+
**Returns:** The note, or null when no trace held a request or a console error.
|
|
1130
|
+
|
|
1131
|
+
#### `suiteRecordsTraces(configText)`
|
|
1132
|
+
|
|
1133
|
+
Whether a Playwright config records traces for the tests that fail.
|
|
1134
|
+
|
|
1135
|
+
Only `on` and `retain-on-failure` keep a `trace.zip` for a failure whatever the retries do: the
|
|
1136
|
+
two retry modes need a retry to happen at all, and a diagnosis run is given `--retries=0`
|
|
1137
|
+
(`streamingBackgroundCommand`), so on X1 xr-molecule-flash-m100 the run's own
|
|
1138
|
+
`trace: 'on-first-retry'` recorded nothing — which is what left the failing tests' network log
|
|
1139
|
+
unreadable. A config that sets no `trace:` at all records nothing either (Playwright's default
|
|
1140
|
+
is off); so does one that cannot be read.
|
|
1141
|
+
|
|
1142
|
+
```typescript
|
|
1143
|
+
function suiteRecordsTraces(configText: string): boolean
|
|
1144
|
+
```
|
|
1145
|
+
|
|
1146
|
+
- `configText` — The config's source, or '' when none could be read.
|
|
1147
|
+
|
|
1148
|
+
**Returns:** True when the config records traces for failures.
|
|
1149
|
+
|
|
1150
|
+
#### `diagnosisTraceCommand(args)`
|
|
1151
|
+
|
|
1152
|
+
The command a DIAGNOSIS run needs to leave a readable trace behind, when the suite's config
|
|
1153
|
+
would record none.
|
|
1154
|
+
|
|
1155
|
+
The failing tests' requests are only readable if the run wrote them down (see the module doc),
|
|
1156
|
+
and the config is where the decision about that lives — the platform does not edit the suite's
|
|
1157
|
+
config, so it passes the flag instead, and only where it can do no harm: on a run narrowed to a
|
|
1158
|
+
part of the suite or capped ({@link isDiagnosisRun}), never on the whole-suite proof run, and
|
|
1159
|
+
never over a `--trace` the executor wrote itself. A capped walk is exactly the run whose
|
|
1160
|
+
failures someone is about to work on; the proof run is graded as it is.
|
|
1161
|
+
|
|
1162
|
+
```typescript
|
|
1163
|
+
function diagnosisTraceCommand(args: {
|
|
1164
|
+
command: string
|
|
1165
|
+
cwd: string
|
|
1166
|
+
readFile: (path: string) => Promise<string>
|
|
1167
|
+
}): Promise<DiagnosisTraceRewrite>
|
|
1168
|
+
```
|
|
1169
|
+
|
|
1170
|
+
- `args` — The command, the directory it starts in, and the backend's file read.
|
|
1171
|
+
|
|
1172
|
+
**Returns:** The command to run and the sentence to report, or the command unchanged.
|
|
1173
|
+
|
|
1028
1174
|
#### `shellQuote(s)`
|
|
1029
1175
|
|
|
1030
1176
|
Shell-safe quoting using single quotes. Unlike JSON.stringify (double quotes),
|
|
@@ -1661,10 +1807,12 @@ function failureBlocks(s: string): string[]
|
|
|
1661
1807
|
The shell command whose stdout is the interesting part of a log that is still being written:
|
|
1662
1808
|
the failure lines so far (capped at {@link RUNNING_FAILURE_LINES}), then the end of the log.
|
|
1663
1809
|
|
|
1664
|
-
A Playwright `list` run prints one line per test as it finishes
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1810
|
+
A Playwright `list` run prints one line per test as it finishes, so the LAST bytes of a running
|
|
1811
|
+
log are its least informative part — in X1 flash-m61 the last 3 000 bytes of a 139-test walk
|
|
1812
|
+
were the skip list, and all 61 failures were above them, which cost the run the grep it had to
|
|
1813
|
+
make anyway. A background run also carries each failure's own error as it fails
|
|
1814
|
+
({@link PLAYWRIGHT_FAILURES_INLINE_ENV}), and {@link RUNNING_FAILURE_LINE_RE} already matches
|
|
1815
|
+
those blocks' headers and their `Error:` lines, so this slice shows the causes too.
|
|
1668
1816
|
|
|
1669
1817
|
```typescript
|
|
1670
1818
|
function runningOutputSliceCommand(log: string, own?: string): string
|
|
@@ -1700,9 +1848,11 @@ function runningCauseCommand(log: string, own?: string): string
|
|
|
1700
1848
|
The cause repeating among a running suite's failures, or null.
|
|
1701
1849
|
|
|
1702
1850
|
Playwright's `list` reporter prints one line per test as it finishes — its mark, its title
|
|
1703
|
-
path and how long it ran — and
|
|
1704
|
-
|
|
1705
|
-
|
|
1851
|
+
path and how long it ran — and, on a run the platform started in the background, each failure's
|
|
1852
|
+
own error with it ({@link PLAYWRIGHT_FAILURES_INLINE_ENV}); a `list` run with no error bodies in
|
|
1853
|
+
its log (an older Playwright, a log the bodies have been cut from) carries only the duration as
|
|
1854
|
+
a signature. Where the log carries the failure bodies (either inline, or in a finished run's
|
|
1855
|
+
summary) the signature is the
|
|
1706
1856
|
error itself — {@link failureMessage}: the error class plus the locator or the values that
|
|
1707
1857
|
differ — which is stronger (it needs no assumption about how long a failure should take), so
|
|
1708
1858
|
the message is looked for first and the duration is then left with the tests whose bodies the
|
|
@@ -1715,8 +1865,8 @@ each was the test timeout and one missing `navigate('/')` was the cause of all o
|
|
|
1715
1865
|
|
|
1716
1866
|
The quorum is of DISTINCT tests — {@link REPEATING_FAILURE_MIN} of them — because a log that
|
|
1717
1867
|
prints each failure twice (a second reporter, a retry) had X1 flash-m83 told that four of its
|
|
1718
|
-
|
|
1719
|
-
|
|
1868
|
+
|
|
1869
|
+
_(description truncated — read the full text in `node_modules/@molecule/api-ai-tools/dist/utilities.d.ts`.)_
|
|
1720
1870
|
|
|
1721
1871
|
```typescript
|
|
1722
1872
|
function repeatingFailure(log: string): RepeatingFailure | null
|
|
@@ -1751,6 +1901,43 @@ function universalCause(log: string, found: RepeatingFailure): UniversalCause |
|
|
|
1751
1901
|
|
|
1752
1902
|
**Returns:** The cause's count and files, or null when the run is not failing whole.
|
|
1753
1903
|
|
|
1904
|
+
#### `earlyReturnCause(found, universal)`
|
|
1905
|
+
|
|
1906
|
+
The ONE finding that ends a wait early, and the only one a note may hand a stop command over
|
|
1907
|
+
for: a PROVEN cause that is failing the whole run.
|
|
1908
|
+
|
|
1909
|
+
Both halves are load-bearing, each of them learned from a run that lost minutes to the other.
|
|
1910
|
+
|
|
1911
|
+
- **Failing the WHOLE run** is {@link universalCause}: every failure the log names, across
|
|
1912
|
+
{@link UNIVERSAL_CAUSE_FILES} spec files or more, with nothing passing since the first — the
|
|
1913
|
+
dont-stop-runs rule. X1 flash-m83 (2026-10-16) stopped eight local runs at their first
|
|
1914
|
+
repeating cause in 14.5 minutes and never finished one, and a run that still has other causes
|
|
1915
|
+
left to name is the only thing that will name them.
|
|
1916
|
+
- **A PROVEN cause** is an error repeated VERBATIM. A shared DURATION is a LEAD, never a cause:
|
|
1917
|
+
a suite whose config sets a timeout spends that timeout on every failure that waits for
|
|
1918
|
+
anything, so three unrelated tests timing out together look exactly like one broken run
|
|
1919
|
+
(`~7 s` is a property of the CONFIG, not of the cause — {@link normalizedSignature}). X1
|
|
1920
|
+
xr-molecule-flash-m99 (2026-10-16) was told `status: 'repeating_failure'` twice on that
|
|
1921
|
+
shape — three `url-navigation.spec.ts` tests at ~16.2 s, one `timeout: 15_000` plus teardown
|
|
1922
|
+
— read the early return as "stop waiting, edit now", and voided a run that was still walking;
|
|
1923
|
+
the second cost a 224 s wait that ended with no result at all.
|
|
1924
|
+
|
|
1925
|
+
Neither half alone is enough, and {@link repeatingFailure} finding a signature is not either:
|
|
1926
|
+
|
|
1927
|
+
_(description truncated — read the full text in `node_modules/@molecule/api-ai-tools/dist/utilities.d.ts`.)_
|
|
1928
|
+
|
|
1929
|
+
```typescript
|
|
1930
|
+
function earlyReturnCause(
|
|
1931
|
+
found: RepeatingFailure,
|
|
1932
|
+
universal: UniversalCause | null | undefined,
|
|
1933
|
+
): UniversalCause | null
|
|
1934
|
+
```
|
|
1935
|
+
|
|
1936
|
+
- `found` — What {@link repeatingFailure} found mid-run.
|
|
1937
|
+
- `universal` — What {@link universalCause} found for it, if anything.
|
|
1938
|
+
|
|
1939
|
+
**Returns:** The cause to stop the run over, or null — in which case nothing may be stopped, the wait keeps going, and the finding rides the run's result as a note.
|
|
1940
|
+
|
|
1754
1941
|
#### `failuresByCause(log)`
|
|
1755
1942
|
|
|
1756
1943
|
Every failure a run names, grouped by the cause behind it — one group per cause, with the
|
|
@@ -1761,11 +1948,11 @@ after another with no statement of which of them share a cause, so a run of 19 f
|
|
|
1761
1948
|
bodies to read; X1 flash-m83 (2026-10-16) spent three deploys (6.7 minutes) each fixing a
|
|
1762
1949
|
single cause, two of them found by runs stopped before they walked the rest.
|
|
1763
1950
|
|
|
1764
|
-
The signature is the cause itself where the log carries the failures' bodies (a finished run,
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
why a duration group is labelled as a duration and not as a
|
|
1768
|
-
printed twice, or failed twice, is one test.
|
|
1951
|
+
The signature is the cause itself where the log carries the failures' bodies (a finished run, a
|
|
1952
|
+
background `list` run — whose failures print as they fail — or a `line` reporter) —
|
|
1953
|
+
{@link failureMessage}: the error class plus the locator or the values that differ — and how long
|
|
1954
|
+
they took where it does not, which is why a duration group is labelled as a duration and not as a
|
|
1955
|
+
proven cause. A test the log printed twice, or failed twice, is one test.
|
|
1769
1956
|
|
|
1770
1957
|
```typescript
|
|
1771
1958
|
function failuresByCause(log: string): FailureCause[]
|
|
@@ -1826,18 +2013,19 @@ what that function could actually see in the log — including the count, which
|
|
|
1826
2013
|
tests, so the note never names one or two tests as a cause.
|
|
1827
2014
|
|
|
1828
2015
|
The note names the cause early so the executor can START FIXING while the run keeps walking,
|
|
1829
|
-
and it
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
2016
|
+
and it hands a stop command over only when {@link earlyReturnCause} says so — the SAME
|
|
2017
|
+
predicate the wait uses to decide whether to return early, so a finding the wait keeps waiting
|
|
2018
|
+
on is a finding this note never asks to stop for. X1 flash-m76 (2026-10-16) spent 4.0 minutes
|
|
2019
|
+
walking 15 tests whose one cause was certain at the third, 47 s in, and the note answers
|
|
2020
|
+
exactly that; X1 flash-m83 then stopped eight runs at their first repeating cause in 14.5
|
|
2021
|
+
minutes and never finished one, so the note must not say to stop when the run still has other
|
|
2022
|
+
causes to name. X1 xr-molecule-flash-m99 (2026-10-16) is the third shape: a shared duration is
|
|
2023
|
+
not a cause at all, so a lead reaches the executor as a note on a result it is still waiting
|
|
2024
|
+
for — never as a verdict with a stop command in it.
|
|
1834
2025
|
|
|
1835
2026
|
The run is STILL WALKING while this note is written — both callers produce it mid-run — so a
|
|
1836
2027
|
re-run of one of its tests is a second run against the same app and database, and the platform
|
|
1837
2028
|
refuses that ({@link suiteRunInTheWay}, the same rule its overlap hold answers with):
|
|
1838
|
-
xr-molecule-flash-m89 (2026-10-16) read _"Start on them now, while the run keeps walking.
|
|
1839
|
-
`null-fields.spec.ts:53` alone reproduces the first one."_ and sent exactly that re-run 23 s
|
|
1840
|
-
later, where the hold answered *"A playwright suite is already running against this app and
|
|
1841
2029
|
|
|
1842
2030
|
_(description truncated — read the full text in `node_modules/@molecule/api-ai-tools/dist/utilities.d.ts`.)_
|
|
1843
2031
|
|
|
@@ -1855,7 +2043,7 @@ function repeatingFailureNote(
|
|
|
1855
2043
|
```
|
|
1856
2044
|
|
|
1857
2045
|
- `found` — What {@link repeatingFailure} found.
|
|
1858
|
-
- `o` — The run's facts: its `taskId`, its `log` path, `stop` — the shell command that stops it, printed only for
|
|
2046
|
+
- `o` — The run's facts: its `taskId`, its `log` path, `stop` — the shell command that stops it, printed only for an {@link earlyReturnCause} — `universal`, what {@link universalCause} found (absent means the run is not failing whole), and `run`, how the run was started ({@link rerunOfRunningSuite}) when the caller knows it.
|
|
1859
2047
|
|
|
1860
2048
|
**Returns:** The note.
|
|
1861
2049
|
|
|
@@ -1982,6 +2170,80 @@ per-request limit, with each request bounded. xr-molecule-flash-m93 (+06:22,
|
|
|
1982
2170
|
const SUITE_OVER_BUDGET_ADVICE: string
|
|
1983
2171
|
```
|
|
1984
2172
|
|
|
2173
|
+
#### `MAX_TRACE_ARTIFACTS`
|
|
2174
|
+
|
|
2175
|
+
How many traces one read reports, newest first.
|
|
2176
|
+
|
|
2177
|
+
```typescript
|
|
2178
|
+
const MAX_TRACE_ARTIFACTS: 12
|
|
2179
|
+
```
|
|
2180
|
+
|
|
2181
|
+
#### `MAX_TRACED_REQUESTS`
|
|
2182
|
+
|
|
2183
|
+
How many requests one test's trace contributes.
|
|
2184
|
+
|
|
2185
|
+
```typescript
|
|
2186
|
+
const MAX_TRACED_REQUESTS: 6
|
|
2187
|
+
```
|
|
2188
|
+
|
|
2189
|
+
#### `MAX_TRACED_CONSOLE`
|
|
2190
|
+
|
|
2191
|
+
How many console errors one test's trace contributes.
|
|
2192
|
+
|
|
2193
|
+
```typescript
|
|
2194
|
+
const MAX_TRACED_CONSOLE: 4
|
|
2195
|
+
```
|
|
2196
|
+
|
|
2197
|
+
#### `MAX_TRACE_NOTE_TESTS`
|
|
2198
|
+
|
|
2199
|
+
How many tests the note in a run's result names.
|
|
2200
|
+
|
|
2201
|
+
```typescript
|
|
2202
|
+
const MAX_TRACE_NOTE_TESTS: 5
|
|
2203
|
+
```
|
|
2204
|
+
|
|
2205
|
+
#### `MAX_TRACE_NOTE_REQUESTS`
|
|
2206
|
+
|
|
2207
|
+
How many requests the note names per test.
|
|
2208
|
+
|
|
2209
|
+
```typescript
|
|
2210
|
+
const MAX_TRACE_NOTE_REQUESTS: 4
|
|
2211
|
+
```
|
|
2212
|
+
|
|
2213
|
+
#### `TRACE_NOTE_URL_CHARS`
|
|
2214
|
+
|
|
2215
|
+
How long a URL the note prints, before the middle is cut.
|
|
2216
|
+
|
|
2217
|
+
```typescript
|
|
2218
|
+
const TRACE_NOTE_URL_CHARS: 96
|
|
2219
|
+
```
|
|
2220
|
+
|
|
2221
|
+
#### `DIAGNOSIS_TRACE_FLAG`
|
|
2222
|
+
|
|
2223
|
+
The `--trace` flag this platform adds, and the only value it adds it with.
|
|
2224
|
+
|
|
2225
|
+
```typescript
|
|
2226
|
+
const DIAGNOSIS_TRACE_FLAG: '--trace=retain-on-failure'
|
|
2227
|
+
```
|
|
2228
|
+
|
|
2229
|
+
#### `PLAYWRIGHT_FAILURES_INLINE_ENV`
|
|
2230
|
+
|
|
2231
|
+
Playwright's switch for printing each failure's own error as that test fails, instead of only in
|
|
2232
|
+
the summary at the end: `list` reads it in its constructor (`ListReporterOptions.printFailuresInline`,
|
|
2233
|
+
`playwright/lib/reporters/list.js` — 1.63, the version the toolchain pins), and when it prints
|
|
2234
|
+
inline the end-of-run repeat is suppressed with it (`epilogue(!printFailuresInline)`), so one
|
|
2235
|
+
reporter still prints each failure exactly once.
|
|
2236
|
+
|
|
2237
|
+
A background suite is put on `list` (see {@link streamingBackgroundCommand}) and this with it, so
|
|
2238
|
+
the log names its causes WHILE it walks. Without it the log's only failure lines are `✘` rows:
|
|
2239
|
+
X1 xr-molecule-flash-m99 (+19:27 → +21:00, 2026-10-16) was told to `grep -n -A 20 '<test name>'`
|
|
2240
|
+
the log, got nothing back through four greps, inferred causes from the spec prose instead, and
|
|
2241
|
+
edited `app/src` while the run was still walking — which voids the run.
|
|
2242
|
+
|
|
2243
|
+
```typescript
|
|
2244
|
+
const PLAYWRIGHT_FAILURES_INLINE_ENV: 'PLAYWRIGHT_LIST_PRINT_FAILURES_INLINE'
|
|
2245
|
+
```
|
|
2246
|
+
|
|
1985
2247
|
#### `MAX_READ_SIZE`
|
|
1986
2248
|
|
|
1987
2249
|
Max file size for read_file (5MB).
|
package/dist/index.d.ts
CHANGED
|
@@ -140,6 +140,7 @@ export * from './schemas.js';
|
|
|
140
140
|
export * from './suite-overlap.js';
|
|
141
141
|
export * from './system-prompt.js';
|
|
142
142
|
export * from './tools.js';
|
|
143
|
+
export * from './trace-artifacts.js';
|
|
143
144
|
export * from './types.js';
|
|
144
145
|
export * from './utilities.js';
|
|
145
146
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkIG;AAEH,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,cAAc,CAAA;AAC5B,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkIG;AAEH,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,cAAc,CAAA;AAC5B,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,sBAAsB,CAAA;AACpC,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AA+F9C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAahG;AAyHD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAiEnE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAEA,CAAA;AAE9B;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB,QAI6C,CAAA;AAmBlF;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUhE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsBxE;AAgDD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE,CAovExF"}
|