在 DeepSeek Harness 中回退对话和文件,支持撤销。
30.5/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add gulagala001/dsh-undo-plugin该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 10 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 57 处,展示前 41 条)
- 写入本地文件src/store.mjs:11
await mkdir(dirname(file), { recursive: true, mode: 0o700 }); - 写入本地文件src/store.mjs:19
await rename(temp, file); - 删除本地文件src/store.mjs:21
} finally { await unlink(temp).catch(()=>{}); } - 读取本地文件src/store.mjs:26
export async function read(file, fallback) { try { return JSON.parse(await readFile(file, 'utf8')); } catch (e) { if (e.code === 'ENOENT') return fall - 读取本地文件src/store.mjs:36
async load(id) {const file=this.file(id);let info;try{info=await lstat(file);}catch(e){if(e.code!=='ENOENT')throw e;}const signature=info?[info.size,i - 写入本地文件src/store.mjs:62
await mkdir(dirname(file),{recursive:true,mode:0o700});const nonce=randomUUID(); - 读取本地文件src/store.mjs:73
const current=await lstat(file).catch(()=>null); - 删除本地文件src/store.mjs:74
if(identity&¤t?.dev===identity.dev&¤t.ino===identity.ino)await unlink(file).catch(()=>{}); - 删除本地文件src/store.mjs:77
return async()=>{const value=await read(file,null);if(value?.nonce===nonce)await unlink(file);}; - 写入本地文件src/store.mjs:91
await mkdir(reaper);acquired=true; - 删除本地文件src/store.mjs:93
if(latest?.nonce===owner.nonce)await unlink(file).catch(e=>{if(e.code!=='ENOENT')throw e;}); - 删除本地文件src/store.mjs:95
finally{if(acquired)await rmdir(reaper);} - 读取本地文件src/garbage.mjs:5
const list=async path=>{try{return await readdir(path,{withFileTypes:true});}catch(e){if(e.code==='ENOENT')return [];throw e;}}; - 写入本地文件src/garbage.mjs:28
await mkdir(root,{recursive:true,mode:0o700}); - 删除本地文件src/garbage.mjs:35
else if(apply)await unlink(file).catch(()=>{}); - 删除本地文件src/garbage.mjs:41
else if(apply)await unlink(file).catch(()=>{}); - 读取本地文件src/garbage.mjs:53
for(const entry of await list(join(root,'blobs')))if(entry.isFile())loose.set(entry.name,(await lstat(join(root,'blobs',entry.name))).size); - 读取本地文件src/garbage.mjs:88
for(const entry of packFiles)if(entry.isFile())bytes+=(await lstat(join(root,'packs',entry.name))).size; - 删除本地文件src/garbage.mjs:95
if(apply){await unlink(join(root,'blobs',name));mutated=true;}reclaimedBytes+=size; - 读取本地文件src/garbage.mjs:104
const file=join(root,'packs',entry.name),size=(await lstat(file)).size; - 删除本地文件src/garbage.mjs:105
await unlink(file);reclaimedBytes+=size;mutated=true; - 读取本地文件src/garbage.mjs:109
const old=join(root,'packs',entry.name),size=(await lstat(old)).size,entries=groups.get(entry.name); - 删除本地文件src/garbage.mjs:129
publishing=true;await atomic(join(root,'blob-index.json'),next,{reserveBytes:0});mutated=true;await unlink(old); - 删除本地文件src/garbage.mjs:132
if(current&&!Object.values(current).some(entry=>entry.pack===pack))await unlink(file); - 删除本地文件src/maintenance.mjs:37
if(this.disposed&&!this.active&&!this.engine.operations.size){await unlink(this.ownerFile).catch(()=>{});return;} - 删除本地文件src/maintenance.mjs:43
await unlink(this.ownerFile).catch(e=>{if(e.code!=='ENOENT')throw e;});this.lastSweep=0;this.schedule(); - 删除本地文件src/maintenance.mjs:75
async unpin(id){await unlink(join(this.engine.store.root,'pins',id+'.json')).catch(()=>{});} - 读取本地文件src/files.mjs:35
const base = await realpath(cwd);const cached=this.workspaces.get(base);if(cached&&cached.expires>Date.now())return cached.root; - 读取本地文件src/files.mjs:36
try { const {stdout} = await exec('git',['-C',base,'rev-parse','--show-toplevel'],{timeout:5000}); const root=await realpath(stdout.trim());this.works - 读取本地文件src/files.mjs:41
const root = await realpath(cwd); - 写入本地文件src/files.mjs:42
await mkdir(this.root,{recursive:true,mode:0o700}); - 读取本地文件src/files.mjs:43
const storageRoot=await realpath(this.root); - 读取本地文件src/files.mjs:52
if(error.code==='ENOENT'){try{await lstat(join(root,'.git'));throw Error('此工作区需要 Git 才能按忽略规则捕获');}catch(e){if(e.code!=='ENOENT')throw e;}} - 读取本地文件src/files.mjs:55
for (const entry of await readdir(dir,{withFileTypes:true})) { - 写入本地文件src/files.mjs:93
this.storageReady=(async()=>{await mkdir(join(this.root,'packs'),{recursive:true,mode:0o700});await mkdir(join(this.root,'blobs'),{recursive:true,mode - 删除本地文件src/files.mjs:147
if(current&&!Object.values(current).some(entry=>entry.pack===pack))await unlink(file); - 删除本地文件src/files.mjs:193
if(value===null) { await this.check(root,path,expected);await unlink(abs).catch(e=>{if(e.code!=='ENOENT')throw e;}); await syncDirectory(dirname(abs)) - 写入本地文件src/files.mjs:194
await mkdir(dirname(abs),{recursive:true}); - 写入本地文件src/files.mjs:201
await chmod(temp,value.mode); - 写入本地文件src/files.mjs:205
await this.check(root,path,expected);await rename(temp,abs); - 删除本地文件src/files.mjs:207
} finally {await unlink(temp).catch(()=>{});}
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-session-persistence-jsonl@deepseek-ai/dsh-session-format-catalog@deepseek-ai/cordis@deepseek-ai/dsh-session@deepseek-ai/dsh-llm给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
该插件文档不完整,请到 GitHub 查看原文。 github.com/gulagala001/dsh-undo-plugin ↗
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
gulagala001/dsh-undo-plugin
在 DeepSeek Harness 中回退对话和文件,支持撤销。
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,489已汉化DSH
73.1
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,918已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,453已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
Download DS Bot for Windows 10/11 64-bit / 下载 Windows…
★ 5,293已汉化DSH
71.2
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,797已汉化DSH
71.1
这是你的仓库?认领条目