lasso-mcp 1.25.0 → 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +67 -11
- package/README.en.md +2 -2
- package/README.md +2 -2
- package/dist/browse/stealth-profiles.d.ts +19 -0
- package/dist/browse/stealth-profiles.d.ts.map +1 -1
- package/dist/browse/stealth-profiles.js +38 -0
- package/dist/browse/stealth-profiles.js.map +1 -1
- package/dist/channels/BrowseChannel.d.ts +58 -0
- package/dist/channels/BrowseChannel.d.ts.map +1 -1
- package/dist/channels/BrowseChannel.js +298 -27
- package/dist/channels/BrowseChannel.js.map +1 -1
- package/dist/channels/HeadlessChannel.d.ts +80 -22
- package/dist/channels/HeadlessChannel.d.ts.map +1 -1
- package/dist/channels/HeadlessChannel.js +210 -9
- package/dist/channels/HeadlessChannel.js.map +1 -1
- package/dist/channels/LoggedInChannel.d.ts +46 -2
- package/dist/channels/LoggedInChannel.d.ts.map +1 -1
- package/dist/channels/LoggedInChannel.js +174 -30
- package/dist/channels/LoggedInChannel.js.map +1 -1
- package/dist/channels/headless-fresh-profile.d.ts +58 -0
- package/dist/channels/headless-fresh-profile.d.ts.map +1 -0
- package/dist/channels/headless-fresh-profile.js +108 -0
- package/dist/channels/headless-fresh-profile.js.map +1 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +4 -0
- package/dist/config/config.js.map +1 -1
- package/dist/doctor/doctor.d.ts +1 -1
- package/dist/doctor/doctor.js +1 -1
- package/dist/fallback/FallbackDecider.d.ts.map +1 -1
- package/dist/fallback/FallbackDecider.js +21 -1
- package/dist/fallback/FallbackDecider.js.map +1 -1
- package/dist/index.js +58 -6
- package/dist/index.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +1 -1
- package/dist/runtime/runtime-types.d.ts.map +1 -1
- package/dist/subprocess/McpClient.d.ts +33 -2
- package/dist/subprocess/McpClient.d.ts.map +1 -1
- package/dist/subprocess/McpClient.js +47 -3
- package/dist/subprocess/McpClient.js.map +1 -1
- package/dist/subprocess/SubprocessManager.d.ts +24 -0
- package/dist/subprocess/SubprocessManager.d.ts.map +1 -1
- package/dist/subprocess/SubprocessManager.js +108 -3
- package/dist/subprocess/SubprocessManager.js.map +1 -1
- package/dist/subprocess/headless-stack-ledger.d.ts +80 -0
- package/dist/subprocess/headless-stack-ledger.d.ts.map +1 -0
- package/dist/subprocess/headless-stack-ledger.js +281 -0
- package/dist/subprocess/headless-stack-ledger.js.map +1 -0
- package/dist/tools/admin.d.ts +24 -1
- package/dist/tools/admin.d.ts.map +1 -1
- package/dist/tools/admin.js +53 -0
- package/dist/tools/admin.js.map +1 -1
- package/dist/tools/browse.d.ts.map +1 -1
- package/dist/tools/browse.js +12 -0
- package/dist/tools/browse.js.map +1 -1
- package/dist/tools/descriptions.d.ts.map +1 -1
- package/dist/tools/descriptions.js +59 -7
- package/dist/tools/descriptions.js.map +1 -1
- package/dist/tools/fetch-url.d.ts +12 -0
- package/dist/tools/fetch-url.d.ts.map +1 -1
- package/dist/tools/fetch-url.js +44 -1
- package/dist/tools/fetch-url.js.map +1 -1
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -1
- package/doc/README.md +37 -13
- package/doc/architecture/02-/345/256/236/346/226/275/346/216/222/346/234/237.md +10 -1
- package/doc/bugs/08-2026-09-15-/345/225/206/346/240/207/346/237/245/350/257/242/351/251/254/346/213/211/346/235/276-/344/272/224/347/273/204/344/277/256/345/244/215/345/206/263/350/256/256.md +297 -0
- package/doc/testing/01-/345/212/237/350/203/275/346/265/213/350/257/225/346/270/205/345/215/225.md +6 -1
- package/doc/usage/01-KEY-GUIDE.md +1 -0
- package/doc/usage/02-TROUBLESHOOTING.md +53 -0
- package/doc//346/225/264/347/220/206/345/206/263/350/256/256-2026-09-16.md +136 -0
- package/package.json +1 -1
- package/src/browse/stealth-profiles.ts +40 -0
- package/src/channels/BrowseChannel.ts +315 -26
- package/src/channels/HeadlessChannel.ts +231 -4
- package/src/channels/LoggedInChannel.ts +170 -32
- package/src/channels/headless-fresh-profile.ts +151 -0
- package/src/config/config.ts +4 -0
- package/src/doctor/doctor.ts +1 -1
- package/src/fallback/FallbackDecider.ts +24 -1
- package/src/index.ts +58 -5
- package/src/invariants/check-invariants.mjs +129 -8
- package/src/runtime/runtime-types.ts +6 -1
- package/src/subprocess/McpClient.ts +53 -5
- package/src/subprocess/SubprocessManager.ts +111 -3
- package/src/subprocess/headless-stack-ledger.ts +328 -0
- package/src/tools/admin.ts +78 -1
- package/src/tools/browse.ts +12 -0
- package/src/tools/descriptions.ts +59 -7
- package/src/tools/fetch-url.ts +47 -1
- package/src/types.ts +25 -0
- package/vitest.workspace.ts +24 -0
- package/doc/archive/parse/parse1.md +0 -1611
- package/doc/archive/parse/parse10-acceptance.md +0 -224
- package/doc/archive/parse/parse10.md +0 -29
- package/doc/archive/parse/parse11-acceptance.md +0 -325
- package/doc/archive/parse/parse11.md +0 -987
- package/doc/archive/parse/parse12-acceptance.md +0 -182
- package/doc/archive/parse/parse12.md +0 -777
- package/doc/archive/parse/parse13-acceptance.md +0 -331
- package/doc/archive/parse/parse13.md +0 -405
- package/doc/archive/parse/parse14-acceptance.md +0 -400
- package/doc/archive/parse/parse14.md +0 -580
- package/doc/archive/parse/parse15-acceptance.md +0 -189
- package/doc/archive/parse/parse15.md +0 -463
- package/doc/archive/parse/parse16.md +0 -310
- package/doc/archive/parse/parse17-rca-lifecycle.md +0 -225
- package/doc/archive/parse/parse17.md +0 -452
- package/doc/archive/parse/parse18-acceptance.md +0 -37
- package/doc/archive/parse/parse18-frontier.md +0 -94
- package/doc/archive/parse/parse18-oss-experiments.md +0 -212
- package/doc/archive/parse/parse18-rca-whitebox.md +0 -163
- package/doc/archive/parse/parse18.md +0 -418
- package/doc/archive/parse/parse2.md +0 -1421
- package/doc/archive/parse/parse3.md +0 -960
- package/doc/archive/parse/parse4-acceptance.md +0 -225
- package/doc/archive/parse/parse4.md +0 -1096
- package/doc/archive/parse/parse5-acceptance.md +0 -170
- package/doc/archive/parse/parse5.md +0 -1490
- package/doc/archive/parse/parse6-acceptance.md +0 -277
- package/doc/archive/parse/parse6.md +0 -1007
- package/doc/archive/parse/parse7-acceptance.md +0 -205
- package/doc/archive/parse/parse7.md +0 -1060
- package/doc/archive/parse/parse8-acceptance.md +0 -168
- package/doc/archive/parse/parse8.md +0 -893
- package/doc/archive/parse/parse9-acceptance.md +0 -334
- package/doc/archive/parse/parse9.md +0 -805
- package/doc/archive/parse/v14-acceptance.md +0 -182
- 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 +0 -173
- 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 +0 -178
- 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 +0 -167
- 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 +0 -129
- 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 +0 -246
- package/doc/archive/research/05-/346/250/252/345/220/221/345/257/271/346/257/224/347/237/251/351/230/265.md +0 -141
- 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 +0 -309
- 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 +0 -394
- 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 +0 -336
- 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 +0 -151
- 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 +0 -461
- 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 +0 -819
- 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 +0 -355
- 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 +0 -272
- 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 +0 -558
- 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 +0 -167
- 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 +0 -120
- 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 +0 -222
- 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 +0 -272
- 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 +0 -79
- 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 +0 -76
- 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 +0 -105
- 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 +0 -185
- package/doc/archive/research//346/220/234/347/264/242mcp/345/267/245/345/205/267/README.md +0 -66
- package/doc/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 -128
- package/doc/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 -54
- package/doc/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 -224
- package/doc/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 -89
- package/doc/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 -259
- package/doc/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 -25
- package/doc/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 -149
- package/doc/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 -144
- package/doc/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 -37
- package/doc/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 -567
- package/doc/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 -74
- package/doc/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 -67
- package/doc/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 -75
- package/doc/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 -195
- package/doc/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 -167
- package/doc/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 -382
- package/doc/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 -134
- package/doc/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 -282
- package/doc/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 -399
- package/doc/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 -6
- package/doc/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 -118
- package/doc/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 -202
- package/doc/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 -4
- package/doc/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 -89
- package/doc/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 -105
- package/doc/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 -357
- package/doc/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 -6
- package/doc/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 -66
- package/doc/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 -30
- package/doc/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 -8
- package/doc/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 -11
- package/doc/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 -5
- package/doc/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 -10
- package/doc/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 -184
- package/doc/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 -8
- package/doc/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 -4
- package/doc/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 -6
- package/doc/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 -3
- package/doc/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 -134
- package/doc/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 -174
- package/doc/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 -169
- package/doc/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 -25
- package/doc/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/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 -23
- package/doc/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/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 -23
- package/doc/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 -1
- package/doc/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/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 -1
- package/doc/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 -2
- package/doc/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 -186
- package/doc/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 -8
- package/doc/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 -187
- package/doc/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 -187
- package/doc/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 -51
- package/doc/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 -107
- package/doc/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 -39
- package/doc/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 -89
- package/doc/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 -9
- package/doc/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 -9
- package/doc/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 -1762
- package/doc/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 -166
- package/doc/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 -245
- package/doc/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 -56
- package/doc/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 -9
- package/doc/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 -64
- package/doc/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 -74
- package/doc/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 -7
- package/doc/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 -16
- package/doc/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 -9
- package/doc/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 -43
- package/doc/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 -62
- package/doc/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 -1
- package/doc/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 -1
- package/doc/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 -60
- package/doc/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 -1
- package/doc/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 -1
- package/doc/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 -61
- package/doc/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 -53
- package/doc/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 -534
- package/doc/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 -91
- package/doc/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 -73
- package/doc/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 -55
- package/doc/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 -131
- package/doc/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 -70
- package/doc/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 -70
- package/doc/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 -210
- package/doc/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 -246
- package/doc/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 -74
- package/doc/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 -18
- package/doc/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 -26
- package/doc/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 -63
- package/doc/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 -41
- package/doc/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 -73
- package/doc/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 -80
- package/doc/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 -58
- package/doc/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 -68
- package/doc/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 -229
- package/doc/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 -273
- package/doc/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 -124
- package/doc/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 -24
- package/doc/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 -91
- package/doc/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 -24
- package/doc/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 -98
- package/doc/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 -87
- package/doc/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 -118
- package/doc/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 -30
- package/doc/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 -26
- package/doc/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 -11
- package/doc/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 -7
- package/doc/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 -14
- package/doc/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 -10
- package/doc/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 -13
- package/doc/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 -9
- package/doc/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 -8
- package/doc/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 -4
- package/doc/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 -17
- package/doc/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 -13
- package/doc/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 -15
- package/doc/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 -11
- package/doc/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 -11
- package/doc/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 -7
- package/doc/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 -8
- package/doc/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 -3
- package/doc/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 -7
- package/doc/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 -3
- package/doc/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 -8
- package/doc/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 -4
- package/doc/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 -8
- package/doc/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 -4
- package/doc/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 -8
- package/doc/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 -4
- package/doc/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 -9
- package/doc/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 -4
- package/doc/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 -7
- package/doc/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 -3
- package/doc/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 -8
- package/doc/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 -4
- package/doc/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 -60
- package/doc/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 -48
- package/doc/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 -67
- package/doc/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 -14
- package/doc/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 -3
- package/doc/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 -147
- package/doc/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 -13
- package/doc/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 -155
- package/doc/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 -103
- package/doc/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 -373
- package/doc/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 -131
- package/doc/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 -40
- package/doc/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 -75
- package/doc/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 -73
- package/doc/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 -144
- package/doc/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 -257
- package/doc/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 -150
- package/doc/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 -339
- package/doc/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 -136
- package/doc/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 -7
- package/doc/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 -2
- package/doc/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 -6
- package/doc/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 -1111
- package/doc/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 -1
- package/doc/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 -11
- package/doc/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 -13
- package/doc/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 -114
- package/doc/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 -31
- package/doc/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 -49
- package/doc/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 -40
- package/doc/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 -46
- package/doc/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 -119
- package/doc/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 -105
- package/doc/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 -130
- package/doc/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 -119
- package/doc/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 -99
- package/doc/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 -88
- package/doc/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 -19
- package/doc/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 -8
- package/doc/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/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 -79
- package/doc/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 -61
- package/doc/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 -44
- package/doc/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 -52
- package/doc/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 -72
- package/doc/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 -84
- package/doc/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 -2
- package/doc/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 -126
- package/doc/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 -29
- package/doc/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 -10
- package/doc/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 -30
- package/doc/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 -24
- package/doc/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 -11
- package/doc/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 -132
- package/doc/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 -66
- package/doc/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 -159
- package/doc/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 -161
- package/doc/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 -88
- package/doc/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 -134
- package/doc/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 -241
- package/doc/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 -188
- package/doc/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 -135
- package/doc/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 -50
- package/doc/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 -33
- package/doc/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 -35
- package/doc/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 -33
- package/doc/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 -60
- package/doc/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 -28
- package/doc/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 -32
- package/doc/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 -38
- package/doc/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 -134
- package/doc/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 -94
- package/doc/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 -42
- package/doc/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 -22
- package/doc/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 -41
- package/doc/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 -15
- package/doc/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 -3
- package/doc/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 -2
package/ARCHITECTURE.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# Lasso 架构
|
|
2
2
|
|
|
3
3
|
> 本文是 Lasso **v1.18.7** 的架构概览(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))。头部版本与全文计数由 P2 处置轮刷新(doc/governance/11 台账 + 本轮 20 条机械对账,2026-08-31,事实基准 = HEAD `4a40b7e` 源码实核 + `tools/list` / `npm test` / `check-invariants` / `cargo test` / `doctor` 实跑)。
|
|
4
|
+
>
|
|
5
|
+
> **现状对齐增补(2026-09-16,DocAudit 轮,基准 HEAD `7ab999b` = v1.26.0 预写态 / npm latest 1.25.0)**:v1.19.0→v1.26.0 共九版(渲染档 + BUG-03~08 五批)的架构面以**增量段落**对齐——§2 渲染档行、§9 浏览器主权三层防线、§11 INV 84→96、新 §16 五批新增面、§14 版本要点、§15 主线第 8-9 条;本实跑核验 = `check-invariants`(96/96 PASS),测试计数引自 BUG-08 gate 实跑(2997+1,见 README v1.26.0 changelog ⑥)——本轮未重跑全量 npm test,全文其余计数仍为 2026-08-31 基准。
|
|
4
6
|
|
|
5
7
|
## 1. 项目定位
|
|
6
8
|
|
|
@@ -81,6 +83,8 @@ Lasso 的真实部署形态是**单用户、本地、stdio MCP**:一个用户
|
|
|
81
83
|
|
|
82
84
|
### 2.1 浏览器驱动契约锁:chrome-devtools-mcp 1.7.0(v1.11 迁移)
|
|
83
85
|
|
|
86
|
+
> **v1.19+ 增补**:分层图之外新增两组面——① `src/render/`(v1.19.0 渲染档,5 文件:render-launcher / render-flags 冻结旗标单一真源 / render-guardian detached 执守 / render-doctor / 配套,`launchMode:"render"` 走台账 7 落点,与日常档机制天然隔离);② Subprocess 层 sidecar 治理(v1.26.0 BUG-08 决议 B:chrome-devtools-mcp 栈 spawn 即登记 sidecar + 任意 spawn 前孤儿扫除 pid 归并/lstart 交叉核对 + `admin browser_recycle` 受控重启正门)。详见 §16。
|
|
87
|
+
|
|
84
88
|
`src/subprocess/SubprocessManager.ts` 的 `LOCKED_CDP_MCP_VERSION = "1.7.0"` 是唯一真源,启动时经 `npx -y chrome-devtools-mcp@1.7.0` 自动拉取。v1.11 从 0.3.0 → 1.7.0 的一次性迁移(11 个月 / 57 个上游版本)要点:
|
|
85
89
|
|
|
86
90
|
- `--chromeArg` 透传机制解锁:launch 级 `--user-agent` / `--viewport` / `--accept-lang` 直达 Chromium(stealth 与反节流都靠它)
|
|
@@ -313,14 +317,18 @@ engine=auto(默认)→ 多源扇出(machine_mcp + brave 两 API 源)
|
|
|
313
317
|
- **诚实边界固化**(不可修,见 KEY-GUIDE/README 矩阵):desktop 物理键鼠设计占用;launch-chrome hidden 的 Dock 图标(有头 Chrome 注册 Foreground ASN,LSUIElement 不可控;headless 无此问题——真机实证无 Foreground ASN);visible 档语义即「看着干」;用户 Chrome 不静音(零注入铁律)+ 操作 tab 的 hasFocus 仿真(不抢 OS 焦点)。
|
|
314
318
|
- **守卫**:INV-78(d) 精化——`bringToFront` token 级零命中(作用域内任何 select_page 都不可能带激活开关)+ `"new_page"` 禁令新增 + S-7 实装锚(select_page 调用形 + 护栏日志事件 grep)。
|
|
315
319
|
- 其余安全 INV 面(cloud 双重解锁 / appleScript 白名单 / stealth profiles / 连接池)见 §11 分类表
|
|
320
|
+
- **浏览器主权三层防线(v1.22.0 BUG-04 + v1.21.0 BUG-03 增补,永不 kill 用户浏览器红线的机械化)**:
|
|
321
|
+
1. **归属鉴定**——`chrome-status [--port N]` 十分类(账本僵尸 / 陈留 / 疑似用户资产…),输出人类决策文案 + 机器可读 `allowed_commands` / `must_report`(「疑似用户资产」分类 = 零允许操作 + 必须上报用户);INV-88 守「鉴定器永不给 kill 出口」;
|
|
322
|
+
2. **PreToolUse hook 硬拦**——`scripts/hooks/deny-browser-kill.mjs`(12 向量,伪模式当场拦 / sleep 放行;样例落仓自带 14 向量测试 + 附录E 文档同步锚,governance/12 制度);
|
|
323
|
+
3. **never_kill 语义内化**——停机三维谓词(modes × ownerPid × userTakenAt 豁免:任何进程退出只许收自己拉起的 Chrome)+ `isUserOwnedRecord`(用户已认领 / visible 登录窗)永不进程序化收尸 + `chrome-stop --zombie-gate` 三重门(台账在案+指纹对+kill 时刻重读台账)唯一机器代杀出口;INV-85/86/87 守。
|
|
316
324
|
|
|
317
325
|
## 10. 测试策略
|
|
318
326
|
|
|
319
|
-
| 层 | 工具 | 覆盖 | 规模(v1.
|
|
327
|
+
| 层 | 工具 | 覆盖 | 规模(v1.26.0 预写态,2026-09-16 对齐:INV/gate 为 BUG-08 批实跑口径) |
|
|
320
328
|
|---|---|---|---|
|
|
321
|
-
| 架构不变量 | `check-invariants.mjs`(自写) | INV-1..
|
|
322
|
-
| INV 自测 | `inv-selftest.mjs`(`npm run inv-selftest`) | 抽样 INV 做「注入违规 → 必红」复证 | **样本覆盖 20/84
|
|
323
|
-
| 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 / tool-descriptions-no-leak 等 | **
|
|
329
|
+
| 架构不变量 | `check-invariants.mjs`(自写) | INV-1..96 静态 grep + 形状测 | **96 条**(85-96 = BUG-03~08 五批新增,2026-09-16 实跑全 PASS) |
|
|
330
|
+
| INV 自测 | `inv-selftest.mjs`(`npm run inv-selftest`) | 抽样 INV 做「注入违规 → 必红」复证 | **样本覆盖 20/84 时代口径 + 26 个 pin 红翻转实证**(外部契约类全覆盖;85-96 批次自带形状测) |
|
|
331
|
+
| 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 / tool-descriptions-no-leak / render / bug03-08 批次 spec 等 | **2997 passed + 1 skipped**(182 文件,BUG-08 gate 实跑;1 skip = linux-only ResourceMonitor 在 macOS 对称跳过) |
|
|
324
332
|
| Rust 单测 | cargo test | ax / applescript / cgevent(+keymap) / screenshot / tcc / windows / protocol / role-map | **207 测试**(cargo test 实跑;`rust-helper/src/*.rs` 自 v1.13 零改——v1.18.4 仅动 `build/sign.sh` ad-hoc 签名链) |
|
|
325
333
|
| 跨平台编译 | cargo check --target | Windows (x86_64-pc-windows-msvc) + Linux (x86_64-unknown-linux-gnu) | 本地手测(CI 为 JS 门禁三件套,不含 Rust 步骤——r4 轮改真口径) |
|
|
326
334
|
| 录制回放回归 | npm run replay-baseline | fixtures/serp-baseline/ 三引擎录制基线 | 6 条 HTML fixture(baidu/bing/google ×2;doctor #32 实跑 detail) |
|
|
@@ -328,7 +336,7 @@ engine=auto(默认)→ 多源扇出(machine_mcp + brave 两 API 源)
|
|
|
328
336
|
| 全量功能测试 | doc/testing/01 清单 + ft 执行记录 | 四面板(search / browse / infra / perf)~170 用例真机 | ft-round1 **ALL-CLEAN**(2026-08-18) |
|
|
329
337
|
| 契约锁 | chrome-devtools-mcp@**1.7.0** version pin(`LOCKED_CDP_MCP_VERSION` 单一真源) | 上游小版本升级不破 Lasso;迁移要点见 §2.1 | SubprocessManager.ts |
|
|
330
338
|
|
|
331
|
-
## 11. 不变量(
|
|
339
|
+
## 11. 不变量(96 条)分类
|
|
332
340
|
|
|
333
341
|
| 范畴 | INV 编号 | 守的是什么 |
|
|
334
342
|
|---|---|---|
|
|
@@ -348,6 +356,11 @@ engine=auto(默认)→ 多源扇出(machine_mcp + brave 两 API 源)
|
|
|
348
356
|
| v1.14-v1.17 运营事实与死层清除 | INV-54 / 80 | 死层墓碑:Bing(BingChannel 全链删、配置静默忽略)/ zhipu 直连(无 SearchChannel 类 / engine enum 无 "zhipu" / config 键容忍不消费 / doctor 报 retired) |
|
|
349
357
|
| v1.18 用户运行守则生命周期 | **82** | D-5 exit 钩子 modes:['hidden'](visible 登录窗口不被 server 退出杀死)/ C2 自动 hide 默认 off + 只挂 visible 分支永不进 kill 路径 / 四重护栏(见墙→延迟窗→agent 安静→失败降级)/ hide 走 chrome-hide PID 定向 / 延迟窗默认单一真源 |
|
|
350
358
|
| v1.18.7 架构重审轮(2026-08-31) | **83 / 84** | firstText 全仓唯一定义在 browse/upstream-response.ts(5 份私有拷贝收敛后防回潮)/ doctor 层(src/doctor/*.ts,doctor-cli.ts 组合根除外)禁 import ../channels/*(反向 value 依赖 = ESM 循环温床;defaultHeadlessProfileForHost 已迁 browse/stealth-profiles.ts) |
|
|
359
|
+
| v1.21-v1.22 浏览器主权(BUG-03/04) | **85 / 86 / 87 / 88 / 89** | 用户激活让位(归因绑定)/ 停机不连坐(owner-scoped shutdown)/ 永不代杀用户资产 / chrome-status 输出契约(鉴定器无 kill 出口)/ 上游选中页死锁自愈(楔死签名检测 + 后台自建页接管) |
|
|
360
|
+
| v1.23 消费方台账(BUG-05) | **90 / 91 / 92 / 93** | file-guard 默认关 / CONSUMED_OPTIONS 完备性(收了不生效=假接口)/ console 暴露面锚(schema 键与消费同 commit)/ screenshot 写根不变量 |
|
|
361
|
+
| v1.24 幽灵常驻根治(BUG-06) | **94** | 日常档 idle-0 的 24h 硬顶契约(cap 谓词顺序 + render 三文件零 hard-cap tripwire + CLI_USAGE + isUserOwnedRecord 前置短路 + onChromeUse touch 写侧 + 两装配点显式传参) |
|
|
362
|
+
| v1.25 当前页截图(BUG-07) | **95** | url 省略 + action=screenshot = current-page 截图(零导航;有 url 字节级不变)——schema↔description 同 commit 等 A⁺ 六面 |
|
|
363
|
+
| v1.26 马拉松稳定性(BUG-08) | **96** | 五组防线:callTool timeout 透传 / doEvaluate 传预算 / 栈扫除判定序 + chrome-stop 域隔离 / fresh profile 先杀后删 + 陈年双闸 / wait current-page 家族 / fallback 耗尽 primary-first 复合串 |
|
|
351
364
|
|
|
352
365
|
完整 INV 列表 + 释义见 `src/invariants/check-invariants.mjs` 顶部注释。
|
|
353
366
|
|
|
@@ -433,16 +446,26 @@ $ lasso launch-chrome
|
|
|
433
446
|
| desktop 四档 | src/desktop/{AxProvider,AxBackend,AxBackendFactory,OutlineMapper,CGEventProvider,ScreenshotVlmProvider}.ts | AxProvider ~330 |
|
|
434
447
|
| FallbackDecider | src/fallback/FallbackDecider.ts | ~350 |
|
|
435
448
|
| Launcher | src/launcher/{launch-chrome,chrome-paths,chrome-stop,chrome-idle-reaper,chrome-ledger,chrome-hide,chrome-hideshow-cli,chrome-touch,desired-hide-state,desired-hide-watchdog,desired-hide-enforcer}.ts(INV-64 不引新 npm dep;chrome-touch / desired-hide-* = v1.18.3~v1.18.6 bug02 链) | 11 文件共 ~2900 |
|
|
449
|
+
| Render 档 | src/render/{render-chrome,render-launcher,render-flags,render-guardian,render-doctor}.ts(v1.19-1.20 五文件;冻结旗标单一真源 + detached 执守 + reused 四条件门,见 §16.2) | — |
|
|
436
450
|
| Doctor | src/doctor/doctor.ts(doctor CLI 默认 34 项实跑核;MCP doctor tool / DesktopChannel 装配 desktopChecks:true 时加 #15-#21 共 41 项;--deep 加 #11b brave_deep_probe;#21 event-synthesis / #36 machine_mcp / #37 steel / #38 creepjs / #39 stagehand / zhipu_keys_retired) | ~3060 |
|
|
437
|
-
| Invariants | src/invariants/check-invariants.mjs(
|
|
451
|
+
| Invariants | src/invariants/check-invariants.mjs(96 条 INV;85-96 = BUG-03~08 五批,2026-09-16 实跑全 PASS) | ~4600 |
|
|
438
452
|
| INV 自测 | scripts/inv-selftest.mjs(20 样本红转复证) | ~410 |
|
|
439
453
|
| Subprocess | src/subprocess/SubprocessManager.ts(`LOCKED_CDP_MCP_VERSION = "1.7.0"`);rust-helper-path.ts(模块锚定:`new URL("../../rust-helper/...", import.meta.url)` 与宿主 cwd 解耦——v1.18.4 根治「非仓库根目录启动 desktop 全报 rust_helper_crashed」) | ~750 |
|
|
440
454
|
| Rust helper | rust-helper/src/{ax,uia,atspi,applescript,applescript_whitelist,cgevent,cgevent_keymap,screenshot,tcc,windows,protocol,main,lib,ax_role_map,app_bundle_map}.rs(15 文件);build/sign.sh(v1.18.4 ad-hoc 兜底签名进构建链) | ~5000;src/*.rs 自 v1.13 零改 |
|
|
441
455
|
|
|
442
456
|
## 14. 版本与发布
|
|
443
457
|
|
|
444
|
-
-
|
|
458
|
+
- **当前版本**:npm latest `1.25.0`;工作树 HEAD `7ab999b` 为 **v1.26.0 预写态**(changelog 已预写、版本行未改,发版归审查循环后用户指令——README v1.26.0 条目)
|
|
445
459
|
- **version 真源**:`package.json` + `src/index.ts:LASSO_SERVER_VERSION` + `src/doctor/doctor.ts:LASSO_VERSION`(INV-63 守:三处必字面量一致)
|
|
460
|
+
- **v1.19.0 → v1.26.0 要点**(2026-09-16 增补;用户向完整版见 README changelog;决策记录见 doc/bugs/03-08 + doc/渲染档文档组):
|
|
461
|
+
- **v1.19.0**:确定性渲染档(`render-chrome --ensure/--status/--stop/doctor`,`src/render/` 5 文件 + 冻结旗标快照 + detached guardian)+ perf/acc 裁决批(npx registry 税 `--prefer-offline` 等)——设计决议见 doc/渲染档设计决议.md
|
|
462
|
+
- **v1.20.0**:渲染档并行安全批——`--stop` 端口作用域化(显式合法=只收该 port / 未设=全收 / 非法=exit 1,提案 §6 裁决)
|
|
463
|
+
- **v1.21.0**:浏览器主权与生命周期根治批(BUG-03)——CLI 默认 30min 回收 + 停机三维谓词 + 端口占用归因(`ledger_zombie_collected` / `never_kill_user_asset` / `user_taken_asset`)+ `--mode headless` 档
|
|
464
|
+
- **v1.22.0/1**:归属鉴定与通道自愈批(BUG-04)——`chrome-status` 十分类 + `--zombie-gate` + 选中页死锁自愈 + evaluate IIFE 形态;v1.22.1 回告收口(governance/12:交付物自带测试载体制度)
|
|
465
|
+
- **v1.23.0**:本地文件与排障能力批(BUG-05)——`LASSO_ALLOW_FILE_FROM` file 白名单 / navigate 死参数清扫 / console 暴露面
|
|
466
|
+
- **v1.24.0**:幽灵常驻根治批(BUG-06)——`--idle-ms 0` 语义改「不自收 + 24h 硬顶」+ 跨进程活动真源 + 配方治理
|
|
467
|
+
- **v1.25.0**:当前页截图批(BUG-07)——`action=screenshot` 省略 url 截当前受管页(零导航)
|
|
468
|
+
- **v1.26.0(预写)**:反爬马拉松稳定性批(BUG-08)——same-document 导航默认 reload + evaluate url=ensure-navigation + `budget_ms` 超时类型化 + freshProfile 逃生门 + sidecar 治理 `browser_recycle` + logged_in 端口三层解析 + fetch_url 失败细分 + vitest threads 钉死 / gate 超时追杀带
|
|
446
469
|
- **v1.18.1 ~ v1.18.7 要点**(用户向完整版见 README changelog;决策记录见 doc/architecture/02 排期表):
|
|
447
470
|
- **v1.18.0/1.18.1**:静默守则入宪(doc/governance/09)——D-5 exit 钩子 modes:['hidden'](visible 登录窗口不再被 server 退出杀死)+ C2 登录后自动 hide(opt-in)+ INV-82;批量实战五修(求值失败不静默吞 / 无选中 tab 自愈 / visible 冷启动探活 12s / PDF 上游缺失前置如实报)
|
|
448
471
|
- **v1.18.2**:错配机制审计(doc/governance/10)——威胁模型错配守卫四修 + 默认放行(单用户本地 stdio 形态下「多租户滥用」类限额默认 Infinity / opt-in;瞬态 DNS ≠ 策略拦截,语义 unknown 可重试)
|
|
@@ -453,7 +476,7 @@ $ lasso launch-chrome
|
|
|
453
476
|
- **v1.18.7**:架构重审落地——browse 族接口面死参数清扫(诚实化)+ doctor/channels 解耦(INV-84)+ firstText 单一定义(INV-83)+ 文档改真 + INV 82→84;随后 P2 处置轮(doc/governance/11)46 项三档裁决 + `launch-chrome --help` 误启动修复 + CI actions 升 checkout@v7 / setup-node@v6 并加 Node 24
|
|
454
477
|
- **doctor readiness 现状(如实)**:任一 check fail → `ready:false`。**#15 `rust_helper_signed` 现行语义 = ad-hoc 签名 → warn**(2026-08-31 用户裁决降级:ad-hoc 是官方免费合法方案、功能正常,唯一代价 rebuild 后 TCC 重授权;FAIL 把正常配置判成 ready:false 属噪音。Developer ID 长期方案保留在 next_step;Developer ID 正签仍 pass、未签仍 warn——回归测试 rust-helper-signed-warn.spec 三态锚定)
|
|
455
478
|
- **跨平台 backend**:macOS 本机全证;Win/Linux 编译可证 + 契约可证,真机执行待社区反馈
|
|
456
|
-
- **门禁(本地)**:`npm run build` / `npm test
|
|
479
|
+
- **门禁(本地)**:`npm run build` / `npm test`(**2026-09-16 基准:2997 passed + 1 skipped,182 文件 + readme-sync**——BUG-08 gate 实跑口径)/ `npm run check-invariants`(**96**,2026-09-16 实跑全 PASS)/ `npm run inv-selftest` + `cargo test`(207,CI 不含);`npm run gate` 后台化 + 60s 轮询读 log(180s stall 防误判;vitest 树超时追杀带 `LASSO_GATE_VITEST_TIMEOUT_MS`,doc/bugs/08 §12)
|
|
457
480
|
- **CI(.github/workflows/ci.yml 实况)**:ubuntu-latest × Node **20/22/24** 矩阵(20=下限锚点 / 22=maintenance LTS / 24=active LTS——search-local 的 `node:sqlite` 依赖 NODE_MAJOR>=23,加 24 后该文件 40 测在 CI 真跑);actions checkout@v7 / setup-node@v6;步骤 = npm ci → build → test → check-invariants(**JS 门禁三件套,无 cargo 步骤**——Rust 面靠本地 cargo test/check 守)
|
|
458
481
|
|
|
459
482
|
## 15. 质量与决策主线(doc/governance/01 → doc/governance/06 → doc/testing/01)
|
|
@@ -467,10 +490,41 @@ $ lasso launch-chrome
|
|
|
467
490
|
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。
|
|
468
491
|
6. **静默性 / 守则 / 错配审计三连**(doc/governance/08 / 09 / 10,v1.17.2 → v1.18.2):全通道零抢焦点(S-7/S-10)→ 用户运行守则入宪(S1/S2/S3 三子句 + INV-82)→ 错配机制审计(47 处命中逐个裁决:4 修复 + 5 黄 + 19 保留)。
|
|
469
492
|
7. **全面重审与 P2 处置**(2026-08-31,wf_c02ef3df 15-agent 五路 review + doc/governance/11 台账):首轮五路 34 + 复审 22 = 56 原始 P2 去重合并 46 项,三档裁决 **20 fixed / 25 deferred / 1 rejected(已被 r3 轮修复偿)**;fixed 批次含 types.ts 死字段清理、doctor.spec flake 抬 15s、CI actions 升级 + Node 24 矩阵、`launch-chrome --help` 误启动短路;deferred 项全部留档可追。
|
|
493
|
+
8. **渲染档 + BUG-03~08 五批实战驱动线**(2026-09-01 → 09-15,doc/渲染档文档组 + doc/bugs/03-08):确定性渲染档(v1.19-1.20,media-gen-mcp 消费方托付浏览器生命周期)→ 浏览器主权根治(BUG-03 事故:用户 Chrome 被裸 kill)→ 归属鉴定 chrome-status(BUG-04,消费方实战)→ 消费方台账 L1-L4 两批(BUG-05/07,novel-engine)→ 幽灵常驻 24h 硬顶(BUG-06,用户 12h 实锤)→ 反爬马拉松稳定性(BUG-08,3 小时商标库实战 + F 组用户负载 188 实锤)。每批 = 事故/台账驱动 → 设计决议 → 实施 → 对抗复审 clean 闭环;INV 84 → 96。
|
|
494
|
+
9. **BUG-08 审查循环(2026-09-16,Gauntlet 对抗复核)**:主对象 `git diff 92200d3..7ab999b`(16 commit/43 files)+ 五批累计架构漂移面——R-INT-06 证据修订后记(testing/01 §6:BrowseChannel.ts 磁石效应五批中四批落点 14 commit、doEvaluate 85 行 ≥4 职责类,**下批触碰 navigate/evaluate 语义须抽导航语义模块**,doc/testing/01 表后记)等。
|
|
470
495
|
|
|
471
496
|
方法学沉淀(供复用):裁决官不采信文档(关键声称白盒双源亲验);证据阶梯 L0-L3;mutation 即验收;「先拿事实再加参数」;收敛协议前置;零基视角才可见方案级盲区;决策分级(GO/DECISION/WATCH/NOGO)交用户裁决而非默认全做。
|
|
472
497
|
|
|
473
|
-
## 16.
|
|
498
|
+
## 16. v1.19 → v1.26 新增架构面(渲染档 + BUG-03~08 五批;2026-09-16 DocAudit 轮增补)
|
|
499
|
+
|
|
500
|
+
> 本节为增量对齐段:v1.18.7 基线之后新增、且改变架构形态的面。逐项决策记录见 doc/bugs/03-08 与 doc/渲染档文档组(索引 doc/README.md ⑦/⑤)。
|
|
501
|
+
|
|
502
|
+
### 16.1 台账体系(chrome ledger,v1.9 既有 + 五批扩展为治理中枢)
|
|
503
|
+
|
|
504
|
+
台账 `~/.cache/lasso/launched-chromes.json`(主键 port + 归属标记)从「拉起记录」演进为**全生命周期治理中枢**:`launchMode` 三值(hidden / visible / **render** v1.19)× 停机三维谓词(modes × ownerPid × userTakenAt 豁免,BUG-03——任何进程退出只许收自己拉起的 Chrome)× `userTakenAt`/`isUserOwnedRecord` 用户认领态(永不进程序化收尸)× 24h 硬顶(BUG-06,无窗口实例保命天花板 + `--no-hard-cap` 逃生口)× 跨进程活动真源 `chrome-touch-<port>`(外部 CDP 消费者 touch 续命)。`chrome-status` 十分类把「这个端口被谁占着、我能不能动它」做成可机械判定的归属鉴定(§9 三层防线第 1 层)。
|
|
505
|
+
|
|
506
|
+
### 16.2 渲染档(src/render/,v1.19-1.20)
|
|
507
|
+
|
|
508
|
+
确定性 headless Chrome 档,服务 media-gen-mcp 等渲染消费方:`render-chrome --ensure`(幂等 + reused 四条件门 + 单飞锁 + 退出码 0-5 契约)/ 冻结旗标快照(render-flags.ts 单一真源 + fixture tripwire,同输入同像素)/ detached `render-guardian` 执守(收割调度,Chrome 本体持有者 =「无人」PPID=1 + 磁盘台账共有制)/ profile 三路径连带清理 / 9224 固定口(`LASSO_RENDER_PORT` 可隔离,冲突 exit 3)。并行验收三 env 命名空间配方见 doc/渲染档-并行验收隔离配方.md。设计决议:doc/渲染档设计决议.md(r2/r3 修订在档)。
|
|
509
|
+
|
|
510
|
+
### 16.3 上游楔死自愈(BUG-04,v1.22.0)
|
|
511
|
+
|
|
512
|
+
上游 chrome-devtools-mcp 选中页被关后 navigate/evaluate/snapshot 永久报错的结构性缺陷:lasso 检测楔死签名 → 后台自建页接管(`Target.createBackgroundTarget`,零抢焦)→ 自愈后如实前缀上报(`session_rotated:`);修不掉时诚实报错不伪装。INV-89 守(heal 函数体双锚)。v1.26.0 补齐长 evaluate 维度:上游全局 toolMutex 楔死是**时间性的**(~3min 自愈)——`budget_ms` 调用预算传导 MCP 层(此前恒落 SDK 60s 缺省事故)+ 超时类型化 `mcp_request_timeout:` + 教学 hint(Chrome 没死)。
|
|
513
|
+
|
|
514
|
+
### 16.4 内部栈 sidecar 治理(BUG-08 决议 B,v1.26.0)
|
|
515
|
+
|
|
516
|
+
chrome-devtools-mcp 栈(进程内 spawn,跨进程不可见)与台账(主键 port)两者不对应 → `chrome-stop --all` 返空 + deny-hook 正确拦 OS kill = 死锁。治理:spawn 即登记 sidecar + 任意 spawn 前孤儿扫除(判定序:pid 归并 → alive → 包串 → lstart 交叉核对 → owner 死;绝不触碰非 lasso 进程)+ `admin browser_recycle` 受控重启正门(永不动 detached Chrome;可组 `freshProfile:true` 换脸重启)。域隔离 tripwire:chrome-stop 零 headless-stack 符号。
|
|
517
|
+
|
|
518
|
+
### 16.5 反爬逃生门与假数据面修正(BUG-08 决议 C/D,v1.26.0)
|
|
519
|
+
|
|
520
|
+
- **freshProfile**:headless 被服务端指纹拉黑(静默假 0)后的逃生门——完整新一致身份(临时 profile 归属锚目录名 + 先杀后删 + 24h 陈年双闸防 BUG-03 垃圾重演 + stealth 宿主适用集确定性轮换 + 完整栈 respawn);logged_in 永不支持。
|
|
521
|
+
- **same-document 诚实化**:仅 hash 不同导航默认补 reload(URL 规范化判基 `new URL()` origin+pathname+search,空路径省略斜杠形态不漏检——审查轮 3f73331 封口)+ `evaluate url` = ensure-navigation(final_url 永远真实)——假数据面(比崩溃危险一个数量级)的系统性修正。
|
|
522
|
+
|
|
523
|
+
### 16.6 测试基建自愈(BUG-08 F 组,v1.26.0)
|
|
524
|
+
|
|
525
|
+
vitest 池显式钉死 `threads`(主进程死 = worker 线程随之死,forks 孤儿类结构性消灭——用户负载 188 实锤事故)+ `npm run gate` 对 vitest 树的超时追杀带(到点树根存活即整树 SIGKILL;E1 白盒实锤 spawnSync timeout 形态必漏杀忙 worker,已否决)。gate 运行纪律:后台化 + 60s 轮询读 log(防 180s stall 误判死)。
|
|
526
|
+
|
|
527
|
+
## 17. 相关文档
|
|
474
528
|
|
|
475
529
|
- [README.md](./README.md) — 用户手册(安装 / 配置 / 工具列表 / 隐私 / 故障排查)
|
|
476
530
|
- [doc/README.md](./doc/README.md) — doc/ 目录导读(**七组结构**:usage / architecture / testing / governance / bugs / history / archive,2026-08-27 重整;旧全局编号 08/09/17-29 → 新路径映射表在此;决策时间线 + 新鲜度表)
|
|
@@ -482,8 +536,10 @@ $ lasso launch-chrome
|
|
|
482
536
|
- [doc/usage/03-SELECTOR-MAINTENANCE.md](./doc/usage/03-SELECTOR-MAINTENANCE.md) — selector 债维护手册
|
|
483
537
|
- [doc/governance/07 文档查缺补漏](./doc/governance/07-文档查缺补漏/gap-matrix.md) — 文档盘点矩阵(新鲜度档位 + F 编号映射真源)
|
|
484
538
|
- [doc/governance/11 P2 处置台账](./doc/governance/11-P2处置台账.md) — 全面重审 46 项 P2 三档裁决全记录(20 修 / 25 留档 / 1 已偿)
|
|
485
|
-
- [doc/
|
|
539
|
+
- [doc/governance/12 回告收口决议](./doc/governance/12-回告收口与交付物测试载体决议.md) — 交付物必须自带测试载体制度(deny-hook 样例落仓 + 文档同步锚)
|
|
540
|
+
- [doc/bugs](./doc/bugs/) — BUG 档案(01 rust-helper 路径 / 02 外部消费与隐藏生命周期 / 03 hidden 档劫持 / 04 死锁与 chrome-status+附录E / 05 消费方台账 L1-L3 / 06 幽灵常驻 / 07 消费方台账 L4 / 08 商标马拉松五组)
|
|
541
|
+
- [doc/渲染档设计决议](./doc/渲染档设计决议.md) 等根级渲染档文档组 7 件 — 决议/需求/对接契约/并行配方/perf-acc 裁决/stop 作用域提案/登记开项(索引见 doc/README.md ⑦)
|
|
486
542
|
|
|
487
543
|
---
|
|
488
544
|
|
|
489
|
-
本文档是 Lasso
|
|
545
|
+
本文档是 Lasso 架构概览(user-first;2026-08-31 全量对齐刷新至 v1.18.7——事实基准 = HEAD `4a40b7e` 源码实核 + `tools/list` / `npm test` / `check-invariants` / `inv-selftest` / `cargo test` / `doctor` 实跑,20 条机械断言逐条对账零漂移;**2026-09-16 DocAudit 轮增补对齐至 v1.26.0 预写态**——头部横幅 / §2.1 渲染档与 sidecar / §9 三层防线 / §10 计数 / §11 INV 96 / §14 版本要点 / §15 主线 8-9 / 新 §16 五批新增面,实跑核验 = check-invariants 96/96)。深度架构基线(含 F 编号 / 不变量推导链 / 测试策略)见 [`doc/architecture/01`](./doc/architecture/01-功能架构.md);v0.1 → v1.26.0 实施排期(含每 phase 决策记录)见 [`doc/architecture/02`](./doc/architecture/02-实施排期.md)。
|
package/README.en.md
CHANGED
|
@@ -212,7 +212,7 @@ Goes to the Internet Archive (Wayback Machine) to find the last archived copy of
|
|
|
212
212
|
|
|
213
213
|
## Install
|
|
214
214
|
|
|
215
|
-
**Current version v1.
|
|
215
|
+
**Current version v1.26.0** (changelog in the collapsed block at the end of this section).
|
|
216
216
|
|
|
217
217
|
Prerequisites: Node.js ≥ 20 + Claude Code (or any MCP-capable client).
|
|
218
218
|
|
|
@@ -229,7 +229,7 @@ Restart Claude Code → `/mcp` → `lasso ✓ Connected`. **That's the one line
|
|
|
229
229
|
<details>
|
|
230
230
|
<summary>📋 Changelog (v1.8 → v1.18.6 — click to see what each version changed)</summary>
|
|
231
231
|
|
|
232
|
-
- **v1.
|
|
232
|
+
- **v1.26.0**: anti-scraping marathon stability batch (BUG-08, driven by a 3-hour trademark-registry session, doc/bugs/08) — (1) 🔴 **corrective behavior changes (the fake-data face — an order of magnitude more dangerous than crashes)**: navigating to a URL that differs ONLY by hash (SPA `#/search?q=` param change) used to be treated as same-document with no reload — the page kept showing OLD query results under the NEW url (in the field this nearly reported a true value of 3718 as "0, clean"); lasso now detects the shape and reloads on the target hash by default, echoing `same_document_navigated/same_document_reloaded` (opt out with `options.no_reload:true` — annotated, not reloaded; the detection basis is normalized URL comparison via `new URL()` origin+pathname+search — the empty-path-omitted-slash form `http://x#/q=b` IS same-document with `http://x/#/q=a`, which raw string comparison misses and would revive the fake-data shape — sealed in the review round). `evaluate` with a `url` used to silently run on the CURRENT page while final_url echoed the target (fabricated); url now means ensure-navigation (different page → navigate first, then run) and final_url is always real. (2) **long-evaluate stability**: per-call budget `options.budget_ms` (default 120s / `LASSO_EVAL_TIMEOUT_MS` / cap 600s) now reaches the MCP call layer — previously every call fell into the SDK's accidental 60s default, so any >60s batch JS timed out; timeouts are typed `mcp_request_timeout:` + a teaching hint (**the browser is NOT dead** — the upstream mutex wedge self-heals in ~3min); fallback-chain exhaustion errors became primary-first composites (the primary channel's own error leads, last-hop excerpt trails — attribution pollution eliminated). (3) **freshProfile escape hatch**: the only remedy once a site server-side-fingerprints the headless instance (silent zero results) — `options.freshProfile:true` swaps in a whole new coherent identity (throwaway profile dir [owner-anchored name + four cleanup paths, no BUG-03 garbage repeat] + deterministic stealth rotation + full stack respawn; logged_in never supports it). (4) **internal stack governance**: chrome-devtools-mcp stacks now register to a sidecar at spawn and any spawn sweeps orphans first (pid-level merge + triple guard + lstart cross-check — never touches non-lasso processes), ending the marathon "two zombie stacks nobody may touch" deadlock; new admin action `browser_recycle` (the sanctioned in-process restart, never touches detached Chrome). (5) `wait` gains current-page mode (omit url, same session contract as screenshot); `browse_logged_in` auto-discovers the newest non-render ledger port when default 9222 has no CDP (three-layer resolution, result carries `+auto_discovered_port:<port>`; explicit `LASSO_CDP_PORT` always wins); `fetch_url` failures classified (`fetch_failed:dns_failed/connect_refused/connect_timeout/tls_failed/aborted_timeout` — local env vs target refusal now distinguishable). (6) test-infra self-healing (BUG-08 F, the real load-188 incident on the user's machine): the vitest pool is explicitly pinned to threads (main process death = worker threads die with it — the forks-pool orphan class is structurally eliminated) and `npm run gate` gains a timeout kill-belt for the whole vitest tree (fires while the tree root is still alive and SIGKILLs the entire tree; `LASSO_GATE_VITEST_TIMEOUT_MS` tunable; the spawnSync-timeout form was disproven by whitebox experiment E1 — it always misses busy workers; doc/bugs/08 §12). Tests 2895→2997 / invariants 95→96 (INV-96); existing consumers (cc-control / media-gen-mcp) zero breaking.
|
|
233
233
|
- **v1.25.0**: current-page screenshot batch (BUG-07, novel-engine animation-forensics driven) — `action=screenshot` **with url omitted now screenshots the current managed page directly** (the standalone `screenshot` tool gains the same semantics): previously both screenshot paths re-navigated unconditionally, wiping whatever page state evaluate had established (a CSS animation paused mid-frame, injected temporary DOM) — state-sensitive screenshots were unreachable and the consumer had to detour through a second browser-automation stack. Now the same session closes the loop across four channels: open with url → `evaluate` freeze/inject → screenshot without url → `console` forensics. With no active session (cold channel / page closed / healed-over), it errors explicitly with guidance — **never silently opening a browser, never faking state with a blank page**; the old url-bearing behavior is unchanged (pinned by regression anchors); three clean adversarial rounds — 6/6 mutations red + session-drift attacks on live dual channels with zero penetration (concurrent races refused / popup vectors pinned to the managed page / silent page-swap invalidated at the commit point). Upstream research verdict: the industry-universal screenshot semantic IS "capture the current state" — this version realigns lasso with the standard.
|
|
234
234
|
- **v1.24.0**: ghost-instance root-fix batch (BUG-06, driven by a live 12-hour instance) — ① 🔴 **behavior change**: `launch-chrome --idle-ms 0` changes from "never reap" to "**no self-reaping, but a 24-hour hard cap as a safety net**" — a windowless hidden instance can no longer linger indefinitely as an "invisible, uncloseable ghost" (this batch's trigger: a 12-hour instance invisible in the Dock and menu bar with no way to close it). True unlimited now requires the additional explicit `--no-hard-cap` (**double intent** — prevents scripts passing 0 casually); deployments can tune or disable via `LASSO_LAUNCH_HARD_CAP_MS` (`=0` disables entirely); failure direction is always safe (invalid values fall back to capped). Old scripts relying on "0 = forever" should add `--no-hard-cap`. ② **cross-process liveness truth**: before hard-cap reaping, the touch-file heartbeat is consulted (any session / any consumer still using it → no wrongful kill); userTakenAt / visible exemptions carry over natively (re-evaluated at kill time, the race window sealed). ③ **over-age observability**: `doctor` / `chrome-status` warn early on instances past half the hard cap (no new kill surface added). Six live-machine acceptance checks all PASS + two clean adversarial rounds (three mutations all red / wrongful-kill panorama replayed with live stand-in processes, zero casualties / render tier zero cross-contamination).
|
|
235
235
|
- **v1.23.0**: local-file & debugging batch (BUG-05, novel-engine field driven) — ① **`LASSO_ALLOW_FILE_FROM` file:// directory allowlist**: testing local single-file HTML (a staple for offline-artifact acceptance) used to be flat-blocked by the SSRF guard — now, with `LASSO_ALLOW_FILE_FROM=/your/project/dir`, `browse_*` can navigate/snapshot/extract/screenshot local files **inside the designated directory subtree** (still denied by default; zero-config = zero behavior change; `../` traversal, symlink escapes, prefix forgery and trailing-symlink write escapes all sealed — 18 read-side + 10 write-side attack variants, zero escapes); ② new **`console` action**: read the current page's console messages since the last navigation (severity filter + most-recent-N) — no more window.onerror injection detours when debugging rendering defects; ③ **`ignored_options` honesty contract**: options keys you passed that the current action doesn't consume are listed verbatim in the response (never silently dropped — one root cause of the "worked but no screenshot" trap the consumer hit); and to be explicit: navigate-then-screenshot in one step **is already what `action=screenshot` does**; ④ **`LASSO_SCREENSHOT_DIR` screenshot write-root constraint**: custom screenshot output paths are denied by default (arbitrary-write protection), opt-in and confined to the designated subtree. Two clean adversarial rounds: 6/6 mutations killed + proof the core SSRF guard is unweakened + consumer scenario (real single-file HTML over both http and file://) fully verified on a live machine.
|
package/README.md
CHANGED
|
@@ -221,7 +221,7 @@ macOS 上能控 Finder / Mail / Safari / Notes / 系统设置等任何原生 app
|
|
|
221
221
|
|
|
222
222
|
## 安装
|
|
223
223
|
|
|
224
|
-
**当前版本 v1.
|
|
224
|
+
**当前版本 v1.26.0**(更新日志见本节末尾折叠块)。
|
|
225
225
|
|
|
226
226
|
前提:Node.js ≥ 20 + Claude Code(或任何支持 MCP 的客户端)。
|
|
227
227
|
|
|
@@ -238,7 +238,7 @@ claude mcp add lasso -- npx -y lasso-mcp
|
|
|
238
238
|
<details>
|
|
239
239
|
<summary>📋 更新日志(v1.8 → v1.23.0,点开看每版改了什么)</summary>
|
|
240
240
|
|
|
241
|
-
- **v1.
|
|
241
|
+
- **v1.26.0**:反爬马拉松稳定性批(BUG-08,3 小时商标库查询实战驱动,doc/bugs/08)——① 🔴 **修正型行为变更(假数据面,比崩溃危险一个数量级)**:`navigate` 到**仅 hash 不同**的 URL(SPA `#/search?q=` 换词)此前按 same-document 处理不重载——页面留旧查询结果、URL 已新词(实战差点把真值 3718 写成 0 条干净);现在默认检测命中即补 reload,回显 `same_document_navigated/same_document_reloaded` 双标注(`options.no_reload:true` opt-out 只标注;判定基为 URL 规范化比较 `new URL()` origin+pathname+search——空路径省略斜杠形态 `http://x#/q=b` 是 `http://x/#/q=a` 的 same-document,raw 串比较会漏检致假数据复活,审查轮已封口)。`evaluate` 传 `url` 此前**静默跑在当前页 + final_url 伪造目标 URL**;现在 url ≠ 当前页先导航再执行(=ensure-navigation),final_url 永远真实。② **长 evaluate 稳定性**:单调用预算 `options.budget_ms`(默认 120s / `LASSO_EVAL_TIMEOUT_MS` 可调 / 上限 600s)传导 MCP 调用层——此前恒落 SDK 60s 缺省事故,>60s 批量 JS 必超时;超时错误类型化 `mcp_request_timeout:` + 教学 hint(**Chrome 没死**,上游互斥锁楔死 ~3min 自愈);全链 fallback 耗尽的错误改为 primary-first 复合串(主通道错误打头,fallback 尾跳摘录在尾——归因污染消灭)。③ **freshProfile 换脸逃生门**:headless 被服务端指纹拉黑(静默假 0)后的唯一解——`options.freshProfile:true` 换完整新一致身份(临时 profile【归属锚目录名+四路清理防 BUG-03 垃圾重演】+ stealth 宿主适用集确定性轮换 + 完整栈 respawn;logged_in 永不支持)。④ **内部栈治理**:chrome-devtools-mcp 栈 spawn 即登记 sidecar、任意 spawn 前孤儿扫除(pid 归并 + 三重守卫 + lstart 交叉核对,绝不触碰非 lasso 进程)——marathon「两代栈并存 + 谁也动不了」死锁根治;admin 新 action `browser_recycle`(内部栈受控重启正门,永不动 detached Chrome)。⑤ `wait` 支持当前页(省 url,与截图同会话契约);`browse_logged_in` 默认 9222 失败时自动发现台账最新非 render 口(三层解析,结果带 `+auto_discovered_port:<port>` 标注;显式 `LASSO_CDP_PORT` 恒赢);`fetch_url` 失败细分(`fetch_failed:dns_failed/connect_refused/connect_timeout/tls_failed/aborted_timeout`——本机环境 vs 目标站拒绝可分辨)。⑥ 测试基建自愈(BUG-08 F,用户实锤负载 188 事故):vitest 池显式钉死 threads(主进程死 = worker 线程随之死,forks 孤儿类结构性消灭)+ `npm run gate` 对 vitest 树的超时追杀带(belt 到点在树根存活时整树 SIGKILL,`LASSO_GATE_VITEST_TIMEOUT_MS` 可调;E1 白盒实锤:spawnSync timeout 形态必漏杀忙 worker,已否决——doc/bugs/08 §12)。测试 2895→2997 / 不变量 95→96(INV-96 五组防线);既有消费方(cc-control / media-gen-mcp)零 breaking。
|
|
242
242
|
- **v1.25.0**:当前页截图批(BUG-07,novel-engine 动画取证驱动)——`action=screenshot` **省略 url 即对当前受管页面直接截屏**(独立 `screenshot` 工具同义):此前两条截图路径都必经重导航,把 evaluate 建立的页面现场(冻结的 CSS 动画中间帧、注入的临时 DOM)全部洗掉——状态敏感截图不可达,消费方被迫借道第二套浏览器栈。现在同会话四通道闭环:带 url 建会话 → `evaluate` 冻结/注入 → 无 url 截当前帧 → `console` 取证。无活动会话(冷通道/页面已关/被自愈换页)显式报错带指引,**绝不静默新开、绝不截空白页伪造状态**;带 url 的旧行为零变化(回归锚钉死);对抗三轮 clean——6 变异全红 + 会话漂移攻击真机双通道零穿透(并发竞态拒/弹窗钉受管页/静默换页 invalidate 封口)。上游调研定谳:截图的业界普适语义就是「截当前状态」——本版把 lasso 对齐回行业标准。
|
|
243
243
|
- **v1.24.0**:幽灵常驻根治批(BUG-06,用户 12 小时实例实锤驱动)——① 🔴 **行为变更**:`launch-chrome --idle-ms 0` 的语义从「永不回收」改为「**不自收,但 24 小时硬顶保命**」——无窗口的隐藏实例从此不可能无限常驻成「看不见也关不掉的幽灵」(本轮用户实锤:一个 12 小时实例,Dock/菜单栏不可见无从关闭)。要真正无限需再显式 `--no-hard-cap`(**双重意图**,防脚本顺手传 0);部署级可用 `LASSO_LAUNCH_HARD_CAP_MS` 调整或 `=0` 全禁;失效方向恒安全(非法值回退有顶)。旧脚本若依赖「0=无限」请加 `--no-hard-cap`。② **跨进程活动真源**:硬顶收割前看 touch 文件心跳(任何会话/任何消费方还在用 → 不误杀);userTakenAt / visible 豁免天然继承(kill 时刻二次重估,竞态窗口封口)。③ **超龄可观测**:`doctor` / `chrome-status` 对过半硬顶的实例提前 warn(不新增任何 kill 面)。真机验收六项全 PASS + 对抗两轮 clean(三变异全红 / 误杀全景真活替身重放零误伤 / 渲染档零交叉)。
|
|
244
244
|
- **v1.23.0**:本地文件与排障能力批(BUG-05,novel-engine 实测驱动)——① **`LASSO_ALLOW_FILE_FROM` file:// 目录白名单**:测本地单文件 HTML(离线产物验收的标配场景)此前被 SSRF 守卫一刀切拦——现在设 `LASSO_ALLOW_FILE_FROM=/你的项目目录` 后 `browse_*` 可导航/快照/抽取/截图**指定目录子树内**的本地文件(默认仍拒、零配置零行为变化;`../` 穿越、symlink 逃逸、目录前缀伪造、末段 symlink 写逃逸全封口——读面 18+写面 10 攻击变体零逃逸);② 新 **`console` action**:直接读当前页自上次导航以来的 console 消息(按严重度过滤 + 最近 N 条)——渲染类缺陷排查不再需要注入 window.onerror 绕路;③ **`ignored_options` 诚实契约**:你传了但当前 action 用不上的 options 键会在响应里如实列出(不再静默丢弃——novel-engine 实测踩到的「worked 但截图没生成」根因之一);顺带明确:navigate+截图一步走**本就是 `action=screenshot` 的行为**(先导航再截图);④ **`LASSO_SCREENSHOT_DIR` 截图写根约束**:自定义截图落盘路径默认拒(防任意写盘),opt-in 且限指定目录子树内。对抗两轮 clean:6 变异全红+SSRF 守卫本体零削弱证明+消费方场景(真实单文件 HTML http/file:// 双路径)真机全通。
|
|
@@ -203,6 +203,25 @@ export declare const STEALTH_PROFILE_NAMES: StealthProfileName[];
|
|
|
203
203
|
* 组合根实例化只在 doctor-cli.ts / index.ts)。
|
|
204
204
|
*/
|
|
205
205
|
export declare function defaultHeadlessProfileForHost(): StealthProfileName;
|
|
206
|
+
/**
|
|
207
|
+
* BUG-08 决议 C(doc/bugs/08,2026-09-15):freshProfile 的 stealth 轮换候选集——
|
|
208
|
+
* **宿主自洽**的 profile 名单(确定性取下一个,禁随机——可复现性)。
|
|
209
|
+
*
|
|
210
|
+
* 自洽判定依据 = v1.12 T2-1 的 client-hints 实测(E1):chrome-devtools-mcp
|
|
211
|
+
* 1.7.0 不暴露 setExtraHTTPHeaders,sec-ch-ua-platform 发**宿主真值**——
|
|
212
|
+
* windows profile 在 mac 宿主 = 「UA 称 Windows、hints 招供 macOS」的 OS 级
|
|
213
|
+
* shape 矛盾(FP-Block 身份自洽铁则下的「部分变异」——本身就是被检测信号)。
|
|
214
|
+
* Safari/Firefox profile 同理被否(引擎是 Chromium,hints 招供 Chromium 品牌)。
|
|
215
|
+
*
|
|
216
|
+
* 后果(决议 §7 残余 5 诚实声明):单平台宿主候选集常只有 1 个 → 轮换退化为
|
|
217
|
+
* 仅 profile 目录换新(指纹层同旧);本函数返回 current 本身,绝不跨宿主硬换。
|
|
218
|
+
*/
|
|
219
|
+
export declare function hostApplicableStealthProfiles(): StealthProfileName[];
|
|
220
|
+
/**
|
|
221
|
+
* BUG-08 决议 C:确定性轮换——候选集内取 current 的下一个(环形);候选集
|
|
222
|
+
* 空 / current 不在集内(历史配置)→ 返回 current(诚实退化,不硬换)。
|
|
223
|
+
*/
|
|
224
|
+
export declare function nextHostApplicableProfile(current: StealthProfileName): StealthProfileName;
|
|
206
225
|
/**
|
|
207
226
|
* 16 路反检测注入脚本(CORE 3 路 + 12 路 vendored evasion;join 成单字符串)。
|
|
208
227
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stealth-profiles.d.ts","sourceRoot":"","sources":["../../src/browse/stealth-profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAkBH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGsB,CAAC;AAEpD,2EAA2E;AAC3E,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAE/D,4CAA4C;AAC5C,eAAO,MAAM,qBAAqB,EAE7B,kBAAkB,EAAE,CAAC;AAE1B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,6BAA6B,IAAI,kBAAkB,CAElE;AA8ED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,QAczB,CAAC;AAKb;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,4BAA4B,qHAM/B,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,QAWtC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,QAGtC,CAAC"}
|
|
1
|
+
{"version":3,"file":"stealth-profiles.d.ts","sourceRoot":"","sources":["../../src/browse/stealth-profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAkBH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGsB,CAAC;AAEpD,2EAA2E;AAC3E,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAE/D,4CAA4C;AAC5C,eAAO,MAAM,qBAAqB,EAE7B,kBAAkB,EAAE,CAAC;AAE1B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,6BAA6B,IAAI,kBAAkB,CAElE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,IAAI,kBAAkB,EAAE,CAWpE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,kBAAkB,GAC1B,kBAAkB,CAMpB;AA8ED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,QAczB,CAAC;AAKb;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,4BAA4B,qHAM/B,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,QAWtC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,QAGtC,CAAC"}
|
|
@@ -182,6 +182,44 @@ export const STEALTH_PROFILE_NAMES = Object.keys(STEALTH_PROFILES);
|
|
|
182
182
|
export function defaultHeadlessProfileForHost() {
|
|
183
183
|
return process.platform === "darwin" ? "mac_chrome" : "windows_chrome_120";
|
|
184
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* BUG-08 决议 C(doc/bugs/08,2026-09-15):freshProfile 的 stealth 轮换候选集——
|
|
187
|
+
* **宿主自洽**的 profile 名单(确定性取下一个,禁随机——可复现性)。
|
|
188
|
+
*
|
|
189
|
+
* 自洽判定依据 = v1.12 T2-1 的 client-hints 实测(E1):chrome-devtools-mcp
|
|
190
|
+
* 1.7.0 不暴露 setExtraHTTPHeaders,sec-ch-ua-platform 发**宿主真值**——
|
|
191
|
+
* windows profile 在 mac 宿主 = 「UA 称 Windows、hints 招供 macOS」的 OS 级
|
|
192
|
+
* shape 矛盾(FP-Block 身份自洽铁则下的「部分变异」——本身就是被检测信号)。
|
|
193
|
+
* Safari/Firefox profile 同理被否(引擎是 Chromium,hints 招供 Chromium 品牌)。
|
|
194
|
+
*
|
|
195
|
+
* 后果(决议 §7 残余 5 诚实声明):单平台宿主候选集常只有 1 个 → 轮换退化为
|
|
196
|
+
* 仅 profile 目录换新(指纹层同旧);本函数返回 current 本身,绝不跨宿主硬换。
|
|
197
|
+
*/
|
|
198
|
+
export function hostApplicableStealthProfiles() {
|
|
199
|
+
// 构造期确定性(process.platform 只读;非 env/config 可配——INV-30 面)
|
|
200
|
+
switch (process.platform) {
|
|
201
|
+
case "darwin":
|
|
202
|
+
return ["mac_chrome"];
|
|
203
|
+
case "win32":
|
|
204
|
+
return ["windows_chrome_120"];
|
|
205
|
+
default:
|
|
206
|
+
// Linux 宿主无自洽 Chromium profile(hints 招供 Linux)——空集 = 保持现状
|
|
207
|
+
return [];
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* BUG-08 决议 C:确定性轮换——候选集内取 current 的下一个(环形);候选集
|
|
212
|
+
* 空 / current 不在集内(历史配置)→ 返回 current(诚实退化,不硬换)。
|
|
213
|
+
*/
|
|
214
|
+
export function nextHostApplicableProfile(current) {
|
|
215
|
+
const set = hostApplicableStealthProfiles();
|
|
216
|
+
if (set.length === 0)
|
|
217
|
+
return current;
|
|
218
|
+
const idx = set.indexOf(current);
|
|
219
|
+
if (idx < 0)
|
|
220
|
+
return current;
|
|
221
|
+
return set[(idx + 1) % set.length];
|
|
222
|
+
}
|
|
185
223
|
// ============================================================
|
|
186
224
|
// STEALTH_INJECTION_SCRIPT 顶级 const(parse5 §3.3.1 + v1.5 parse13 §3.1 16 路)
|
|
187
225
|
// ============================================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stealth-profiles.js","sourceRoot":"","sources":["../../src/browse/stealth-profiles.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stealth-profiles.js","sourceRoot":"","sources":["../../src/browse/stealth-profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,17 @@ export declare abstract class BrowseChannel extends UiChannel {
|
|
|
14
14
|
abstract readonly name: string;
|
|
15
15
|
/** 子类提供 McpClient(headless 子进程 / logged_in 子进程 各自拿)。 */
|
|
16
16
|
protected abstract getMcpClient(): Promise<McpClient>;
|
|
17
|
+
/**
|
|
18
|
+
* BUG-08 决议 E-1(doc/bugs/08,2026-09-15):retrieval_method 加法标注的
|
|
19
|
+
* 待消费 note(子类写入,browseSingle 读后即清——单写单读,无共享 mutable
|
|
20
|
+
* state 耦合面)。唯一现役写者 = LoggedInChannel 自动发现(auto_discovered_
|
|
21
|
+
* port:<port>——调用方可见「这次结果来自哪个口」)。
|
|
22
|
+
*/
|
|
23
|
+
private pendingRetrievalNote;
|
|
24
|
+
/** E-1:子类写入口(protected;读消费在 browseSingle)。 */
|
|
25
|
+
protected noteRetrieval(note: string): void;
|
|
26
|
+
/** E-1:读后即清("" = 无标注;retrieval_method 后缀拼接)。 */
|
|
27
|
+
private consumeRetrievalNote;
|
|
17
28
|
/**
|
|
18
29
|
* v1.9(parse17 §2.2 (d) 机制一):action/step dispatch 后的保活 touch。
|
|
19
30
|
*
|
|
@@ -55,6 +66,23 @@ export declare abstract class BrowseChannel extends UiChannel {
|
|
|
55
66
|
* 私有 helper —— INV-6 dispatch Map 不动(仍是 8 条 entry,只 navigate 包一层)。
|
|
56
67
|
*/
|
|
57
68
|
private wrapNavigate;
|
|
69
|
+
/**
|
|
70
|
+
* BUG-08 决议 D-2(doc/bugs/08,2026-09-15):evaluate 的 url 语义定案 =
|
|
71
|
+
* **ensure-navigation(先导导航)**——url 显式传入 = 调用方声明「在这个页上
|
|
72
|
+
* 跑」;与当前页不同(或读不到当前页)→ 先走完整导航链(复用 wrapNavigate
|
|
73
|
+
* 的 Map entry——含 afterNavigate stealth 注入),再原地执行。相同 → 原地
|
|
74
|
+
* 执行零扰动(已导航会话传匹配 url 的存量模式不受影响——cc-control 先例)。
|
|
75
|
+
*
|
|
76
|
+
* 修正面(P1-2):此前 evaluate 不在 NAV_FIRST/FRESH_PAGE_NAV 集——带 url 直
|
|
77
|
+
* 达 doEvaluate 不导航,JS 实际跑在当前页,而 browseSingle 的
|
|
78
|
+
* `partial.final_url ?? effUrl` 兜底**伪造目标 URL**(preview 是当前页、
|
|
79
|
+
* final_url 是目标 URL 的自相矛盾)。修复后 final_url 两路都是真实值:
|
|
80
|
+
* 先导导航的 final_url 或读到的当前 href——伪造路径对 evaluate 永不触发。
|
|
81
|
+
*
|
|
82
|
+
* 与 FRESH_PAGE_NAV(snapshot/extract 的空白门控)差异是有意的:evaluate 是
|
|
83
|
+
* 驱动/变异型 action(非观察型),显式目标就该到达。
|
|
84
|
+
*/
|
|
85
|
+
private wrapEvaluateEnsureNav;
|
|
58
86
|
/**
|
|
59
87
|
* retrieval_method 标签(v0.4 抽出,原本硬编码 "chrome_devtools_mcp")。
|
|
60
88
|
* 子类(BrowserbaseChannel)override 标 "cloud_browserbase";
|
|
@@ -76,6 +104,13 @@ export declare abstract class BrowseChannel extends UiChannel {
|
|
|
76
104
|
* 永不抛异常——所有失败路径走 InteractResult。
|
|
77
105
|
*/
|
|
78
106
|
browse(url: string | undefined, action: string, options: BrowseOptions): Promise<InteractResult<BrowseResult>>;
|
|
107
|
+
/**
|
|
108
|
+
* BUG-08 决议 C:freshProfile 请求的通道能力钩子。
|
|
109
|
+
* 默认 = 拒绝(didnt——策略确定性拒,不 throw 不进熔断;云通道/BrowseChannel
|
|
110
|
+
* 直用者继承此语义)。HeadlessChannel override 执行换脸后返 null(放行);
|
|
111
|
+
* LoggedInChannel override 固定专用错误码(用户真实 Chrome 红线,永不重造)。
|
|
112
|
+
*/
|
|
113
|
+
protected applyFreshProfile(): Promise<InteractResult<BrowseResult> | null>;
|
|
79
114
|
/**
|
|
80
115
|
* BUG-07 决议 A⁺(§5.2②):url 省略 + 非 current-page action(含 steps 链)的
|
|
81
116
|
* 显式拒(与 unknown_action 同族——「策略确定性拒」early-return,不 throw:
|
|
@@ -228,6 +263,27 @@ export declare abstract class BrowseChannel extends UiChannel {
|
|
|
228
263
|
*/
|
|
229
264
|
private persistState;
|
|
230
265
|
}
|
|
266
|
+
/**
|
|
267
|
+
* BUG-08 决议 D-1(doc/bugs/08,2026-09-15):same-document(hash-only)导航
|
|
268
|
+
* 判定——去 hash 后完全相等且完整串不同。marathon 假数据形态的根源检测:
|
|
269
|
+
* SPA 对 hash 路由按 same-document 处理(页面不重新执行查询,结果区留旧数据,
|
|
270
|
+
* URL 已新词——「哒哒=0 条干净」差点写进报告,真值 3718)。
|
|
271
|
+
* 导出供测试。
|
|
272
|
+
*/
|
|
273
|
+
/**
|
|
274
|
+
* BUG-08 对抗复审轮 1(t7 实锤,2026-09-15):same-document 判定 / evaluate
|
|
275
|
+
* 原地判等的 **URL 规范化比较基**。raw 串比较会被「空路径省略斜杠」击穿:
|
|
276
|
+
* 当前页 `http://x/#/q=a`(location.href 恒带规范化斜杠)vs 目标
|
|
277
|
+
* `http://x#/q=b`(调用方少打一个 `/`)——URL 规范化后同一 origin/path/search
|
|
278
|
+
* (same-document),字符串却不等 → D-1 检测漏 → 不补 reload → **旧数据 + 新
|
|
279
|
+
* URL 的假数据形态原样复活**(真机复现:DATA_AT_LOAD 停旧词、final_url 新词、
|
|
280
|
+
* same_document_navigated 缺席)。两侧先过 `new URL()` 取 origin+pathname+
|
|
281
|
+
* search 再比(空路径补 `/`、默认端口消解、host 大小写归一——全部「规范化后
|
|
282
|
+
* 同页」的正确合并方向,不产生假阳性:不同文档规范化后不可能相等);任一侧
|
|
283
|
+
* 解析失败退化 raw 去-hash 串(保守 = 至多回到修复前行为)。
|
|
284
|
+
*/
|
|
285
|
+
export declare function normalizeForSameDocumentCompare(u: string): string;
|
|
286
|
+
export declare function isSameDocumentNavigation(currentHref: string, targetUrl: string): boolean;
|
|
231
287
|
/**
|
|
232
288
|
* E④(BUG-03 决议 E④)+ BUG-04 决议 C1(doc/bugs/04 §7):evaluate 的 js 入参 →
|
|
233
289
|
* 上游 function 参数归一(导出供测试)。
|
|
@@ -288,4 +344,6 @@ export declare function truncatePreviewKeepingRefs(s: string): string;
|
|
|
288
344
|
* doNavigate 消费 → 传入必须出现在 ignored_options(INV-91 精神:禁死键豁免)。
|
|
289
345
|
*/
|
|
290
346
|
export declare function computeIgnoredOptions(action: string, options: BrowseOptions, mode?: "current_page"): string[];
|
|
347
|
+
/** A-3①:命中签名 → `mcp_request_timeout:<原文截断 200>`;否则原文透传(导出供测试)。 */
|
|
348
|
+
export declare function typeMcpRequestTimeout(msg: string): string;
|
|
291
349
|
//# sourceMappingURL=BrowseChannel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowseChannel.d.ts","sourceRoot":"","sources":["../../src/channels/BrowseChannel.ts"],"names":[],"mappings":"AAsCA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,MAAM,EACN,cAAc,EAEf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"BrowseChannel.d.ts","sourceRoot":"","sources":["../../src/channels/BrowseChannel.ts"],"names":[],"mappings":"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"}
|