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

对话撤回 gulagala001/dsh-undo-plugin

DeepSeek Harness
gulagala00110 天前有提交已提供中文文档扫描:含敏感能力

在 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
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 10 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
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&&current?.dev===identity.dev&&current.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 ↗
预览分享卡片长什么样 ↓gulagala001/dsh-undo-plugin
分享 · DeepSeek Harness Hub
gulagala001/dsh-undo-plugin

在 DeepSeek Harness 中回退对话和文件,支持撤销。

这是你的仓库?认领条目

回到顶部