DSH(DeepSeek Harness)插件:code-panel、memory-admin、retract-prompt
数据截至 2026/10/7 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
dsh plugin --profile web add QHX-BNU/dsh-plugins状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
安装兼容性检查需源码安装仓库根目录无 package.json,浅层子目录有 12 份 dsh 插件清单(dsh-agent-factory/package.json、dsh-drawio/package.json、dsh-memory-admin/package.json 等),无法唯一定位安装名
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/21 02:57:28
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
查看扫描证据(共 91 处,展示前 80 条)
- 发起网络请求dsh-agent-factory/lib/client.js:115
res = await fetch(path, init); - 读取本地文件dsh-agent-factory/lib/store.js:110
const raw = await readFile(this.path, 'utf8'); - 读取本地文件dsh-agent-factory/lib/store.js:241
return (await stat(this.path)).isFile(); - 发起网络请求dsh-code-panel/lib/client.js:294
return fetch(path, init).then((res) => res.json()).then((data) => { - 发起网络请求dsh-code-panel/lib/client.js:323
res = await fetch(url); - 发起网络请求dsh-code-panel/lib/client.js:1157
openRequests.request({ root: d.root, rel: d.rel, name: d.name }); - 读取本地文件dsh-drawio/src/service.ts:62
canonical = await realpath(root) - 读取本地文件dsh-drawio/src/service.ts:113
handle = await readdir(abs, { withFileTypes: true }) - 读取本地文件dsh-drawio/src/service.ts:133
const info = await stat(childAbs) - 读取本地文件dsh-drawio/src/service.ts:156
info = await stat(target) - 读取本地文件dsh-drawio/src/service.ts:165
const content = await readFile(target, 'utf8') - 读取本地文件dsh-drawio/src/service.ts:176
async stat(rootArg: string, path: string): Promise<DrawioOpResult> { - 写入本地文件dsh-drawio/src/service.ts:220
await mkdir(dirname(target), { recursive: true }) - 写入本地文件dsh-drawio/src/service.ts:222
await writeFile(target, content, 'utf8') - 读取本地文件dsh-drawio/src/static.ts:95
info = await stat(target) - 读取本地文件dsh-drawio/src/static.ts:116
const stream = createReadStream(target) - 写入本地文件dsh-drawio/src/tools.ts:184
await mkdir(dirname(target), { recursive: true }) - 写入本地文件dsh-drawio/src/tools.ts:185
await writeFile(target, content) - 写入本地文件dsh-drawio/src/tools.ts:510
await mkdir(dirname(source.absPath), { recursive: true }) - 写入本地文件dsh-drawio/src/tools.ts:511
await writeFile(source.absPath, edited.xml, 'utf8') - 读取本地文件dsh-drawio/src/watch.ts:73
entries = await readdir(abs, { withFileTypes: true }) - 读取本地文件dsh-drawio/src/watch.ts:89
const info = await stat(childAbs) - 发起网络请求dsh-memory-admin/lib/client.js:106
res = await fetch(path, init); - 写入本地文件dsh-memory-admin/lib/store.js:186
mkdirSync(dirname(resolved), { recursive: true }); - 写入本地文件dsh-pwsh-guard/lib/audit.js:33
mkdirSync(dirname(file), { recursive: true }); - 写入本地文件dsh-pwsh-guard/lib/audit.js:34
appendFileSync(file, JSON.stringify({ ts: new Date().toISOString(), ...entry }) + "\n", "utf8"); - 读取本地文件dsh-pwsh-guard/lib/audit.js:44
if (!existsSync(file)) return []; - 读取本地文件dsh-pwsh-guard/lib/audit.js:45
const lines = readFileSync(file, "utf8").split(/ ? /).filter((line) => line.trim().length > 0); - 读取本地文件dsh-pwsh-guard/lib/index.js:55
content: await readFile(SKILL_URL, "utf8"), - 发起网络请求dsh-retract-prompt/lib/client.js:52
return fetch(path, init).then((res) => res.json()).then((data) => { - 发起网络请求dsh-retract-prompt/lib/client.js:88
configPromise ??= fetch("/retract-prompt/api/config") - 写入剪贴板dsh-retract-prompt/lib/client.js:212
navigator.clipboard.writeText(text).then(done).catch(() => {}); - 发起网络请求dsh-scheduled-tasks/lib/client.js:114
res = await fetch(path, init); - 读取本地文件dsh-scheduled-tasks/lib/scheduler.js:251
const raw = readFileSync(this.filePath, 'utf8'); - 写入本地文件dsh-scheduled-tasks/lib/scheduler.js:264
renameSync(this.filePath, `${this.filePath}.corrupt-${Date.now()}`); - 写入本地文件dsh-scheduled-tasks/lib/scheduler.js:276
mkdirSync(dir, { recursive: true }); - 写入本地文件dsh-scheduled-tasks/lib/scheduler.js:278
writeFileSync(tmp, JSON.stringify(this.tasks, null, 2), 'utf8'); - 写入本地文件dsh-scheduled-tasks/lib/scheduler.js:280
renameSync(tmp, this.filePath); - 删除本地文件dsh-scheduled-tasks/lib/scheduler.js:282
rmSync(tmp, { force: true }); - 执行外部命令来自配置/变量dsh-scheduled-tasks/lib/scheduler.js:313
const child = execFile( - 读取本地文件dsh-show-image/lib/index.js:167
data = await readFile(absPath); - 发起网络请求dsh-skill-manager/lib/client.js:155
res = await fetch(path, init); - 发起网络请求dsh-skill-manager/lib/client.js:642
res = await fetch("/code-panel/api/search?" + params.toString(), { signal }); - 发起网络请求dsh-skill-manager/lib/client.js:685
res = await fetch("/agent-factory/api/list", { signal }); - 读取本地文件dsh-skill-manager/lib/fs-store.js:155
const text = await readFile(this.path, 'utf8'); - 写入本地文件dsh-skill-manager/lib/fs-store.js:178
await mkdir(dirname(this.path), { recursive: true }); - 写入本地文件dsh-skill-manager/lib/fs-store.js:179
await writeFile(this.path, JSON.stringify(this.data, null, 2), 'utf8'); - 读取本地文件dsh-skill-manager/lib/fs-store.js:192
entries = await readdir(skillsDir, { withFileTypes: true }); - 读取本地文件dsh-skill-manager/lib/fs-store.js:205
await stat(active); - 读取本地文件dsh-skill-manager/lib/fs-store.js:209
await stat(disabled); - 读取本地文件dsh-skill-manager/lib/fs-store.js:246
return await readFile(path, 'utf8'); - 读取本地文件dsh-skill-manager/lib/fs-store.js:267
try { await stat(active); hasActive = true; } catch { } - 写入本地文件dsh-skill-manager/lib/fs-store.js:273
await rename(disabled, active); - 写入本地文件dsh-skill-manager/lib/fs-store.js:276
await rename(active, disabled); - 删除本地文件递归dsh-skill-manager/lib/fs-store.js:300
if (info.isDirectory()) await rm(target, { recursive: true, force: true }); - 删除本地文件dsh-skill-manager/lib/fs-store.js:301
else await rm(target, { force: true }); - 写入本地文件dsh-skill-manager/lib/fs-store.js:315
await mkdir(dir, { recursive: true }); - 删除本地文件dsh-skill-manager/lib/fs-store.js:319
await rm(disabledPath, { force: true }); - 写入本地文件dsh-skill-manager/lib/fs-store.js:322
await writeFile(target, content, 'utf8'); - 删除本地文件递归dsh-skill-manager/lib/fs-store.js:337
await rm(dir, { recursive: true, force: true }); - 发起网络请求dsh-skill-manager/lib/market.js:26
const res = await fetch(url, { headers: apiHeaders(token), signal: AbortSignal.timeout(20000) }); - 发起网络请求dsh-skill-manager/lib/market.js:82
const res = await fetch(url, { - 发起网络请求dsh-skill-manager/lib/market.js:102
const blobRes = await fetch(json.git_url, { - 执行外部命令固定命令dsh-skill-manager/lib/publish.js:20
execFile('gh', ['api', ...args], { maxBuffer: 8 * 1024 * 1024, windowsHide: true }, (err, stdout, stderr) => { - 读取本地文件dsh-skill-manager/lib/publish.js:52
await stat(skillDir); - 发起网络请求dsh-tool-manager/lib/client.js:128
res = await fetch(path, init); - 读取本地文件dsh-tool-manager/lib/store.js:71
const raw = await readFile(this.path, 'utf8'); - 读取本地文件dsh-tool-manager/lib/store.js:201
return (await stat(this.path)).isFile(); - 请求外部主机api.deepseek.comdsh-usage-panel/lib/api.js:70
const res = await fetch('https://api.deepseek.com/user/balance', { - 发起网络请求dsh-usage-panel/lib/api.js:70
const res = await fetch('https://api.deepseek.com/user/balance', { - 发起网络请求dsh-usage-panel/lib/client.js:54
const res = await fetch("/dsh-usage/api/summary", { method: "GET", headers: { accept: "application/json" } }); - 读取本地文件dsh-wallpaper-sync/lib/api.js:78
const stream = createReadStream(file, { start, end }); - 发起网络请求dsh-wallpaper-sync/lib/client.js:59
const r = await fetch("/wallpaper-sync/api/current"); - 发起网络请求dsh-wallpaper-sync/lib/client.js:63
const r = await fetch("/wallpaper-sync/api/status"); - 发起网络请求dsh-wallpaper-sync/lib/client.js:275
const r = await fetch("/wallpaper-sync/api/library"); - 执行外部命令固定命令dsh-wallpaper-sync/lib/we.js:62
const out = execFileSync( - 读取本地文件dsh-wallpaper-sync/lib/we.js:198
if (existsSync(cand)) { - 读取本地文件dsh-wallpaper-sync/lib/we.js:246
if (existsSync(fp)) { - 执行外部命令固定命令dsh-wallpaper-sync/lib/we.js:249
const txt = execFileSync('type', [fp], { encoding: 'utf8' }).toString(); - 读取本地文件dsh-wallpaper-sync/lib/we.js:345
if (existsSync(pj)) { const p = JSON.parse(await fsp.readFile(pj, 'utf8')); title = p.title || p.name || id; }
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
功能亮点
- DSH插件集合
- code-panel插件
README
由 DeepSeek 最新模型翻译生成展开完整文档(README 剩余 1 节)
DSH 插件 DeepSeek Harness (DSH) 的插件集合。每个插件都是独立的 Cordis 插件包,包含服务端入口(lib/index.js)与 Web 客户端 bundle(lib/client.js)。 插件列表 | 插件 | 版本 | 说明 | | dsh-code-panel | 0.1.0 | 右侧代码面板:浏览工作区代码与 Agent 代码片段,选中代码即可作为引用直接发给 Agent 解释 | | dsh-memory-admin | 0.1.0 | 记忆管理:直接修改记忆模块内容 + 对话中直接看到加载了哪些记忆模块(零外部依赖,node:sqlite) | | dsh-retract-prompt | 0.1.0 | 撤回指令:停止当前运行并把最后一条用户指令放回编辑器重新编辑,修改后再发送,避免错误指令被继续误执行 | | dsh-scheduled-tasks | 0.1.0 | 定时任务:设置任务执行时间(一次性/每天/每周/间隔)与内容,到点自动向会话发消息唤醒 Agent 或执行系统命令 | | dsh-skill-manager | 0.1.0 | Skill 管理:侧边栏管理入口(下载/启用/禁用/删除 skills),对话输入框输入 @ 弹出 skills 选择器并支持搜索 | | dsh-agent-factory | 0.1.0 | Agent 工厂:可复用的 subagent 模板库(指定子智能体做任务,模板可编辑——含模型供应商/模型名等,可复用;侧边栏管理面板 + agent_list/agent_save/agent_run/agent_delete 四个工具) | | dsh-tool-manager | 0.1.0 | 工具管理:显示 DSH 全部工具,制作自定义工具(定义参数与执行代码,保存后主 Agent 立即可用),禁用/启用/删除任意工具(侧边栏面板 + toolmgr_list/create/edit/delete/toggle 五个工具) | | dsh-usage-panel | 0.1.0 | 用量面板:显示 DeepSeek 账户余额、Token 用量与估算费用(适配 DSH Desktop 2.0.2) | | dsh-wallpaper-sync | 0.1.0 | 背景同步:读取 Wallpaper Engine 当前壁纸作为 DSH 全界面背景,桌面切换壁纸时自动跟随 | | dsh-drawio | 0.1.0 | drawio 画图:agent 画图工具(drawio_validate / drawio_render / drawio_template)+ 侧边栏「画板」——mxfile XML 实时渲染为 SVG、导出 PNG、写入工作区(纯 TS 零依赖翻译器) | | dsh-show-image | 0.1.0 | 界面内嵌图片:模型调用 show_image 工具把本地图片以内联卡片显示在 WebUI 对话里(点击看灯箱大图);图片只走展示通道、永不进模型历史(纯文本/多模态模型均安全,主题适配) | | dsh-pwsh-guard | 0.6.0 | PowerShell 守门:pwsh 调用前的静态检查闸门(22 条坑位,8 条阻断)+ bash→PowerShell 自动修复 + AST/PSScriptAnalyzer 深度检查 + 免转义执行(pwsh_run / run_argv)+ 破坏性操作闸(dangerous 确认)+ 审计日志(pwsh_audit)+ 工具接管(run_in_background 模式见 README) | 安装 将插件目录放到 DSH 的插件工作区中,DSH 会通过 cordis.patch.yml 自动应用补丁并加载插件。 开发 每个插件目录结构: <plugin>/ ├── lib/ # 服务端 + 客户端 bundle ├── cordis.patch.yml # Cordis 补丁配置 ├── package.json # 插件元信息(dsh.client 声明 Web 客户端入口) └── README.md # 插件说明 许可 MIT
预览分享卡片长什么样 ↓
DSH(DeepSeek Harness)插件:code-panel、memory-admin、retract-prompt
相关插件 · 对话 / 记忆
这是你的仓库?认领条目