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

浏览器操控器 ManoloRemiddi/augmentor-dsh-extension-plugin

DeepSeek Harnessv2.2.0
ManoloRemiddi40 天前有提交已提供中文文档扫描:含敏感能力

已归档工作区 — 2026 年 9 月 23 日

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

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

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ManoloRemiddi/augmentor-dsh-extension-plugin
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · browser
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 40 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包augmentor @ 2.2.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 11:46:50

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 49 处,展示前 48 条)
  • 写入剪贴板
    extension/chat-render.js:110
    async function writeClipboard(text) {
  • 写入剪贴板
    extension/chat-render.js:113
    await navigator.clipboard.writeText(text)
  • 写入剪贴板
    extension/chat-render.js:160
    void writeClipboard(text).then((ok) => {
  • 发起网络请求
    extension/panel-api.mjs:555
    fetch(`${base}/api/augmentor`).then(
  • 发起网络请求
    extension/panel-api.mjs:559
    fetch(`${base}/`).then(
  • 发起网络请求
    extension/panel-api.mjs:563
    fetch(`${base}/api/session.list`, {
  • 发起网络请求
    lab/site-shots.mjs:55
    fetch(`${BASE}/api/${method}`, {
  • 执行外部命令固定命令
    lab/site-shots.mjs:76
    chromium = spawn('/usr/lib/chromium/chromium', [
  • 发起网络请求
    lab/site-shots.mjs:88
    const jfetch = async (p, opts) => (await fetch(`http://127.0.0.1:${PORT}${p}`, opts)).json()
  • 读取本地文件
    lab/worktab-test.mjs:37
    src = readFileSync(path.join(path.dirname(fileURLToPath(import.meta.url)), '..', 'extension', 'sw.js'), 'utf8')
  • 读取本地文件
    lab/worktab-test.mjs:129
    vm.runInContext(readFileSync(path.join(here, '..', 'extension', file), 'utf8'), sandbox)
  • 读取本地文件
    pipe.mjs:82
    const m = JSON.parse(readFileSync(path.join(AUGMENTOR_DIR, 'extension', 'manifest.json'), 'utf8'))
  • 读取密钥环境变量
    pipe.mjs:103
    if (process.env.DSH_AUGMENTOR_WS_TOKEN) return { token: process.env.DSH_AUGMENTOR_WS_TOKEN, source: 'env' }
  • 读取本地文件
    pipe.mjs:108
    const existing = readFileSync(file, 'utf8').trim()
  • 读取本地文件
    pipe.mjs:146
    envText = await readFile(path.join(AUGMENTOR_DIR, '.env'), 'utf8')
  • 写入本地文件
    pipe.mjs:170
    await mkdir(TRACE_DIR, { recursive: true, mode: 0o700 })
  • 写入本地文件
    pipe.mjs:174
    try { await chmod(TRACE_DIR, 0o700) } catch { }
  • 写入本地文件
    pipe.mjs:211
    writeFileSync(traceFile, line, { flag: 'a', mode: 0o600 })
  • 发起网络请求
    pipe.mjs:320
    const res = await dshClient.fetch('/api/augmentor', { signal: AbortSignal.timeout(3000) })
  • 发起网络请求
    pipe.mjs:468
    const res = await fetch(url, {
  • 发起网络请求
    pipe.mjs:489
    dshClient.fetch('/api/augmentor', { signal: AbortSignal.timeout(3000) })
  • 发起网络请求
    pipe.mjs:527
    const res = await fetch(url, { signal: AbortSignal.timeout(60000) })
  • 读取本地文件
    pipe.mjs:546
    try { return JSON.parse(readFileSync(path.join(AUGMENTOR_DIR, 'package.json'), 'utf8')) } catch { return {} }
  • 删除本地文件递归
    pipe.mjs:552
    if (rel.some((r) => r === dir || r.startsWith(dir + '/'))) rmSync(path.join(AUGMENTOR_DIR, dir), { recursive: true, force: true })
  • 写入本地文件
    pipe.mjs:564
    mkdirSync(path.dirname(target), { recursive: true })
  • 写入本地文件
    pipe.mjs:569
    writeFileSync(tmp, data)
  • 写入本地文件
    pipe.mjs:570
    renameSync(tmp, target)
  • 发起网络请求
    pipe.mjs:634
    const res = await dshClient.fetch('/api/augmentor', { signal: AbortSignal.timeout(3000) })
  • 读取本地文件
    plugin/dist/index.js:113
    const existing2 = readFileSync(file, "utf8").trim();
  • 读取本地文件
    plugin/dist/index.js:148
    const p = JSON.parse(readFileSync(new URL("../package.json", here), "utf8"));
  • 写入本地文件
    plugin/dist/index.js:196
    mkdirSync(chatDirRaw, { recursive: true });
  • 读取本地文件
    plugin/dist/index.js:214
    const pkg = JSON.parse(readFileSync(path.join(dir, "package.json"), "utf8"));
  • 读取本地文件
    plugin/dist/index.js:223
    const pkg = JSON.parse(readFileSync(path.join(dir, "node_modules", "dsh-augmentor", "package.json"), "utf8"));
  • 读取本地文件
    plugin/dist/index.js:232
    names = readdirSync(path.join(home, "profiles"));
  • 执行外部命令固定命令
    plugin/dist/index.js:274
    const child = spawn("dsh", ["plugin", "--profile", found.name, "add", `dsh-augmentor@${version}`], {
  • 删除本地文件递归
    plugin/dist/index.js:377
    rmSync(loc.path, { recursive: true, force: true });
  • 读取本地文件
    plugin/src/index.ts:172
    const existing = readFileSync(file, 'utf8').trim()
  • 读取本地文件
    plugin/src/index.ts:215
    const p = JSON.parse(readFileSync(new URL('../package.json', here), 'utf8'))
  • 写入本地文件
    plugin/src/index.ts:401
    mkdirSync(chatDirRaw, { recursive: true })
  • 读取本地文件
    plugin/src/index.ts:444
    const pkg = JSON.parse(readFileSync(path.join(dir, 'package.json'), 'utf8'))
  • 读取本地文件
    plugin/src/index.ts:455
    const pkg = JSON.parse(readFileSync(path.join(dir, 'node_modules', 'dsh-augmentor', 'package.json'), 'utf8'))
  • 读取本地文件
    plugin/src/index.ts:470
    names = readdirSync(path.join(home, 'profiles'))
  • 执行外部命令固定命令
    plugin/src/index.ts:517
    const child = spawn('dsh', ['plugin', '--profile', found.name, 'add', `dsh-augmentor@${version}`], {
  • 删除本地文件递归
    plugin/src/index.ts:629
    rmSync(loc.path, { recursive: true, force: true })
  • 发起网络请求
    shared/dsh-auth.mjs:19
    const request = (route, options = {}) => fetch(`${origin.origin}${route}`, {
  • 发起网络请求
    shared/dsh-auth.mjs:54
    async fetch(route, options = {}) {
  • 发起网络请求
    shared/dsh-remote.mjs:18
    const response = await client.fetch(`/api/${endpoint}`, {
  • 发起网络请求
    shared/dsh-remote.mjs:131
    const [catalog, response] = await Promise.all([invoke('session/modelCatalog'), client.fetch('/api/augmentor')])
扫描于 2026/11/3(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

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

已归档的独立 Browser 与历史版本。当前 Desktop + Browser 项目见 ManoloRemiddi/augmentor-agent。

README

由 DeepSeek 最新模型翻译生成
已归档工作区 — 2026 年 9 月 23 日 这里是已归档的独立 Browser 仓库。唯一活跃的 Augmentor Desktop + Browser 仓库是 ManoloRemiddi/augmentor-agent,默认分支为 main。 当前源码、issue、pull request 和后续版本都在那边。 这里保留已有的历史、许可证和版本下载。 不要把这个检出重新指向活跃的公开 origin,也不要合并它的历史。 保留本地改动,只把经过隐私审查的选定改动移植到全新的规范分支上。 下面那些较早的开发方向已是历史。 见仓库地图与保留的工作。 Augmentor,由 DSH 驱动 Augmentor 能把任意 DeepSeek Harness(DSH)网页会话变成浏览器操作员:Chrome 侧边栏与你的 DSH 应用聊天,智能体则驱动你真实的浏览器——实时无障碍快照、点击、输入、切换标签页——用户能看着每个动作在真实页面上闪动。聊天就是真实 DSH 会话,存放在专用目录里,点 Save 会把当前聊天挂到某个 DSH 工作区。
展开完整文档(README 剩余 1 节)
已归档工作区 — 2026 年 9 月 23 日

这里是已归档的独立 Browser 仓库。唯一活跃的 Augmentor Desktop + Browser 仓库是 ManoloRemiddi/augmentor-agent,默认分支为 main。
当前源码、issue、pull request 和后续版本都在那边。
这里保留已有的历史、许可证和版本下载。
不要把这个检出重新指向活跃的公开 origin,也不要合并它的历史。
保留本地改动,只把经过隐私审查的选定改动移植到全新的规范分支上。
下面那些较早的开发方向已是历史。
见仓库地图与保留的工作。

Augmentor,由 DSH 驱动

Augmentor 能把任意 DeepSeek Harness(DSH)网页会话变成浏览器操作员:Chrome 侧边栏与你的 DSH 应用聊天,智能体则驱动你真实的浏览器——实时无障碍快照、点击、输入、切换标签页——用户能看着每个动作在真实页面上闪动。聊天就是真实 DSH 会话,存放在专用目录里,点 Save 会把当前聊天挂到某个 DSH 工作区。

┌─ Chromium (MV3 extension) ─────────────────┐ ┌─ Your machine ─────────────────────────────────────────────┐
│ side panel: chat UI (real DSH sessions) │ │ pipe.mjs — native messaging host (Node, loopback) │ │ sw.js: native port + browser executor + │ │ ├─[POST /api/<namespace>/<method>]──────────────▶ running DSH app │ │ work-tab injection (page veil, overlays) │ │ ├─[WS /api/remote.mux]◀───────── downlink frames │ └──────────────┬─────────────────────────────┘ │ └─[WS <wsPath, from handshake>]──────▶ dsh-augmentor plugin│ │ native messaging (token-gated) │ /api handshake + pipe channel + browser tools + │ └────────────────────────────────▶│ chat lifecycle (save-to-workspace) │ └────────────────────────────────────────────────────────────┘

没有 sidecar 运行时,也没有第二个 DSH 进程:扩展直接通过 DSH 应用自带的 /api 接口与正在运行的 DSH 应用通信(pipe 是浏览器侧的 loopback 替身客户端,因为扩展的 Origin 会被 DSH 信任围栏拒绝——这是有意为之)。

组件

| path | what it is |
| extension/ | MV3 Chrome 扩展:侧边栏聊天、service worker(native port + 浏览器执行器)、页面遮罩、work-tab 浮层、主题 token |
| pipe.mjs | native messaging host:通往 DSH 应用 /api 接口的 loopback 桥、下行链路、插件通道 |
| plugin/ | dsh-augmentor DSH 插件(npm 包 + git bundle):/api/augmentor 握手、pipe WS 通道、browser_ 工具、聊天生命周期 |
| wire.mjs | 共享的 wire 原语(帧编解码器 + pending 表),三个运行时都用它——一份实现,三个使用方 |
| install-native-host.sh | 安装 Chromium 原生消息主机清单 + 每台机器的通道 token |
| test/ | e2e 测试套件(m3、sw、panel、chrome、m2、tools)+ install-proof.mjs(确定性的全新用户安装验证)+ plugin/tests/boot/ |
| PROPOSAL-plugin-architecture.md | 架构记录:里程碑 M1–M4、审计发现 S/D/F、决策 |

DSH 兼容性

Augmentor 0.1.32 面向 DSH 0.1.5-rc.1 及其带认证的 Typert API。升级时请把插件、原生主机和扩展一起升级。Augmentor 0.1.31 及更早版本无法配合这个 DSH 版本使用:它们的 SDK 依赖、HTTP 方法名、认证和事件流都早于新 API。

安装本版本后,要更新已有安装:

npm install -g @deepseek-ai/dsh@0.1.5-rc.1
./install-native-host.sh <extension-id>
dsh plugin --profile web add <absolute-path-to-this-repo>/plugin

重启 DSH,并在 chrome://extensions 重新加载 Augmentor。走 npm 插件路径的话,用 dsh plugin --profile web add dsh-augmentor@0.1.32 从 npm 安装。安装脚本会协调依赖,在缺失时安装 Augmentor 预设,并在把旧预设的 persona text 设置重命名为 prefix 之前先备份。自定义的 DSH_HOME 必须对 DSH、安装脚本和浏览器/原生主机保持一致。

桥接层通过本地端点交换 DSH 的启动 token,该端点由 Augmentor 现有的 action-channel 密钥保护。它的会话 cookie 始终留在原生主机内。不需要扩展的 cookie 权限,也不需要关闭 DSH 认证。

安装

已在 Linux + Chromium、Node.js 22.19+ 或 24+、DSH 0.1.5-rc.1 上测试通过。

1. 安装/更新 DSH:npm install -g @deepseek-ai/dsh@0.1.5-rc.1。
2. 下载 Augmentor 0.1.32 ZIP,把整个 augmentor-0.1.32 文件夹解压到一个固定位置。里面包含插件、扩展、原生主机和预设。所有文件要放在一起。
源码方式:git clone --branch v0.1.32 https://github.com/ManoloRemiddi/augmentor-dsh-extension-plugin.git。
3. 打开 chrome://extensions,启用 开发者模式,选择 加载已解压的扩展程序,选中解压文件夹里的 extension/,然后复制扩展 ID。
4. 在解压文件夹里,用这个 ID 运行 sh install-native-host.sh EXTENSION_ID "$HOME/.config/chromium"。第二个参数是浏览器的用户数据根目录,不是 Default。
其他 Linux 默认路径:Chrome ~/.config/google-chrome,Edge ~/.config/microsoft-edge,Brave ~/.config/BraveSoftware/Brave-Browser。其他平台尚未验证;这些 shell 命令不是 Windows 安装程序。
5. 在同一个文件夹里,运行 dsh plugin --profile web add "$PWD/plugin"。
也可以安装 dsh plugin --profile web add dsh-augmentor@0.1.32。
选一种方式即可;如果你的应用实际配置档不是 web,就换成实际的配置档。
锁定 npm 版本,可以避免 release-age 过滤选中更旧的版本。
6. 重启现有的 DSH 进程/服务,或者用 dsh web 启动一个新实例。
打开 DSH 打印出来的完整本地 URL,要带上认证 token。
只写 http://127.0.0.1:3080/ 可能会显示「dsh web authentication required」。
这一步只是让浏览器在你自己的电脑上通过 DSH 认证,不需要 DeepSeek 账号,也不需要审批。重启 Chromium,打开侧边栏,用已配置的模型测试一条提示词。/api/augmentor 应该报告 0.1.32 和 pipes: 1。

从 0.1.31 或更早版本升级时,如果旧面板连不上,就按这些手动步骤操作。先备份旧文件夹,更新全部三个组件,再重新运行安装程序。更新已有的已链接插件目录,不要新增重复项。如果自定义了 DSH_HOME,要让 DSH、安装程序和浏览器/原生宿主保持一致。安装程序会保留自定义预设,并在迁移前备份旧设置。

DSH 和已配置的本地模型安装完成后可以离线工作。云端模型需要对应服务商的凭据和网络。访问在线页面同样需要网络。

可选:Model Picker Augmented

Model Picker Augmented 1.1.2
支持 DSH 0.1.5-rc.1,并修复了 settings 加载器未定义的错误。它增加了搜索、固定和可见性控制;Augmentor 与它共用模型策展。安装 GitHub 包(这个配套插件没有发布到 npm):

dsh plugin --profile web add https://github.com/ManoloRemiddi/dsh-model-picker-augmented/releases/download/v1.1.2/dsh-model-picker-augmented-1.1.2.tgz

重启 DSH 并重新加载页面。如果已有链接的 Git checkout,就把它更新到标签 v1.1.2,不要新增另一个插件条目。

安全姿态

- DSH 的信任围栏正是管道存在的原因——它没有被绕过。 DSH 应用的 /api 会拒绝来自外部浏览器源的请求(按设计,也包括扩展的 chrome-extension:// 源)。pipe.mjs 是一个回环替代客户端:它以用户身份在本地运行,通过 127.0.0.1 与应用通信,而这正是围栏允许的。
- 没有新增远程暴露面。 每一跳都是回环(扩展 ↔ 管道走原生消息,管道 ↔ 应用走 127.0.0.1);这套栈新增的任何东西都无法从其他主机访问。
信任边界是本地操作系统用户:任何已经能读取你主目录的东西,这套栈都拦不住(而且它本来就能直接对应用做同样的事)。
- 动作通道有密钥门禁。 browser_ 命令通过
- 插件用来认证的 WS 通道,凭据是每台机器一个 token ($DSH_HOME/augmentor-ws-token,权限 0600,由安装器或首次启动时创建;若配置了 actionToken,以它为准)。管道在 WS 握手头里带上这个 token,插件用恒定时间比较;本地进程拿不到这个文件,就驱动不了你的浏览器。
- 面板里的「Trust-fence probe」(≣ Sessions → Probe)是个诊断功能,用来展示围栏按设计生效(来自扩展源的请求被拒绝,回环请求被接受)。它只做探测,不做绕过。

Development

full e2e battery (six suites) — run from the repo root:
cd test && node m3-e2e.mjs && node sw-e2e.mjs && node panel-e2e.mjs \
&& node chrome-e2e.mjs && node m2-e2e.mjs && node tools-e2e.mjs

plugin boot test:
sh plugin/tests/boot/run.sh

这些测试套件是封闭的:每个套件自己创建标记会话(清理时归档),绝不碰用户会话;涉及真实浏览器的套件(m3、chrome、m2)跑在真实的本地 DSH 应用 + 真实 Chrome 配置档上。

deterministic install proof — the documented journey, end to end, on a fresh DSH home + fresh Chromium profile (never touches your real ~/.dsh):
node test/install-proof.mjs # clone → boot → plugin → ext → NMH → pipes:1
PROOF_LLM=1 node test/install-proof.mjs # + a real agent drives the headless browser
PROOF_SOURCE=npm PROOF_LLM=1 node test/install-proof.mjs # npm plugin path (once published)
knobs: PROOF_REPO, CHROME_BIN, PROOF_PORT, PROOF_KEEP=1 — see the script header.

License

MIT.

共享提示词库(本地开发更新)

打开 Settings 齿轮进入 DSH。选择 Settings → Prompt library,可以创建、编辑、重命名或删除可复用的提示词。在输入框里输入 / 按快捷名筛选。方向键选择,Enter/Tab 插入草稿,Escape 关闭。插入后不会自动发送。

在 DSH web 配置档里安装独立的 dsh-prompt-library 插件。原生管道的 augmentor/prompts 方法只通过现有 DSH API 读取它的 prompt-library 设置命名空间。Augmentor 的两个界面都用这份目录;本地存储和编辑器归 DSH 管。如果之前有本地 JSON 库,插件会导入一次。扩展不再使用单独的 Python 提示词存储。这次开发更新后,重新加载一次未打包的扩展。
预览分享卡片长什么样 ↓ManoloRemiddi/augmentor-dsh-extension-plugin
分享 · DeepSeek Harness Hub
ManoloRemiddi/augmentor-dsh-extension-plugin

已归档工作区 — 2026 年 9 月 23 日

回到顶部