@molecule/api-ai-tools 1.10.0 → 1.10.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.
- package/README.md +162 -14
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +2 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +136 -36
- package/dist/trace-artifacts.d.ts +10 -0
- package/dist/trace-artifacts.d.ts.map +1 -1
- package/dist/trace-artifacts.js +134 -21
- package/dist/types.d.ts +27 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/utilities.d.ts +114 -12
- package/dist/utilities.d.ts.map +1 -1
- package/dist/utilities.js +424 -33
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@ 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-19T01:32:03.421Z
|
|
7
7
|
-->
|
|
8
8
|
|
|
9
9
|
# @molecule/api-ai-tools
|
|
@@ -586,6 +586,16 @@ interface TraceMissingText {
|
|
|
586
586
|
method: string
|
|
587
587
|
/** The path of the response that carried it (`/api/tags`). */
|
|
588
588
|
path: string
|
|
589
|
+
/**
|
|
590
|
+
* Whether the trace PROVES the page dropped the text: the named response is a successful GET
|
|
591
|
+
* of the collection that started after the last navigation, and the text is absent from the
|
|
592
|
+
* page's own failure snapshot ({@link traceArtifactsScript}).
|
|
593
|
+
*
|
|
594
|
+
* Absent when the evidence is weaker — a creation POST carried the text (m194's button failure
|
|
595
|
+
* was not a missing article), the snapshot still showed it, or the trace recorded no clock —
|
|
596
|
+
* and the note then says only that a response contained the text.
|
|
597
|
+
*/
|
|
598
|
+
dropped?: true
|
|
589
599
|
}
|
|
590
600
|
```
|
|
591
601
|
|
|
@@ -843,14 +853,31 @@ interface SuiteBudgetPin {
|
|
|
843
853
|
/**
|
|
844
854
|
* The Playwright flags that carry the suite's own settings onto the command
|
|
845
855
|
* (`--timeout=15000`, `--workers=1`), as the consumer's own scan reads them. Empty when the
|
|
846
|
-
* difference is in settings no flag carries
|
|
856
|
+
* difference is in settings no flag carries.
|
|
847
857
|
*/
|
|
848
858
|
flags: string[]
|
|
859
|
+
/** One sentence for the run's result: which of the suite's own settings this run uses. */
|
|
860
|
+
note: string
|
|
849
861
|
/**
|
|
850
|
-
*
|
|
851
|
-
*
|
|
862
|
+
* A config file the consumer wrote OUTSIDE the supplied suite, which re-imports the config the
|
|
863
|
+
* run selected and pins the settings no Playwright flag can carry (`expect.timeout`,
|
|
864
|
+
* `use.actionTimeout`, `use.navigationTimeout`). When present, the run is launched with
|
|
865
|
+
* `--config <this path>` in place of the config it named, so those settings are the suite's own
|
|
866
|
+
* rather than the executor's. Absent when the consumer could not write one.
|
|
852
867
|
*/
|
|
853
|
-
|
|
868
|
+
config?: string
|
|
869
|
+
/**
|
|
870
|
+
* Every setting the derived config ({@link config}) pins at the suite's own value, by the scan's
|
|
871
|
+
* key (`timeout`, `expect.timeout`, `actionTimeout`, `navigationTimeout`), in milliseconds as
|
|
872
|
+
* digits. Empty when no derived config was placed.
|
|
873
|
+
*/
|
|
874
|
+
values?: Record<string, string>
|
|
875
|
+
/**
|
|
876
|
+
* Every setting the run's own config makes different from the suite's, as the consumer's scan
|
|
877
|
+
* read them: the value this run's config writes and the suite's own. The tool reports the ones
|
|
878
|
+
* its placement did NOT put back, so a result never claims a drift it carried.
|
|
879
|
+
*/
|
|
880
|
+
drift?: Record<string, { used: string; suite: string }>
|
|
854
881
|
}
|
|
855
882
|
```
|
|
856
883
|
|
|
@@ -986,7 +1013,8 @@ interface ToolBuildConfig {
|
|
|
986
1013
|
* different settings, asked BEFORE the run executes. The consumer knows where the suite and its
|
|
987
1014
|
* base config live; this shared package does not, so the reading is the consumer's and the
|
|
988
1015
|
* mechanics — putting the flags on the runner's own arguments, before the pipeline and outside
|
|
989
|
-
* any redirect or group closer
|
|
1016
|
+
* any redirect or group closer, and pointing `--config` at the derived config that carries the
|
|
1017
|
+
* settings no flag can — are this tool's.
|
|
990
1018
|
*
|
|
991
1019
|
* Called for a Playwright suite command only, and only the LAST suite step is touched. A run
|
|
992
1020
|
* that already keeps the suite's settings, or a sandbox with no supplied suite, answers `null`.
|
|
@@ -994,7 +1022,7 @@ interface ToolBuildConfig {
|
|
|
994
1022
|
*
|
|
995
1023
|
* @param command - The shell command, as the model sent it.
|
|
996
1024
|
* @param cwd - The resolved working directory it will run in.
|
|
997
|
-
* @returns The flags and the sentence, or null when nothing is put back.
|
|
1025
|
+
* @returns The flags, the derived config and the sentence, or null when nothing is put back.
|
|
998
1026
|
*/
|
|
999
1027
|
suiteBudget?: (command: string, cwd: string) => Promise<SuiteBudgetPin | null | undefined>
|
|
1000
1028
|
|
|
@@ -1227,6 +1255,19 @@ interface CausePageErrors {
|
|
|
1227
1255
|
where: string
|
|
1228
1256
|
/** The alert / error items the page showed at the moment it failed. */
|
|
1229
1257
|
items: readonly string[]
|
|
1258
|
+
/**
|
|
1259
|
+
* The landmark roles the test's page snapshot printed (`navigation`, `banner`), read from the
|
|
1260
|
+
* YAML block of its own `error-context.md`. Present ONLY when the caller has that test's
|
|
1261
|
+
* snapshot; an empty array means the snapshot was read and showed no landmark, while an absent
|
|
1262
|
+
* field means nothing was read and no claim may be made ({@link missingHeaderNote}).
|
|
1263
|
+
*/
|
|
1264
|
+
landmarks?: readonly string[]
|
|
1265
|
+
/**
|
|
1266
|
+
* Whether the test's snapshot showed populated page content (headings, paragraphs, links,
|
|
1267
|
+
* list items, buttons), the other half of the missing-header reading: a page that painted its
|
|
1268
|
+
* main content but no navigation.
|
|
1269
|
+
*/
|
|
1270
|
+
populated?: boolean
|
|
1230
1271
|
}
|
|
1231
1272
|
```
|
|
1232
1273
|
|
|
@@ -1296,6 +1337,14 @@ from any shell runner.
|
|
|
1296
1337
|
type InstalledPackageProbe = (path: string) => Promise<InstalledPackageFacts>
|
|
1297
1338
|
```
|
|
1298
1339
|
|
|
1340
|
+
#### `RequiredLandmark`
|
|
1341
|
+
|
|
1342
|
+
A landmark role a failed selector requires: `<nav>`/`role=navigation`, `<header>`/`role=banner`.
|
|
1343
|
+
|
|
1344
|
+
```typescript
|
|
1345
|
+
type RequiredLandmark = 'navigation' | 'banner'
|
|
1346
|
+
```
|
|
1347
|
+
|
|
1299
1348
|
### Classes
|
|
1300
1349
|
|
|
1301
1350
|
#### `ToolInputError`
|
|
@@ -2741,6 +2790,33 @@ function suiteRunBudgetCommand(
|
|
|
2741
2790
|
|
|
2742
2791
|
**Returns:** The command to run, the flags placed on it, and the ones it could not carry.
|
|
2743
2792
|
|
|
2793
|
+
#### `suiteRunConfigCommand(command, config)`
|
|
2794
|
+
|
|
2795
|
+
A command with the derived config put on the LAST suite runner's own arguments, replacing the
|
|
2796
|
+
config the run names or added when it names none.
|
|
2797
|
+
|
|
2798
|
+
Some of the suite's settings have no Playwright flag (`expect.timeout`, `use.actionTimeout`,
|
|
2799
|
+
`use.navigationTimeout`), so a config the executor wrote cannot be corrected from the command
|
|
2800
|
+
line. The consumer writes a derived config OUTSIDE the supplied suite that re-imports the one
|
|
2801
|
+
the run selected and pins those settings ({@link SuiteBudgetPin.config}); pointing the runner at
|
|
2802
|
+
it is the one way to carry them, and it belongs on the runner itself for the same reasons
|
|
2803
|
+
{@link suiteRunBudgetCommand}'s flags do (last suite step, before a pipe or group closer).
|
|
2804
|
+
|
|
2805
|
+
A command whose runner cannot be placed is returned exactly as written with `placed: false`, so
|
|
2806
|
+
the caller never claims a config it did not point the run at.
|
|
2807
|
+
|
|
2808
|
+
```typescript
|
|
2809
|
+
function suiteRunConfigCommand(
|
|
2810
|
+
command: string,
|
|
2811
|
+
config: string,
|
|
2812
|
+
): { command: string; placed: boolean }
|
|
2813
|
+
```
|
|
2814
|
+
|
|
2815
|
+
- `command` — The shell command about to run.
|
|
2816
|
+
- `config` — The config to run, as the runner takes it (`--config <path>`).
|
|
2817
|
+
|
|
2818
|
+
**Returns:** The command to run and whether the config was placed.
|
|
2819
|
+
|
|
2744
2820
|
#### `withoutSuiteTimeout(command)`
|
|
2745
2821
|
|
|
2746
2822
|
The command with the `timeout <N>` wrapper lifted off the statement that runs the suite, and the
|
|
@@ -3327,6 +3403,31 @@ function repeatingFailure(log: string): RepeatingFailure | null
|
|
|
3327
3403
|
|
|
3328
3404
|
**Returns:** The repeating cause, or null when no signature has {@link REPEATING_FAILURE_MIN} distinct tests behind it.
|
|
3329
3405
|
|
|
3406
|
+
#### `logShowsInlineFailureBodies(log)`
|
|
3407
|
+
|
|
3408
|
+
Whether the log read so far carries a failure's own body under a `✘` row — the evidence that a
|
|
3409
|
+
run prints each failure's error as that test fails ({@link PLAYWRIGHT_FAILURES_INLINE_ENV}).
|
|
3410
|
+
|
|
3411
|
+
`wait_for_task` promises the executor that each failure's report sits right under its `✘` line
|
|
3412
|
+
only when the log proves it. The command's shape cannot answer: the launch sets the switch on
|
|
3413
|
+
every background command (the executor's wrapper script inherits it), so a wrapper this reader
|
|
3414
|
+
cannot place is exactly as covered as `npx playwright test` ({@link streamingBackgroundCommand}).
|
|
3415
|
+
The log is the evidence — a `1) [project] › spec › title ───` block whose test the log also
|
|
3416
|
+
printed with `✘` ({@link failureBlocks}).
|
|
3417
|
+
|
|
3418
|
+
A block alone is not enough: a FINISHED run's end-of-run summary carries the same blocks, and a
|
|
3419
|
+
running wait must not be told "as it fails" about a log whose bodies only appear at the end.
|
|
3420
|
+
During a wait the run has not ended (the exit file is read first), so a block beside a `✘` row
|
|
3421
|
+
is one the reporter printed inline.
|
|
3422
|
+
|
|
3423
|
+
```typescript
|
|
3424
|
+
function logShowsInlineFailureBodies(log: string): boolean
|
|
3425
|
+
```
|
|
3426
|
+
|
|
3427
|
+
- `log` — A log, or the slice of one a wait reads.
|
|
3428
|
+
|
|
3429
|
+
**Returns:** True when a `✘` row's own test has a failure body under it.
|
|
3430
|
+
|
|
3330
3431
|
#### `specFilesSelected(command)`
|
|
3331
3432
|
|
|
3332
3433
|
How many test FILES a Playwright run's own command narrows it to, or null when it selects the
|
|
@@ -3481,6 +3582,50 @@ function failuresByCause(log: string, excluded?: readonly string[]): FailureCaus
|
|
|
3481
3582
|
|
|
3482
3583
|
**Returns:** The causes, the one with the most tests first.
|
|
3483
3584
|
|
|
3585
|
+
#### `requiredLandmark(selector)`
|
|
3586
|
+
|
|
3587
|
+
The landmark a selector requires as an ANCESTOR (or names as its own role), or null when it
|
|
3588
|
+
names no landmark at all (`h1`, `.article-preview`, `a[href="/profile/x"]`).
|
|
3589
|
+
|
|
3590
|
+
```typescript
|
|
3591
|
+
function requiredLandmark(selector: string): RequiredLandmark | null
|
|
3592
|
+
```
|
|
3593
|
+
|
|
3594
|
+
- `selector` — One CSS selector or `getByRole` role from a failure's call log.
|
|
3595
|
+
|
|
3596
|
+
**Returns:** The landmark, or null.
|
|
3597
|
+
|
|
3598
|
+
#### `missingHeaderNote(log, pageErrors)`
|
|
3599
|
+
|
|
3600
|
+
The sentence for a run whose navigational elements are all missing from pages that otherwise
|
|
3601
|
+
painted — the missing shared header the executor must check BEFORE rewriting auth.
|
|
3602
|
+
|
|
3603
|
+
xr-molecule-flash-m193 (+13:54 → +20:00): four failures on `/` — `a[href="/profile/…"]`,
|
|
3604
|
+
`a.navbar-brand`, `nav a[href="/"]`, `nav .user-pic` — while every `error-context.md` snapshot
|
|
3605
|
+
showed the feed, sidebar and footer with no navigation at all. `Home.tsx` imported and
|
|
3606
|
+
re-exported `Navbar` but never rendered it, and `App.tsx` mounted `<Home />` in a bare route.
|
|
3607
|
+
The cause list named four unrelated symptoms, so the run rewrote `Navbar`'s auth logic and then
|
|
3608
|
+
the HTTP bond across two whole walks (~6 minutes) instead of mounting the header.
|
|
3609
|
+
|
|
3610
|
+
The reading is per FAILURE and per SNAPSHOT: each failure's own selector must require the
|
|
3611
|
+
landmark, its own snapshot must have been read AND show populated page content, and that
|
|
3612
|
+
snapshot must not contain the landmark. Two or more such failures on ONE route (the route a
|
|
3613
|
+
selector names, e.g. `nav a[href="/"]` → `/`; failures whose selector names none ride along)
|
|
3614
|
+
are the group. A page that shows the navigation and merely misses a signed-in link is not this
|
|
3615
|
+
shape — its snapshots contain the landmark, so nothing is said.
|
|
3616
|
+
|
|
3617
|
+
This never stops the run and never claims the page is blank: it is one sentence prepended to
|
|
3618
|
+
the causes note ({@link failureCausesNote}).
|
|
3619
|
+
|
|
3620
|
+
```typescript
|
|
3621
|
+
function missingHeaderNote(log: string, pageErrors?: readonly CausePageErrors[]): string | null
|
|
3622
|
+
```
|
|
3623
|
+
|
|
3624
|
+
- `log` — The run's output.
|
|
3625
|
+
- `pageErrors` — The page snapshot facts the caller read per failing test.
|
|
3626
|
+
|
|
3627
|
+
**Returns:** The sentence, or null when the failures do not share a missing landmark.
|
|
3628
|
+
|
|
3484
3629
|
#### `failureCausesNote(log, excluded, run)`
|
|
3485
3630
|
|
|
3486
3631
|
The one-line-per-cause summary of a finished run's failures, or null when the run named fewer
|
|
@@ -3514,6 +3659,7 @@ function failureCausesNote(
|
|
|
3514
3659
|
env?: readonly RunEnvSetting[]
|
|
3515
3660
|
},
|
|
3516
3661
|
pageErrors?: readonly CausePageErrors[],
|
|
3662
|
+
regressedSpecs?: readonly string[],
|
|
3517
3663
|
): string | null
|
|
3518
3664
|
```
|
|
3519
3665
|
|
|
@@ -3862,8 +4008,9 @@ the summary at the end: `list` reads it in its constructor (`ListReporterOptions
|
|
|
3862
4008
|
inline the end-of-run repeat is suppressed with it (`epilogue(!printFailuresInline)`), so one
|
|
3863
4009
|
reporter still prints each failure exactly once.
|
|
3864
4010
|
|
|
3865
|
-
|
|
3866
|
-
|
|
4011
|
+
Every background command is given this (see {@link streamingBackgroundCommand}), so a suite the
|
|
4012
|
+
executor starts through its own wrapper is covered too — the wrapper passes the environment on
|
|
4013
|
+
to the Playwright process it spawns. Without it the log's only failure lines are `✘` rows:
|
|
3867
4014
|
X1 xr-molecule-flash-m99 (+19:27 → +21:00, 2026-10-16) was told to `grep -n -A 20 '<test name>'`
|
|
3868
4015
|
the log, got nothing back through four greps, inferred causes from the spec prose instead, and
|
|
3869
4016
|
edited `app/src` while the run was still walking — which voids the run.
|
|
@@ -4174,11 +4321,12 @@ a test whose result is thrown away, and a blank page costs its per-test budget e
|
|
|
4174
4321
|
(m177: 18 tests, ~4.2 minutes, on a page whose thrown error was visible in the first
|
|
4175
4322
|
`pageerror`). Three is the smallest count that is not one page's own bug: the cause additionally
|
|
4176
4323
|
needs three DISTINCT spec files (`UNIVERSAL_CAUSE_FILES`, or the files a narrowed run selected),
|
|
4177
|
-
|
|
4178
|
-
|
|
4179
|
-
|
|
4180
|
-
|
|
4181
|
-
about one test's worth
|
|
4324
|
+
no failure showing a locator RESOLVING ({@link ELEMENT_FOUND} — a blank page cannot resolve
|
|
4325
|
+
one), and no test passing after the first failure. A page that renders misses elements, but
|
|
4326
|
+
three unrelated specs in three files failing at three different locators that never resolved,
|
|
4327
|
+
with nothing passing in between, is the page, not three bugs. At the suite's own 5 s action
|
|
4328
|
+
timeout that verdict lands ~20 s into the walk, so the early stop costs about one test's worth
|
|
4329
|
+
of time instead of fifteen.
|
|
4182
4330
|
|
|
4183
4331
|
```typescript
|
|
4184
4332
|
const EMPTY_PAGE_CAUSE_TESTS: 3
|
package/dist/schemas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,UAAU,CAAA;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,UAAU,CAAA;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA2U1C,CAAA"}
|
package/dist/schemas.js
CHANGED
|
@@ -132,7 +132,8 @@ export const TOOL_SCHEMAS = {
|
|
|
132
132
|
},
|
|
133
133
|
include: {
|
|
134
134
|
type: 'string',
|
|
135
|
-
description: "File glob pattern to filter files (e.g. '*.ts', '*.tsx').
|
|
135
|
+
description: "File glob pattern to filter files (e.g. '*.ts', '*.tsx'). Several extensions go in one " +
|
|
136
|
+
"brace group of comma-separated alternatives: '*.{ts,tsx,yml,json,md}' (up to 16). Optional.",
|
|
136
137
|
},
|
|
137
138
|
contextLines: {
|
|
138
139
|
type: 'number',
|
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;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AA4K9C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAahG;AA6ZD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AA4K9C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAahG;AA6ZD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAsHnE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAEA,CAAA;AAE9B;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB,QAI6C,CAAA;AA2ElF;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUhE;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,qBAAqB;IACpC,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,8FAA8F;IAC9F,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;AAoBpF;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,CAAC,GACxE,qBAAqB,CAkBvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,qBAAqB,GAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiCxB;AA2GD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE,CAyvFxF"}
|
package/dist/tools.js
CHANGED
|
@@ -32,16 +32,16 @@ const logBytesByTask = new Map();
|
|
|
32
32
|
/** The file a background command writes its own output to, when it redirects it. */
|
|
33
33
|
const outputFileByTask = new Map();
|
|
34
34
|
/**
|
|
35
|
-
* Task ids whose
|
|
36
|
-
*
|
|
37
|
-
* head of the command.
|
|
35
|
+
* Task ids whose log has SHOWN a failure's own body under a `✘` row — the inline failure switch's
|
|
36
|
+
* effect, read from the log itself ({@link logShowsInlineFailureBodies}).
|
|
38
37
|
*
|
|
39
|
-
* The wait note may promise that each failure's own error sits under its ✘ line only when the
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
38
|
+
* The wait note may promise that each failure's own error sits under its ✘ line only when the
|
|
39
|
+
* log actually carries one: a run printing its failures only in the end-of-run summary would send
|
|
40
|
+
* the model grepping a file they were not in (the m99 class, recurring at xr-molecule-flash-m173
|
|
41
|
+
* +17:07, +39:14). The command's shape cannot answer that question — every background launch is
|
|
42
|
+
* given the switch, and the executor's own wrapper passes it on — so the evidence is the log, read
|
|
43
|
+
* during the wait (xr-molecule-flash-m191: a wrapper-launched run's cause reached the model 7
|
|
44
|
+
* minutes late because nothing read the log for it).
|
|
45
45
|
*/
|
|
46
46
|
const inlineFailuresByTask = new Set();
|
|
47
47
|
/**
|
|
@@ -548,7 +548,7 @@ async function backgroundTaskState(backend, command, seconds, ceilingMs) {
|
|
|
548
548
|
}
|
|
549
549
|
import { suiteCommandTarget } from './suite-overlap.js';
|
|
550
550
|
import { diagnosisTraceCommand } from './trace-artifacts.js';
|
|
551
|
-
import { checkBlockedCommand, declaredBudgetSeconds, DEFAULT_SEARCH_EXCLUDED_DIRS, directoryReadHint, earlyReturnCause, emptyCallError, failureCausesNote, findPathArgs, findPatternArgs, fusedLine, htmlOutline, isCommandTimeout, isEnvFilePath, isOutsideRoot, isPlaywrightRunCommand, isSuiteRunCommand, isValidGlob, linesWithinSerialized, literalDirPrefix, MAX_BATCH_READ_FILES, MAX_FIND_RESULTS, MAX_HTML_INLINE_CHARS, MAX_OUTPUT_SIZE, MAX_READ_CALL_CHARS, MAX_READ_RETURN_CHARS, MAX_READ_SIZE, MAX_SEARCH_CONTEXT_LINES, MAX_SEARCH_RESULTS, MAX_WRITE_SIZE, outputIsWithheldUntilExit, outputRedirectTarget, parseCheckCommand, parseCheckProblem, pathArgError,
|
|
551
|
+
import { checkBlockedCommand, declaredBudgetSeconds, DEFAULT_SEARCH_EXCLUDED_DIRS, directoryReadHint, earlyReturnCause, emptyCallError, failureCausesNote, findPathArgs, findPatternArgs, fusedLine, htmlOutline, isCommandTimeout, isEnvFilePath, isOutsideRoot, isPlaywrightRunCommand, isSuiteRunCommand, isValidGlob, linesWithinSerialized, literalDirPrefix, logShowsInlineFailureBodies, MAX_BATCH_READ_FILES, MAX_FIND_RESULTS, MAX_HTML_INLINE_CHARS, MAX_OUTPUT_SIZE, MAX_READ_CALL_CHARS, MAX_READ_RETURN_CHARS, MAX_READ_SIZE, MAX_SEARCH_CONTEXT_LINES, MAX_SEARCH_RESULTS, MAX_WRITE_SIZE, outputIsWithheldUntilExit, outputRedirectTarget, parseCheckCommand, parseCheckProblem, pathArgError, printsOnlySource, READ_RESULT_ENVELOPE_CHARS, redactSecrets, redactSecretsInCode, repeatedSuiteRunError, repeatingFailure, repeatingFailureNote, resolvePath, RUNNING_FAILURE_LINES, runningCauseCommand, runningOutputSliceCommand, searchTimeoutError, serializedChars, shellQuote, sliceLines, SMALL_FILE_WHOLE_CHARS, streamingBackgroundCommand, stripControlChars, suiteRunBudgetCommand, suiteRunConfigCommand, suiteRunPipelinePlacement, suiteRunPriorityLaunch, TOOL_RESULT_CHARS, truncateMiddle, universalCause, whitespaceTolerantReplace, withoutSuiteTimeout, } from './utilities.js';
|
|
552
552
|
/**
|
|
553
553
|
* How long exec_command waits for a command it backgrounded only because the
|
|
554
554
|
* command asked for more than the tool's ceiling, before handing back a task id.
|
|
@@ -556,14 +556,32 @@ import { checkBlockedCommand, declaredBudgetSeconds, DEFAULT_SEARCH_EXCLUDED_DIR
|
|
|
556
556
|
const OVER_CEILING_GRACE_MS = 45_000;
|
|
557
557
|
/**
|
|
558
558
|
* The machine-readable mark on a result whose run carried the supplied suite's own settings
|
|
559
|
-
* ({@link ToolBuildConfig.suiteBudget}) — the flags actually written,
|
|
560
|
-
*
|
|
559
|
+
* ({@link ToolBuildConfig.suiteBudget}) — the flags and derived config actually written, every
|
|
560
|
+
* pinned value, and the RESIDUAL drift, so a consumer's notes can treat those settings as equal to
|
|
561
|
+
* the suite's instead of re-reading the config, and can see which ones this run still measures
|
|
562
|
+
* differently.
|
|
561
563
|
*
|
|
562
|
-
* @param
|
|
563
|
-
* @returns The result field, or nothing when
|
|
564
|
+
* @param outcome - What the placement put on the command.
|
|
565
|
+
* @returns The result field, or nothing when nothing was placed and nothing differs.
|
|
564
566
|
*/
|
|
565
|
-
function suiteBudgetField(
|
|
566
|
-
|
|
567
|
+
function suiteBudgetField(outcome) {
|
|
568
|
+
const field = {};
|
|
569
|
+
if (outcome.pinned.length > 0)
|
|
570
|
+
field.pinned = [...outcome.pinned];
|
|
571
|
+
if (outcome.config !== null)
|
|
572
|
+
field.config = outcome.config;
|
|
573
|
+
// A derived config that was NOT placed carries nothing: its values are then residual drift.
|
|
574
|
+
const values = outcome.config === null ? {} : { ...outcome.values };
|
|
575
|
+
if (Object.keys(values).length > 0)
|
|
576
|
+
field.values = values;
|
|
577
|
+
const carried = new Set([
|
|
578
|
+
...outcome.pinned.map((flag) => flag.slice(2).split('=')[0] ?? ''),
|
|
579
|
+
...Object.keys(values),
|
|
580
|
+
]);
|
|
581
|
+
const drift = Object.fromEntries(Object.entries(outcome.drift).filter(([key]) => !carried.has(key)));
|
|
582
|
+
if (Object.keys(drift).length > 0)
|
|
583
|
+
field.drift = drift;
|
|
584
|
+
return Object.keys(field).length === 0 ? {} : { suiteBudget: field };
|
|
567
585
|
}
|
|
568
586
|
/**
|
|
569
587
|
* The closing advice on an over-budget message for a command that is not a test
|
|
@@ -596,6 +614,62 @@ export const SUITE_OVER_BUDGET_ADVICE = 'A test suite is not a bigger unit to sp
|
|
|
596
614
|
* sentence, which names an option the executor cannot set.
|
|
597
615
|
*/
|
|
598
616
|
const SEARCH_TIMEOUT_MS = 10_000;
|
|
617
|
+
/**
|
|
618
|
+
* The most alternatives one brace group in a `search_files` include may expand
|
|
619
|
+
* to. The point is to accept the ordinary multi-extension form a model writes
|
|
620
|
+
* from habit (`*.{ts,tsx,yml,json,md}`), not to grow a glob engine: a group is
|
|
621
|
+
* bounded so a pattern cannot turn one grep call into hundreds.
|
|
622
|
+
*/
|
|
623
|
+
const MAX_INCLUDE_BRACE_ALTERNATIVES = 16;
|
|
624
|
+
/**
|
|
625
|
+
* Expand ONE level of brace alternatives in a `search_files` include pattern,
|
|
626
|
+
* validating every expanded pattern.
|
|
627
|
+
*
|
|
628
|
+
* `grep --include` has no brace expansion of its own (the shell that would do it
|
|
629
|
+
* is never involved — the pattern is `shellQuote`d first), so the group has to
|
|
630
|
+
* be expanded here and each alternative passed as its own `--include`. The
|
|
631
|
+
* m189 run wrote the everyday `*.{ts,tsx,yml,json,md}` and the search was
|
|
632
|
+
* refused outright, costing a round trip and pushing the agent to a narrower
|
|
633
|
+
* search.
|
|
634
|
+
*
|
|
635
|
+
* Bounded on purpose: one level of braces, alternatives split on `,`, at most
|
|
636
|
+
* {@link MAX_INCLUDE_BRACE_ALTERNATIVES}, none empty, and each EXPANDED
|
|
637
|
+
* pattern must still pass {@link isValidGlob} — so a shell metacharacter in any
|
|
638
|
+
* alternative (`*.{ts,$(rm)}`) is refused exactly as a bare one is.
|
|
639
|
+
*
|
|
640
|
+
* @param pattern - The user-supplied `include` value.
|
|
641
|
+
* @returns Every pattern to pass to grep, or null when the value is not
|
|
642
|
+
* accepted (the caller reports the include-glob error).
|
|
643
|
+
*/
|
|
644
|
+
function expandIncludeGlob(pattern) {
|
|
645
|
+
const open = pattern.indexOf('{');
|
|
646
|
+
if (open === -1)
|
|
647
|
+
return isValidGlob(pattern) ? [pattern] : null;
|
|
648
|
+
const close = pattern.indexOf('}', open + 1);
|
|
649
|
+
if (close === -1)
|
|
650
|
+
return null;
|
|
651
|
+
// One level only: a second `{` before the close or a second `}` after it is a
|
|
652
|
+
// nested/malformed group, not an alternative.
|
|
653
|
+
const nextOpen = pattern.indexOf('{', open + 1);
|
|
654
|
+
if (nextOpen !== -1 && nextOpen < close)
|
|
655
|
+
return null;
|
|
656
|
+
if (pattern.indexOf('}', close + 1) !== -1)
|
|
657
|
+
return null;
|
|
658
|
+
const alternatives = pattern.slice(open + 1, close).split(',');
|
|
659
|
+
if (alternatives.length > MAX_INCLUDE_BRACE_ALTERNATIVES)
|
|
660
|
+
return null;
|
|
661
|
+
if (alternatives.some((alt) => alt.length === 0))
|
|
662
|
+
return null;
|
|
663
|
+
const expanded = alternatives.map((alt) => `${pattern.slice(0, open)}${alt}${pattern.slice(close + 1)}`);
|
|
664
|
+
return expanded.every((p) => isValidGlob(p)) ? expanded : null;
|
|
665
|
+
}
|
|
666
|
+
/**
|
|
667
|
+
* The include-glob error. It keeps the original character-rule sentence and
|
|
668
|
+
* names the accepted multi-extension form, so a refusal teaches the syntax
|
|
669
|
+
* rather than only reporting that the value was wrong.
|
|
670
|
+
*/
|
|
671
|
+
const INCLUDE_GLOB_ERROR = 'Invalid include glob pattern. Allowed: alphanumeric and @ * ? . _ - / [ ] ( ), ' +
|
|
672
|
+
'or one brace group of up to 16 comma-separated alternatives such as *.{ts,tsx}.';
|
|
599
673
|
/**
|
|
600
674
|
* The share of its budget a command must use before the "you asked for more than
|
|
601
675
|
* this tool's ceiling" note is worth attaching. Below it the clamp changed nothing
|
|
@@ -1654,7 +1728,14 @@ export function buildTools(backend, config) {
|
|
|
1654
1728
|
await backend.writeFile(path, content);
|
|
1655
1729
|
if (onAfterWrite)
|
|
1656
1730
|
await onAfterWrite(path).catch(() => { });
|
|
1657
|
-
|
|
1731
|
+
// The text on disk is the text just written unless an after-write hook (a formatter)
|
|
1732
|
+
// may have rewritten it. Without one, the re-read is a whole sandbox round trip per
|
|
1733
|
+
// write that can only return what is already in hand — measured in the write path's
|
|
1734
|
+
// own timings (x0 fast-file-writes: four sandbox calls per write, one of them this
|
|
1735
|
+
// re-read, and the excerpt it feeds is identical either way).
|
|
1736
|
+
const finalContent = onAfterWrite
|
|
1737
|
+
? await backend.readFile(path).catch(() => content)
|
|
1738
|
+
: content;
|
|
1658
1739
|
const diff = computeDiff(oldContent, finalContent);
|
|
1659
1740
|
if (onFileChange)
|
|
1660
1741
|
onFileChange({ type: oldContent === null ? 'created' : 'modified', path });
|
|
@@ -2179,15 +2260,18 @@ export function buildTools(backend, config) {
|
|
|
2179
2260
|
const contextLines = Number.isFinite(rawContext)
|
|
2180
2261
|
? Math.min(Math.max(Math.trunc(rawContext), 0), MAX_SEARCH_CONTEXT_LINES)
|
|
2181
2262
|
: 0;
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2263
|
+
// `--include` has no brace expansion inside the quoted grep argument, so
|
|
2264
|
+
// a brace group is expanded here and grep gets one --include per pattern.
|
|
2265
|
+
const includes = include ? expandIncludeGlob(include) : [];
|
|
2266
|
+
if (includes === null)
|
|
2267
|
+
return { error: INCLUDE_GLOB_ERROR };
|
|
2186
2268
|
const symlinkErr = await checkSymlink(path);
|
|
2187
2269
|
if (symlinkErr)
|
|
2188
2270
|
return { error: symlinkErr };
|
|
2189
2271
|
try {
|
|
2190
|
-
const globArg =
|
|
2272
|
+
const globArg = includes.length
|
|
2273
|
+
? includes.map((p) => `--include=${shellQuote(p)}`).join(' ')
|
|
2274
|
+
: '';
|
|
2191
2275
|
// With context, grep emits `file-line-content` for context lines and
|
|
2192
2276
|
// `file:line:content` for matches, plus `--` group separators. Both
|
|
2193
2277
|
// shapes are parsed below; without context the output is unchanged.
|
|
@@ -2464,7 +2548,7 @@ export function buildTools(backend, config) {
|
|
|
2464
2548
|
// its base live); this tool only writes the flags where they belong. Before the background
|
|
2465
2549
|
// branch, so a task launch and a foreground run carry them alike.
|
|
2466
2550
|
let budgetNote = null;
|
|
2467
|
-
|
|
2551
|
+
const budget = { pinned: [], config: null, values: {}, drift: {} };
|
|
2468
2552
|
if (config?.suiteBudget !== undefined && isPlaywrightRunCommand(command)) {
|
|
2469
2553
|
try {
|
|
2470
2554
|
const pin = await config.suiteBudget(command, cwd);
|
|
@@ -2473,8 +2557,19 @@ export function buildTools(backend, config) {
|
|
|
2473
2557
|
if (pin.flags.length > 0) {
|
|
2474
2558
|
const pinned = suiteRunBudgetCommand(command, pin.flags);
|
|
2475
2559
|
command = pinned.command;
|
|
2476
|
-
|
|
2560
|
+
budget.pinned = pinned.placed;
|
|
2561
|
+
}
|
|
2562
|
+
// The settings with no Playwright flag are carried by a config the consumer wrote
|
|
2563
|
+
// outside the supplied suite: this run loads that one instead of the config it named.
|
|
2564
|
+
if (pin.config !== undefined && pin.config !== '') {
|
|
2565
|
+
const configured = suiteRunConfigCommand(command, pin.config);
|
|
2566
|
+
if (configured.placed) {
|
|
2567
|
+
command = configured.command;
|
|
2568
|
+
budget.config = pin.config;
|
|
2569
|
+
}
|
|
2477
2570
|
}
|
|
2571
|
+
budget.values = pin.values ?? {};
|
|
2572
|
+
budget.drift = pin.drift ?? {};
|
|
2478
2573
|
}
|
|
2479
2574
|
}
|
|
2480
2575
|
catch (_error) {
|
|
@@ -2571,10 +2666,9 @@ export function buildTools(backend, config) {
|
|
|
2571
2666
|
const ownFile = ownTarget === null ? null : posix.resolve(cwd, ownTarget);
|
|
2572
2667
|
if (ownFile)
|
|
2573
2668
|
outputFileByTask.set(id, ownFile);
|
|
2574
|
-
//
|
|
2575
|
-
// it
|
|
2576
|
-
|
|
2577
|
-
inlineFailuresByTask.add(id);
|
|
2669
|
+
// Nothing is recorded about the inline-failure switch here: every background launch is
|
|
2670
|
+
// given it, so the command says nothing about what the log will carry. A wait reads the
|
|
2671
|
+
// log itself (see inlineFailuresByTask).
|
|
2578
2672
|
runByTask.set(id, { command: streaming.command, cwd });
|
|
2579
2673
|
await backend.writeFile(script, `${streaming.command}\n`);
|
|
2580
2674
|
// The clock the grace return below reports a stopped run against: the command is
|
|
@@ -2666,7 +2760,7 @@ export function buildTools(backend, config) {
|
|
|
2666
2760
|
...(pipeNote === null ? {} : { exitCodeNote: pipeNote }),
|
|
2667
2761
|
...(output.length > MAX_OUTPUT_SIZE ? { truncated: true, fullOutput: log } : {}),
|
|
2668
2762
|
...(notes.length ? { note: notes.join(' ') } : {}),
|
|
2669
|
-
...suiteBudgetField(
|
|
2763
|
+
...suiteBudgetField(budget),
|
|
2670
2764
|
};
|
|
2671
2765
|
}
|
|
2672
2766
|
await new Promise((r) => setTimeout(r, 1_500));
|
|
@@ -2677,7 +2771,7 @@ export function buildTools(backend, config) {
|
|
|
2677
2771
|
log,
|
|
2678
2772
|
exitFile,
|
|
2679
2773
|
...(peekedTask?.slice.trim() ? { outputSoFar: sanitizeOutput(peekedTask.slice) } : {}),
|
|
2680
|
-
...suiteBudgetField(
|
|
2774
|
+
...suiteBudgetField(budget),
|
|
2681
2775
|
note: (sleepNote ? `${sleepNote} ` : '') +
|
|
2682
2776
|
(budgetNote ? `${budgetNote} ` : '') +
|
|
2683
2777
|
(overCeiling
|
|
@@ -2807,7 +2901,7 @@ export function buildTools(backend, config) {
|
|
|
2807
2901
|
exitCode: result.exitCode,
|
|
2808
2902
|
...(exitCodeNote === null ? {} : { exitCodeNote }),
|
|
2809
2903
|
...(peekedTask?.slice.trim() ? { outputSoFar: sanitizeOutput(peekedTask.slice) } : {}),
|
|
2810
|
-
...suiteBudgetField(
|
|
2904
|
+
...suiteBudgetField(budget),
|
|
2811
2905
|
...(sleepNote || ceilingNote || traced.change || budgetNote
|
|
2812
2906
|
? {
|
|
2813
2907
|
note: [sleepNote, ceilingNote, traced.change, budgetNote].filter(Boolean).join(' '),
|
|
@@ -2898,11 +2992,6 @@ export function buildTools(backend, config) {
|
|
|
2898
2992
|
// already resolved and stays as written.
|
|
2899
2993
|
if (target)
|
|
2900
2994
|
outputFileByTask.set(taskId, posix.resolve(root, target));
|
|
2901
|
-
// The rewritten command is on disk with the `export` head it was given: a task this
|
|
2902
|
-
// process did not launch still says whether its failures print as they fail
|
|
2903
|
-
// (see inlineFailuresByTask).
|
|
2904
|
-
if (script.startsWith(`export ${PLAYWRIGHT_FAILURES_INLINE_ENV}=1; `))
|
|
2905
|
-
inlineFailuresByTask.add(taskId);
|
|
2906
2995
|
}
|
|
2907
2996
|
catch (_error) {
|
|
2908
2997
|
// No script under that id: this process did not start the task, so
|
|
@@ -3052,6 +3141,11 @@ export function buildTools(backend, config) {
|
|
|
3052
3141
|
// No look at the log this tick; the next one asks again.
|
|
3053
3142
|
continue;
|
|
3054
3143
|
}
|
|
3144
|
+
// The log is the evidence for what the wait may promise about it: a failure's own body
|
|
3145
|
+
// printed under a `✘` row means the run writes each failure's report as that test fails
|
|
3146
|
+
// (see inlineFailuresByTask).
|
|
3147
|
+
if (!inlineFailuresByTask.has(taskId) && logShowsInlineFailureBodies(causeLog))
|
|
3148
|
+
inlineFailuresByTask.add(taskId);
|
|
3055
3149
|
const found = repeatingFailure(causeLog);
|
|
3056
3150
|
// The page-renders-nothing cause needs no repeated signature: every spec waits for its
|
|
3057
3151
|
// own first element, so the failures differ while the cause does not (m141).
|
|
@@ -3143,6 +3237,12 @@ export function buildTools(backend, config) {
|
|
|
3143
3237
|
// No slice: the notes still say how to peek, and the task id still
|
|
3144
3238
|
// carries how long the command has been running.
|
|
3145
3239
|
}
|
|
3240
|
+
// The slice is the log's own text, so it answers what the note may promise: a body under
|
|
3241
|
+
// a `✘` row means this run prints each failure's report as that test fails (see
|
|
3242
|
+
// inlineFailuresByTask). Read here as well as in the cause look, because a wait shorter
|
|
3243
|
+
// than the look's interval never takes one.
|
|
3244
|
+
if (!inlineFailuresByTask.has(taskId) && logShowsInlineFailureBodies(soFar))
|
|
3245
|
+
inlineFailuresByTask.add(taskId);
|
|
3146
3246
|
// ONE sentence of facts, each said once, then what to do next: the lead
|
|
3147
3247
|
// this branch used to write ("Still running after 342s of waiting, and its
|
|
3148
3248
|
// output is still growing (71839 bytes) — slow, not stuck") restated the
|
|
@@ -189,6 +189,16 @@ export interface TraceMissingText {
|
|
|
189
189
|
method: string;
|
|
190
190
|
/** The path of the response that carried it (`/api/tags`). */
|
|
191
191
|
path: string;
|
|
192
|
+
/**
|
|
193
|
+
* Whether the trace PROVES the page dropped the text: the named response is a successful GET
|
|
194
|
+
* of the collection that started after the last navigation, and the text is absent from the
|
|
195
|
+
* page's own failure snapshot ({@link traceArtifactsScript}).
|
|
196
|
+
*
|
|
197
|
+
* Absent when the evidence is weaker — a creation POST carried the text (m194's button failure
|
|
198
|
+
* was not a missing article), the snapshot still showed it, or the trace recorded no clock —
|
|
199
|
+
* and the note then says only that a response contained the text.
|
|
200
|
+
*/
|
|
201
|
+
dropped?: true;
|
|
192
202
|
}
|
|
193
203
|
/**
|
|
194
204
|
* A write the trace recorded answering a boolean field, and a LATER GET of the same resource
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-artifacts.d.ts","sourceRoot":"","sources":["../src/trace-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,iGAAiG;IACjG,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oFAAoF;IACpF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,yFAAyF;IACzF,GAAG,EAAE,MAAM,CAAA;IACX,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAA;IACb,kEAAkE;IAClE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB;;;;OAIG;IACH,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC1B,yFAAyF;IACzF,GAAG,EAAE,MAAM,CAAA;IACX,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAA;IACb,kEAAkE;IAClE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,oBAAoB;IACnC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,QAAQ,EAAE,YAAY,EAAE,CAAA;CACzB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"trace-artifacts.d.ts","sourceRoot":"","sources":["../src/trace-artifacts.ts"],"names":[],"mappings":"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"}
|