@ai-ecoverse/slicc-browsers

中文文档
1.20.3发布于 2026/11/05Apache-2.0ES Module零依赖构建来源已验证近 30 天下载 5.2万

SLICC的共享浏览器目录, JSON 计划与发现符合性

中文使用文档
文档目录17 节
  1. 里面的东西
  2. 安装
  3. 走开
  4. 锈
  5. 无
  6. 目录
  7. 发现
  8. 进程源
  9. SLICC 6 简介
  10. 炸弹
  11. 受保护的起源
  12. 守护向量
  13. 运行他们
  14. 读取结果
  15. 发展
  16. CI和释放
  17. 许可证

扫描器

SLICC工具共享的浏览器知识. SLICC在Chrome DevTools协议(CDP)上驱动一个真正的Chromium浏览器,几个程序用不同语言写成,需要就同样的事实达成一致:

  • 哪些浏览器存在,安装在何处,以及如何为SLICC推出;
  • 如何找到一个已经使用调试端口运行的浏览器,以及选择哪个;
  • 源代码浏览器控制 永远 触摸,从7个自己的来源和金库开始;
  • 如何证明一个CDP的警卫真的让客户远离他们.

这些程序不能共享代码,因此它们共享数据:1个目录,4个测试向量和他们的JSON schemas,作为Go模块,一出Rust箱子和npm包在同一版本发布.

谁用它来
斯莱克-克利 (开始)slicc browsers, (中文(简体) ), slicc launch及其CDP继电器的后卫
切片- cdp (又请按: wasm32-wasip1(中文(简体) )playwright-cli list 财务报告和审定财务报表 open和它的守护
塑料剂拒绝其浏览器工具中受保护的出处
生化剂, (中文(简体) ), 扩展他们的CDP卫士,对卫兵矢量进行测试

里面的东西

文件这是什么
catalog.json每个已知的Chromium浏览器和 Electron app,每个OS安装路径,发现和排名规则,七个发射旗和预告,配置位置和被保护的起源
corpus/, (中文(简体) ), corpus.json发现相符合的情况:每个都有一台假机器,并附有它必须制作的排序浏览器列表
protected.json, (中文(简体) ), protected.mjs保护源测试向量,以及 JavaScript 中的参考匹配器
guard-vectors.json每个守卫都必须通过
debugger-stage1.json共享第一阶段调试器符合性数据
guard-runner.mjs, (中文(简体) ), guard-driver.mjs, (中文(简体) ), fixture-server.mjs守护向量、其助手和测试服务器的参考跑取器
schema/JSON Schema(2020-12年),用于上面的每个文件,以及 --json 产出 slicc browsers 财务报告和审定财务报表 playwright-cli list

安装

走开

go get github.com/ai-ecoverse/slicc-browsers
import sliccbrowsers "github.com/ai-ecoverse/slicc-browsers"

c := sliccbrowsers.Default()
chrome, ok := c.Browser("chrome")
rank := c.Priority("chrome")

文件是嵌入的,因此运行时没有从磁盘读取.

  • Default() 分析一次嵌入式目录,如果它不能,就会惊慌失措,CI排除了这一点; Load() 返回错误,然后 Parse(b) 读取另一个副本.
  • Corpus(), (中文(简体) ), Protected(), (中文(简体) ), Guard() 财务报告和审定财务报表 DebuggerStage1() 返回向量为已键入的结构.
  • CatalogJSON(), (中文(简体) ), CorpusJSON(), (中文(简体) ), ProtectedJSON(), (中文(简体) ), GuardVectorsJSON(), (中文(简体) ), DebuggerStage1JSON() 编辑 …SchemaJSON() 函数返回原始文件.

锈

[dependencies]
slicc-browsers = { version = "1", features = ["serde"] }

[dev-dependencies]
slicc-browsers = { version = "1", features = ["corpus"] }
特性添加
无CATALOG 和计谋 &str 常数,没有依赖性
serde类型 Catalog, (中文(简体) ), catalog(), (中文(简体) ), Catalog::browser 财务报告和审定财务报表 Catalog::priority
corpus向量( e)CORPUS, (中文(简体) ), PROTECTED, (中文(简体) ), GUARD_VECTORS, (中文(简体) ), DEBUGGER_STAGE1)和模块 corpus, (中文(简体) ), protected, (中文(简体) ), guard 财务报告和审定财务报表 debugger_stage1,用于测试

