Memory

dsh-temptask

Aeroscis/dsh-temptask · ★ 1

Aeroscis

DSH 临时任务模式:为 DSH 增加「任务」分组——不绑定任何长期工作空间,自动在任务根目录下创建隔离的临时工作目录并开启会话,即开即用、用完即弃。Temporary task mode for DeepSeek Harness.

README body is shown in Chinese.

License
MIT
Added
2026-10-30
Maintenance
active
Install kind
npm
npm
@aeroscis/dsh-temptask
Manifest details
Manifest status
Declared
Manifest path
package.json#dsh
Manifest checked
2026-10-30T09:38:20.033Z
Lifecycle scripts
None found

Static manifest checks report declarations only; they are not compatibility or security review.

安装

dsh plugin --profile web add '@aeroscis/dsh-temptask@0.5.0'

从 npm 安装预构建包

For install and environment setup, plus plugin development tutorials, see DSH community docs ↗

README

Source README · body: zh · Read Chinese README

Table of contents
  1. 1. 安装与卸载
  2. 支持的 DSH 版本
  3. 2. 怎么用
  4. 新建
  5. 转正(♥)
  6. 清理(🗑)
  7. 齿轮(⚙)
  8. 说明(?)
  9. 3. 数据在哪
  10. 删除任务时它的对话去哪了
  11. 想把对话接回某个项目
  12. 4. 命令
  13. 5. 配置
  14. 6. 排错
  15. 7. 已知限制
  16. 8. 给维护者
  17. License

给 DeepSeek Harness 加一个「临时任务」入口:一键开一个隔离的临时工作目录,在里面聊。 实验、临时调试、一次性问题——即开即用、用完就清。

  • 一个任务 = 一个目录 = 一个工作区(侧边栏里的那一项):<DSH_HOME>/dsh-temptask/<时间戳>/。所以侧边栏长成 DSH 原生的样子:任务工作区 → 它的会话,展开、归档、搜索、拖拽都是官方能力。
  • 不用起名:工作区名就是那个时间戳目录;会话标题由 DSH 按首条消息自动总结,显示在会话行上。
  • 聊出成果了就转正:改名、搬到你要的正式目录、连这段对话一起带过去,从此不再被自动清理。
  • 侧边栏一行:主区点击 = 新建,右边五个按钮(清理 / 转正 / 打开根目录 / 说明 / 设置);也有 /temptask 命令。
  • 清理有二次确认,只删任务根目录下的子目录,根目录里你自己放的东西不会被碰。

1. 安装与卸载

# 安装(默认 profile)
dsh plugin add @aeroscis/dsh-temptask

# 指定 profile / 从本地目录安装
dsh plugin --profile <profile> add @aeroscis/dsh-temptask
dsh plugin --profile <profile> add /path/to/dsh-temptask

装完重启 DSH。侧边栏顶部(「新建会话」下方)会多出一行:

+ 临时任务  │  🗑  ♥  ⧉  ?  ⚙

主区整块可点 = 新建;右边五个按钮依次是 清理 / 转正 / 打开(或复制)任务根目录 / 说明 / 设置。 窄栏折叠时它就收成一个 + 图标。

desktop 是 Electron 保留的 profile 名,终端里的 dsh plugin 会拒绝管理它。 桌面版请在应用内的插件管理界面装卸;想在终端操作就换一个自建 profile。

卸载:dsh plugin --profile <profile> remove @aeroscis/dsh-temptask。 卸载不会删除任务目录与 tasks.json——要清就先用「清理临时任务」或手动删。

支持的 DSH 版本

DSH 版本 能不能用 和别的版本有什么不同
0.1.5-rc.2 / 0.1.7-rc.2 ✅ 能用。配置项存在 DSH 自己的设置里,改完要重启 DSH
0.2.0-rc.1 / 0.2.0-rc.2 ✅ 能用。配置项改由本插件提供,改完不用重启
0.2.1-rc.2 ✅ 本版本实测过 能用。「浏览…」选文件夹在这代 DSH 上是通的

上面这三档之外的版本,宿主会直接跳过本插件——界面上那一行不会出现,DSH 日志里会写 skipping profile bundle "@aeroscis/dsh-temptask"。遇到这种情况,升级插件或升级 DSH 即可。

2. 怎么用

新建

点 +(或 /temptask new)→ 创建 <DSH_HOME>/dsh-temptask/<时间戳>/ 并在这里开一条会话。 之后它就是一个普通的侧边栏工作区:展开能看到这次任务下的所有会话。

转正(♥)

