DeepSeek Harness Hub
← 返回列表

笔记工作流包Jacobinwwey/dsh-NotEMD

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
需源码安装

审批门控自动生成笔记索引、图表与幻灯片导出

暂不能直接安装(需源码编译或环境不满足):缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。 · 最近上游提交 2026/8/29 · 已提供中文文档

DeepSeek Harness 的便携式 NoteMD 工作流包:审批门控的 markdown 自动化、知识索引、图表、SVG 预览和 Slidev 导出。

综合分
33.1
GitHub 分
33.1
用户评分
★ Stars
0
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add Jacobinwwey/dsh-NotEMD
缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装,改用 GitHub 源安装
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

npm 包dsh-notemd-workspace(未发布到 npm,仅可源码安装)
Node 引擎要求 >=22.19.0 · 基线 Node 22.19 满足
dsh CLI 依赖未声明 dsh 版本约束
入口文件缺少入口声明

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/18 16:59:50

用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-NotEMD

npm
DeepSeek Harness
Node.js
Repository

面向 DeepSeek Harness 的可移植、审批门控 NoteMD 工作流 bundle。它针对显式工作区根目录运行,将 canonical source 与派生 artifact 统一管理,不依赖 Obsidian API、编辑器状态、命令或 UI 宿主。

当前版本: dsh-notemd@0.1.1 · GitHub 仓库

安装

支持的验收基线:

| 前提 | 版本或策略 |
| --- | --- |
| Node.js | >=22.19.0 |
| pnpm | 10.7.1(workspace 的 packageManager) |
| DeepSeek Harness | 0.1.0-rc.5 验收基线 |
| Cordis | @deepseek-ai/cordis 4.0.1 验收基线 |

从公共 npm registry 安装,并将同一版本加入 DSH profile:

~~~
npm install --save-exact dsh-notemd@0.1.1
dsh plugin --profile notes add dsh-notemd@0.1.1
~~~

npm install 让 Node workspace 可以解析该包;dsh plugin ... add 才会把 bundle patch 激活到指定 profile。只执行前者不会启用 DSH 插件。

离线或未发布构建使用已验证的 tarball:

~~~
git clone git@github.com:Jacobinwwey/dsh-NotEMD.git
cd dsh-NotEMD
pnpm install --frozen-lockfile
pnpm build
pnpm pack:bundle
dsh plugin --profile notes add ./artifacts/dsh-notemd-0.1.1.tgz
~~~

pnpm pack:bundle 会内嵌尚未发布的 @notemd-harness/ 实现包;minisearch 保持普通 runtime dependency,由 profile 包管理器解析。打包校验要求 artifacts/ 下恰好有一个 .tgz,反复打包前请清理旧 tarball。

仓库中的 fixture profile 是 profiles/notemd,仅用于验收,不代替部署方自己的 profile。安装后可检查最终生效配置:

~~~
dsh --profile notes --dump-config
~~~

快速使用

bundle 首先暴露规划工具。典型请求:

~~~
读取 notes/architecture.md。分别生成 wiki-link 与 Mermaid 修复的不可变计划。
展示受影响路径和 revision。请求审批;只有 revision 仍匹配的计划才允许应用。
~~~

写入协议固定且可审计:

~~~
read -> immutable WorkspaceMutationPlan -> approval -> apply -> committed receipt -> workspace event -> index update
~~~

只有匹配的 committed receipt 才会生成工作区变更事件。conflict、rejected、cancelled、failed、recovered 以及不一致 receipt 都不会被当作可索引内容变化。

能力矩阵

| 区域 | 面向模型的入口 | 契约 |
| --- | --- | --- |
| 工作区 | notemd_workspace_list、notemd_workspace_read | 工作区相对 Markdown 路径、根目录 containment、不可变 revision。 |
| 知识索引 | notemd_knowledge_search、notemd_knowledge_retrieve | 只读派生索引;检索重新读取 Vault 并返回 citation。 |
| 笔记工作流 | notemd_plan_ | Wiki-link、标题生成、翻译、概念提取、Mermaid/公式修复、章节拆分、原文提取、文件夹批处理、重复检查与人工确认去重;规划不写入。 |
| 联网研究 | notemd_research_discover、notemd_research_capture_evidence、notemd_plan_research_synthesis | 使用 DSH web;持久化 evidence 只保存身份、citation 与 digest,不把不可信工具输出作为事实。 |
| 修改 | notemd_request_plan_approval、notemd_apply_approved_plan | 一个 plan digest、一个 approval receipt、一次消费;精确 revision 前置条件;陈旧 plan fail closed。 |
| 持久化作业 | notemd_job_start_、notemd_job_resume、notemd_job_status、notemd_job_cancel | 异步、仅规划 checkpoint,位于 /.notemd/jobs/;作业绝不应用 plan。 |
| 图表与预览 | notemd_plan_mermaid_artifact、notemd_plan_vega_lite_artifact、notemd_plan_json_canvas_artifact、notemd_plan_html_artifact、notemd_plan_editable_svg_artifact | canonical source 加显式标记的 SVG preview。 |
| 专用图形 | notemd_plan_drawio_artifact、notemd_plan_drawnix_artifact、notemd_plan_circuitikz_artifact | canonical source 加 SVG projection;native export 受 capability 门控,不会静默替换。 |
| Slidev | notemd_plan_slidev_source、notemd_plan_slidev__export | source、standalone HTML、PDF、PNG、native PPTX、MP4 是独立具名 provider。 |
| 能力状态 | _render_status、_export_status | Playwright、FFmpeg、Draw.io、Tectonic 或 adapter 缺失时返回带结构化诊断的 unavailable。 |

