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

配置同步仓库 67-68/dsh-plugins

DeepSeek Harnessv0.1.2
67-6841 天前有提交已提供中文文档扫描:含敏感能力

用 git 管理整套 DSH 配置并一键幂等同步

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

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

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

状态速览

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

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

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

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

展开查看检查明细 ↓

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

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

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

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

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

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 27 处,展示前 26 条)
  • 写入剪贴板
    packages/dsh-mermaid/lib/client.js:158
    navigator.clipboard.writeText(code).then(
  • 读取本地文件
    packages/dsh-mermaid/lib/index.js:43
    const body = await readFile(join(dir, file));
  • 读取本地文件
    packages/dsh-mode-gate/lib/index.js:204
    return readdirSync(dir).some((entry) => !entry.startsWith('.'));
  • 读取本地文件
    packages/dsh-mode-gate/lib/index.js:229
    isDir = existsSync(dir) && statSync(dir).isDirectory();
  • 读取本地文件
    packages/dsh-mode-gate/lib/index.js:229
    isDir = existsSync(dir) && statSync(dir).isDirectory();
  • 读取本地文件
    packages/dsh-mode-gate/lib/index.js:256
    if (existsSync(abs) && statSync(abs).isDirectory()) {
  • 读取本地文件
    packages/dsh-mode-gate/lib/index.js:256
    if (existsSync(abs) && statSync(abs).isDirectory()) {
  • 读取本地文件
    packages/dsh-mode-gate/lib/index.js:506
    dirents = readdirSync(presetActionDir, { withFileTypes: true });
  • 发起网络请求
    packages/dsh-read-url/lib/index.js:121
    const res = await fetch(url, {
  • 发起网络请求
    packages/dsh-read-url/lib/index.js:278
    const res = await web.fetch(url, { signal })
  • 执行外部命令固定命令
    packages/dsh-read-url/lib/proxy-fallback.js:52
    const out = execFileSync(
  • 执行外部命令固定命令
    packages/dsh-read-url/lib/proxy-fallback.js:109
    execFile('curl', args, { maxBuffer: cfg.maxBytes + 8192, encoding: 'buffer', windowsHide: true, signal: externalSignal || undefined }, (err, stdout) =
  • 读取本地文件
    packages/dsh-session-converter/lib/index.js:43
    if (existsSync(p)) return p
  • 执行外部命令来自配置/变量
    packages/dsh-session-converter/lib/index.js:48
    execFileSync(c, ['--version'], { stdio: 'ignore' })
  • 读取本地文件
    packages/dsh-session-converter/lib/index.js:64
    entries = readdirSync(dir)
  • 读取本地文件
    packages/dsh-session-converter/lib/index.js:72
    st = statSync(p)
  • 执行外部命令来自配置/变量
    packages/dsh-session-converter/lib/index.js:103
    const text = execFileSync(zstd, ['-dc', file], { encoding: 'utf8', maxBuffer: 1 << 30 })
  • 写入本地文件
    plugins/mode-experience.mjs:40
    const log = (msg) => { try { appendFileSync(logFile, msg + '\n') } catch (e) {} }
  • 读取本地文件
    plugins/mode-experience.mjs:49
    if (docDir && existsSync(docDir)) {
  • 读取本地文件
    plugins/mode-experience.mjs:51
    for (const entry of readdirSync(docDir)) {
  • 读取本地文件
    plugins/mode-experience.mjs:54
    const content = readFileSync(join(docDir, entry), 'utf8')
  • 读取本地文件
    presets/anchored-architect/custom-bash.mjs:113
    const exists = (path) => access(path).then(() => true, () => false)
  • 读取本地文件
    presets/anchored-architect/persona-gated.mjs:64
    return existsSync(file) ? readFileSync(file, 'utf8') : ''
  • 读取本地文件
    presets/anchored-architect/persona-gated.mjs:64
    return existsSync(file) ? readFileSync(file, 'utf8') : ''
  • 读取本地文件
    presets/anchored-architect/tool-bootstrap.mjs:242
    const stat = statSync(MODE_GATE_STATE_FILE)
  • 读取本地文件
    presets/anchored-architect/tool-bootstrap.mjs:244
    const raw = JSON.parse(readFileSync(MODE_GATE_STATE_FILE, 'utf8'))
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

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

功能亮点

  • git管理配置
  • 一键幂等同步
  • 锁定版本清单

DSH 配置的 dotfiles 范式:git 仓库作真理源,一条 install.sh 幂等同步 preset/插件/经验文档 + requirements.txt 锁版本清单

README

由 DeepSeek 最新模型翻译生成
dsh-plugins 我在 DeepSeek Harness (DSH) 上自建的插件与 agent preset 仓库。这里是「真理源」;运行时位置是 ~/.dsh/。 定位:把整套 DSH 配置(preset + 插件 + 经验文档 + profile patch)当成一个 git 仓库来管理——可 review、可回滚、可协作,用一条 ./install.sh 幂等同步到 ~/.dsh。这是 DSH 的「dotfiles 范式」,不是又一个插件。 为什么(Why) DSH 生态里装插件的主流方式是 marketplace「浏览 + 一键装」。这适合发现新插件,但不适合复现你自己的整套配置。
展开完整文档(README 剩余 1 节)
dsh-plugins

我在 DeepSeek Harness (DSH) 上自建的插件与 agent preset 仓库。这里是「真理源」;运行时位置是 ~/.dsh/。

定位:把整套 DSH 配置(preset + 插件 + 经验文档 + profile patch)当成一个 git 仓库来管理——可 review、可回滚、可协作,用一条 ./install.sh 幂等同步到 ~/.dsh。这是 DSH 的「dotfiles 范式」,不是又一个插件。

为什么(Why)

DSH 生态里装插件的主流方式是 marketplace「浏览 + 一键装」。这适合发现新插件,但不适合复现你自己的整套配置。本仓库解决后一个问题:

| 诉求 | marketplace 一键装 | 本仓库(dotfiles 范式) |
| 发现新插件 | ✅ 强 | ❌ 不管 |
| 复现整套配置 | ❌ 手动拼 | ✅ git clone + ./install.sh |
| 版本可审计 | 部分(@latest 漂移) | ✅ requirements.txt 锁版本 |
| 变更可 review / 回滚 | ❌ | ✅ git PR / revert |
| 团队共享 | 难 | ✅ 一个仓库 |

生态现状与定位

DSH 生态 2026-08 刚开源,「装插件」的主流是 marketplace 一键装(dsh-market 等),解决「发现」已经很成熟;但「把整套配置当代码来管理」这一层在 DSH 里还没有被广泛验证的方案——现成的「分享整套配置」工具(如 dshp,1 star / 0 fork)基本是刚生成的 AI repo,不足以作为范式参考。

同一范式在 Claude Code 生态已被验证并落地:

- ai-sync(git 备份同步 ~/.claude)
- dotai / ai-dotfiles-manager(AI agent 的 dotfiles 全家桶)
- ai-config-cli(声明式插件清单,对应本仓库的 requirements.txt)

本仓库 = 把 ai-sync / dotai 这条已验证的路搬进 DSH:git 仓库作真理源、install.sh 幂等同步、requirements.txt 锁版本。

一句话:marketplace 管「发现」,本仓库管「复现」;两者正交,不互斥。

目录结构

dsh-plugins/
├── plugins/ # host-plane 插件 + 外部插件声明 │ ├── mode-experience.mjs # 按 preset 名注入 DOCUMENT/{preset}.md 到 system prompt │ └── requirements.txt # 外部插件声明(source@version,# 注释,版本锁死) ├── packages/ # 本地双面包插件(每包一个目录,basename = 包名) ├── presets/ # 自建 agent preset(每 preset 一个目录) ├── preset-actions/ # mode-gate preset actions(每 action 一个目录,内含 SKILL.md) ├── profile/ │ └── cordis.patch.yml # web profile 的 user patch 层,引用 ../plugins/.mjs ├── document/ # 经验文档(GENERAL.md 全模式 + {mode}.md 按模式) │ ├── GENERAL.md │ └── cordis.md ├── feature_intents/ # 需求意图(唯一规范位置) ├── scripts/ # 运维脚本(顶层仅构建+护栏,一次性进 archive/) ├── patches/ # install.sh 引用的补丁 ├── extensions/ # 浏览器扩展(独立交付物,不由 install.sh 部署;目录名不带版本) ├── docs/ # 设计文档(INDEX.md 为索引,plans/ 为计划) ├── temp/ # 构建缓存(gitignored,不提交) ├── install.sh # 一键把上面内容 symlink/安装 进 ~/.dsh ├── ARCHITECTURE.md # 架构地图 + 依赖规则(护栏: scripts/verify-architecture.sh) └── README.md

部署

./install.sh # 部署到 ${DSH_HOME:-$HOME/.dsh} ./install.sh /path # 部署到指定 DSH home

install.sh 会做六类同步(plugins / profile / document 用 symlink,改仓库 = 改运行时;presets 和 packages 必须用真实目录拷贝;外部插件用 pnpm 安装):

1. plugins/.mjs → ~/.dsh/profiles/web/.mjs
2. profile/cordis.patch.yml → ~/.dsh/profiles/web/cordis.patch.yml
3. presets// → ~/.dsh/.agent-presets//(拷贝,不是 symlink)
4. document/.md → ~/.dsh/DOCUMENT/.md
5. packages// → ~/.dsh/profiles/node_modules/(本地双面包插件 拷贝)
6. plugins/requirements.txt → dsh plugin --profile web add(外部插件安装,pnpm 前向器)

为什么 presets 不能 symlink:agent-presets 发现逻辑用 readdir(..., { withFileTypes: true }),只认 child.isDirectory() === true 的目录;symlink 的 isDirectory() 恒为 false,会被静默跳过 —— 所以你在仓库里能看到 preset,dsh 的模式选择器里却看不到。

为什么 packages 不能 symlink:Node 加载模块时会 realpath 符号链接,随后从仓库目录向上解析包内部的裸 peer 依赖(如 @deepseek-ai/dsh-typert-protocol),而仓库没有 node_modules/(已 gitignore),导致 ERR_MODULE_NOT_FOUND。真实拷贝让模块物理落在 profiles/node_modules 下,peer 依赖自然解析。

改完插件后必须重启 dsh web 才生效(web 的 HMR 是关闭的)。

注意事项

- 不要直接 git init 在 ~/.dsh/ 里:那里混着 sessions/、storages/、.anonymous-user-id、node_modules/ 等敏感/无关内容。
- 不要改部署自带的 preset:dsh 安装位置旁的 config/agent-presets/(通常是某次 npx 缓存里的 node_modules/@deepseek-ai/dsh/config/agent-presets/)下的 cordis 等 preset 属于部署本身,升级会被覆盖。要改就 copy 一份到这里再改。
- profile/cordis.yml 是 profile loader 自动生成的空根,不要手动编辑,也不要入库(已 gitignore)。
- DOCUMENT/ 里的 .mode-experience.log 是插件运行日志,不入库(已 gitignore)。
- 如果 dsh web 在启动时重新生成了某个文件覆盖了 symlink,重跑一次 ./install.sh 即可。

连远程仓库(备份 + 版本管理)

git remote add origin
git push -u origin main

推荐用私有仓库(GitHub / Gitea / GitLab 均可)。
预览分享卡片长什么样 ↓67-68/dsh-plugins
分享 · DeepSeek Harness Hub
67-68/dsh-plugins

用 git 管理整套 DSH 配置并一键幂等同步

这是你的仓库?认领条目

回到顶部