DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

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

@yadsh/dsh-draft-sessions

Draft Sessions

DeepSeek Harness 的持久化未发送草稿会话

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

npx -y @deepseek-ai/dsh plugin --profile web add @yadsh/dsh-draft-sessions@0.3.7
README兼容性版本

兼容性与来源证明

Draft Sessions 以 @yadsh/dsh-draft-sessions 发布,当前版本为 0.3.7。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

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

版本

0.3.7stable
2026/10/11
0.3.6stable
2026/10/8
0.3.5stable
2026/10/4
查看其余 8 个版本收起版本
0.3.4stable
2026/9/22
0.3.3stable
2026/9/17
0.3.2stable
2026/9/15
0.3.1stable
2026/9/13
0.3.0stable
2026/9/12
0.2.2stable
2026/9/6
0.2.1stable
2026/8/30
0.2.0stable
2026/8/30

相关插件

正在加载相关插件…

最新版
0.3.7
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
368.2 kB
文件数
32
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 2
周下载
391
安全扫描
✓ v0.3.7 扫描通过
最近提交
2026/10/12
查看源码 ↗项目主页 ↗
README Badge

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Web All@linxin666/dsh-web-allDSH Web UI 全家桶聚合插件:一键安装全部功能插件(task-board / git-graph / pet / remote-web-ui / web-ui-settings / skin-center / community-plugins / compat shim)。compat 桥接层已并入本包(src/client),无需独立 compat npm 包。Deepseek Ipptdeepseek-ipptiPolloWork PPT Studio 及其精选幻灯片模板,作为原生 DeepSeek Harness 对话视图。Codex Ui@michengai/dsh-codex-uiDSH Codex UI — 为 DeepSeek Harness Web 提供 Codex 风格侧栏、工作区会话树、全局搜索和轮次导航Remotedsh-remoteDeepSeek Harness 的远程工作助手:连接 SSH(密码/密钥/代理/键盘交互/代理跳转),选择远程工作区,使用 22 个 rw_* 工具操作该工作区(包括 rw_edit/rw_stat/rw_mkdir/rw_remove/rw_move/rw_forward),具备冲突感知的镜像 sy

README

dsh-draft-sessions

Persistent, unsent future conversations for DeepSeek Harness.

dsh-draft-sessions is building the Cursor-like workflow where you can prepare several independent tasks, leave them unsent, and return to each task later without starting an agent.

Русский · 简体中文 · Specification · Architecture · Roadmap

See it in action

With @michengai/dsh-automation

Automation provides the optional cooperative tab host. When it is installed and active, Draft Sessions detects __dshNativeTabs@1 and inserts Drafts between Tasks and Scheduled. There is no hard dependency on Automation and no load-order requirement.

Three independent draft sessions in a cooperative DeepSeek Harness sidebar tab

With Automation installed, unsent tasks live in their own Drafts tab while Tasks and Scheduled keep their existing views.

On stock DeepSeek Harness

Without Automation or another compatible tab host, the standard workspace and session browser stays unchanged. Draft Sessions adds a footer action instead; clicking it opens the same draft list in a popover.

Draft Sessions footer action and popover on stock DeepSeek Harness

The fallback uses the public sidebar footer slot and does not replace the stock workspace browser.

Draft actions

Draft session actions rendered above the sidebar without clipping or extra scrolling

Create a distinct draft with +, then rename, duplicate, or delete it from the row menu.

Installation

Install the published npm package by name:

dsh plugin --profile web add @yadsh/dsh-draft-sessions

Or build and install the package from a local monorepo checkout:

pnpm --filter @yadsh/dsh-draft-sessions build
dsh plugin --profile web add ./plugins/dsh-draft-sessions

The published npm package is recommended when you do not need to modify the source.

To remove the plugin:

dsh plugin --profile web remove @yadsh/dsh-draft-sessions

The intended experience

The original goal was to reproduce Cursor's inline draft experience: unsent tasks and ordinary sessions living together in one workspace tree.

my-project
├─ ● Fix auth middleware
├─ ◌ Add Grafana dashboards       Draft
├─ ◌ Refactor docker entrypoint   Draft
└─ ● Implement notifications

That exact layout could not be reproduced through DSH's current public sidebar APIs without replacing the stock workspace browser. Draft Sessions keeps the important behavior—independent unsent tasks, exact text restoration, and conversion on the first accepted prompt—but exposes drafts in a cooperative Drafts tab when one is available, or through the stock sidebar footer popover otherwise.

Each draft owns a real blank DSH Session, but its unsent text is stored separately on the Host. If that blank Session disappears after a restart, a new shell can be created and rebound without losing the task.