每个功能都用于 wasm32-wasip1保留 corpus 内 [dev-dependencies] 所以它不会释放 建造.

无

npm install @ai-ecoverse/slicc-browsers
import catalog from '@ai-ecoverse/slicc-browsers' with { type: 'json' };
import { protectedOrigins } from '@ai-ecoverse/slicc-browsers/protected.mjs';
导出这是什么
., (中文(简体) ), ./catalog.json, (中文(简体) ), ./corpus.json, (中文(简体) ), ./protected.json, (中文(简体) ), ./guard-vectors.json, (中文(简体) ), ./debugger-stage1.json数据
./schema/<name>.schema.json计划
./protected.mjs保护原生匹配者
./seven.mjsisSevenLabel(seven, label): 是否为 sliccy.ai 主机标签可以是七个实例
./guard-runner, (中文(简体) ), ./guard-driver.mjs守护向量跑者及其助手
./fixture, (中文(简体) ), ./fixture-client测试服务器(仅节点)和远程服务器的客户端

除了别的事 ./fixture 在浏览器和节点中运行. protected.mjs 财务报告和审定财务报表 seven.mjs 输入什么,所以扩展名或服务员可以自行运送文件.

目录

catalog.json 保存程序需要了解的所有浏览器:

  • 浏览器. Chrome, Edge, Brave, Opera, Vivaldi, Arc, Atlas, Dia 及其释放前通道, Chrome for Testing and Chromium, 按优先顺序排列。每个都有它的macOS捆绑,Windows安装了根和注册密钥,Linux 二进制, .desktop ids,平板电脑和 snap names, 及其默认的用户数据 dir.
  • 电子软件:被捆绑的id所已知的应用程序,以及阻断远程调试的应用程序.
  • 排名:有7个制表符的端点先来后去其他运行的端点,再安装Chrome,其他已安装的Chrome浏览器,Electron Apps,以及SLICC 6的配置图后去. 不包括比Chrimium 116更年长的浏览器.
  • 发现数字 : DevToolsActivePort 文件、要探测的端口、进程扫描、以及端点如何命名、正常化和合并.
  • 七号: 哪个 sliccy.ai 主机为7个实例,开关、被禁用特性和配置预示了7个需求的发射.
  • 简介和平台: SLICC 保存其浏览器配置,每个OS的配置 Dirs和注册密钥.
  • 受保护的起源: 见 下级。 。 。 .

目录是 "schema": 1。小释放只添加字段;修改或去除一个字段需要方案2和主要释放。 slicc-cli 不保留自己的浏览器表格:添加或更改浏览器,更改 catalog.json,释放,并打破依赖.

发现

一个程序列出它可以从四个来源附带的浏览器: DevToolsActivePort 已知用户数据 dirs 和 SLICC 配置文件中的文件, --cdp URL,一个端口9222至9229的探针,以及过程列表. 它对端点进行排序,添加它可以发射的已安装浏览器,并打印列表形状为: schema/browsers.schema.json。 。 。 . sLEC-CLI的读取器 描述该输出。 七"的分页只按出处报告,从没有路径,查询或标题.

进程源

进程扫描找到其它开始的浏览器 --remote-debugging-port它写着: ps 关于 Unix 和 Get-CimInstance Win32_Process 在 Windows 上,跳过诸如 node, (中文(简体) ), npx 或外壳,并取出端口和 --user-data-dir 从命令行,即使路径有空格。 有了0号端口,它就能读出端口 DevToolsActivePort。准确的解析规则在 catalog.json是因为 discovery.process {\fn黑体\fs20\shad2\2ah82\3ah20\4ah33\fscx95\3ch592001\be1}和尸体保护官们 {\fn黑体\fs20\shad2\2ah82\3ah20\4ah33\fscx95\3ch592001\be1} process-* 案例。 测试总是伪造过程列表.

SLICC 6 简介

