lasso-mcp 1.18.4 → 1.18.6
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 +32 -32
- package/README.en.md +24 -20
- package/README.md +24 -21
- package/dist/browse/StepEngine.d.ts +1 -1
- package/dist/browse/StepEngine.js +2 -2
- package/dist/browse/StepEngine.js.map +1 -1
- package/dist/browse/content-type-router.js +1 -1
- package/dist/browse/content-type-router.js.map +1 -1
- package/dist/browse/stealth-evasions/ua-client-hints.d.ts +1 -1
- package/dist/browse/stealth-evasions/ua-client-hints.js +1 -1
- package/dist/browse/steps-types.d.ts +1 -1
- package/dist/browse/steps-types.d.ts.map +1 -1
- package/dist/channels/BrowseChannel.d.ts +2 -2
- package/dist/channels/BrowseChannel.d.ts.map +1 -1
- package/dist/channels/BrowseChannel.js +6 -6
- package/dist/channels/BrowseChannel.js.map +1 -1
- package/dist/channels/LoggedInChannel.d.ts +2 -2
- package/dist/channels/LoggedInChannel.js +3 -3
- package/dist/channels/LoggedInChannel.js.map +1 -1
- package/dist/channels/MachineMcpSearchChannel.d.ts +2 -2
- package/dist/channels/MachineMcpSearchChannel.js +3 -3
- package/dist/channels/MachineMcpSearchChannel.js.map +1 -1
- package/dist/channels/StagehandChannel.d.ts +1 -1
- package/dist/channels/StagehandChannel.js +1 -1
- package/dist/config/config.d.ts +1 -1
- package/dist/config/config.js +5 -5
- package/dist/config/config.js.map +1 -1
- package/dist/config/providers.d.ts +3 -3
- package/dist/config/providers.js +6 -6
- package/dist/config/providers.js.map +1 -1
- package/dist/desktop/AppleScriptProvider.d.ts +1 -1
- package/dist/desktop/AppleScriptProvider.js +1 -1
- package/dist/desktop/AxProvider.d.ts +2 -2
- package/dist/desktop/AxProvider.js +2 -2
- package/dist/desktop/AxProvider.js.map +1 -1
- package/dist/desktop/OutlineMapper.d.ts +1 -1
- package/dist/desktop/OutlineMapper.js +3 -3
- package/dist/desktop/OutlineMapper.js.map +1 -1
- package/dist/desktop/ScreenshotVlmProvider.js +1 -1
- package/dist/desktop/ScreenshotVlmProvider.js.map +1 -1
- package/dist/desktop/desktop-types.d.ts +1 -1
- package/dist/doctor/doctor.d.ts +2 -2
- package/dist/doctor/doctor.js +12 -12
- package/dist/doctor/doctor.js.map +1 -1
- package/dist/doctor/fixtures/creepjs-baseline.json +1 -1
- package/dist/fallback/BudgetTracker.d.ts +1 -1
- package/dist/fallback/BudgetTracker.js +1 -1
- package/dist/fallback/FallbackDecider.js +2 -2
- package/dist/fallback/FallbackDecider.js.map +1 -1
- package/dist/fallback/LongCircuitBreaker.d.ts +7 -7
- package/dist/fallback/LongCircuitBreaker.js +6 -6
- package/dist/fallback/LongCircuitBreaker.js.map +1 -1
- package/dist/fallback/outcome.js +3 -3
- package/dist/fallback/outcome.js.map +1 -1
- package/dist/index.js +46 -19
- package/dist/index.js.map +1 -1
- package/dist/launcher/chrome-hide.js +1 -1
- package/dist/launcher/chrome-hideshow-cli.d.ts +4 -1
- package/dist/launcher/chrome-hideshow-cli.d.ts.map +1 -1
- package/dist/launcher/chrome-hideshow-cli.js +11 -1
- package/dist/launcher/chrome-hideshow-cli.js.map +1 -1
- package/dist/launcher/chrome-idle-reaper.d.ts +14 -3
- package/dist/launcher/chrome-idle-reaper.d.ts.map +1 -1
- package/dist/launcher/chrome-idle-reaper.js +17 -6
- package/dist/launcher/chrome-idle-reaper.js.map +1 -1
- package/dist/launcher/chrome-stop.d.ts +1 -1
- package/dist/launcher/chrome-stop.d.ts.map +1 -1
- package/dist/launcher/chrome-touch.d.ts +20 -0
- package/dist/launcher/chrome-touch.d.ts.map +1 -0
- package/dist/launcher/chrome-touch.js +72 -0
- package/dist/launcher/chrome-touch.js.map +1 -0
- package/dist/launcher/desired-hide-enforcer.d.ts +86 -0
- package/dist/launcher/desired-hide-enforcer.d.ts.map +1 -0
- package/dist/launcher/desired-hide-enforcer.js +200 -0
- package/dist/launcher/desired-hide-enforcer.js.map +1 -0
- package/dist/launcher/desired-hide-watchdog.d.ts +8 -0
- package/dist/launcher/desired-hide-watchdog.d.ts.map +1 -1
- package/dist/launcher/desired-hide-watchdog.js +18 -3
- package/dist/launcher/desired-hide-watchdog.js.map +1 -1
- package/dist/launcher/launch-chrome.d.ts +7 -0
- package/dist/launcher/launch-chrome.d.ts.map +1 -1
- package/dist/launcher/launch-chrome.js +21 -0
- package/dist/launcher/launch-chrome.js.map +1 -1
- package/dist/logged-in/TabRegistry.d.ts +1 -1
- package/dist/search/ContentSecondHop.d.ts +1 -1
- package/dist/search/FallbackChain.d.ts +2 -2
- package/dist/search/FallbackChain.js +1 -1
- package/dist/search/MachineMcpDetector.d.ts.map +1 -1
- package/dist/search/MachineMcpDetector.js +3 -2
- package/dist/search/MachineMcpDetector.js.map +1 -1
- package/dist/search/QualityTag.d.ts +1 -1
- package/dist/search/SearchCache.js +1 -1
- package/dist/search-local/chrome-history.js +2 -2
- package/dist/search-local/register-search-local-tool.d.ts +1 -1
- package/dist/serp/http-serp.d.ts +1 -1
- package/dist/serp/http-serp.js +1 -1
- package/dist/serp/http-serp.js.map +1 -1
- package/dist/ssrf/ssrf-guard.js +1 -1
- package/dist/ssrf/ssrf-guard.js.map +1 -1
- package/dist/tools/admin.js +2 -2
- package/dist/tools/admin.js.map +1 -1
- package/dist/tools/annotations.js +2 -2
- package/dist/tools/annotations.js.map +1 -1
- package/dist/tools/browse.js +2 -2
- package/dist/tools/browse.js.map +1 -1
- package/dist/tools/browserbase.js +1 -1
- package/dist/tools/browserbase.js.map +1 -1
- package/dist/tools/descriptions.d.ts.map +1 -1
- package/dist/tools/descriptions.js +10 -3
- package/dist/tools/descriptions.js.map +1 -1
- package/dist/tools/fetch-feed.d.ts +1 -1
- package/dist/tools/fetch-feed.js +1 -1
- package/dist/tools/fetch-feed.js.map +1 -1
- package/dist/tools/fetch-url.js +4 -4
- package/dist/tools/fetch-url.js.map +1 -1
- package/dist/tools/network.js +2 -2
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/pdf.js +2 -2
- package/dist/tools/pdf.js.map +1 -1
- package/dist/tools/screenshot.js +1 -1
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/search.d.ts +2 -2
- package/dist/tools/search.js +2 -2
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/steel.js +1 -1
- package/dist/tools/steel.js.map +1 -1
- package/dist/tools/wayback.js +1 -1
- package/dist/tools/wayback.js.map +1 -1
- package/dist/types.d.ts +5 -5
- package/dist/util/output-envelope.d.ts +2 -2
- package/dist/util/output-envelope.d.ts.map +1 -1
- package/dist/util/output-envelope.js +4 -4
- package/dist/util/output-envelope.js.map +1 -1
- package/doc/README.md +87 -43
- package/doc/{08-media-interact- → architecture/01-}/345/212/237/350/203/275/346/236/266/346/236/204.md +4 -3
- package/doc/{09-media-interact- → architecture/02-}/345/256/236/346/226/275/346/216/222/346/234/237.md +31 -23
- package/doc/archive/parse/parse1.md +1611 -0
- package/doc/archive/parse/parse10-acceptance.md +224 -0
- package/doc/archive/parse/parse10.md +29 -0
- package/doc/archive/parse/parse11-acceptance.md +325 -0
- package/doc/archive/parse/parse11.md +987 -0
- package/doc/archive/parse/parse12-acceptance.md +182 -0
- package/doc/archive/parse/parse12.md +777 -0
- package/doc/archive/parse/parse13-acceptance.md +331 -0
- package/doc/archive/parse/parse13.md +405 -0
- package/doc/archive/parse/parse14-acceptance.md +400 -0
- package/doc/archive/parse/parse14.md +580 -0
- package/doc/archive/parse/parse15-acceptance.md +189 -0
- package/doc/archive/parse/parse15.md +463 -0
- package/doc/archive/parse/parse16.md +310 -0
- package/doc/archive/parse/parse17-rca-lifecycle.md +225 -0
- package/doc/archive/parse/parse17.md +452 -0
- package/doc/archive/parse/parse18-acceptance.md +37 -0
- package/doc/archive/parse/parse18-frontier.md +94 -0
- package/doc/archive/parse/parse18-oss-experiments.md +212 -0
- package/doc/archive/parse/parse18-rca-whitebox.md +163 -0
- package/doc/archive/parse/parse18.md +418 -0
- package/doc/archive/parse/parse2.md +1421 -0
- package/doc/archive/parse/parse3.md +960 -0
- package/doc/archive/parse/parse4-acceptance.md +225 -0
- package/doc/archive/parse/parse4.md +1096 -0
- package/doc/archive/parse/parse5-acceptance.md +170 -0
- package/doc/archive/parse/parse5.md +1490 -0
- package/doc/archive/parse/parse6-acceptance.md +277 -0
- package/doc/archive/parse/parse6.md +1007 -0
- package/doc/archive/parse/parse7-acceptance.md +205 -0
- package/doc/archive/parse/parse7.md +1060 -0
- package/doc/archive/parse/parse8-acceptance.md +168 -0
- package/doc/archive/parse/parse8.md +893 -0
- package/doc/archive/parse/parse9-acceptance.md +334 -0
- package/doc/archive/parse/parse9.md +805 -0
- package/doc/archive/parse/v14-acceptance.md +182 -0
- package/doc/archive/research/00-/346/200/273/350/247/210/344/270/216/350/220/275/345/234/260/346/216/250/350/215/220.md +173 -0
- package/doc/archive/research/01-/346/226/271/345/220/221A-/346/265/217/350/247/210/345/231/250/346/216/247/345/210/266.md +178 -0
- package/doc/archive/research/02-/346/226/271/345/220/221B-/346/241/214/351/235/242/350/256/241/347/256/227/346/234/272/346/216/247/345/210/266.md +167 -0
- package/doc/archive/research/03-/346/226/271/345/220/221C-/346/226/260/345/245/207/346/226/271/346/241/210/344/270/216/346/200/247/350/203/275/346/264/236/345/257/237.md +129 -0
- package/doc/archive/research/04-CC/351/233/206/346/210/220/346/223/215/344/275/234/346/211/213/345/206/214.md +246 -0
- package/doc/archive/research/05-/346/250/252/345/220/221/345/257/271/346/257/224/347/237/251/351/230/265.md +141 -0
- package/doc/archive/research/06-/346/226/271/345/220/221D-AI/346/265/217/350/247/210/345/231/250/344/270/216Agent/346/265/217/350/247/210/345/231/250.md +309 -0
- package/doc/archive/research/07-CC/347/273/237/344/270/200/344/272/244/344/272/222/346/212/223/346/211/213MCP-/345/217/257/350/241/214/346/200/247/345/210/206/346/236/220.md +394 -0
- package/doc/archive/research/10-/346/220/234/347/264/242MCP/350/260/203/347/240/224/345/257/271/346/236/266/346/236/204/347/232/204/345/220/257/345/217/221.md +336 -0
- package/doc/archive/research/11-/347/256/200/345/215/225/346/236/266/346/236/204/345/256/241/346/237/245/346/212/245/345/221/212.md +151 -0
- package/doc/archive/research/12-pi-computer-use/345/217/212/347/224/237/346/200/201/346/267/261/345/272/246/345/210/206/346/236/220.md +461 -0
- package/doc/archive/research/13-/345/205/250/344/272/244/344/272/222/346/212/223/346/211/213/351/207/215/350/256/276/350/256/241.md +819 -0
- package/doc/archive/research/14-AI/347/210/254/350/231/253/350/260/203/347/240/224/344/270/216/345/200/237/351/211/264/345/210/206/346/236/220.md +355 -0
- package/doc/archive/research/15-/347/231/273/345/275/225/346/200/201/346/214/201/344/271/205/345/214/226/344/270/216/346/227/240/345/244/264/345/244/215/347/224/250/350/260/203/347/240/224.md +272 -0
- package/doc/archive/research/16-/345/274/200/346/272/220/347/224/237/346/200/201/347/231/275/347/233/222/345/256/241/346/237/245/344/270/216/345/200/237/351/211/264/345/210/206/346/236/220.md +558 -0
- package/doc/archive/research/18-/350/265/204/346/272/220/345/215/240/347/224/250/344/274/230/345/214/226/350/260/203/347/240/224.md +167 -0
- package/doc/archive/research//346/220/234/347/264/242mcp/345/267/245/345/205/267/01-/346/200/273/350/247/210/344/270/216/346/216/250/350/215/220/346/216/222/345/220/215.md +120 -0
- package/doc/archive/research//346/220/234/347/264/242mcp/345/267/245/345/205/267/02-/345/200/231/351/200/211/346/226/271/346/241/210/350/257/246/350/247/243.md +222 -0
- package/doc/archive/research//346/220/234/347/264/242mcp/345/267/245/345/205/267/03-/351/205/215/347/275/256/347/244/272/344/276/213/344/270/216/351/203/250/347/275/262/346/214/207/345/215/227.md +272 -0
- package/doc/archive/research//346/220/234/347/264/242mcp/345/267/245/345/205/267/04-/346/200/247/350/203/275/345/237/272/345/207/206/344/270/216/345/205/215/350/264/271/351/242/235/345/272/246/345/257/271/346/257/224.md +79 -0
- package/doc/archive/research//346/220/234/347/264/242mcp/345/267/245/345/205/267/05-/351/201/277/345/235/221-/350/242/253/345/220/246/345/206/263/347/232/204/350/257/257/345/257/274/347/273/223/350/256/272.md +76 -0
- package/doc/archive/research//346/220/234/347/264/242mcp/345/267/245/345/205/267/06-/345/261/200/351/231/220/344/270/216/345/274/200/346/224/276/351/227/256/351/242/230.md +105 -0
- package/doc/archive/research//346/220/234/347/264/242mcp/345/267/245/345/205/267/07-/350/260/203/347/240/224/346/226/271/346/263/225/344/270/216/345/256/214/346/225/264/346/235/245/346/272/220/346/270/205/345/215/225.md +185 -0
- package/doc/archive/research//346/220/234/347/264/242mcp/345/267/245/345/205/267/README.md +66 -0
- package/doc/{BUG-rust-helper-relative-path.md → bugs/01-rust-helper-relative-path.md} +2 -0
- package/doc/bugs/02-chrome-idle-reaper-second-consumer.md +122 -0
- package/doc/{19- → governance/01-}/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 +1 -1
- package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-arch.md +1 -1
- package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-implementation.md +2 -2
- package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round2-arch.md +1 -1
- package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round2-browser.md +1 -1
- package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round2-verdict.md +2 -2
- package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round4-browser.md +1 -1
- package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round4-review03.md +1 -1
- package/doc/{21- → governance/02-}/346/220/234/347/264/242/346/226/271/346/241/210/351/207/215/345/256/241/rca-/344/270/272/344/273/200/344/271/210/346/274/217.md +7 -7
- package/doc/{21- → governance/02-}/346/220/234/347/264/242/346/226/271/346/241/210/351/207/215/345/256/241/verdict.md +4 -4
- package/doc/{21- → governance/02-}/346/220/234/347/264/242/346/226/271/346/241/210/351/207/215/345/256/241/verify.md +5 -5
- package/doc/{22-Bing → governance/03-Bing}/346/270/205/351/231/244/344/270/216serp_http/parse22.md +1 -1
- package/doc/{22-Bing → governance/03-Bing}/346/270/205/351/231/244/344/270/216serp_http/verify.md +2 -2
- package/doc/{23- → governance/04-}/346/226/271/346/263/225/350/256/272/346/243/200/350/256/250-/346/220/234/347/264/242/344/274/230/345/214/226/345/244/261/346/225/210.md +42 -3
- package/doc/{24- → governance/05-}/351/242/240/350/246/206/346/200/247/350/260/203/347/240/224/decision-interaction-upgrade.md +1 -1
- package/doc/{24- → governance/05-}/351/242/240/350/246/206/346/200/247/350/260/203/347/240/224/decision-local-search.md +1 -1
- package/doc/{24- → governance/05-}/351/242/240/350/246/206/346/200/247/350/260/203/347/240/224/decision-search-layer.md +3 -3
- package/doc/{24- → governance/05-}/351/242/240/350/246/206/346/200/247/350/260/203/347/240/224/red-team.md +6 -6
- package/doc/{24- → governance/05-}/351/242/240/350/246/206/346/200/247/350/260/203/347/240/224/scan-agent-api.md +2 -2
- package/doc/{24- → governance/05-}/351/242/240/350/246/206/346/200/247/350/260/203/347/240/224/scan-edge.md +4 -4
- package/doc/{24- → governance/05-}/351/242/240/350/246/206/346/200/247/350/260/203/347/240/224/scan-mcp-proto.md +1 -1
- package/doc/{24- → governance/05-}/351/242/240/350/246/206/346/200/247/350/260/203/347/240/224/scan-model-native.md +5 -5
- package/doc/{24- → governance/05-}/351/242/240/350/246/206/346/200/247/350/260/203/347/240/224/verdict.md +4 -4
- package/doc/{24- → governance/05-}/351/242/240/350/246/206/346/200/247/350/260/203/347/240/224/zero-base.md +1 -1
- package/doc/{25- → governance/06-}/344/272/224/351/241/271/350/243/201/345/206/263/345/256/236/346/226/275/parse24.md +2 -2
- package/doc/{25- → governance/06-}/344/272/224/351/241/271/350/243/201/345/206/263/345/256/236/346/226/275/verify.md +4 -4
- package/doc/{26- → governance/07-}/346/226/207/346/241/243/346/237/245/347/274/272/350/241/245/346/274/217/gap-matrix.md +79 -52
- package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/audit.md +1 -1
- package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/fix.md +2 -2
- package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify.md +1 -1
- package/doc/{28- → governance/09-}/351/235/231/351/273/230/345/256/210/345/210/231/345/256/241/350/256/241/audit.md +8 -8
- package/doc/{28- → governance/09-}/351/235/231/351/273/230/345/256/210/345/210/231/345/256/241/350/256/241/decisions.md +2 -2
- package/doc/{28- → governance/09-}/351/235/231/351/273/230/345/256/210/345/210/231/345/256/241/350/256/241/fix-2.md +1 -1
- package/doc/{28- → governance/09-}/351/235/231/351/273/230/345/256/210/345/210/231/345/256/241/350/256/241/fix.md +2 -2
- package/doc/{28- → governance/09-}/351/235/231/351/273/230/345/256/210/345/210/231/345/256/241/350/256/241/verify.md +1 -1
- package/doc/{29- → governance/10-}/351/224/231/351/205/215/346/234/272/345/210/266/345/256/241/350/256/241/verdict.md +2 -2
- package/doc/{17- → testing/01-}/345/212/237/350/203/275/346/265/213/350/257/225/346/270/205/345/215/225.md +34 -20
- package/doc/{KEY-GUIDE.md → usage/01-KEY-GUIDE.md} +6 -2
- package/doc/{TROUBLESHOOTING.md → usage/02-TROUBLESHOOTING.md} +72 -11
- package/doc/{SELECTOR-MAINTENANCE.md → usage/03-SELECTOR-MAINTENANCE.md} +6 -6
- package/package.json +3 -3
- package/src/browse/StepEngine.ts +3 -3
- package/src/browse/content-type-router.ts +1 -1
- package/src/browse/stealth-evasions/ua-client-hints.ts +1 -1
- package/src/browse/steps-types.ts +1 -1
- package/src/channels/BrowseChannel.ts +6 -6
- package/src/channels/LoggedInChannel.ts +3 -3
- package/src/channels/MachineMcpSearchChannel.ts +3 -3
- package/src/channels/StagehandChannel.ts +1 -1
- package/src/config/config.ts +6 -6
- package/src/config/providers.ts +6 -6
- package/src/desktop/AppleScriptProvider.ts +2 -2
- package/src/desktop/AxProvider.ts +4 -4
- package/src/desktop/OutlineMapper.ts +3 -3
- package/src/desktop/ScreenshotVlmProvider.ts +1 -1
- package/src/desktop/desktop-types.ts +1 -1
- package/src/doctor/doctor.ts +13 -13
- package/src/doctor/fixtures/creepjs-baseline.json +1 -1
- package/src/fallback/BudgetTracker.ts +1 -1
- package/src/fallback/FallbackDecider.ts +2 -2
- package/src/fallback/LongCircuitBreaker.ts +7 -7
- package/src/fallback/outcome.ts +3 -3
- package/src/index.ts +47 -19
- package/src/invariants/check-invariants.mjs +36 -36
- package/src/launcher/chrome-hide.ts +1 -1
- package/src/launcher/chrome-hideshow-cli.ts +15 -1
- package/src/launcher/chrome-idle-reaper.ts +27 -7
- package/src/launcher/chrome-stop.ts +1 -1
- package/src/launcher/chrome-touch.ts +76 -0
- package/src/launcher/desired-hide-enforcer.ts +233 -0
- package/src/launcher/desired-hide-watchdog.ts +27 -3
- package/src/launcher/launch-chrome.ts +31 -0
- package/src/logged-in/TabRegistry.ts +1 -1
- package/src/search/ContentSecondHop.ts +1 -1
- package/src/search/FallbackChain.ts +2 -2
- package/src/search/MachineMcpDetector.ts +3 -2
- package/src/search/QualityTag.ts +1 -1
- package/src/search/SearchCache.ts +1 -1
- package/src/search-local/chrome-history.ts +2 -2
- package/src/search-local/register-search-local-tool.ts +1 -1
- package/src/serp/http-serp.ts +2 -2
- package/src/ssrf/ssrf-guard.ts +1 -1
- package/src/tools/admin.ts +2 -2
- package/src/tools/annotations.ts +2 -2
- package/src/tools/browse.ts +2 -2
- package/src/tools/browserbase.ts +1 -1
- package/src/tools/descriptions.ts +10 -3
- package/src/tools/fetch-feed.ts +2 -2
- package/src/tools/fetch-url.ts +4 -4
- package/src/tools/network.ts +2 -2
- package/src/tools/pdf.ts +2 -2
- package/src/tools/screenshot.ts +1 -1
- package/src/tools/search.ts +3 -3
- package/src/tools/steel.ts +1 -1
- package/src/tools/wayback.ts +1 -1
- package/src/types.ts +5 -5
- package/src/util/output-envelope.ts +4 -4
- package/.dedao-extract/.qc-v3/fk-14.png +0 -0
- package/.dedao-extract/.qc-v3/fkp2-02.png +0 -0
- package/.dedao-extract/.qc-v3/l001-6.png +0 -0
- package/.dedao-extract/.qc-v3/l001-7.png +0 -0
- package/.dedao-extract/.qc-v3/l002-4.png +0 -0
- package/.dedao-extract/analyze.mjs +0 -169
- package/.dedao-extract/b1-01-navigate.json +0 -14
- package/.dedao-extract/b1-02-ready.json +0 -5
- package/.dedao-extract/b1-98-results.json +0 -119
- package/.dedao-extract/b1-99-log.json +0 -18
- package/.dedao-extract/b1-a1-assert.json +0 -18
- package/.dedao-extract/b1-a1-chain.json +0 -13
- package/.dedao-extract/b1-a1-stabilize.json +0 -7
- package/.dedao-extract/b1-a1-switch.json +0 -5
- package/.dedao-extract/b1-a2-assert.json +0 -18
- package/.dedao-extract/b1-a2-chain.json +0 -13
- package/.dedao-extract/b1-a2-stabilize.json +0 -7
- package/.dedao-extract/b1-a2-switch.json +0 -5
- package/.dedao-extract/b1-a3-assert.json +0 -18
- package/.dedao-extract/b1-a3-chain.json +0 -13
- package/.dedao-extract/b1-a3-stabilize.json +0 -7
- package/.dedao-extract/b1-a3-switch.json +0 -5
- package/.dedao-extract/b2-01-navigate.json +0 -14
- package/.dedao-extract/b2-02-ready.json +0 -5
- package/.dedao-extract/b2-98-results.json +0 -242
- package/.dedao-extract/b2-99-log.json +0 -21
- package/.dedao-extract/b2-a1-assert.json +0 -18
- package/.dedao-extract/b2-a1-cleanup.json +0 -35
- package/.dedao-extract/b2-a1-print.json +0 -5
- package/.dedao-extract/b2-a1-stabilize.json +0 -7
- package/.dedao-extract/b2-a1-switch.json +0 -5
- package/.dedao-extract/b2-a2-assert.json +0 -18
- package/.dedao-extract/b2-a2-cleanup.json +0 -35
- package/.dedao-extract/b2-a2-print.json +0 -5
- package/.dedao-extract/b2-a2-stabilize.json +0 -7
- package/.dedao-extract/b2-a2-switch.json +0 -5
- package/.dedao-extract/b2-a3-assert.json +0 -18
- package/.dedao-extract/b2-a3-cleanup.json +0 -35
- package/.dedao-extract/b2-a3-print.json +0 -5
- package/.dedao-extract/b2-a3-stabilize.json +0 -7
- package/.dedao-extract/b2-a3-switch.json +0 -5
- package/.dedao-extract/b3-01-navigate.json +0 -14
- package/.dedao-extract/b3-02-ready.json +0 -5
- package/.dedao-extract/b3-98-results.json +0 -281
- package/.dedao-extract/b3-99-log.json +0 -21
- package/.dedao-extract/b3-a1-assert.json +0 -18
- package/.dedao-extract/b3-a1-cleanup.json +0 -48
- package/.dedao-extract/b3-a1-print.json +0 -5
- package/.dedao-extract/b3-a1-stabilize.json +0 -7
- package/.dedao-extract/b3-a1-switch.json +0 -5
- package/.dedao-extract/b3-a2-assert.json +0 -18
- package/.dedao-extract/b3-a2-cleanup.json +0 -48
- package/.dedao-extract/b3-a2-print.json +0 -5
- package/.dedao-extract/b3-a2-stabilize.json +0 -7
- package/.dedao-extract/b3-a2-switch.json +0 -5
- package/.dedao-extract/b3-a3-assert.json +0 -18
- package/.dedao-extract/b3-a3-cleanup.json +0 -48
- package/.dedao-extract/b3-a3-print.json +0 -5
- package/.dedao-extract/b3-a3-stabilize.json +0 -7
- package/.dedao-extract/b3-a3-switch.json +0 -5
- package/.dedao-extract/b4-diag.json +0 -105
- package/.dedao-extract/dbg-fixscreen.mjs +0 -43
- package/.dedao-extract/dbg-text.mjs +0 -25
- package/.dedao-extract/dbg-text2.mjs +0 -20
- package/.dedao-extract/dbg-text3.mjs +0 -18
- package/.dedao-extract/dbg-text4.mjs +0 -27
- package/.dedao-extract/dbg-text5.mjs +0 -31
- package/.dedao-extract/diag-tail.mjs +0 -90
- package/.dedao-extract/extract-batch1.mjs +0 -377
- package/.dedao-extract/extract-batch2.mjs +0 -371
- package/.dedao-extract/extract-batch3.mjs +0 -392
- package/.dedao-extract/extract-v2.mjs +0 -539
- package/.dedao-extract/extract-v3.mjs +0 -745
- package/.dedao-extract/gapfill.mjs +0 -154
- package/.dedao-extract/probe-frag.mjs +0 -125
- package/.dedao-extract/prod-chapters-dry.json +0 -2516
- package/.dedao-extract/prod-enumeration.json +0 -1682
- package/.dedao-extract/produce-all.mjs +0 -555
- package/.dedao-extract/qc-final.mjs +0 -65
- package/.dedao-extract/qc-v3.mjs +0 -91
- package/.dedao-extract/r2-01-navigate.json +0 -14
- package/.dedao-extract/r2-98-results.json +0 -697
- package/.dedao-extract/r2-99-log.json +0 -15
- package/.dedao-extract/r2-analyze.mjs +0 -96
- package/.dedao-extract/r2-fk-dump.json +0 -139
- package/.dedao-extract/r2-fk-figattr.json +0 -62
- package/.dedao-extract/r2-fk-pagemap.json +0 -64
- package/.dedao-extract/r2-l001-dump.json +0 -129
- package/.dedao-extract/r2-l001-figattr.json +0 -53
- package/.dedao-extract/r2-l001-pagemap.json +0 -55
- package/.dedao-extract/r2-l002-dump.json +0 -109
- package/.dedao-extract/r2-l002-figattr.json +0 -35
- package/.dedao-extract/r2-l002-pagemap.json +0 -37
- package/.dedao-extract/s8-01-navigate.json +0 -14
- package/.dedao-extract/s8-98-results.json +0 -43
- package/.dedao-extract/s8-99-log.json +0 -24
- package/.dedao-extract/s8-fk-fix.json +0 -15
- package/.dedao-extract/s8-fk-pagemap-post.json +0 -58
- package/.dedao-extract/s8-fk-pagemap-pre.json +0 -68
- package/.dedao-extract/s8-fk-promo.json +0 -11
- package/.dedao-extract/s8-ink.mjs +0 -49
- package/.dedao-extract/s8-l003-fix.json +0 -21
- package/.dedao-extract/s8-l003-pagemap-post.json +0 -38
- package/.dedao-extract/s8-l003-pagemap-pre.json +0 -48
- package/.dedao-extract/s8-l003-promo.json +0 -11
- package/.dedao-extract/s9-sikao.json +0 -394
- package/.dedao-extract/scout7-round2.mjs +0 -386
- package/.dedao-extract/scout7b.mjs +0 -121
- package/.dedao-extract/scout7c.mjs +0 -99
- package/.dedao-extract/scout8.mjs +0 -334
- package/.dedao-extract/scout9.mjs +0 -121
- package/.dedao-extract/scratch/fk-01.pgm +0 -75
- package/.dedao-extract/scratch/fk-02.pgm +0 -4
- package/.dedao-extract/scratch/fk-03.pgm +0 -207
- package/.dedao-extract/scratch/fk-04.pgm +1 -985
- package/.dedao-extract/scratch/fk-05.pgm +0 -4
- package/.dedao-extract/scratch/fk-06.pgm +0 -4
- package/.dedao-extract/scratch/fk-07.pgm +0 -4
- package/.dedao-extract/scratch/fk-08.pgm +0 -4
- package/.dedao-extract/scratch/fk-09.pgm +0 -4
- package/.dedao-extract/scratch/fk-10.pgm +0 -4
- package/.dedao-extract/scratch/fk-11.pgm +0 -4
- package/.dedao-extract/scratch/fk-12.pgm +0 -4
- package/.dedao-extract/scratch/fk-13.pgm +0 -4
- package/.dedao-extract/scratch/fk-14.pgm +0 -107
- package/.dedao-extract/scratch/fk-analysis.json +0 -47
- package/.dedao-extract/scratch/fk-before.pdf +0 -0
- package/.dedao-extract/scratch/fk-clean-inner.txt +0 -42
- package/.dedao-extract/scratch/fk-dom-inner.txt +0 -381
- package/.dedao-extract/scratch/fk-fix-inner.txt +0 -42
- package/.dedao-extract/scratch/fk-pdftotext.txt +0 -66
- package/.dedao-extract/scratch/fk-r3-base.pdf +0 -0
- package/.dedao-extract/scratch/fk-r3-base.txt +0 -66
- package/.dedao-extract/scratch/fk-r3-fix.pdf +0 -0
- package/.dedao-extract/scratch/fk-r3-fix.txt +0 -66
- package/.dedao-extract/scratch/fk-r3-s09.pdf +0 -0
- package/.dedao-extract/scratch/l001-1.pgm +0 -6
- package/.dedao-extract/scratch/l001-2.pgm +0 -38
- package/.dedao-extract/scratch/l001-3.pgm +0 -38
- package/.dedao-extract/scratch/l001-4.pgm +0 -4
- package/.dedao-extract/scratch/l001-5.pgm +1 -178
- package/.dedao-extract/scratch/l001-6.pgm +0 -44
- package/.dedao-extract/scratch/l001-7.pgm +0 -4
- package/.dedao-extract/scratch/l001-8.pgm +0 -107
- package/.dedao-extract/scratch/l001-analysis.json +0 -23
- package/.dedao-extract/scratch/l001-before.pdf +0 -0
- package/.dedao-extract/scratch/l001-dom-inner.txt +0 -444
- package/.dedao-extract/scratch/l001-pdftotext.txt +0 -146
- package/.dedao-extract/scratch/l002-1.pgm +0 -6
- package/.dedao-extract/scratch/l002-2.pgm +0 -4
- package/.dedao-extract/scratch/l002-3.pgm +0 -4
- package/.dedao-extract/scratch/l002-4.pgm +0 -4
- package/.dedao-extract/scratch/l002-5.pgm +0 -106
- package/.dedao-extract/scratch/l002-analysis.json +0 -17
- package/.dedao-extract/scratch/l002-before.pdf +0 -0
- package/.dedao-extract/scratch/l002-dom-inner.txt +0 -392
- package/.dedao-extract/scratch/l002-pdftotext.txt +0 -82
- package/.dedao-extract/scratch/l003-clean-inner.txt +0 -74
- package/.dedao-extract/scratch/l003-fix-inner.txt +0 -74
- package/.dedao-extract/scratch/l003-r3-base.pdf +0 -0
- package/.dedao-extract/scratch/l003-r3-base.txt +0 -109
- package/.dedao-extract/scratch/l003-r3-fix.pdf +0 -0
- package/.dedao-extract/scratch/l003-r3-fix.txt +0 -108
- package/.dedao-extract/scratch/pp-fk-r3-base-01.pgm +0 -32
- package/.dedao-extract/scratch/pp-fk-r3-base-02.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-base-03.pgm +0 -119
- package/.dedao-extract/scratch/pp-fk-r3-base-04.pgm +0 -496
- package/.dedao-extract/scratch/pp-fk-r3-base-05.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-base-06.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-base-07.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-base-08.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-base-09.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-base-10.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-base-11.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-base-12.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-base-13.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-base-14.pgm +0 -58
- package/.dedao-extract/scratch/pp-fk-r3-fix-01.pgm +0 -32
- package/.dedao-extract/scratch/pp-fk-r3-fix-02.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-fix-03.pgm +0 -119
- package/.dedao-extract/scratch/pp-fk-r3-fix-04.pgm +0 -496
- package/.dedao-extract/scratch/pp-fk-r3-fix-05.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-fix-06.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-fix-07.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-fix-08.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-fix-09.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-fix-10.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-fix-11.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-fix-12.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-fix-13.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-fix-14.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-s09-01.pgm +0 -15
- package/.dedao-extract/scratch/pp-fk-r3-s09-02.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-s09-03.pgm +0 -27
- package/.dedao-extract/scratch/pp-fk-r3-s09-04.pgm +1 -127
- package/.dedao-extract/scratch/pp-fk-r3-s09-05.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-s09-06.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-s09-07.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-s09-08.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-s09-09.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-s09-10.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-s09-11.pgm +0 -4
- package/.dedao-extract/scratch/pp-fk-r3-s09-12.pgm +0 -18
- package/.dedao-extract/scratch/pp-l003-r3-base-1.pgm +0 -7
- package/.dedao-extract/scratch/pp-l003-r3-base-2.pgm +0 -114
- package/.dedao-extract/scratch/pp-l003-r3-base-3.pgm +0 -4
- package/.dedao-extract/scratch/pp-l003-r3-base-4.pgm +0 -30
- package/.dedao-extract/scratch/pp-l003-r3-base-5.pgm +0 -4
- package/.dedao-extract/scratch/pp-l003-r3-base-6.pgm +0 -64
- package/.dedao-extract/scratch/pp-l003-r3-fix-1.pgm +0 -7
- package/.dedao-extract/scratch/pp-l003-r3-fix-2.pgm +0 -114
- package/.dedao-extract/scratch/pp-l003-r3-fix-3.pgm +0 -4
- package/.dedao-extract/scratch/pp-l003-r3-fix-4.pgm +0 -31
- package/.dedao-extract/scratch/pp-l003-r3-fix-5.pgm +0 -4
- package/.dedao-extract/scratch/promo-fk-datauri.txt +0 -1
- package/.dedao-extract/scratch/promo-fk.jpg +0 -0
- package/.dedao-extract/scratch/promo-l001.jpg +0 -0
- package/.dedao-extract/scratch/promo-l002.jpg +0 -0
- package/.dedao-extract/scratch/s8-ink-report.json +0 -447
- package/.dedao-extract/scratch/v2-fk-clean-inner.txt +0 -42
- package/.dedao-extract/scratch/v2-fk-it1.pdf +0 -0
- package/.dedao-extract/scratch/v2-fk-it2.pdf +0 -0
- package/.dedao-extract/scratch/v2-fk-it3.pdf +0 -0
- package/.dedao-extract/scratch/v2-l001-clean-inner.txt +0 -99
- package/.dedao-extract/scratch/v2-l001-it1.pdf +0 -0
- package/.dedao-extract/scratch/v2-l001-it2.pdf +0 -0
- package/.dedao-extract/scratch/v2-l002-clean-inner.txt +0 -53
- package/.dedao-extract/scratch/v2-l002-it1.pdf +0 -0
- package/.dedao-extract/scratch/v2-l002-it2.pdf +0 -0
- package/.dedao-extract/scratch/v3-fk-clean-inner.txt +0 -42
- package/.dedao-extract/scratch/v3-fk-it1.pdf +0 -0
- package/.dedao-extract/scratch/v3-fk-it2.pdf +0 -0
- package/.dedao-extract/scratch/v3-fk-it3.pdf +0 -0
- package/.dedao-extract/scratch/v3-l001-clean-inner.txt +0 -93
- package/.dedao-extract/scratch/v3-l001-it1.pdf +0 -0
- package/.dedao-extract/scratch/v3-l001-it2.pdf +0 -0
- package/.dedao-extract/scratch/v3-l002-clean-inner.txt +0 -49
- package/.dedao-extract/scratch/v3-l002-it1.pdf +0 -0
- package/.dedao-extract/scratch/v3-l002-it2.pdf +0 -0
- package/.dedao-extract/v2-01-navigate.json +0 -14
- package/.dedao-extract/v2-98-results.json +0 -128
- package/.dedao-extract/v2-99-log.json +0 -20
- package/.dedao-extract/v2-fk-figs-it1.json +0 -76
- package/.dedao-extract/v2-fk-figs-it2.json +0 -76
- package/.dedao-extract/v2-fk-fix-screen.json +0 -20
- package/.dedao-extract/v2-fk-meta.json +0 -145
- package/.dedao-extract/v2-fk-promo-audit.json +0 -12
- package/.dedao-extract/v2-fk-targets-it1.json +0 -94
- package/.dedao-extract/v2-fk-targets-it2.json +0 -94
- package/.dedao-extract/v2-l001-figs-it1.json +0 -62
- package/.dedao-extract/v2-l001-fix-screen.json +0 -20
- package/.dedao-extract/v2-l001-meta.json +0 -147
- package/.dedao-extract/v2-l001-promo-audit.json +0 -12
- package/.dedao-extract/v2-l001-targets-it1.json +0 -84
- package/.dedao-extract/v2-l002-figs-it1.json +0 -34
- package/.dedao-extract/v2-l002-fix-screen.json +0 -13
- package/.dedao-extract/v2-l002-meta.json +0 -126
- package/.dedao-extract/v2-l002-promo-audit.json +0 -12
- package/.dedao-extract/v2-l002-targets-it1.json +0 -46
- package/.dedao-extract/v2-qc-final.json +0 -60
- package/.dedao-extract/v3-01-navigate.json +0 -14
- package/.dedao-extract/v3-98-results.json +0 -530
- package/.dedao-extract/v3-99-log.json +0 -60
- package/.dedao-extract/v3-fk-figs-it1.json +0 -66
- package/.dedao-extract/v3-fk-figs-it2.json +0 -66
- package/.dedao-extract/v3-fk-fix-screen.json +0 -20
- package/.dedao-extract/v3-fk-meta.json +0 -164
- package/.dedao-extract/v3-fk-promo-audit.json +0 -12
- package/.dedao-extract/v3-fk-sikao.json +0 -6
- package/.dedao-extract/v3-fk-targets-it1.json +0 -84
- package/.dedao-extract/v3-fk-targets-it2.json +0 -84
- package/.dedao-extract/v3-l001-figs-it1.json +0 -54
- package/.dedao-extract/v3-l001-fix-screen.json +0 -19
- package/.dedao-extract/v3-l001-meta.json +0 -192
- package/.dedao-extract/v3-l001-promo-audit.json +0 -12
- package/.dedao-extract/v3-l001-sikao.json +0 -41
- package/.dedao-extract/v3-l001-targets-it1.json +0 -76
- package/.dedao-extract/v3-l002-figs-it1.json +0 -30
- package/.dedao-extract/v3-l002-fix-screen.json +0 -12
- package/.dedao-extract/v3-l002-meta.json +0 -172
- package/.dedao-extract/v3-l002-promo-audit.json +0 -12
- package/.dedao-extract/v3-l002-sikao.json +0 -32
- package/.dedao-extract/v3-l002-targets-it1.json +0 -42
- package/.dedao-extract/v3-qc-final.json +0 -77
- package/.dedao-extract/write-version-record.py +0 -43
- package/.dedao-scout/01-navigate.json +0 -14
- package/.dedao-scout/02-ready.json +0 -5
- package/.dedao-scout/03-sidebar-hits.json +0 -4
- package/.dedao-scout/04-sidebar-container.json +0 -38
- package/.dedao-scout/05-sidebar-total.json +0 -3
- package/.dedao-scout/06-sidebar-slice-000.json +0 -42
- package/.dedao-scout/07-firstpub.json +0 -12
- package/.dedao-scout/08-heads-audio.json +0 -117
- package/.dedao-scout/09-images.json +0 -4
- package/.dedao-scout/10-content-blocks.json +0 -4
- package/.dedao-scout/11-selected.json +0 -33
- package/.dedao-scout/12-layout.json +0 -75
- package/.dedao-scout/20-ready.json +0 -5
- package/.dedao-scout/21-sidebar-deep.json +0 -148
- package/.dedao-scout/22-right-blocks.json +0 -70
- package/.dedao-scout/23-title.json +0 -13
- package/.dedao-scout/24-playbtn-roots.json +0 -17
- package/.dedao-scout/25-chapter-mods.json +0 -4
- package/.dedao-scout/26-editor-children.json +0 -4
- package/.dedao-scout/27-audio.json +0 -6
- package/.dedao-scout/28-timeinfo-siblings.json +0 -49
- package/.dedao-scout/29-scroll.json +0 -11
- package/.dedao-scout/30-sidebar-scroll.json +0 -4
- package/.dedao-scout/31-click-001.json +0 -10
- package/.dedao-scout/32-after-click.json +0 -4
- package/.dedao-scout/33-audio-article.json +0 -4
- package/.dedao-scout/34-img-lazy.json +0 -27
- package/.dedao-scout/40-all-chapters.json +0 -146
- package/.dedao-scout/41-click-001.json +0 -6
- package/.dedao-scout/42-audio-article-structure.json +0 -4
- package/.dedao-scout/50-click.json +0 -5
- package/.dedao-scout/51-audio-structure.json +0 -111
- package/.dedao-scout/60-chapter-tree.json +0 -31
- package/.dedao-scout/99-log.json +0 -6
- package/.dedao-scout/scout.mjs +0 -246
- package/.dedao-scout/scout2.mjs +0 -163
- package/.dedao-scout/scout3.mjs +0 -132
- package/.dedao-scout/scout4.mjs +0 -119
- package/.dedao-scout/scout5.mjs +0 -89
- package/.dedao-scout/scout6.mjs +0 -100
- package/README.de.md +0 -441
- package/README.es.md +0 -441
- package/README.fr.md +0 -441
- package/README.ja.md +0 -440
- package/README.pt.md +0 -441
- package/README.ru.md +0 -441
- package/doc/20-/346/226/207/346/241/243/345/220/214/346/255/245/345/256/241/350/256/241.md +0 -280
- package/doc/23a-03/346/270/205/345/215/225/345/273/272/350/256/256-/346/226/271/346/263/225/350/256/272/346/243/200/350/256/250.md +0 -33
- package/probe-dedao/drive.mjs +0 -72
- package/probe-dedao/e1.js +0 -1
- package/probe-dedao/e2.js +0 -15
- package/probe-dedao/e2b.js +0 -14
- package/probe-dedao/e3.js +0 -12
- package/probe-dedao/e4.js +0 -11
- package/probe-dedao/nav.mjs +0 -25
- package/probe-dedao/probe.mjs +0 -76
- /package/doc/{support-alipay.jpg → assets/support-alipay.jpg} +0 -0
- /package/doc/{support-wechat.jpg → assets/support-wechat.jpg} +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-browser.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-desktop.md" +0 -0
- /package/doc/{19- → governance/01-}/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" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-review03.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-search.md" +0 -0
- /package/doc/{19- → governance/01-}/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" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round1-verdict.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round2-desktop.md" +0 -0
- /package/doc/{19- → governance/01-}/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" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round2-review03.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round2-search.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round3-arch.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round3-browser.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round3-desktop.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round3-review03.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round3-search.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round3-verdict.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round4-arch.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round4-desktop.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round4-search.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round4-verdict.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round5-arch.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round5-browser.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round5-desktop.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round5-search.md" +0 -0
- /package/doc/{19- → governance/01-}/346/234/200/344/274/230/346/200/247/345/256/241/346/237/245/350/275/256/346/254/241/round5-verdict.md" +0 -0
- /package/doc/{25- → governance/06-}/344/272/224/351/241/271/350/243/201/345/206/263/345/256/236/346/226/275/c1-/347/234/237/346/234/272/346/211/213/346/265/213.md" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/review-03.md" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/probe.mjs" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/s7fix-l3-result.json" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/s7fix-l3.mjs" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t1-network.mjs" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t1-result.json" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t2-asn-poll.jsonl" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t2-headless.mjs" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t2-result.json" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t2b-asn-type.mjs" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t2b-lsappinfo-during.txt" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t3-hidden.mjs" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t3-result.json" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4a-hidden-loggedin.mjs" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4a-result.json" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4b-focus.mjs" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4b-result.json" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4c-gaps.mjs" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4c-result.json" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4c-snapshot-ddg.txt" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4c-snapshot-example.txt" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4d-final.mjs" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4d-result.json" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4d-snapshot.txt" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4e-clickfill.mjs" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4e-result.json" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4e-snapshot-ddg-full.txt" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4e-snapshot-example-full.txt" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4e2-fill.mjs" +0 -0
- /package/doc/{27- → governance/08-}/351/235/231/351/273/230/346/200/247/345/205/250/351/235/242/345/256/241/350/256/241/verify-data/t4e2-result.json" +0 -0
- /package/doc/{28- → governance/09-}/351/235/231/351/273/230/345/256/210/345/210/231/345/256/241/350/256/241/review-03.md" +0 -0
- /package/doc/{29- → governance/10-}/351/224/231/351/205/215/346/234/272/345/210/266/345/256/241/350/256/241/enumerate.md" +0 -0
- /package/doc/{29- → governance/10-}/351/224/231/351/205/215/346/234/272/345/210/266/345/256/241/350/256/241/fixes.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/admin-tool_list.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/admin1.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/admin2.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/caps.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/doctor-cli.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/doctor-mcp.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/fetch1.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/forest.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/forest2.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-00-/346/200/273/347/273/223.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-admin-flow.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-admin-flow.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-cli-badcmd.err" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-cli-badcmd.out" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-cli-h.out" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-cli-help.err" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-cli-help.out" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-cli-v.out" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-cli-version.err" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-cli-version.exit" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-cli-version.out" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-doctor-cli.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-doctor-mcp.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-doctor-stealth.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-doctor-stealth2.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-forest-flow.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-forest-flow.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-http-fixture.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-meter.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-a1.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-a2.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-browse-out.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-browse.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-cost-out.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-cost.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-e1.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-e2.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-e3.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-l1-launch.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-l2-launch.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-l5-launch.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-life-loggedin.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-life-reaper-watch.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-life-res-after.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-life-res-before.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-life.sh" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-life2-res-after.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-life2-res-before.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-life2.sh" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-meter.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-probe2-out.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-probe2.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-r11-verify.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-read-flow.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-read-flow.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-replay-strict.out" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-replay.out" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-browse.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-infra.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-perf-lib.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-perf-probe.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-perf-probe2.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-perf-runA.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-perf-runA2.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-perf-runB.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-perf-runC.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-perf-runC2.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-perf-runD.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-perf.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-search.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-round1-verdict.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-sighup-flow.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-sighup-flow.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-sighup-flow2.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-ssrf-fall.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft-ssrf-fall.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-run.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s1.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s1.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s10.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s10.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s1b.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s1b.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s2.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s2.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s2b.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s2b.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s3.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s3.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s4.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s4.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s5.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s5.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s6.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s6.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s7rec.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s7rec.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s7rep.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s7rep.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s7rep2.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s7rep2.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s7stale.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s7stale.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s9.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s9.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s9b.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s9b.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s9c.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ft1-s9c.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/mcp-batch.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/mcp-wave1.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/mcp.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/search1.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/search2.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-acceptance.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-data/gate-output.txt" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-data/ts01-02-result.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-data/ts01-02.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-data/ts03-result.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-data/ts03.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-data/ts04-result.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-data/ts04.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-data/ts05-result.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-data/ts05.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-data/ts05b-result.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-data/ts05b.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-data/ts06-result.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/silence-data/ts06.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ssrf.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/ssrf2.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/t-entry-04.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/tools-full.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/u085.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/u085b.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/upstream-probe.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v19/v1-idle.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v19/v19-v1-idle.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v19/v19-v2-chrome-stop.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v19/v19-v3-tab-restore.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v19/v19-v4-shutdown.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v19/v19-v5-perf.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v19/v2-chrome-stop.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v19/v3-tab-restore.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v19/v4-shutdown.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v19/v5-perf.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v19-verify.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/resource-sampling.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v1-launch.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v1-screen.png" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v3-idle-reap.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v3-idle-reap.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v3b-a5-and-stop.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v3b-a5-and-stop.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v5-silent-tab.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v5-silent-tab.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v1x-data/v6-headless.json" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/v1x-silent-verify.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/w2-browse-session.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/w2-netprobe.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/w2-steps-full.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/w2-steps2.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/w2-time-call.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave1-browse.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave1-desktop-mcp.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave1-desktop.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave1-entry-cli.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave1-gov-search.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave1-summary.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-browse.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-desktop-cli.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-gov.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-misc.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-misc2.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-misc3.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-readtext.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-rt06.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-rt06b.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-run.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-search.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-summary.md" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-tools.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-tools2.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-tools3.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-tools4.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wave2-zod.mjs" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wayback.jsonl" +0 -0
- /package/doc/{17- → history/01-/345/212/237/350/203/275/346/265/213/350/257/225}/346/211/247/350/241/214/350/256/260/345/275/225/wayback2.jsonl" +0 -0
package/ARCHITECTURE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Lasso 架构
|
|
2
2
|
|
|
3
|
-
> 本文是 Lasso **v1.17.2** 的架构概览(user-first;深度架构基线见 [`doc/
|
|
3
|
+
> 本文是 Lasso **v1.17.2** 的架构概览(user-first;深度架构基线见 [`doc/architecture/01`](./doc/architecture/01-功能架构.md)(冻结于 2026-07-21,头部有现状对齐横幅);实施排期与决策记录见 [`doc/architecture/02`](./doc/architecture/02-实施排期.md);doc/ 目录导读见 [`doc/README.md`](./doc/README.md))。
|
|
4
4
|
|
|
5
5
|
## 1. 项目定位
|
|
6
6
|
|
|
@@ -11,9 +11,9 @@ Lasso 是 Claude Code 的**全交互**对外抓手 MCP(浏览器 + 桌面 +
|
|
|
11
11
|
|
|
12
12
|
**工具面(17 个 MCP 工具,`tools/list` 实跑核)**:`search / browse_headless / browse_logged_in / desktop / fetch_url / screenshot / pdf / network / read_text / search_local / wayback_lookup / fetch_feed / doctor / interact_roots / interact_observe / interact_act / admin`(另有 `browserbase` / `steel` 两个云通道工具按环境条件解锁,不在默认清单;对应 channel 名 `browse_cloud_browserbase` / `browse_cloud_steel`)。
|
|
13
13
|
|
|
14
|
-
四条交互通道:`search` / `browse_headless` / `browse_logged_in` / `desktop`,加 **`search_local` 本地私有搜索**(doc/
|
|
14
|
+
四条交互通道:`search` / `browse_headless` / `browse_logged_in` / `desktop`,加 **`search_local` 本地私有搜索**(doc/governance/05 裁决 B1「第四通道」:Chrome 历史 / Spotlight 文件,纯本地只读)与条件解锁的 `browse_cloud_steel` 云通道。所有通道共享同一套 fallback 范式 / 状态模型 / 工具风格(R-CI-02 红线:禁第二套做法);`search_local` 是唯一例外——纯本地只读查询无网络面、无 fallback 语义,走「工具直连」范式(照 `read_text` / `doctor-tool` 先例,不建 Channel 子类,防空壳对称 R-ABS-01)。
|
|
15
15
|
|
|
16
|
-
### 部署模型声明(守卫设计判据,v1.18.2 doc/
|
|
16
|
+
### 部署模型声明(守卫设计判据,v1.18.2 doc/governance/10 确立)
|
|
17
17
|
|
|
18
18
|
Lasso 的真实部署形态是**单用户、本地、stdio MCP**:一个用户在自己的机器上经 Claude Code 拉起一个 Lasso server 进程,没有多租户、没有远程调用方、没有对抗性租户争抢资源。由此确立守卫设计判据——**任何限额 / 熔断 / 拦截类守卫,其威胁模型必须存在于这个部署形态**:
|
|
19
19
|
|
|
@@ -22,7 +22,7 @@ Lasso 的真实部署形态是**单用户、本地、stdio MCP**:一个用户
|
|
|
22
22
|
- **环境瞬态不得升级惩罚**:长熔断(60min disable)只喂「持续故障类」(配额耗尽 / 凭据失效),DNS / 超时类毛刺归 60s 短熔断自愈——v1.18.2 F2。
|
|
23
23
|
- **豁免区**:SSRF 本体(私网 / 协议 / userinfo / deny 段)、2FA 红线(HighRiskGate + ElicitationPort fail-closed)、云通道付费双重解锁、防注入白名单——这些的威胁模型在单用户本地形态下**依然成立**(恶意网页 / 误触付费 / 注入攻击),保留原强度,不在放开之列。
|
|
24
24
|
|
|
25
|
-
> 判据的完整审计(47 处命中逐个裁决:4 修复 + 5 黄 + 19 保留)见 [`doc/
|
|
25
|
+
> 判据的完整审计(47 处命中逐个裁决:4 修复 + 5 黄 + 19 保留)见 [`doc/governance/10-错配机制审计/`](./doc/governance/10-错配机制审计/)。
|
|
26
26
|
|
|
27
27
|
## 2. 整体分层
|
|
28
28
|
|
|
@@ -151,7 +151,7 @@ outcome = worked | didnt | unknown
|
|
|
151
151
|
- **stdin-EOF 收尾**(v1.12):CC 异常退出 → 父进程死 → stdin EOF → 复用幂等 shutdown;受管子进程不再孤儿到 zombie reaper 1h 阈值(上游 SDK #2002 的进程侧缓解)
|
|
152
152
|
- **停机链全路径有界**(v1.13):Steel 会话释放双层 3s 上界(停机链 race 3s + fetch `AbortSignal.timeout(3s)`)——自托管 Steel 停摆/endpoint 悬挂(实测可挂 ~301s)不再拖死退出
|
|
153
153
|
- **`LASSO_PROXY` 出口代理**(v1.11):headless 经 `--proxy-server`、Steel 经 session `proxyUrl`;**`browse_logged_in` 永不读取**(用户真实 Chrome 出口原样,铁律);doctor `proxy_config` 回显
|
|
154
|
-
- **用户运行守则生命周期**(v1.18,doc/
|
|
154
|
+
- **用户运行守则生命周期**(v1.18,doc/governance/09-静默守则审计):① **D-5 修复**——exit 钩子收尾与优雅停机同裁决 `modes:["hidden"]`(`stopLaunchedChromesSync` 增加 modes 过滤):visible 登录窗口的存活期不再 = 当前 server 会话存活期(此前 stdin EOF 即被整树 SIGKILL,三次复现实锤);② **C2 opt-in 自动恢复**——`LASSO_AUTO_HIDE_AFTER_LOGIN=1` 时 chrome-idle-reaper 对台账 visible Chrome 做「登录墙消失 + 延迟窗(默认 10s,`LASSO_AUTO_HIDE_AFTER_LOGIN_DELAY_MS`)+ agent 安静」三检后 PID 定向 hide 转后台静默(默认 off;hide 非 kill,`chrome-show` 可逆;失效方向安全——判据不满足就降级回手动)。INV-82 守六组断言
|
|
155
155
|
|
|
156
156
|
## 4. desktop:四档新实现(v1.11 → v1.13,从「能看」到「能点」)
|
|
157
157
|
|
|
@@ -207,7 +207,7 @@ AxBackend interface(三平台同构 OutlineNode 契约)
|
|
|
207
207
|
8. **不变量脚本化**(CI 守门):**81 条 INV** 静态 grep + 形状测,防 refactor 回退;另有 `inv-selftest` 20 样本「注入违规 → 必红」复证(见 §10)
|
|
208
208
|
9. **平台差异隔离在 backend 内部**:AxBackend 三平台同构 OutlineNode 契约;TS 层零平台字面量
|
|
209
209
|
10. **质量轴静态映射**(v1.17 A1):`quality`(api/scrape/stale)按 `served_by` 静态映射,零启发式——宁缺毋假(查不到就不标)
|
|
210
|
-
11. **用户运行守则**(v1.18,doc/
|
|
210
|
+
11. **用户运行守则**(v1.18,doc/governance/09-静默守则审计确立为设计宪法):「能后台静默执行就尽量后台静默执行;不能完全静默则用户介入后**及时恢复**静默执行」。三条可判定子句——S1 能静默则静默(存在零打扰路径时不选非静默实现)/ S2 介入最小化(只在不可避免处介入,信号明确及时,范本 = C1 elicitation 同轮继续)/ S3 及时恢复(自动化三档:L2 系统自动 > L1 CC 可调 > L0 人工;kill 永远不是恢复手段——hide 才是)
|
|
211
211
|
|
|
212
212
|
## 6. 边界(08 §7)
|
|
213
213
|
|
|
@@ -222,13 +222,13 @@ Lasso 明确**不做**以下事情:
|
|
|
222
222
|
- **托管型云浏览器默认关**:cloud 通道必经 `LASSO_ALLOW_CLOUD_BROWSER=true` manual-switch + 端点/key 双重解锁(INV-25/74 守)。其中 **Steel 是自托管**(Apache-2.0 开源、本地 Docker、零 per-session 费、cookie 不出本地,v1.6)——与托管型(browserbase / stagehand,付费)区分;stagehand 是程序化实验通道(无 MCP 工具入口,doctor #39 探测 REST 契约)
|
|
223
223
|
- **macOS 先行**:Win/Linux backend 编译可证(cfg-gate + `cargo check --target`),真机执行待社区反馈(不伪造)
|
|
224
224
|
|
|
225
|
-
### 6.1 简单架构清单对齐(doc/
|
|
225
|
+
### 6.1 简单架构清单对齐(doc/testing/01 §6 终判)
|
|
226
226
|
|
|
227
|
-
对照「简单架构清单」38 条(架构思想录 02/03 体系)逐行判定,ft-round1 全量测试轮终判(2026-08-18,R1 独立裁决官):**✅27 / ⚠️11(全部有处置:修 1 + watch 6 + 接受理由 4)/ ❌0 / ⏸1**。三条 🔴 硬不变量全过:R-FF-01(import 图 467 边实跑零非法边)/ R-FF-02(值级 0 环)/ R-DEP-03(别名清除后 AST 扫 0 命中)。阈值均为起点值未校准。逐条格内裁决见 `doc/
|
|
227
|
+
对照「简单架构清单」38 条(架构思想录 02/03 体系)逐行判定,ft-round1 全量测试轮终判(2026-08-18,R1 独立裁决官):**✅27 / ⚠️11(全部有处置:修 1 + watch 6 + 接受理由 4)/ ❌0 / ⏸1**。三条 🔴 硬不变量全过:R-FF-01(import 图 467 边实跑零非法边)/ R-FF-02(值级 0 环)/ R-DEP-03(别名清除后 AST 扫 0 命中)。阈值均为起点值未校准。逐条格内裁决见 `doc/testing/01-功能测试清单.md` §6。
|
|
228
228
|
|
|
229
229
|
## 7. 搜索域终态(v1.14 → v1.17.1)
|
|
230
230
|
|
|
231
|
-
v1.13 后搜索域经历四次结构性修订(doc/
|
|
231
|
+
v1.13 后搜索域经历四次结构性修订(doc/governance/02 重审 → doc/governance/03 死层清除 → doc/governance/05 颠覆性调研 → doc/governance/06 五项裁决),终态如下。
|
|
232
232
|
|
|
233
233
|
### 7.1 终态链与扇出(v1.17 A3 后)
|
|
234
234
|
|
|
@@ -239,7 +239,7 @@ engine=auto(默认)→ 多源扇出(machine_mcp + brave 两 API 源)
|
|
|
239
239
|
```
|
|
240
240
|
|
|
241
241
|
- **machine_mcp**(v1.4):零配置复用本机 `~/.claude.json` 已配的 search MCP(只读不写、永不 log Authorization,INV-72)——v1.17 A3 后是智谱能力的**唯一载体**(直连档已删)
|
|
242
|
-
- **brave**:结构化 API 源。运营事实(doc/
|
|
242
|
+
- **brave**:结构化 API 源。运营事实(doc/governance/02 实核):Brave 免费档 2026-02 取消,现口径 $5/月赠送额度(≈1000 次/月量级);Bing API 已于 2025-08-11 退役——**BingChannel 已代码级删除**(v1.15 Phase A,INV-54 墓碑,存量配置静默忽略)
|
|
243
243
|
- **serp_http**(v1.15):brave 之前的 ~1s 裸 HTTP 快探(见 §7.2)
|
|
244
244
|
- **browse_headless 实搜兜底**:query 语言分流(CJK→百度,非 CJK→DDG 纯 HTML 端点,零 Key;v1.14 起 DDG 被挡时级联 Brave SERP HTML)
|
|
245
245
|
- **recording replay**:全源熔断时的最后兜底(过去录过的同 query fixture;v1.16 起加新鲜度门,见 §7.7)
|
|
@@ -250,7 +250,7 @@ engine=auto(默认)→ 多源扇出(machine_mcp + brave 两 API 源)
|
|
|
250
250
|
|
|
251
251
|
### 7.2 serp_http 快探层(v1.15 Phase B)
|
|
252
252
|
|
|
253
|
-
`src/serp/http-serp.ts`:browse_headless 之前的裸 HTTP SERP 探针(注入时 fallbacks 从 `[browse_headless]` 变 `[serp_http, browse_headless]`)。复用 browse_headless 的**同一 selector 集**(`selectors.ts` 三引擎:BAIDU / DDG / BRAVE_SERP)+ bot 探测,不起浏览器。真机对照(doc/
|
|
253
|
+
`src/serp/http-serp.ts`:browse_headless 之前的裸 HTTP SERP 探针(注入时 fallbacks 从 `[browse_headless]` 变 `[serp_http, browse_headless]`)。复用 browse_headless 的**同一 selector 集**(`selectors.ts` 三引擎:BAIDU / DDG / BRAVE_SERP)+ bot 探测,不起浏览器。真机对照(doc/governance/03):serp_http 1.9s / 20 条 vs 浏览器 5.3s / 0 条。真机坑有维护记录(brave 字体 CSS 垃圾结果、百度软挡终态 URL 校验),见 `doc/usage/03-SELECTOR-MAINTENANCE.md`。
|
|
254
254
|
|
|
255
255
|
### 7.3 content_blocks 第二跳(v1.17 A2′ 自研)
|
|
256
256
|
|
|
@@ -263,7 +263,7 @@ engine=auto(默认)→ 多源扇出(machine_mcp + brave 两 API 源)
|
|
|
263
263
|
|
|
264
264
|
### 7.4 search_local 第四通道(v1.17 B1)
|
|
265
265
|
|
|
266
|
-
`src/search-local/`(doc/
|
|
266
|
+
`src/search-local/`(doc/governance/05 裁决 B1 + doc/governance/06 裁决④):**本地私有搜索**——「我上周看过的那篇文章在哪」「我机器上哪些文件提到 X」。三源分阶段:
|
|
267
267
|
|
|
268
268
|
- `history`(默认):Chrome History 多 profile 只读 SQLite 查询(`chrome-history.ts`;`profile` 参数可选)
|
|
269
269
|
- `files`:`mdfind` / Spotlight(`mdfind.ts`)
|
|
@@ -282,13 +282,13 @@ engine=auto(默认)→ 多源扇出(machine_mcp + brave 两 API 源)
|
|
|
282
282
|
|
|
283
283
|
### 7.7 doctor 与运营事实探测
|
|
284
284
|
|
|
285
|
-
`doctor --deep`(v1.14,显式 opt-in,默认零网络副作用):#11b `brave_deep_probe` 对 Brave API 发一次最小真实请求,四分类——**200** key+计划均健康 / **401** key 无效 / **403**(或响应体含 plan 语义)计划层级失效 / **429** 限流(key 本身有效)——把「用户注册撞付费墙才发现」变成「doctor --deep 一跑就知道」。搜索供应商的运营事实漂移由 KEY-GUIDE 90 天重核制度对账(doc/
|
|
285
|
+
`doctor --deep`(v1.14,显式 opt-in,默认零网络副作用):#11b `brave_deep_probe` 对 Brave API 发一次最小真实请求,四分类——**200** key+计划均健康 / **401** key 无效 / **403**(或响应体含 plan 语义)计划层级失效 / **429** 限流(key 本身有效)——把「用户注册撞付费墙才发现」变成「doctor --deep 一跑就知道」。搜索供应商的运营事实漂移由 KEY-GUIDE 90 天重核制度对账(doc/governance/02 建制)。
|
|
286
286
|
|
|
287
287
|
## 8. 交互升级:elicitation 与 refs(v1.17 C1/C2)
|
|
288
288
|
|
|
289
289
|
### 8.1 elicitation 高风险回合内确认(C1)
|
|
290
290
|
|
|
291
|
-
`src/interact/ElicitationPort.ts`:HighRiskGate 命中高风险 pattern 时,向 CC 用户弹结构化确认(continue/skip/abort 三选一),替代「直接 blocked 中断」。安全模型(doc/
|
|
291
|
+
`src/interact/ElicitationPort.ts`:HighRiskGate 命中高风险 pattern 时,向 CC 用户弹结构化确认(continue/skip/abort 三选一),替代「直接 blocked 中断」。安全模型(doc/governance/06 裁决⑤):
|
|
292
292
|
|
|
293
293
|
- 三值决议:`accept`(本次放行)/ `decline`(维持 blocked)/ `unavailable`(能力未声明或任何异常——**fail-closed**,落回现行 didnt 路径 byte-identical)
|
|
294
294
|
- **能力预检前置**:客户端未声明 `elicitation.form` 能力 → 连请求都不发,100% 降级 didnt(测试钉死;升级客户端即得);单次确认 wall-clock 上限 120s
|
|
@@ -303,7 +303,7 @@ engine=auto(默认)→ 多源扇出(machine_mcp + brave 两 API 源)
|
|
|
303
303
|
|
|
304
304
|
- **SSRF**(INV-31,fetch_url / wayback / fetch_feed / serp_http / content_blocks 同函数同 config):默认拒私网 IP;fake-ip(198.18.0.0/15)内置放行;`redirect:"manual"` 防 302→169.254 绕过。**v1.17.1 加固**:IPv6 字面量 URL 剥括号后再 DNS lookup——此前 `[::1]` 带括号串在 TUN fake-ip 环境被当域名解析成 fake-ip,IPv6 loopback/ULA/IPv4-mapped 全部绕过(ft-round1 🔴FT-DEF-3,`src/ssrf/ssrf-guard.ts`)
|
|
305
305
|
- **HighRiskGate**:同 v1.17.1 修复裸 `JSON.parse` 解析围栏响应(异常 → gate_error 保守放行,C1 红线端到端失效)——改经 upstream-response 适配器 + INV-76(m) 防复发(ft-round1 🔴FT-DEF-1′)
|
|
306
|
-
- **静默性(v1.17.2,doc/
|
|
306
|
+
- **静默性(v1.17.2,doc/governance/08-静默性全面审计)**:六维打扰面(①OS 焦点 ②窗口 ③Dock/cmd-tab ④音频 ⑤通知 ⑥资源)逐通道白盒 + 真机审计后修复两个缺陷、固化全部边界——
|
|
307
307
|
- **S-7 修复(tab 内容劫持)**:上游 1.7.0 连接即 `selectPage(pages[0])`,v1.17.1 及之前 lasso 的 navigate 会改写用户第一个 tab(两轮真机复现)。现 `LoggedInChannel.ensureOwnPageSelected`(非台账 Chrome 路径):`CdpClient.createBackgroundTarget`(`Target.createTarget {background:true}`,E7 实证零抢焦)自建后台 tab → 上游 `list_pages` 前后 **id-diff 唯一归因**(上游 id 是进程内单调计数器;不取最大 id,防与用户同刻开 tab 竞态误归因)→ `select_page {pageId}` **不带 bringToFront**(上游激活严格 opt-in,省略 = 纯上下文指针切换,真机实测零 OS 焦点/零 tab 激活)。自建 tab 晚于 TabSession 快照 → 会话收尾 restore 关它(用户 tab 栏零残留)。任何失败(解析/归因/CDP/select 拒绝)warn 降级维持旧行为,永不阻断 browse。
|
|
308
308
|
- **S-10 修复(close_page 契约 + 所有权)**:旧 `close_page {url}` 在 1.7.0 wire 级必被 zod 拒(-32602,实测);且旧 reconcile 把全部列出 URL 入册(用户 tab 也是候选)。现 `TabRegistry` 按 `{pageId}` 关 + **登记制所有权**(`noteOwnPage` 只由 ensureOwnPageSelected 成功路径登记;用户 tab 无登记路径,close 淘汰在集合定义层面不可能落在用户 tab 上——红线机械化范式)。
|
|
309
309
|
- **诚实边界固化**(不可修,见 KEY-GUIDE/README 矩阵):desktop 物理键鼠设计占用;launch-chrome hidden 的 Dock 图标(有头 Chrome 注册 Foreground ASN,LSUIElement 不可控;headless 无此问题——真机实证无 Foreground ASN);visible 档语义即「看着干」;用户 Chrome 不静音(零注入铁律)+ 操作 tab 的 hasFocus 仿真(不抢 OS 焦点)。
|
|
@@ -316,12 +316,12 @@ engine=auto(默认)→ 多源扇出(machine_mcp + brave 两 API 源)
|
|
|
316
316
|
|---|---|---|---|
|
|
317
317
|
| 架构不变量 | `check-invariants.mjs`(自写) | INV-1..81 静态 grep + 形状测 | **81 条** |
|
|
318
318
|
| INV 自测 | `inv-selftest.mjs`(`npm run inv-selftest`) | 抽样 INV 做「注入违规 → 必红」复证 | **20 样本**(外部契约类全覆盖;未验证 pin 显性化报告) |
|
|
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/
|
|
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
321
|
| 跨平台编译 | cargo check --target | Windows (x86_64-pc-windows-msvc) + Linux (x86_64-unknown-linux-gnu) | CI Linux runner |
|
|
322
322
|
| 录制回放回归 | npm run replay-baseline | fixtures/serp-baseline/ × 三引擎 × 多 query | 12+ fixtures |
|
|
323
323
|
| 故障注入 | vitest | fallback 链 / 限流 / 政策 gate / SERP 改版 | ~20 场景 |
|
|
324
|
-
| 全量功能测试 | doc/
|
|
324
|
+
| 全量功能测试 | doc/testing/01 清单 + ft 执行记录 | 四面板(search / browse / infra / perf)~170 用例真机 | ft-round1 **ALL-CLEAN**(2026-08-18) |
|
|
325
325
|
| 契约锁 | chrome-devtools-mcp@**1.7.0** version pin(`LOCKED_CDP_MCP_VERSION` 单一真源) | 上游小版本升级不破 Lasso;迁移要点见 §2.1 | SubprocessManager.ts |
|
|
326
326
|
|
|
327
327
|
## 11. 不变量(82 条)分类
|
|
@@ -436,21 +436,21 @@ $ lasso launch-chrome
|
|
|
436
436
|
|
|
437
437
|
## 14. 版本与发布
|
|
438
438
|
|
|
439
|
-
- **当前版本**:`1.18.0`(doc/
|
|
439
|
+
- **当前版本**:`1.18.0`(doc/governance/09 静默守则审计修复轮:D-5 exit 钩子 visible 生存 + C2 登录后自动 hide opt-in + INV-82 + 守则入文档;2026-08-19)
|
|
440
440
|
- **version 真源**:`package.json` + `src/index.ts:LASSO_SERVER_VERSION` + `src/doctor/doctor.ts:LASSO_VERSION`(INV-63 守:三处必字面量一致)
|
|
441
441
|
- **doctor readiness**:全量 check pass → `ready: true`(检查项随版本增长,以实跑输出为准)
|
|
442
442
|
- **跨平台 backend**:macOS 本机全证;Win/Linux 编译可证 + 契约可证,真机执行待社区反馈
|
|
443
443
|
- **门禁四链**:`npm run build` / `npm test`(2292)/ `npm run check-invariants`(82)/ `npm run inv-selftest`(23)+ `cargo test`(207)
|
|
444
444
|
|
|
445
|
-
## 15. 质量与决策主线(doc/
|
|
445
|
+
## 15. 质量与决策主线(doc/governance/01 → doc/governance/06 → doc/testing/01)
|
|
446
446
|
|
|
447
447
|
2026-08-15 起的三段质量主线,决策记录全部在档(索引见 [`doc/README.md`](./doc/README.md)「决策时间线」):
|
|
448
448
|
|
|
449
|
-
1. **五轮最优性审查**(doc/
|
|
450
|
-
2. **搜索重审与死层清偿**(doc/
|
|
451
|
-
3. **方法论检讨与颠覆性调研**(doc/
|
|
452
|
-
4. **五项用户裁决**(doc/
|
|
453
|
-
5. **全量功能测试轮**(doc/
|
|
449
|
+
1. **五轮最优性审查**(doc/governance/01,v1.10 → v1.13):四域白盒复审 → 裁决 → 实施 → 独立审查循环,候选 16 → 14 → 7 → 1 → 0 单调收敛(round5 终裁 ROUND-CLEAN);四维结论选型 / 架构 / 范围 / 实施全最优。
|
|
450
|
+
2. **搜索重审与死层清偿**(doc/governance/02 → doc/governance/03,v1.14 / v1.15):运营事实对账(Brave 免费档 2026-02 取消、Bing API 2025-08-11 退役)暴露「机制达标、运行时诚实度未达标」→ free_only 路由接线 + DDG→Brave SERP 级联 + `doctor --deep` + KEY-GUIDE 90 天重核制度(v1.14);Bing 死层代码级清除(INV-54)+ serp_http 快探层(v1.15)。
|
|
451
|
+
3. **方法论检讨与颠覆性调研**(doc/governance/04(含原 23a 作附录A)→ doc/governance/05,v1.16):零基视角制度化(「搜索优化失效」根因 = 只在既有方案内比较);颠覆性扫描按 D-GO / D-DECISION / D-WATCH / D-NOGO 分级裁决 → 落地 D-GO 三项:freshness TTL 耦合 / fetch_feed / README 生态段(v1.16)。
|
|
452
|
+
4. **五项用户裁决**(doc/governance/06,v1.17):A1 quality 轴 / A3 删 zhipu 直连(INV-80)/ A2′ content_blocks 第二跳 / B1 search_local(INV-81)/ C1 elicitation + C2 include_refs。
|
|
453
|
+
5. **全量功能测试轮**(doc/testing/01,v1.17.1):四面板 ~170 用例真机执行,抓出并修复 6 缺陷(🔴IPv6 字面量 SSRF 绕过 / 🔴HighRiskGate 裸 JSON.parse / doWait 假成功 / tab_restore no-op / doctor file 键 / SIGHUP),R1 独立裁决 **ALL-CLEAN**;§6 简单架构 38 条终判见 §6.1。
|
|
454
454
|
|
|
455
455
|
方法学沉淀(供复用):裁决官不采信文档(关键声称白盒双源亲验);证据阶梯 L0-L3;mutation 即验收;「先拿事实再加参数」;收敛协议前置;零基视角才可见方案级盲区;决策分级(GO/DECISION/WATCH/NOGO)交用户裁决而非默认全做。
|
|
456
456
|
|
|
@@ -458,14 +458,14 @@ $ lasso launch-chrome
|
|
|
458
458
|
|
|
459
459
|
- [README.md](./README.md) — 用户手册(安装 / 配置 / 工具列表 / 隐私 / 故障排查)
|
|
460
460
|
- [doc/README.md](./doc/README.md) — doc/ 目录导读(用户向 / 维护手册 / 决策档案三分法 + 决策时间线 + 新鲜度表)
|
|
461
|
-
- [doc/
|
|
462
|
-
- [doc/
|
|
463
|
-
- [doc/
|
|
464
|
-
- [doc/
|
|
465
|
-
- [doc/TROUBLESHOOTING.md](./doc/TROUBLESHOOTING.md) — FAQ + error_kind 释义
|
|
466
|
-
- [doc/SELECTOR-MAINTENANCE.md](./doc/SELECTOR-MAINTENANCE.md) — selector 债维护手册
|
|
467
|
-
- [doc/
|
|
461
|
+
- [doc/architecture/01 功能架构](./doc/architecture/01-功能架构.md) — 权威架构基线(F 编号;冻结于 2026-07-21,头部含 v1.17.1 现状对齐横幅 + F 编号 ↔ 现实映射)
|
|
462
|
+
- [doc/architecture/02 实施排期](./doc/architecture/02-实施排期.md) — v0.1 → v1.17.1 能力跃升全路径与决策记录
|
|
463
|
+
- [doc/governance/01 最优性审查轮次](./doc/governance/01-最优性审查轮次/00-总结.md) — 五轮审查全记录(v1.10 → v1.13 质量主线)
|
|
464
|
+
- [doc/testing/01 功能测试清单](./doc/testing/01-功能测试清单.md) — 全量功能测试(ft-round1 ALL-CLEAN + §6 简单架构终判)
|
|
465
|
+
- [doc/usage/02-TROUBLESHOOTING.md](./doc/usage/02-TROUBLESHOOTING.md) — FAQ + error_kind 释义
|
|
466
|
+
- [doc/usage/03-SELECTOR-MAINTENANCE.md](./doc/usage/03-SELECTOR-MAINTENANCE.md) — selector 债维护手册
|
|
467
|
+
- [doc/governance/07 文档查缺补漏](./doc/governance/07-文档查缺补漏/gap-matrix.md) — 文档盘点矩阵(新鲜度档位 + F 编号映射真源)
|
|
468
468
|
|
|
469
469
|
---
|
|
470
470
|
|
|
471
|
-
本文档是 Lasso v1.17.1 架构概览(user-first;2026-08-18 同步,事实基准 = HEAD `1432bd4` 源码实核 + `tools/list` / `cargo test` / `check-invariants` 实跑)。深度架构基线(含 F 编号 / 不变量推导链 / 测试策略)见 [`doc/
|
|
471
|
+
本文档是 Lasso v1.17.1 架构概览(user-first;2026-08-18 同步,事实基准 = HEAD `1432bd4` 源码实核 + `tools/list` / `cargo test` / `check-invariants` 实跑)。深度架构基线(含 F 编号 / 不变量推导链 / 测试策略)见 [`doc/architecture/01`](./doc/architecture/01-功能架构.md);v0.1 → v1.17.1 实施排期(含每 phase 决策记录)见 [`doc/architecture/02`](./doc/architecture/02-实施排期.md)。
|
package/README.en.md
CHANGED
|
@@ -15,7 +15,7 @@ Twin star of [media-gen-mcp](https://github.com/wangdong233/media-gen-mcp) (the
|
|
|
15
15
|
|
|
16
16
|
<div align="center">
|
|
17
17
|
|
|
18
|
-
[简体中文](README.md) | **English**
|
|
18
|
+
[简体中文](README.md) | **English**
|
|
19
19
|
|
|
20
20
|
</div>
|
|
21
21
|
|
|
@@ -110,7 +110,7 @@ Your first output — just say to Claude:
|
|
|
110
110
|
- **Scrape logged-in pages** (Jira / private GitHub / company intranet) → run `lasso launch-chrome` once
|
|
111
111
|
- **Control the macOS desktop** → run `lasso doctor` once to be guided through authorization
|
|
112
112
|
|
|
113
|
-
How to obtain each key, what free tiers exist — see the [**Key Configuration Guide**](./doc/KEY-GUIDE.md).
|
|
113
|
+
How to obtain each key, what free tiers exist — see the [**Key Configuration Guide**](./doc/usage/01-KEY-GUIDE.md).
|
|
114
114
|
|
|
115
115
|
---
|
|
116
116
|
|
|
@@ -198,7 +198,7 @@ Goes to the Internet Archive (Wayback Machine) to find the last archived copy of
|
|
|
198
198
|
|
|
199
199
|
**Completely off by default.** Only activates when you explicitly turn it on AND have configured a cloud browser (self-hosted Steel or hosted browserbase/stagehand). Light anti-bot is already handled by `browse_headless`'s built-in anti-detection — **only Cloudflare-grade heavy protection needs the cloud browser**.
|
|
200
200
|
|
|
201
|
-
- **Steel self-hosted (recommended · free)**: run an open-source cloud browser in local Docker — zero per-session cost, cookies never leave your machine. One command to set up, see [Key Guide · Steel](./doc/KEY-GUIDE.md#steel_endpoint--自托管云浏览器v16-新推荐免费).
|
|
201
|
+
- **Steel self-hosted (recommended · free)**: run an open-source cloud browser in local Docker — zero per-session cost, cookies never leave your machine. One command to set up, see [Key Guide · Steel](./doc/usage/01-KEY-GUIDE.md#steel_endpoint--自托管云浏览器v16-新推荐免费).
|
|
202
202
|
- **browserbase (hosted · paid)**: pay-as-you-go after trial; the fallback when you don't want to run Docker yourself.
|
|
203
203
|
- **stagehand (hosted · paid)**: ⚠️ a programmatic experimental channel — configuring its key only assembles an internal channel, **there is no MCP tool entry** (the REST contract is unverified; `lasso doctor` #39 `stagehand_rest_contract_probe` tests exactly this).
|
|
204
204
|
|
|
@@ -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.6** (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
|
|
|
@@ -219,8 +219,11 @@ Restart Claude Code → `/mcp` → `lasso ✓ Connected`. **That's the one line
|
|
|
219
219
|
**macOS users wanting desktop control**: run `lasso doctor` once and tick `lasso-rust-helper` for "Accessibility" and "Screen Recording" as prompted — `doctor` walks you through it step by step.
|
|
220
220
|
|
|
221
221
|
<details>
|
|
222
|
-
<summary>📋 Changelog (v1.8 → v1.18.
|
|
222
|
+
<summary>📋 Changelog (v1.8 → v1.18.6 — click to see what each version changed)</summary>
|
|
223
223
|
|
|
224
|
+
- **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
|
+
- **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
|
+
- **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).
|
|
224
227
|
- **v1.18.3**: background-silence triple — ① **a window folded into the background by `chrome-hide` gets pressed back within ~1.5 s no matter what un-hides it** (upstream pages popping themselves included; guarded the whole time the server runs, and the sticky state survives restarts); use `chrome-show` when you want to look at it (explicit release, no more pressing back); ② `chrome-hide` / `chrome-show` gain `--pid N`: when the ledger has no entry (Chrome launched by an older Lasso, ledger cleared) you can target by process id — only Lasso's own profiles are accepted, your manually-opened daily Chrome is always refused; ③ a busy Chrome no longer slows down parallel operations.
|
|
225
228
|
- **v1.18.2**: fixed the mismatch where long batch tasks throttled themselves — batch tasks now run through by default (a single-user local setup has no "abuser" to guard against; quota self-throttling became an opt-in config); transient DNS failures are no longer misclassified as policy blocks and no longer trigger long circuit breaks; chain-budget overruns now honestly report as retryable; large-task spill files no longer evict recent pages.
|
|
226
229
|
- **v1.18.1**: five fixes from real batch runs — in-page evaluation failures are no longer silently swallowed (honestly reported); the "no tab selected" state self-heals instead of getting stuck; visible-tier cold-start probing now waits up to 12 s (slow-starting machines no longer fail spuriously); a missing PDF upstream tool is honestly reported up front as "didn't" instead of wasting a navigation first.
|
|
@@ -237,7 +240,7 @@ Restart Claude Code → `/mcp` → `lasso ✓ Connected`. **That's the one line
|
|
|
237
240
|
- **v1.11**: desktop goes from "can watch" to "can click" (click/type/scroll really implemented + coordinate mouse + `skeleton` pruning); driver layer upgraded to chrome-devtools-mcp 1.7.0 (launch-level stealth, telemetry off by default); search gained the `freshness` time filter; zero-key English fallback switched to DuckDuckGo; new `LASSO_PROXY` egress proxy.
|
|
238
241
|
- **v1.10**: browsers silent by default + closed when done (`launch-chrome` zero-window launch, ~60 s auto-close, `--mode visible` to revert).
|
|
239
242
|
- **v1.9**: browser lifecycle wind-down (headless auto-recycled after 5 minutes idle, `lasso chrome-stop`, `tab_restore` restores the original tab list).
|
|
240
|
-
- **v1.8**: fixed the 24 defects exposed by the full field test (upstream contract adaptation, screenshots actually landing on disk, `read_text` pagination, etc.) — full list in the "v1.8 fix record" of [doc/
|
|
243
|
+
- **v1.8**: fixed the 24 defects exposed by the full field test (upstream contract adaptation, screenshots actually landing on disk, `read_text` pagination, etc.) — full list in the "v1.8 fix record" of [doc/testing/01-功能测试清单.md](doc/testing/01-功能测试清单.md).
|
|
241
244
|
|
|
242
245
|
</details>
|
|
243
246
|
|
|
@@ -280,7 +283,7 @@ Takes effect on save. Brave is a paid plan that includes a \$5/month credit ≈
|
|
|
280
283
|
|
|
281
284
|
> Fallback order: machine MCP reuse → Brave (if a key is set) → live search in the headless browser as the last resort (v1.14: dual-engine English fallback — a DDG failure/empty result automatically retries once via Brave live search; v1.15 adds a **bare-HTTP quick probe** (~1s, fetches the results page with no browser at all — in real-machine tests some engines are less suspicious of browserless clients) before the slow headless path). If the one ahead fails, it auto-switches to the next. (The Bing source was removed outright after the upstream retired it on 2025-08-11, and the Zhipu direct tier was deleted in v1.17; leftover `BING_API_KEYS` / `ZHIPU_API_KEY` are silently ignored and `lasso doctor` will suggest removing them.)
|
|
282
285
|
|
|
283
|
-
How to apply for keys, how big the free tiers are → [Key Configuration Guide · Search](./doc/KEY-GUIDE.md#a-搜索). Common commands: `lasso --version` / `lasso --help` (since v1.8, unknown commands print usage and exit non-zero instead of silently hanging).
|
|
286
|
+
How to apply for keys, how big the free tiers are → [Key Configuration Guide · Search](./doc/usage/01-KEY-GUIDE.md#a-搜索). Common commands: `lasso --version` / `lasso --help` (since v1.8, unknown commands print usage and exit non-zero instead of silently hanging).
|
|
284
287
|
|
|
285
288
|
### 2. Scrape Logged-in Pages (✅ Free · one command, no key)
|
|
286
289
|
|
|
@@ -291,7 +294,7 @@ lasso launch-chrome
|
|
|
291
294
|
The first time, log in to your accounts in that window (handle 2FA yourself) — **the login state is reused from then on**. Afterwards, just say "open my logged-in Jira" to Claude.
|
|
292
295
|
|
|
293
296
|
- Works **silently with zero window** by default — never steals focus, always muted; add `--mode visible` to watch it work
|
|
294
|
-
-
|
|
297
|
+
- CLI-launched Chrome **no longer auto-closes by default** (v1.18.5 — a Chrome you explicitly asked for is never silently reaped by a background timer after 60 s); for "close when done" configure `LASSO_LAUNCH_IDLE_MS`; `lasso chrome-stop` closes it manually at any time
|
|
295
298
|
- Tabs it opens in your Chrome are restored to the original list when you say `admin {action:"tab_restore", reason:"done"}` after a task (the same happens automatically on server exit)
|
|
296
299
|
|
|
297
300
|
> 🔴 **Red line**: 2FA / verification codes / CAPTCHA — Lasso doesn't solve these for you; pass them manually once in the window.
|
|
@@ -301,16 +304,17 @@ The first time, log in to your accounts in that window (handle 2FA yourself) —
|
|
|
301
304
|
|
|
302
305
|
- Since v1.8, a dedicated Lasso profile is used by default (Chrome 136+ forbids opening a debug port on the default profile — the old way would exit instantly); to reuse an existing profile, use `lasso launch-chrome --profile <dir>`.
|
|
303
306
|
- After launch, the debug port is probed automatically; if Chrome didn't come up or the port is taken, it fails loudly instead of faking success.
|
|
304
|
-
- Auto-close threshold: `LASSO_LAUNCH_IDLE_MS` (default 60000; `300000` reverts to 5 minutes; `0` disables). To let a single long task through: `--idle-ms 3600000`.
|
|
307
|
+
- Auto-close threshold: `LASSO_LAUNCH_IDLE_MS` (default 60000; `300000` reverts to 5 minutes; `0` disables). To let a single long task through: `--idle-ms 3600000`. Since v1.18.5 an **explicit CLI launch defaults to `--idle-ms 0`** (outside the reaper's jurisdiction; explicit config via env / config.json still wins).
|
|
308
|
+
- **Keep-alive for external CDP consumers** (v1.18.5): when other tools (chrome-devtools-mcp, automation scripts, …) connect straight to this Chrome's debug port, a single `touch ~/.cache/lasso/chrome-touch-<port>` counts as "just used" — Lasso's idle reaper will not kill it. No resident Chrome is needed (hidden-tier cold start reaches a usable CDP in ~1.5 s measured); for a whole working session, launch with `--idle-ms 1800000` (auto-collects at the half-hour mark).
|
|
305
309
|
- The headless browser auto-recycles after 5 minutes idle (`LASSO_HEADLESS_IDLE_MS` to tune or disable).
|
|
306
310
|
- Honest boundary: running `lasso launch-chrome` standalone (outside the server) has no idle auto-close — the exit is `chrome-stop`; `browse_logged_in` connecting to **your own visible Chrome** is "low-disturbance, not zero-disturbance" (a macOS platform-level limitation — occasional operations may steal focus once) — for pure silence use the hidden tier or `browse_headless`; `desktop` simulates a real human's keyboard and mouse, so it occupies the physical keyboard/mouse by design — there is no silent form.
|
|
307
311
|
- chrome-stop only closes the Chromes Lasso itself launched, with verified ownership — it never touches your manually-opened browsers.
|
|
308
312
|
- `chrome-hide` / `chrome-show` likewise only touch ledger-registered Chromes (pid-targeted, never your manually-opened browsers); hide only hides the window — process / login state / CDP all stay. If the ledger has no entry, target by process id with `--pid N` (see above; anything that isn't Lasso's own profile is refused).
|
|
309
|
-
- Hide is **sticky** (v1.18.3
|
|
313
|
+
- Hide is **sticky** (v1.18.3; full lifecycle in v1.18.5): a hidden window un-hidden by any source (an upstream page popping itself, a tab opened by an external tool, a system focus switch) is pressed back into the background within ~1.5 s; use `chrome-show` when you want to look at it (explicit release, no more pressing back). The sticky state survives restarts; since v1.18.5 the hidden tier is **protected from birth** (the launch itself writes the sticky ledger), and a standalone enforcer process backs it — **even when the Claude session / server is gone, an un-hidden Chrome gets pressed back** (the enforcer is a short-lived process that self-exits on an empty ledger — no resident overhead).
|
|
310
314
|
|
|
311
315
|
</details>
|
|
312
316
|
|
|
313
|
-
**Details** → [Key Configuration Guide · Logged-in Browsing](./doc/KEY-GUIDE.md#b-登录态浏览命令行配置无-key).
|
|
317
|
+
**Details** → [Key Configuration Guide · Logged-in Browsing](./doc/usage/01-KEY-GUIDE.md#b-登录态浏览命令行配置无-key).
|
|
314
318
|
|
|
315
319
|
### 3. Drive the Desktop (✅ Free · authorize once, no key)
|
|
316
320
|
|
|
@@ -320,7 +324,7 @@ The first time, log in to your accounts in that window (handle 2FA yourself) —
|
|
|
320
324
|
|
|
321
325
|
> Honest boundary: macOS is verified in real environments; Windows / Linux pass compile-time and contract-level self-checks, while full real-machine manual testing is still in progress — no faking "fully verified".
|
|
322
326
|
|
|
323
|
-
**Details** → [Key Configuration Guide · Desktop Control](./doc/KEY-GUIDE.md#c-桌面控制系统授权无-key).
|
|
327
|
+
**Details** → [Key Configuration Guide · Desktop Control](./doc/usage/01-KEY-GUIDE.md#c-桌面控制系统授权无-key).
|
|
324
328
|
|
|
325
329
|
### 4. Cloud Browser (off by default · only needed for heavy anti-bot)
|
|
326
330
|
|
|
@@ -337,7 +341,7 @@ Light anti-bot is already handled by `browse_headless`'s built-in anti-detection
|
|
|
337
341
|
- **browserbase hosted (paid)**: swap in `"BROWSERBASE_API_KEY": "your_key"` — the fallback when you don't want to run Docker
|
|
338
342
|
- ⚠️ stagehand: a programmatic experimental channel with no MCP tool entry — don't count on it for scraping pages
|
|
339
343
|
|
|
340
|
-
**How to apply for keys, full Steel setup steps** → [Key Configuration Guide · Cloud Browser](./doc/KEY-GUIDE.md#d-云浏览器反爬默认关双重解锁).
|
|
344
|
+
**How to apply for keys, full Steel setup steps** → [Key Configuration Guide · Cloud Browser](./doc/usage/01-KEY-GUIDE.md#d-云浏览器反爬默认关双重解锁).
|
|
341
345
|
|
|
342
346
|
<details>
|
|
343
347
|
<summary><b>Advanced tuning (optional — ordinary users can skip)</b></summary>
|
|
@@ -355,7 +359,7 @@ You can **completely ignore** the below for daily use. These are only for specia
|
|
|
355
359
|
- Set an egress proxy for browsers (`LASSO_PROXY`, e.g. `http://127.0.0.1:7890`; **affects the headless browser and the Steel cloud browser only — your logged-in Chrome's egress always stays as-is** — v1.11)
|
|
356
360
|
- Set the Steel self-hosted cloud browser endpoint (`STEEL_ENDPOINT`, e.g. `http://localhost:3000`; needs `LASSO_ALLOW_CLOUD_BROWSER=true` too in order to activate)
|
|
357
361
|
|
|
358
|
-
Full variable list and defaults: [Key Configuration Guide · Advanced Tuning](./doc/KEY-GUIDE.md#e-高级调优可选全不配). **Surge / Clash TUN proxy networks (fake-ip, `198.18.0.0/15`) and `127.0.0.1` (used by the local Chrome CDP debug port) are already allowed out of the box** — no extra configuration needed. That's by design, not a missing setting.
|
|
362
|
+
Full variable list and defaults: [Key Configuration Guide · Advanced Tuning](./doc/usage/01-KEY-GUIDE.md#e-高级调优可选全不配). **Surge / Clash TUN proxy networks (fake-ip, `198.18.0.0/15`) and `127.0.0.1` (used by the local Chrome CDP debug port) are already allowed out of the box** — no extra configuration needed. That's by design, not a missing setting.
|
|
359
363
|
|
|
360
364
|
> **Backward compatible**: if you previously installed with `claude mcp add -e KEY=VAL`, those env variables **still work** and **override** the config file. The config file is just an additional, friendlier path — it does not replace env.
|
|
361
365
|
|
|
@@ -390,7 +394,7 @@ Your data is yours.
|
|
|
390
394
|
| Prompted that internal-network access was blocked | Double-check the URL; TUN proxy networks are allowed by default, other internal networks need explicit permission |
|
|
391
395
|
| Want to verify the anti-detection effect | Run `lasso doctor --stealth-check` — it drives the creepjs detection page and compares against a baseline (optional, doesn't affect daily use) |
|
|
392
396
|
|
|
393
|
-
Full FAQ and debugging tips in [`doc/TROUBLESHOOTING.md`](./doc/TROUBLESHOOTING.md).
|
|
397
|
+
Full FAQ and debugging tips in [`doc/usage/02-TROUBLESHOOTING.md`](./doc/usage/02-TROUBLESHOOTING.md).
|
|
394
398
|
|
|
395
399
|
---
|
|
396
400
|
|
|
@@ -420,7 +424,7 @@ If Lasso helps you, buy the author a coffee ☕
|
|
|
420
424
|
|
|
421
425
|
WeChat | Alipay
|
|
422
426
|
:-: | :-:
|
|
423
|
-
<img src="doc/support-wechat.jpg" height="200" alt="WeChat sponsor QR"> | <img src="doc/support-alipay.jpg" height="200" alt="Alipay sponsor QR">
|
|
427
|
+
<img src="doc/assets/support-wechat.jpg" height="200" alt="WeChat sponsor QR"> | <img src="doc/assets/support-alipay.jpg" height="200" alt="Alipay sponsor QR">
|
|
424
428
|
|
|
425
429
|
</div>
|
|
426
430
|
|
|
@@ -430,15 +434,15 @@ Or ⭐ [Star this repo](../../stargazers), [open an Issue](../../issues), or [se
|
|
|
430
434
|
|
|
431
435
|
## More Docs
|
|
432
436
|
|
|
433
|
-
- Deep architecture? See [Feature Architecture](doc/
|
|
434
|
-
- Version roadmap? See [Implementation Roadmap](doc/
|
|
435
|
-
- Key setup? See [Key Configuration Guide](doc/KEY-GUIDE.md)
|
|
437
|
+
- Deep architecture? See [Feature Architecture](doc/architecture/01-功能架构.md)
|
|
438
|
+
- Version roadmap? See [Implementation Roadmap](doc/architecture/02-实施排期.md)
|
|
439
|
+
- Key setup? See [Key Configuration Guide](doc/usage/01-KEY-GUIDE.md)
|
|
436
440
|
|
|
437
441
|
## License
|
|
438
442
|
|
|
439
443
|
**MIT** © wangdong233. The desktop helper process and browser-engine dependencies are all MIT / Apache-2.0 — safe for enterprise use.
|
|
440
444
|
|
|
441
|
-
> Want the internal architecture, design principles, cross-platform boundaries, and dev commands? See [ARCHITECTURE.md](./ARCHITECTURE.md) and [`doc/TROUBLESHOOTING.md`](./doc/TROUBLESHOOTING.md).
|
|
445
|
+
> Want the internal architecture, design principles, cross-platform boundaries, and dev commands? See [ARCHITECTURE.md](./ARCHITECTURE.md) and [`doc/usage/02-TROUBLESHOOTING.md`](./doc/usage/02-TROUBLESHOOTING.md).
|
|
442
446
|
|
|
443
447
|
<p align="center">
|
|
444
448
|
<sub>Built for everyone who'd rather <strong>say it</strong> than <strong>script it</strong>.</sub><br>
|
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
<div align="center">
|
|
17
17
|
|
|
18
|
-
**简体中文** | [English](README.en.md)
|
|
18
|
+
**简体中文** | [English](README.en.md)
|
|
19
19
|
|
|
20
20
|
</div>
|
|
21
21
|
|
|
@@ -111,7 +111,7 @@ claude mcp add lasso -- npx -y lasso-mcp
|
|
|
111
111
|
- **抓登录态页** → 跑一次 `lasso launch-chrome`
|
|
112
112
|
- **控 macOS 桌面** → 跑一次 `lasso doctor` 授权
|
|
113
113
|
|
|
114
|
-
key 怎么申请、免费额度多少 → [**Key 配置指南**](./doc/KEY-GUIDE.md)。
|
|
114
|
+
key 怎么申请、免费额度多少 → [**Key 配置指南**](./doc/usage/01-KEY-GUIDE.md)。
|
|
115
115
|
|
|
116
116
|
---
|
|
117
117
|
|
|
@@ -207,7 +207,7 @@ macOS 上能控 Finder / Mail / Safari / Notes / 系统设置等任何原生 app
|
|
|
207
207
|
|
|
208
208
|
默认**完全关闭**。只有你明确要开、并且配了云浏览器(自托管 Steel 或托管型 browserbase/stagehand),才会启用。轻度反爬 `browse_headless` 自带反检测就能过,**只有 Cloudflare 级重度反爬才需要走云浏览器**。
|
|
209
209
|
|
|
210
|
-
- **Steel 自托管(推荐 · 免费)**:本地 Docker 跑一个开源云浏览器,零 per-session 费、cookie 不出本地。一行命令开通,见 [Key 配置指南 · Steel](./doc/KEY-GUIDE.md#steel_endpoint--自托管云浏览器v16-新推荐免费)。
|
|
210
|
+
- **Steel 自托管(推荐 · 免费)**:本地 Docker 跑一个开源云浏览器,零 per-session 费、cookie 不出本地。一行命令开通,见 [Key 配置指南 · Steel](./doc/usage/01-KEY-GUIDE.md#steel_endpoint--自托管云浏览器v16-新推荐免费)。
|
|
211
211
|
- **browserbase(托管型 · 付费)**:试用后按量付费,不想自己跑 Docker 时的备选。
|
|
212
212
|
- **stagehand(托管型 · 付费)**:⚠️ 程序化实验通道——配 key 只装配内部 channel,**没有 MCP 工具入口**(REST 契约未经验证;`lasso doctor` #39 `stagehand_rest_contract_probe` 专测此项)。
|
|
213
213
|
|
|
@@ -215,7 +215,7 @@ macOS 上能控 Finder / Mail / Safari / Notes / 系统设置等任何原生 app
|
|
|
215
215
|
|
|
216
216
|
## 安装
|
|
217
217
|
|
|
218
|
-
**当前版本 v1.18.
|
|
218
|
+
**当前版本 v1.18.6**(更新日志见本节末尾折叠块)。
|
|
219
219
|
|
|
220
220
|
前提:Node.js ≥ 20 + Claude Code(或任何支持 MCP 的客户端)。
|
|
221
221
|
|
|
@@ -228,8 +228,10 @@ claude mcp add lasso -- npx -y lasso-mcp
|
|
|
228
228
|
**macOS 想控桌面**:跑一次 `lasso doctor`,按提示给 `lasso-rust-helper` 勾上「辅助功能」和「屏幕录制」权限即可,doctor 会一步步引导。
|
|
229
229
|
|
|
230
230
|
<details>
|
|
231
|
-
<summary>📋 更新日志(v1.8 → v1.18.
|
|
231
|
+
<summary>📋 更新日志(v1.8 → v1.18.6,点开看每版改了什么)</summary>
|
|
232
232
|
|
|
233
|
+
- **v1.18.6**:外部消费与隐藏执守闭环——① 命令行拉起的 Chrome 默认**不再 60s 被后台静默回收**(外部 CDP 直连工具之前稳定 60-75s 被误杀,如自动化工作流);外部消费者还可用 `touch ~/.cache/lasso/chrome-touch-<端口>` 一行续命;② 「隐藏的 Chrome 有时藏不住」根治——hidden 档出生即写粘滞账 + 独立执守进程兜底(server 不在也 ≤2s 压回,账空自退不留常驻进程)。
|
|
234
|
+
- **v1.18.5**:发布包清理——**v1.18.1 ~ v1.18.4 的 npm 包误含应用域文件**(某课程抓取工程的中间产物,与 lasso 本体功能无关,已弃用),这些版本请勿安装;本版起发布面收敛为 lasso 本体,体积从 ~28MB 降回正常。
|
|
233
235
|
- **v1.18.4**:desktop 通道修复——① 此前 server 不是从仓库根目录启动时(比如由 Claude Code 等宿主在任意目录拉起),desktop 工具会全部报错 `rust_helper_crashed`:现在 helper 路径按安装位置自动解析,**任意目录启动都可用**;② desktop 起不来时的报错从「裸错误码」变成一眼自诊断(附实际路径、当前目录、修复办法;缺文件/指到目录/缺执行权限/文件损坏各说各话,秒级失败不空等);③ 二进制构建时自动 ad-hoc 签名(无签名环境的机器跳过不报错);④ 新增 GitHub CI(每次推送自动跑全量测试)。
|
|
234
236
|
- **v1.18.3**:Chrome 后台静默三连——① **`chrome-hide` 转后台的窗口被任何来源掀出(含上游页面自己弹的),约 1.5 秒内自动压回后台**(server 运行期间一直守着,粘滞状态跨重启保留);想看窗口用 `chrome-show`(明示解除,不再压回);② `chrome-hide` / `chrome-show` 新增 `--pid N`:台账缺条目时(Chrome 由旧版启动、台账被清)按进程号直达——只认 lasso 自己的 profile,你手动开的日常 Chrome 一律拒绝;③ Chrome 正忙时不再拖慢并行的其它操作。
|
|
235
237
|
- **v1.18.2**:长任务被自己限流的错配修复——批量任务默认直接放行(单用户本地场景没有「滥用者」,配额自控改为可选配置);瞬态 DNS 故障不再被误判成策略拦截、不再误开长熔断;链预算超限如实报可重试;大任务溢写落盘不再挤掉近期页面。
|
|
@@ -246,7 +248,7 @@ claude mcp add lasso -- npx -y lasso-mcp
|
|
|
246
248
|
- **v1.11**:桌面从「能看」变「能点」(click/type/scroll 真实现 + 坐标鼠标 + `skeleton` 剪枝);驱动层升 chrome-devtools-mcp 1.7.0(反检测启动级生效、默认关遥测);搜索新增 `freshness` 时效过滤;英文查询零 Key 兜底换 DuckDuckGo;新增 `LASSO_PROXY` 出口代理。
|
|
247
249
|
- **v1.10**:浏览器默认静默 + 用完即关(`launch-chrome` 零窗口启动、~60 秒自动关,`--mode visible` 可回退)。
|
|
248
250
|
- **v1.9**:浏览器生命周期收尾(无头空闲 5 分钟自动回收、`lasso chrome-stop`、`tab_restore` 恢复原 tab 列表)。
|
|
249
|
-
- **v1.8**:修复全量实测暴露的 24 条缺陷(上游契约适配、截图真实落盘、`read_text` 续页等)——完整清单见 [doc/
|
|
251
|
+
- **v1.8**:修复全量实测暴露的 24 条缺陷(上游契约适配、截图真实落盘、`read_text` 续页等)——完整清单见 [doc/testing/01-功能测试清单.md](doc/testing/01-功能测试清单.md) 的「v1.8 修复记录」。
|
|
250
252
|
|
|
251
253
|
</details>
|
|
252
254
|
|
|
@@ -287,7 +289,7 @@ lasso config init # 创建 ~/.lasso/config.json
|
|
|
287
289
|
|
|
288
290
|
> 降级顺序:机器 MCP 复用 → Brave(配了 key 时)→ 无头浏览器实搜兜底(v1.14 起英文兜底双引擎:DuckDuckGo 失败/空结果自动再试一次 Brave 实搜;v1.15 起无头浏览器之前先加一层**裸 HTTP 快探**(约 1 秒,无浏览器直接抓搜索结果页——实测部分搜索引擎对「无浏览器」反而更不设防),探不到再启动无头浏览器慢路径)。前一个挂了自动切下一个。(Bing 源已随上游 2025-08-11 退役整层移除、智谱直连档已于 v1.17 删除;历史配置里的 `BING_API_KEYS` / `ZHIPU_API_KEY` 会被静默忽略,`lasso doctor` 会提示删除。)
|
|
289
291
|
|
|
290
|
-
key 怎么申请、免费额度多少 → [Key 配置指南 · 搜索](./doc/KEY-GUIDE.md#a-搜索)。常用命令:`lasso --version` / `lasso --help`(v1.8 起未知命令打印用法非零退出,不再静默挂起)。
|
|
292
|
+
key 怎么申请、免费额度多少 → [Key 配置指南 · 搜索](./doc/usage/01-KEY-GUIDE.md#a-搜索)。常用命令:`lasso --version` / `lasso --help`(v1.8 起未知命令打印用法非零退出,不再静默挂起)。
|
|
291
293
|
|
|
292
294
|
### 二、抓登录态页面(✅ 免费 · 一行命令,不用 key)
|
|
293
295
|
|
|
@@ -312,7 +314,7 @@ lasso launch-chrome
|
|
|
312
314
|
以后对 Claude 说「打开我已登录的 Jira」就行。想再看窗口随时 `lasso chrome-show`(可逆,登录态不动)。
|
|
313
315
|
|
|
314
316
|
- 默认**零窗口静默**干活、不抢焦点、永远静音;想看着它干加 `--mode visible`
|
|
315
|
-
-
|
|
317
|
+
- 命令行拉起的 Chrome **默认不再自动关**(v1.18.5——手敲命令要的 Chrome 不被后台 60s 静默回收);想要「用完即关」在 config 配 `LASSO_LAUNCH_IDLE_MS`,手动关随时 `lasso chrome-stop`
|
|
316
318
|
- 它在你 Chrome 里开的 tab,任务后说 `admin {action:"tab_restore", reason:"完成"}` 恢复原列表(server 退出也会自动做)
|
|
317
319
|
|
|
318
320
|
> 🔴 **红线**:2FA / 验证码 / CAPTCHA——Lasso 不替你解,你在窗口里手动过一次。
|
|
@@ -322,17 +324,18 @@ lasso launch-chrome
|
|
|
322
324
|
|
|
323
325
|
- v1.8 起默认用 Lasso 独立 profile(Chrome 136+ 禁止对默认 profile 开调试端口,老办法会秒退);复用已有 profile 用 `lasso launch-chrome --profile <目录>`。
|
|
324
326
|
- 启动后自动探活调试端口,Chrome 没起来 / 端口被占会明确报错,不假报成功。
|
|
325
|
-
- 自动关阈值:`LASSO_LAUNCH_IDLE_MS`(默认 60000;`300000` 回退 5 分钟;`0` 禁用)。单次长任务放行:`--idle-ms 3600000`。
|
|
327
|
+
- 自动关阈值:`LASSO_LAUNCH_IDLE_MS`(默认 60000;`300000` 回退 5 分钟;`0` 禁用)。单次长任务放行:`--idle-ms 3600000`。v1.18.5 起**命令行显式拉起默认 `--idle-ms 0`**(不进 reaper 管辖;显式配置 env / config.json 仍最高优先)。
|
|
328
|
+
- **外部 CDP 消费者续命**(v1.18.5):其他工具(chrome-devtools-mcp、自动化脚本等)直连这条 Chrome 的调试端口时,一行 `touch ~/.cache/lasso/chrome-touch-<端口>` 即视为「刚用过」,lasso 的 idle 回收不会误杀它;不需要常驻(hidden 档冷启动实测 1.5s 内 CDP 可用),一整段会话要用就拉起时配 `--idle-ms 1800000`(半小时到点自动收)。
|
|
326
329
|
- 登录后自动收窗:`LASSO_AUTO_HIDE_AFTER_LOGIN`(默认 false;开启后只在「见过登录页 → 登录页消失 → 等 10 秒 → Claude 没在用」四关全过时才收,收错方向保守——拿不准就不收)。等待时长 `LASSO_AUTO_HIDE_AFTER_LOGIN_DELAY_MS`(默认 10000)。只在 server 会话运行期间生效(CLI 单独 `launch-chrome` 没有调度器,仍走手动 `chrome-hide`)。
|
|
327
330
|
- 无头浏览器空闲 5 分钟自动回收(`LASSO_HEADLESS_IDLE_MS` 可调/禁用)。
|
|
328
331
|
- 诚实边界:单独跑 `lasso launch-chrome`(不经 server)没有 idle 自动关,出口是 `chrome-stop`;它起的 Chrome 在 Dock / 任务栏会多一个图标(浏览器有头进程的注册行为,lasso 控制不了),要零图标用 `browse_headless`;`browse_logged_in` 连**你自己开的可见 Chrome** 时会在你的 Chrome 里临时开一个后台 tab 干活(不抢焦点不发声,结束自动关,v1.17.2 起你的 tab 一律不被改写)——但你的 Chrome 本身不静音(lasso 不改写你的浏览器参数),浏览到自动播放页面会真出声;`desktop` 模拟真人键鼠,设计上就占用物理键鼠,没有静默形态。
|
|
329
332
|
- chrome-stop 只关 Lasso 自己起的、验证过归属的 Chrome,不会误伤你手动开的浏览器。
|
|
330
333
|
- `chrome-hide` / `chrome-show` 同样只动台账在案的 Chrome(按 pid 定向,永不碰你手动开的浏览器);hide 只隐藏窗口,进程/登录态/CDP 全保留。台账缺条目时按 `--pid N` 直达(见上文;归属不满足会明确拒绝)。
|
|
331
|
-
- hide 是**粘滞**的(v1.18.3
|
|
334
|
+
- hide 是**粘滞**的(v1.18.3,v1.18.5 补全生命周期):已 hide 的窗口无论被什么来源掀出(上游页面自己弹的、外部工具开的 tab、系统焦点切换),约 1.5 秒内自动压回后台;想看窗口用 `chrome-show`(明示解除,不再压回)。粘滞状态跨重启保留;v1.18.5 起 hidden 档**出生即受保护**(拉起落账即写粘滞),且由独立执守进程兜底——**即使 Claude 会话/server 不在,隐藏的 Chrome 被掀出也会被压回**(执守是账空自退的短命进程,不留常驻开销)。
|
|
332
335
|
|
|
333
336
|
</details>
|
|
334
337
|
|
|
335
|
-
**详见** → [Key 配置指南 · 登录态浏览](./doc/KEY-GUIDE.md#b-登录态浏览命令行配置无-key)。
|
|
338
|
+
**详见** → [Key 配置指南 · 登录态浏览](./doc/usage/01-KEY-GUIDE.md#b-登录态浏览命令行配置无-key)。
|
|
336
339
|
|
|
337
340
|
### 三、控桌面(✅ 免费 · 授权一次,不用 key)
|
|
338
341
|
|
|
@@ -342,7 +345,7 @@ lasso launch-chrome
|
|
|
342
345
|
|
|
343
346
|
> 诚实边界:macOS 经真实环境验证;Windows / Linux 编译和契约层过自检,真机完整手测推进中,不伪造「已完整验证」。
|
|
344
347
|
|
|
345
|
-
**详见** → [Key 配置指南 · 桌面控制](./doc/KEY-GUIDE.md#c-桌面控制系统授权无-key)。
|
|
348
|
+
**详见** → [Key 配置指南 · 桌面控制](./doc/usage/01-KEY-GUIDE.md#c-桌面控制系统授权无-key)。
|
|
346
349
|
|
|
347
350
|
### 四、云浏览器(默认关 · 只有重度反爬才需要)
|
|
348
351
|
|
|
@@ -359,7 +362,7 @@ lasso launch-chrome
|
|
|
359
362
|
- **browserbase 托管(付费)**:换配 `"BROWSERBASE_API_KEY": "你的key"`,不想跑 Docker 的备选
|
|
360
363
|
- ⚠️ stagehand:程序化实验通道,无 MCP 工具入口,别指望它抓页面
|
|
361
364
|
|
|
362
|
-
**怎么申请 key、Steel 完整开通步骤** → [Key 配置指南 · 云浏览器](./doc/KEY-GUIDE.md#d-云浏览器反爬默认关双重解锁)。
|
|
365
|
+
**怎么申请 key、Steel 完整开通步骤** → [Key 配置指南 · 云浏览器](./doc/usage/01-KEY-GUIDE.md#d-云浏览器反爬默认关双重解锁)。
|
|
363
366
|
|
|
364
367
|
<details>
|
|
365
368
|
<summary><b>高级调优(可选,普通用户不用展开)</b></summary>
|
|
@@ -377,7 +380,7 @@ lasso launch-chrome
|
|
|
377
380
|
- 给浏览器配出口代理(`LASSO_PROXY`,如 `http://127.0.0.1:7890`;**只影响无头浏览器和 Steel 云浏览器,登录态 Chrome 的出口永远保持原样**——v1.11)
|
|
378
381
|
- 设 Steel 自托管云浏览器端点(`STEEL_ENDPOINT`,如 `http://localhost:3000`;需同时开 `LASSO_ALLOW_CLOUD_BROWSER=true` 才启用)
|
|
379
382
|
|
|
380
|
-
完整变量清单和默认值见 [Key 配置指南 · 高级调优](./doc/KEY-GUIDE.md#e-高级调优可选全不配)。**Surge / Clash 等 TUN 代理网络(fake-ip,`198.18.0.0/15`)与 `127.0.0.1`(本机 Chrome CDP 调试端口用)都已内置放行**,无需额外配置——这是设计行为,不是漏配。
|
|
383
|
+
完整变量清单和默认值见 [Key 配置指南 · 高级调优](./doc/usage/01-KEY-GUIDE.md#e-高级调优可选全不配)。**Surge / Clash 等 TUN 代理网络(fake-ip,`198.18.0.0/15`)与 `127.0.0.1`(本机 Chrome CDP 调试端口用)都已内置放行**,无需额外配置——这是设计行为,不是漏配。
|
|
381
384
|
|
|
382
385
|
> **向后兼容**:如果你以前用 `claude mcp add -e KEY=VAL` 装过,那些环境变量**仍然生效**,且会**覆盖**配置文件。配置文件只是新增的一条更友好的途径,不废除老办法。
|
|
383
386
|
|
|
@@ -406,7 +409,7 @@ lasso launch-chrome
|
|
|
406
409
|
|---|---|---|---|---|---|---|
|
|
407
410
|
| `search` / `fetch_url` / `fetch_feed` / `search_local` | 无 | 无 | 无 | 无 | 无 | 极低(纯网络/本地查询,CPU 峰 <3 秒即落) |
|
|
408
411
|
| `browse_headless`(无头浏览) | 无 | 无 | 无 | 无(恒静音) | 无 | 中(存活期约 400MB,闲置 5 分钟自动回收) |
|
|
409
|
-
| `launch-chrome`(默认 hidden 档) | 无 | 无 | **多一个 Chrome 图标**(清不掉,见下方边界) | 无(恒静音) | 无 | 中(
|
|
412
|
+
| `launch-chrome`(默认 hidden 档) | 无 | 无 | **多一个 Chrome 图标**(清不掉,见下方边界) | 无(恒静音) | 无 | 中(v1.18.5 起 CLI 拉起默认不自动关;配 `LASSO_LAUNCH_IDLE_MS` 才有 ~60 秒自动关) |
|
|
410
413
|
| `launch-chrome --mode visible` | **会**(弹出窗口,你主动选的) | 会 | 会 | 无(也恒静音) | 无 | 中 |
|
|
411
414
|
| `browse_logged_in` 连**你自己开的 Chrome** | 无(逐操作实测) | 无 | 无新增 | **你的 Chrome 不静音**(lasso 不改写你的浏览器) | 无 | 低 |
|
|
412
415
|
| `desktop` 控桌面 | **设计上占用键鼠** | — | — | — | 首次配置授权弹窗 | 极低 |
|
|
@@ -429,7 +432,7 @@ lasso launch-chrome
|
|
|
429
432
|
| 提示要内网访问被拒 | 确认 URL 没写错;TUN 代理网络已默认放行,其他内网需手动允许 |
|
|
430
433
|
| 想验证反检测效果 | 跑 `lasso doctor --stealth-check`,会驱动 creepjs 检测页对比基线(可选,不影响日常使用) |
|
|
431
434
|
|
|
432
|
-
完整 FAQ 与调试技巧见 [`doc/TROUBLESHOOTING.md`](./doc/TROUBLESHOOTING.md)。
|
|
435
|
+
完整 FAQ 与调试技巧见 [`doc/usage/02-TROUBLESHOOTING.md`](./doc/usage/02-TROUBLESHOOTING.md)。
|
|
433
436
|
|
|
434
437
|
---
|
|
435
438
|
|
|
@@ -459,7 +462,7 @@ lasso launch-chrome
|
|
|
459
462
|
|
|
460
463
|
微信 | 支付宝
|
|
461
464
|
:-: | :-:
|
|
462
|
-
<img src="doc/support-wechat.jpg" height="200" alt="微信赞赏"> | <img src="doc/support-alipay.jpg" height="200" alt="支付宝赞赏">
|
|
465
|
+
<img src="doc/assets/support-wechat.jpg" height="200" alt="微信赞赏"> | <img src="doc/assets/support-alipay.jpg" height="200" alt="支付宝赞赏">
|
|
463
466
|
|
|
464
467
|
</div>
|
|
465
468
|
|
|
@@ -469,15 +472,15 @@ lasso launch-chrome
|
|
|
469
472
|
|
|
470
473
|
## 更多文档
|
|
471
474
|
|
|
472
|
-
- 想看深度架构?见 [功能架构](doc/
|
|
473
|
-
- 想看版本路线?见 [实施排期](doc/
|
|
474
|
-
- 想看 key 获取?见 [Key 配置指南](doc/KEY-GUIDE.md)
|
|
475
|
+
- 想看深度架构?见 [功能架构](doc/architecture/01-功能架构.md)
|
|
476
|
+
- 想看版本路线?见 [实施排期](doc/architecture/02-实施排期.md)
|
|
477
|
+
- 想看 key 获取?见 [Key 配置指南](doc/usage/01-KEY-GUIDE.md)
|
|
475
478
|
|
|
476
479
|
## License
|
|
477
480
|
|
|
478
481
|
**MIT** © wangdong233。桌面辅助进程与浏览器引擎依赖均选 MIT / Apache-2.0,企业可商用。
|
|
479
482
|
|
|
480
|
-
> 想看内部架构、设计原则、跨平台边界、开发命令?见 [ARCHITECTURE.md](./ARCHITECTURE.md) 与 [`doc/TROUBLESHOOTING.md`](./doc/TROUBLESHOOTING.md)。
|
|
483
|
+
> 想看内部架构、设计原则、跨平台边界、开发命令?见 [ARCHITECTURE.md](./ARCHITECTURE.md) 与 [`doc/usage/02-TROUBLESHOOTING.md`](./doc/usage/02-TROUBLESHOOTING.md)。
|
|
481
484
|
|
|
482
485
|
<p align="center">
|
|
483
486
|
<sub>Built for everyone who'd rather <strong>say it</strong> than <strong>script it</strong>.</sub><br>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* │ expect failed │ didnt │ didnt │ failed_postcondition │
|
|
27
27
|
* │ step 抛 timeout/429 │ unknown │ unknown │ step_error │
|
|
28
28
|
* │ step 抛 404/403/2FA │ didnt │ didnt │ step_error │
|
|
29
|
-
* │ budget 超限 │ (未跑) │ unknown │ budget_exceeded(doc/
|
|
29
|
+
* │ budget 超限 │ (未跑) │ unknown │ budget_exceeded(doc/governance/10 F3) │
|
|
30
30
|
* │ high-risk gate block │ (未跑) │ didnt │ manual_abort │
|
|
31
31
|
* └────────────────────────────┴─────────┴─────────┴──────────────────────────────┘
|
|
32
32
|
*
|
|
@@ -52,7 +52,7 @@ export class StepEngine {
|
|
|
52
52
|
const step = steps[i];
|
|
53
53
|
// ----------------------------------------------------------
|
|
54
54
|
// 1. budget 预检(F3.4.8)
|
|
55
|
-
// v1.18.2(doc/
|
|
55
|
+
// v1.18.2(doc/governance/10 F3):chainOutcome=unknown——自限闹钟响是**自身策略边界**,
|
|
56
56
|
// 不是页面语义否定;didnt 会让 decider 视「channel 健康+答案否」双熔断记
|
|
57
57
|
// recordSuccess(假健康掩蔽诊断),且 CC 被告知不可重试的「没有」。
|
|
58
58
|
// unknown 让 decider 试下一 channel + CC 可拆步/放宽 budget_ms 重试。
|
|
@@ -132,7 +132,7 @@ export class StepEngine {
|
|
|
132
132
|
verdict = await this.channel.runExpect(step.expect, partial.preSnapshot);
|
|
133
133
|
}
|
|
134
134
|
catch (e) {
|
|
135
|
-
// v1.18.2(doc/
|
|
135
|
+
// v1.18.2(doc/governance/10 Y3):runExpect **自身抛错**(CDP 断连/页面销毁/cond 缺字段)
|
|
136
136
|
// 是基础设施异常,不是「后置条件为假」——旧实现保守判 failed → didnt,
|
|
137
137
|
// 把环境错伪装成语义否定(与 budget_exceeded 同病)。INV-13「宁可不假装
|
|
138
138
|
// 成功」论证的是不虚报 worked;这里不虚报 worked、但也不虚报「否」:
|