sgzxs/dsh-global-task-list
DeepSeek Harness 全局任务库插件,具备跨会话持久化、实时生成式UI浏览器面板及子智能体任务同步功能。
Project Overview项目介绍
A global task-list plugin for the DeepSeek Harness: a cross-session persistent task library exposed as five model tools (task_add, task_list, task_update, task_delete, taskui_probe) writing to a storageDomain unit, with subagent job status auto-synced via jobId. A bottom-right floating panel subscribes to SSE and refreshes on every change, supporting manual status edits, deletion, and a generative split loop. Tasks may carry a surface document rendered as a whitelisted component tree (progress, timeline, table, DAG, etc.). Caveat: the DAG surface renders nodes as chips plus an edges list, not a positioned graph.
DSH 全局任务列表面板:为 DeepSeek Harness 提供跨会话持久化任务库,五个模型工具(task_add/list/update/delete/probe)写入 storageDomain 子域,关联 jobId 自动同步子 agent 终态;右下角常驻面板通过 SSE 实时刷新,支持手动改状态、删除与拆分。任务可携带 surface 结构化文档渲染生成式 UI(进度条、时间线、表格、DAG 等)。注意:DAG 仅渲染为节点芯片与边列表,不做定位布局。
请帮我了解并安装插件:【dsh-global-task-list】【https://github.com/sgzxs/dsh-global-task-list】
Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。
Or use CLI install (for developers)或使用命令行安装(适合开发者)
CLI Install命令行安装
dsh plugin --profile web add dsh-global-task-list
把 sgzxs/dsh-global-task-list 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-global-task-list
A global task library for the DeepSeek Harness: five model-facing CRUD tools, a persistent browser panel, subagent job status synchronization, and a generative-UI surface renderer. Tasks persist across sessions in a storageDomain unit and survive restarts.
全局任务列表插件:为 DeepSeek Harness 提供一个跨会话持久化的任务库,附右下角常驻面板(轨迹等非对话界面自动隐藏)。主 agent 用
task_add创建任务(带描述与进度),spawn 子 agent 后关联jobId自动同步终态;面板支持手动改状态、删除、拆分,并实时(SSE)刷新。任务可携带surface结构化文档渲染生成式 UI(进度条、时间线、表格、DAG 等)。
What it does
- Global task library —
task_add/task_list/task_update/task_deletemodel tools over a cross-sessionstorageDomainunit (task_ui). Tasks carry a title, status (pending/running/done/blocked/failed), description,parentId,dependsOn, an optionalprogress({ text, percent? }), and an optionalsurfacedocument. - Persistent panel — a bottom-right floating panel (mounted in the session-scoped
conversation.input.dockslot) subscribes to a Server-Sent Events channel (/task-ui/events) and refreshes on every task change, letting the user change status, delete (with confirmation), and trigger a generative split loop. Styled with--dsw-*theme tokens and localized zh/en. It disappears on non-conversation views (e.g. trajectory). - Subagent job sync — a task linked to a background job via
task_update(id, { jobId })auto-advances its terminal status through theJOB_STATUS_MAP(completed→done,failed→failed,killed→blocked). Tasks are created explicitly by the master agent, never auto-registered from arbitrary background jobs. - Generative UI surface — a task's
surfacefield renders a whitelisted, recursive component tree:section,metric,statusBadge,progress,table,list,timeline,dag,disclosure.
Install
Installing from npm is the recommended path — the package ships prebuilt lib/, so no build step runs at install time. The GitHub alternative pulls source and builds on install (see below).
# npm (recommended, prebuilt — no build step at install)
dsh plugin --profile web add dsh-global-task-list
# GitHub (alternative: source + prepare build)
dsh plugin --profile web add github:sgzxs/dsh-global-task-list#v0.1.5
The package declares dsh.bundle, so dsh adds it to the profile's bundles automatically. Requires a DSH installation with @deepseek-ai/dsh-base and the client surface (dsh-web-app) present.
GitHub install: allowBuilds
Installing from GitHub pulls source, so pnpm must run the package's prepare script to build lib/. pnpm blocks that by default for git-hosted packages, and its allowBuilds key matches the exact commit (a package-name-only entry does not match — see pnpm#12367). The first add therefore fails with an ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED message that prints the exact key to allow. Copy that exact key into the profile's pnpm-workspace.yaml, then re-run:
allowBuilds:
dsh-global-task-list@git+https://github.com/sgzxs/dsh-global-task-list.git#<commit>: true
Pin a tag (e.g. #v0.1.5) in the install command so the commit hash — and therefore the allowBuilds key — stays stable.
Requirements
- DeepSeek Harness (
@deepseek-ai/dsh) at0.1.2-alpha.2or later: the client bundle importsdefineStorefrom@deepseek-ai/dsh-client-store, a browser module-table entry that does not exist on earlier hosts (there the panel fails to load withFailed to load plugins). Verified against0.1.5-rc.2. - The Host half resolves
@deepseek-ai/dsh-tools,@deepseek-ai/dsh-llm,@deepseek-ai/dsh-storage-domain, andzodfrom the profile's node_modules. - The client bundle is prebuilt (
lib/client.js) and ships with the package; no build step runs at install time.
Build (development)
npm install
npm run build:host # tsdown bundles src/index.ts → lib/index.js
npm run build:client # tsdown bundles src/client → lib/client.js
Both halves are TypeScript: the Host half (src/index.ts) compiles to plain ESM, and the client half (TSX) compiles with CSS Modules (lightningcss) into a __ModuleLoader__ closure-factory bundle.
Model Experience
Request context and condition
The package contributes five model-facing tools to the agent's tool catalog.
What the model sees
taskui_probe— reports the plugin's host-alive status and current task count.task_list— lists every task as- [status] title (id, job=...).task_add(title, description?, parentId?, dependsOn?, surface?, progress?)— creates a task (initialpending).task_update(id, title?/status?/description?/parentId?/dependsOn?/surface?/progress?/jobId?)— patches one task;progressis{ text, percent? },surfaceaccepts a structured generative-UI document, andjobIdlinks the task to a background job for terminal-status sync.task_delete(id)— deletes one task.
The surface document is a recursive, whitelisted component tree (section / metric / statusBadge / progress / table / list / timeline / dag / disclosure) rendered by the browser panel. Unknown kinds are ignored by the renderer; the Host stores the document as opaque JSON.
Token effect
Five tool schemas plus their descriptions are injected into the system-prompt tool catalog. Fixed cost; no per-task or data-dependent prompt growth.
KV Cache effect
Independent of the agent's request-context assembly. The tool schemas are static, so the prompt prefix is stable across requests; task-list content does not enter the prompt. A plugin version change replaces the tool schemas and invalidates reuse.
Known Limitations and Deferred Work
- No graph layout — the
dagsurface renders nodes as chips plus an edges list, not a positioned graph. - Surface is opaque — the Host stores
surfaceas unvalidated JSON (z.record); malformed kinds fall back to "ignored" in the renderer rather than a load-time error. sync-profile.mjsis a local dev helper — it is not published (excluded viafiles); usedsh plugin addfor installation.
Acknowledgements
Inspired by HomeRail — its generative-UI (A2UI) idea of "the agent emits a bounded, whitelisted component tree that a host renders into a glanceable view" shaped this plugin's surface document and component catalog (section / metric / statusBadge / progress / table / list / timeline / dag / disclosure), as well as the principle of preferring built-in rendering over dumping raw logs.
ma-pony/deepspider
TOBYCAI/dsh-sessions-manager
610la/dsh-notification-center
kaixinbaba/dsh-complete-notify
AbcdefgXW/dsh-toolbox-web
callmesoul/deepseek-kanban-plugin
YeqingTang/dsh-task-watcher