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

密钥防漏气囊 uwu9039/dsh-airbag

DeepSeek 客户端
uwu903912 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

呱来点人口牙...再也不会误把api key粘贴喂给ai了!!!可自定义的安全等级与安全措施,解决容易泄漏api…

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

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

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/uwu9039/dsh-airbag.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 24 处,展示前 24 条)
  • 发起网络请求
    src/client/api.ts:103
    const res = await fetch(`${this.base}${path}`, { headers: { accept: 'application/json' } })
  • 发起网络请求
    src/client/api.ts:109
    const res = await fetch(`${this.base}${path}`, {
  • 发起网络请求
    src/client/api.ts:119
    const res = await fetch(`${this.base}${path}`, {
  • 发起网络请求
    src/client/api.ts:129
    const res = await fetch(`${this.base}${path}`, { method: 'DELETE' })
  • 写入剪贴板
    src/client/paste-guard.ts:206
    void navigator.clipboard?.writeText(`[REDACTED:${match.rule.label}]`).catch(() => {})
  • 读取本地文件
    src/config.ts:162
    const info = await stat(this.configPath).catch(() => null)
  • 读取本地文件
    src/config.ts:166
    if (existsSync(this.configPath)) {
  • 读取本地文件
    src/config.ts:167
    const text = await readFile(this.configPath, 'utf8').catch(() => null)
  • 写入本地文件
    src/config.ts:184
    await writeFile(this.configPath, `${JSON.stringify(normalized, null, 2)}\n`, 'utf8')
  • 读取本地文件
    src/config.ts:186
    this.cachedMtimeMs = await stat(this.configPath).then((s) => s.mtimeMs).catch(() => 0)
  • 读取本地文件
    src/config.ts:203
    if (!existsSync(this.rulesPath)) return ''
  • 读取本地文件
    src/config.ts:204
    return readFile(this.rulesPath, 'utf8').catch(() => '')
  • 写入本地文件
    src/config.ts:210
    await writeFile(this.rulesPath, content, 'utf8')
  • 读取本地文件
    src/index.ts:102
    const info = await stat(root).catch(() => null)
  • 读取本地文件
    src/scan.ts:39
    const info = await stat(path)
  • 读取本地文件
    src/scan.ts:53
    entries = await readdir(current, { withFileTypes: true })
  • 读取本地文件
    src/scan.ts:107
    const gitText = await readFile(gitConfig, 'utf8').catch(() => '')
  • 读取本地文件
    src/scan.ts:123
    const info = await stat(file).catch(() => null)
  • 读取本地文件
    src/scan.ts:125
    const content = await readFile(file, 'utf8').catch(() => '')
  • 写入本地文件
    src/store.ts:46
    await mkdir(this.dir, { recursive: true })
  • 写入本地文件
    src/store.ts:52
    await appendFile(this.eventsFile, `${JSON.stringify(event)}\n`, 'utf8')
  • 读取本地文件
    src/store.ts:59
    const text = await readFile(this.eventsFile, 'utf8').catch(() => '')
  • 删除本地文件
    src/store.ts:81
    if (existsSync(this.eventsFile)) await rm(this.eventsFile)
  • 读取本地文件
    src/store.ts:81
    if (existsSync(this.eventsFile)) await rm(this.eventsFile)
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 拦截粘贴的API密钥
  • 拦截写入的API密钥
  • 记录泄露事件
展开完整介绍(78 字)↓

呱来点人口牙...再也不会误把api key粘贴喂给ai了!!!可自定义的安全等级与安全措施,解决容易泄漏api key的底层问题。同时有报告记录可查!!!

README

由 DeepSeek 最新模型翻译生成
dsh-airbag Non-intrusive safety belt for DeepSeek Harness: blocks API keys pasted to the agent, tracks leak events, blocks secret writes, and offers a first-run workspace health scan. DeepSeek Harness 的非侵入式安全护栏:拦截粘贴给 Agent 的 API 密钥、追踪泄露事件、拦截密钥写入,并提供首次工作区安全体检。 Features - Paste guard (A1) — pasting a secret (DeepSeek / OpenAI / Anthropic keys, AWS, GitHub PATs, JWT, PEM private-key blocks, Aliyun / Tencent Cloud AccessKeys, and 45+ built-in patterns) into the composer is blocked, redacted, or warned per your settings. The decision happens synchronously inside the paste event; nothing is ever
展开完整文档(README 剩余 1 节)
dsh-airbag

Non-intrusive safety belt for DeepSeek Harness: blocks API keys pasted to the agent, tracks leak events, blocks secret writes, and offers a first-run workspace health scan.

DeepSeek Harness 的非侵入式安全护栏:拦截粘贴给 Agent 的 API 密钥、追踪泄露事件、拦截密钥写入,并提供首次工作区安全体检。

Features

- Paste guard (A1) — pasting a secret (DeepSeek / OpenAI / Anthropic keys, AWS, GitHub PATs, JWT, PEM private-key blocks, Aliyun / Tencent Cloud AccessKeys, and 45+ built-in patterns) into the composer is blocked, redacted, or warned per your settings. The decision happens synchronously inside the paste event; nothing is ever sent to the model.
- Write guard (A2) — model write-direction tool calls (write / edit / bash / run_code) whose arguments carry a secret are denied (hard block) or routed through the native approval seam (ask) — the confirmation stays in the harness UI, never a bypass.
- Approval-fatigue insights (B) — a passive observer on the native approval waterfall: it never decides, but it measures asked→decided timing and flags blind approvals (granted in under 2s — rubber-stamping) and fatigue episodes (30 minutes of dense, near-universal grants). Insights land in the event feed as ordinary records.
- Corner notification center (G1) — four non-intrusive levels: L0 silent, L1 badge only, L2 corner toast (auto-dismisses, no sound, no focus steal), L3 persistent badge. Events collapse under the same 5-minute window; a global do-not-disturb switch hides everything.
- First-run health scan (G6) — read-only scan of a workspace for .env files, credential files, embedded secrets, and git remote credentials. Reports masked fragments only.
- Privacy by construction — plaintext secrets never touch disk, logs, or telemetry: only masked fragments (sk-0*cdef) and SHA-256 prefixes are persisted, under ~/.dsh/airbag/.

Install

Pick any of the three methods below, then restart DSH Web. A 🛡️ Airbag button appears in the bottom-right corner (with a badge on first run — that's the health-scan invitation).

Method 1: From npm (recommended)

dsh plugin --profile web add dsh-airbag

Method 2: From a tarball

Download dsh-airbag-0.4.2.tgz from the GitHub Release page (or generate it yourself with npm pack dsh-airbag), then:

dsh plugin --profile web add ./dsh-airbag-0.4.2.tgz

You can also point add directly at the release asset (identical content to the npm package):

dsh plugin --profile web add https://github.com/uwu9039/dsh-airbag/releases/download/v0.4.2/dsh-airbag-0.4.2.tgz

Method 3: From GitHub

dsh plugin --profile web add github:uwu9039/dsh-airbag#<commit-sha>

A GitHub install fetches source, not built artifacts: pnpm runs the prepare script (tsdown) to build on install. pnpm ≥10 refuses to run a git dependency's build script until it is explicitly allowed, so the first add fails — add the package to the profile's pnpm-workspace.yaml first, then re-run the command above:

at ~/.dsh/profiles/<profile>/pnpm-workspace.yaml
allowBuilds:
dsh-airbag: true

To uninstall: dsh plugin --profile web remove dsh-airbag.

Usage

Click the 🛡️ button to open the panel with three tabs:

| Tab | What it does |
| 拦截记录 (Events) | Today's interceptions: time, category, action, masked fragment; clear history |
| 体检 (Scan) | Enter a workspace path and run the read-only health scan |
| 设置 (Settings) | Default action (block/redact/warn), per-event notice levels (L0–L4), do-not-disturb, sound, whitelist, custom regex rules (rules.yaml) |

All notice levels and dispositions are configured only in the settings tab — notifications never offer in-place toggles.

Custom rules live in ~/.dsh/airbag/rules.yaml (YAML list):

- pattern: 'INT_[A-Z0-9]{12}'
label: 内网 Token action: block severity: high notice: 3

Configuration

The plugin accepts a config block in your cordis.yml row (all optional):

- id: airbag
name: dsh-airbag
config:
dataDir: ~/.dsh/airbag # where events/config/rules live
defaultAction: block # block | redact | warn
maxPasteBytes: 10240 # max pasted bytes scanned
maxScanFileBytes: 262144 # per-file scan cap
maxScanFiles: 200 # files content-scanned per health scan

Development

Requirements: Node.js ^22.19 || >=24, pnpm.

pnpm install
pnpm run typecheck
pnpm test
pnpm run build
pnpm pack # produces dsh-airbag-0.4.2.tgz

Smoke-test a local checkout:

pnpm run build
dsh plugin --profile web add ./dsh-airbag-0.4.2.tgz
dsh --profile web

Architecture

src/index.ts Host plugin entry: event store, settings file, scan, A2 write guard, HTTP API
src/rules.ts Pure secret-detection engine (45+ built-in patterns, custom rules, whitelist)
src/store.ts Append-only JSONL event store
src/config.ts Deployment Config schema + user settings file (config.json / rules.yaml)
src/scan.ts Read-only workspace health scan
src/write-guard.ts A2 write-direction decision engine (pre-execute payload scanning)
src/approval-insight.ts B approval-fatigue observer (blind-burst / fatigue detection, pure logic)
src/routes.ts /dsh-airbag/api/ HTTP routes (web profiles only, via ctx.inject(['webServer']))
src/client/index.ts Web client entry: mounts paste guard + notification center + panel
src/client/paste-guard.ts A1 paste interception (composer-scoped, synchronous decision)
src/client/notify.ts G1 corner notification center (4 levels, aggregation, DND)
src/client/panel.ts Panel UI (events / scan / settings)

The host communicates with the browser half through the same-origin /dsh-airbag/api/ routes — no extra RPC surface. The A2 write guard listens on the official tools/pre-execute waterfall and returns deny / ask decisions; the browser half polls the event API every 30s so host-side interceptions surface as badge updates.

Non-goals

- Reading-direction redaction is intentionally left to dsh-guardian.
- The write time-machine (C — pre-write snapshots and one-click rollback) is planned for a later milestone.
- The plugin never replaces the native approval seam — every decision stays with you.

License

MIT
预览分享卡片长什么样 ↓uwu9039/dsh-airbag
分享 · DeepSeek Harness Hub
uwu9039/dsh-airbag

呱来点人口牙...再也不会误把api key粘贴喂给ai了!!!可自定义的安全等级与安全措施,解决容易泄漏api…

回到顶部