🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

网页配置档 typosbro/dsh-web-profile

DeepSeek Harness
typosbro12 天前有提交已提供中文文档扫描:含敏感能力

一键装好手机网页界面与浏览器工具链

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/23 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add typosbro/dsh-web-profile
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · browser
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/23) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 28 处,展示前 28 条)
  • 写入本地文件
    bench/run.mjs:89
    writeFileSync(overlayPath, overlayFor(spec));
  • 执行外部命令来自配置/变量
    bench/run.mjs:97
    const child = spawn(cmd[0], cmd.slice(1), { env: process.env, stdio: ['ignore', 'pipe', 'pipe'] });
  • 写入本地文件
    bench/run.mjs:106
    writeFileSync(join(outDir, `${label}.jsonl`), stdout);
  • 写入本地文件
    bench/run.mjs:107
    writeFileSync(join(outDir, `${label}.stderr.txt`), stderr);
  • 写入本地文件
    bench/run.mjs:112
    mkdirSync(outDir, { recursive: true });
  • 写入本地文件
    bench/run.mjs:113
    writeFileSync(join(outDir, 'task.txt'), args.task + '\n');
  • 写入本地文件
    bench/run.mjs:129
    writeFileSync(join(outDir, 'summary.md'), lines.join('\n'));
  • 发起网络请求
    plugins/browser-live/client.js:67
    const response = await fetch(INPUT_URL, {
  • 发起网络请求
    plugins/browser-live/client.js:237
    fetch(STREAM_URL, { method: 'GET', cache: 'no-store' }).then((response) => {
  • 发起网络请求
    plugins/browser-live/index.js:188
    const response = await fetch(cdpHttpEndpoint, { signal: AbortSignal.timeout(probeTimeoutMs) });
  • 读取本地文件
    plugins/playwright-browser/run-playwright-mcp.mjs:36
    const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'));
  • 读取本地文件
    plugins/playwright-browser/run-playwright-mcp.mjs:55
    for (const entry of readdirSync(npxRoot)) candidates.push(join(npxRoot, entry, 'node_modules', ...CLI_SUBPATH));
  • 读取本地文件
    plugins/playwright-browser/run-playwright-mcp.mjs:61
    if (!existsSync(candidate)) continue;
  • 执行外部命令来自配置/变量
    plugins/playwright-browser/run-playwright-mcp.mjs:82
    const child = spawn(process.execPath, [cli, ...process.argv.slice(2)], { stdio: 'inherit', env: process.env });
  • 发起网络请求
    plugins/voice-mode/client.js:1497
    const response = await fetch(SPEAK_URL, {
  • 发起网络请求
    plugins/voice-mode/client.js:1752
    const response = await fetch(url, {
  • 发起网络请求
    plugins/voice-mode/client.js:1919
    const response = await fetch(STATUS_URL, { headers: { Accept: 'application/json' } });
  • 读取本地文件
    plugins/voice-mode/lib/tts.js:285
    const parsed = parseWav(await readFile(wavPath));
  • 删除本地文件递归
    plugins/voice-mode/lib/tts.js:296
    await rm(workdir, { recursive: true, force: true }).catch(() => undefined);
  • 发起网络请求
    plugins/voice-mode/src/app.js:356
    const response = await fetch(SPEAK_URL, {
  • 发起网络请求
    plugins/voice-mode/src/app.js:611
    const response = await fetch(url, {
  • 发起网络请求
    plugins/voice-mode/src/app.js:778
    const response = await fetch(STATUS_URL, { headers: { Accept: 'application/json' } });
  • 发起网络请求
    plugins/web-search/index.js:92
    const response = await fetch(ENDPOINT, {
  • 执行外部命令来自配置/变量
    services/voice-bridge/src/exec.js:20
    child = spawn(command, args, { stdio: ['pipe', 'pipe', 'pipe'], env });
  • 发起网络请求
    services/voice-bridge/src/main.js:182
    const response = await fetch(AGENT_URL, {
  • 发起网络请求
    services/voice-bridge/src/transport.js:116
    const guild = await client.guilds.fetch(config.guildId);
  • 发起网络请求
    services/voice-bridge/src/transport.js:117
    const channel = await guild.channels.fetch(config.voiceChannelId);
  • 删除本地文件递归
    services/voice-bridge/src/tts.js:120
    await rm(tempDir, { recursive: true, force: true }).catch(() => {});
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

可复现的 DeepSeek Harness Web 配置档:手机外壳、PWA、锁定版本的 Playwright 浏览器栈、停止门控钩子

README

由 DeepSeek 最新模型翻译生成
dsh-web-profile 给 DeepSeek Harness(dsh)准备的可复现配置档:网页 GUI、手机尺寸的 shell、可安装的 PWA、锁定版本的 Playwright 浏览器栈,外加一个 stop-gate 钩子——仓库里有 gate 时,它拒绝在「看起来做完了」的时候结束回合。 这就是「一切皆插件」的 harness,按智能体实际运行所需的方式配置好:声明式补丁层、锁定版本、一个能证明组合正确的 doctor,树里不放任何凭据。 快速开始 git clone https://github.com/<you>/dsh-web-profile.git cd dsh-web-profile ./bootstrap.sh # installs dsh 0.2.1-alpha.1, the profile, plugins, hooks dsh web # http://127.0.0.1:3080/ 环境要求:Linux 或 macOS、Node 22+、pnpm(corepack enable)、rsync、python3,以及供浏览器工具使用的系统 Chrome/Chromium。 模型访问是故意不装的。
展开完整文档(README 剩余 1 节)
dsh-web-profile

给 DeepSeek Harness(dsh)准备的可复现配置档:网页 GUI、手机尺寸的 shell、可安装的 PWA、锁定版本的 Playwright 浏览器栈,外加一个 stop-gate 钩子——仓库里有 gate 时,它拒绝在「看起来做完了」的时候结束回合。

这就是「一切皆插件」的 harness,按智能体实际运行所需的方式配置好:声明式补丁层、锁定版本、一个能证明组合正确的 doctor,树里不放任何凭据。

快速开始

git clone https://github.com/<you>/dsh-web-profile.git
cd dsh-web-profile
./bootstrap.sh # installs dsh 0.2.1-alpha.1, the profile, plugins, hooks
dsh web # http://127.0.0.1:3080/

环境要求:Linux 或 macOS、Node 22+、pnpm(corepack enable)、rsync、python3,以及供浏览器工具使用的系统 Chrome/Chromium。

模型访问是故意不装的。走原生路线,就在 ~/.dsh/.env 里设置 DEEPSEEK_API_KEY;或者用 examples/providers.cordis.patch.yml 添加一个 OpenAI 兼容服务商。
见 docs/models.md。

重新运行:FORCE=1 ./bootstrap.sh 会替换配置档,并保留一份带时间戳的备份。
用 ./doctor.sh 验证任何一次安装。

你会得到什么

| 层 | 作用 | 位置 |
| 回环地址跳过鉴权 | 本地 GUI 打开时不用每进程 token;Host/Origin 防护仍然保留 | profiles/web/no-browser-auth.mjs |
| 手机 shell | 侧边栏变成浮层抽屉、设置导航纵向堆叠、动态视口、安全区留白 | profiles/web/mobile-shell/ |
| PWA | 真实的 manifest 和图标,Chrome 会提示安装;不含 service worker | profiles/web/web-pwa/ |
| 浏览器栈 | 锁定 @playwright/mcp 0.0.83、无头 Chrome、给面板用的 CDP 旁路 | plugins/playwright-browser/、plugins/browser-pane/、plugins/browser-live/ |
| Stop gate | 仓库自带的 gate 脚本拦住回合结束,最多拦两次 | hooks/ |
| 权限 | 只读 / 工作区可写 / 完全危险访问三档预设 | profiles/web/cordis.patch.yml |

工具箱

零依赖脚本,外加教智能体何时运行它们的技能:

- scripts/repo-map.mjs —— 按重要度排序、按 token 预算裁剪的仓库地图。目录树告诉你有什么,它告诉你什么重要。
- scripts/context-audit.mjs —— 把常驻上下文开销(AGENTS.md 加技能描述)和按需加载的技能正文分开,找出写了三遍的规则,抓出技能名冲突。
- scripts/wt.sh —— 每个任务一个 git worktree,放在仓库旁边,收尾时跑 gate。
- hooks/stop-gate.sh —— 先跑仓库的 gate,再跑一轮 diff 级审查(examples/agent-review.sh),发现泄露的密钥、冲突标记和 debugger 语句就拦下。
- bench/run.mjs —— 在两条模型路线上跑同一个任务,保留两份对话记录、退出码和耗时。harness 的改动靠测量,不靠争论。
配套技能放在 skills/ 下(repo-map、context-audit、worktree);把这些目录复制或软链接到你的技能根目录。还有哪些事值得做、哪些卡在 harness 版本上,见 docs/improvements.md。

为什么要用配置档

DSH 按分层补丁组合出配置档:先 bundle 层,再 profiles/<name>/cordis.patch.yml,最后是 --patch 覆盖层。这里每加一行都是一次有理由的决策,理由就写在那一行旁边。正因如此,这套配置才可审查,而不是一堆设置:一条配置说不清自己的理由,就删掉。

一句话说清它为什么存在:同一个模型,换个 harness,产出的活就不一样。跑测试的关卡对输出的影响,比调 temperature 旋钮更大;子代理丢掉搜索噪音,对上下文预算的影响,比加长系统提示词更大。见 docs/why-these-rows.md。

本仓库不包含什么

- 凭据、会话、token、浏览器配置档,以及凭据存储。
- 个人技能和记忆文件。briefing 技能作为结构化输出契约的示例收录。
- 作者的 tailnet、中继主机名、SearXNG 实例,以及多账号模型密钥。这些是可选模块,文档在 examples/。

复现,实话实说

bootstrap.sh 锁定 harness 版本和配置档依赖,安装同一层补丁;组合出错时,doctor.sh 会大声报错。无法复现的部分:

- 模型访问(你的密钥、你的服务商、你的配额);
- 宿主机(Chrome 二进制、字体、GPU、显示器);
- 你放在 ~/.dsh 里、不属于本配置档的任何东西(凭据、会话、个人技能)。

确切的保证范围和升级路径,见 docs/replication.md。

License

MIT。它锁定的 Playwright MCP 服务器是 Apache-2.0;DeepSeek Harness 是 MIT。

文档

- docs/why-these-rows.md —— 每条补丁行的决策日志。
- docs/models.md —— 原生、OpenAI 兼容、订阅三种接入方式。
- docs/replication.md —— 哪些有保证、哪些没有、升级路径。
- docs/improvements.md —— 已落地的想法、受阻的插件、下一步。
- docs/upgrading.md —— 迁移到 0.2.1-rc.2,解锁插件生态。
- docs/ideas-from-other-harnesses.md —— 促成这一切的那次调研。
预览分享卡片长什么样 ↓typosbro/dsh-web-profile
分享 · DeepSeek Harness Hub
typosbro/dsh-web-profile

一键装好手机网页界面与浏览器工具链

这是你的仓库?认领条目

回到顶部