一次装齐认证网关、Git 图谱与工作日志等八个模块
30.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/12 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:要求 dsh >=0.2.0-rc.2 <0.2.1,而最新版为 0.2.1-rc.2。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add yiiilin/dsh-plugins该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 24 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装要求 dsh >=0.2.0-rc.2 <0.2.1,而最新版为 0.2.1-rc.2
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包@yiln-dsh/dsh-plugins @ 0.1.3
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✗dsh CLI 依赖要求 >=0.2.0-rc.2 <0.2.1 · 最新 0.2.1-rc.2 不兼容
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/20 02:49:33
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 67 处,展示前 66 条)
- 读取本地文件pkgs/browser-vnc/browser.js:126
return existsSync(socket) || existsSync(lock) - 写入本地文件pkgs/browser-vnc/browser.js:204
writeFileSync(path, record, { mode: 0o600 }) - 写入本地文件pkgs/browser-vnc/browser.js:205
chmodSync(path, 0o600) - 删除本地文件递归pkgs/browser-vnc/browser.js:341
return rm(dir, { recursive: true, force: true }) - 写入本地文件pkgs/browser-vnc/browser.js:798
mkdirSync(instanceDir, { recursive: true, mode: 0o700 }) - 删除本地文件pkgs/browser-vnc/browser.js:898
await rm(path, { force: true }) - 写入剪贴板pkgs/browser-vnc/client.js:1191
function writeClipboard(text) { - 写入剪贴板pkgs/browser-vnc/client.js:1193
return navigator.clipboard.writeText(text).then(() => true, () => legacyWriteClipboard(text)) - 写入剪贴板pkgs/browser-vnc/client.js:1510
void Promise.resolve(writeClipboard(text)).catch(() => undefined) - 读取剪贴板pkgs/browser-vnc/client.js:1645
text = await navigator.clipboard.readText() - 读取本地文件pkgs/browser-vnc/index.js:671
body = readFileSync(path) - 删除本地文件递归pkgs/browser-vnc/instance-dirs.js:150
remove = async (path) => rm(path, { recursive: true, force: true }), - 读取本地文件pkgs/browser-vnc/instance-dirs.js:157
const list = typeof scan === 'function' ? scan : async () => readdir(base, { withFileTypes: true }) - 发起网络请求pkgs/delegate-mode/runtime.js:201
async fetch(request) { - 读取本地文件pkgs/delegate-mode/store.js:22
try { return validatePolicy(JSON.parse(await readFile(pathFor(id), 'utf8')), id) } - 写入本地文件pkgs/delegate-mode/store.js:29
await mkdir(directory, { recursive: true, mode: 0o700 }) - 读取本地文件pkgs/delete-session/index.js:266
const info = await stat(location.path); - 读取本地文件pkgs/delete-session/index.js:275
const info = await stat(location.sessionDir); - 删除本地文件递归pkgs/delete-session/index.js:281
await rm(location.sessionDir, { recursive: true, force: true }); - 发起网络请求pkgs/gateway/client.js:380
const response = await fetch(new URL(path.replace(/^ /u, ''), document.baseURI), { - 执行外部命令来自配置/变量pkgs/gateway/index.js:116
const spawnChild = (spec) => spawn(spec.command, spec.args, { - 发起网络请求pkgs/gateway/index.js:392
const answer = await fetch(tokenized, { redirect: 'manual' }) - 读取本地文件pkgs/gateway/index.js:429
readFile: (path) => readFile(path, 'utf8'), - 发起网络请求pkgs/gateway/index.js:457
const answer = await fetch(ready.url, { redirect: 'manual' }) - 读取本地文件pkgs/gateway/index.js:538
patch = await readFile(patchPath, 'utf8') - 读取本地文件pkgs/gateway/index.js:548
const readModelRows = async () => extractModelRows(await readFile(patchPath, 'utf8')) - 读取本地文件pkgs/gateway/index.js:559
const patch = await readFile(patchPath, 'utf8') - 写入本地文件pkgs/gateway/index.js:561
await writeFile(backup, patch, { mode: 0o600 }) - 写入本地文件pkgs/gateway/index.js:562
await writeFile(patchPath, replaceModelRows(patch, rows), { mode: 0o600 }) - 读取本地文件pkgs/gateway/index.js:697
const text = await readFile(credentialsPath, 'utf8') - 读取本地文件pkgs/gateway/index.js:718
const text = await readFile(path, 'utf8') - 写入本地文件pkgs/gateway/index.js:727
await mkdir(dirname(path), { recursive: true }) - 写入本地文件pkgs/gateway/index.js:730
await writeFile(temporary, serializeRegistry(environments), { mode: 0o600 }) - 写入本地文件pkgs/gateway/index.js:731
await rename(temporary, path) - 发起网络请求pkgs/gateway/lib/admin.js:454
const sent = hub.request(envId, { - 读取本地文件pkgs/gateway/lib/inventory.js:40
const manifest = JSON.parse(await readFile(join(profileDir, 'package.json'), 'utf8')) - 读取本地文件pkgs/gateway/lib/inventory.js:53
const manifest = JSON.parse(await readFile(join(profileDir, 'package.json'), 'utf8')) - 读取本地文件pkgs/gateway/lib/inventory.js:70
entries = await readdir(skillsRoot, { withFileTypes: true }) - 读取本地文件pkgs/gateway/lib/inventory.js:80
const body = await readFile(join(dir, 'SKILL.md'), 'utf8') - 读取本地文件pkgs/gateway/lib/inventory.js:106
return (await stat(path)).isDirectory() - 读取本地文件pkgs/gateway/lib/systemd.js:122
if (existsSync('/run/systemd/system') === false) { - 读取本地文件pkgs/gateway/lib/systemd.js:131
const previous = await readFile(path, 'utf8').catch(() => undefined) - 写入本地文件pkgs/gateway/lib/systemd.js:139
await writeFile(temporary, text, { mode: 0o644 }) - 写入本地文件pkgs/gateway/lib/systemd.js:140
await writeFile(path, text, { mode: 0o644 }) - 删除本地文件pkgs/gateway/lib/systemd.js:141
await rm(temporary, { force: true }) - 删除本地文件pkgs/gateway/lib/systemd.js:158
await rm(path, { force: true }) - 执行外部命令固定命令pkgs/gateway/lib/systemd.js:170
execFile('systemctl', finalArgs, { timeout: 20_000 }, (error, stdout, stderr) => { - 发起网络请求pkgs/git-graph/client.js:1025
const response = await fetch(new URL(`_dsh/git-graph/${method}`, document.baseURI), options); - 读取本地文件pkgs/supervisor/index.js:374
const raw = await readFile(path, "utf8"); - 读取本地文件pkgs/supervisor/index.js:476
readFile(`/proc/${pid}/stat`, "utf8"), - 读取本地文件pkgs/supervisor/index.js:477
readFile("/proc/sys/kernel/random/boot_id", "utf8"), - 写入本地文件pkgs/supervisor/index.js:494
await mkdirAsync(directory, { recursive: true, mode: 0o700 }); - 读取本地文件pkgs/supervisor/index.js:516
owner = JSON.parse(await readFile(lockPath, "utf8")); - 读取本地文件pkgs/supervisor/index.js:521
info = await statAsync(lockPath); - 删除本地文件pkgs/supervisor/index.js:528
await unlinkAsync(lockPath); - 删除本地文件pkgs/supervisor/index.js:543
await unlinkAsync(lockPath); - 删除本地文件pkgs/supervisor/index.js:550
await unlinkAsync(temporary); - 删除本地文件pkgs/supervisor/index.js:554
await unlinkAsync(temporary).catch(() => {}); - 读取本地文件pkgs/supervisor/index.js:562
const owner = JSON.parse(await readFile(lease.path, "utf8")); - 删除本地文件pkgs/supervisor/index.js:568
await unlinkAsync(lease.path); - 写入本地文件pkgs/supervisor/index.js:602
await mkdirAsync(dirname(target), { recursive: true, mode: 0o700 }); - 写入本地文件pkgs/supervisor/index.js:604
await renameAsync(temporary, target); - 删除本地文件pkgs/supervisor/index.js:606
await unlinkAsync(temporary).catch(() => {}); - 写入本地文件pkgs/supervisor/index.js:680
await mkdirAsync(directory, { recursive: true, mode: 0o700 }); - 写入本地文件pkgs/supervisor/index.js:689
await renameAsync(temporary, path); - 发起网络请求pkgs/supervisor/lib/client.js:275
const response = await fetch(new URL(path.replace(/^ /u, ""), document.baseURI), options);
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery@deepseek-ai/dsh@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-agent-preset-registry@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-atomic-write@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-conversation给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 集成认证网关
- Git图谱
- 工作日志
README
由 DeepSeek 最新模型翻译生成@yiln-dsh/dsh-plugins
一个 DSH Web 插件包,内含八个内部功能模块。这个工作区就是项目根目录;依赖、版本、构建、测试和发布都在这里管理,不在各个功能目录里。
当前版本:0.1.2(已作为 public 发布到 npm)。已验证目标:DSH 0.2.0-rc.2。
功能
| 模块 | Loader row ID | 用途 |
| Auth Webserver | webserver-auth | 带认证的局域网网关,TOTP/Passkeys,PWA,移动端布局和配置编辑器。 |
| Delete Session | dsh-delete-session | 带确认的单条/批量删除,级联删除子代理,并保护持久化路径。 |
| Git Graph | dsh-git-graph | 右侧栏显示 Git 历史、工作区改动和文件 diff。 |
| Mentor | dsh-mentor | 隔离的无工具咨询,每会话串行队列,可持久重放,全局设置。 |
| Session List Cache | session-list-cache | 合并并缓存并发的会话枚举。 |
| Web Daemon | web-daemon | Systemd 管理、服务器指标和中断会话恢复。
展开完整文档(README 剩余 1 节)
@yiln-dsh/dsh-plugins 一个 DSH Web 插件包,内含八个内部功能模块。这个工作区就是项目根目录;依赖、版本、构建、测试和发布都在这里管理,不在各个功能目录里。 当前版本:0.1.2(已作为 public 发布到 npm)。已验证目标:DSH 0.2.0-rc.2。 功能 | 模块 | Loader row ID | 用途 | | Auth Webserver | webserver-auth | 带认证的局域网网关,TOTP/Passkeys,PWA,移动端布局和配置编辑器。 | | Delete Session | dsh-delete-session | 带确认的单条/批量删除,级联删除子代理,并保护持久化路径。 | | Git Graph | dsh-git-graph | 右侧栏显示 Git 历史、工作区改动和文件 diff。 | | Mentor | dsh-mentor | 隔离的无工具咨询,每会话串行队列,可持久重放,全局设置。 | | Session List Cache | session-list-cache | 合并并缓存并发的会话枚举。 | | Web Daemon | web-daemon | Systemd 管理、服务器指标和中断会话恢复。 | | Session Mode | session-mode | 每会话的 normal / delegate-writes 权限:受限主智能体拿到裁剪过的工具目录外加执行守卫,并配独立的系统提示词。 | | Work Journal | dsh-work-journal | 按日/周/月生成本 harness 的用途报告,从持久会话存储投影而来:一个 work_journal 工具、一条 /journal 命令,以及右侧栏面板。 | 安装后由单个 bundle 拥有这些模块。它们各自的 Cordis row 保留独立的 Config schema 和现有设置命名空间。Auth 会话、Passkeys、Mentor 日志、恢复记录、HTTP 路由和 Git 标签页标识都沿用原来的名称和位置。 安装 安装已发布的包: dsh plugin --profile web add @yiln-dsh/dsh-plugins@0.1.2 或者安装当前工作区构建: npm install npm run build dsh plugin --profile web add file:/path/to/dsh-plugin 源码改动后,刷新本地 file: 安装。Host 改动要重启 daemon,Client 改动要刷新浏览器;不要以为运行中的进程会自动加载复制过来的文件。 file: 目录依赖从 lockfile 解析,所以即使包里新增了文件,pnpm 也可能报 Already up to date,什么都不投影。重新添加前先删掉已投影的包,否则新模块不会出现在组合后的配置档里: rm -rf "$DSH_HOME/profiles/web/node_modules/@yiln-dsh/dsh-plugins" dsh plugin --profile web add file:/path/to/dsh-plugin 重启前先确认组合后的树里带有该 row: dsh --profile web --dump-config | grep -c session-mode 从六个包迁移 不要把这套套件和六个旧 bundle 同时启用:它们的 row ID、路由和注册会重叠。先备份 Web 配置档和插件状态,从独立进程停掉 worker,移除旧的六个包,安装套件,并迁移用户补丁里显式写死的旧 name 覆盖项。保留所有 Config 值、行 ID 和状态目录。重启并刷新 GUI。 迁移辅助脚本默认是 dry-run,通过显式模式切换: node scripts/migrate-profile.mjs --check /absolute/profile/cordis.patch.yml node scripts/migrate-profile.mjs --write /absolute/profile/cordis.patch.yml 它只改动已知的 Loader 模块地址,保留注释和 !!js,绝不求值表达式,并校验其他配置值保持不变。它不会卸载或安装包,也不会删除持久化状态。 会话模式 用 composer 工具栏里权限控件右侧的开关,或者 /agent-mode on 和 /agent-mode off。打开委托写入后,主智能体变为只读,由 worker 执行编辑和命令执行:未经审计的工具会从主智能体面向模型的目录中移除,即使仍有调用进来,单调守卫也会拒绝。Agent Teams 协调工具对负责协调的主智能体保持可用。开关标签和两个状态词都通过 Client locale 字典本地化。两种模式各有独立的 normalPrompt 和 delegateWritesPrompt Config 字段。选择在重启后保留;worker 的权限和提示词使用创建时捕获的模式。 配置和边界见 Session Mode。 工作日志 直接问 harness 你做过什么,不用提前准备任何东西。日志读取的就是对话回放所用的同一批会话日志,所以它覆盖安装之前的历史,也不会和实际发生的事对不上。 - 在对话里:问「我昨天做了什么」/「总结一下这周」,智能体会调用 work_journal。 - 不用模型:/journal week、/journal 2026-09-13、/journal status、/journal rebuild。 - 在 GUI 里:右侧 Sidebar 的「工作日志」标签页,带范围切换、项目筛选和复制 Markdown 操作。 重启后的第一次查询会构建整个索引;之后的遍历只读变化的部分。如果报告无法从整个存储构建,它会明说,而不是悄悄少算。报告统计你自己的提示词、工具调用、写入的文件、运行的命令、每日活跃窗口和按项目汇总。投影规则、增量索引和配置见 Work Journal。 开发 npm run build npm run check npm test DSH_EDITOR_QA_URL=http://isolated-test-host:3095/ npm run test:editor DSH_MODE_QA_URL=http://127.0.0.1:<isolated-port>/ npm run test:modes:browser npm pack 浏览器测试使用 Auth 模块里的合成 fixture,并拒绝生产端口。不要把会改数据的测试流程指向生产环境。 目录结构 - package.json:唯一的插件包清单和版本。 - cordis.patch.yml:根发现锚点和八行功能声明。 - index.js:空操作的 Host 发现锚点。 - src/<feature>/:内部 Host/Client 实现和功能测试。 - src/features.js:用于组合与迁移检查的规范标识。 - client.js:生成的单一 Client 入口;请改功能源码,不要改这里。 - scripts/:客户端生成、校验和配置档迁移。 - test/:根包契约和迁移契约。 - docs/:功能说明、兼容性调研和验证证据。 - skills/:仓库技能素材,不是第二个插件包。 文档驱动开发源码 用一套小而统一的文档布局,保存人类可读的领域/模块契约。它的模块示例 展示了公开入口、状态归属和限定范围的文档维护。运行 node skills/doc-driven-development/scripts/check.mjs 可执行该技能的隔离包回归测试;这些素材不会被插件构建安装或发布,现有项目文档也不会自动迁移。 发布 提升根版本号,同时更新本 README 和兼容性说明。运行构建、语法检查、测试,再做一次打包安装冒烟测试。只在收到请求时才提交和推送;只在明确要求发布后,才用 npm publish --access public 发布。内部模块没有独立版本号。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
yiiilin/dsh-plugins
一次装齐认证网关、Git 图谱与工作日志等八个模块
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目