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

插件台账 ZSeven-W/dsh-harbor

DeepSeek Harnessv0.1.0-rc.4
ZSeven-W4 天前有提交已提供中文文档扫描:含敏感能力

给本机已安装 DeepSeek Harness 插件的一本证据优先事实台账。

44.1/100
综合分
25
GitHub 星标
207
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @zseven-w/dsh-harbor
npm 源 · @zseven-w/dsh-harbor 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

✓npm 包@zseven-w/dsh-harbor @ 0.1.0-rc.4
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

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

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

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

可执行外部命令读写/删除本地文件
查看扫描证据(共 46 处,展示前 43 条)
  • 读取本地文件
    src/hub/freshness.mjs:42
    try { handle = await opendir(dir); }
  • 读取本地文件
    src/hub/freshness.mjs:75
    before = await lstat(join(rootDir, rel));
  • 读取本地文件
    src/hub/freshness.mjs:169
    before = await lstat(path);
  • 执行外部命令来自配置/变量
    src/hub/preflight-job.mjs:59
    child = spawnImpl ? spawnImpl(nodeBin, args, spawnOptions) : spawnProcess(nodeBin, args, spawnOptions);
  • 读取本地文件
    src/preflight/host.mjs:72
    if (existsSync(posix)) return posix;
  • 读取本地文件
    src/preflight/host.mjs:73
    if (existsSync(win32)) return win32;
  • 删除本地文件递归
    src/preflight/host.mjs:106
    rmSync(prefix, { recursive: true, force: true });
  • 写入本地文件
    src/preflight/host.mjs:107
    mkdirSync(prefix, { recursive: true });
  • 执行外部命令来自配置/变量
    src/preflight/host.mjs:123
    const child = spawnImpl ? spawnImpl(npm, args, spawnOptions) : spawnProcess(npm, args, spawnOptions);
  • 写入本地文件
    src/preflight/host.mjs:144
    writeFileSync(join(prefix, COMPLETE_MARKER), `${JSON.stringify({ version, installedAt }, null, 2)}\n`);
  • 读取本地文件
    src/preflight/host.mjs:150
    if (!existsSync(root)) return [];
  • 读取本地文件
    src/preflight/host.mjs:152
    for (const entry of readdirSync(root, { withFileTypes: true })) {
  • 读取本地文件
    src/preflight/host.mjs:170
    for (const entry of readdirSync(treeDir, { withFileTypes: true })) {
  • 读取本地文件
    src/preflight/host.mjs:185
    if (!existsSync(dir)) return [];
  • 读取本地文件
    src/scan/discover.mjs:25
    const stat = lstatSync(path);
  • 读取本地文件
    src/scan/discover.mjs:99
    const stat = lstatSync(path);
  • 读取本地文件
    src/scan/discover.mjs:196
    if (!existsSync(root)) return [];
  • 读取本地文件
    src/scan/discover.mjs:198
    for (const profile of readdirSync(root).sort()) {
  • 读取本地文件
    src/scan/discover.mjs:207
    if (!existsSync(linkPath)) return;
  • 读取本地文件
    src/scan/inspect.mjs:49
    try { return lstatSync(path).isDirectory(); } catch { return false; }
  • 读取本地文件
    src/scan/inspect.mjs:73
    try { entries = readdirSync(nested, { withFileTypes: true }); } catch { return []; }
  • 读取本地文件
    src/scan/inspect.mjs:78
    const stat = lstatSync(packagePath);
  • 读取本地文件
    src/scan/inspect.mjs:124
    const patchStat = lstatSync(patchPath);
  • 读取本地文件
    src/scan/snapshot.mjs:78
    if (!existsSync(path)) return { scannedAt: null, byKey: new Map(), warning: null };
  • 读取本地文件
    src/scan/snapshot.mjs:81
    data = JSON.parse(readFileSync(path, 'utf8'));
  • 写入本地文件
    src/scan/snapshot.mjs:259
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    src/scan/snapshot.mjs:260
    writeFileSync(join(dir, SNAPSHOT_FILE), JSON.stringify({
  • 读取本地文件
    src/scan/versions.mjs:158
    if (!existsSync(path)) continue;
  • 读取本地文件
    src/scan/versions.mjs:160
    try { text = readFileSync(path, 'utf8'); } catch { continue; }
  • 读取本地文件
    src/scan/versions.mjs:172
    const value = JSON.parse(readFileSync(join(dir, CACHE_FILE), 'utf8'));
  • 写入本地文件
    src/scan/versions.mjs:181
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    src/scan/versions.mjs:182
    writeFileSync(join(dir, CACHE_FILE), JSON.stringify(cache, null, 2) + '\n');
  • 执行外部命令来自配置/变量
    src/preflight/host-diff.mjs:25
    const child = spawnImpl ? spawnImpl(nodeBin, args, options) : spawnProcess(nodeBin, args, options);
  • 读取本地文件
    src/preflight/checks.mjs:72
    if (!existsSync(entry)) return { status: 'fail', code: 'ENTRY_MISSING', message: `entry not found: ${entry}`, entry, resolved: [] };
  • 执行外部命令来自配置/变量
    src/preflight/checks.mjs:91
    child = spawnImpl ? spawnImpl(nodeBin, args, spawnOptions) : spawnProcess(nodeBin, args, spawnOptions);
  • 执行外部命令来自配置/变量
    src/preflight/pack.mjs:20
    const child = spawnImpl ? spawnImpl(cmd, args, options) : spawnProcess(cmd, args, options);
  • 删除本地文件递归
    src/preflight/pack.mjs:60
    rmSync(dir, { recursive: true, force: true });
  • 写入本地文件
    src/preflight/pack.mjs:61
    mkdirSync(dir, { recursive: true });
  • 读取本地文件
    src/preflight/pack.mjs:64
    const tarball = readdirSync(dir).find((name) => name.endsWith('.tgz'));
  • 写入本地文件
    src/preflight/pack.mjs:67
    mkdirSync(extract, { recursive: true });
  • 写入本地文件
    src/preflight/pack.mjs:87
    mkdirSync(join(pkgDir, '..'), { recursive: true });
  • 读取本地文件
    src/scan/evidence.mjs:216
    try { stat = lstatSync(path); }
  • 读取本地文件
    src/scan/evidence.mjs:266
    const before = lstatSync(file.path);
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

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

界面预览

2 张 · 点击查看大图

功能亮点

  • 只读插件台账
  • 声明与实测对账
  • 跨配置档版本漂移
v0.1.0-rc.42026-10-06预发布
本版本从对应 tag 构建并完成验收。用 npm i @zseven-w/dsh-harbor 安装(每个版本,含预发布版,都发布为 latest)。安装、用法、证据等级与已知限制见 README.md。
v0.1.0-rc.32026-09-12预发布
· dsh-harbor v0.1.0-rc.3 升级预检 / Upgrade preflight. · ✨ 新增 / Added · harbor preflight — 把目标版本的 DSH 装进 Harbor 自己的缓存目录,对每个已安装插件在子进程里做 import 探针(module.register 解析钩子把 @deepseek-ai/* 重定向到目标树),核对 dsh.client.inject 与宿主 peer 范围,按 profile 回答"升级后还能不能起来"。--plugin / --pack 让它脱离 profile 在 CI 或对任意注册表包工作。/ Installs the target DSH into Harbor's own cache, import-probes every installed plugin against it in a child process (a module.register hook rewrites @deepseek-ai/* to the target tree), checks dsh.client.inject and host peer ranges, and answers per profile whether it still boots. --plugin / --pack run it outside a profile, in CI or on any registry package. · harbor host-diff --from --to — 两个 DSH 版本之间的机器可读契约差异:包、web 客户端模块、内置预设、逐包导出名的增删。0.1.1-rc.2 → 0.1.5-rc.1 一次列出让插件崩掉的全部删除(settingsNamespace、installSettingsSection、dsh-client-runtime、Inbox、PERSONA_SECTION…),release notes 里都没有。/ Machine-readable contract diff between two DSH versions: packages, web client modules, built-in presets, and per-package export names added/removed. · 设置面板「升级预检」卡片 — 面板里选版本、起任务、看进度和逐插件结论;任务由 hub 起子进程跑 CLI,插件崩了伤不到宿主。/ Settings-panel card: pick a version, run, watch progress and per-plugin verdicts; the job runs the CLI in a child process. · GitHub Action uses: ZSeven-W/dsh-harbor@v0.1.0-rc.3 — 插件作者在 PR 和每晚对 next 跑同一套预检,拖崩即红。/ Plugin authors run the same preflight on PRs and nightly against next. · 发版监控与生态看板 — 每小时监控 @deepseek-ai/dsh dist-tags,标签移动即提交 host-diff 并触发全量看板;看板对 npm 上所有声明 dsh.bundle/dsh.client 的包做探针,发布在 。首跑对 DSH 0.1.5-rc.2:3,567 个插件,335 个升级即拖崩 profile,其中 211 个是 dsh-settings 的两个被删导出。/ Hourly dist-tag watch and a nightly ecosystem board. First run against 0.1.5-rc.2: 3,567 plugins, 335 would block boot, 211 of them on the two removed dsh-settings exports. · 🐛 修复 / Fixed · Harbor 自身的 dsh.client.inject 去掉 0.1.5 已删除的 dsh-client-runtime / dsh-client-ui-slots,改为 dsh-client-ui-renderer;声明新的 subprocess 能力。/ Harbor's own inject list follows the 0.1.5 client module graph; declares the new subprocess capab
v0.1.0-rc.22026-08-25预发布
· English This release was built and verified from the matching tag. Prerelease builds install from npm with @next or an exact version. See README.md for installation, usage, evidence levels, and known limits. · 简体中文 本版本由同名 tag 构建并完成验收。候选版本请通过 npm 的 @next 或精确版本号安装。安装、用法、证据等级与已知边界见 README.zh.md。 Full Changelog:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
DSH Harbor 给本机已安装 DeepSeek Harness 插件的一本证据优先事实台账。 能力清单 • 声明与检出对账 • 运行时归属 • 冲突检测 • 版本漂移 • 变化时间线 • 升级预检 npm: @zseven-w/dsh-harbor · 当前插件版本: 0.1.0-rc.3 · 已验证 DSH 0.1.5-rc.2 English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Français · Español · Deutsch · Português · Русский · हिन्दी · Türkçe · ไทย · Tiếng Việt · Bahasa Indonesia DSH 浅色模式下的 Harbor 设置页——实时注册表、当前 profile 归属、本机版本事实与变化基线。 为什么需要 DSH Harbor DSH 插件运行在宿主 Node realm 中,拥有与 DSH 相同的本机权限。Harbor 不用一个“风险分数”假装解决这个问题,而是维护一本只读、带证据的事实台账:装了什么、插件声明了什么、代码和实时宿主实际暴露什么、哪些插件发生冲突,以及上次扫描后发生了什么变化。 🔎 能力清单 Harbor 扫描所有 DSH profile 中已安装的第三方 bundle,并使用固定的 13 项能力词表。
展开完整文档(README 剩余 1 节)
DSH Harbor

给本机已安装 DeepSeek Harness 插件的一本证据优先事实台账。
能力清单 • 声明与检出对账 • 运行时归属 • 冲突检测 • 版本漂移 • 变化时间线 • 升级预检

npm: @zseven-w/dsh-harbor · 当前插件版本: 0.1.0-rc.3 · 已验证 DSH 0.1.5-rc.2

English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Français · Español · Deutsch · Português · Русский · हिन्दी · Türkçe · ไทย · Tiếng Việt · Bahasa Indonesia

DSH 浅色模式下的 Harbor 设置页——实时注册表、当前 profile 归属、本机版本事实与变化基线。

为什么需要 DSH Harbor

DSH 插件运行在宿主 Node realm 中,拥有与 DSH 相同的本机权限。Harbor 不用一个“风险分数”假装解决这个问题,而是维护一本只读、带证据的事实台账:装了什么、插件声明了什么、代码和实时宿主实际暴露什么、哪些插件发生冲突,以及上次扫描后发生了什么变化。

🔎 能力清单

Harbor 扫描所有 DSH profile 中已安装的第三方 bundle,并使用固定的 13 项能力词表。源码结论附 file:line;manifest、文件系统与运行时事实会明确标注来源。

🤝 声明与检出对账

插件可在 package.json 中声明 dsh.capabilities。Harbor 对照声明与检出结果,列出漏声明和未知 id;格式损坏的声明会 fail-closed 为 drift,而不会拖垮整份报告。

🟢 运行时归属

在活动 DSH 宿主内,Harbor 枚举工具、Provider 与路由,并且只归属给当前 profile 实际安装的插件。宿主没有公开的注册表会显示为覆盖缺口,而不是被误解成“什么都没有”。

⚠️ 冲突检测

台账检查同一 profile 内的工具名、路由前缀、Provider id、客户端模块 id,以及顺序敏感的消息钩子。客户端只是引用某条路由,不会因此被误判成路由所有者。

🧭 两条版本轴

跨 profile 漂移是纯本机事实,始终离线。上游检查独立、显式、识别 registry、清除凭据,并缓存六小时。link: 与 file: 安装不会冒充 registry 最新版本。

🕰️ 变化时间线

快照跟踪新增、移除、版本迁移、profile 移动、能力变化与 claims 变化。即使两个制品在 profile 间互换,也会按具体 profile 报告。

🛫 升级预检

把 DSH 升到新版本之前,Harbor 先把那个精确版本装进自己的缓存目录,在子进程里逐个对已安装插件做 import 探针,把 dsh.client.inject 的 id 对照目标版本的客户端模块图核对,再核对宿主 peer 范围。结论按 profile 给:升级后能启动,或者起不来——被哪个插件拖崩、真实的链接期报错原文。

🧷 一项设置检查

唯一一条有真实升级事故的用户设置检查:内置 Agent 预设改名(DSH 0.1.2 把 code 改成 ptc)时,设置里的 agent-presets.default 不会迁移,之后每次新建会话都失败。预检把过期值对照目标版本的预设列表报出来。

工作原理

~/.dsh/profiles/*
├─ 已安装包与来源 │ registry 制品 | link: 工作树 | file: 快照 ├─ declared │ package.json + cordis.patch.yml ├─ static │ 有界源码扫描 + file:line 证据 ├─ runtime(在 DSH 宿主内) │ tools + providers + routes + 当前 profile 归属 ├─ versions │ 本机跨 profile 漂移 + 显式 registry 检查 └─ snapshot 新增 + 移除 + 版本/profile/能力/claims 变化

CLI 与设置面板使用同一套扫描核心。默认路径完全离线;只有 harbor scan --check-updates、harbor preflight,或面板的「检查上游更新」「升级预检」动作会联系 registry。

升级预检

harbor preflight --list # 上游 dist-tags、最近版本、本机已缓存的宿主树 harbor preflight --dsh next # 也可以给具体版本:--dsh 0.1.5-rc.2 harbor preflight --dsh 0.1.5-rc.2 --json

按顺序发生的事:

1. 解析目标(dist-tag 需要一次 registry 请求),用 npm install -g --prefix 把 @deepseek-ai/dsh@<version> 装进 <状态目录>/hosts/<version>。装完的树会复用;全局 npm 前缀和你的 profile 永远不会被写。
2. 每个已安装第三方插件的服务端入口在一个全新的 node 子进程里 import 一次。module.register 解析钩子把 @deepseek-ai/* 的导入改写到目标树,插件因此链接到待评估的版本,而它自己的依赖仍从真实安装位置解析。缺包和被删的导出在链接期就失败,原文照报——DSH 加载器是 fail-loud 的,一个这样的插件就会拖崩整个 profile。
3. dsh.client.inject / external 的 id 对照目标树里声明了 web 客户端模块的包核对(DSH ≥ 0.1.5 会静默跳过未知 id,所以它自己从不报错)。宿主 peer 范围按 npm 的 prerelease 规则匹配。
4. settings.yaml 里的 agent-presets.default 对照目标版本的内置预设核对。

判决区分入口导入失败(启动阻断)和 DSH >= 0.2 的宿主版本闸门拒绝(宿主拒绝加载,插件会被跳过)。闸门使用目标宿主自带的 semver 库,并包含预发布版本;不假定用户已授予精确版本的风险豁免。入口可导入不代表激活、设置读写、工具或设备功能已验证。无法解析/未探测表示尚无结论。退出码 3 表示仍有插件未通过预检,或存在已知设置问题。解析钩子需要 Node >= 20.6。

不在 profile 里的场景(CI,或者你没装过的包)可以显式指定对象:

harbor preflight --dsh next --plugin . # 当前仓库(先构建) harbor preflight --dsh next --pack @scope/some-plugin@1.2.3 # 从 registry 拉取,依赖以禁脚本方式安装

两个 DSH 版本之间的契约差异

harbor host-diff --from 0.1.1-rc.2 --to 0.1.5-rc.1

把两个版本都装进缓存,报告插件可能依赖的所有变动:新增/删除的包、新增/删除的 web 客户端模块、内置预设,以及在子进程里 import 每个官方包入口后得到的逐包导出名增减。这是 release notes 里没有的机器可读 changelog;让插件在 0.1.5 上崩掉的 settingsNamespace 删除,在这里就是 @deepseek-ai/dsh-settings 的一条导出删除。有任何删除时退出码为 3。

GitHub Action

插件作者可以在每个 PR 和每晚对 next dist-tag 跑同一套预检:

- uses: actions/checkout@v4
- run: pnpm install --frozen-lockfile && pnpm run build # 探测的是构建后的服务端入口
- uses: ZSeven-W/dsh-harbor@v0.1.0-rc.3
with:
dsh: next # 版本或 dist-tag,默认 latest

插件会拖崩启动时 job 以退出码 3 失败;过期声明只告警(fail-on-advisories: true 可改成失败);同时写 job summary 并上传 JSON 报告。目标宿主树按 DSH 版本缓存。

生态看板与发版监控

本仓库还跑两个定时 workflow:每小时检查一次 @deepseek-ai/dsh 的 dist-tags,任何标签移动都提交一份 host-diff;每晚对 npm 上所有声明了 dsh.bundle 或 dsh.client 的包(撰写时约 4,500 个)按当前 next 做 import 探针,增量进行——只重探 latest 版本变了的插件,DSH dist-tag 移动时才做全量。结果发布为静态页面和 board/ 下的 JSON 索引。探测会在一次性的 CI runner 里执行每个包的模块顶层代码;这个扫描永远不会在用户机器上跑,本机预检只碰用户自己安装的插件。

可以直接核对的证据

点击任意能力标签即可查看证据等级、细节与源码位置——图中的 Web 路由定位到 src/hub/index.mjs:212。

| 等级 | Harbor 真正知道什么 |
| declared | manifest 或文件系统事实,例如客户端注入、磁盘上的 realm 副本。 |
| runtime | 在当前 DSH 宿主注册表中实际观察到的条目。 |
| static | 带可核对 file:line 的源码行为。 |
| heuristic | 需要人工复核的模式推断。 |

Harbor 只陈述事实,不给风险打分。起子进程可能正是某个插件存在的全部意义;真正有用的问题是:这项能力是否可见、是否声明、能否归属、是否符合预期。

安装到 DSH

DSH 是独立包。如果本机尚未安装,可安装本次验证使用的版本:

npm install -g @deepseek-ai/dsh@latest

本地开发时,把当前 checkout 加入 Web profile,并重启一次 DSH:

dsh plugin --profile web add link:/path/to/dsh-harbor
dsh web

从 registry 安装时,使用候选版本的 next tag:

dsh plugin --profile web add @zseven-w/dsh-harbor@next
dsh web

打开 设置 → DSH Harbor。面板只会挂载在带 Web 服务的 profile 中;CLI 在 headless 与 CI 环境仍可完整使用。

验证安装

curl http://127.0.0.1:3080/_dsh/dsh-harbor/ping
pnpm --dir ~/.dsh/profiles/web exec harbor --version

健康的 ping 会报告 4 条 Harbor 路由全部挂载。可执行文件属于 profile:把插件装进 web 不会把 harbor 放进全局 shell PATH。

CLI

harbor scan
harbor scan --evidence
harbor scan --json --no-snapshot
harbor scan --json --check-updates
harbor manifest ./my-plugin
harbor preflight --dsh next

可选运行方式:

已安装到 web profile
pnpm --dir ~/.dsh/profiles/web exec harbor scan

源码 checkout
node /path/to/dsh-harbor/src/cli.mjs scan

发布后一次性运行
pnpm dlx @zseven-w/dsh-harbor@next scan

--help 与 --version 不产生副作用。人读输出会移除不可信包元数据中的终端控制字符;JSON 保留原始机器数据。--no-snapshot 会阻止基线写入。

能力词表

| 表面 | 能力 id |
| UI 与宿主路由 | client-injection、web-routes |
| Agent 与模型表面 | tool-registration、llm-adapter、global-hook、mcp-server |
| 本机与数据访问 | subprocess、network-egress、env-read、credential-handling、foreign-config |
| 模块 realm 完整性 | realm-risk、realm-copy |

完整、稳定的定义与声明公约见 SPEC.zh.md(英文版 SPEC.md)。插件作者可生成一份合并进现有 dsh 对象的 capabilities 成员:

harbor manifest /path/to/my-plugin

粘贴前必须人工核对。检测刻意保持保守且基于模式:动态调用可能漏报,示例或死代码也可能看起来像真实行为。

版本与快照语义

- 跨 profile 漂移比较实际安装的 registry 制品。link: 工作树与 file: 快照保持可见,但不定义 registry 基线。
- 上游检查读取你的 npm registry 配置,按 registry + 包名隔离缓存,从错误中清除凭据,并返回 behind、current、ahead、local 或 unknown。
- 快照保存在 ~/.config/dsh-harbor/,同时跟踪 profile membership 与制品 identity,因此 profile 互换和升级不会被去重吞掉。

信任模型与边界

- Harbor 是只读镜像,不是沙箱、安装准入或策略引擎。
- 默认扫描从不联网;上游检查是面板唯一的联网动作。
- 源码、manifest 与 freshness 读取都有上限,只接受普通文件并拒绝跟随符号链接;跳过或超限会显示为覆盖缺口。
- 当前宿主 API 无法枚举 waterfall dispatch mode,Harbor 会明确标记该运行时证据缺失,而不是猜测。
- 静态分析可能多报或漏报。证据用于复核,不用于盲目拦截。

开发与验证

pnpm install
pnpm run typecheck
pnpm test
pnpm run build:client
npm run smoke:pack

测试启动器兼容 Node 20 与 Windows。CI 覆盖 Ubuntu/Windows × Node 20/24。smoke:pack 会打出真实制品,在空目录用 plain npm 安装,导入公共入口,执行安装后的 CLI,并核对必需文件与权限。

生态

- DSH Android — 在会话中查看并操作 Android 模拟器或 USB 设备
- DSH Crew — 从 Claude Code、Codex、Antigravity 与 Grok 派发 DSH Agent
- DSH iOS — 在会话中查看并操作 iOS Simulator 或 USB 真机
- DSH Noema — DSH 的持久、可检查长期记忆
- DSH OpenPencil — 在会话中检查并编辑真实 OpenPencil 设计文档

License

MIT — Copyright (c) 2026 ZSeven-W
预览分享卡片长什么样 ↓ZSeven-W/dsh-harbor
分享 · DeepSeek Harness Hub
ZSeven-W/dsh-harbor

给本机已安装 DeepSeek Harness 插件的一本证据优先事实台账。

回到顶部