lasso-mcp 1.9.0 → 1.13.0
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.en.md +5 -0
- package/README.md +11 -4
- package/dist/browse/StealthEngine.d.ts +36 -4
- package/dist/browse/StealthEngine.d.ts.map +1 -1
- package/dist/browse/StealthEngine.js +38 -5
- package/dist/browse/StealthEngine.js.map +1 -1
- package/dist/browse/cdp-actions.d.ts +52 -40
- package/dist/browse/cdp-actions.d.ts.map +1 -1
- package/dist/browse/cdp-actions.js +115 -94
- package/dist/browse/cdp-actions.js.map +1 -1
- package/dist/browse/markdown-extractor.d.ts +7 -0
- package/dist/browse/markdown-extractor.d.ts.map +1 -1
- package/dist/browse/markdown-extractor.js +32 -9
- package/dist/browse/markdown-extractor.js.map +1 -1
- package/dist/browse/stealth-evasions/ua-client-hints.d.ts +1 -1
- package/dist/browse/stealth-evasions/ua-client-hints.d.ts.map +1 -1
- package/dist/browse/stealth-evasions/ua-client-hints.js +2 -1
- package/dist/browse/stealth-evasions/ua-client-hints.js.map +1 -1
- package/dist/browse/stealth-profiles.d.ts +43 -12
- package/dist/browse/stealth-profiles.d.ts.map +1 -1
- package/dist/browse/stealth-profiles.js +74 -25
- package/dist/browse/stealth-profiles.js.map +1 -1
- package/dist/channels/BingChannel.d.ts +6 -0
- package/dist/channels/BingChannel.d.ts.map +1 -1
- package/dist/channels/BingChannel.js +10 -2
- package/dist/channels/BingChannel.js.map +1 -1
- package/dist/channels/BraveChannel.d.ts +10 -0
- package/dist/channels/BraveChannel.d.ts.map +1 -1
- package/dist/channels/BraveChannel.js +15 -2
- package/dist/channels/BraveChannel.js.map +1 -1
- package/dist/channels/BrowseChannel.d.ts.map +1 -1
- package/dist/channels/BrowseChannel.js +13 -7
- package/dist/channels/BrowseChannel.js.map +1 -1
- package/dist/channels/BrowserbaseChannel.d.ts.map +1 -1
- package/dist/channels/BrowserbaseChannel.js +5 -1
- package/dist/channels/BrowserbaseChannel.js.map +1 -1
- package/dist/channels/DesktopChannel.d.ts +11 -0
- package/dist/channels/DesktopChannel.d.ts.map +1 -1
- package/dist/channels/DesktopChannel.js +103 -9
- package/dist/channels/DesktopChannel.js.map +1 -1
- package/dist/channels/HeadlessChannel.d.ts +21 -2
- package/dist/channels/HeadlessChannel.d.ts.map +1 -1
- package/dist/channels/HeadlessChannel.js +47 -10
- package/dist/channels/HeadlessChannel.js.map +1 -1
- package/dist/channels/LoggedInChannel.d.ts +25 -1
- package/dist/channels/LoggedInChannel.d.ts.map +1 -1
- package/dist/channels/LoggedInChannel.js +71 -1
- package/dist/channels/LoggedInChannel.js.map +1 -1
- package/dist/channels/MachineMcpSearchChannel.d.ts +7 -1
- package/dist/channels/MachineMcpSearchChannel.d.ts.map +1 -1
- package/dist/channels/MachineMcpSearchChannel.js +7 -0
- package/dist/channels/MachineMcpSearchChannel.js.map +1 -1
- package/dist/channels/SearchChannel.d.ts +10 -0
- package/dist/channels/SearchChannel.d.ts.map +1 -1
- package/dist/channels/SearchChannel.js +14 -0
- package/dist/channels/SearchChannel.js.map +1 -1
- package/dist/channels/StagehandChannel.d.ts +8 -5
- package/dist/channels/StagehandChannel.d.ts.map +1 -1
- package/dist/channels/StagehandChannel.js +8 -5
- package/dist/channels/StagehandChannel.js.map +1 -1
- package/dist/channels/SteelChannel.d.ts +17 -1
- package/dist/channels/SteelChannel.d.ts.map +1 -1
- package/dist/channels/SteelChannel.js +19 -3
- package/dist/channels/SteelChannel.js.map +1 -1
- package/dist/config/config.d.ts +37 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +73 -1
- package/dist/config/config.js.map +1 -1
- package/dist/desktop/AxBackend.d.ts +20 -8
- package/dist/desktop/AxBackend.d.ts.map +1 -1
- package/dist/desktop/AxBackend.js +45 -12
- package/dist/desktop/AxBackend.js.map +1 -1
- package/dist/desktop/AxProvider.d.ts +17 -11
- package/dist/desktop/AxProvider.d.ts.map +1 -1
- package/dist/desktop/AxProvider.js +61 -14
- package/dist/desktop/AxProvider.js.map +1 -1
- package/dist/desktop/CGEventProvider.d.ts +31 -2
- package/dist/desktop/CGEventProvider.d.ts.map +1 -1
- package/dist/desktop/CGEventProvider.js +102 -8
- package/dist/desktop/CGEventProvider.js.map +1 -1
- package/dist/desktop/OutlineMapper.d.ts.map +1 -1
- package/dist/desktop/OutlineMapper.js +2 -0
- package/dist/desktop/OutlineMapper.js.map +1 -1
- package/dist/desktop/ScreenshotVlmProvider.d.ts +45 -1
- package/dist/desktop/ScreenshotVlmProvider.d.ts.map +1 -1
- package/dist/desktop/ScreenshotVlmProvider.js +287 -14
- package/dist/desktop/ScreenshotVlmProvider.js.map +1 -1
- package/dist/desktop/desktop-doctor-checks.d.ts +1 -1
- package/dist/desktop/desktop-doctor-checks.d.ts.map +1 -1
- package/dist/desktop/desktop-doctor-checks.js +59 -2
- package/dist/desktop/desktop-doctor-checks.js.map +1 -1
- package/dist/desktop/desktop-types.d.ts +65 -1
- package/dist/desktop/desktop-types.d.ts.map +1 -1
- package/dist/desktop/desktop-types.js +14 -2
- package/dist/desktop/desktop-types.js.map +1 -1
- package/dist/doctor/creepjs-probe.d.ts.map +1 -1
- package/dist/doctor/creepjs-probe.js +3 -2
- package/dist/doctor/creepjs-probe.js.map +1 -1
- package/dist/doctor/doctor-cli.d.ts.map +1 -1
- package/dist/doctor/doctor-cli.js +3 -2
- package/dist/doctor/doctor-cli.js.map +1 -1
- package/dist/doctor/doctor.d.ts +12 -5
- package/dist/doctor/doctor.d.ts.map +1 -1
- package/dist/doctor/doctor.js +170 -34
- package/dist/doctor/doctor.js.map +1 -1
- package/dist/index.js +70 -9
- package/dist/index.js.map +1 -1
- package/dist/launcher/chrome-hide.d.ts +31 -0
- package/dist/launcher/chrome-hide.d.ts.map +1 -0
- package/dist/launcher/chrome-hide.js +62 -0
- package/dist/launcher/chrome-hide.js.map +1 -0
- package/dist/launcher/chrome-idle-reaper.d.ts +67 -0
- package/dist/launcher/chrome-idle-reaper.d.ts.map +1 -0
- package/dist/launcher/chrome-idle-reaper.js +119 -0
- package/dist/launcher/chrome-idle-reaper.js.map +1 -0
- package/dist/launcher/chrome-ledger.d.ts +11 -0
- package/dist/launcher/chrome-ledger.d.ts.map +1 -1
- package/dist/launcher/chrome-ledger.js +6 -0
- package/dist/launcher/chrome-ledger.js.map +1 -1
- package/dist/launcher/launch-chrome.d.ts +56 -3
- package/dist/launcher/launch-chrome.d.ts.map +1 -1
- package/dist/launcher/launch-chrome.js +210 -50
- package/dist/launcher/launch-chrome.js.map +1 -1
- package/dist/logged-in/CdpClient.d.ts +14 -0
- package/dist/logged-in/CdpClient.d.ts.map +1 -1
- package/dist/logged-in/CdpClient.js +31 -0
- package/dist/logged-in/CdpClient.js.map +1 -1
- package/dist/logged-in/TabSession.d.ts +6 -0
- package/dist/logged-in/TabSession.d.ts.map +1 -1
- package/dist/logged-in/TabSession.js +8 -0
- package/dist/logged-in/TabSession.js.map +1 -1
- package/dist/runtime/ToolManager.d.ts +26 -1
- package/dist/runtime/ToolManager.d.ts.map +1 -1
- package/dist/runtime/ToolManager.js +72 -1
- package/dist/runtime/ToolManager.js.map +1 -1
- package/dist/search/SearchCache.d.ts +8 -6
- package/dist/search/SearchCache.d.ts.map +1 -1
- package/dist/search/SearchCache.js +17 -13
- package/dist/search/SearchCache.js.map +1 -1
- package/dist/serp/SelectorRegistry.d.ts +1 -1
- package/dist/serp/SelectorRegistry.js +2 -2
- package/dist/serp/SelectorRegistry.js.map +1 -1
- package/dist/serp/SerpHealthMonitor.d.ts +2 -1
- package/dist/serp/SerpHealthMonitor.d.ts.map +1 -1
- package/dist/serp/SerpHealthMonitor.js +2 -1
- package/dist/serp/SerpHealthMonitor.js.map +1 -1
- package/dist/serp/extract.d.ts +28 -14
- package/dist/serp/extract.d.ts.map +1 -1
- package/dist/serp/extract.js +79 -11
- package/dist/serp/extract.js.map +1 -1
- package/dist/serp/selectors.d.ts +13 -5
- package/dist/serp/selectors.d.ts.map +1 -1
- package/dist/serp/selectors.js +24 -16
- package/dist/serp/selectors.js.map +1 -1
- package/dist/subprocess/McpClient.js +1 -1
- package/dist/subprocess/SubprocessManager.d.ts +13 -2
- package/dist/subprocess/SubprocessManager.d.ts.map +1 -1
- package/dist/subprocess/SubprocessManager.js +13 -2
- package/dist/subprocess/SubprocessManager.js.map +1 -1
- package/dist/tools/annotations.d.ts +3 -3
- package/dist/tools/annotations.js +3 -3
- package/dist/tools/descriptions.d.ts.map +1 -1
- package/dist/tools/descriptions.js +48 -22
- package/dist/tools/descriptions.js.map +1 -1
- package/dist/tools/desktop.d.ts.map +1 -1
- package/dist/tools/desktop.js +37 -1
- package/dist/tools/desktop.js.map +1 -1
- package/dist/tools/fetch-url.d.ts.map +1 -1
- package/dist/tools/fetch-url.js +2 -0
- package/dist/tools/fetch-url.js.map +1 -1
- package/dist/tools/network.d.ts +12 -10
- package/dist/tools/network.d.ts.map +1 -1
- package/dist/tools/network.js +14 -15
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/search.d.ts +14 -2
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +34 -8
- package/dist/tools/search.js.map +1 -1
- package/dist/types.d.ts +13 -5
- package/dist/types.d.ts.map +1 -1
- package/doc/17-/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/resource-sampling.json +19 -0
- package/doc/17-/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v1-launch.json +8 -0
- package/doc/17-/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v1-screen.png +0 -0
- package/doc/17-/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v3-idle-reap.json +79 -0
- package/doc/17-/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v3-idle-reap.mjs +61 -0
- package/doc/17-/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v3b-a5-and-stop.json +44 -0
- package/doc/17-/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v3b-a5-and-stop.mjs +52 -0
- package/doc/17-/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v5-silent-tab.json +72 -0
- package/doc/17-/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v5-silent-tab.mjs +84 -0
- package/doc/17-/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v6-headless.json +2 -0
- package/doc/17-/346/211/247/350/241/214/350/256/260/345/275/225/v1x-silent-verify.md +126 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/00-/346/200/273/347/273/223.md +194 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-arch.md +101 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-browser.md +117 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-desktop.md +141 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-implementation.md +110 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-manual-test-checklist.md +78 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-review03.md +110 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-search.md +83 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-smoke-headless.mjs +90 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-verdict.md +252 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round2-arch.md +114 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round2-browser.md +135 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round2-desktop.md +130 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round2-manual-test-checklist.md +73 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round2-review03.md +147 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round2-search.md +109 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round2-verdict.md +263 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round3-arch.md +110 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round3-browser.md +123 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round3-desktop.md +109 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round3-review03.md +136 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round3-search.md +93 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round3-verdict.md +141 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round4-arch.md +98 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round4-browser.md +123 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round4-desktop.md +81 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round4-review03.md +128 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round4-search.md +102 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round4-verdict.md +85 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round5-arch.md +96 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round5-browser.md +126 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round5-desktop.md +90 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round5-search.md +115 -0
- package/doc/19-/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round5-verdict.md +77 -0
- package/doc/KEY-GUIDE.md +6 -1
- package/doc/TROUBLESHOOTING.md +46 -0
- package/package.json +3 -2
- package/src/browse/StealthEngine.ts +39 -5
- package/src/browse/cdp-actions.ts +145 -97
- package/src/browse/markdown-extractor.ts +38 -9
- package/src/browse/stealth-evasions/ua-client-hints.ts +2 -1
- package/src/browse/stealth-profiles.ts +85 -28
- package/src/channels/BingChannel.ts +13 -0
- package/src/channels/BraveChannel.ts +20 -0
- package/src/channels/BrowseChannel.ts +13 -7
- package/src/channels/BrowserbaseChannel.ts +5 -1
- package/src/channels/DesktopChannel.ts +103 -9
- package/src/channels/HeadlessChannel.ts +47 -11
- package/src/channels/LoggedInChannel.ts +68 -0
- package/src/channels/MachineMcpSearchChannel.ts +14 -0
- package/src/channels/SearchChannel.ts +20 -0
- package/src/channels/StagehandChannel.ts +8 -5
- package/src/channels/SteelChannel.ts +29 -2
- package/src/config/config.ts +95 -1
- package/src/desktop/AxBackend.ts +79 -10
- package/src/desktop/AxProvider.ts +75 -15
- package/src/desktop/CGEventProvider.ts +139 -10
- package/src/desktop/OutlineMapper.ts +2 -0
- package/src/desktop/ScreenshotVlmProvider.ts +323 -15
- package/src/desktop/desktop-doctor-checks.ts +63 -2
- package/src/desktop/desktop-types.ts +88 -4
- package/src/doctor/creepjs-probe.ts +3 -2
- package/src/doctor/doctor-cli.ts +6 -2
- package/src/doctor/doctor.ts +195 -38
- package/src/index.ts +78 -7
- package/src/invariants/check-invariants.mjs +292 -27
- package/src/launcher/chrome-hide.ts +81 -0
- package/src/launcher/chrome-idle-reaper.ts +152 -0
- package/src/launcher/chrome-ledger.ts +18 -0
- package/src/launcher/launch-chrome.ts +232 -48
- package/src/logged-in/CdpClient.ts +31 -0
- package/src/logged-in/TabSession.ts +9 -0
- package/src/runtime/ToolManager.ts +78 -2
- package/src/search/SearchCache.ts +17 -9
- package/src/serp/SelectorRegistry.ts +3 -3
- package/src/serp/SerpHealthMonitor.ts +2 -1
- package/src/serp/extract.ts +92 -12
- package/src/serp/selectors.ts +25 -17
- package/src/subprocess/McpClient.ts +1 -1
- package/src/subprocess/SubprocessManager.ts +13 -2
- package/src/tools/annotations.ts +3 -3
- package/src/tools/descriptions.ts +48 -22
- package/src/tools/desktop.ts +37 -1
- package/src/tools/fetch-url.ts +2 -0
- package/src/tools/network.ts +19 -18
- package/src/tools/search.ts +34 -6
- package/src/types.ts +14 -5
- package/vitest.workspace.ts +4 -0
package/README.en.md
CHANGED
|
@@ -40,6 +40,7 @@ Twin star of [media-gen-mcp](https://github.com/wangdong233/media-gen-mcp) (the
|
|
|
40
40
|
| You say …… | You get |
|
|
41
41
|
|---|---|
|
|
42
42
|
| "Search for the latest on the rust async ecosystem" | Structured search results (auto-switches to the next engine if one is down — you don't feel a thing) |
|
|
43
|
+
| "Search Claude Code updates from the last week" (v1.11) | Time-filtered results via `freshness=week` — no hand-written dates in the query |
|
|
43
44
|
| "Grab the text of the github.com homepage" | Clean article text (nav bars / ads / clutter stripped — saves 30–70% on tokens) |
|
|
44
45
|
| "Open my logged-in Jira and show my to-dos" | A snapshot of the logged-in page (reuses your local Chrome; you handle 2FA yourself) |
|
|
45
46
|
| "This link is dead, find an archive" | The most recent snapshot from the Internet Archive |
|
|
@@ -189,6 +190,8 @@ Goes to the Internet Archive (Wayback Machine) to find the last archived copy of
|
|
|
189
190
|
|
|
190
191
|
## Install
|
|
191
192
|
|
|
193
|
+
**Current version v1.11.0** (the "everything grab handle" implementation gap closed: **desktop goes from observe-only to full act** — `desktop` click/type/scroll now really execute (AXAPI semantic clicks + write-then-read-back verification + honest stale-ref errors), plus coordinate mouse actions (drag/wheel/move as canvas/Electron fallback) and a `skeleton` tree-pruning option (big token savings on dense apps); **driver layer upgraded chrome-devtools-mcp 0.3.0 → 1.7.0** (11 months / 57 releases of fixes; launch-level stealth UA/viewport; upstream telemetry explicitly disabled); **search gained a `freshness` time filter** (day/week/month/year passed through to all three engines — no more hand-writing dates into queries for news/release tracking); the zero-key English fallback switched from Baidu to DuckDuckGo; new `LASSO_PROXY` browser egress proxy (affects headless/cloud browsers only — your logged-in Chrome's egress stays untouched).)
|
|
194
|
+
|
|
192
195
|
**Prerequisites**: Node.js ≥ 20; Claude Code (or any MCP-capable client).
|
|
193
196
|
|
|
194
197
|
```bash
|
|
@@ -269,6 +272,8 @@ Key names match what's written in the table above — just fill them in. Save th
|
|
|
269
272
|
lasso launch-chrome
|
|
270
273
|
```
|
|
271
274
|
|
|
275
|
+
Since v1.10 this Chrome launches **silently by default**: zero window, no focus stealing, always muted — it works in the background while you keep typing in the foreground (the only visible trace is one extra Chrome icon in the Dock / taskbar). Want to watch it work? Use `lasso launch-chrome --mode visible`. While the Lasso server is running, this Chrome also **closes itself ~60s after its last use** ("done-when-used-up", tunable via `LASSO_LAUNCH_IDLE_MS`; set `300000` to restore the 5-minute behavior, `0` to disable). You can always close it manually with `lasso chrome-stop` — it only kills Chromes Lasso itself launched (pid ownership verified), never yours.
|
|
276
|
+
|
|
272
277
|
After that, say "open my logged-in Jira" to Claude and it'll connect automatically.
|
|
273
278
|
|
|
274
279
|
> 🔴 **Red line**: 2FA / SMS codes / CAPTCHA / magic links — Lasso never solves these for you. You must manually pass them once in your local Chrome.
|
package/README.md
CHANGED
|
@@ -40,10 +40,12 @@
|
|
|
40
40
|
| 你说 …… | 你得到 |
|
|
41
41
|
|---|---|
|
|
42
42
|
| 「搜一下 rust async 生态最新动态」 | 结构化搜索结果(某家临时挂掉自动换下一家,你无感) |
|
|
43
|
-
|
|
|
43
|
+
| 「搜最近一周 Claude Code 的更新」(v1.11) | 按 `freshness=week` 过滤的时效结果——不用往查询词里手写日期 |
|
|
44
|
+
| 「抓一下 github.com 首页文字」 | 干净正文(自动剥掉导航 / 广告 / 冗余,省 30–70% 字数;28 个高频站点走专用抽取器、表格不丢结构——v1.12) |
|
|
44
45
|
| 「打开我已登录的 Jira 看看待办」 | 登录态页面快照(复用你本机 Chrome,2FA 你自己解) |
|
|
45
46
|
| 「这个链接打不开了,找找存档」 | 互联网档案馆最近一份快照 |
|
|
46
|
-
| 「把 Finder 当前窗口的文件列出来」 |
|
|
47
|
+
| 「把 Finder 当前窗口的文件列出来」 | 桌面上的窗口和控件列表(语义树,非截图;树被截断会明说 `truncated:true`——v1.12) |
|
|
48
|
+
| 「点一下那个新建文件夹按钮」「在搜索框里输入 XX」(v1.11) | 桌面动作真实执行(AXAPI 语义点击/输入 + 结果验证;canvas/Electron 自动降级坐标点击) |
|
|
47
49
|
| 「把这一页截个整页长图」「存成 PDF」 | 落盘的文件路径(不会把一大坨图片数据塞进对话) |
|
|
48
50
|
| 「这个页面加载了哪些第三方跟踪」 | 资源列表 + 跟踪域名计数 |
|
|
49
51
|
| 「列一下我现在能控的所有窗口和网页」 | 一个统一清单(网页和桌面窗口都在里面) |
|
|
@@ -190,7 +192,7 @@ macOS 上能控 Finder / Mail / Safari / Notes / 系统设置等任何原生 app
|
|
|
190
192
|
|
|
191
193
|
## 安装
|
|
192
194
|
|
|
193
|
-
**当前版本 v1.
|
|
195
|
+
**当前版本 v1.13.0**(v1.13 实施层调优 7 项(最优性审查第 3 轮):**无头浏览器语言指纹一致**——HTTP `Accept-Language` 头现随 stealth 档案下发(此前发宿主真值,中文机器上配英文档案会露出「头 zh-CN ↔ 页面 en-US」的自相矛盾);`navigator.languages` 同步改为档案感知;**VLM 截图带区域时的落点修复**——`screenshot_region` 场景下 VLM 推断坐标自动换算回全屏坐标(此前系统性偏移一个区域原点的距离、还报成功);**`desktop find` 拒绝纯 ref 查询**——`where` 只认 text/role,纯 ref 查询诚实报 invalid_params(此前静默退化成全树命中,token 爆炸还装成功);**退出更快更稳**——Steel 会话释放加 3 秒上界(自托管 Steel 停摆时 CC 退出不再最长卡 5 分钟);VLM 档遇 macOS 输入合成权限缺失时明确报「需要授权」而非含糊失败;v1.12 实施层调优 14 项(最优性审查第 2 轮):**markdown 抽取双激活**——defuddle 站点专用抽取器(HN/Reddit/GitHub/Wikipedia/Substack/Medium 等 28 站)+ 表格/数学结构保真转换(GFM 表格不再丢结构;相对链接自动绝对化;输出可能含 Obsidian 方言如 `==高亮==`、`[^N]` 脚注);**无头浏览器默认指纹与宿主系统对齐**——macOS 上默认 macOS Chrome 指纹(消除「UA 说 Windows、client hints 招供 macOS」的矛盾,doctor 会提示与已装 Chrome 的版本偏差);**桌面链尾诚实化**——VLM 截图推断不再谎报成功(能执行则真执行、不能则诚实 unknown)、`wait/expect` 需连续两次命中才算(加载闪现元素不再假成功)、`snapshot` 截断时顶层 `truncated:true`、`find` 命中节点附可执行动作清单;**Electron 输入框修复**——吞 AXSetValue 的控件(Slack/VSCode 等)type 自动降级为「聚焦 + 键盘合成」(ASCII);**拖拽变可用**——按下 200ms + 12 点插值轨迹 + 沉淀 100ms(滑条/拖拽排序从大概率失败变可用);**freshness 全链一致**——machine_mcp 与 DuckDuckGo 兜底不再静默丢弃时效参数;CC 异常退出时 Lasso 进程即时收尾(此前最长悬挂 1 小时);v1.11「全交互抓手」实施维度补齐:**桌面从「能看」变「能点」**——`desktop` 的 click/type/scroll 真正落地(AXAPI 语义点击 + 写后读回验证 + 过期引用诚实报错),并新增坐标鼠标动作(拖拽/滚轮/移动,canvas/Electron 兜底)和 `skeleton` 树剪枝(密集应用 token 大幅下降);**驱动层升级 chrome-devtools-mcp 0.3.0 → 1.7.0**(11 个月 57 版红利;启动级反检测 UA/视口;已默认关闭上游遥测);**search 新增 `freshness` 时效过滤**(day/week/month/year 透传全部引擎,查新闻/版本动向不再往查询词里手写日期);英文查询的零 Key 兜底从百度换成 DuckDuckGo;新增 `LASSO_PROXY` 浏览器出口代理(只影响无头/云浏览器,登录态 Chrome 出口不动);v1.10 浏览器默认静默 + 用完即关:`launch-chrome` 默认零窗口零打扰启动(macOS/Windows 适配,`--mode visible` 可回退)、恒带后台反节流与静音、server 运行期最后使用后 ~60 秒自动关闭(`LASSO_LAUNCH_IDLE_MS` 可调,5 分钟语义配 300000 保留);v1.9 补上浏览器生命周期收尾:无头浏览器空闲 5 分钟自动回收、`lasso chrome-stop` 按台账关闭 Lasso 起的 Chrome、`tab_restore` 恢复你原来的 tab 列表——见上文「用完怎么收尾」;v1.8 修复了 wave1 全量实测暴露的 24 条缺陷:上游 chrome-devtools-mcp@0.3.0 契约适配、截图真实落盘、launch-chrome 探活、caller-tier 配额接线、`read_text` 续页工具等——完整清单见 [doc/17-功能测试清单.md](doc/17-功能测试清单.md) 的「v1.8 修复记录」)。
|
|
194
196
|
|
|
195
197
|
**前提**:Node.js ≥ 20;Claude Code(或任何支持 MCP 的客户端)。
|
|
196
198
|
|
|
@@ -278,17 +280,21 @@ lasso launch-chrome
|
|
|
278
280
|
|
|
279
281
|
启动后 Lasso 会自动探活调试端口(`curl /json/version` 级验证):Chrome 没起来 / 端口被占会**明确报错**,不再「返回成功但其实连不上」。想复用某个已有 profile 目录可以 `lasso launch-chrome --profile <目录>`。
|
|
280
282
|
|
|
283
|
+
**v1.10 起默认「静默干活」**:这个 Chrome **零窗口启动、不抢你的键盘/窗口焦点、永远静音**——你在前台写代码,它在后台抓页面,互不打扰(唯一可感知的残留是 Dock / 任务栏多一个 Chrome 图标,这是操作系统层面去不掉的)。想看着它干活用 `lasso launch-chrome --mode visible`(或在 `~/.lasso/config.json` 配 `"LASSO_LAUNCH_MODE": "visible"`)。
|
|
284
|
+
|
|
281
285
|
之后对 Claude 说「打开我已登录的 Jira」就会自动连上。
|
|
282
286
|
|
|
283
287
|
> 🔴 **红线**:2FA / 短信验证码 / CAPTCHA / 邮件魔法链接——Lasso 不替你解,必须你在本机 Chrome 里手动过一次。
|
|
284
288
|
|
|
285
|
-
**用完怎么收尾(v1.
|
|
289
|
+
**用完怎么收尾(v1.10 起基本不用你管)**:server 运行期间,这个 Chrome **最后一次被使用后约 60 秒内自动关闭**(用完即关,不用等、不用记着关)。想调阈值:`LASSO_LAUNCH_IDLE_MS=300000` 回退 5 分钟、`=1000` 逼近瞬时(代价是间隔稍长的操作要付 ~11 秒重冷启动)、`=0` 禁用自动关。单次长任务放行用 `lasso launch-chrome --idle-ms 3600000`。任何时候也可以手动关(只关 Lasso 自己起的、验证过归属的那个,不会误伤你手动开的浏览器):
|
|
286
290
|
|
|
287
291
|
```bash
|
|
288
292
|
lasso chrome-stop # 关台账里所有 Lasso 起的 Chrome
|
|
289
293
|
lasso chrome-stop --port 9222 # 只关指定端口的那个
|
|
290
294
|
```
|
|
291
295
|
|
|
296
|
+
> 诚实边界:单独跑 `lasso launch-chrome`(不经 server)时没有 idle 自动关,出口仍是 `chrome-stop`;`browse_logged_in` 连**你自己开的可见 Chrome** 是「低打扰,非零打扰」(macOS 上游平台级限制,个别操作可能抢一次焦点)——要纯静默就用 lasso 自己起的 hidden 档或 `browse_headless`;`desktop` 通道模拟真人键鼠,**设计上就占用物理键鼠**,没有静默形态。
|
|
297
|
+
|
|
292
298
|
`browse_logged_in` 在你的 Chrome 里新开的 tab,任务结束后说一句 `admin {action:"tab_restore", reason:"任务完成"}` 就会关掉 Lasso 开的 tab、恢复你原来的 tab 列表(server 退出时也会自动做)。无头浏览器则默认 **5 分钟没人用就自动回收**,不再常驻占内存——高频连用想省冷启动,配 `LASSO_HEADLESS_IDLE_MS=3600000`(1 小时);配 `0` 完全禁用。
|
|
293
299
|
|
|
294
300
|
**详见** → [Key 配置指南 · 登录态浏览](./doc/KEY-GUIDE.md#b-登录态浏览命令行配置无-key)。
|
|
@@ -360,6 +366,7 @@ Steel 用 Docker 一行启动:`docker run -p 3000:3000 -p 9223:9223 ghcr.io/st
|
|
|
360
366
|
- 给登录 cookie 加一个自己的加密口令(不设则走 macOS 钥匙串)
|
|
361
367
|
- 落盘搜索结果快照(做回归测试用)
|
|
362
368
|
- 调无头浏览器空闲自动回收时间(`LASSO_HEADLESS_IDLE_MS`,默认 5 分钟;配 `0` 禁用)
|
|
369
|
+
- 调 launch-chrome 起的 Chrome「用完即关」时间(`LASSO_LAUNCH_IDLE_MS`,默认 60 秒;配 `300000` 回退 5 分钟、`0` 禁用)或切回可见启动(`LASSO_LAUNCH_MODE=visible`)
|
|
363
370
|
- 设 Steel 自托管云浏览器端点(`STEEL_ENDPOINT`,如 `http://localhost:3000`;需同时开 `LASSO_ALLOW_CLOUD_BROWSER=true` 才启用)
|
|
364
371
|
|
|
365
372
|
完整变量清单和默认值见 [Key 配置指南 · 高级调优](./doc/KEY-GUIDE.md#e-高级调优可选全不配)。**Surge / Clash 等 TUN 代理网络(fake-ip,`198.18.0.0/15`)与 `127.0.0.1`(本机 Chrome CDP 调试端口用)都已内置放行**,无需额外配置——这是设计行为,不是漏配。
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* (Argus 范式,F3.4.6 政策红线)
|
|
24
24
|
*/
|
|
25
25
|
import type { McpClient } from "../subprocess/McpClient.js";
|
|
26
|
-
import { type StealthProfileName } from "./stealth-profiles.js";
|
|
26
|
+
import { type StealthProfileName, type StealthProfile } from "./stealth-profiles.js";
|
|
27
27
|
export declare class StealthEngine {
|
|
28
28
|
/**
|
|
29
29
|
* 在 navigate 前注入 stealth profile(CDP methods 直调 + evaluate_script)。
|
|
@@ -31,7 +31,8 @@ export declare class StealthEngine {
|
|
|
31
31
|
* v1.5 流程(parse13 §3.1 + §4.5):
|
|
32
32
|
* 1. profile 校验(未知 profile 名 → throw;caller catch 走 didnt)
|
|
33
33
|
* 2. evaluate_script(buildUserAgentOverrideScript) → navigator.userAgent / platform /
|
|
34
|
-
* language 改写(**先执行**,使后续 UA client hints 能读到正确 Chrome
|
|
34
|
+
* language / languages 改写(**先执行**,使后续 UA client hints 能读到正确 Chrome
|
|
35
|
+
* 版本;languages 自 T3-1 profile 感知,与 language 同源同值)
|
|
35
36
|
* 3. evaluate_script(STEALTH_INJECTION_SCRIPT 16 路) → webdriver / languages / permissions /
|
|
36
37
|
* chrome.runtime/app/csi/loadTimes / plugins / vendor / hardwareConcurrency / media.codecs /
|
|
37
38
|
* webgl.vendor / iframe.contentWindow / outerdimensions / userAgentData(brands 版本与
|
|
@@ -43,8 +44,12 @@ export declare class StealthEngine {
|
|
|
43
44
|
* (secChUa / secFetch* / accept*)已定义在 StealthProfile 顶级 const(INV-30),供后续
|
|
44
45
|
* chrome-devtools-mcp 暴露 header 注入工具时直用。
|
|
45
46
|
*
|
|
46
|
-
* 注:viewport
|
|
47
|
-
*
|
|
47
|
+
* 注:viewport 经 chrome-devtools-mcp 启动 flag `--viewport=` 控制(HeadlessChannel
|
|
48
|
+
* spec 构造期拼入);timezone **无启动 flag**(上游 1.7.0 CLI 32 项无此选项,
|
|
49
|
+
* Chrome 亦无此开关)——profile.timezone 是档案字段、无行为消费,页面 Intl
|
|
50
|
+
* 跟随宿主(与宿主 IP 自洽的诚实形态);StealthEngine 不在这里设。
|
|
51
|
+
* (T3-5 round3 注释归真:此前「--window-size / --timezone」双失实已修正——
|
|
52
|
+
* 真实 flag 名是 --viewport=,且 spec 从无 timezone flag。)
|
|
48
53
|
*
|
|
49
54
|
* @param client McpClient(chrome-devtools-mcp connection)
|
|
50
55
|
* @param profileName STEALTH_PROFILES 顶级 const 的 key
|
|
@@ -97,4 +102,31 @@ export declare class StealthEngine {
|
|
|
97
102
|
* (会产生 `() => { () => ... }` 的非法语句)。
|
|
98
103
|
*/
|
|
99
104
|
export declare function toFnExpression(script: string): string;
|
|
105
|
+
/**
|
|
106
|
+
* T3-1(round3 v1.13):profile.language → navigator.languages 值。
|
|
107
|
+
*
|
|
108
|
+
* 真实浏览器 navigator.languages 与 navigator.language / Accept-Language 头
|
|
109
|
+
* 同源同值(主标签在前 + 主子标签兜底)——旧 CORE 硬编码 ["en-US","en"] 在
|
|
110
|
+
* zh-CN 宿主 / 非 en-US profile 下产生「头 zh-CN ↔ JS en-US」的自然不可能形状
|
|
111
|
+
* (与 T2-1 所修 OS 矛盾同族)。派生规则:[language, language 的主子标签]。
|
|
112
|
+
*
|
|
113
|
+
* @returns 恰好 2 元素(真实浏览器同款形状;acceptLanguage 主 token 与此一致)
|
|
114
|
+
*/
|
|
115
|
+
export declare function profileLanguages(language: string): [string, string];
|
|
116
|
+
/**
|
|
117
|
+
* 构造 navigator.userAgent / platform / language / languages override 注入脚本。
|
|
118
|
+
*
|
|
119
|
+
* 设计:脚本是纯字符串拼装(无副作用),profile 字段经 JSON.stringify
|
|
120
|
+
* 转义防注入(profile 是顶级 const 数据,本就是 trusted,但仍走 JSON.stringify
|
|
121
|
+
* 守编码正确性 —— 守 02 §4 简单性:用对的语言做对的事)。
|
|
122
|
+
*
|
|
123
|
+
* T3-1(round3 v1.13):navigator.languages 从 CORE_STEALTH_SCRIPT #2 硬编码
|
|
124
|
+
* ["en-US","en"] 迁入此处(profile 感知;CORE 原位置留注释指路,16 路计数不变)。
|
|
125
|
+
* 本脚本先于 STEALTH_INJECTION_SCRIPT 执行(W1-DEF-1 顺序),languages 在任何
|
|
126
|
+
* 页面 JS 读取前已就位。
|
|
127
|
+
*
|
|
128
|
+
* round3-review03:导出供 doctor #25 stealth_profile_self_check 逐 profile 校验
|
|
129
|
+
* (languages 反检测点的真 producer 在此,不在 CORE 注释——L0 证据升级 L1)。
|
|
130
|
+
*/
|
|
131
|
+
export declare function buildUserAgentOverrideScript(profile: StealthProfile): string;
|
|
100
132
|
//# sourceMappingURL=StealthEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StealthEngine.d.ts","sourceRoot":"","sources":["../../src/browse/StealthEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EAKL,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"StealthEngine.d.ts","sourceRoot":"","sources":["../../src/browse/StealthEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAK/B,qBAAa,aAAa;IACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,aAAa,CACjB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,kBAAkB,GAC9B,OAAO,CAAC,IAAI,CAAC;IA4ChB;;;;;;;;;OASG;IACG,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBpE;;;;;;;;;;;OAWG;IACH,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,GAAG,uBAAuB,GAAG;QAC7E,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,EAAE,MAAM,CAAC;QACzB,KAAK,EAAE,MAAM,CAAC;KACf;IAoBD;;;;;;;;OAQG;YACW,QAAQ;CA6BvB;AAKD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAKD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAGnE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CA4B5E"}
|
|
@@ -11,7 +11,8 @@ export class StealthEngine {
|
|
|
11
11
|
* v1.5 流程(parse13 §3.1 + §4.5):
|
|
12
12
|
* 1. profile 校验(未知 profile 名 → throw;caller catch 走 didnt)
|
|
13
13
|
* 2. evaluate_script(buildUserAgentOverrideScript) → navigator.userAgent / platform /
|
|
14
|
-
* language 改写(**先执行**,使后续 UA client hints 能读到正确 Chrome
|
|
14
|
+
* language / languages 改写(**先执行**,使后续 UA client hints 能读到正确 Chrome
|
|
15
|
+
* 版本;languages 自 T3-1 profile 感知,与 language 同源同值)
|
|
15
16
|
* 3. evaluate_script(STEALTH_INJECTION_SCRIPT 16 路) → webdriver / languages / permissions /
|
|
16
17
|
* chrome.runtime/app/csi/loadTimes / plugins / vendor / hardwareConcurrency / media.codecs /
|
|
17
18
|
* webgl.vendor / iframe.contentWindow / outerdimensions / userAgentData(brands 版本与
|
|
@@ -23,8 +24,12 @@ export class StealthEngine {
|
|
|
23
24
|
* (secChUa / secFetch* / accept*)已定义在 StealthProfile 顶级 const(INV-30),供后续
|
|
24
25
|
* chrome-devtools-mcp 暴露 header 注入工具时直用。
|
|
25
26
|
*
|
|
26
|
-
* 注:viewport
|
|
27
|
-
*
|
|
27
|
+
* 注:viewport 经 chrome-devtools-mcp 启动 flag `--viewport=` 控制(HeadlessChannel
|
|
28
|
+
* spec 构造期拼入);timezone **无启动 flag**(上游 1.7.0 CLI 32 项无此选项,
|
|
29
|
+
* Chrome 亦无此开关)——profile.timezone 是档案字段、无行为消费,页面 Intl
|
|
30
|
+
* 跟随宿主(与宿主 IP 自洽的诚实形态);StealthEngine 不在这里设。
|
|
31
|
+
* (T3-5 round3 注释归真:此前「--window-size / --timezone」双失实已修正——
|
|
32
|
+
* 真实 flag 名是 --viewport=,且 spec 从无 timezone flag。)
|
|
28
33
|
*
|
|
29
34
|
* @param client McpClient(chrome-devtools-mcp connection)
|
|
30
35
|
* @param profileName STEALTH_PROFILES 顶级 const 的 key
|
|
@@ -179,13 +184,35 @@ export function toFnExpression(script) {
|
|
|
179
184
|
// buildUserAgentOverrideScript(profile-specific payload builder)
|
|
180
185
|
// ============================================================
|
|
181
186
|
/**
|
|
182
|
-
*
|
|
187
|
+
* T3-1(round3 v1.13):profile.language → navigator.languages 值。
|
|
188
|
+
*
|
|
189
|
+
* 真实浏览器 navigator.languages 与 navigator.language / Accept-Language 头
|
|
190
|
+
* 同源同值(主标签在前 + 主子标签兜底)——旧 CORE 硬编码 ["en-US","en"] 在
|
|
191
|
+
* zh-CN 宿主 / 非 en-US profile 下产生「头 zh-CN ↔ JS en-US」的自然不可能形状
|
|
192
|
+
* (与 T2-1 所修 OS 矛盾同族)。派生规则:[language, language 的主子标签]。
|
|
193
|
+
*
|
|
194
|
+
* @returns 恰好 2 元素(真实浏览器同款形状;acceptLanguage 主 token 与此一致)
|
|
195
|
+
*/
|
|
196
|
+
export function profileLanguages(language) {
|
|
197
|
+
const primary = language.split("-")[0].toLowerCase();
|
|
198
|
+
return [language, primary];
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* 构造 navigator.userAgent / platform / language / languages override 注入脚本。
|
|
183
202
|
*
|
|
184
203
|
* 设计:脚本是纯字符串拼装(无副作用),profile 字段经 JSON.stringify
|
|
185
204
|
* 转义防注入(profile 是顶级 const 数据,本就是 trusted,但仍走 JSON.stringify
|
|
186
205
|
* 守编码正确性 —— 守 02 §4 简单性:用对的语言做对的事)。
|
|
206
|
+
*
|
|
207
|
+
* T3-1(round3 v1.13):navigator.languages 从 CORE_STEALTH_SCRIPT #2 硬编码
|
|
208
|
+
* ["en-US","en"] 迁入此处(profile 感知;CORE 原位置留注释指路,16 路计数不变)。
|
|
209
|
+
* 本脚本先于 STEALTH_INJECTION_SCRIPT 执行(W1-DEF-1 顺序),languages 在任何
|
|
210
|
+
* 页面 JS 读取前已就位。
|
|
211
|
+
*
|
|
212
|
+
* round3-review03:导出供 doctor #25 stealth_profile_self_check 逐 profile 校验
|
|
213
|
+
* (languages 反检测点的真 producer 在此,不在 CORE 注释——L0 证据升级 L1)。
|
|
187
214
|
*/
|
|
188
|
-
function buildUserAgentOverrideScript(profile) {
|
|
215
|
+
export function buildUserAgentOverrideScript(profile) {
|
|
189
216
|
// W1-DEF-1(v1.8):函数表达式(上游 0.3.0 契约),不再传 IIFE 语句串。
|
|
190
217
|
return `() => {
|
|
191
218
|
try {
|
|
@@ -206,6 +233,12 @@ function buildUserAgentOverrideScript(profile) {
|
|
|
206
233
|
configurable: true,
|
|
207
234
|
});
|
|
208
235
|
} catch (e) {}
|
|
236
|
+
try {
|
|
237
|
+
Object.defineProperty(navigator, "languages", {
|
|
238
|
+
get: function() { return ${JSON.stringify(profileLanguages(profile.language))}; },
|
|
239
|
+
configurable: true,
|
|
240
|
+
});
|
|
241
|
+
} catch (e) {}
|
|
209
242
|
}`;
|
|
210
243
|
}
|
|
211
244
|
function firstText(r) {
|
|
@@ -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;AACvD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,GAG3B,MAAM,uBAAuB,CAAC;AAE/B,+DAA+D;AAC/D,gBAAgB;AAChB,+DAA+D;AAC/D,MAAM,OAAO,aAAa;IACxB
|
|
1
|
+
{"version":3,"file":"StealthEngine.js","sourceRoot":"","sources":["../../src/browse/StealthEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,16 +42,20 @@ export declare const CDP_UPSTREAM_TOOL_NAMES: Readonly<{
|
|
|
42
42
|
/** chrome-devtools-mcp `pdf` 工具(CDP Page.printToPDF;Go/No-Go F1 探测点) */
|
|
43
43
|
pdf: "pdf";
|
|
44
44
|
/**
|
|
45
|
-
* chrome-devtools-mcp network
|
|
46
|
-
*
|
|
45
|
+
* chrome-devtools-mcp network 抓取工具。
|
|
46
|
+
* v1.11(round1 T5):0.3.0 时代走 evaluate_script 注 PerformanceObserver(F2 已知
|
|
47
|
+
* 限制:proxy/TUN 改 timing 抓不全);1.7.0 暴露原生 list_network_requests /
|
|
48
|
+
* get_network_request(CDP Network 域)→ 直调原生工具,注入路径删除。
|
|
47
49
|
*/
|
|
48
|
-
network_log: "
|
|
50
|
+
network_log: "list_network_requests";
|
|
51
|
+
/** 单请求详情(响应体/头/时序;1.7.0 原生) */
|
|
52
|
+
network_get: "get_network_request";
|
|
49
53
|
/**
|
|
50
|
-
* chrome-devtools-mcp console
|
|
51
|
-
* v0.5 M0.5b
|
|
54
|
+
* chrome-devtools-mcp console 抓取工具(1.7.0 原生 list_console_messages)。
|
|
55
|
+
* v1.11(round1 T5):从 v0.5 M0.5b 占位变实装。
|
|
52
56
|
*/
|
|
53
|
-
console_log: "
|
|
54
|
-
/** evaluate_script(既有 doEvaluate 在 BrowseChannel.ts
|
|
57
|
+
console_log: "list_console_messages";
|
|
58
|
+
/** evaluate_script(既有 doEvaluate 在 BrowseChannel.ts;此处仅记录名用于历史探测) */
|
|
55
59
|
evaluate_script: "evaluate_script";
|
|
56
60
|
}>;
|
|
57
61
|
/**
|
|
@@ -78,47 +82,55 @@ export declare function doPdf(c: McpClient, _url: string, opts: BrowseOptions):
|
|
|
78
82
|
/**
|
|
79
83
|
* network action handler —— 经 BrowseChannel.actionDispatch Map 追加(INV-33)。
|
|
80
84
|
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
* -
|
|
84
|
-
* -
|
|
85
|
-
*
|
|
85
|
+
* v1.11(round1 T5):0.3.0 时代的 evaluate_script 注入 PerformanceObserver 路径
|
|
86
|
+
* **删除**,改调 1.7.0 原生 `list_network_requests`(CDP Network 域采集):
|
|
87
|
+
* - 数据完整度:method/status 全量(不再受 fake-ip TUN 改 timing 抓不全影响——F2 关闭)
|
|
88
|
+
* - browse 流程 NAV_FIRST_ACTIONS 先导航 → 上游采「最近一次导航以来」的请求,
|
|
89
|
+
* 与 navigate-first 流程 1:1 契合
|
|
90
|
+
*
|
|
91
|
+
* 上游响应(1.7.0 McpResponse 文本渲染,NetworkFormatter concise 格式):
|
|
92
|
+
* - `## Network requests` 头 + 分页信息行 + 每请求一行
|
|
93
|
+
* `reqid=<N> <METHOD> <url> [<status>]`(可能带 ` [selected ...]` 后缀)
|
|
94
|
+
* - 按行正则抽取(upstream-response.ts 围栏提取同范式)。
|
|
86
95
|
*
|
|
87
96
|
* opts(BrowseOptions.network_*):
|
|
88
|
-
* - network_filter
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* - network_timeout_ms
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
* ttfb: e.responseStart - e.requestStart, bytes: e.transferSize,
|
|
97
|
-
* workerStart: e.workerStart
|
|
98
|
-
* }) })
|
|
99
|
-
* - obs.observe({ type: "resource", buffered: true }) // buffered=true 拉历史 + 后续
|
|
100
|
-
* - setTimeout(() => { obs.disconnect(); resolve(JSON.stringify(entries)); }, timeout_ms)
|
|
101
|
-
*
|
|
102
|
-
* @returns Partial<BrowseResult>:preview 字段含 entries JSON 字符串
|
|
103
|
-
* (network.ts 工具层会把它过 applyOutputEnvelope;INV-34 同源)
|
|
97
|
+
* - network_filter : "xhr"|"fetch"|"img"|"3rd-party"|"all" → 映射上游 resourceTypes
|
|
98
|
+
* (xhr→xhr / fetch→fetch / img→image;3rd-party/all 全量,
|
|
99
|
+
* 3rd-party 判定在 network.ts 工具层)
|
|
100
|
+
* - network_timeout_ms / network_include_bodies:不再适用(原生工具即时返回);
|
|
101
|
+
* 字段保留(zod 契约稳定),值被忽略
|
|
102
|
+
*
|
|
103
|
+
* @returns Partial<BrowseResult>:preview = entries JSON 字符串(network.ts 工具层
|
|
104
|
+
* filterResources + applyOutputEnvelope;INV-34 同源)
|
|
104
105
|
*/
|
|
105
106
|
export declare function doNetwork(c: McpClient, _url: string, opts: BrowseOptions): Promise<Partial<BrowseResult>>;
|
|
107
|
+
/** 1.7.0 list_network_requests 文本行 → 结构化条目(围栏提取范式)。 */
|
|
108
|
+
export declare function parseNetworkRequestLines(text: string): Array<{
|
|
109
|
+
name: string;
|
|
110
|
+
type: string;
|
|
111
|
+
reqid: number;
|
|
112
|
+
method: string;
|
|
113
|
+
status: string;
|
|
114
|
+
}>;
|
|
106
115
|
/**
|
|
107
116
|
* console action handler —— 经 BrowseChannel.actionDispatch Map 追加(INV-33)。
|
|
108
117
|
*
|
|
109
|
-
* v0.5 M0.5b
|
|
110
|
-
*
|
|
111
|
-
* 时统一上线 evaluate_script 注入范式 + 3rd-party 过滤等)。
|
|
118
|
+
* v1.11(round1 T5):从占位("v0.5 M0.5b placeholder")变实装——调 1.7.0 原生
|
|
119
|
+
* `list_console_messages`。
|
|
112
120
|
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
* + retrieval_method=console_not_implemented_in_v0.5 + next_step。
|
|
121
|
+
* 上游响应(ConsoleFormatter concise 格式):
|
|
122
|
+
* - `## Console messages` 头 + 每消息一行
|
|
123
|
+
* `msgid=<N> [<type>] <text> (<N> args)`(可能带 ` [N times]` 后缀)
|
|
117
124
|
*
|
|
118
|
-
*
|
|
119
|
-
* outcome=worked + retrieval_method=chrome_devtools_mcp_console_placeholder。
|
|
120
|
-
* 这样 INV-33 断言("console" 必须在 dispatch Map)落地,且不影响任何现有调用路径
|
|
121
|
-
* (v0.5 没有 console tool 注册;只是 Map entry 预留)。
|
|
125
|
+
* @returns Partial<BrowseResult>:preview = messages JSON 字符串
|
|
122
126
|
*/
|
|
123
|
-
export declare function doConsole(
|
|
127
|
+
export declare function doConsole(c: McpClient, _url: string, _opts: BrowseOptions): Promise<Partial<BrowseResult>>;
|
|
128
|
+
/** 1.7.0 list_console_messages 文本行 → 结构化消息。 */
|
|
129
|
+
export declare function parseConsoleMessageLines(text: string): Array<{
|
|
130
|
+
id: number;
|
|
131
|
+
type: string;
|
|
132
|
+
text: string;
|
|
133
|
+
argsCount: number;
|
|
134
|
+
count?: number;
|
|
135
|
+
}>;
|
|
124
136
|
//# sourceMappingURL=cdp-actions.d.ts.map
|
|
@@ -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;
|
|
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;AAK/D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB;IAClC,wEAAwE;;IAExE;;;;;OAKG;;IAEH,+BAA+B;;IAE/B;;;OAGG;;IAEH,qEAAqE;;EAErE,CAAC;AAwBH;;;;;;;;;;;;;;;;;;;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"}
|