lasso-mcp 1.18.6 → 1.18.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/ARCHITECTURE.md +1 -1
- package/README.en.md +2 -1
- package/README.md +2 -1
- package/dist/browse/ExpectPoll.js +1 -10
- package/dist/browse/ExpectPoll.js.map +1 -1
- package/dist/browse/StealthEngine.js +1 -10
- package/dist/browse/StealthEngine.js.map +1 -1
- package/dist/browse/cdp-actions.d.ts.map +1 -1
- package/dist/browse/cdp-actions.js +1 -12
- package/dist/browse/cdp-actions.js.map +1 -1
- package/dist/browse/stealth-profiles.d.ts +19 -0
- package/dist/browse/stealth-profiles.d.ts.map +1 -1
- package/dist/browse/stealth-profiles.js +21 -0
- package/dist/browse/stealth-profiles.js.map +1 -1
- package/dist/channels/BraveChannel.d.ts +3 -3
- package/dist/channels/BraveChannel.d.ts.map +1 -1
- package/dist/channels/BraveChannel.js +1 -1
- package/dist/channels/BraveChannel.js.map +1 -1
- package/dist/channels/BrowseChannel.d.ts +24 -0
- package/dist/channels/BrowseChannel.d.ts.map +1 -1
- package/dist/channels/BrowseChannel.js +78 -12
- package/dist/channels/BrowseChannel.js.map +1 -1
- package/dist/channels/HeadlessChannel.d.ts +3 -11
- package/dist/channels/HeadlessChannel.d.ts.map +1 -1
- package/dist/channels/HeadlessChannel.js +4 -14
- package/dist/channels/HeadlessChannel.js.map +1 -1
- package/dist/channels/MachineMcpSearchChannel.d.ts.map +1 -1
- package/dist/channels/MachineMcpSearchChannel.js +12 -5
- package/dist/channels/MachineMcpSearchChannel.js.map +1 -1
- package/dist/doctor/creepjs-probe.js +1 -10
- package/dist/doctor/creepjs-probe.js.map +1 -1
- package/dist/doctor/doctor-cli.js +4 -1
- package/dist/doctor/doctor-cli.js.map +1 -1
- package/dist/doctor/doctor.d.ts +2 -2
- package/dist/doctor/doctor.d.ts.map +1 -1
- package/dist/doctor/doctor.js +4 -2
- package/dist/doctor/doctor.js.map +1 -1
- package/dist/index.js +20 -12
- package/dist/index.js.map +1 -1
- package/dist/search/ContentSecondHop.d.ts +2 -2
- package/dist/search/SearchCache.d.ts +5 -7
- package/dist/search/SearchCache.d.ts.map +1 -1
- package/dist/search/SearchCache.js +13 -17
- package/dist/search/SearchCache.js.map +1 -1
- package/dist/serp/ChangeDetection.d.ts +4 -2
- package/dist/serp/ChangeDetection.d.ts.map +1 -1
- package/dist/serp/ChangeDetection.js +6 -6
- package/dist/serp/ChangeDetection.js.map +1 -1
- package/dist/serp/RecordingStore.d.ts +4 -2
- package/dist/serp/RecordingStore.d.ts.map +1 -1
- package/dist/serp/RecordingStore.js +8 -8
- package/dist/serp/RecordingStore.js.map +1 -1
- package/dist/serp/http-serp.d.ts +2 -2
- package/dist/serp/http-serp.d.ts.map +1 -1
- package/dist/serp/http-serp.js +3 -3
- package/dist/subprocess/SubprocessManager.d.ts +8 -20
- package/dist/subprocess/SubprocessManager.d.ts.map +1 -1
- package/dist/subprocess/SubprocessManager.js +10 -39
- package/dist/subprocess/SubprocessManager.js.map +1 -1
- package/dist/tools/browse.d.ts.map +1 -1
- package/dist/tools/browse.js +7 -6
- package/dist/tools/browse.js.map +1 -1
- package/dist/tools/browserbase.d.ts.map +1 -1
- package/dist/tools/browserbase.js +5 -17
- package/dist/tools/browserbase.js.map +1 -1
- package/dist/tools/descriptions.d.ts.map +1 -1
- package/dist/tools/descriptions.js +12 -12
- package/dist/tools/descriptions.js.map +1 -1
- package/dist/tools/fetch-feed.d.ts +3 -4
- package/dist/tools/fetch-feed.d.ts.map +1 -1
- package/dist/tools/fetch-feed.js +5 -5
- package/dist/tools/fetch-feed.js.map +1 -1
- package/dist/tools/fetch-url.d.ts +6 -7
- package/dist/tools/fetch-url.d.ts.map +1 -1
- package/dist/tools/fetch-url.js +7 -7
- package/dist/tools/fetch-url.js.map +1 -1
- package/dist/tools/network.d.ts +0 -3
- package/dist/tools/network.d.ts.map +1 -1
- package/dist/tools/network.js +4 -5
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/pdf.d.ts +0 -6
- package/dist/tools/pdf.d.ts.map +1 -1
- package/dist/tools/pdf.js +2 -8
- package/dist/tools/pdf.js.map +1 -1
- package/dist/tools/screenshot.d.ts +0 -58
- package/dist/tools/screenshot.d.ts.map +1 -1
- package/dist/tools/screenshot.js +10 -52
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/search.d.ts +1 -1
- package/dist/tools/search.js +1 -1
- package/dist/tools/steel.d.ts.map +1 -1
- package/dist/tools/steel.js +5 -14
- package/dist/tools/steel.js.map +1 -1
- package/dist/tools/wayback.d.ts +3 -4
- package/dist/tools/wayback.d.ts.map +1 -1
- package/dist/tools/wayback.js +5 -5
- package/dist/tools/wayback.js.map +1 -1
- package/dist/types.d.ts +14 -25
- package/dist/types.d.ts.map +1 -1
- package/dist/util/http-pool.d.ts +12 -0
- package/dist/util/http-pool.d.ts.map +1 -0
- package/dist/util/http-pool.js +50 -0
- package/dist/util/http-pool.js.map +1 -0
- package/doc/architecture/02-/345/256/236/346/226/275/346/216/222/346/234/237.md +1 -1
- package/doc/governance/07-/346/226/207/346/241/243/346/237/245/347/274/272/350/241/245/346/274/217/gap-matrix.md +1 -1
- package/doc/testing/01-/345/212/237/350/203/275/346/265/213/350/257/225/346/270/205/345/215/225.md +1 -1
- package/doc/usage/02-TROUBLESHOOTING.md +2 -2
- package/package.json +1 -1
- package/src/browse/ExpectPoll.ts +2 -14
- package/src/browse/StealthEngine.ts +3 -17
- package/src/browse/cdp-actions.ts +7 -23
- package/src/browse/stealth-profiles.ts +22 -0
- package/src/channels/BraveChannel.ts +2 -2
- package/src/channels/BrowseChannel.ts +89 -12
- package/src/channels/HeadlessChannel.ts +4 -14
- package/src/channels/MachineMcpSearchChannel.ts +12 -5
- package/src/doctor/creepjs-probe.ts +2 -16
- package/src/doctor/doctor-cli.ts +4 -4
- package/src/doctor/doctor.ts +4 -3
- package/src/index.ts +20 -15
- package/src/invariants/check-invariants.mjs +73 -18
- package/src/search/ContentSecondHop.ts +2 -2
- package/src/search/SearchCache.ts +15 -26
- package/src/serp/ChangeDetection.ts +6 -7
- package/src/serp/RecordingStore.ts +8 -9
- package/src/serp/http-serp.ts +5 -5
- package/src/subprocess/SubprocessManager.ts +10 -53
- package/src/tools/browse.ts +7 -6
- package/src/tools/browserbase.ts +5 -17
- package/src/tools/descriptions.ts +12 -12
- package/src/tools/fetch-feed.ts +2 -11
- package/src/tools/fetch-url.ts +7 -9
- package/src/tools/network.ts +4 -5
- package/src/tools/pdf.ts +2 -9
- package/src/tools/screenshot.ts +10 -52
- package/src/tools/search.ts +1 -1
- package/src/tools/steel.ts +5 -14
- package/src/tools/wayback.ts +2 -6
- package/src/types.ts +18 -20
- package/src/util/http-pool.ts +66 -0
package/ARCHITECTURE.md
CHANGED
|
@@ -318,7 +318,7 @@ engine=auto(默认)→ 多源扇出(machine_mcp + brave 两 API 源)
|
|
|
318
318
|
| INV 自测 | `inv-selftest.mjs`(`npm run inv-selftest`) | 抽样 INV 做「注入违规 → 必红」复证 | **20 样本**(外部契约类全覆盖;未验证 pin 显性化报告) |
|
|
319
319
|
| TS 单测 | vitest | channel / fallback / forest / doctor / launcher / outline-contract / replay-baseline / stealth / lifecycle / cdp-actions / search-local / content-second-hop / elicitation / extract-refs / quality / http-serp / fetch-feed 等 | **2253 测试**(135 文件;doc/testing/01 ft-round1 门禁两轮独立复跑在档 + doc/governance/08 静默性审计补测) |
|
|
320
320
|
| Rust 单测 | cargo test | ax / applescript / cgevent(+keymap) / screenshot / tcc / windows / protocol / role-map | **207 测试**(cargo test 实跑;rust-helper 自 v1.13 起零改) |
|
|
321
|
-
| 跨平台编译 | cargo check --target | Windows (x86_64-pc-windows-msvc) + Linux (x86_64-unknown-linux-gnu) | CI
|
|
321
|
+
| 跨平台编译 | cargo check --target | Windows (x86_64-pc-windows-msvc) + Linux (x86_64-unknown-linux-gnu) | 本地手测(CI 为 JS 门禁三件套,不含 Rust 步骤) |
|
|
322
322
|
| 录制回放回归 | npm run replay-baseline | fixtures/serp-baseline/ × 三引擎 × 多 query | 12+ fixtures |
|
|
323
323
|
| 故障注入 | vitest | fallback 链 / 限流 / 政策 gate / SERP 改版 | ~20 场景 |
|
|
324
324
|
| 全量功能测试 | doc/testing/01 清单 + ft 执行记录 | 四面板(search / browse / infra / perf)~170 用例真机 | ft-round1 **ALL-CLEAN**(2026-08-18) |
|
package/README.en.md
CHANGED
|
@@ -206,7 +206,7 @@ Goes to the Internet Archive (Wayback Machine) to find the last archived copy of
|
|
|
206
206
|
|
|
207
207
|
## Install
|
|
208
208
|
|
|
209
|
-
**Current version v1.18.
|
|
209
|
+
**Current version v1.18.7** (changelog in the collapsed block at the end of this section).
|
|
210
210
|
|
|
211
211
|
Prerequisites: Node.js ≥ 20 + Claude Code (or any MCP-capable client).
|
|
212
212
|
|
|
@@ -221,6 +221,7 @@ Restart Claude Code → `/mcp` → `lasso ✓ Connected`. **That's the one line
|
|
|
221
221
|
<details>
|
|
222
222
|
<summary>📋 Changelog (v1.8 → v1.18.6 — click to see what each version changed)</summary>
|
|
223
223
|
|
|
224
|
+
- **v1.18.7**: architecture re-review landed (five-dimension checklist with fix loops) — ① browse-family interface honesty: `wait_until` / `timeout_ms` / `screenshot.element` / `stealth_profile` — four **never-effective dead parameters** — removed from tool descriptions and schema (previously silently ignored; docs no longer promise nonexistent behavior; non-breaking — unknown keys are silently stripped); ② four false statements about the CI cargo face corrected in docs; ③ internals: doctor decoupled from channels, firstText single definition, test-only pass-through methods converged (2 new architecture invariants, INV 82→84; tests 2446→2455).
|
|
224
225
|
- **v1.18.6**: external-consumer & hide-enforcement closure — ① a CLI-launched Chrome **is no longer silently reaped after 60 s** (external CDP-direct tools previously died reliably at 60–75 s, e.g. automation workflows); external consumers can also stay alive with one line, `touch ~/.cache/lasso/chrome-touch-<port>`; ② "the hidden Chrome sometimes won't stay hidden" fixed for good — the hidden tier writes the sticky ledger at birth + a standalone enforcer process presses back within ~2 s even with no server alive (self-exits on an empty ledger, leaving nothing resident).
|
|
225
226
|
- **v1.18.5**: release-package cleanup — ① **the npm packages of v1.18.1 ~ v1.18.4 accidentally shipped application-domain files** (intermediate artifacts of a course-scraping project, unrelated to Lasso itself; those versions are deprecated). Do not install them. From this version on the published package contains only Lasso proper; size drops from ~28 MB back to normal.
|
|
226
227
|
- **v1.18.4**: desktop-channel fix — ① previously, when the server was not started from the repo root (e.g. launched by a host such as Claude Code from any directory), all desktop tools failed with `rust_helper_crashed`; the helper path is now resolved from the install location, **works from any directory**; ② startup failures now fail fast with a self-diagnosing message (actual path, cwd, and fix suggestions; missing file / points-to-directory / no-exec-bit / corrupt-binary each get their own wording, failing in seconds instead of hanging); ③ binaries are ad-hoc signed during build (skipped silently on machines without codesign); ④ GitHub CI added (full test suite on every push).
|
package/README.md
CHANGED
|
@@ -215,7 +215,7 @@ macOS 上能控 Finder / Mail / Safari / Notes / 系统设置等任何原生 app
|
|
|
215
215
|
|
|
216
216
|
## 安装
|
|
217
217
|
|
|
218
|
-
**当前版本 v1.18.
|
|
218
|
+
**当前版本 v1.18.7**(更新日志见本节末尾折叠块)。
|
|
219
219
|
|
|
220
220
|
前提:Node.js ≥ 20 + Claude Code(或任何支持 MCP 的客户端)。
|
|
221
221
|
|
|
@@ -230,6 +230,7 @@ claude mcp add lasso -- npx -y lasso-mcp
|
|
|
230
230
|
<details>
|
|
231
231
|
<summary>📋 更新日志(v1.8 → v1.18.6,点开看每版改了什么)</summary>
|
|
232
232
|
|
|
233
|
+
- **v1.18.7**:架构重审落地(03 清单五维+循环修复)——① browse 族接口面诚实化:`wait_until` / `timeout_ms` / `screenshot.element` / `stealth_profile` 四个**从未生效的死参数**从工具描述与 schema 移除(此前传入会被静默忽略,现在文档不再承诺不存在的行为;非破坏——传了也会被静默剥离);② 「隐藏的 Chrome」文档中关于 CI 的四处失实描述改真;③ 内部:doctor 与 channels 解耦、firstText 单一定义、测试穿堂方法收敛(新增 2 条架构不变量,INV 总数 82→84;测试 2446→2455)。
|
|
233
234
|
- **v1.18.6**:外部消费与隐藏执守闭环——① 命令行拉起的 Chrome 默认**不再 60s 被后台静默回收**(外部 CDP 直连工具之前稳定 60-75s 被误杀,如自动化工作流);外部消费者还可用 `touch ~/.cache/lasso/chrome-touch-<端口>` 一行续命;② 「隐藏的 Chrome 有时藏不住」根治——hidden 档出生即写粘滞账 + 独立执守进程兜底(server 不在也 ≤2s 压回,账空自退不留常驻进程)。
|
|
234
235
|
- **v1.18.5**:发布包清理——**v1.18.1 ~ v1.18.4 的 npm 包误含应用域文件**(某课程抓取工程的中间产物,与 lasso 本体功能无关,已弃用),这些版本请勿安装;本版起发布面收敛为 lasso 本体,体积从 ~28MB 降回正常。
|
|
235
236
|
- **v1.18.4**:desktop 通道修复——① 此前 server 不是从仓库根目录启动时(比如由 Claude Code 等宿主在任意目录拉起),desktop 工具会全部报错 `rust_helper_crashed`:现在 helper 路径按安装位置自动解析,**任意目录启动都可用**;② desktop 起不来时的报错从「裸错误码」变成一眼自诊断(附实际路径、当前目录、修复办法;缺文件/指到目录/缺执行权限/文件损坏各说各话,秒级失败不空等);③ 二进制构建时自动 ad-hoc 签名(无签名环境的机器跳过不报错);④ 新增 GitHub CI(每次推送自动跑全量测试)。
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { evalTextValue } from "./upstream-response.js";
|
|
1
|
+
import { evalTextValue, firstText } from "./upstream-response.js";
|
|
2
2
|
// ============================================================
|
|
3
3
|
// 常量
|
|
4
4
|
// ============================================================
|
|
@@ -138,13 +138,4 @@ export function buildConditionExpr(cond) {
|
|
|
138
138
|
function sleep(ms) {
|
|
139
139
|
return new Promise((r) => setTimeout(r, ms));
|
|
140
140
|
}
|
|
141
|
-
function firstText(r) {
|
|
142
|
-
if (!r?.content)
|
|
143
|
-
return undefined;
|
|
144
|
-
for (const b of r.content) {
|
|
145
|
-
if (b.type === "text" && b.text)
|
|
146
|
-
return b.text;
|
|
147
|
-
}
|
|
148
|
-
return undefined;
|
|
149
|
-
}
|
|
150
141
|
//# sourceMappingURL=ExpectPoll.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpectPoll.js","sourceRoot":"","sources":["../../src/browse/ExpectPoll.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"ExpectPoll.js","sourceRoot":"","sources":["../../src/browse/ExpectPoll.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { logger } from "../util/logger.js";
|
|
2
|
-
import { evalTextValue } from "./upstream-response.js";
|
|
2
|
+
import { evalTextValue, firstText } from "./upstream-response.js";
|
|
3
3
|
import { STEALTH_PROFILES, STEALTH_INJECTION_SCRIPT, CLOUDFLARE_DETECTION_SCRIPT, CLOUDFLARE_DETECTION_REGEX, } from "./stealth-profiles.js";
|
|
4
4
|
// ============================================================
|
|
5
5
|
// StealthEngine
|
|
@@ -241,13 +241,4 @@ export function buildUserAgentOverrideScript(profile) {
|
|
|
241
241
|
} catch (e) {}
|
|
242
242
|
}`;
|
|
243
243
|
}
|
|
244
|
-
function firstText(r) {
|
|
245
|
-
if (!r?.content)
|
|
246
|
-
return undefined;
|
|
247
|
-
for (const b of r.content) {
|
|
248
|
-
if (b.type === "text" && b.text)
|
|
249
|
-
return b.text;
|
|
250
|
-
}
|
|
251
|
-
return undefined;
|
|
252
|
-
}
|
|
253
244
|
//# sourceMappingURL=StealthEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StealthEngine.js","sourceRoot":"","sources":["../../src/browse/StealthEngine.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"StealthEngine.js","sourceRoot":"","sources":["../../src/browse/StealthEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp-actions.d.ts","sourceRoot":"","sources":["../../src/browse/cdp-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cdp-actions.d.ts","sourceRoot":"","sources":["../../src/browse/cdp-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM/D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB;IAClC,wEAAwE;;IAExE;;;;;OAKG;;IAEH,+BAA+B;;IAE/B;;;OAGG;;IAEH,qEAAqE;;EAErE,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAInE,CAAC;AAuBH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,KAAK,CACzB,CAAC,EAAE,SAAS,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAsChC;AAKD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,SAAS,CAC7B,CAAC,EAAE,SAAS,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAiChC;AAED,uDAAuD;AACvD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAqBD;AAKD;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAC7B,CAAC,EAAE,SAAS,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAgBhC;AAED,+CAA+C;AAC/C,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5D,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAuBD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { firstText } from "./upstream-response.js";
|
|
1
2
|
// ============================================================
|
|
2
3
|
// 顶级 const:chrome-devtools-mcp 上游工具名集中表(parse6 §4.4 决策)
|
|
3
4
|
// ============================================================
|
|
@@ -243,16 +244,4 @@ export function parseConsoleMessageLines(text) {
|
|
|
243
244
|
}
|
|
244
245
|
return out;
|
|
245
246
|
}
|
|
246
|
-
// ============================================================
|
|
247
|
-
// helper:firstText(与 BrowseChannel.ts 同构)
|
|
248
|
-
// ============================================================
|
|
249
|
-
function firstText(r) {
|
|
250
|
-
if (!r?.content)
|
|
251
|
-
return undefined;
|
|
252
|
-
for (const b of r.content) {
|
|
253
|
-
if (b.type === "text" && b.text)
|
|
254
|
-
return b.text;
|
|
255
|
-
}
|
|
256
|
-
return undefined;
|
|
257
|
-
}
|
|
258
247
|
//# sourceMappingURL=cdp-actions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp-actions.js","sourceRoot":"","sources":["../../src/browse/cdp-actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cdp-actions.js","sourceRoot":"","sources":["../../src/browse/cdp-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
* 铁律(parse5 §3.3 + INV-30,类比 INV-14 / INV-27 anti-gaming):
|
|
7
7
|
* - 本文件**只放顶级 const 数据**:STEALTH_PROFILES / STEALTH_INJECTION_SCRIPT /
|
|
8
8
|
* CLOUDFLARE_DETECTION_SCRIPT / CLOUDFLARE_CHALLENGE_MARKERS。
|
|
9
|
+
* (例外:defaultHeadlessProfileForHost()——3 行纯选择函数,review-r1 自
|
|
10
|
+
* HeadlessChannel.ts 迁入;仍只读 process.platform,不触 env/config。)
|
|
9
11
|
* - **不从 config / env / ProviderRegistry 读**(防 LLM 通过 channel 改 env 绕过)。
|
|
10
12
|
* - 加新 profile = 加 STEALTH_PROFILES 一行(≤2 处改动守 02 §4)。
|
|
11
13
|
*
|
|
@@ -184,6 +186,23 @@ export declare const STEALTH_PROFILES: {
|
|
|
184
186
|
export type StealthProfileName = keyof typeof STEALTH_PROFILES;
|
|
185
187
|
/** profile 名清单(白盒供 test 遍历 + doctor 自检)。 */
|
|
186
188
|
export declare const STEALTH_PROFILE_NAMES: StealthProfileName[];
|
|
189
|
+
/**
|
|
190
|
+
* v1.12(round2 T2-1):宿主平台对齐的默认 stealth profile。
|
|
191
|
+
*
|
|
192
|
+
* darwin → mac_chrome:chrome-devtools-mcp 1.7.0 不暴露 setExtraHTTPHeaders,
|
|
193
|
+
* 低熵 client hints(sec-ch-ua-platform)发宿主真值——windows profile 在 mac
|
|
194
|
+
* 宿主上产生「UA 称 Windows、hints 招供 macOS」的 OS 级 shape 矛盾(round2-browser
|
|
195
|
+
* E1 实测)。非 darwin → windows_chrome_120(Windows 宿主自洽;Linux 宿主为已知
|
|
196
|
+
* 残余矛盾,round2-verdict T2-1 记档)。
|
|
197
|
+
*
|
|
198
|
+
* 构造期确定性选择(process.platform 只读),非 env/config 可配——不触 INV-30
|
|
199
|
+
* anti-gaming 面(profile 数据本体仍在 stealth-profiles.ts 顶级 const)。
|
|
200
|
+
*
|
|
201
|
+
* 2026-08-31(review-r1):从 channels/HeadlessChannel.ts 迁入本文件(StealthProfileName
|
|
202
|
+
* 的定义处)——消除 doctor → channels 的唯一 value 依赖(doctor 与 channels 保持单向:
|
|
203
|
+
* 组合根实例化只在 doctor-cli.ts / index.ts)。
|
|
204
|
+
*/
|
|
205
|
+
export declare function defaultHeadlessProfileForHost(): StealthProfileName;
|
|
187
206
|
/**
|
|
188
207
|
* 16 路反检测注入脚本(CORE 3 路 + 12 路 vendored evasion;join 成单字符串)。
|
|
189
208
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stealth-profiles.d.ts","sourceRoot":"","sources":["../../src/browse/stealth-profiles.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stealth-profiles.d.ts","sourceRoot":"","sources":["../../src/browse/stealth-profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAkBH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGsB,CAAC;AAEpD,2EAA2E;AAC3E,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAE/D,4CAA4C;AAC5C,eAAO,MAAM,qBAAqB,EAE7B,kBAAkB,EAAE,CAAC;AAE1B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,6BAA6B,IAAI,kBAAkB,CAElE;AA8ED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,QAczB,CAAC;AAKb;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,4BAA4B,qHAM/B,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,QAWtC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,QAGtC,CAAC"}
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
* 铁律(parse5 §3.3 + INV-30,类比 INV-14 / INV-27 anti-gaming):
|
|
7
7
|
* - 本文件**只放顶级 const 数据**:STEALTH_PROFILES / STEALTH_INJECTION_SCRIPT /
|
|
8
8
|
* CLOUDFLARE_DETECTION_SCRIPT / CLOUDFLARE_CHALLENGE_MARKERS。
|
|
9
|
+
* (例外:defaultHeadlessProfileForHost()——3 行纯选择函数,review-r1 自
|
|
10
|
+
* HeadlessChannel.ts 迁入;仍只读 process.platform,不触 env/config。)
|
|
9
11
|
* - **不从 config / env / ProviderRegistry 读**(防 LLM 通过 channel 改 env 绕过)。
|
|
10
12
|
* - 加新 profile = 加 STEALTH_PROFILES 一行(≤2 处改动守 02 §4)。
|
|
11
13
|
*
|
|
@@ -161,6 +163,25 @@ export const STEALTH_PROFILES = {
|
|
|
161
163
|
};
|
|
162
164
|
/** profile 名清单(白盒供 test 遍历 + doctor 自检)。 */
|
|
163
165
|
export const STEALTH_PROFILE_NAMES = Object.keys(STEALTH_PROFILES);
|
|
166
|
+
/**
|
|
167
|
+
* v1.12(round2 T2-1):宿主平台对齐的默认 stealth profile。
|
|
168
|
+
*
|
|
169
|
+
* darwin → mac_chrome:chrome-devtools-mcp 1.7.0 不暴露 setExtraHTTPHeaders,
|
|
170
|
+
* 低熵 client hints(sec-ch-ua-platform)发宿主真值——windows profile 在 mac
|
|
171
|
+
* 宿主上产生「UA 称 Windows、hints 招供 macOS」的 OS 级 shape 矛盾(round2-browser
|
|
172
|
+
* E1 实测)。非 darwin → windows_chrome_120(Windows 宿主自洽;Linux 宿主为已知
|
|
173
|
+
* 残余矛盾,round2-verdict T2-1 记档)。
|
|
174
|
+
*
|
|
175
|
+
* 构造期确定性选择(process.platform 只读),非 env/config 可配——不触 INV-30
|
|
176
|
+
* anti-gaming 面(profile 数据本体仍在 stealth-profiles.ts 顶级 const)。
|
|
177
|
+
*
|
|
178
|
+
* 2026-08-31(review-r1):从 channels/HeadlessChannel.ts 迁入本文件(StealthProfileName
|
|
179
|
+
* 的定义处)——消除 doctor → channels 的唯一 value 依赖(doctor 与 channels 保持单向:
|
|
180
|
+
* 组合根实例化只在 doctor-cli.ts / index.ts)。
|
|
181
|
+
*/
|
|
182
|
+
export function defaultHeadlessProfileForHost() {
|
|
183
|
+
return process.platform === "darwin" ? "mac_chrome" : "windows_chrome_120";
|
|
184
|
+
}
|
|
164
185
|
// ============================================================
|
|
165
186
|
// STEALTH_INJECTION_SCRIPT 顶级 const(parse5 §3.3.1 + v1.5 parse13 §3.1 16 路)
|
|
166
187
|
// ============================================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stealth-profiles.js","sourceRoot":"","sources":["../../src/browse/stealth-profiles.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stealth-profiles.js","sourceRoot":"","sources":["../../src/browse/stealth-profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,7 +53,7 @@ export interface BraveOpts {
|
|
|
53
53
|
export declare const BRAVE_FRESHNESS_MAP: Record<string, string>;
|
|
54
54
|
/**
|
|
55
55
|
* 注入式 HTTP client,便于测试 mock fetch。
|
|
56
|
-
*
|
|
56
|
+
* util/http-pool acquireHttpClient 返回 keep-alive 版;测试返 vi.fn().
|
|
57
57
|
*/
|
|
58
58
|
export interface BraveHttpClient {
|
|
59
59
|
fetch: typeof fetch;
|
|
@@ -63,7 +63,7 @@ export declare class BraveChannel extends BaseChannel {
|
|
|
63
63
|
private readonly endpoint;
|
|
64
64
|
/** 多 Key 池账本(INV-10:禁直读 env,必须经 ledger)。 */
|
|
65
65
|
private readonly ledger;
|
|
66
|
-
/** HTTP client(注入,便于测试 mock;生产走
|
|
66
|
+
/** HTTP client(注入,便于测试 mock;生产走 util/http-pool acquireHttpClient)。 */
|
|
67
67
|
private readonly httpClient;
|
|
68
68
|
readonly name = "search.brave";
|
|
69
69
|
constructor(
|
|
@@ -71,7 +71,7 @@ export declare class BraveChannel extends BaseChannel {
|
|
|
71
71
|
endpoint: string,
|
|
72
72
|
/** 多 Key 池账本(INV-10:禁直读 env,必须经 ledger)。 */
|
|
73
73
|
ledger: QuotaLedger,
|
|
74
|
-
/** HTTP client(注入,便于测试 mock;生产走
|
|
74
|
+
/** HTTP client(注入,便于测试 mock;生产走 util/http-pool acquireHttpClient)。 */
|
|
75
75
|
httpClient: BraveHttpClient);
|
|
76
76
|
isAvailable(): Promise<boolean>;
|
|
77
77
|
status(): Promise<ChannelStatus>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BraveChannel.d.ts","sourceRoot":"","sources":["../../src/channels/BraveChannel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,MAAM,EACN,cAAc,EAEd,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAQ7D,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CAC/C;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKtD,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,KAAK,CAAC;CACrB;AAKD,qBAAa,YAAa,SAAQ,WAAW;IAIzC,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,4CAA4C;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,
|
|
1
|
+
{"version":3,"file":"BraveChannel.d.ts","sourceRoot":"","sources":["../../src/channels/BraveChannel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,MAAM,EACN,cAAc,EAEd,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAQ7D,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CAC/C;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKtD,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,KAAK,CAAC;CACrB;AAKD,qBAAa,YAAa,SAAQ,WAAW;IAIzC,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,4CAA4C;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,UAAU;IAR7B,QAAQ,CAAC,IAAI,kBAAkB;;IAG7B,yEAAyE;IACxD,QAAQ,EAAE,MAAM;IACjC,4CAA4C;IAC3B,MAAM,EAAE,WAAW;IACpC,sEAAsE;IACrD,UAAU,EAAE,eAAe;IAKxC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAK/B,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC;IA2BhC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAOpC;;;OAGG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YAmF1B,UAAU;CAoDzB;AAKD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,CAkBxE"}
|
|
@@ -59,7 +59,7 @@ export class BraveChannel extends BaseChannel {
|
|
|
59
59
|
endpoint,
|
|
60
60
|
/** 多 Key 池账本(INV-10:禁直读 env,必须经 ledger)。 */
|
|
61
61
|
ledger,
|
|
62
|
-
/** HTTP client(注入,便于测试 mock;生产走
|
|
62
|
+
/** HTTP client(注入,便于测试 mock;生产走 util/http-pool acquireHttpClient)。 */
|
|
63
63
|
httpClient) {
|
|
64
64
|
super();
|
|
65
65
|
this.endpoint = endpoint;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BraveChannel.js","sourceRoot":"","sources":["../../src/channels/BraveChannel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAS/C,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAiB3C;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACzD,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;CACX,CAAC;AAUF,+DAA+D;AAC/D,eAAe;AACf,+DAA+D;AAC/D,MAAM,OAAO,YAAa,SAAQ,WAAW;IAKxB;IAEA;IAEA;IARV,IAAI,GAAG,cAAc,CAAC;IAE/B;IACE,yEAAyE;IACxD,QAAgB;IACjC,4CAA4C;IAC3B,MAAmB;IACpC,
|
|
1
|
+
{"version":3,"file":"BraveChannel.js","sourceRoot":"","sources":["../../src/channels/BraveChannel.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,8 +82,32 @@ export declare abstract class BrowseChannel extends UiChannel {
|
|
|
82
82
|
/**
|
|
83
83
|
* W2-DEF-N1 的执行体(P6 v1.18.1 抽出以便自愈重试原样复跑):
|
|
84
84
|
* NAV_FIRST 采集类 action 先导航,再跑 handler。
|
|
85
|
+
*
|
|
86
|
+
* review-r3 F3:导航的 final_url 透传进 handler 结果(`partial.final_url ??
|
|
87
|
+
* navFinalUrl`)——此前 nav-first 路径丢弃 nav 返回,browseSingle 兜底
|
|
88
|
+
* `partial.final_url ?? url` 回显请求 url(重定向后即伪造)。
|
|
89
|
+
*
|
|
90
|
+
* review-r3 F3(blank-gated nav-first):snapshot/extract 只在**会话页仍空白**
|
|
91
|
+
* (本 client 生命周期从未导航 → 恒 about:blank)时先导航——兑现工具契约
|
|
92
|
+
* 「url (required) 定向采集」(descriptions:extract — full-page text
|
|
93
|
+
* extraction)。已导航会话保持「作用于当前页」语义(T-BROWSE-33 记录的设计):
|
|
94
|
+
* navigate → click → extract 的点击后观察态不被回灌导航破坏;interact_observe/
|
|
95
|
+
* act(@pN) 经 InteractDispatcher 也走本路径,同享此保证。
|
|
85
96
|
*/
|
|
86
97
|
private dispatchAction;
|
|
98
|
+
/**
|
|
99
|
+
* review-r3 F3:FRESH_PAGE_NAV_ACTIONS 命中 + 本 client 会话从未导航(当前页
|
|
100
|
+
* = 上游新开空白页,L3 实证:此时单发 extract/snapshot 返 about:blank 空内容
|
|
101
|
+
* + outcome=worked)+ url 非占位 about:blank(forest 调度器缺 subtitle 时的
|
|
102
|
+
* 兜底值,无可导航目标)→ 返 true 需先导航。
|
|
103
|
+
*/
|
|
104
|
+
private needsFreshPageNav;
|
|
105
|
+
/**
|
|
106
|
+
* review-r3 F3:已导航会话集(WeakSet——上游 respawn 换 McpClient 实例自动
|
|
107
|
+
* 重置为「空白」,fresh-page 门控重新生效)。单一写者(dispatchAction),
|
|
108
|
+
* 不构成共享 mutable state 耦合面。
|
|
109
|
+
*/
|
|
110
|
+
private readonly navSeenClients;
|
|
87
111
|
/**
|
|
88
112
|
* P6(v1.18.1,得到实战问题集 P6):"No page selected" 零页面自愈钩子。
|
|
89
113
|
* 默认 false(HeadlessChannel 上游自管浏览器无 0-page 形态,行为零变化);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowseChannel.d.ts","sourceRoot":"","sources":["../../src/channels/BrowseChannel.ts"],"names":[],"mappings":"AAqCA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,MAAM,EACN,cAAc,EAEf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAiC5E;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,aAAa,KAChB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AAcpC,8BAAsB,aAAc,SAAQ,SAAS;IACnD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B,wDAAwD;IACxD,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAErD;;;;;;OAMG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;IAOhC;;;;;;;;OAQG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,6BAkB9B;IAEH;;;;;;;;OAQG;cACa,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE;;;;;;OAMG;cACa,aAAa,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAEhE;;;OAGG;IACH,OAAO,CAAC,YAAY;IAUpB;;;;OAIG;IACH,SAAS,CAAC,eAAe,IAAI,MAAM;IAInC,qDAAqD;IAC/C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC;IAWhC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAOpC;;;;;;;;;OASG;IACG,MAAM,CACV,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IAoDxC;;OAEG;IACH
|
|
1
|
+
{"version":3,"file":"BrowseChannel.d.ts","sourceRoot":"","sources":["../../src/channels/BrowseChannel.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@ import { expectPoll, } from "../browse/ExpectPoll.js";
|
|
|
42
42
|
import { StepEngine } from "../browse/StepEngine.js";
|
|
43
43
|
import { BudgetTracker, DEFAULT_CHAIN_BUDGET_MS, clampChainBudgetMs } from "../fallback/BudgetTracker.js";
|
|
44
44
|
import { applyOutputEnvelope } from "../util/output-envelope.js";
|
|
45
|
-
import { parseEvalResult, imageBlock, firstText
|
|
45
|
+
import { parseEvalResult, imageBlock, firstText, } from "../browse/upstream-response.js";
|
|
46
46
|
// v0.5 M0.5b/M0.5c(parse6 §2.1 + §3.3.3 + §3.4.2):doPdf + doConsole + doNetwork
|
|
47
47
|
// 追加进 actionDispatch Map
|
|
48
48
|
// INV-33 守:pdf + console + network 三 action 必经 dispatch Map,禁第二套 dispatch
|
|
@@ -234,15 +234,52 @@ export class BrowseChannel extends UiChannel {
|
|
|
234
234
|
/**
|
|
235
235
|
* W2-DEF-N1 的执行体(P6 v1.18.1 抽出以便自愈重试原样复跑):
|
|
236
236
|
* NAV_FIRST 采集类 action 先导航,再跑 handler。
|
|
237
|
+
*
|
|
238
|
+
* review-r3 F3:导航的 final_url 透传进 handler 结果(`partial.final_url ??
|
|
239
|
+
* navFinalUrl`)——此前 nav-first 路径丢弃 nav 返回,browseSingle 兜底
|
|
240
|
+
* `partial.final_url ?? url` 回显请求 url(重定向后即伪造)。
|
|
241
|
+
*
|
|
242
|
+
* review-r3 F3(blank-gated nav-first):snapshot/extract 只在**会话页仍空白**
|
|
243
|
+
* (本 client 生命周期从未导航 → 恒 about:blank)时先导航——兑现工具契约
|
|
244
|
+
* 「url (required) 定向采集」(descriptions:extract — full-page text
|
|
245
|
+
* extraction)。已导航会话保持「作用于当前页」语义(T-BROWSE-33 记录的设计):
|
|
246
|
+
* navigate → click → extract 的点击后观察态不被回灌导航破坏;interact_observe/
|
|
247
|
+
* act(@pN) 经 InteractDispatcher 也走本路径,同享此保证。
|
|
237
248
|
*/
|
|
238
249
|
async dispatchAction(c, action, url, options, handler) {
|
|
239
|
-
if (NAV_FIRST_ACTIONS.has(action)
|
|
250
|
+
if (NAV_FIRST_ACTIONS.has(action) ||
|
|
251
|
+
this.needsFreshPageNav(c, action, url)) {
|
|
240
252
|
const nav = this.actionDispatch.get("navigate");
|
|
253
|
+
let navFinalUrl;
|
|
241
254
|
if (nav)
|
|
242
|
-
await nav(c, url, options);
|
|
255
|
+
navFinalUrl = (await nav(c, url, options)).final_url;
|
|
256
|
+
this.navSeenClients.add(c);
|
|
257
|
+
const partial = await handler(c, url, options);
|
|
258
|
+
return { ...partial, final_url: partial.final_url ?? navFinalUrl };
|
|
243
259
|
}
|
|
244
|
-
|
|
260
|
+
const partial = await handler(c, url, options);
|
|
261
|
+
// navigate 自身成功后才标记会话已导航(失败不标——下次 snapshot/extract 仍门控导航)
|
|
262
|
+
if (action === "navigate")
|
|
263
|
+
this.navSeenClients.add(c);
|
|
264
|
+
return partial;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* review-r3 F3:FRESH_PAGE_NAV_ACTIONS 命中 + 本 client 会话从未导航(当前页
|
|
268
|
+
* = 上游新开空白页,L3 实证:此时单发 extract/snapshot 返 about:blank 空内容
|
|
269
|
+
* + outcome=worked)+ url 非占位 about:blank(forest 调度器缺 subtitle 时的
|
|
270
|
+
* 兜底值,无可导航目标)→ 返 true 需先导航。
|
|
271
|
+
*/
|
|
272
|
+
needsFreshPageNav(c, action, url) {
|
|
273
|
+
return (FRESH_PAGE_NAV_ACTIONS.has(action) &&
|
|
274
|
+
url !== "about:blank" &&
|
|
275
|
+
!this.navSeenClients.has(c));
|
|
245
276
|
}
|
|
277
|
+
/**
|
|
278
|
+
* review-r3 F3:已导航会话集(WeakSet——上游 respawn 换 McpClient 实例自动
|
|
279
|
+
* 重置为「空白」,fresh-page 门控重新生效)。单一写者(dispatchAction),
|
|
280
|
+
* 不构成共享 mutable state 耦合面。
|
|
281
|
+
*/
|
|
282
|
+
navSeenClients = new WeakSet();
|
|
246
283
|
/**
|
|
247
284
|
* P6(v1.18.1,得到实战问题集 P6):"No page selected" 零页面自愈钩子。
|
|
248
285
|
* 默认 false(HeadlessChannel 上游自管浏览器无 0-page 形态,行为零变化);
|
|
@@ -781,7 +818,8 @@ async function verifyNavigatedPage(c, navText) {
|
|
|
781
818
|
async function doSnapshot(c, _url, _opts) {
|
|
782
819
|
const r = (await c.callTool("take_snapshot", {}));
|
|
783
820
|
const { title, text } = extractSnapshot(r);
|
|
784
|
-
|
|
821
|
+
// review-r3 F3:final_url = a11y 树里的真实页面 URL(miss → browseSingle 兜底)
|
|
822
|
+
return { title, preview: text, final_url: extractRootWebAreaUrl(text) };
|
|
785
823
|
}
|
|
786
824
|
async function doScreenshot(c, _url, opts) {
|
|
787
825
|
// W1-DEF-3(v1.8):chrome-devtools-mcp@0.3.0 take_screenshot 无 filePath 参数
|
|
@@ -833,7 +871,11 @@ async function doExtract(c, _url, opts) {
|
|
|
833
871
|
// v1.0 路径 byte-identical:take_snapshot → a11y 文本树
|
|
834
872
|
const r = (await c.callTool("take_snapshot", {}));
|
|
835
873
|
const { title, text } = extractSnapshot(r);
|
|
836
|
-
|
|
874
|
+
// review-r3 F3:final_url 诚实化(同 doSnapshot——a11y 树真实页面 URL)
|
|
875
|
+
const fu = extractRootWebAreaUrl(text);
|
|
876
|
+
return includeRefs
|
|
877
|
+
? { title, preview: text, ignored_include_refs: true, final_url: fu }
|
|
878
|
+
: { title, preview: text, final_url: fu };
|
|
837
879
|
}
|
|
838
880
|
// ---------- markdown / markdown_cited 档(v1.1 新增) ----------
|
|
839
881
|
// 取渲染后 HTML(evaluate_script 注入 document.documentElement.outerHTML)。
|
|
@@ -883,6 +925,9 @@ async function doExtract(c, _url, opts) {
|
|
|
883
925
|
return {
|
|
884
926
|
title: mdResult.title ?? parsed.title ?? undefined,
|
|
885
927
|
preview,
|
|
928
|
+
// review-r3 F3:markdown 档 evaluate 已抓 window.location.href——透传为
|
|
929
|
+
// final_url(真实页面 URL,不回显未被消费的请求 url)
|
|
930
|
+
final_url: parsed.url || undefined,
|
|
886
931
|
// markdown 专属元数据(v1.1 扩展;raw 档不填,v1.0 调用方不读)
|
|
887
932
|
...(mdResult.byline ? { byline: mdResult.byline } : {}),
|
|
888
933
|
...(mdResult.citations ? { citations: mdResult.citations } : {}),
|
|
@@ -1052,13 +1097,24 @@ function extractSnapshot(r) {
|
|
|
1052
1097
|
const firstLine = txt.split("\n", 1)[0]?.trim();
|
|
1053
1098
|
return { title: firstLine || undefined, text: txt };
|
|
1054
1099
|
}
|
|
1100
|
+
/**
|
|
1101
|
+
* review-r3 F3:从 a11y 文本树解析真实页面 URL。chrome-devtools-mcp snapshot
|
|
1102
|
+
* 的 RootWebArea 行带 url="..."(L3 真机实证两种形态:带 title
|
|
1103
|
+
* `RootWebArea "Example Domain" url="https://..."` 与裸 `RootWebArea url="..."`;
|
|
1104
|
+
* about:blank 场景可检出——r3 空内容缺陷的取证信号)。
|
|
1105
|
+
* 宽松匹配 + miss 返 undefined(格式漂移时退回 browseSingle 的 `?? url` 兜底,
|
|
1106
|
+
* 不新增失败模式)。用途:snapshot/raw extract 的 final_url 诚实化——不再回显
|
|
1107
|
+
* 未被消费的请求 url 伪装成已导航。
|
|
1108
|
+
*/
|
|
1109
|
+
function extractRootWebAreaUrl(snapshotText) {
|
|
1110
|
+
const m = snapshotText.match(/RootWebArea(?:\s+"[^"]*")?\s+url="([^"]*)"/);
|
|
1111
|
+
return m ? m[1] : undefined;
|
|
1112
|
+
}
|
|
1055
1113
|
function extractEvalPreview(r) {
|
|
1056
1114
|
return firstText(r) ?? "(no eval output)";
|
|
1057
1115
|
}
|
|
1058
|
-
// W1-DEF-1b(v1.8):firstText
|
|
1059
|
-
|
|
1060
|
-
return upstreamFirstText(r);
|
|
1061
|
-
}
|
|
1116
|
+
// W1-DEF-1b(v1.8):firstText 直接 import 自 upstream-response 适配器
|
|
1117
|
+
// (单一权威解析入口;r1 收敛:删除本地委托包装,全仓唯一定义)
|
|
1062
1118
|
// ============================================================
|
|
1063
1119
|
// 工具
|
|
1064
1120
|
// ============================================================
|
|
@@ -1095,10 +1151,20 @@ export function truncatePreviewKeepingRefs(s) {
|
|
|
1095
1151
|
* - timeout / 429 / 5xx / 网络错 → unknown
|
|
1096
1152
|
* action 名拼错不在这里出现(browse() 提前 didnt 返回)。
|
|
1097
1153
|
*/
|
|
1098
|
-
// W2-DEF-N1(v1.8.1):这些 URL 驱动的采集 action
|
|
1154
|
+
// W2-DEF-N1(v1.8.1):这些 URL 驱动的采集 action **无条件**先导航——
|
|
1099
1155
|
// browseSingle 先 navigate 再 dispatch(工具注释自 v0.5 起就承诺「URL → navigate + X」,
|
|
1100
|
-
// v1.8.1 补上真实导航)。
|
|
1156
|
+
// v1.8.1 补上真实导航)。wait/click 等保持原语义(作用于当前页)。
|
|
1101
1157
|
const NAV_FIRST_ACTIONS = new Set(["network", "screenshot", "pdf"]);
|
|
1158
|
+
// review-r3 F3:URL 驱动但**会话语义敏感**的采集 action——只在会话页仍空白时
|
|
1159
|
+
// 先导航(needsFreshPageNav 门控),已导航会话作用于当前页。理由:
|
|
1160
|
+
// - snapshot/extract 是工具默认 action + descriptions 承诺 URL 定向——空白会话
|
|
1161
|
+
// 单发返 about:blank 空内容 + worked + final_url 回显请求 url(L3 真机 ×6 实证,
|
|
1162
|
+
// 生产实例同病),是必修缺陷;
|
|
1163
|
+
// - 但它们同时是「观察当前页」的合法用法(navigate → click → extract 看
|
|
1164
|
+
// 点击后状态;interact_observe/act(@pN) 经 InteractDispatcher 走同一
|
|
1165
|
+
// dispatchAction)——无条件 nav-first 会把 root 注册 URL 回灌导航、破坏
|
|
1166
|
+
// 观察态(r3 原提案的反证,故收敛为空白门控)。
|
|
1167
|
+
const FRESH_PAGE_NAV_ACTIONS = new Set(["snapshot", "extract"]);
|
|
1102
1168
|
function classifyBrowseError(msg, _action) {
|
|
1103
1169
|
const m = msg.toLowerCase();
|
|
1104
1170
|
if (m.includes("needs_manual_2fa"))
|