刻意不存在 generic renderer 或 export selector。不同 target 的保真、进程 allowlist、staging 与失败语义不同,单一多态开关会隐藏关键契约。

Composite workflow

one-click-extract@1 是源插件 One-Click Extract 行为的具名 composite workflow:

~~~text
add-links -> generate-complete -> repair-mermaid
~~~

需要一个 aggregate immutable plan 与一份 approval receipt 时,调用 notemd_plan_one_click_extract。必须显式提供 sourcePath、conceptFolderPath、completedFolderPath、mermaidFolderPath,以及可选的 mermaidErrorFolderPath;独立 bundle 不推断 Obsidian active-file 或 UI folder state。需要持久化、只规划的作业时调用 notemd_job_start_one_click_extract;executor key 为 one-click-extract-v1,持久化 record 仍保留 workflow version 与 definition digest 用于 drift 检测。

Composite 使用 virtual workspace overlay。后续步骤可以读取前一步规划出的 Markdown write,但 approval 前不会写物理工作区。collision、stale virtual revision、binary dependency、budget overflow 与 net no-op 都会 fail closed。

Profile 配置

bundle patch 默认把有状态 provider 指向 process.cwd()。部署 profile 覆盖某一行时必须替换完整 config 对象;DSH patch 不会深度合并。请保留完整字段集:

~~~yaml
- id: notemd-vault
config:
workspaceRoot: !!js process.env.NOTEMD_WORKSPACE_ROOT

- id: notemd-jobs
config:
workspaceRoot: !!js process.env.NOTEMD_WORKSPACE_ROOT
concurrency: 2

- id: notemd-workspace-changes
config:
scanIntervalMs: 5000

- id: notemd-approval
config:
workspaceRoot: !!js process.env.NOTEMD_WORKSPACE_ROOT
approvalTtlMs: 300000

- id: notemd-research
config:
workspaceRoot: !!js process.env.NOTEMD_WORKSPACE_ROOT

- id: notemd-artifacts
config:
workspaceRoot: !!js process.env.NOTEMD_WORKSPACE_ROOT

- id: notemd-llm
config:
provider: deepseek
model: deepseek-chat
maxTokens: 4096
promptPolicyId: notemd.default.v1
~~~

默认 notemd-llm provider 注入 DSH llm。其封闭 route policy 只接受 provider、model、maxTokens、promptPolicyId。endpoint、key、header、transport retry 与 model discovery 会被拒绝,不会被忽略。凭据、adapter 与 provider 选择由 DSH 配置;NoteMD 不会读取或持久化它们。

显式的 dsh-notemd/llm-openai-compatible-legacy entry 仅供迁移期使用,为尚不能使用 DSH routing 的部署提供旧 OpenAI-compatible diagnostic 与 model-discovery 工具。使用时必须替换默认 notemd-llm row,不能同时加载,因为两者都提供 notemdTextTransformer。

图表与导出

由于 DSH 没有 Obsidian preview host,SVG 是默认 preview derivative。这是预览策略,不代表每个 target 都有等价的 SVG export:

- Mermaid、Vega-Lite、JSON Canvas、HTML、editable SVG 保留 canonical source,并生成带标签的 SVG preview。
- Mermaid repair 前先运行 deterministic normalization。versioned semantic/render/export catalog 对 timeline、swimlane、quadrant payload 做类型化约束;svg-preview 是显式 derivative,不代表 native target parity。
- Draw.io、Drawnix、Circuitikz 保留 canonical source;只有受控 executable 或 adapter 可用时才暴露 native SVG 或 PDF。
- Slidev source preparation 是确定性的,并强制 offline fonts。HTML、PDF、PNG、PPTX、MP4 是 approval-gated planner 后的独立 provider。
- 外部进程在 request-scoped staging 目录执行,返回 digest-verified staged asset,绝不直接写工作区。

接受的 Slidev runtime 是 NoteMD fork,不是 upstream Slidev:

~~~
origin: github:Jacobinwwey/slidev
revision: bbcb2efae709c2ebaa96bda522cd6c192476817c
package: @slidev/cli@52.16.0
~~~

