@molecule/api-ai-tools 1.9.5 → 1.9.7
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 +98 -8
- package/dist/command-position.d.ts +12 -0
- package/dist/command-position.d.ts.map +1 -1
- package/dist/command-position.js +111 -19
- package/dist/suite-overlap.d.ts.map +1 -1
- package/dist/suite-overlap.js +9 -38
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +28 -10
- package/dist/trace-artifacts.d.ts +46 -0
- package/dist/trace-artifacts.d.ts.map +1 -1
- package/dist/trace-artifacts.js +260 -39
- package/dist/utilities.d.ts +39 -5
- package/dist/utilities.d.ts.map +1 -1
- package/dist/utilities.js +134 -14
- package/package.json +1 -1
package/dist/utilities.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAW3E;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAS5C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,GAAG,MAAM,KAAG,MAEE,CAAA;AAuGhD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAKD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAsCzD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAUpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAElE;AAED
|
|
1
|
+
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"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"}
|
package/dist/utilities.js
CHANGED
|
@@ -272,20 +272,28 @@ export function outputIsWithheldUntilExit(command) {
|
|
|
272
272
|
* this leaves its task log empty, so the log is the wrong place to look and an empty
|
|
273
273
|
* log proves nothing (X1 flash-m29).
|
|
274
274
|
*
|
|
275
|
+
* Which redirect counts is decided by the command's own shell structure, from the same
|
|
276
|
+
* parse every other command reader uses: a redirect written in a BACKGROUNDED statement
|
|
277
|
+
* (`… &`) or inside a `( … )` / `{ … }` group writes that process's or group's output, not
|
|
278
|
+
* the command's. The platform's own preview launch is exactly that — the preview server is
|
|
279
|
+
* started with `>/tmp/mol-preview-4173.log 2>&1 &` inside the build/serve prelude, and the
|
|
280
|
+
* suite's foreground command follows it — so a reader that took the last `>` in the whole
|
|
281
|
+
* text told a run its output went to the PREVIEW's log (X1 flash-m136 +18:31).
|
|
282
|
+
*
|
|
283
|
+
* The target comes back without its shell quotes: `> '/tmp/x.log'` is `/tmp/x.log`, and
|
|
284
|
+
* the callers resolve a relative one against the command's cwd.
|
|
285
|
+
*
|
|
275
286
|
* @param command - The shell command.
|
|
276
|
-
* @returns The target
|
|
287
|
+
* @returns The target, or null (`/dev/null` and `&1`/`&2` are not files).
|
|
277
288
|
*/
|
|
278
289
|
export function outputRedirectTarget(command) {
|
|
279
|
-
// A heredoc that writes a file (`cat > cfg.ts <<'EOF' … EOF`) is not where the run's output
|
|
280
|
-
// goes: X1 flash-m44 was told its config file was the suite's log.
|
|
281
|
-
const text = command.replace(/[^\n;&|]*<<-?\s*(['"]?)(\w+)\1[\s\S]*?\n\s*\2\b/g, '');
|
|
282
|
-
const tee = /\|\s*tee\s+(?:-a\s+)?([^\s;&|]+)/.exec(text);
|
|
283
|
-
if (tee)
|
|
284
|
-
return tee[1];
|
|
285
290
|
let last = null;
|
|
286
|
-
for (const
|
|
287
|
-
|
|
288
|
-
|
|
291
|
+
for (const statement of locatedCommandSegments(command)) {
|
|
292
|
+
// A backgrounded statement's own redirect is that process's log, never the command's.
|
|
293
|
+
if (statement.terminator === '&')
|
|
294
|
+
continue;
|
|
295
|
+
if (statement.redirectTarget !== null)
|
|
296
|
+
last = statement.redirectTarget;
|
|
289
297
|
}
|
|
290
298
|
return last;
|
|
291
299
|
}
|
|
@@ -2123,6 +2131,82 @@ function failureBlockTests(text) {
|
|
|
2123
2131
|
* property of the run rather than of a page.
|
|
2124
2132
|
*/
|
|
2125
2133
|
export const UNIVERSAL_CAUSE_FILES = 3;
|
|
2134
|
+
/**
|
|
2135
|
+
* How many tests a run must have walked — with nothing passing since its first failure — before
|
|
2136
|
+
* "the page renders nothing" can be its one cause. A handful of failures is a handful of bugs;
|
|
2137
|
+
* a page that never painted fails every spec that reaches it, and m141's walk had 36 by +20:30.
|
|
2138
|
+
*/
|
|
2139
|
+
export const EMPTY_PAGE_CAUSE_TESTS = 15;
|
|
2140
|
+
/**
|
|
2141
|
+
* A failure body whose whole complaint is a wait for an element the page never rendered:
|
|
2142
|
+
* Playwright's `waiting for locator(…)` call log, its `element(s) not found` line, or the
|
|
2143
|
+
* assertion form's `toBeVisible() failed`. Anything else — a status code, a thrown error in the
|
|
2144
|
+
* test's own code — is a different failure and leaves this reading nothing.
|
|
2145
|
+
*/
|
|
2146
|
+
const LOCATOR_WAIT = /waiting for locator\(|element\(s\) not found|toBeVisible\(\) failed/;
|
|
2147
|
+
/** An uncaught page error, as a run that listens for `pageerror` prints it. */
|
|
2148
|
+
const PAGE_ERROR_LINE = /^\s*(?:\[pageerror\]|pageerror:)\s*(.+)$/m;
|
|
2149
|
+
/** An uncaught page error, in the browser's own `Uncaught …` wording. */
|
|
2150
|
+
const UNCAUGHT_PAGE_ERROR_LINE = /^\s*Uncaught(?:\s+Error)?:\s*(.+)$/m;
|
|
2151
|
+
/**
|
|
2152
|
+
* The page's own uncaught error, when the log printed one — the fact that names WHY a build
|
|
2153
|
+
* paints nothing (`No 'auth-client' provider bonded…`), rather than the locator it leaves behind.
|
|
2154
|
+
*
|
|
2155
|
+
* @param text - The log (ANSI already stripped).
|
|
2156
|
+
* @returns The error's message, or null.
|
|
2157
|
+
*/
|
|
2158
|
+
function pageErrorInLog(text) {
|
|
2159
|
+
const m = PAGE_ERROR_LINE.exec(text) ?? UNCAUGHT_PAGE_ERROR_LINE.exec(text);
|
|
2160
|
+
return m?.[1]?.trim() || null;
|
|
2161
|
+
}
|
|
2162
|
+
/**
|
|
2163
|
+
* The "nothing has passed and nothing renders" cause: every failure block the log has written is
|
|
2164
|
+
* a locator wait, the run has walked at least {@link EMPTY_PAGE_CAUSE_TESTS} tests across the
|
|
2165
|
+
* file threshold, and no test has passed since the first failure.
|
|
2166
|
+
*
|
|
2167
|
+
* This is ONE cause even though the signatures differ — each spec asks for its own first element
|
|
2168
|
+
* (`input[name="username"]`, `a.navbar-brand`, `h1`), so {@link repeatingFailure} cannot group
|
|
2169
|
+
* them and {@link universalCause}'s signature test cannot see the run is over. xr-molecule-flash-
|
|
2170
|
+
* m141 (+20:30) walked a built app that rendered nothing: 36 tests had failed, every one at its
|
|
2171
|
+
* first locator, and the note told the run to keep walking for another ~9 minutes.
|
|
2172
|
+
*
|
|
2173
|
+
* @param text - The log (ANSI already stripped).
|
|
2174
|
+
* @param threshold - The spec-file threshold this run is judged against ({@link universalCause}).
|
|
2175
|
+
* @param found - The repeating cause {@link repeatingFailure} found, when it found one.
|
|
2176
|
+
* @returns The cause, or null when the log is not this shape.
|
|
2177
|
+
*/
|
|
2178
|
+
function emptyPageCause(text, threshold, found) {
|
|
2179
|
+
const marks = resultMarks(text);
|
|
2180
|
+
const firstFailure = marks.indexOf('✘');
|
|
2181
|
+
if (firstFailure === -1 || marks.slice(firstFailure).includes('✓'))
|
|
2182
|
+
return null;
|
|
2183
|
+
const blocks = failureBlocks(text);
|
|
2184
|
+
if (blocks.length === 0 || !blocks.every((block) => LOCATOR_WAIT.test(block)))
|
|
2185
|
+
return null;
|
|
2186
|
+
// Both readings of the same failures: a `list` line carries the test and its duration, a
|
|
2187
|
+
// numbered block carries its body. The larger is the count — a failure that has a block but
|
|
2188
|
+
// whose result line the poll had not reached yet is still a failure.
|
|
2189
|
+
const byList = distinctTests(failedTests(text));
|
|
2190
|
+
const byBlock = distinctTests(failureBlockTests(text));
|
|
2191
|
+
const tests = byBlock.length >= byList.length ? byBlock : byList;
|
|
2192
|
+
// One signature already covers every failure: that is the signature cause, and its wording
|
|
2193
|
+
// (which names the repeated error) says more than "the page renders nothing" would.
|
|
2194
|
+
if (found !== null && found.message !== null && found.count >= tests.length)
|
|
2195
|
+
return null;
|
|
2196
|
+
if (tests.length < EMPTY_PAGE_CAUSE_TESTS)
|
|
2197
|
+
return null;
|
|
2198
|
+
const files = [...new Set(tests.map((t) => specFile(t.where)).filter(Boolean))];
|
|
2199
|
+
if (files.length < threshold)
|
|
2200
|
+
return null;
|
|
2201
|
+
const pageError = pageErrorInLog(text);
|
|
2202
|
+
return {
|
|
2203
|
+
count: tests.length,
|
|
2204
|
+
files,
|
|
2205
|
+
pageRendersNothing: true,
|
|
2206
|
+
...(pageError === null ? {} : { pageError }),
|
|
2207
|
+
tests,
|
|
2208
|
+
};
|
|
2209
|
+
}
|
|
2126
2210
|
/**
|
|
2127
2211
|
* How many tests a connection-class cause must cover before the run is stopped even when they
|
|
2128
2212
|
* are all in one file — see {@link universalCause}.
|
|
@@ -2234,18 +2318,27 @@ export function specFilesSelected(command) {
|
|
|
2234
2318
|
* alongside the others.
|
|
2235
2319
|
*
|
|
2236
2320
|
* @param log - The log so far.
|
|
2237
|
-
* @param found - The repeating cause {@link repeatingFailure} found in it
|
|
2321
|
+
* @param found - The repeating cause {@link repeatingFailure} found in it, or null when no two
|
|
2322
|
+
* failures share a signature (a page that renders nothing fails each spec at its own first
|
|
2323
|
+
* locator — {@link emptyPageCause} still reads that run).
|
|
2238
2324
|
* @param command - How the run was started, when the caller knows it: its spec-file selection
|
|
2239
2325
|
* scales the file threshold ({@link specFilesSelected}).
|
|
2240
2326
|
* @returns The cause's count and files, or null when the run is not failing whole.
|
|
2241
2327
|
*/
|
|
2242
2328
|
export function universalCause(log, found, command) {
|
|
2243
2329
|
const text = log.replace(ANSI_SGR, '');
|
|
2244
|
-
const files = [...new Set(found.tests.map((t) => specFile(t.where)).filter(Boolean))];
|
|
2245
2330
|
// The threshold is what THIS run selects, not the suite's total: a run narrowed to one file
|
|
2246
2331
|
// can never span three of them, however whole its failure is.
|
|
2247
2332
|
const selected = command ? specFilesSelected(command) : null;
|
|
2248
2333
|
const threshold = selected === null ? UNIVERSAL_CAUSE_FILES : Math.min(UNIVERSAL_CAUSE_FILES, selected);
|
|
2334
|
+
// Nothing has passed and nothing renders: EVERY spec so far is waiting for its own first
|
|
2335
|
+
// element, so the signatures differ while the cause does not (xr-molecule-flash-m141).
|
|
2336
|
+
const emptyPage = emptyPageCause(text, threshold, found);
|
|
2337
|
+
if (emptyPage)
|
|
2338
|
+
return emptyPage;
|
|
2339
|
+
if (!found)
|
|
2340
|
+
return null;
|
|
2341
|
+
const files = [...new Set(found.tests.map((t) => specFile(t.where)).filter(Boolean))];
|
|
2249
2342
|
// The app never answered: three tests of that with nothing passing since is the whole of what
|
|
2250
2343
|
// a whole-suite run would have said, whatever the file count (xr-molecule-flash-m119).
|
|
2251
2344
|
const unreachable = found.message !== null &&
|
|
@@ -2294,13 +2387,18 @@ export function universalCause(log, found, command) {
|
|
|
2294
2387
|
* needs — is the run over as a measuring instrument — and it is THE one predicate behind both
|
|
2295
2388
|
* that decision and the note's wording, so the two cannot come to different verdicts.
|
|
2296
2389
|
*
|
|
2297
|
-
* @param found - What {@link repeatingFailure} found mid-run.
|
|
2390
|
+
* @param found - What {@link repeatingFailure} found mid-run, or null when no signature repeats.
|
|
2298
2391
|
* @param universal - What {@link universalCause} found for it, if anything.
|
|
2299
2392
|
* @returns The cause to stop the run over, or null — in which case nothing may be stopped, the
|
|
2300
2393
|
* wait keeps going, and the finding rides the run's result as a note.
|
|
2301
2394
|
*/
|
|
2302
2395
|
export function earlyReturnCause(found, universal) {
|
|
2303
|
-
|
|
2396
|
+
// "The page renders nothing" is a PROVEN cause without a repeated signature — the specs differ
|
|
2397
|
+
// in the locator they wait for, not in the reason (xr-molecule-flash-m141) — so the duration
|
|
2398
|
+
// guard below does not apply to it.
|
|
2399
|
+
if (universal?.pageRendersNothing)
|
|
2400
|
+
return universal;
|
|
2401
|
+
if (!found || found.message === null)
|
|
2304
2402
|
return null;
|
|
2305
2403
|
return universal ?? null;
|
|
2306
2404
|
}
|
|
@@ -2914,6 +3012,28 @@ export function repeatingFailureNote(found, o) {
|
|
|
2914
3012
|
const span = files.length === 0
|
|
2915
3013
|
? ''
|
|
2916
3014
|
: ` — across ${files.length} file${files.length === 1 ? '' : 's'} (${shown}${moreFiles})`;
|
|
3015
|
+
// The page renders NOTHING: the failures do not share an error signature — each spec is
|
|
3016
|
+
// waiting for its own first element — so naming one locator as "the way they failed" would be
|
|
3017
|
+
// wrong. The cause is the page, and the page's own error (when the run printed one) is what
|
|
3018
|
+
// names it (xr-molecule-flash-m141).
|
|
3019
|
+
if (stop.pageRendersNothing) {
|
|
3020
|
+
const pageTests = (stop.tests ?? found.tests).slice(0, REPEATING_FAILURE_LISTED);
|
|
3021
|
+
const pageRows = pageTests
|
|
3022
|
+
.map((t) => ` ✘ ${[t.where, t.title].filter(Boolean).join(' › ')}` +
|
|
3023
|
+
(t.seconds === null ? '' : ` (${t.seconds}s)`))
|
|
3024
|
+
.join('\n');
|
|
3025
|
+
const moreFailures = stop.count > pageTests.length ? `\n … and ${stop.count - pageTests.length} more` : '';
|
|
3026
|
+
const pageError = stop.pageError ? ` The page itself threw: \`${stop.pageError}\`.` : '';
|
|
3027
|
+
return (`Every test this run has walked so far has failed at its first locator — all ` +
|
|
3028
|
+
`${stop.count} of them${span}, with nothing passing since the first:\n` +
|
|
3029
|
+
`${pageRows}${moreFailures}\n` +
|
|
3030
|
+
`Each is waiting for an element the page never painted, so one cause explains all of ` +
|
|
3031
|
+
`them: the app is rendering NOTHING — its bundle throws while it loads, or it never ` +
|
|
3032
|
+
`mounts.${pageError} Every remaining test will fail the same way too, so walking the ` +
|
|
3033
|
+
`rest of this run only repeats this one cause. Stop it and fix that cause first: ` +
|
|
3034
|
+
`\`exec_command: ${o.stop}\`, then run the whole suite again. It is still going (${where}).` +
|
|
3035
|
+
`${reproduce}`);
|
|
3036
|
+
}
|
|
2917
3037
|
return (`Every test this run has walked so far has failed the same way — all ${found.count} of ` +
|
|
2918
3038
|
`them, ${signature}${span}, with nothing ` +
|
|
2919
3039
|
`passing since the first:\n${rows}${more}\n` +
|