DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

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

plannotator-dsh

Plannotator Dsh

在 Plannotator 浏览器界面中审阅来自 DeepSeek Harness 的文件、文件夹或网页,并以消息形式获取批注。

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

npx -y @deepseek-ai/dsh plugin --profile web add github:martyartem/dsh-plannotator#aea1b20ea5ba773ee1acc50b6d596533534fbccf
README兼容性版本

兼容性与来源证明

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

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

版本

0.1.0stable
2026/9/25

相关插件

正在加载相关插件…

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

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Subagent Codex@deepseek-ai/dsh-subagent-codex基于官方 app-server 协议的一次性 Codex 子代理提供程序

README

dsh-plannotator

English | Русский

Review a file, a folder or a web page in the Plannotator browser UI — the annotations come back to the agent as a normal message in the conversation.


Why this plugin exists

Two things get in the way when a review is started from inside a DSH session, and each one hurts differently.

What gets in the wayHow it looks to youWhat this plugin does
The review blocks the callThe review server waits for a human for minutes, while a DSH bash call gives up far sooner: the process is pushed to the background, and killing it loses the notes you already wrote, with no record.Starts the review in the background, answers with the link immediately, and delivers the decision into the conversation when the human submits it.
plannotator is not foundA DSH session starts with PATH=/usr/bin:/bin:/usr/sbin:/sbin, so an install in ~/.local/bin/plannotator is not on it — the agent sees plannotator: command not found and the review never starts.Resolves the CLI itself: plugin config → PLANNOTATOR_BIN → PATH → well-known install locations.

Features

SurfaceWhereWhat it does
Review buttonDocument preview header, right sidebarStarts a review of the file on screen. A file Plannotator would refuse (PDF, image, Office, an exotic suffix) is reviewed as its containing folder, so the button is never a dead end.
/plannotator <file|folder|url>ComposerThe same review, started from the text box — and the agent's non-blocking entry point.
/plannotatorComposerReviews this session's workspace folder.
/plannotateComposerAlias.
Delivered annotationsConversationThe decision record (--json) is steered back as a message, so the agent addresses the annotations in the same chat.

That is the whole surface: one sidebar seat, one command, two HTTP routes, and no flags.

Requirements

  • DeepSeek Harness >=0.1.0-rc.5 (declared in package.json).
  • Node >=20 for the host half. There are no runtime dependencies.
  • The Plannotator CLI installed somewhere the plugin can find: plugin config, PLANNOTATOR_BIN, PATH, or one of ~/.local/bin, /usr/local/bin, /opt/homebrew/bin, ~/.bun/bin, ~/.cargo/bin. Without it the plugin still loads and reports how to point it at the CLI.

Install

From the Harness plugin manager

Open Plugins in the app and install this repository:

https://github.com/martyartem/dsh-plannotator

Then restart the app. The npm package name is plannotator-dsh; the repository is dsh-plannotator.

From a checkout

Clone anywhere outside ~/.dsh, and install it as a link so edits reach the profile:

git clone https://github.com/martyartem/dsh-plannotator ~/Projects/plannotator-dsh

Add it to your profile (~/.dsh/profiles/<profile>/package.json) and restart:

{
  "dependencies": { "plannotator-dsh": "link:/Users/you/Projects/plannotator-dsh" },
  "dsh": { "profile": { "bundles": ["…", "plannotator-dsh"] } }
}

scripts/uninstall.sh [profile] [--purge] rolls that back.

Configuration

Set values in your profile's patch layer (cordis.patch.yml) — the user patch layer survives DSH upgrades:

- id: plannotator-dsh
  name: plannotator-dsh
  config:
    gate: true
    timeoutMs: 1800000
KeyDefaultMeaning
binaryauto-detectexplicit path to the plannotator CLI
binaryFallbackswell-known listextra candidate paths
origindshthe PLANNOTATOR_ORIGIN every review is stamped with
gatefalseadd an Approve button to every review
openBrowsertruelet Plannotator open the browser tab
portrandomfix the local review-server port
timeoutMs900000how long a review may stay open before it is stopped
readyTimeoutMs20000how long to wait for the local server to report readiness
autoFollowuptruesteer the annotations back into the conversation
debugfalsealso write the plugin log to stderr
dataDir~/.dsh/storages/plannotator-dshwhere plannotator-dsh.log lives