该 fork 的 standalone HTML 输出为 index-standalone.html。PPTX 保持 native OOXML;MP4 是 Slidev PNG frames 加 FFmpeg。SVG 不会被宣传为 PPTX 或 MP4 的 fallback。

运行边界

- bundle 不是 Obsidian 兼容层。UI、编辑器选区、命令、modal 与 preview hosting 仍由宿主负责。
- notemdWorkspaceChanges 首次捕获 snapshot,之后通过有序轮询协调。默认间隔 5000 ms,合法范围 250 到 60000;扫描成本与工作区 Markdown 规模成正比。
- 事件只携带路径、revision、origin、causation id 与时间戳,不携带笔记内容或凭据。
- 中断的 running 作业恢复为静止的 queued record。notemd_job_resume 是显式继续操作,不是写入授权或任意重放。
- 文件型 store 没有跨进程 lease;一个工作区只运行一个 bundle 进程。
- 默认 DSH route 不注册 notemd_provider_diagnostic 或 notemd_provider_models;它们只存在于显式 legacy transport entry。
- @deepseek-ai/* API 以验收使用的固定 DSH source 为准;未来 DSH 版本可能需要兼容性更新。
- 第三方 DSH plugin 会在宿主进程执行代码。生产 profile 只安装可信包,并在启动前检查实际生效的 patch。

开发

代码遵循 DSH/Cordis composition model:每个 provider 负责一个 service 或 capability,注册是可逆 effect,面向模型的 tool 消费稳定 seam(llm、web、subprocess、tools)。不要把 Obsidian 或第二套宿主 loop 引入 bundle。

关键入口:

| 区域 | 源码 |
| --- | --- |
| Bundle manifest 与 patch | packages/notemd-bundle |
| Tool 注册 | packages/notemd-tools/src |
| Workflow planner | packages/notemd-workflows/src |
| Artifact provider | packages/notemd-artifacts/src、packages/notemd-export-slidev/src |
| 已安装 profile 验收 | scripts/accept-dsh-profile.ts |
| 打包 bundle 校验 | scripts/verify-bundle.ts |

先运行聚焦门禁,再运行发行门禁:

~~~powershell
pnpm typecheck
pnpm lint
pnpm test
pnpm test:coverage
pnpm build
pnpm pack:bundle
pnpm verify:bundle
pnpm accept:dsh
pnpm capability:lane
git diff --check
~~~

accept:dsh 会创建隔离的 DSH_HOME,通过固定版本 source DSH CLI 安装打包 tarball,启动已安装的 ToolRuntime,检查审批与陈旧 revision 行为、仅规划作业、research fail-closed,以及图表/Slidev capability surface;记录证据后删除临时 profile 与 fixture workspace。

新增 capability 时,应同时定义 service contract、provider 与 consumer。面向模型的行为通过 ctx.tools 注册,使用 DSH 的 llm/web/subprocess seam,不创建私有 transport,并增加真实安装产物的验收断言。可选 executable 必须显式表达:缺失是 capability 结果,不能变成格式替换。

发布

公共 npm 包为无 scope、public package。维护者应只发布通过安装态 profile 验收的同一个 tarball:

~~~powershell
pnpm install --frozen-lockfile
pnpm typecheck
pnpm lint
pnpm test
pnpm test:coverage
pnpm build
pnpm pack:bundle
pnpm verify:bundle
pnpm accept:dsh
npm publish ./artifacts/dsh-notemd-0.1.1.tgz --access public --registry=https://registry.npmjs.org/
~~~

包内发布的 README.md 是 npm canonical README。同一份中文文档会以 docs/README.zh-CN.md 发布,并继续由 canonical 文档链接;它不放在包根目录,以避免 npm 把它选为 readmeFilename。

维护者账号启用 npm 2FA 时,npm publish 可能暂停等待 OTP;普通使用者不需要维护者的 npm 登录或 OTP。

发布后验证 registry 元数据:

~~~powershell
npm view dsh-notemd version --registry=https://registry.npmjs.org/
npm view dsh-notemd@0.1.1 readmeFilename --registry=https://registry.npmjs.org/
~~~

预期值是 0.1.1 与 README.md。

文档与外部契约

主页只保留可执行的使用与开发信息;架构与验收证据放在仓库双语文档中:

- 架构规范(English) · 中文
- 验收证据(English) · 中文
- DeepSeek Harness architecture
- DeepSeek Harness development guide
- DeepSeek Harness capability seams
- DeepSeek Harness testing policy
- awesome-dsh-plugin

状态

本仓库是 developer-preview bundle。公共契约是打包 tarball 与最终生效的 DSH profile patch,不是 Obsidian plugin API。DSH 仍处于 1.0 之前,后续版本可能需要兼容性更新。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群