DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Recent Tasks — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
R

dsh-recent-tasks

Recent Tasks

DSH 侧边栏中始终位于末尾且可折叠的“最近任务”工作区分组:没有工作区的对话会归入此处,而不是堆积在“未分组”中。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:winditer/dsh-recent-tasks#fa93825cb9c14de82aaea9355cbdd7c0f4e6f16e
README兼容性版本
Screenshot — the 最近任务 group at the bottom of the DSH sidebar, listing the chats that have no workspace

兼容性与来源证明

Recent Tasks 以 dsh-recent-tasks 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/8

版本

0.1.0stable
2026/10/8

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/11
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 ui-customization 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profile用于 Agent Teams Remote 和 UI 插件的实验性 Web 配置层Ab Chartdsh-ab-chart带有绘制其调用的浏览器卡片的图表渲染工具,封装在一个可发布的插件包中Web App@monotykamary/dsh-web-appdsh browser-surface 捆绑包:在 dsh-base 之上的 Web 补丁层,加上运行时衔接插件(前端 dist 提供服务、web-surface 提示符、Bash 运行时变量、URL 行)

README

dsh-recent-tasks

English | 中文

An always-last, collapsible 「最近任务」/ Recent tasks workspace group in the DeepSeek Harness sidebar. Chats that have no workspace land there instead of piling up in 未分组 — and because the group is a real workspace record rather than a look-alike drawn by a plugin, a chat started from it genuinely belongs to it.

DSH groups every chat under the workspace its session cwd resolves to. A chat started without a workspace gets no group at all, so it falls into the 未分组 bucket together with archived folders and deleted projects. This plugin registers one real workspace record for a dedicated folder and keeps it at the end of the workspace list: "no workspace" becomes an ordinary group with ordinary behaviour — collapse, expand, rename, drag order, pin, archive, search.

PieceWhat it is
GroupA genuine workspace record for <recentTasksDir>, registered through ctx.workspaceRegistry and re-pinned to the end of the durable order
Entry+ 最近任务对话 beside Settings at the sidebar foot, plus the Mod+Alt+N / Mod+Shift+N shortcut — both start a session in that workspace
Settings最近任务 rows inside Settings → General — folder, group name, pin-last, auto-repair — backed by this plugin's official live config
Host APIPOST /dsh-recent-tasks/api/state and /ensure, read-only and idempotent; the only write path is the official settings form

Screenshots

Screenshot — the 最近任务 group at the bottom of the DSH sidebar, listing the chats that have no workspace

The group sits at the end of the workspace list and behaves like any other: GPT-6 特点介绍 is the chat that is running right now, older ones show how long ago they were used, and + 最近任务对话 at the sidebar foot starts a new chat in that folder.

Why a real workspace record

The alternative — a plugin-drawn group — cannot work: the sidebar's groups are the workspace storage domain, and no slot lets a third-party plugin insert a parallel group. Registering a record instead of shadowing the sidebar means:

  • sessions started there are normal sessions whose cwd is the recent-tasks folder, so the group's sessionIds fills itself through the official path (Workspace.sessionIds is filtered by realpath(cwd) === path, which also makes it impossible for a chat to be dragged into another group);
  • the file-access boundary is unchanged: the session's sandbox root is that folder, and escalation inside the chat works exactly as in a workspace chat (design §8.7);
  • nothing official is patched, no workspace locale string is touched, and 未分组 keeps working untouched; the plugin's own group name is kept in the active language by renaming its own record, never the built-in namespace and never another group.

Requirements

  • DSH with a web or desktop profile, 0.2.0-rc.1 or newer (developed and verified on 0.2.0-rc.2, cordis ~4.0.4)
  • Node.js >= 22.19.0 — only to build from source
  • pnpm is recommended when installing into a profile
  • No network access, no native modules, no install scripts, no runtime dependencies

Install

The bundle entry (id: recent-tasks) is self-declared by this package's cordis.patch.yml — no manual patch file is needed.

From GitHub (recommended)

Install by repository identity, so the plugin market can match this package to winditer/dsh-recent-tasks unambiguously and show the right GitHub link and description:

dsh plugin --profile desktop add github:winditer/dsh-recent-tasks

For a web profile use --profile web. Restart DSH (quit fully and reopen); the 最近任务 group appears at the foot of the sidebar.

The built browser half (dist/client.js) is committed on purpose. A github: install never runs this package's build — pnpm blocks lifecycle scripts by default — so the committed bundle is what makes this install path work out of the box. Nothing is compiled on the consuming side.

From the app

Settings → Plugins → install bundle, pointing at this directory (or a file: spec). The script scripts/install-into-profile.sh is the manual equivalent: pnpm add file:<repo> plus a dsh.profile.bundles entry.

The dependencies entry is not optional — a bundle listed only in dsh.profile.bundles is erased by the desktop crash-recovery path, which re-derives the list from dependencies.

From npm

dsh plugin --profile desktop add dsh-recent-tasks

⚠️ The package is prepared for npm but not published yet — until it is, use the github: spec above (which is also the source the plugin market reads). Nothing in this README claims a published version.

From source (development)

git clone https://github.com/winditer/dsh-recent-tasks.git && cd dsh-recent-tasks
npm install
npm run build          # regenerates dist/client.js
dsh plugin --profile desktop add .

dist/client.js is regenerated by node scripts/build.mjs before every launch; if it is ever missing, the host half still loads and the app logs client bundle not found; run \pnpm run build` before launch`.