SLICC 6,上一代,发射Chrome在它自己的外形上(browser-coding-agent-chrome 6's profile root,或 SLICC_USER_DATA_DIR) (中文(简体) ). 发现者列出这样的终点,标记它 six: true 并排为后,但 从不自己挑只有明确的请求,例如: slicc --profile six,使用它。 每个操作系统都有根 catalog.json是因为 profiles.six。 。 。 .

炸弹

每个案件 corpus/<case>/ 是假机器 家目录, DevToolsActivePort 文件, 伪造 /json/version 财务报告和审定财务报表 /json/list 答案,一个假进程列表, --cdp URL和已安装的浏览器. expected.json 持有它必须制作的排名列表. case.json是因为 needs 说一个程序必须支持什么来管理案件(process, (中文(简体) ), probe, (中文(简体) ), six, (中文(简体) ), tabs),一个程序跳过无法运行的案例.

对于每个案例,一个测试装置:

  1. 将案件档案写入临时住所;
  2. 指该家庭的发现和案件的环境;
  3. 输入假进程列表,并引导每个 HTTP 请求和 TCP 拨打假程序;
  4. 比较结果与 expected.json。 。 。 .

两所图书馆都为此提供了帮助:

cases, _ := sliccbrowsers.Corpus()
for _, c := range cases {
    if !c.Runs(runtime.GOOS, sliccbrowsers.NeedFlag, sliccbrowsers.NeedProcess) {
        continue
    }
    l := sliccbrowsers.Layout{OS: runtime.GOOS, Home: t.TempDir(), Getenv: func(k string) string { return c.Input.Env[k] }}
    // write c.Files(l); fake c.PSOutput(l, os.Getpid()); use c.Transport() and c.DialContext;
    // compare with c.ExpectedJSON(l)
}
use slicc_browsers::corpus::{corpus, Layout, NEED_PROCESS, NEED_PROFILES};

let cat = slicc_browsers::catalog();
for case in corpus().cases {
    if !case.runs(os, &[NEED_PROFILES, NEED_PROCESS]) {
        continue;
    }
    let env = |k: &str| case.input.env.get(k).cloned();
    let layout = Layout { os, home, env: &env, catalog: &cat };
    // write case.files(&layout); fake case.ps_output(…); answer with case.http_get(…);
    // compare with case.expected(&layout)
}

斯莱克 -克利的 test/integration/corpus_test.go 是一个完整的绳子。 机体从不使用9222到9229等端口,其中开发商自己的克罗姆可能正在监听.

受保护的起源

浏览器控制决不能导航、打开、附加或读取以下的饼干或存储:

  • 七和金库: 每一个 sliccy.ai 在任何端口和计划上的主机,以及 vault.sliccy.ai 名称;
  • 浏览器自己的特权页面数字 : chrome:// 而其他Chromium浏览器的等同, devtools://, (中文(简体) ), chrome-extension:// (密码管理器和钱包所在的地方), file://还有克罗姆自己的UI目标 新的标签页是一个例外;
  • 一个程序的额外七个来源比如slicc -cli的书 --origin。 。 。 .

URL被判断为浏览器如何剖析它们,所以 blob:, (中文(简体) ), view-source: 财务报告和审定财务报表 about: 化名,回鞭,编码的点和全宽字母不能偷偷地通过. 在浏览器装入时, 守护者无法将 URL 计数为受保护 。 打开的标签保存了 7 的出处 about:blank。拒绝的呼叫失败 slicc: refused: target is on seven's origin。 。 。 .

普通页面内的浏览器扩展框架,如密码管理器的自动填充列表,并不能使标签受到保护. 相框本身无法达到:无法被附加或读取,其URL从未出现在目标发现,页面读取,快照,可访问树或评价结果中. 标签的自有页面仍然可以被读取并被快照. 屏幕截图和输入只允许在隐藏每个扩展框时进行(没有布局框或 visibility: hidden),而没有人通过嵌入的文件或阴影根来保持焦点;一个被显示的截图被丢弃. 不透明与位置不计为隐藏. 接受在能见度或焦点检查和CDP回复之间的比赛. 在标签中显示任何扩展框时,拒绝全页抓取并开始屏幕播放。 如果一个屏幕显示器在扩展框出现时已经运行, 守护者会停止它, 或每隔一段时间就会下降 Page.screencastFrame 直至框架消失 Page.startScreencast 在干净的标签上也可以。 这些拒绝指定了扩展框架,而不是7个. 从程序自己的扩展框,以及任何其他被保护的帧,仍然使整个分页被保护. protectedOrigins.extensionFrames 列出计划、方法和拒绝,以及 protected.mjs 提议 extensionFrame(url)。 。 。 .

catalog.json是因为 protectedOrigins 持有规则,和 protected.json 矢量:URL、目标、饼干域和存储键,每个键都有预期的答案. protected.mjs 是参考执行:

import catalog from '@ai-ecoverse/slicc-browsers' with { type: 'json' };
import { protectedOrigins } from '@ai-ecoverse/slicc-browsers/protected.mjs';

const guard = protectedOrigins(catalog.protectedOrigins, ['http://127.0.0.1:5710']);
guard.url('https://seven.sliccy.ai/');
guard.cookieDomain('.sliccy.ai');
guard.target({ url: 'about:blank', opener: 'protected' });

还提供 storageKey(key) 财务报告和审定财务报表 unparseable(text)GO 或 Rust 执行需要一个WhatWG URL解析器,而不是 net/url,而且必须通过每个矢量 protected.json。 。 。 .

守护向量

守护者在代理浏览器工具等CDP客户端和浏览器之间坐相,使客户端远离被保护的出处. guard-vectors.json 对这个承诺进行一百多起攻击,每个警卫必须全部通过。 它们包括导航、重定向链、弹出和帧、请求截取、饼干和存储访问、特权页面、错误页面、外国扩展世界、调试器和仪表技巧,以及会话覆盖会漏入受保护页面.

每个向量运行两次. 这个 控制 运行它与普通的起源, 它必须在那里工作。 这个 守卫 这条腿贯穿着保护目标,必须拒绝或没有任何效果。 A 类 活 动 证明被保护的目标真的在那里 一行只有在三个都通过的时候才能通过,所以一个后卫不能通过打破一切,一个测试也不能通过永远不能到达目标.

当一个向量比较普通和被保护的固定标记时,这些标记并不相互包含. 被保护标记检查仍然检查完整的探测回复,包括出错,以及矢量的客户端事件和消息,包括被编码的值.

警卫可以拒绝每个客户端的导航 about: 继承来源的 URL, 例如 about:blank。拒绝离开受保护页面的普通导航仍然失败.

客户端-出厂控制使用无人看守的观察者;持续的能力拒绝是有效证据,获得的仪器出厂后必须不留任何效果,缺失的答案仍然不完整.

移交审计保留早期快照作为证据。 完整的最后分类账取代了不完整的早期快照,但任何审计中报告的任何转发都仍然是一个失败。 不完整的最后审计仍缺乏证据.

运行他们

参赛者与任何能讲CDP的警卫合作:

import set from '@ai-ecoverse/slicc-browsers/guard-vectors.json' with { type: 'json' };
import { run } from '@ai-ecoverse/slicc-browsers/guard-runner';
import { fixtureServer } from '@ai-ecoverse/slicc-browsers/fixture';

const fixture = await fixtureServer();
const execution = await run(set, {
  clientFactory: (row) => connectGuardAndObserver(row),
  targets: originsFor(fixture),
  capabilities: { autoAttach: true, browserSession: true, browserContexts: true, discovery: true },
  parallel: 4,
  fixture,
});
console.log(execution.summary({ guard: 'my-guard', sha: process.env.GITHUB_SHA }).line);
await fixture.close();

您提供 :

  • 被监视的客户 每行:你的警卫的CPD连接,与 send(method, params, sessionId), (中文(简体) ), waitEvent(predicate, ms) 还有一个 events 阵列;
  • 无人看守的观察员:直接连接同一浏览器的CDP,运行控制并检查活性;
  • 来源:固定服务器可达7个,金库和一个普通站点. 用 Chrome 标出受保护的主机名 --host-resolver-rules因此,没有任何试验 接触真正的7;
  • 能力:你的运输能力。 需要你未声明的一行被跳过 not-supported:<capability>。 。 。 .
能力表示运输可以
autoAttach自动附着到弹出和iframe等儿童目标
browserSession将命令发送到浏览器会话, 不仅发送到页面
browserContexts创建孤立的浏览器背景
discovery报告没有会话的目标创建和更改
chromeUrlsAttach附 录 chrome:// 页面(DevTools端口的CDP; chrome.debugger 无法)
extensionWorld在测试页面上主机为外国扩展的内容脚本
extensionFrame运行带宽, 其框架为普通测试页
clientExit在一行中间关闭守护客户端
siteIsolationOff, (中文(简体) ), inboundDelay, (中文(简体) ), forwardAudit在不与网站隔离的情况下运行, 将浏览器的信息保存到守护者手中, 并审计守护者发送的信息

forwardAudit 允许观察员在客户端历史超时后仅使用终端恢复 historyTrigger: { id: "history-trigger", complete: true, forwarded: false } 证明来自 audit({ historyTrigger: command, probes: [], final: false }),保持探测器分类账的开通;缺失的证明,转发或迟到的答覆均不视为拒绝.

读取结果

每行报告 control, (中文(简体) ), guarded 财务报告和审定财务报表 live 作为 pass, (中文(简体) ), fail, (中文(简体) ), skip, (中文(简体) ), incomplete (测试无法收集自己的证据)或 not-run (仅以文字描述的医生). summary() 将行变为一行:

GUARD-PASS my-guard@1a2b3c4 (vectors @ai-ecoverse/[email protected])

跑道只有在每行都经过而且没有漏掉时才会通过。 跑者永远不会给出一个原因的跳跃,比如编造能力,被报告为伪造,跳出和不完整行被计算在行上,因此行不能过度描述测试过的内容.

要知道什么是矢量检查, 读在 guard-vectors.json: 每一个都列出其步骤,每个观察的 means页:1 live 情况及其预期结果. schema/guard-vectors.schema.json 定义格式.

发展

你需要去1.26, 罗斯稳定与 wasm32-wasip1 目标,节点 24 或以后,以及用于浏览器测试的 Chrome 或 Chromium : 它们使用 CHROME_PATH,或用于测试的色调 npx slicc-cdp install-browser 安装,并运行它无头,除非 CI 设定( e)SLICC_HEADLESS=1 或者说 0 (原始内容存档于2017-03-25). overse.

命令它会做什么
npm run corpus重建 corpus.json 从 corpus/
npm run validate检查每个文件 与它的计划 和规则 一个计划不能表达,运行 protected.json 结束 protected.mjs
npm run lintBiome, 斑块花纹规则, gofmt, (中文(简体) ), go vet linux, macOS 和 Windows, golangci-lint, 用于 Linux, macOS 和 Windows, 用于 Golangci-lint , 用于 Linux , 用于 Golangci-lint , cargo fmt缩写和一个 wasm32-wasip1 检查每个特性
npm test每个文件在 test/integration/:验证,节点,去和鲁斯特测试,以及参照跑者对真正的Chrimium,没有警卫,每个控制都必须通过,每个保护必须失败
npm run buildgO模块,箱子(也用于 wasm32-wasip1),和 npm 软件包

新的发现行为得到一个尸体箱, 新的警卫行为得到一个警卫矢量.

CI和释放

CI为 塑料-共享网络管道,从 .github/workflows/ci.yml。拉动请求被擦出,然后 npm test 然后是克劳德和Codex评论;合并队列运行了林特和再次测试。 测试只在Linux上进行.

每次合并到 main 这说明它通过语义发布 在同一工作流程中,作为一个版本,所有三个软件包。 这个 vX.Y.Z 标签是 Go 发布, npm 通过可信赖的出版获得来源的软件包 。 礛 ci.yml 发布板条箱到板条箱.io, 并发布可信, 并询问 Go 模块代理和 pkg.go.dev 的新标签 。 被推动的标签从不被移动或删除:一个糟糕的发布被下一张固定.

许可证

阿帕奇 - 2.0

版本与发布记录

@ai-ecoverse/slicc-browsers 共发布 89 个版本,首次发布于 2026/10/12;过去 12 个月发布了 89 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.20.3latest2026/11/051 天前
1.20.22026/11/051 天前
1.20.12026/11/051 天前
1.20.02026/11/051 天前
1.19.22026/11/042 天前
1.19.12026/11/042 天前

其他发布通道:release-1.13.x → 1.13.6。

关于 @ai-ecoverse/slicc-browsers 的常见问题

@ai-ecoverse/slicc-browsers 是什么?

SLICC的共享浏览器目录, JSON 计划与发现符合性

如何安装 @ai-ecoverse/slicc-browsers?

在项目目录运行 npm install @ai-ecoverse/slicc-browsers,或使用 pnpm add / yarn add / bun add。

@ai-ecoverse/slicc-browsers 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/ai-ecoverse__slicc-browsers 是否存在。

@ai-ecoverse/slicc-browsers 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@ai-ecoverse/slicc-browsers 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@ai-ecoverse/slicc-browsers 可以商用吗?

@ai-ecoverse/slicc-browsers 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@ai-ecoverse/slicc-browsers 的下载量有多少?

根据 npm 官方下载统计,@ai-ecoverse/slicc-browsers 在 2026/10/05 – 2026/11/03 这 30 天内被下载 51,692 次,日均约 1,723 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@ai-ecoverse/slicc-browsers 还在维护吗?

最新版本 1.20.3 发布于 2026/11/05(1 天前);至今共发布 89 个版本,其中过去 12 个月发布了 89 个;首次发布于 2026/10/12。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。