scenescout 3.19.0 → 3.19.1
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/CHANGELOG.md +6 -0
- package/dist/engine/browser.js +5 -0
- package/dist/engine/dedup.js +11 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# scenescout
|
|
2
2
|
|
|
3
|
+
## 3.19.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 3a302b4: A saved flow that fails after typing into a form with an unsaved-changes guard no longer stops the flows after it. During a flow, a page asking to confirm leaving is left, as the flow's `navigate` and its hand-back mean, so the next flow's first `navigate` is not cancelled (`net::ERR_ABORTED`). The session's own answer is restored once the flow hands back.
|
|
8
|
+
|
|
3
9
|
## 3.19.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
package/dist/engine/browser.js
CHANGED
|
@@ -5047,6 +5047,10 @@ export class BrowserEngine {
|
|
|
5047
5047
|
// The write policy judges by writeRule, so the flow's rule holds from here until the flow has handed back (finally).
|
|
5048
5048
|
const crawlMode = this.mode;
|
|
5049
5049
|
this.setMode(mode);
|
|
5050
|
+
// A flow's navigate means leave, and so does handing back: a page that asks to confirm leaving (an unsaved-changes
|
|
5051
|
+
// guard on a form a failed step left half filled) is left, or it would cancel the next flow's first navigate.
|
|
5052
|
+
const leaveBefore = this.leaveChoice;
|
|
5053
|
+
this.leaveChoice = true;
|
|
5050
5054
|
const context = this.context;
|
|
5051
5055
|
const violations = [];
|
|
5052
5056
|
const here = () => {
|
|
@@ -5300,6 +5304,7 @@ export class BrowserEngine {
|
|
|
5300
5304
|
// Pages the session no longer drives are closed only now, at about:blank and under the held rule, and each only
|
|
5301
5305
|
// once what it sent as it was left has been judged (leftSettled).
|
|
5302
5306
|
await BrowserEngine.settleWithin(Promise.allSettled(context.pages().map(async (p) => (p === this.page ? undefined : (await this.leftSettled(p), await p.close().catch(() => { }))))), 5000);
|
|
5307
|
+
this.leaveChoice = leaveBefore;
|
|
5303
5308
|
page.off("websocket", onSocket);
|
|
5304
5309
|
context.off("response", onResponse);
|
|
5305
5310
|
this.refs.clear();
|
package/dist/engine/dedup.js
CHANGED
|
@@ -83,6 +83,17 @@ export function buildPairs(archives, keys) {
|
|
|
83
83
|
}
|
|
84
84
|
return out;
|
|
85
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* The archives dated on or after `since` (YYYY-MM-DD), so a decider can be
|
|
88
|
+
* scored out of sample: on pairs from runs made after it was tuned, none of
|
|
89
|
+
* whose findings it has seen. Filtered before pairing, so a pair never joins
|
|
90
|
+
* a new finding to an old one.
|
|
91
|
+
*/
|
|
92
|
+
export function archivesSince(archives, since) {
|
|
93
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(since))
|
|
94
|
+
throw new Error(`The date must be YYYY-MM-DD, not ${JSON.stringify(since)}.`);
|
|
95
|
+
return archives.filter((a) => a.date >= since);
|
|
96
|
+
}
|
|
86
97
|
/**
|
|
87
98
|
* At most `cap` pairs, chosen by a hash of their texts: the same pairs every
|
|
88
99
|
* time for the same archives, whatever order they were built in, and no
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scenescout",
|
|
3
|
-
"version": "3.19.
|
|
3
|
+
"version": "3.19.1",
|
|
4
4
|
"description": "SceneScout — exploratory UI testing for AI coding agents. An MCP server that gives any agent (Claude Code, Cursor, VS Code Copilot, Codex, Gemini CLI and others) a structured view of a running web app, always-on oracles, a network-level write policy, memory across runs and a gap-checked report.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "brunoboto96",
|