Settings

All four live rows are ordinary official settings: they appear both in Settings → General (rendered by this plugin's own row) and in Settings → Plugins (auto-derived from the plugin's Config), and both surfaces write the same document.

KeyDefaultMeaning
recentTasksDir~/Documents/DSH 最近任务Folder the group owns. Created on first use; must stay an absolute path. Changing it registers/uses the record for the new folder immediately.
title最近任务Group name used when a record is created. While the stored title is still one of this plugin's own default names (最近任务 / Recent tasks) it follows the UI language; any other title is yours and is never rewritten.
pinLasttrueRe-assert the group's place at the end of the workspace list.
autoRepairtrueRecreate the record if it was deleted from the sidebar. Switching it off turns deletion into a visible error instead of a silent rebuild.
enabledtrueMaster switch (patch only — no form).
apiPrefix/dsh-recent-tasks/apiHost API path (patch only).

Edits are persisted by dsh-config-editor into the active profile's cordis.patch.yml (atomic write, validation, rollback) and hot-apply to the running host: the loader commits new values into the plugin's live Volatile refs and emits loader/volatile-update, which the host half uses to re-ensure immediately. This plugin never writes a config file of its own.

Precedence: the profile patch layer wins over this package's bundled defaults, so a user edit survives upgrades.

Behaviour details

  • The API is small and local. Two idempotent POSTs (state, ensure) requiring content-type: application/json; the JSON-only rule is also the CSRF defence, since a cross-site "simple request" cannot set that type without a preflight this route never answers. Nothing secret is exposed and the plugin never accepts a path or a command from the browser.
  • Failure is never silent. Every refusal is a code (bad-config, dir-not-writable, dir-not-directory, missing-record, disabled, unavailable, …) which the client renders from this plugin's own locale namespace; the host never ships display text.
  • State is read-only. state never mkdirs, never creates, never reorders — a vanished record is reported (workspaceId: null + missing-record) and only ensure repairs it.
  • Reuse over creation. If the configured folder is already a workspace, that record is reused and its title is left alone (DSH's create is idempotent per realpath and ignores the title for an existing record).
  • The group name follows the UI language. The sidebar row and the workspace switcher both render the record's durable title verbatim — DSH localizes only its own default-workspace sentinel, and a plugin cannot add to the built-in workspace locale namespace. So while the stored title is still one of this plugin's own default names (最近任务 / Recent tasks), the client half rewrites it to the active language through the official workspaces.rename — the same call the sidebar's own rename dialog makes — which updates both surfaces immediately and durably. Rename the group yourself in the sidebar, or configure a different title, and the plugin never touches it again. The folder on disk is never renamed: the path is the session-grouping key, so moving it would strand existing chats in 未分组.
  • Nested folders are flagged. A recent-tasks folder inside another workspace renders as a child of it; the settings row warns instead of pretending otherwise.
  • Deletion is honest. If the group is deleted while autoRepair is off, both the entry point and the shortcut report missing-record — a chat is never quietly started somewhere else.
  • Shortcut fallback. session.new already owns (desktop) and (web), and rejects an overlapping default. Desktop gets ; web/macOS and web/Windows get ; web/Linux stays unbound. A residual collision is caught and the sidebar entry stays the guaranteed way in.

Troubleshooting

SymptomCause / fix
No 最近任务 group appearsCheck Settings → General → 最近任务 for a coded reason; missing-record + auto-repair off, or dir-not-writable.
The group is nested under another workspacerecentTasksDir is inside a registered workspace — pick a folder outside every workspace.
The entry point says unavailableThe host half is not mounted (row disabled, or the row mounted before workspaceRegistry). Reload the app once after installing.
Settings row shows the read-only hintNo configForms in this composition (no official settings surface); edit the recent-tasks row in the profile's cordis.patch.yml.
Chats still land in 未分组They were created without this workspace's cwd. Existing chat history is never migrated (design §6.3/N3): the group owns new chats started through the entry or the shortcut.

Development

node scripts/build.mjs      # build dist/client.js
node --test test/*.test.js  # 49 tests: protocol, host, client logic, bundle contract
node scripts/build.mjs && node --test test/*.test.js   # = npm run verify
npm pack --dry-run          # inspect the published file list

node_modules/@deepseek-ai/* are symlinks into the extracted 0.2.0-rc.1 tree under .asar/, which only exists so node --test can resolve @deepseek-ai/schemastery; production resolves those specifiers through DSH's own profile interception, so the package declares them as optional peers and ships no runtime dependency.

Layout

PathRole
src/host.js → lib/index.jsHost half: Config, the registry service, the JSON API, the volatile-config listener
src/client.js → dist/client.jsBrowser half: sidebar entry, settings row, refresh loop, shortcut
src/client-core.jsReact-free logic: state machine, planCreate, snapshot store, shortcut resolution
src/protocol.jsShared vocabulary: codes, methods, path handling, response parsing
src/locales.jsrecentTasks zh/en dictionaries (flat keys, 1:1 key sets)
assets/Screenshots used by this README (and picked up by the plugin market)
test/protocol · host · client · bundle
.agents/notes/The design notes this implementation follows, including where it deviates from the draft spec

License

MIT © 2026 dsh-recent-tasks contributors

Mod+N
Mod+Alt+N
shortcuts.register
Mod+Alt+N
Mod+Shift+N