@monkeytestai/monkeytest-core 0.4.0 → 0.4.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 +9 -0
- package/README.md +24 -17
- package/dist/explorer/index.d.ts +5 -0
- package/dist/explorer/index.d.ts.map +1 -1
- package/dist/explorer/index.js +16 -26
- package/dist/explorer/index.js.map +1 -1
- package/dist/explorer/queue.d.ts +43 -2
- package/dist/explorer/queue.d.ts.map +1 -1
- package/dist/explorer/queue.js +143 -9
- package/dist/explorer/queue.js.map +1 -1
- package/dist/planner/faults.d.ts +3 -1
- package/dist/planner/faults.d.ts.map +1 -1
- package/dist/planner/faults.js +11 -19
- package/dist/planner/faults.js.map +1 -1
- package/dist/planner/forms.js +2 -2
- package/dist/planner/forms.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
### Changed
|
|
11
11
|
|
|
12
|
+
- README and the docs install from npm: `npm install @monkeytestai/monkeytest-core` (published 0.4.0). A clone remains the contributor path, including the no-key smoke script.
|
|
12
13
|
- Package name is `@monkeytestai/monkeytest-core` (version stays `0.4.0`). It was `@mtai/monkeytest-core`; that npm scope is taken. Imports, install docs, CI, and the Docker image use the new name. Runtime behavior and the AGPL-3.0 license are unchanged.
|
|
13
14
|
- **SaaS migration.** `new Monkey()` now defaults `strictOracles` and `failOn5xx` to **on**. A page error, a document HTTP 404, a disabled control a step tries to use, and a same-origin HTTP ≥500 (document, xhr, or fetch) become a failed step and a blocking bug. Bug counts and `flowsFailed` will rise. To keep the previous counts, pass `strictOracles: false` and `failOn5xx: false` on the constructor, or the same fields on one `run` / `replay` / `verify` call. `www` and the apex host still match. Other ports, third-party hosts, and image/font responses stay evidence only.
|
|
14
15
|
- `runPlan`, `replayTraces`, `verifyBugs`, and `triage(run)` still leave those switches off unless the caller passes them, so triaging a run you already built does not rewrite it. `Monkey` passes the constructor values (now on) into the run and into `triage`. `RunResult` fields are unchanged.
|
|
@@ -33,11 +34,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
33
34
|
|
|
34
35
|
### Fixed
|
|
35
36
|
|
|
37
|
+
- The release workflow grants `contents: write` so it can open the GitHub release after npm publish. Provenance still uses `id-token: write`. The release install command uses the package version with the leading `v` removed.
|
|
36
38
|
- A valid planner response can no longer drop a public form the crawl already saw. The form-submit flow is a reserved slot: shopping-only plans, and plans whose only submit is a vague "submit" on that page, still include the grounded flow and its action URL (for example `/api/contact`). Fault-surface flows cannot take that slot. Help, contact, and about reads are dropped only after shop flows. `SiteMapForm.inputs` optionally records label, name, placeholder, and type; `fields` is unchanged. Fill steps use that label, then a `name` CSS selector, instead of an invented placeholder such as `placeholder:Email`.
|
|
37
39
|
- Replay and verify keep going when a step the original run already marked `skipped` has a locator that still misses. A soft skip (for example a placeholder fill that never matched) no longer becomes `locator_mismatch` and hides a later bug, such as a form POST that returned HTTP 500. A step that originally passed or failed still stops the flow. Fingerprints are unchanged.
|
|
38
40
|
- A planner model response that is invalid JSON, fails schema validation, or includes a flow with empty `steps` no longer wipes the plan. Usable model flows are kept. The public-form submit flow and scraped fault-control flows are still added, up to `maxFlows`. `plan()` records the model error on `TestPlan.notes` and emits `engine.error`. `executeAndTriage` runs that plan. An empty plan remains only when the crawl has no public form and no fault control. `RunResult` fields are unchanged. `groundedTestPlan(siteMap, maxFlows)` is the same crawl-only floor, for a host that catches a planner failure itself.
|
|
39
41
|
- The per-flow timeout no longer leaves its timer running after the flow finishes, and it closes the browser context when the budget is exceeded.
|
|
40
42
|
|
|
43
|
+
## [0.4.1] — 2026-10
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- The crawler compared outbound links with `URL.origin`, so a start URL of `http://shop.example/` that redirects to `https://www.shop.example/` never left the homepage: every rewritten link looked off-origin and the queue stopped. Crawl scope now treats the apex host and `www` as one site, and `http` and `https` as one site. Another subdomain, another host, or another explicit port is still skipped. A redirect that stays on the site is stored as the URL the browser landed on; the caller's `startUrl` is unchanged. The fault-surface link check uses the same site rule, so a homepage "Track order" or "Help" link rewritten onto `https://www` is still eligible when that path was not crawled. The public-form floor is unchanged and still requires the form page in the sitemap. `www` / scheme matching for HTTP 5xx oracles is unchanged.
|
|
48
|
+
|
|
41
49
|
## [0.4.0] — 2026-05
|
|
42
50
|
|
|
43
51
|
The bug-finding loop release. The CLI is now a real product surface with
|
|
@@ -147,5 +155,6 @@ First public npm release.
|
|
|
147
155
|
- `EventBus` for live activity streams
|
|
148
156
|
- OpenAI and Gemini LLM backends
|
|
149
157
|
|
|
158
|
+
[0.4.1]: https://github.com/monkeytestai/monkeytest-core/releases/tag/v0.4.1
|
|
150
159
|
[0.3.0]: https://github.com/monkeytestai/monkeytest-core/releases/tag/v0.3.0
|
|
151
160
|
[0.2.0]: https://github.com/monkeytestai/monkeytest-core/releases/tag/v0.2.0
|
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
13
|
-
<a href="https://www.npmjs.com/package/@monkeytestai/monkeytest-core"><img src="https://img.shields.io/
|
|
13
|
+
<a href="https://www.npmjs.com/package/@monkeytestai/monkeytest-core"><img src="https://img.shields.io/npm/v/@monkeytestai/monkeytest-core" alt="npm @monkeytestai/monkeytest-core" /></a>
|
|
14
14
|
<a href="https://nodejs.org/"><img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen" alt="Node 20+" /></a>
|
|
15
15
|
<a href="https://docs.monkeytest.ai"><img src="https://img.shields.io/badge/docs-docs.monkeytest.ai-7c3aed" alt="Documentation" /></a>
|
|
16
16
|
<a href="https://github.com/monkeytestai/monkeytest-core/actions/workflows/ci.yml"><img src="https://github.com/monkeytestai/monkeytest-core/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
|
@@ -35,13 +35,13 @@ Most "AI testing" tools stop at *finding* bugs. MonkeyTest Core is built around
|
|
|
35
35
|
Point it at a URL. It crawls a few pages, asks an LLM *"what would a real user try here?"*, runs those flows step by step, and writes a stable, versioned `plan.json` you can commit to git. Tomorrow, after you ship a fix, **`monkeytest rerun`** re-executes the *exact same* plan — no LLM cost for re-planning, no plan drift between runs — and **`monkeytest diff`** tells you what's new, what's fixed, what regressed.
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
|
|
38
|
+
npx monkeytest run https://example.com # first run: explore + plan + execute, exit 1 if bugs
|
|
39
39
|
# ...you ship a fix...
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
npx monkeytest rerun # re-runs the same plan, exit 1 if any blocking bug remains
|
|
41
|
+
npx monkeytest diff prev latest # 2 fixed, 0 new, 1 still broken, 0 regressed (net -2)
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
Those subcommands come from `npm install @monkeytestai/monkeytest-core`. A clone runs them with `node dist/cli.js`.
|
|
45
45
|
|
|
46
46
|
Or programmatically — same primitives:
|
|
47
47
|
|
|
@@ -68,30 +68,37 @@ const diff = diffRuns(a, b);
|
|
|
68
68
|
console.log(`${diff.stats.fixed} fixed, ${diff.stats.regressed} regressed`);
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
No fixtures, no page objects, no recorders. Read [the bug-finding loop](https://docs.monkeytest.ai/guide/the-bug-finding-loop) for the full story. The import above resolves
|
|
71
|
+
No fixtures, no page objects, no recorders. Read [the bug-finding loop](https://docs.monkeytest.ai/guide/the-bug-finding-loop) for the full story. The import above resolves from [`@monkeytestai/monkeytest-core`](https://www.npmjs.com/package/@monkeytestai/monkeytest-core) on npm. See [why monkeytest](https://docs.monkeytest.ai/guide/why-monkeytest) for how it sits next to similar tools.
|
|
72
72
|
|
|
73
|
-
##
|
|
73
|
+
## Install
|
|
74
74
|
|
|
75
|
-
Node.js 20 or newer.
|
|
75
|
+
Node.js 20 or newer.
|
|
76
76
|
|
|
77
77
|
```bash
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
npx playwright install chromium && node scripts/smoke.mjs
|
|
78
|
+
npm install @monkeytestai/monkeytest-core
|
|
79
|
+
npx playwright install chromium
|
|
81
80
|
```
|
|
82
81
|
|
|
83
|
-
|
|
82
|
+
[@monkeytestai/monkeytest-core](https://www.npmjs.com/package/@monkeytestai/monkeytest-core) **0.4.1** is the published package. The CLI is `npx monkeytest`.
|
|
84
83
|
|
|
85
84
|
```bash
|
|
86
85
|
export GEMINI_API_KEY="paste-your-key"
|
|
87
|
-
|
|
86
|
+
npx monkeytest run https://example.com --max 2 --flows 1
|
|
88
87
|
```
|
|
89
88
|
|
|
90
|
-
Screenshots are written to `.monkeytest/shots/`.
|
|
89
|
+
Screenshots are written to `.monkeytest/shots/`. A free Gemini key, or Ollama on localhost, is in the [quick start](https://docs.monkeytest.ai/guide/quick-start), including where `plan.json`, `runs/`, and `shots/` show up, and how `rerun` / `diff` work.
|
|
90
|
+
|
|
91
|
+
### From a clone (contributors)
|
|
92
|
+
|
|
93
|
+
The no-key smoke script lives in the repository. It stubs the LLM, crawls `https://example.com`, and prints `OK — engine pipeline is wired correctly.`
|
|
91
94
|
|
|
92
|
-
|
|
95
|
+
```bash
|
|
96
|
+
git clone https://github.com/monkeytestai/monkeytest-core.git && cd monkeytest-core
|
|
97
|
+
npm install && npm run build
|
|
98
|
+
npx playwright install chromium && node scripts/smoke.mjs
|
|
99
|
+
```
|
|
93
100
|
|
|
94
|
-
`npm
|
|
101
|
+
`npm run build` writes `dist/cli.js`. The same subcommands are `node dist/cli.js run ...`.
|
|
95
102
|
|
|
96
103
|
## Docker
|
|
97
104
|
|
|
@@ -162,7 +169,7 @@ for (const bug of run.bugs.filter(b => b.severity !== 'minor')){
|
|
|
162
169
|
|
|
163
170
|
Everything lives at **[docs.monkeytest.ai](https://docs.monkeytest.ai)**:
|
|
164
171
|
|
|
165
|
-
- [Quick start](https://docs.monkeytest.ai/guide/quick-start) —
|
|
172
|
+
- [Quick start](https://docs.monkeytest.ai/guide/quick-start) — npm install, or a clone for the no-key smoke run, then Gemini or Ollama
|
|
166
173
|
- [Why monkeytest](https://docs.monkeytest.ai/guide/why-monkeytest) — how it compares with nearby tools
|
|
167
174
|
- [The bug-finding loop](https://docs.monkeytest.ai/guide/the-bug-finding-loop) — explore once, run repeatedly, diff
|
|
168
175
|
- [CLI reference](https://docs.monkeytest.ai/reference/cli) — every subcommand and flag
|
package/dist/explorer/index.d.ts
CHANGED
|
@@ -18,6 +18,11 @@
|
|
|
18
18
|
* budget before `/help` is visited. URLs that were never linked are not
|
|
19
19
|
* invented.
|
|
20
20
|
*
|
|
21
|
+
* Crawl scope is the site, not a single `URL.origin`. `http://shop.example/`
|
|
22
|
+
* and `https://www.shop.example/help` are the same site. Another host,
|
|
23
|
+
* another subdomain, or another explicit port is not. A redirect that stays
|
|
24
|
+
* on the site is recorded as the URL the browser landed on.
|
|
25
|
+
*
|
|
21
26
|
* What the explorer is NOT:
|
|
22
27
|
* - It does not log in. Auth-gated flows are surfaced to the planner so
|
|
23
28
|
* they can be flagged as `auth_required` later.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/explorer/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/explorer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAOH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAA+B,WAAW,EAAsB,MAAM,aAAa,CAAC;AACzG,OAAO,EAAE,KAAK,QAAQ,EAAW,MAAM,cAAc,CAAC;AAiBtD,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACrC,mEAAmE;IACnE,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,GAAG,EACR,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,OAAO,CAAC,CAmMlB"}
|
package/dist/explorer/index.js
CHANGED
|
@@ -18,6 +18,11 @@
|
|
|
18
18
|
* budget before `/help` is visited. URLs that were never linked are not
|
|
19
19
|
* invented.
|
|
20
20
|
*
|
|
21
|
+
* Crawl scope is the site, not a single `URL.origin`. `http://shop.example/`
|
|
22
|
+
* and `https://www.shop.example/help` are the same site. Another host,
|
|
23
|
+
* another subdomain, or another explicit port is not. A redirect that stays
|
|
24
|
+
* on the site is recorded as the URL the browser landed on.
|
|
25
|
+
*
|
|
21
26
|
* What the explorer is NOT:
|
|
22
27
|
* - It does not log in. Auth-gated flows are surfaced to the planner so
|
|
23
28
|
* they can be flagged as `auth_required` later.
|
|
@@ -29,12 +34,11 @@ import { mkdirSync } from 'node:fs';
|
|
|
29
34
|
import { join, resolve } from 'node:path';
|
|
30
35
|
import { z } from 'zod';
|
|
31
36
|
import { noopBus } from '../events.js';
|
|
32
|
-
import { canonicalPageUrl, enqueueLinks, FORM_SURFACE_PATH_SOURCE, FORM_SURFACE_TEXT_SOURCE, isFormSurfaceLink, pickNextCrawlUrl, selectOutboundLinks, } from './queue.js';
|
|
37
|
+
import { canonicalPageUrl, crawledPageUrl, enqueueLinks, FORM_SURFACE_PATH_SOURCE, FORM_SURFACE_TEXT_SOURCE, isFormSurfaceLink, linksOnCrawlSite, pickNextCrawlUrl, rememberVisited, selectOutboundLinks, wasVisited, } from './queue.js';
|
|
33
38
|
export async function explore(startUrl, llm, opts = {}) {
|
|
34
39
|
const maxPages = opts.maxPages ?? 8;
|
|
35
40
|
const timeout = opts.pageTimeoutMs ?? 20_000;
|
|
36
41
|
const headless = opts.headless ?? true;
|
|
37
|
-
const startOrigin = new URL(startUrl).origin;
|
|
38
42
|
const events = opts.events ?? noopBus();
|
|
39
43
|
const visited = new Set();
|
|
40
44
|
const start = canonicalPageUrl(startUrl);
|
|
@@ -68,13 +72,15 @@ export async function explore(startUrl, llm, opts = {}) {
|
|
|
68
72
|
if (index < 0)
|
|
69
73
|
break;
|
|
70
74
|
const next = queue.splice(index, 1)[0];
|
|
71
|
-
if (!next || visited
|
|
75
|
+
if (!next || wasVisited(visited, next.url))
|
|
72
76
|
continue;
|
|
73
|
-
const
|
|
74
|
-
visited
|
|
77
|
+
const requestedUrl = next.url;
|
|
78
|
+
rememberVisited(visited, requestedUrl);
|
|
75
79
|
const page = await context.newPage();
|
|
76
80
|
try {
|
|
77
|
-
await page.goto(
|
|
81
|
+
await page.goto(requestedUrl, { waitUntil: 'domcontentloaded', timeout });
|
|
82
|
+
const url = crawledPageUrl(requestedUrl, page.url(), startUrl);
|
|
83
|
+
rememberVisited(visited, url);
|
|
78
84
|
// SPAs (CRA, Next dev, Vite) often keep a websocket open for HMR so
|
|
79
85
|
// networkidle never settles. We give it a brief shot, then fall back
|
|
80
86
|
// to a `waitForFunction` that polls for actual rendered content.
|
|
@@ -127,9 +133,7 @@ export async function explore(startUrl, llm, opts = {}) {
|
|
|
127
133
|
}
|
|
128
134
|
const forms = skeleton.forms.filter(form => form.action || form.fields.length > 0 || form.submitLabel);
|
|
129
135
|
const controls = skeleton.controls.filter(control => control.label);
|
|
130
|
-
const outbound = selectOutboundLinks(skeleton.links
|
|
131
|
-
.map(link => ({ url: canonicalPageUrl(link.url), text: link.text }))
|
|
132
|
-
.filter(link => belongsToOrigin(link.url, startOrigin)));
|
|
136
|
+
const outbound = selectOutboundLinks(linksOnCrawlSite(skeleton.links, startUrl));
|
|
133
137
|
const sm = {
|
|
134
138
|
url,
|
|
135
139
|
title: skeleton.title,
|
|
@@ -166,11 +170,11 @@ export async function explore(startUrl, llm, opts = {}) {
|
|
|
166
170
|
}
|
|
167
171
|
catch (err) {
|
|
168
172
|
const reason = err instanceof Error ? err.message : String(err);
|
|
169
|
-
failures.push({ url, reason });
|
|
173
|
+
failures.push({ url: requestedUrl, reason });
|
|
170
174
|
events.emit({
|
|
171
175
|
phase: 'explorer', type: 'explore.page_failed',
|
|
172
|
-
message: `Failed to load ${
|
|
173
|
-
data: { url, reason },
|
|
176
|
+
message: `Failed to load ${requestedUrl}`,
|
|
177
|
+
data: { url: requestedUrl, reason },
|
|
174
178
|
});
|
|
175
179
|
}
|
|
176
180
|
finally {
|
|
@@ -466,20 +470,6 @@ function slugifyUrl(u) {
|
|
|
466
470
|
return 'page';
|
|
467
471
|
}
|
|
468
472
|
}
|
|
469
|
-
function belongsToOrigin(href, origin) {
|
|
470
|
-
try {
|
|
471
|
-
const u = new URL(href);
|
|
472
|
-
if (u.origin !== origin)
|
|
473
|
-
return false;
|
|
474
|
-
// Skip mailto:, tel:, file downloads, anchors, common asset types
|
|
475
|
-
if (/\.(png|jpe?g|gif|svg|pdf|zip|ico|webp|avif|mp4|webm)(\?.*)?$/i.test(u.pathname))
|
|
476
|
-
return false;
|
|
477
|
-
return true;
|
|
478
|
-
}
|
|
479
|
-
catch {
|
|
480
|
-
return false;
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
473
|
function withScrapedForm(interactive, forms) {
|
|
484
474
|
if (forms.length === 0 || interactive.some(item => item.kind === 'form'))
|
|
485
475
|
return interactive;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/explorer/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/explorer/index.ts"],"names":[],"mappings":"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"}
|
package/dist/explorer/queue.d.ts
CHANGED
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
* contact form in the header or footer. These helpers keep that BFS, but
|
|
7
7
|
* reserve a few slots for form / help / contact / support / about pages the
|
|
8
8
|
* crawl actually saw. They never invent URLs.
|
|
9
|
+
*
|
|
10
|
+
* Scope is the site. `http://shop.example/` and `https://www.shop.example/help`
|
|
11
|
+
* are the same site. Another subdomain, another host, or another explicit
|
|
12
|
+
* port is not enqueued.
|
|
9
13
|
*/
|
|
10
14
|
export interface DiscoveredLink {
|
|
11
15
|
url: string;
|
|
@@ -20,6 +24,42 @@ export interface CrawlQueueItem {
|
|
|
20
24
|
export declare const FORM_SURFACE_PATH_SOURCE: string;
|
|
21
25
|
export declare const FORM_SURFACE_TEXT_SOURCE: string;
|
|
22
26
|
export declare function canonicalPageUrl(value: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Identity of a page inside one crawl. `www` and the apex host are the same
|
|
29
|
+
* page. `http` and `https` are the same page. An explicit port stays
|
|
30
|
+
* distinct, so `:8080` is not `:80`.
|
|
31
|
+
*
|
|
32
|
+
* This is wider than the runner's HTTP 5xx host check on purpose. A start
|
|
33
|
+
* URL of `http://shop.example/` often redirects to `https://www.shop.example/`,
|
|
34
|
+
* and the crawl has to follow that. A 5xx on a different scheme is still a
|
|
35
|
+
* different listener, so the oracle does not use this key.
|
|
36
|
+
*/
|
|
37
|
+
export declare function crawlPathKey(value: string): string | undefined;
|
|
38
|
+
/** True when both URLs are the same path on the same crawl site. */
|
|
39
|
+
export declare function sameCrawlPage(a: string, b: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* True when `href` is an http(s) document on the same site as `scope`.
|
|
42
|
+
* `www` and the apex host match. `http` and `https` match. A non-default
|
|
43
|
+
* port must match. Other subdomains, other hosts, `mailto:`, and common
|
|
44
|
+
* asset types are not crawl targets.
|
|
45
|
+
*/
|
|
46
|
+
export declare function isSameCrawlSite(href: string, scope: string): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Links the explorer may enqueue. Off-site, asset, and non-http URLs are
|
|
49
|
+
* dropped. The returned URL is canonical. Anchor text is kept so a footer
|
|
50
|
+
* "Help" link is still recognised as a form surface.
|
|
51
|
+
*/
|
|
52
|
+
export declare function linksOnCrawlSite(links: DiscoveredLink[], scope: string): DiscoveredLink[];
|
|
53
|
+
/**
|
|
54
|
+
* URL to record after navigation. Prefer the URL the browser settled on
|
|
55
|
+
* when the redirect stayed on this site (`http://apex` → `https://www`).
|
|
56
|
+
* An open redirect to another host keeps the URL we asked for, and its
|
|
57
|
+
* links are not followed.
|
|
58
|
+
*/
|
|
59
|
+
export declare function crawledPageUrl(requested: string, landed: string, scope: string): string;
|
|
60
|
+
/** Record a URL and its scheme/www-insensitive path so the twin is not crawled again. */
|
|
61
|
+
export declare function rememberVisited(visited: Set<string>, url: string): void;
|
|
62
|
+
export declare function wasVisited(visited: ReadonlySet<string>, url: string): boolean;
|
|
23
63
|
export declare function looksLikeAuthUrl(value: string): boolean;
|
|
24
64
|
/** Public form / help / contact / about style link. Auth walls are not surfaces. */
|
|
25
65
|
export declare function isFormSurfaceLink(link: DiscoveredLink): boolean;
|
|
@@ -42,8 +82,9 @@ export declare function pickNextCrawlUrl(queue: CrawlQueueItem[], opts: {
|
|
|
42
82
|
export declare function enqueueLinks(queue: CrawlQueueItem[], visited: ReadonlySet<string>, links: DiscoveredLink[], authUrlsQueued: number, authLimit?: number): number;
|
|
43
83
|
/**
|
|
44
84
|
* Pure stand-in for the explorer loop. `edges` maps a visited URL to the
|
|
45
|
-
* links discovered on that page.
|
|
46
|
-
*
|
|
85
|
+
* links discovered on that page. Off-site links are dropped with the same
|
|
86
|
+
* site rule `explore` uses, so an `http://` apex start whose anchors were
|
|
87
|
+
* rewritten to `https://www` still reaches `/help`.
|
|
47
88
|
*/
|
|
48
89
|
export declare function planCrawlOrder(input: {
|
|
49
90
|
startUrl: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/explorer/queue.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/explorer/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,+FAA+F;AAC/F,eAAO,MAAM,wBAAwB,QAAsB,CAAC;AAC5D,eAAO,MAAM,wBAAwB,QAAsB,CAAC;AAI5D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWtD;AAID;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAU9D;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAK3D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAcpE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CASzF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvF;AAID,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAKvE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAK7E;AAUD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOvD;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAS/D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,GAAG,SAAK,GAAG,cAAc,EAAE,CAYvF;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EAAE,EACvB,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACvE,MAAM,CAQR;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC5B,KAAK,EAAE,cAAc,EAAE,EACvB,cAAc,EAAE,MAAM,EACtB,SAAS,SAAI,GACZ,MAAM,CAaR;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;CACzC,GAAG,MAAM,EAAE,CAyBX"}
|
package/dist/explorer/queue.js
CHANGED
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
* contact form in the header or footer. These helpers keep that BFS, but
|
|
7
7
|
* reserve a few slots for form / help / contact / support / about pages the
|
|
8
8
|
* crawl actually saw. They never invent URLs.
|
|
9
|
+
*
|
|
10
|
+
* Scope is the site. `http://shop.example/` and `https://www.shop.example/help`
|
|
11
|
+
* are the same site. Another subdomain, another host, or another explicit
|
|
12
|
+
* port is not enqueued.
|
|
9
13
|
*/
|
|
10
14
|
const SURFACE_PATH = /(?:^|\/)(contact|contacts|help|support|about|faq|faqs|feedback|quote|enquiries|enquiry|inquiries|inquiry|customer-service|customer-care|get-in-touch|newsletter|subscribe)(?:\/|$|[?#])/i;
|
|
11
15
|
const SURFACE_TEXT = /\b(contact|help|support|about|faq|faqs|feedback|get in touch|customer service|customer care|send (us )?a message|write to us|newsletter|subscribe)\b/i;
|
|
@@ -26,6 +30,119 @@ export function canonicalPageUrl(value) {
|
|
|
26
30
|
return value;
|
|
27
31
|
}
|
|
28
32
|
}
|
|
33
|
+
const CRAWL_ASSET = /\.(png|jpe?g|gif|svg|pdf|zip|ico|webp|avif|mp4|webm)(\?.*)?$/i;
|
|
34
|
+
/**
|
|
35
|
+
* Identity of a page inside one crawl. `www` and the apex host are the same
|
|
36
|
+
* page. `http` and `https` are the same page. An explicit port stays
|
|
37
|
+
* distinct, so `:8080` is not `:80`.
|
|
38
|
+
*
|
|
39
|
+
* This is wider than the runner's HTTP 5xx host check on purpose. A start
|
|
40
|
+
* URL of `http://shop.example/` often redirects to `https://www.shop.example/`,
|
|
41
|
+
* and the crawl has to follow that. A 5xx on a different scheme is still a
|
|
42
|
+
* different listener, so the oracle does not use this key.
|
|
43
|
+
*/
|
|
44
|
+
export function crawlPathKey(value) {
|
|
45
|
+
let url;
|
|
46
|
+
try {
|
|
47
|
+
url = new URL(value);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
if (url.protocol !== 'http:' && url.protocol !== 'https:')
|
|
53
|
+
return undefined;
|
|
54
|
+
const host = url.hostname.replace(/^www\./i, '').toLowerCase();
|
|
55
|
+
const port = url.port ? `:${url.port}` : '';
|
|
56
|
+
let path = url.pathname;
|
|
57
|
+
if (path.length > 1 && path.endsWith('/'))
|
|
58
|
+
path = path.slice(0, -1);
|
|
59
|
+
return `${host}${port}${path}${url.search}`;
|
|
60
|
+
}
|
|
61
|
+
/** True when both URLs are the same path on the same crawl site. */
|
|
62
|
+
export function sameCrawlPage(a, b) {
|
|
63
|
+
if (canonicalPageUrl(a) === canonicalPageUrl(b))
|
|
64
|
+
return true;
|
|
65
|
+
const left = crawlPathKey(a);
|
|
66
|
+
const right = crawlPathKey(b);
|
|
67
|
+
return Boolean(left && left === right);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* True when `href` is an http(s) document on the same site as `scope`.
|
|
71
|
+
* `www` and the apex host match. `http` and `https` match. A non-default
|
|
72
|
+
* port must match. Other subdomains, other hosts, `mailto:`, and common
|
|
73
|
+
* asset types are not crawl targets.
|
|
74
|
+
*/
|
|
75
|
+
export function isSameCrawlSite(href, scope) {
|
|
76
|
+
let target;
|
|
77
|
+
let base;
|
|
78
|
+
try {
|
|
79
|
+
base = new URL(scope);
|
|
80
|
+
target = new URL(href, scope);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
if (!isHttpProtocol(target) || !isHttpProtocol(base))
|
|
86
|
+
return false;
|
|
87
|
+
if (siteHost(target) !== siteHost(base))
|
|
88
|
+
return false;
|
|
89
|
+
if ((target.port || '') !== (base.port || ''))
|
|
90
|
+
return false;
|
|
91
|
+
if (CRAWL_ASSET.test(target.pathname))
|
|
92
|
+
return false;
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Links the explorer may enqueue. Off-site, asset, and non-http URLs are
|
|
97
|
+
* dropped. The returned URL is canonical. Anchor text is kept so a footer
|
|
98
|
+
* "Help" link is still recognised as a form surface.
|
|
99
|
+
*/
|
|
100
|
+
export function linksOnCrawlSite(links, scope) {
|
|
101
|
+
const accepted = [];
|
|
102
|
+
for (const link of links) {
|
|
103
|
+
if (!link.url)
|
|
104
|
+
continue;
|
|
105
|
+
const url = canonicalPageUrl(link.url);
|
|
106
|
+
if (!isSameCrawlSite(url, scope))
|
|
107
|
+
continue;
|
|
108
|
+
accepted.push(link.text ? { url, text: link.text } : { url });
|
|
109
|
+
}
|
|
110
|
+
return accepted;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* URL to record after navigation. Prefer the URL the browser settled on
|
|
114
|
+
* when the redirect stayed on this site (`http://apex` → `https://www`).
|
|
115
|
+
* An open redirect to another host keeps the URL we asked for, and its
|
|
116
|
+
* links are not followed.
|
|
117
|
+
*/
|
|
118
|
+
export function crawledPageUrl(requested, landed, scope) {
|
|
119
|
+
const settled = canonicalPageUrl(landed);
|
|
120
|
+
if (isSameCrawlSite(settled, scope))
|
|
121
|
+
return settled;
|
|
122
|
+
return canonicalPageUrl(requested);
|
|
123
|
+
}
|
|
124
|
+
const SITE_PATH_PREFIX = 'site-path:';
|
|
125
|
+
/** Record a URL and its scheme/www-insensitive path so the twin is not crawled again. */
|
|
126
|
+
export function rememberVisited(visited, url) {
|
|
127
|
+
const canonical = canonicalPageUrl(url);
|
|
128
|
+
visited.add(canonical);
|
|
129
|
+
const key = crawlPathKey(canonical);
|
|
130
|
+
if (key)
|
|
131
|
+
visited.add(`${SITE_PATH_PREFIX}${key}`);
|
|
132
|
+
}
|
|
133
|
+
export function wasVisited(visited, url) {
|
|
134
|
+
const canonical = canonicalPageUrl(url);
|
|
135
|
+
if (visited.has(url) || visited.has(canonical))
|
|
136
|
+
return true;
|
|
137
|
+
const key = crawlPathKey(canonical);
|
|
138
|
+
return Boolean(key && visited.has(`${SITE_PATH_PREFIX}${key}`));
|
|
139
|
+
}
|
|
140
|
+
function isHttpProtocol(url) {
|
|
141
|
+
return url.protocol === 'http:' || url.protocol === 'https:';
|
|
142
|
+
}
|
|
143
|
+
function siteHost(url) {
|
|
144
|
+
return url.hostname.replace(/^www\./i, '').toLowerCase();
|
|
145
|
+
}
|
|
29
146
|
export function looksLikeAuthUrl(value) {
|
|
30
147
|
try {
|
|
31
148
|
const url = new URL(value);
|
|
@@ -93,7 +210,7 @@ export function enqueueLinks(queue, visited, links, authUrlsQueued, authLimit =
|
|
|
93
210
|
let authQueued = authUrlsQueued;
|
|
94
211
|
for (const link of links) {
|
|
95
212
|
const url = canonicalPageUrl(link.url);
|
|
96
|
-
if (!url || visited
|
|
213
|
+
if (!url || wasVisited(visited, url) || queueHas(queue, url))
|
|
97
214
|
continue;
|
|
98
215
|
const auth = looksLikeAuthUrl(url);
|
|
99
216
|
if (auth) {
|
|
@@ -107,8 +224,9 @@ export function enqueueLinks(queue, visited, links, authUrlsQueued, authLimit =
|
|
|
107
224
|
}
|
|
108
225
|
/**
|
|
109
226
|
* Pure stand-in for the explorer loop. `edges` maps a visited URL to the
|
|
110
|
-
* links discovered on that page.
|
|
111
|
-
*
|
|
227
|
+
* links discovered on that page. Off-site links are dropped with the same
|
|
228
|
+
* site rule `explore` uses, so an `http://` apex start whose anchors were
|
|
229
|
+
* rewritten to `https://www` still reaches `/help`.
|
|
112
230
|
*/
|
|
113
231
|
export function planCrawlOrder(input) {
|
|
114
232
|
const start = canonicalPageUrl(input.startUrl);
|
|
@@ -126,18 +244,34 @@ export function planCrawlOrder(input) {
|
|
|
126
244
|
if (index < 0)
|
|
127
245
|
break;
|
|
128
246
|
const next = queue.splice(index, 1)[0];
|
|
129
|
-
if (!next || visited
|
|
247
|
+
if (!next || wasVisited(visited, next.url))
|
|
130
248
|
continue;
|
|
131
|
-
visited
|
|
249
|
+
rememberVisited(visited, next.url);
|
|
132
250
|
order.push(next.url);
|
|
133
251
|
if (isFormSurfaceLink({ url: next.url }))
|
|
134
252
|
surfaceVisited += 1;
|
|
135
|
-
const discovered = (input.edges
|
|
136
|
-
...link,
|
|
137
|
-
url: canonicalPageUrl(link.url),
|
|
138
|
-
}));
|
|
253
|
+
const discovered = linksOnCrawlSite(edgesFor(input.edges, next.url), input.startUrl);
|
|
139
254
|
authUrlsQueued = enqueueLinks(queue, visited, selectOutboundLinks(discovered), authUrlsQueued);
|
|
140
255
|
}
|
|
141
256
|
return order;
|
|
142
257
|
}
|
|
258
|
+
function edgesFor(edges, url) {
|
|
259
|
+
if (edges[url])
|
|
260
|
+
return edges[url];
|
|
261
|
+
const canonical = canonicalPageUrl(url);
|
|
262
|
+
if (edges[canonical])
|
|
263
|
+
return edges[canonical];
|
|
264
|
+
const key = crawlPathKey(url);
|
|
265
|
+
if (!key)
|
|
266
|
+
return [];
|
|
267
|
+
for (const [candidate, links] of Object.entries(edges)) {
|
|
268
|
+
if (crawlPathKey(candidate) === key)
|
|
269
|
+
return links;
|
|
270
|
+
}
|
|
271
|
+
return [];
|
|
272
|
+
}
|
|
273
|
+
function queueHas(queue, url) {
|
|
274
|
+
const key = crawlPathKey(url);
|
|
275
|
+
return queue.some(item => item.url === url || (key !== undefined && crawlPathKey(item.url) === key));
|
|
276
|
+
}
|
|
143
277
|
//# sourceMappingURL=queue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/explorer/queue.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/explorer/queue.ts"],"names":[],"mappings":"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"}
|
package/dist/planner/faults.d.ts
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
* `maxFlows` has room (or by replacing a leftover model flow):
|
|
6
6
|
*
|
|
7
7
|
* 1. one enabled button that is not that form's submit control
|
|
8
|
-
* 2. one same-
|
|
8
|
+
* 2. one same-site link whose target the crawl did not successfully open.
|
|
9
|
+
* `www` and the apex host match, and so do `http` and `https`. Another
|
|
10
|
+
* host or explicit port does not.
|
|
9
11
|
* 3. one disabled button that is not a form submit
|
|
10
12
|
*
|
|
11
13
|
* Deeper pages win over the start URL so a homepage full of nav links does
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"faults.d.ts","sourceRoot":"","sources":["../../src/planner/faults.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"faults.d.ts","sourceRoot":"","sources":["../../src/planner/faults.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAe,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMlE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,GACf,eAAe,CAiBjB"}
|
package/dist/planner/faults.js
CHANGED
|
@@ -5,14 +5,16 @@
|
|
|
5
5
|
* `maxFlows` has room (or by replacing a leftover model flow):
|
|
6
6
|
*
|
|
7
7
|
* 1. one enabled button that is not that form's submit control
|
|
8
|
-
* 2. one same-
|
|
8
|
+
* 2. one same-site link whose target the crawl did not successfully open.
|
|
9
|
+
* `www` and the apex host match, and so do `http` and `https`. Another
|
|
10
|
+
* host or explicit port does not.
|
|
9
11
|
* 3. one disabled button that is not a form submit
|
|
10
12
|
*
|
|
11
13
|
* Deeper pages win over the start URL so a homepage full of nav links does
|
|
12
14
|
* not consume the slot. Nothing is invented: every label and URL comes from
|
|
13
15
|
* `SiteMapPage.controls`.
|
|
14
16
|
*/
|
|
15
|
-
import {
|
|
17
|
+
import { isFormSurfaceLink, isSameCrawlSite, looksLikeAuthUrl, sameCrawlPage } from '../explorer/queue.js';
|
|
16
18
|
import { isReservedFlowId } from './forms.js';
|
|
17
19
|
const NAV_LABEL = /^(home|back|back home|back to home|menu|skip|skip to content|logo)$/i;
|
|
18
20
|
export function ensureFaultSurfaceFlows(flows, siteMap, maxFlows) {
|
|
@@ -35,12 +37,10 @@ export function ensureFaultSurfaceFlows(flows, siteMap, maxFlows) {
|
|
|
35
37
|
return { flows: next.slice(0, maxFlows), added };
|
|
36
38
|
}
|
|
37
39
|
function faultCandidates(siteMap) {
|
|
38
|
-
const start = canonicalPageUrl(siteMap.startUrl);
|
|
39
|
-
const visited = new Set(siteMap.pages.map(page => canonicalPageUrl(page.url)));
|
|
40
40
|
const pages = siteMap.pages.filter(page => !page.authGated && !looksLikeAuthUrl(page.url));
|
|
41
41
|
const ordered = [
|
|
42
|
-
...pages.filter(page =>
|
|
43
|
-
...pages.filter(page =>
|
|
42
|
+
...pages.filter(page => !sameCrawlPage(page.url, siteMap.startUrl)),
|
|
43
|
+
...pages.filter(page => sameCrawlPage(page.url, siteMap.startUrl)),
|
|
44
44
|
];
|
|
45
45
|
const buttons = [];
|
|
46
46
|
const links = [];
|
|
@@ -69,11 +69,12 @@ function faultCandidates(siteMap) {
|
|
|
69
69
|
continue;
|
|
70
70
|
if (NAV_LABEL.test(label))
|
|
71
71
|
continue;
|
|
72
|
-
|
|
72
|
+
const href = control.href;
|
|
73
|
+
if (!href || !isSameCrawlSite(href, page.url))
|
|
73
74
|
continue;
|
|
74
|
-
if (looksLikeAuthUrl(
|
|
75
|
+
if (looksLikeAuthUrl(href))
|
|
75
76
|
continue;
|
|
76
|
-
if (
|
|
77
|
+
if (siteMap.pages.some(seen => sameCrawlPage(seen.url, href)))
|
|
77
78
|
continue;
|
|
78
79
|
seen.add(key);
|
|
79
80
|
links.push(buildCandidate(page, label, 'link'));
|
|
@@ -104,9 +105,8 @@ function buildCandidate(page, label, kind) {
|
|
|
104
105
|
};
|
|
105
106
|
}
|
|
106
107
|
function alreadyCovers(flows, pageUrl, label) {
|
|
107
|
-
const page = canonicalPageUrl(pageUrl);
|
|
108
108
|
const needle = label.toLowerCase();
|
|
109
|
-
return flows.some(flow =>
|
|
109
|
+
return flows.some(flow => sameCrawlPage(flow.startUrl, pageUrl)
|
|
110
110
|
&& flow.steps.some(step => step.action.toLowerCase().includes(needle)));
|
|
111
111
|
}
|
|
112
112
|
/**
|
|
@@ -125,12 +125,4 @@ function lastModelFlow(flows) {
|
|
|
125
125
|
}
|
|
126
126
|
return surfaceFallback;
|
|
127
127
|
}
|
|
128
|
-
function sameOrigin(pageUrl, href) {
|
|
129
|
-
try {
|
|
130
|
-
return new URL(href, pageUrl).origin === new URL(pageUrl).origin;
|
|
131
|
-
}
|
|
132
|
-
catch {
|
|
133
|
-
return false;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
128
|
//# sourceMappingURL=faults.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"faults.js","sourceRoot":"","sources":["../../src/planner/faults.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"faults.js","sourceRoot":"","sources":["../../src/planner/faults.ts"],"names":[],"mappings":"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"}
|
package/dist/planner/forms.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* help exploration. A model flow that only reads such a page is dropped after
|
|
11
11
|
* shop flows, so it survives a full quota.
|
|
12
12
|
*/
|
|
13
|
-
import {
|
|
13
|
+
import { isFormSurfaceLink, looksLikeAuthUrl, sameCrawlPage } from '../explorer/queue.js';
|
|
14
14
|
/** Prefer a POST contact/help form over a header search box. */
|
|
15
15
|
export function scorePublicForm(pageUrl, form) {
|
|
16
16
|
if (looksLikeAuthUrl(pageUrl))
|
|
@@ -56,7 +56,7 @@ export function bestPublicForm(siteMap) {
|
|
|
56
56
|
* Callers still install the grounded flow; this only drops the duplicate.
|
|
57
57
|
*/
|
|
58
58
|
export function flowCoversForm(flow, pageUrl) {
|
|
59
|
-
if (
|
|
59
|
+
if (!sameCrawlPage(flow.startUrl, pageUrl))
|
|
60
60
|
return false;
|
|
61
61
|
const text = flow.steps.map(step => step.action).join(' ').toLowerCase();
|
|
62
62
|
return /\b(submit|send)\b/.test(text);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/planner/forms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/planner/forms.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@monkeytestai/monkeytest-core",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Open-source AI exploratory testing engine. Crawls a real browser with Playwright, plans flows with an LLM, executes with screenshots, and reports deduplicated bugs. Works with OpenAI, Gemini, Anthropic, Mistral, Groq, or any OpenAI-compatible endpoint.",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"author": "MonkeyTest",
|