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

临时工作区 s0meb0dy3/dsh-scratch-workspace

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

一键创建临时文件夹并统一管理,用完安全清理

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add s0meb0dy3/dsh-scratch-workspace
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · browser
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件
查看扫描证据(共 159 处,展示前 66 条)
  • 写入本地文件
    host.js:33
    await mkdir(directory, { recursive: true });
  • 写入本地文件
    host.js:36
    await rename(target, finalPath);
  • 读取本地文件
    host.js:48
    const exists = async (value) => access(value, constants.F_OK).then(() => true, () => false);
  • 写入本地文件
    host.js:151
    await fs.mkdir(this._stateDir, { recursive: true, mode: 448 });
  • 读取本地文件
    host.js:152
    const stat2 = await fs.lstat(this._stateDir, { bigint: true });
  • 读取本地文件
    host.js:154
    this._stateDir = await fs.realpath(this._stateDir);
  • 读取本地文件
    host.js:216
    const stat2 = await fs.lstat(this._stateDir, { bigint: true });
  • 读取本地文件
    host.js:217
    if (!stat2.isDirectory() || stat2.isSymbolicLink() || !sameIdentity(stat2, this._stateIdentity.dev, this._stateIdentity.ino) || await fs.realpath(this
  • 读取本地文件
    host.js:243
    const tempStat = await fs.lstat(temp, { bigint: true });
  • 写入本地文件
    host.js:245
    await fs.rename(temp, destination);
  • 删除本地文件
    host.js:258
    await fs.unlink(temp);
  • 写入本地文件
    host.js:326
    await fs.mkdir(rootDirectory, { recursive: true });
  • 写入本地文件
    host.js:333
    await fs.mkdir(directory, { mode: 448 });
  • 删除本地文件
    host.js:379
    if (await this._assertOwned(record, true)) await fs.rm(record.path, { recursive: true, force: false });
  • 删除本地文件
    host.js:381
    await fs.rmdir(record.path);
  • 读取本地文件
    auto.test.js:10
    const base=await fs.realpath(await fs.mkdtemp(path.join(os.tmpdir(),'dsh-scratch-auto-')));process.env.DSH_SCRATCH_TRASH_DIR=path.join(base,'trash');
  • 读取本地文件
    auto.test.js:26
    finally{await service.close();assert.ok(path.isAbsolute(base)&&path.dirname(base)===await fs.realpath(os.tmpdir())&&path.basename(base).startsWith('ds
  • 读取本地文件
    auto.test.js:29
    const exists=async p=>{try{return (await fs.stat(p)).isDirectory();}catch(e){if(e.code==='ENOENT')return false;throw e;}};
  • 读取本地文件
    auto.test.js:51
    const r=await service.create();await service.close();const file=path.join(stateDir,'tasks.json');const data=JSON.parse(await fs.readFile(file,'utf8'))
  • 写入本地文件
    auto.test.js:52
    data.settings.autoCleanupEnabled=true;delete data.tasks[0].cleanupPolicy;delete data.tasks[0].lastActivityAt;await fs.writeFile(file,JSON.stringify(da
  • 删除本地文件
    auto.test.js:113
    store._removeAuthorizedDirectory=async record=>{const marker=path.join(record.path,'.dsh-scratch-owner.json');assert.equal(path.dirname(marker),r.path
  • 读取本地文件
    build.mjs:16
    hash.update(await readFile(`${here}${name}`));
  • 读取本地文件
    build.mjs:28
    locked = JSON.parse(await readFile(LOCK, 'utf8')).sources;
  • 读取本地文件
    build.mjs:34
    await readFile(`${here}host.js`);
  • 写入本地文件
    build.mjs:67
    await writeFile(LOCK, `${JSON.stringify({ sources }, null, 2)}\n`);
  • 写入本地文件
    core.js:93
    await fs.mkdir(this._stateDir, { recursive: true, mode: 0o700 });
  • 读取本地文件
    core.js:94
    const stat = await fs.lstat(this._stateDir, { bigint: true });
  • 读取本地文件
    core.js:96
    this._stateDir = await fs.realpath(this._stateDir);
  • 读取本地文件
    core.js:145
    const stat = await fs.lstat(this._stateDir, { bigint: true });
  • 读取本地文件
    core.js:146
    if (!stat.isDirectory() || stat.isSymbolicLink() || !sameIdentity(stat, this._stateIdentity.dev, this._stateIdentity.ino) || await fs.realpath(this._s
  • 读取本地文件
    core.js:171
    const tempStat = await fs.lstat(temp, { bigint: true });
  • 写入本地文件
    core.js:174
    await fs.rename(temp, destination);
  • 读取本地文件
    core.js:180
    try { leftover = await fs.lstat(temp, { bigint: true }); }
  • 删除本地文件
    core.js:184
    await fs.unlink(temp);
  • 写入本地文件
    core.js:250
    await fs.mkdir(rootDirectory, { recursive: true });
  • 写入本地文件
    core.js:257
    await fs.mkdir(directory, { mode: 0o700 });
  • 删除本地文件
    core.js:287
    if (await this._assertOwned(record, true)) await fs.rm(record.path, { recursive: true, force: false });
  • 删除本地文件
    core.js:290
    await fs.rmdir(record.path);
  • 读取本地文件
    core.test.js:9
    const absent = async target => assert.rejects(fs.lstat(target), { code: 'ENOENT' });
  • 读取本地文件
    core.test.js:16
    const base = await fs.realpath(allocated);
  • 读取本地文件
    core.test.js:17
    const tempRoot = await fs.realpath(os.tmpdir());
  • 删除本地文件
    core.test.js:28
    const remove = async target => { intended(target); await fs.rm(target, { recursive: true, force: true }); };
  • 写入本地文件
    core.test.js:29
    const move = async (source, destination) => { intended(source); intended(destination); await fs.rename(source, destination); };
  • 读取本地文件
    core.test.js:38
    assert.equal(await fs.realpath(base), base);
  • 删除本地文件
    core.test.js:40
    await fs.rm(base, { recursive: true, force: false });
  • 写入本地文件
    core.test.js:53
    await fs.mkdir(target);
  • 读取本地文件
    core.test.js:74
    assert.equal(record.rootDirectory, await fs.realpath(root));
  • 读取本地文件
    core.test.js:77
    const marker = JSON.parse(await fs.readFile(path.join(record.path, MARKER), 'utf8'));
  • 写入本地文件
    core.test.js:81
    await fs.mkdir(path.join(record.path, 'outputs'));
  • 写入本地文件
    core.test.js:82
    await fs.writeFile(path.join(record.path, 'outputs', 'artifact.txt'), 'generated');
  • 写入本地文件
    core.test.js:154
    await fs.mkdir(target);
  • 写入本地文件
    core.test.js:155
    await fs.writeFile(path.join(target, 'precious'), 'keep');
  • 读取本地文件
    service.js:108
    try{entries=await fs.readdir(current,{withFileTypes:true});}catch(error){if(error.code==='ENOENT')continue;throw error;}
  • 读取本地文件
    service.js:113
    try{const info=await fs.lstat(target);bytes+=info.size;files++;}
  • 读取本地文件
    service.js:173
    await fs.stat(r.path);
  • 读取本地文件
    service.test.js:9
    const dir=await fs.realpath(await fs.mkdtemp(path.join(os.tmpdir(),'dsh-scratch-service-')));process.env.DSH_SCRATCH_TRASH_DIR=path.join(dir,'trash');
  • 读取本地文件
    service.test.js:15
    finally{const actual=await fs.realpath(dir);assert.equal(actual,dir);assert.ok(path.isAbsolute(dir)&&path.basename(dir).startsWith('dsh-scratch-servic
  • 写入本地文件
    service.test.js:18
    const r=await service.create();assert.ok(headers.has(r.sessionId));await fs.writeFile(path.join(r.path,'output.txt'),'result');
  • 读取本地文件
    service.test.js:19
    await assert.rejects(service.complete(r.id),/用户/);assert.ok((await fs.stat(r.path)).isDirectory());
  • 读取本地文件
    service.test.js:20
    assert.equal((await service.complete(r.id,{user:true})).completed,true);await assert.rejects(fs.stat(r.path),{code:'ENOENT'});assert.equal(workspaces.
  • 读取本地文件
    service.test.js:24
    test('busy task refuses completion before archive or deletion',()=>fixture(async({service,busy,archived,store})=>{const r=await service.create();busy.
  • 读取本地文件
    service.test.js:27
    const second=await service.create();workspaces.set('nested',{id:'nested',path:path.join(second.path,'nested')});await assert.rejects(service.complete(
  • 写入本地文件
    service.test.js:36
    test('ownership replacement refuses cleanup and preserves unrelated directory',()=>fixture(async({service,store})=>{const r=await service.create();con
  • 写入本地文件
    trash.js:35
    await mkdir(directory, { recursive: true });
  • 写入本地文件
    trash.js:38
    await rename(target, finalPath);
  • 读取本地文件
    trash.js:51
    const exists = async value => access(value, constants.F_OK).then(() => true, () => false);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

DeepSeek Harness 的临时工作区插件:一键创建、侧边栏管理面板、安全清理,可选空闲自动过期。

README

由 DeepSeek 最新模型翻译生成
临时工作区(DeepSeek Harness 插件) 给 DeepSeek Harness 用的「随手开一个临时工作区」:一键建独立文件夹与会话,在侧边栏面板里统一管理,用完安全删除——或者打开闲置自动清理,让它自己消失。 临时工作区面板 [!NOTE] 清理会把整个文件夹移入系统废纸篓 / 回收站,误删仍可恢复。聊天记录会保留并归档;确认不再需要后再清空废纸篓。 安装 1. 在 DeepSeek Harness 左侧打开 插件 页 → 安装; 2. 粘贴包名: @s0meb0dy3/dsh-scratch-workspace 3. 完全退出并重开 DeepSeek Harness,然后在左侧打开 临时工作区。 需要 DeepSeek Harness 0.2.1 或更新版本。 它会给你什么 - 一个入口,两件事 — 侧边栏面板里既创建(+ 临时任务),也管理(列表、打开、清理)。 - 一眼看清每个任务 — 友好名称、实时状态(运行中/终端打开)、闲置倒计时、目录大小,以及其中的会话。 - 删除有保障 — 校验目录所有权与 inode,落盘删除授权可断点重试;agent 或终端仍在用该目录时拒绝清理。 - 可选闲置清理 — 默认关闭;开启后只对新建任务生效。 文档 | 配置项 | 存放位置、目录前缀、删除确认、闲置小时数 | | 安全模型 | 删除校验了什么,以及不防什么 | | 平台支持 | macOS 已验证;Windows 注意事项 | | 参与开发 | 本地开发、测试、发布流程 | 许可证 MIT © 2026 s0meb0dy3
预览分享卡片长什么样 ↓s0meb0dy3/dsh-scratch-workspace
分享 · DeepSeek Harness Hub
s0meb0dy3/dsh-scratch-workspace

一键创建临时文件夹并统一管理,用完安全清理

这是你的仓库?认领条目

回到顶部