临时任务聊出了成果、想长期留着时用。三种入口,都打开同一个面板:

  • 侧边栏那一行的 ♥;
  • 会话行右键菜单里的「转正此任务」;
  • 会话行悬停时出现的 ♥ 按钮(会自动预选这条会话所属的任务)。

面板里依次是三个区块:

  1. 要转正的任务——每行大字是工作区名(就是那个时间戳),下面小字是这段对话聊了什么 (会话标题 → 首条消息摘要),所以不用猜是哪一个。默认只列侧边栏还有工作区的任务; 右上角「显示全部(N)」把只剩文件夹的(工作区被删过)也列出来。
  2. 新目录名——默认取上面那段内容(例如「修复登录页的 500 错误」→ 修复登录页的-500-错误), 可以改成你要的名字;它同时是新工作区的名字。
  3. 目标父目录——必须是已存在的目录("少写一层"是最常见的手误,所以插件不替你造)。 能用系统目录选择器就点「浏览…」,否则手输绝对路径。

再加两个勾选:把对话带过去(默认勾,强烈建议)与完成后打开新会话。

点「转正」会先给你一个确认页(原路径 → 新路径、带不带历史、旧会话怎么处理),确认后才动手。 成功后给一张结果卡:原路径 / 新路径 / 新工作区 / 历史是否带上(没带上会说明原因)/ 归档了几条旧会话。

它会做什么:搬目录 → 在新位置建工作区 → 在新位置重建一条带完整历史的会话 → 旧会话按策略归档 → 删掉旧工作区与任务记录。旧的那条会话原样留在磁盘上(默认只是从侧边栏隐藏),新家得到的是新会话。

卡住时:如果那个目录正被占用(还有会话在跑、终端停在里面),会得到「目录被占用」的提示, 此时什么都没有改动——关掉那个任务的会话/终端再试。

清理(🗑)

勾选要删的任务(默认勾上已关闭的),二次确认后:删目录 → 删侧边栏那一项 → 删记录,再按设置处理它的会话 (默认归档,见 §3《删除任务时它的对话去哪了》)。运行中的任务会标「运行中」, 清理前会先中止当轮。

齿轮(⚙)

只放一件事:删除任务时怎么处理它的会话 —— 归档会话(推荐) 或 留在未分组。 另有「复制根目录」与清理入口。

说明(?)

鼠标移开就收起。里面是:有几个任务、根目录在哪、会话在哪儿、设置去哪改。 两半版本不一致时会多出一句「重启 DSH」——那是唯一需要你知道版本的场合。

3. 数据在哪

<DSH_HOME>/dsh-temptask/            ← 任务根目录(不存在时启动重建;删除操作永不碰它本身)
├── 2026-09-27-14-30-00/            ← 一个任务 = 一个目录
└── 2026-09-27-14-31-12/

<DSH_HOME>/plugin-data/dsh-temptask/
├── tasks.json                      ← 任务记录(原子写)
├── tasks.json.bak                  ← 仅当记录损坏时生成
└── config.json                     ← 仅在宿主没有设置服务时使用
  • 目录名是本地时间戳;同一秒内重复创建会加 -2,绝不覆盖。
  • 任务目录被手工删掉 → 下次启动会发现记录指着不存在的目录,于是丢掉这条记录并提示(目录才是任务本身)
  • 侧边栏那一项被手工删掉 → 下次「打开」该任务会按路径把它建回来。

删除任务时它的对话去哪了

一个任务可能先后开过好几条会话。删除任务时按设置处理:

设置 会发生什么
归档会话(推荐) 会话从侧边栏消失,日志仍留在磁盘上;DSH 界面里不容易再把它找回来
留在未分组 会话落进官方的「未分组」,还能打开,但它的工作目录已经没了(工具/终端指不到地方)

为什么不能真删:DSH 没有提供删除会话的能力(会话日志只允许追加),本插件不会去动那些文件。

想把对话接回某个项目

/temptask repair <工作区绝对路径> [来源会话ID]:把某条孤儿会话(它记录的目录已经不存在了) 的历史,复刻进一个正常的工作区,成为一条能继续聊的新会话。它只读旧日志、不删不改任何东西。

适用两种情形:转正时没勾「把对话带过去」事后又想要;以及临时目录被删/被清理之后。 如果原会话只是被归档,取消归档只能让它回到「未分组」(目录已失效)——这条命令才能让它继续工作。

4. 命令

