@molecule/api-ai-tools 1.14.4 → 1.14.6
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 +236 -190
- package/dist/browser-probe.d.ts +4 -4
- package/dist/browser-probe.d.ts.map +1 -1
- package/dist/browser-probe.js +5 -5
- package/dist/command-position.d.ts +15 -16
- package/dist/command-position.d.ts.map +1 -1
- package/dist/command-position.js +21 -23
- package/dist/cut-run.d.ts +9 -9
- package/dist/cut-run.js +6 -6
- package/dist/failure-kind.d.ts +6 -6
- package/dist/failure-kind.js +6 -6
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/inline-script.d.ts +5 -5
- package/dist/inline-script.js +6 -6
- package/dist/line-diff.d.ts +2 -3
- package/dist/line-diff.d.ts.map +1 -1
- package/dist/line-diff.js +2 -3
- package/dist/no-test-run.d.ts +5 -5
- package/dist/no-test-run.d.ts.map +1 -1
- package/dist/no-test-run.js +9 -8
- package/dist/output-filter.d.ts +2 -2
- package/dist/output-filter.js +2 -2
- package/dist/pipeline-exit-note.d.ts +1 -1
- package/dist/pipeline-exit-note.js +1 -1
- package/dist/playwright-report.d.ts +1 -1
- package/dist/playwright-report.js +1 -1
- package/dist/server-command.d.ts +2 -2
- package/dist/server-command.js +2 -2
- package/dist/sleep-peek.d.ts +1 -1
- package/dist/sleep-peek.js +1 -1
- package/dist/suite-overlap.d.ts +24 -25
- package/dist/suite-overlap.d.ts.map +1 -1
- package/dist/suite-overlap.js +41 -43
- package/dist/tools.d.ts +26 -28
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +98 -69
- package/dist/trace-artifacts.d.ts +64 -65
- package/dist/trace-artifacts.d.ts.map +1 -1
- package/dist/trace-artifacts.js +73 -75
- package/dist/types.d.ts +5 -5
- package/dist/utilities.d.ts +107 -91
- package/dist/utilities.d.ts.map +1 -1
- package/dist/utilities.js +191 -143
- package/package.json +2 -2
package/dist/browser-probe.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* A standalone Playwright probe that launches a browser and never closes it — the
|
|
3
3
|
* resource-lifecycle hang `exec_command` did not yet classify.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* A real probe ran
|
|
6
6
|
* `cd /workspace/my-app/app && node /workspace/.mol-scratch/fav-probe.mjs 2>&1 | tail -5`. The
|
|
7
7
|
* 30-line script binds `const browser = await chromium.launch()`, walks a real page, reaches its
|
|
8
8
|
* last `console.log`, and ends without `browser.close()`, `disconnect()`, a disposal scope or
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
* `import`), or a persistent-process intent (`launchServer`, `connect`, a server `.listen`, a
|
|
29
29
|
* timer or signal handler).
|
|
30
30
|
*
|
|
31
|
-
* Anything ambiguous is left alone. A wrong refusal costs a valid probe —
|
|
32
|
-
*
|
|
31
|
+
* Anything ambiguous is left alone. A wrong refusal costs a valid probe — a raw substring match
|
|
32
|
+
* would also refuse five harmless scripts (a local
|
|
33
33
|
* engine stub, the launch text in a string, in a comment, in a template literal, and inside a
|
|
34
34
|
* function that is never called) — and a missed leak costs the same budget the tool already had.
|
|
35
35
|
* This is a lifecycle diagnostic, never an egress or security gate.
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
*/
|
|
39
39
|
/** A browser launch bound to a variable, proven to have no cleanup path. */
|
|
40
40
|
export interface BrowserProbeLeak {
|
|
41
|
-
/** The variable the launched browser is bound to (`browser` in the
|
|
41
|
+
/** The variable the launched browser is bound to (`browser` in the probe above). */
|
|
42
42
|
readonly variable: string;
|
|
43
43
|
}
|
|
44
44
|
/** A foreground command that directly executes such a script. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-probe.d.ts","sourceRoot":"","sources":["../src/browser-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,
|
|
1
|
+
{"version":3,"file":"browser-probe.d.ts","sourceRoot":"","sources":["../src/browser-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,iEAAiE;AACjE,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AA6aD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAyB7E;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,sBAAsB,EAC7B,aAAa,EAAE,MAAM,EACrB,KAAK,UAAQ,GACZ,MAAM,CAaR;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CASlF"}
|
package/dist/browser-probe.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* A standalone Playwright probe that launches a browser and never closes it — the
|
|
3
3
|
* resource-lifecycle hang `exec_command` did not yet classify.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* A real probe ran
|
|
6
6
|
* `cd /workspace/my-app/app && node /workspace/.mol-scratch/fav-probe.mjs 2>&1 | tail -5`. The
|
|
7
7
|
* 30-line script binds `const browser = await chromium.launch()`, walks a real page, reaches its
|
|
8
8
|
* last `console.log`, and ends without `browser.close()`, `disconnect()`, a disposal scope or
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
* `import`), or a persistent-process intent (`launchServer`, `connect`, a server `.listen`, a
|
|
29
29
|
* timer or signal handler).
|
|
30
30
|
*
|
|
31
|
-
* Anything ambiguous is left alone. A wrong refusal costs a valid probe —
|
|
32
|
-
*
|
|
31
|
+
* Anything ambiguous is left alone. A wrong refusal costs a valid probe — a raw substring match
|
|
32
|
+
* would also refuse five harmless scripts (a local
|
|
33
33
|
* engine stub, the launch text in a string, in a comment, in a template literal, and inside a
|
|
34
34
|
* function that is never called) — and a missed leak costs the same budget the tool already had.
|
|
35
35
|
* This is a lifecycle diagnostic, never an egress or security gate.
|
|
@@ -85,7 +85,7 @@ const REGEX_AFTER = new Set([
|
|
|
85
85
|
* A source with every comment and every string, template and regex literal blanked to spaces,
|
|
86
86
|
* preserving offsets and newlines so a match's position still indexes the original source.
|
|
87
87
|
*
|
|
88
|
-
* A launch mentioned in prose is not a launch:
|
|
88
|
+
* A launch mentioned in prose is not a launch: a review proved scripts that only PRINT
|
|
89
89
|
* `const browser = await chromium.launch()` — in a string, a comment and a template literal — and
|
|
90
90
|
* a raw substring match refused all of them. Template `${…}` substitutions stay code (a `close()`
|
|
91
91
|
* written there is a real cleanup path), nested braces are tracked so the substitution's end is
|
|
@@ -308,7 +308,7 @@ function topLevelThrow(code) {
|
|
|
308
308
|
* This is the conservative guard for the one shape the lexer cannot read: a regex literal whose
|
|
309
309
|
* opening `/` follows a `)` (`if (x) /…/.test(s)`) reads as division, so the launch text inside it
|
|
310
310
|
* survives blanking. A mid-line top-level launch is a deliberate false negative; every positive
|
|
311
|
-
* shape (the
|
|
311
|
+
* shape (the probe above, `import * as pw` + `pw.chromium.launch`, a destructured require) declares
|
|
312
312
|
* at line start.
|
|
313
313
|
*
|
|
314
314
|
* @param code - The {@link codeOnly} text.
|
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
* arguments to something else.
|
|
4
4
|
*
|
|
5
5
|
* Every classifier that read a command as "this runs the suite" matched the runner's NAME
|
|
6
|
-
* anywhere in the text, so a runner named in an argument was read as an invocation:
|
|
7
|
-
* xr-molecule-flash-m81 (+20:03) sent
|
|
6
|
+
* anywhere in the text, so a runner named in an argument was read as an invocation:
|
|
8
7
|
* `cd /workspace/fixtures/realworld/specs/api && ls && head -30 run-api-tests-hurl.sh` — two
|
|
9
8
|
* reads of a file that was already there — and the suite-overlap hold answered "a Playwright
|
|
10
|
-
* suite is already running against this app and database … wait for it",
|
|
11
|
-
*
|
|
9
|
+
* suite is already running against this app and database … wait for it", idling a command that
|
|
10
|
+
* writes nothing and runs nothing. `cat`, `grep`, `sed -n`,
|
|
12
11
|
* `wc`, `ls` and `git show` of a runner script are the same shape.
|
|
13
12
|
*
|
|
14
13
|
* So this parser answers it in one place, for every caller: split the command at its pipeline
|
|
@@ -28,7 +27,7 @@
|
|
|
28
27
|
* `end`, `programOffset` and `assignmentOffset` are the offsets a caller splices at. They are
|
|
29
28
|
* token positions from this walk, never a search for re-joined text — the words are joined back
|
|
30
29
|
* with single spaces for matching, so `command.indexOf(segment.text)` fails on irregular spacing,
|
|
31
|
-
* on grouping braces, and on anything a heredoc body shifts
|
|
30
|
+
* on grouping braces, and on anything a heredoc body shifts.
|
|
32
31
|
*
|
|
33
32
|
* @module
|
|
34
33
|
*/
|
|
@@ -110,8 +109,8 @@ export declare function commandSubstitutions(command: string): string[];
|
|
|
110
109
|
* not a text match. The command-position parser already knows what runs and what is only quoted
|
|
111
110
|
* data ({@link commandSegments}), so a pattern never reads a `|` inside a quoted grep alternation
|
|
112
111
|
* as a pipeline: `grep -E "USER CALLS|ENV|BUTTON" app.log` prints log lines, and the `ENV` in
|
|
113
|
-
* its pattern
|
|
114
|
-
*
|
|
112
|
+
* its pattern starts nothing — a text match would block exactly that call as an environment
|
|
113
|
+
* dump. What the shell DOES run stays visible through the same walk: a bare
|
|
115
114
|
* launcher (`ls | env`), a shell string (`bash -c 'env'`), a substitution
|
|
116
115
|
* (`echo "$(printenv)"`) and a nested one (`sh -c 'x; env'`) are all commands here.
|
|
117
116
|
*
|
|
@@ -131,7 +130,7 @@ export declare function executedCommands(command: string): ExecutedCommand[];
|
|
|
131
130
|
* executor's own command in more than one place, and a value written for the runner belongs in
|
|
132
131
|
* the runner's own statement: `APP_BASE=https://… cd app && npx playwright test` sets the variable
|
|
133
132
|
* for `cd` alone, so the Playwright config falls back to the local app while the command line
|
|
134
|
-
* still names the deployed host
|
|
133
|
+
* still names the deployed host.
|
|
135
134
|
*/
|
|
136
135
|
export interface LocatedCommandSegment {
|
|
137
136
|
/**
|
|
@@ -196,7 +195,7 @@ export interface LocatedCommandSegment {
|
|
|
196
195
|
* The file this statement sends its own output to (`> out.log`, `>> log`, `&> run.log`,
|
|
197
196
|
* `| tee file`), or null. Only a redirect written at the command's own level counts: one
|
|
198
197
|
* inside a `( … )` / `{ … }` group writes through that group, and one that feeds a heredoc's
|
|
199
|
-
* file (`cat > cfg.ts <<'EOF'`) is writing a config
|
|
198
|
+
* file (`cat > cfg.ts <<'EOF'`) is writing a config.
|
|
200
199
|
*/
|
|
201
200
|
redirectTarget: string | null;
|
|
202
201
|
}
|
|
@@ -216,8 +215,8 @@ export declare function locatedCommandSegments(command: string): LocatedCommandS
|
|
|
216
215
|
* redirection (`… 2>&1`), and a statement can sit inside a group whose closer belongs to the
|
|
217
216
|
* shell, not to the words (`( … )`, `{ …; }`). Appending after that closer is a different shell
|
|
218
217
|
* word that the group has already closed — `… --config=x 2>&1) --reporter=list` is
|
|
219
|
-
* `sh: Syntax error: word unexpected`, which
|
|
220
|
-
* model off the platform's runner shape
|
|
218
|
+
* `sh: Syntax error: word unexpected`, which kills a backgrounded walk at once and pushes the
|
|
219
|
+
* model off the platform's runner shape. Write the option where
|
|
221
220
|
* the program's own arguments end and the rest of the statement still parses:
|
|
222
221
|
* `… --config=x --reporter=list 2>&1)`.
|
|
223
222
|
*
|
|
@@ -239,8 +238,8 @@ export declare function statementArgumentEnd(command: string, start: number | nu
|
|
|
239
238
|
* parses its last stage as `tail` with the argument `-25)`. {@link LocatedCommandSegment.end}
|
|
240
239
|
* therefore says one past the `)`, and a caller cutting that stage out of the command takes the
|
|
241
240
|
* group's closer with it — the rewritten command is then `( … 2>&1`, which no shell parses
|
|
242
|
-
* (
|
|
243
|
-
*
|
|
241
|
+
* (a heredoc config plus a parenthesized Playwright pipeline came back as `end of file
|
|
242
|
+
* unexpected` from the background runner).
|
|
244
243
|
*
|
|
245
244
|
* The parse's own group depths answer which closers belong to an enclosing group: the depth a
|
|
246
245
|
* statement was written at is its first character's depth (an opener is recorded at the depth
|
|
@@ -285,9 +284,9 @@ export declare function commandTimeoutSeconds(command: string): number | null;
|
|
|
285
284
|
* The platform moves a run to the background precisely because its own bound cannot fit this
|
|
286
285
|
* tool's ceiling, and a background task has no ceiling — its wait is bounded by `wait_for_task`
|
|
287
286
|
* and the turn's deadline. The `timeout N` an executor wrote to fit the ceiling therefore keeps
|
|
288
|
-
* killing the run at N in the background, where nothing needed it:
|
|
289
|
-
*
|
|
290
|
-
*
|
|
287
|
+
* killing the run at N in the background, where nothing needed it: an executor wrote
|
|
288
|
+
* `timeout 280` for a 31-test walk, the tool backgrounded it, and the prefix stopped the walk
|
|
289
|
+
* with no tally — then the cut sentence told the executor to "run it in the background",
|
|
291
290
|
* which is where it already was.
|
|
292
291
|
*
|
|
293
292
|
* The wrapper is found by the same parse every other command reader uses ({@link commandStart}):
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-position.d.ts","sourceRoot":"","sources":["../src/command-position.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"command-position.d.ts","sourceRoot":"","sources":["../src/command-position.ts"],"names":[],"mappings":"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"}
|
package/dist/command-position.js
CHANGED
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
* arguments to something else.
|
|
4
4
|
*
|
|
5
5
|
* Every classifier that read a command as "this runs the suite" matched the runner's NAME
|
|
6
|
-
* anywhere in the text, so a runner named in an argument was read as an invocation:
|
|
7
|
-
* xr-molecule-flash-m81 (+20:03) sent
|
|
6
|
+
* anywhere in the text, so a runner named in an argument was read as an invocation:
|
|
8
7
|
* `cd /workspace/fixtures/realworld/specs/api && ls && head -30 run-api-tests-hurl.sh` — two
|
|
9
8
|
* reads of a file that was already there — and the suite-overlap hold answered "a Playwright
|
|
10
|
-
* suite is already running against this app and database … wait for it",
|
|
11
|
-
*
|
|
9
|
+
* suite is already running against this app and database … wait for it", idling a command that
|
|
10
|
+
* writes nothing and runs nothing. `cat`, `grep`, `sed -n`,
|
|
12
11
|
* `wc`, `ls` and `git show` of a runner script are the same shape.
|
|
13
12
|
*
|
|
14
13
|
* So this parser answers it in one place, for every caller: split the command at its pipeline
|
|
@@ -28,7 +27,7 @@
|
|
|
28
27
|
* `end`, `programOffset` and `assignmentOffset` are the offsets a caller splices at. They are
|
|
29
28
|
* token positions from this walk, never a search for re-joined text — the words are joined back
|
|
30
29
|
* with single spaces for matching, so `command.indexOf(segment.text)` fails on irregular spacing,
|
|
31
|
-
* on grouping braces, and on anything a heredoc body shifts
|
|
30
|
+
* on grouping braces, and on anything a heredoc body shifts.
|
|
32
31
|
*
|
|
33
32
|
* @module
|
|
34
33
|
*/
|
|
@@ -310,11 +309,11 @@ const SHELLS = new Set(['ash', 'bash', 'dash', 'ksh', 'sh', 'zsh']);
|
|
|
310
309
|
* `node script.mjs` RUNS that script, so the parser's answer for it stays `node`.
|
|
311
310
|
*
|
|
312
311
|
* The Playwright runner is spelled this way whenever a project reaches it by file instead of by
|
|
313
|
-
* the `.bin` shim:
|
|
312
|
+
* the `.bin` shim: a run that sent
|
|
314
313
|
* `node /workspace/node_modules/.bin/playwright test` after `npx playwright test` in every
|
|
315
|
-
* earlier call
|
|
316
|
-
*
|
|
317
|
-
* walked green.
|
|
314
|
+
* earlier call got no `--trace`, no suite-budget pin and no proof credit, because no reader
|
|
315
|
+
* recognised it — and the platform then spent the rest of the turn re-walking a suite it had
|
|
316
|
+
* already walked green.
|
|
318
317
|
*/
|
|
319
318
|
const NODE = new Set(['node']);
|
|
320
319
|
/**
|
|
@@ -653,8 +652,7 @@ function nestedCommand(words, from) {
|
|
|
653
652
|
* program: the leading words, and the ones behind an `env` wrapper (`env -i PATH=$PATH
|
|
654
653
|
* BASE_URL=https://… npx playwright test`). A shell passes those to the program in exactly the
|
|
655
654
|
* same way — `env` is the POSIX form of the leading-word form — so a reader that only saw the
|
|
656
|
-
* leading ones called a deployed walk local (
|
|
657
|
-
* walks were refused, 5.2 min).
|
|
655
|
+
* leading ones called a deployed walk local (two green deployed walks were refused, 5.2 min).
|
|
658
656
|
*
|
|
659
657
|
* @param words - The segment's words, quotes kept.
|
|
660
658
|
* @returns The index of the word in command position (one past the end when the segment runs
|
|
@@ -798,8 +796,8 @@ function commentStartsAt(command, at) {
|
|
|
798
796
|
* <<'EOF' … import { defineConfig, devices } from '@playwright/test' … EOF` writes a file and runs
|
|
799
797
|
* `cat`. Read as shell, though, every line of the body is a statement — and the words joined back
|
|
800
798
|
* for matching are not the words written, so a caller that placed a statement by searching for
|
|
801
|
-
* them found nothing, in a command whose real statements sat all along.
|
|
802
|
-
*
|
|
799
|
+
* them found nothing, in a command whose real statements sat all along. A heredoc body's
|
|
800
|
+
* `import { defineConfig, devices } …` alone made
|
|
803
801
|
* `suiteRunPipedAfterRunner` answer "piped" for a run with no pipe left, and the run's exit code
|
|
804
802
|
* was dropped for the rest of the session.
|
|
805
803
|
*
|
|
@@ -925,7 +923,7 @@ function blankHeredocBodies(command) {
|
|
|
925
923
|
* A flat walk read that first inner `"` as the CLOSE of the outer one, so the `)` that ends the
|
|
926
924
|
* outer substitution landed inside a quote that was never opened, the depth was left standing at
|
|
927
925
|
* 1, and every newline in the rest of the script was swallowed: the script's own `hurl --test`
|
|
928
|
-
* never reached command position, and
|
|
926
|
+
* never reached command position, and seven passing Hurl runs were invisible to the
|
|
929
927
|
* platform could not see (the runner is read from the tree's own script TEXT —
|
|
930
928
|
* `molecule-dev/api/src/ai/supplied-tree-guard.ts` — so a script that does not classify records
|
|
931
929
|
* no runner, and every run of it reads as nothing).
|
|
@@ -1391,8 +1389,8 @@ export function commandSubstitutions(command) {
|
|
|
1391
1389
|
* not a text match. The command-position parser already knows what runs and what is only quoted
|
|
1392
1390
|
* data ({@link commandSegments}), so a pattern never reads a `|` inside a quoted grep alternation
|
|
1393
1391
|
* as a pipeline: `grep -E "USER CALLS|ENV|BUTTON" app.log` prints log lines, and the `ENV` in
|
|
1394
|
-
* its pattern
|
|
1395
|
-
*
|
|
1392
|
+
* its pattern starts nothing — a text match would block exactly that call as an environment
|
|
1393
|
+
* dump. What the shell DOES run stays visible through the same walk: a bare
|
|
1396
1394
|
* launcher (`ls | env`), a shell string (`bash -c 'env'`), a substitution
|
|
1397
1395
|
* (`echo "$(printenv)"`) and a nested one (`sh -c 'x; env'`) are all commands here.
|
|
1398
1396
|
*
|
|
@@ -1491,8 +1489,8 @@ function substitutionDepth(text) {
|
|
|
1491
1489
|
* redirection (`… 2>&1`), and a statement can sit inside a group whose closer belongs to the
|
|
1492
1490
|
* shell, not to the words (`( … )`, `{ …; }`). Appending after that closer is a different shell
|
|
1493
1491
|
* word that the group has already closed — `… --config=x 2>&1) --reporter=list` is
|
|
1494
|
-
* `sh: Syntax error: word unexpected`, which
|
|
1495
|
-
* model off the platform's runner shape
|
|
1492
|
+
* `sh: Syntax error: word unexpected`, which kills a backgrounded walk at once and pushes the
|
|
1493
|
+
* model off the platform's runner shape. Write the option where
|
|
1496
1494
|
* the program's own arguments end and the rest of the statement still parses:
|
|
1497
1495
|
* `… --config=x --reporter=list 2>&1)`.
|
|
1498
1496
|
*
|
|
@@ -1577,8 +1575,8 @@ export function statementArgumentEnd(command, start, end) {
|
|
|
1577
1575
|
* parses its last stage as `tail` with the argument `-25)`. {@link LocatedCommandSegment.end}
|
|
1578
1576
|
* therefore says one past the `)`, and a caller cutting that stage out of the command takes the
|
|
1579
1577
|
* group's closer with it — the rewritten command is then `( … 2>&1`, which no shell parses
|
|
1580
|
-
* (
|
|
1581
|
-
*
|
|
1578
|
+
* (a heredoc config plus a parenthesized Playwright pipeline came back as `end of file
|
|
1579
|
+
* unexpected` from the background runner).
|
|
1582
1580
|
*
|
|
1583
1581
|
* The parse's own group depths answer which closers belong to an enclosing group: the depth a
|
|
1584
1582
|
* statement was written at is its first character's depth (an opener is recorded at the depth
|
|
@@ -1781,9 +1779,9 @@ export function commandTimeoutSeconds(command) {
|
|
|
1781
1779
|
* The platform moves a run to the background precisely because its own bound cannot fit this
|
|
1782
1780
|
* tool's ceiling, and a background task has no ceiling — its wait is bounded by `wait_for_task`
|
|
1783
1781
|
* and the turn's deadline. The `timeout N` an executor wrote to fit the ceiling therefore keeps
|
|
1784
|
-
* killing the run at N in the background, where nothing needed it:
|
|
1785
|
-
*
|
|
1786
|
-
*
|
|
1782
|
+
* killing the run at N in the background, where nothing needed it: an executor wrote
|
|
1783
|
+
* `timeout 280` for a 31-test walk, the tool backgrounded it, and the prefix stopped the walk
|
|
1784
|
+
* with no tally — then the cut sentence told the executor to "run it in the background",
|
|
1787
1785
|
* which is where it already was.
|
|
1788
1786
|
*
|
|
1789
1787
|
* The wrapper is found by the same parse every other command reader uses ({@link commandStart}):
|
package/dist/cut-run.d.ts
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
* A command that a budget stopped before it finished, and the state its result carries so no
|
|
3
3
|
* reader can mistake it for a run that ended.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* `timeout 280 hurl --test --continue-on-error --jobs 1 … hurl/*.hurl 2>&1 | tail -60`
|
|
5
|
+
* A command such as
|
|
6
|
+
* `timeout 280 hurl --test --continue-on-error --jobs 1 … hurl/*.hurl 2>&1 | tail -60` came
|
|
7
7
|
* back `exitCode: 0`, four finished files' lines and nothing else. Two lies in one result: the
|
|
8
8
|
* `timeout 280` killed the run at 280 s, and the `| tail` made the pipeline's status the status —
|
|
9
9
|
* so the executor read a suite that stopped at its fifth file as a suite that ran and nearly
|
|
10
|
-
* passed, fixed one message, and immediately sent the same 280-second command again (
|
|
11
|
-
*
|
|
10
|
+
* passed, fixed one message, and immediately sent the same 280-second command again (~14 minutes
|
|
11
|
+
* of a 60-minute cap across three of them).
|
|
12
12
|
*
|
|
13
13
|
* So the tool never reports a stopped run as `exitCode: 0`. Such a result carries
|
|
14
14
|
* `status: 'cut_at_budget'` and an exit code that is `null` whenever the number the pipeline
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*
|
|
20
20
|
* 1. **Its own bound** — a `timeout <N>` the command carries ({@link commandTimeoutSeconds}). The
|
|
21
21
|
* run used it, so the run was killed at it; with no closing tally in the output, the run did
|
|
22
|
-
* not finish. This is
|
|
22
|
+
* not finish. This is the first shape.
|
|
23
23
|
* 2. **This tool's budget** — the backend runs the command under `timeout` (see
|
|
24
24
|
* `backends/sandbox.ts`), which reports 124 whatever the pipeline did, and returns everything
|
|
25
25
|
* printed until then. The budget is the tool's own, so its number belongs to the tool.
|
|
@@ -104,7 +104,7 @@ export declare function suiteTally(text: string): boolean;
|
|
|
104
104
|
* The code in a background result is the code of the command's LAST pipeline stage. When a stage
|
|
105
105
|
* after the suite runner still consumes its output (`| tee run.log`, or a filter the platform could
|
|
106
106
|
* not prove output-only), that stage produced the code, not the run — and `… | grep … | tail -20`
|
|
107
|
-
*
|
|
107
|
+
* can exit 0 for a run with a failure in it. No code is reported
|
|
108
108
|
* then: the log's own tally decides.
|
|
109
109
|
*
|
|
110
110
|
* The same reading covers a code of 0 beside a tally that names a failure: whatever ended the
|
|
@@ -139,7 +139,7 @@ export interface CutRun {
|
|
|
139
139
|
* ({@link commandCutRun}'s `budgetSeconds` is 0). A background run is bounded by what its own
|
|
140
140
|
* command carries — so a `command-timeout` cut there is that prefix killing the walk, and the
|
|
141
141
|
* executor must be told to drop the prefix, never to start the run in the background it is
|
|
142
|
-
* already in
|
|
142
|
+
* already in.
|
|
143
143
|
*/
|
|
144
144
|
background: boolean;
|
|
145
145
|
/**
|
|
@@ -164,12 +164,12 @@ export interface CutRun {
|
|
|
164
164
|
/**
|
|
165
165
|
* The interpreter of an inline program that only touches local files (`python3`, `node`, …), or
|
|
166
166
|
* null. Such a program is stopped by its short budget because it is stuck, never because the work
|
|
167
|
-
* is slow, so the sentence must not send it to the background
|
|
167
|
+
* is slow, so the sentence must not send it to the background.
|
|
168
168
|
*/
|
|
169
169
|
inlineScript?: string | null;
|
|
170
170
|
/**
|
|
171
171
|
* The variable a leaked standalone browser launch is bound to, when the command ran such a probe
|
|
172
|
-
* and the cut reader could only classify it after the run
|
|
172
|
+
* and the cut reader could only classify it after the run. A leaked
|
|
173
173
|
* handle is not a slow workload: the background is the one place it must not be sent, so the
|
|
174
174
|
* sentence names the close instead.
|
|
175
175
|
*/
|
package/dist/cut-run.js
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
* A command that a budget stopped before it finished, and the state its result carries so no
|
|
3
3
|
* reader can mistake it for a run that ended.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* `timeout 280 hurl --test --continue-on-error --jobs 1 … hurl/*.hurl 2>&1 | tail -60`
|
|
5
|
+
* A command such as
|
|
6
|
+
* `timeout 280 hurl --test --continue-on-error --jobs 1 … hurl/*.hurl 2>&1 | tail -60` came
|
|
7
7
|
* back `exitCode: 0`, four finished files' lines and nothing else. Two lies in one result: the
|
|
8
8
|
* `timeout 280` killed the run at 280 s, and the `| tail` made the pipeline's status the status —
|
|
9
9
|
* so the executor read a suite that stopped at its fifth file as a suite that ran and nearly
|
|
10
|
-
* passed, fixed one message, and immediately sent the same 280-second command again (
|
|
11
|
-
*
|
|
10
|
+
* passed, fixed one message, and immediately sent the same 280-second command again (~14 minutes
|
|
11
|
+
* of a 60-minute cap across three of them).
|
|
12
12
|
*
|
|
13
13
|
* So the tool never reports a stopped run as `exitCode: 0`. Such a result carries
|
|
14
14
|
* `status: 'cut_at_budget'` and an exit code that is `null` whenever the number the pipeline
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*
|
|
20
20
|
* 1. **Its own bound** — a `timeout <N>` the command carries ({@link commandTimeoutSeconds}). The
|
|
21
21
|
* run used it, so the run was killed at it; with no closing tally in the output, the run did
|
|
22
|
-
* not finish. This is
|
|
22
|
+
* not finish. This is the first shape.
|
|
23
23
|
* 2. **This tool's budget** — the backend runs the command under `timeout` (see
|
|
24
24
|
* `backends/sandbox.ts`), which reports 124 whatever the pipeline did, and returns everything
|
|
25
25
|
* printed until then. The budget is the tool's own, so its number belongs to the tool.
|
|
@@ -173,7 +173,7 @@ const FAILED_TALLY = /\b[1-9]\d*\s+failed\b/;
|
|
|
173
173
|
* The code in a background result is the code of the command's LAST pipeline stage. When a stage
|
|
174
174
|
* after the suite runner still consumes its output (`| tee run.log`, or a filter the platform could
|
|
175
175
|
* not prove output-only), that stage produced the code, not the run — and `… | grep … | tail -20`
|
|
176
|
-
*
|
|
176
|
+
* can exit 0 for a run with a failure in it. No code is reported
|
|
177
177
|
* then: the log's own tally decides.
|
|
178
178
|
*
|
|
179
179
|
* The same reading covers a code of 0 beside a tally that names a failure: whatever ended the
|
package/dist/failure-kind.d.ts
CHANGED
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
* - **status** — a response arrived and the HTTP status disagreed with what the suite asserts.
|
|
11
11
|
* - **assertion** — a response arrived and an assertion over its body failed.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
13
|
+
* The case this exists for: one Hurl file on the freshly deployed URL failed with
|
|
14
|
+
* `(28) Operation timed out … 0 bytes received` while the other twelve passed and 138 requests
|
|
15
|
+
* executed, and every note on the result read it as an assertion. The executor rewrote a CORS
|
|
16
|
+
* middleware, bisected a second server and latency-compared the two, then re-ran the same file —
|
|
17
|
+
* which passed in 3 s. A single re-run was the whole fix, and the one fact that would have said
|
|
18
|
+
* so is the failure's LAYER.
|
|
19
19
|
*
|
|
20
20
|
* ONE classifier, used by the causes note ({@link ./utilities.ts} `failureCausesNote`) and by the
|
|
21
21
|
* platform's own proof result (`molecule-dev` `suite-proof.ts`), so the two can never disagree
|
package/dist/failure-kind.js
CHANGED
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
* - **status** — a response arrived and the HTTP status disagreed with what the suite asserts.
|
|
11
11
|
* - **assertion** — a response arrived and an assertion over its body failed.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
13
|
+
* The case this exists for: one Hurl file on the freshly deployed URL failed with
|
|
14
|
+
* `(28) Operation timed out … 0 bytes received` while the other twelve passed and 138 requests
|
|
15
|
+
* executed, and every note on the result read it as an assertion. The executor rewrote a CORS
|
|
16
|
+
* middleware, bisected a second server and latency-compared the two, then re-ran the same file —
|
|
17
|
+
* which passed in 3 s. A single re-run was the whole fix, and the one fact that would have said
|
|
18
|
+
* so is the failure's LAYER.
|
|
19
19
|
*
|
|
20
20
|
* ONE classifier, used by the causes note ({@link ./utilities.ts} `failureCausesNote`) and by the
|
|
21
21
|
* platform's own proof result (`molecule-dev` `suite-proof.ts`), so the two can never disagree
|
package/dist/index.d.ts
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* ceiling the request side puts on a single tool result: whole files are
|
|
32
32
|
* returned up to it and every path past that is named in `note` and listed as
|
|
33
33
|
* `not returned`, so a file is never handed back in part — the shape that lost
|
|
34
|
-
* the middle of a ten-file batch to the request-side cut
|
|
34
|
+
* the middle of a ten-file batch to the request-side cut. Each
|
|
35
35
|
* entry carries its own content or its own error, so one bad path never fails
|
|
36
36
|
* the batch.
|
|
37
37
|
* - **`edit_file` shows the result, so the model need not re-read.** A
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
* added or removed and nothing else, the edit can only move text across lines —
|
|
58
58
|
* joining the next line onto the replaced text, or pushing the rest of the line
|
|
59
59
|
* down — which is what a weak model does by accident when it repeats a line it
|
|
60
|
-
* means to keep
|
|
60
|
+
* means to keep. The
|
|
61
61
|
* replacement is skipped, the rest of the batch is applied, and the result
|
|
62
62
|
* carries `skippedNote`: one line naming the replacement, what applying it would
|
|
63
63
|
* have done, and how to say it on purpose (include the next line in `old_string`).
|
package/dist/index.js
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* ceiling the request side puts on a single tool result: whole files are
|
|
32
32
|
* returned up to it and every path past that is named in `note` and listed as
|
|
33
33
|
* `not returned`, so a file is never handed back in part — the shape that lost
|
|
34
|
-
* the middle of a ten-file batch to the request-side cut
|
|
34
|
+
* the middle of a ten-file batch to the request-side cut. Each
|
|
35
35
|
* entry carries its own content or its own error, so one bad path never fails
|
|
36
36
|
* the batch.
|
|
37
37
|
* - **`edit_file` shows the result, so the model need not re-read.** A
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
* added or removed and nothing else, the edit can only move text across lines —
|
|
58
58
|
* joining the next line onto the replaced text, or pushing the rest of the line
|
|
59
59
|
* down — which is what a weak model does by accident when it repeats a line it
|
|
60
|
-
* means to keep
|
|
60
|
+
* means to keep. The
|
|
61
61
|
* replacement is skipped, the rest of the batch is applied, and the result
|
|
62
62
|
* carries `skippedNote`: one line naming the replacement, what applying it would
|
|
63
63
|
* have done, and how to say it on purpose (include the next line in `old_string`).
|
package/dist/inline-script.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* An inline interpreter program (`python3 -c`, `python3 - <<EOF`, `node -e`) that only touches local
|
|
3
3
|
* files — work that takes milliseconds or never ends, never minutes of honest progress.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* One such step spent 291 s of a 60-minute cap on
|
|
6
6
|
* `python3 - <<'EOF' … re.findall(r'([^{}]*:before[^{}]*)\{content:"[^"]*"\}', s) … EOF` rewriting a
|
|
7
7
|
* minified CSS file whose first rule is one ~25 KB selector list: the pattern's two unbounded
|
|
8
8
|
* `[^{}]*` around a literal backtrack cubically, printed nothing, and was stopped by the tool's
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
* a short budget ({@link INLINE_SCRIPT_BUDGET_MS}), and a cut says what happened: a runaway
|
|
16
16
|
* transform, not slow work ({@link inlineScriptRunawaySentence}).
|
|
17
17
|
*
|
|
18
|
-
* The short budget needs the WHOLE command to be that shape.
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
18
|
+
* The short budget needs the WHOLE command to be that shape. A command that chained such a
|
|
19
|
+
* heredoc with `node …/smoke.mjs | tail -25` — a Playwright walk whose import lives inside the
|
|
20
|
+
* file — had the walk stopped after 20 s while the result blamed the python transform. Every
|
|
21
|
+
* statement must be proven local ({@link LOCAL_UTILITY}) before the budget applies.
|
|
22
22
|
*
|
|
23
23
|
* @module
|
|
24
24
|
*/
|
package/dist/inline-script.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* An inline interpreter program (`python3 -c`, `python3 - <<EOF`, `node -e`) that only touches local
|
|
3
3
|
* files — work that takes milliseconds or never ends, never minutes of honest progress.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* One such step spent 291 s of a 60-minute cap on
|
|
6
6
|
* `python3 - <<'EOF' … re.findall(r'([^{}]*:before[^{}]*)\{content:"[^"]*"\}', s) … EOF` rewriting a
|
|
7
7
|
* minified CSS file whose first rule is one ~25 KB selector list: the pattern's two unbounded
|
|
8
8
|
* `[^{}]*` around a literal backtrack cubically, printed nothing, and was stopped by the tool's
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
* a short budget ({@link INLINE_SCRIPT_BUDGET_MS}), and a cut says what happened: a runaway
|
|
16
16
|
* transform, not slow work ({@link inlineScriptRunawaySentence}).
|
|
17
17
|
*
|
|
18
|
-
* The short budget needs the WHOLE command to be that shape.
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
18
|
+
* The short budget needs the WHOLE command to be that shape. A command that chained such a
|
|
19
|
+
* heredoc with `node …/smoke.mjs | tail -25` — a Playwright walk whose import lives inside the
|
|
20
|
+
* file — had the walk stopped after 20 s while the result blamed the python transform. Every
|
|
21
|
+
* statement must be proven local ({@link LOCAL_UTILITY}) before the budget applies.
|
|
22
22
|
*
|
|
23
23
|
* @module
|
|
24
24
|
*/
|
|
@@ -66,7 +66,7 @@ const EXTERNAL_EFFECT = /\b(?:curl|wget|aria2c|rsync|scp|sftp|ftp|ssh|urllib3?|h
|
|
|
66
66
|
* The only OTHER programs a proven-local inline program may share its command with: plain file
|
|
67
67
|
* utilities (`cd app && python3 - <<'EOF' … EOF`, `… EOF | tail -25`).
|
|
68
68
|
*
|
|
69
|
-
*
|
|
69
|
+
* A command ran `python3 - <<'EOF' … EOF` and then, in the same command,
|
|
70
70
|
* `node /workspace/.mol-scratch/smoke.mjs | tail -25` — the agent's Playwright UI walk. The
|
|
71
71
|
* heredoc alone is local, so the whole chain got the 20 s budget, the walk was stopped, and the
|
|
72
72
|
* result blamed the python transform. A script FILE can do anything (the `playwright` import is
|
package/dist/line-diff.d.ts
CHANGED
|
@@ -4,9 +4,8 @@
|
|
|
4
4
|
* The count is a diff, not an arithmetic delta: replacing one line with another
|
|
5
5
|
* leaves the line count unchanged, so `new.length - old.length` is 0 for the
|
|
6
6
|
* edit that changed the file — a result that reads to the model as "your write
|
|
7
|
-
* did nothing"
|
|
8
|
-
* `
|
|
9
|
-
* `"linesAdded":0,"linesRemoved":0`). The lines an edit actually changed are
|
|
7
|
+
* did nothing" — `write_file` rewrote `ArticlePreview.tsx`'s favorite label and reported
|
|
8
|
+
* `"linesAdded":0,"linesRemoved":0`. The lines an edit actually changed are
|
|
10
9
|
* found with the same longest-common-subsequence line diff the IDE's tool cards
|
|
11
10
|
* use (`@molecule/app-ide-react`'s `diffLineCount`); it is mirrored here because
|
|
12
11
|
* the API and App halves of the workspace cannot import each other (AGENTS.md
|
package/dist/line-diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line-diff.d.ts","sourceRoot":"","sources":["../src/line-diff.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"line-diff.d.ts","sourceRoot":"","sources":["../src/line-diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAmGH;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAuBpC"}
|
package/dist/line-diff.js
CHANGED
|
@@ -4,9 +4,8 @@
|
|
|
4
4
|
* The count is a diff, not an arithmetic delta: replacing one line with another
|
|
5
5
|
* leaves the line count unchanged, so `new.length - old.length` is 0 for the
|
|
6
6
|
* edit that changed the file — a result that reads to the model as "your write
|
|
7
|
-
* did nothing"
|
|
8
|
-
* `
|
|
9
|
-
* `"linesAdded":0,"linesRemoved":0`). The lines an edit actually changed are
|
|
7
|
+
* did nothing" — `write_file` rewrote `ArticlePreview.tsx`'s favorite label and reported
|
|
8
|
+
* `"linesAdded":0,"linesRemoved":0`. The lines an edit actually changed are
|
|
10
9
|
* found with the same longest-common-subsequence line diff the IDE's tool cards
|
|
11
10
|
* use (`@molecule/app-ide-react`'s `diffLineCount`); it is mirrored here because
|
|
12
11
|
* the API and App halves of the workspace cannot import each other (AGENTS.md
|
package/dist/no-test-run.d.ts
CHANGED
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
* prints with `--help`/`--version`, the same way.
|
|
10
10
|
*
|
|
11
11
|
* Every check in the platform read such a command as a whole-suite run, because each one
|
|
12
|
-
* matched the runner's NAME.
|
|
12
|
+
* matched the runner's NAME. A first Playwright command that was a config
|
|
13
13
|
* check — a config written to `/tmp`, `cp`'d beside the suite and used with `--list` — and it
|
|
14
14
|
* came back HELD, `status: not_run`, with a ~4 KB `suiteNote` telling it to send the same
|
|
15
15
|
* command with `--max-failures=15` ("uncapped it walks every test … 8–13 minutes"), beside an
|
|
16
16
|
* environment block saying the run "ran on their defaults" and an import note about a path the
|
|
17
17
|
* `cp` had already fixed. Nothing ran. The model gave up on the approach, wrote a second
|
|
18
|
-
* config, and its next command was held again (
|
|
18
|
+
* config, and its next command was held again ("same command three times" shape):
|
|
19
19
|
* two holds, zero tests, and the config check it asked for never answered.
|
|
20
20
|
*
|
|
21
21
|
* So the classifiers live here, in one place, and callers ask them instead of their own
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
* What counts as an invocation is COMMAND POSITION, read by `@molecule/api-ai-tools`'
|
|
28
28
|
* `commandSegments`: `npx playwright test --list`, `hurl --help` and `bash run.sh` invoke the
|
|
29
29
|
* runner, while a runner named as an argument (`grep -n playwright e2e/README.md`,
|
|
30
|
-
* `head -30 run-api-tests-hurl.sh`) invokes nothing at all.
|
|
31
|
-
*
|
|
30
|
+
* `head -30 run-api-tests-hurl.sh`) invokes nothing at all. Reading a runner script with
|
|
31
|
+
* `head -30` has had the suite-overlap hold answer "a Playwright suite is
|
|
32
32
|
* already running … wait for it", for a command that runs nothing.
|
|
33
33
|
*
|
|
34
34
|
* @module
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
* position of a segment, after its wrapper prefixes. A runner named in an argument is not an
|
|
42
42
|
* invocation — `head -30 run-api-tests-hurl.sh` and `grep -n playwright e2e/README.md` name a
|
|
43
43
|
* file to read, and a `--list` written inside a file the command writes is not a flag anyone runs
|
|
44
|
-
* with
|
|
44
|
+
* with.
|
|
45
45
|
*
|
|
46
46
|
* A command that invokes no runner is NOT one of these (false): "the command runs no test" is
|
|
47
47
|
* then true for `ls`, which is not the question any caller is asking. The question is whether
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-test-run.d.ts","sourceRoot":"","sources":["../src/no-test-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;
|
|
1
|
+
{"version":3,"file":"no-test-run.d.ts","sourceRoot":"","sources":["../src/no-test-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAkLH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAiB3D"}
|