flowchart LR
  UI["Sidebar draft row"] --> Composer["Standard DSH composer"]
  Composer --> Draft["DraftRecord — text authority"]
  Draft --> Session["Real blank DSH Session"]
  Session -->|"first prompt accepted"| Normal["Normal DSH Session"]

What works now

  • Host-backed JSON persistence under $DSH_HOME/storages/dsh-draft-sessions/drafts.json.
  • Strict typed draftSessions.list/create/update/delete/rebind Remote methods.
  • Independent workspace ordering and a configurable per-workspace limit.
  • Optimistic revisions that reject stale browser writes.
  • Atomic same-directory writes and strict durable-file validation.
  • Distinct blank Session creation with the id persisted only after success.
  • Missing Session detection and recovery rebinding without changing draft text.
  • Accepted-Send observation with finalization only after blank: false.
  • Rejected Send and blank slash-command preservation.
  • Exact composer restore through the official per-session InputHub facade.
  • Debounced optimistic autosave with a mandatory pre-switch flush.
  • Draft creation from the Drafts + action or Ctrl/Cmd + Shift + N; both flush the active draft before opening a distinct one.
  • A cooperative Drafts tab when the active sidebar host exposes __dshNativeTabs@1.
  • A stock sidebar.footer.action trigger and popover when the tab protocol is absent.
  • Portaled row menus, inline rename, duplicate, confirmed delete, keyboard navigation, and bounded drag reorder.
  • Safe active-draft deletion with a final autosave flush and recovery after a rejected delete.
  • Optional native-tab session filtering that hides draft shells without changing ordinary Sessions.
  • No registration in the single-slot sidebar.workspaces; stock UI, Archive Manager, and other browser owners keep full control.
  • Unit and DOM coverage for persistence, concurrency, lifecycle, composer, and sidebar behavior.

The current implementation deliberately does not send prompts, modify ordinary Session history, or delete blank Sessions.

Requirements

  • Node.js ^22.19.0 or >=24.0.0
  • pnpm 10.4.1 for development
  • DeepSeek Harness >=0.1.7-rc.2 <0.2.0 with the public sidebar.footer.action list slot

The published rc.2 client is supported without patches. Sidebar tab hosts are detected through the optional versioned __dshNativeTabs@1 cooperation protocol; the plugin falls back to the stock footer action instead of replacing the workspace browser.

Development

From the monorepo root:

pnpm install --frozen-lockfile
pnpm --filter @yadsh/dsh-draft-sessions check

Build and link the checkout into a Web profile:

pnpm --filter @yadsh/dsh-draft-sessions build
dsh plugin --profile web add ./plugins/dsh-draft-sessions
dsh --profile web --dump-config

Releases

This package uses independent Nx Version Plans from the monorepo. Add a plan with pnpm release:plan; maintainers publish verified tarballs through the shared release workflow.

Configuration

The bundle inserts the dsh-draft-sessions Cordis row. Override it from the profile patch when needed:

- id: dsh-draft-sessions
  config:
    # Blank uses $DSH_HOME/storages/dsh-draft-sessions/drafts.json
    storagePath: ""
    maxDraftsPerWorkspace: 50

Current API

await ctx.remote.draftSessions.list({ workspaceId });

await ctx.draftSessionLifecycle.create({
  workspaceId,
  text: "",
});

await ctx.draftSessionLifecycle.ensureShell(draft);

await ctx.draftComposerBridge.open(draft);
await ctx.draftComposerBridge.flush();

await ctx.draftShortcutController.create(workspaceId);

await ctx.remote.draftSessions.update({
  id,
  expectedRevision: 4,
  text: "Add OTEL export",
});

await ctx.remote.draftSessions.rebind({
  id,
  expectedRevision: 5,
  sessionId: replacementSessionId,
});

The lifecycle service owns blank Session creation and recovery. The lower-level Remote methods remain available for storage operations; all mutations return the next revision, and a stale expectedRevision is rejected instead of silently overwriting another browser's edit.

Design boundaries

  • Draft text is authoritative in DraftStore; a blank Session is only an execution shell.
  • Creating a draft must never make a model request.
  • The first accepted prompt, not the Send button click, is the conversion boundary.
  • Ordinary DSH Sessions remain owned entirely by DSH.
  • Attachments are out of scope for v1; text and textual @file references come first.
  • Draft rows compose beside the single workspace-browser occupant; the plugin never disables or embeds ui-workspace.
  • Backing blank Sessions are excluded only from the workspace-browser slot, so the standard composer still receives the real current Session.

See SPEC.md for acceptance criteria and docs/architecture.md for the lifecycle.

Contributing

Issues and focused pull requests are welcome. Read CONTRIBUTING.md and run the package check before submitting a change.

License

MIT. This is an independent community project and is not affiliated with or endorsed by DeepSeek.