DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

@playform/ets-plugin-dsh-workspace-reflect

Ets Plugin Dsh Workspace Reflect

workspace-reflect 服务:一个 DeepSeek Harness 插件,提供 LATER-STAGE 代码块反射 API——针对受管理的表示形式,每次将 AST 感知的重命名/连接/替换分别封装为一次调用(family map 的 reflect 角色;workspace re

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

npx -y @deepseek-ai/dsh plugin --profile web add @playform/ets-plugin-dsh-workspace-reflect@0.2.1
README兼容性版本

兼容性与来源证明

Ets Plugin Dsh Workspace Reflect 以 @playform/ets-plugin-dsh-workspace-reflect 发布,当前版本为 0.2.1。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
npm
Registry 更新时间
2026/11/4

版本

0.2.1stable
2026/10/28
0.2.0stable
2026/10/25
0.1.0stable
2026/10/25

相关插件

正在加载相关插件…

最新版
0.2.1
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
48.2 kB
文件数
56
Surface
any
许可证
CC0-1.0
发布源
npm
GitHub
★ 2
周下载
280
安全扫描
✓ v0.2.1 扫描通过
最近提交
2026/11/4
查看源码 ↗项目主页 ↗
README Badge

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Better Sidebardsh-better-sidebarBetter Sidebar for DSH — 在一列中提供文件树、编辑器、变更、任务和侧边聊天,并为每个对话单独显示。同时提供服务,供其他插件注册侧边栏标签页和文件查看器。Client Ui Git Graph@linxin666/dsh-client-ui-git-graph外部 dsh Web GUI 插件:空会话 Git 分支选择器和 Git 图,包含实际的主机端 Git 操作与防护,作为 dsh 配置文件包Ssh@linxin666/dsh-sshdsh Web GUI 的远程 SSH 操作:主机配置存储(~/.dsh/dsh-ssh.json,可从 ~/.ssh/config 导入)、支持跳板主机的持久化 ssh2 连接池、exec / PTY Web 终端 / SFTP 传输 / 本地端口转发隧道 / 集群执行Update@linxin666/dsh-update用于 dsh Web GUI 的自更新插件:探测 npm 上是否有更新的系列版本,并在原地运行所属配置的 pnpm 更新;可通过设置图标旁侧边栏中的触发器启动,并显示发布说明面板

README

@playform/plugin-dsh-workspace-reflect

v0.1.0 - UNPUBLISHED - plan: Workspace-Family/REFLECT

The role

The workspace-reflect service serves the DeepSeek Harness plugin family (the Classic release).

It fills the later stage service-provider role: the code-block reflective ops, the AST-aware rename/connect/replace from a single call each, over the managed representations.

The one-call semantics

Each operation bundles the whole transformation, so one call replaces a tool choreography.

The spans are 1-based and inclusive (the span grammar of the graph).

OpRequestBehavior
renamepath, startLine, endLine, oldName, newName, scope?The semantics service's scope-resolved plan first (its edits filtered to the operation's scope); the whole-word textual engine as the fallback. Zero occurrences is rejected.
connectfromPath, toPath, symbol?Inserts an import of symbol from the relative specifier of toPath into fromPath; without a symbol, a reference comment. Already-connected is rejected.
replacepath, startLine?, endLine?, text, node?, fingerprint?A graph NODE target (the AST source) with its content fingerprint verified before the write; or a plain span (the textual form). The span guard rejects a span outside the file or wider than maxBlockLines.

The AST-aware targeting

A replace may name the frozen node id of the workspace graph (node: "Block:<path>:<line>:body") and the content-derived fingerprint of the node.

The graph (ctx.workspaceGraph, probed and never injected) supplies the span, and the plugin verifies the fingerprint against the current text with the formula of the graph and rewrites only that span.

A mismatch refuses with rejected <path> (fingerprint mismatch) and writes nothing.

With the graph absent the explicit span of the caller is the fallback, and the plugin still verifies the fingerprint.

A rename asks the workspace-semantics service (ctx.workspaceSemantics, probed and never injected) for the scope-resolved plan, which the service may deepen through the harness LSP seam, and it applies the edits of the plan inside the scope of the operation.

The textual whole-word engine is the fallback when the service is absent, refuses, or has no edit in scope.

The reply is part of the type

Every operation returns the CommitReply union (Interface/Reply.ts) and never a boolean or a thrown error:

status: "applied" | "conflict" | "denied" | "rejected" | "recovery-required" | "outcome-unknown";
  • applied.

    The operation is written, and the new version travels with the reply.

  • conflict.

    The version fence failed, so the file moved under the operation and nothing was overwritten.

  • denied.

    The plugin is disabled, so the cold mount answers denied.

  • rejected.

    The plugin refused before any write: a malformed request, an oversized file or span, no matches, an already connected path, a stale fingerprint, or an absent graph.

  • outcome-unknown.

    The write failed in a way that is neither a version conflict nor a confirmed failure.

The publish path and the carry

Writes go only through the guarded write of the factory (the replaceIfVersion fence, the P4 sandbox policy, the stash pre-registration), never through a raw fs write.

After an applied operation the plugin probes the optional workspaceGraph sibling service (never injected) and asks it to re-index the changed file (the reflective carry), and an absent graph is an honest skip.

Service surface (ctx.workspaceReflect)

The surface is rename(op), connect(op), replace(op), and act(op) (the dispatch by kind), all async and all returning the reply union.

The configuration

Every knob is volatile and hot-editable without remounting: logFile (~/.dsh/playform/ets-plugin-dsh-workspace-reflect.log), log, enabled (false - the IDLE-forever posture), propagate (block | file, default block), maxFileBytes (1000000), and maxBlockLines (5000).

The plugin ships disabled and enables only by an explicit ACTIVATE.

The plugin adds no new knob, because the graph and the semantics service are optional siblings.

The policy block (D6) - the write gate

The config carries the shared per-action allowlist (policy: Policy(), composed from the factory's block) and maps it to State.Allow:

actiondefaultactiondefault
readautowriteapprove
indexautocommitapprove
recordautospawnapprove
suggestautomessageauto

The reflective WRITES are the gated actions, so replace and rename consult the write verdict before the plugin reads or writes the file.

An approve verdict (the shipped default) refuses the operation with the byte-exact replace held <path> (policy write=approve) or rename held <path> (policy write=approve) line, the reply is rejected with the policy holds the replace|rename (write=approve), and zero writes reach the filesystem.

The fingerprint targeting is unchanged: the policy is the OUTER check, and the fingerprint verification is the inner one.

Flip policy.write to auto (or let a resolved pack override it) to let the next operation reach the write path.

The block is one volatile object, so a policy flip is hot-editable without a remount.

The policy section of a resolved pack overrides the defaults for each action (the wiring is the next refinement).

The ledger

Ledger lines (module-owned, prefixed reflect:): activated, disabled, rename, connect, replace, deepened, denied, rejected, conflict, carried, failed, and the two policy holds replace held <path> (policy write=approve) / rename held <path> (policy write=approve).

The new rejected reasons (fingerprint required for a node target, fingerprint without a node target, fingerprint mismatch, node path mismatch, node not targetable, node not found, graph absent) are documented in SCHEME.md section 5.

The plan

  • Workspace-Family/REFLECT - the reflective ops.

License

CC0-1.0.