How it works

  • Host half — lib/index.js: registers the command and the two routes, resolves the CLI and the workspace, starts the Plannotator process in the background, waits for its readiness file, then reads the decision record from its stdout and steers it into the session.

  • Browser half — lib/client.js: hand-written in the host's module-loader format (window.__ModuleLoader__.load), so it needs no bundler and only react from the platform seed table. It contributes its seat through ctx.slots.inject(seat, () => ctx.slots.register(…)), the documented way to be independent of plugin start order.

  • HTTP routes — the browser half never imports a host service:

    RoutePurpose
    GET /plannotator/review?target=<path|url>[&session=<id>]starts a review in the background, answers { ok, url, label, gate }
    POST /plannotator/logforwards a client-side note into the plugin log
  • Workspace resolution, in order: the live agent's session directory → DSH_WORKSPACE_DIR / DSH_CWD → ctx.workspaceRegistry → the cwd in the session-log header → the newest session → the host process cwd.

  • Delivery contract — the message the agent receives is a DSH UserMessage with every field the type requires: id, role, content, and a producer-owned source.kind of plugin:plannotator-dsh. The append path accepts a message without id, but the restore path then rejects the whole session (session event at seq N lacks an identified message) and the history stops loading. The plugin mints the id itself, and the offline suite asserts the message carries one.

Compatibility

DependencyRange
DeepSeek Harness>=0.1.0-rc.5
Node>=20, built-ins only
Plannotator CLIthe documented contract: argv annotate <target> --json, the readiness file (PLANNOTATOR_READY_FILE), the stdout decision record, PLANNOTATOR_ORIGIN, PLANNOTATOR_PORT

Troubleshooting

Everything is logged to ~/.dsh/storages/plannotator-dsh/plannotator-dsh.log. After a DSH or Plannotator upgrade, this is the whole check:

grep -E "loaded|apply:|registered|unavailable|steering failed" \
  ~/.dsh/storages/plannotator-dsh/plannotator-dsh.log | tail -12
LineMeans
loaded …; binary=…the host loaded the plugin and found the CLI
registered /plannotator/review and /plannotator/logthe HTTP routes are in place
client[info]: document preview action registeredthe Review button's seat exists
document preview action unavailable: …the seat was renamed or is gone
steering failed: …the host rejected the delivered message
session … timed out after …the review outlived timeoutMs and was stopped

If the first line is missing, the plugin did not load at all — usually an injected service the host renamed.

Development

Nothing but Node is needed: no install step, no bundler, no booted profile.

npm test                      # both offline halves
node scripts/selftest.mjs     # host half: 35 checks — parsing, CLI/workspace resolution, sessions, routes
node scripts/client-test.mjs  # browser half: 12 checks — bundle shape, the single seat, the cold-boot race
node scripts/live-test.mjs    # against the real Plannotator CLI and its HTTP API
lib/
  index.js      host row: command, HTTP routes, agent targeting
  command.js    input → Plannotator argv
  review.js     a review in the background: readiness, decision, steering, timeout
  config.js     config defaults, log file, helpers
  binary.js     PATH-independent CLI discovery
  workspace.js  which directory a relative target resolves against
  client.js     browser half: the document-preview Review seat
scripts/        offline suites, live smoke test, uninstall helper

Notes and limits

  • annotate accepts markdown, plain-text config/data files, HTML, URLs and folders. .env is refused by Plannotator itself.
  • Git diffs, pull requests and the archive are deliberately not here: the Plannotator CLI covers them directly, and a slash command that blocks for minutes is exactly what this plugin exists to avoid.
  • A review nobody finishes (process killed, machine asleep) yields no decision; the plugin says so instead of pretending the review was empty.
  • The plugin never scrapes the browser UI: it uses the CLI's documented stdout contract and its readiness file only.

License

MIT