/temptask list                       列出全部任务(ID / 目录 / 工作区 / 状态 / 时间)
/temptask new                        新建任务并打开会话
/temptask open <ID|目录名|标题>      打开任务(支持片段匹配,多个匹配会列候选)
/temptask promote <ID|目录名|标题> --dir <父目录> [--name <新名>] [--no-history] [--yes]
                                     转正:搬目录 + 建正式工作区 + 把对话复刻进新会话
/temptask repair <工作区路径> [来源会话ID]
                                     把已存在的工作区与它的孤儿会话接上(补回历史)
/temptask clean <ID|目录名|标题>     删除任务(先预览,加 --yes 才执行)
/temptask clean --all --yes          删除全部任务
/temptask help                       帮助
  • 标题含空格要加引号:/temptask open "修复登录 bug"。
  • clean / promote 都是"先打印将要做什么,加 --yes 才动手"。
  • promote 不带 --name 时沿用原目录名;--no-history = 不把对话带过去(仍会在新家开一条空会话)。
  • 例:/temptask promote "修复登录 bug" --dir "D:\Flora\ProgramProjects" --name login-fix --yes

5. 配置

在「设置 → 插件 → 临时任务」里改(DSH 0.1.x 上这一节的位置与写法略不同,效果一样):

键 默认 说明
rootDir <DSH_HOME>/dsh-temptask 任务根目录。留空 = 默认
autoCleanDays 0 >0 时,启动清理「已关闭且最后打开超过 N 天」的任务
onDeleteSessions archive 删除任务时怎么处理会话:archive 归档 / keep 留在未分组
dataDir <DSH_HOME>/plugin-data/dsh-temptask 插件数据目录(改它要重启 DSH)

改 rootDir 与 autoCleanDays 不用重启,下一次操作就生效。

6. 排错

现象 处理
侧边栏没有「临时任务」这一行 确认插件装在这个 profile 上;看 DSH 日志有没有 [dsh-temptask];窄栏折叠时它只剩一个图标。若日志里有 skipping profile bundle,说明 DSH 版本不在支持范围内(见 §1)
在 desktop profile 上 dsh plugin 被拒 预期行为:desktop 是 Electron 保留名,请在应用内的插件管理界面操作
设置里看不到「临时任务」这一节 该宿主没挂设置表单;改配置的点 ⚙(写入 <dataDir>/config.json),功能不受影响
改了插件,行为还是旧的 插件分两半:后端只在 DSH 启动时加载 → 必须重启 DSH;界面刷新页面就更新。设置卡片页脚写着两半版本,不一致时会提示「重启 DSH」
工作区名一直是时间戳 预期行为:工作区名 = 目录名(DSH 的默认语义),插件不改写它。DSH 总结的会话标题显示在会话行上。想改名字就在工作区上右键重命名
建任务报「无法创建任务根目录」 改 rootDir,或检查 <DSH_HOME> 的写权限
设置卡片出现「记录损坏…已备份重建」 看 <dataDir>/tasks.json.bak 找回旧记录
/temptask open 说「任务目录不存在」 目录被手工删了:清理掉这条记录后重新新建
打开了任务但页面没跳 直接点侧边栏对应的工作区即可(自动跳转有约 2.5 秒的轮询延迟)
转正后新工作区里只有空会话 当时没勾「把对话带过去」,或那条会话没有已完成的一轮 → 用 /temptask repair <新工作区路径> 把历史接回来
临时目录被删后对话打不开 同上:/temptask repair <某个正常的工作区路径>
转正报「目录被占用」 关掉那个任务的会话/终端(Windows 上只要还有程序待在那个目录里就搬不动);此时不会有任何改动

7. 已知限制

  • 不能真正删除会话:DSH 没提供这个能力,只能归档(日志留在磁盘上)。
  • 转正只复刻"已完成的一轮":最后一个回合还没收尾的内容不会被带过去;一个已完成回合都没有时 会退化成空会话并如实说明。
  • 转正的目标不能落在任务根目录内部:那会被自动登记成新的临时任务,等于原地打转。
  • 侧边栏那一行内部的按钮屏幕阅读器读不到(这一行是官方按"导航按钮"渲染的,内部内容被标成 装饰性内容);同样的动作在「设置 → 插件 → 临时任务」与 /temptask 命令里都能用键盘完成。
  • 多个 profile 同时运行时共用一份 tasks.json:写入前会在锁内重读磁盘、按 id 合并, 极端情况下仍有亚毫秒级的覆盖窗口。

8. 给维护者

实现细节、为什么这样设计、逐条核对过哪些官方语义、被否掉的方案、测试与发版流程,都在 docs/DESIGN.md。

License

MIT