@molecule/api-ai-tools 1.10.1 → 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 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-18T22:07:04.913Z
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 — the pin is then the sentence alone.
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
- * One sentence for the run's result: this run uses the suite's own budget, and which settings
851
- * a config keeps because Playwright has no flag for them.
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
- note: string
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 — are this tool's.
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
- A background suite is put on `list` (see {@link streamingBackgroundCommand}) and this with it, so
3866
- the log names its causes WHILE it walks. Without it the log's only failure lines are `✘` rows:
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
- each spec waiting for its OWN first element, and no test passing after the first failure. A page
4178
- that renders misses elements, but three unrelated specs in three files failing at three
4179
- different first locators with nothing passing in between is the page, not three bugs. At the
4180
- suite's own 5 s action timeout that verdict lands ~20 s into the walk, so the early stop costs
4181
- about one test's worth of time instead of fifteen.
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
@@ -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;AAqFnE;;;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,CAyuFxF"}
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 launch put the suite on {@link PLAYWRIGHT_FAILURES_INLINE_ENV} — the inline
36
- * failure switch, announced by the launch's own change list and written as an `export` at the
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 run
40
- * was actually given the switch: a run whose shape withheld the rewrite prints its failures only
41
- * in the end-of-run summary, and the note that promised inline reports sent the model grepping a
42
- * file they were not in (the m99 class, recurring at xr-molecule-flash-m173 +17:07, +39:14).
43
- * Process memory, like {@link outputFileByTask}: a task this process did not launch recovers it
44
- * from the script on disk, which carries the rewritten command.
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, PLAYWRIGHT_FAILURES_INLINE_ENV, 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, suiteRunPipelinePlacement, suiteRunPriorityLaunch, TOOL_RESULT_CHARS, truncateMiddle, universalCause, whitespaceTolerantReplace, withoutSuiteTimeout, } from './utilities.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, 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, so a consumer's notes can
560
- * treat those settings as equal to the suite's instead of re-reading the config.
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 pinned - The flags put on the command.
563
- * @returns The result field, or nothing when no flag was placed.
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(pinned) {
566
- return pinned.length === 0 ? {} : { suiteBudget: { pinned: [...pinned] } };
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
@@ -2530,7 +2548,7 @@ export function buildTools(backend, config) {
2530
2548
  // its base live); this tool only writes the flags where they belong. Before the background
2531
2549
  // branch, so a task launch and a foreground run carry them alike.
2532
2550
  let budgetNote = null;
2533
- let budgetPinned = [];
2551
+ const budget = { pinned: [], config: null, values: {}, drift: {} };
2534
2552
  if (config?.suiteBudget !== undefined && isPlaywrightRunCommand(command)) {
2535
2553
  try {
2536
2554
  const pin = await config.suiteBudget(command, cwd);
@@ -2539,8 +2557,19 @@ export function buildTools(backend, config) {
2539
2557
  if (pin.flags.length > 0) {
2540
2558
  const pinned = suiteRunBudgetCommand(command, pin.flags);
2541
2559
  command = pinned.command;
2542
- budgetPinned = pinned.placed;
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
+ }
2543
2570
  }
2571
+ budget.values = pin.values ?? {};
2572
+ budget.drift = pin.drift ?? {};
2544
2573
  }
2545
2574
  }
2546
2575
  catch (_error) {
@@ -2637,10 +2666,9 @@ export function buildTools(backend, config) {
2637
2666
  const ownFile = ownTarget === null ? null : posix.resolve(cwd, ownTarget);
2638
2667
  if (ownFile)
2639
2668
  outputFileByTask.set(id, ownFile);
2640
- // Whether the run's failures print as they fail, so a wait can promise that only when
2641
- // it is true (see inlineFailuresByTask).
2642
- if (streaming.command.startsWith(`export ${PLAYWRIGHT_FAILURES_INLINE_ENV}=1; `))
2643
- 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).
2644
2672
  runByTask.set(id, { command: streaming.command, cwd });
2645
2673
  await backend.writeFile(script, `${streaming.command}\n`);
2646
2674
  // The clock the grace return below reports a stopped run against: the command is
@@ -2732,7 +2760,7 @@ export function buildTools(backend, config) {
2732
2760
  ...(pipeNote === null ? {} : { exitCodeNote: pipeNote }),
2733
2761
  ...(output.length > MAX_OUTPUT_SIZE ? { truncated: true, fullOutput: log } : {}),
2734
2762
  ...(notes.length ? { note: notes.join(' ') } : {}),
2735
- ...suiteBudgetField(budgetPinned),
2763
+ ...suiteBudgetField(budget),
2736
2764
  };
2737
2765
  }
2738
2766
  await new Promise((r) => setTimeout(r, 1_500));
@@ -2743,7 +2771,7 @@ export function buildTools(backend, config) {
2743
2771
  log,
2744
2772
  exitFile,
2745
2773
  ...(peekedTask?.slice.trim() ? { outputSoFar: sanitizeOutput(peekedTask.slice) } : {}),
2746
- ...suiteBudgetField(budgetPinned),
2774
+ ...suiteBudgetField(budget),
2747
2775
  note: (sleepNote ? `${sleepNote} ` : '') +
2748
2776
  (budgetNote ? `${budgetNote} ` : '') +
2749
2777
  (overCeiling
@@ -2873,7 +2901,7 @@ export function buildTools(backend, config) {
2873
2901
  exitCode: result.exitCode,
2874
2902
  ...(exitCodeNote === null ? {} : { exitCodeNote }),
2875
2903
  ...(peekedTask?.slice.trim() ? { outputSoFar: sanitizeOutput(peekedTask.slice) } : {}),
2876
- ...suiteBudgetField(budgetPinned),
2904
+ ...suiteBudgetField(budget),
2877
2905
  ...(sleepNote || ceilingNote || traced.change || budgetNote
2878
2906
  ? {
2879
2907
  note: [sleepNote, ceilingNote, traced.change, budgetNote].filter(Boolean).join(' '),
@@ -2964,11 +2992,6 @@ export function buildTools(backend, config) {
2964
2992
  // already resolved and stays as written.
2965
2993
  if (target)
2966
2994
  outputFileByTask.set(taskId, posix.resolve(root, target));
2967
- // The rewritten command is on disk with the `export` head it was given: a task this
2968
- // process did not launch still says whether its failures print as they fail
2969
- // (see inlineFailuresByTask).
2970
- if (script.startsWith(`export ${PLAYWRIGHT_FAILURES_INLINE_ENV}=1; `))
2971
- inlineFailuresByTask.add(taskId);
2972
2995
  }
2973
2996
  catch (_error) {
2974
2997
  // No script under that id: this process did not start the task, so
@@ -3118,6 +3141,11 @@ export function buildTools(backend, config) {
3118
3141
  // No look at the log this tick; the next one asks again.
3119
3142
  continue;
3120
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);
3121
3149
  const found = repeatingFailure(causeLog);
3122
3150
  // The page-renders-nothing cause needs no repeated signature: every spec waits for its
3123
3151
  // own first element, so the failures differ while the cause does not (m141).
@@ -3209,6 +3237,12 @@ export function buildTools(backend, config) {
3209
3237
  // No slice: the notes still say how to peek, and the task id still
3210
3238
  // carries how long the command has been running.
3211
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);
3212
3246
  // ONE sentence of facts, each said once, then what to do next: the lead
3213
3247
  // this branch used to write ("Still running after 342s of waiting, and its
3214
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":"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"}
1
+ {"version":3,"file":"trace-artifacts.d.ts","sourceRoot":"","sources":["../src/trace-artifacts.ts"],"names":[],"mappings":"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"}