dsh-writing-workbench
Verifieddsh-writing-workbench · v0.1.0 · MIT · Web UI
Chinese writing workbench for DeepSeek Harness Web, with AI drafting, revision review, source materials and version history.
Install
dsh plugin add dsh-writing-workbench Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Creators
Readme
创作工作台 v0.1
可运行的 React + TypeScript + Tiptap 写作工作区,支持作为 DeepSeek Harness Web 外部插件加载,也可独立在本机运行。
安装发行版
需要 Node.js 24 或更新版本。兼容版本为 @deepseek-ai/[email protected],当前支持本机 Web 模式。
npm install -g pnpm@10 @deepseek-ai/[email protected]
dsh plugin --profile web add [email protected]
dsh web
安装会自动启用插件,无需下载源码、手动构建或指定 --patch。打开 dsh 输出的地址,完成 Harness 的首次设置,点击左侧「创作工作台」。AI 模型和 API Key 在 Harness 设置中配置。
文章默认保存在用户目录下的 .dsh/writing-data/writing.json;设置 DSH_HOME 时改为该目录下的 writing-data/writing.json。该路径不随启动目录或插件更新变化。请备份整个 writing-data 目录;同一目录只应由一个服务进程使用。
已有用户若原来使用 D:/writing-data 或其他自定义目录,请保留原来的 --patch 参数,或在 Harness 的 $DSH_HOME/profiles/web/cordis.patch.yml 中配置:
- id: writing-workbench
config:
dataDir: D:/writing-data
maxOutputTokens: 4096
这会继续读取原文章,发行版不会自动搬移既有数据。尚未验证 Desktop/Electron 或远程多人使用。
已实现
「生成全文正文」按标题、正式章节结构、选用素材和文风起草完整候选稿,点击「替换全文正文」后保存。目标长度在文章资料中独立设置。
正式大纲来自正文标题,改名和调序后同步 AI 上下文。采用 AI 大纲直接建立可起草章节,并保留未分节正文、已有章节正文、素材和证据关联;未匹配章节明确列出并保留。旧文字大纲只作为导入参考,先预览再采用。
空章节显示「起草本节」;已有正文显示「重写本节/续写本节」。接受按钮明确区分填入、替换和末尾追加,续写不改动已有正文和下一节。
标题旁提供拟标题和优化标题入口,支持三个候选逐个选用;长标题自然换行,采用后定位标题。
文章编辑后提前标明旧建议过期并禁用接受;重试使用最新文章。过期选区操作要求重新选择。旧大纲导入只重新预览,不隐式调用模型。
本次要求按操作隔离,返回同一操作可恢复要求;在未选择操作时新填写的要求用于下一次选择。文章长度、读者和文风属于文章设置,独立于本次要求。
历史版本可查看本次修改或与当前稿比较,以删除线/新增标记展示变化。每篇保留最近 5 个不同版本,切换不新增历史记录,同一批 AI 建议逐处接受合并为一个版本。
首次整理旧历史时,将原数据备份为数据目录下的
writing.before-history-limit.json。内部更新序号用于防止旧建议覆盖新稿,与历史条目数量无关。AI 操作先选择再执行,补充要求置于操作列表上方,显示真实范围和素材名称。主动选择的范围不会在取消选区后扩大为全文;选区失效时提示重新选择。选区工具栏保留快捷执行。
Ctrl+K 和空段落
/菜单支持搜索、方向键、Enter 和 Esc,只显示当前可用操作,关闭后回到正文。逐处审阅支持进度、前后跳转、定位和自动前进;默认在正文显示差异,完整对比按需展开,底部保留进度和接受剩余修改入口。
保存失败显示重试和最后成功保存时间;失败时保留当前编辑,切换文章失败明确说明仍停留在哪篇文章。
知乎热点导入为素材卡片,旧文本素材可无损转换;生成上下文、章节关联、数量和发布来源共用素材数据。
版本可以命名,任意两版比较,或另存为独立文章。命名快照也计入最近 5 个版本,不额外永久保留。
正文论点可关联素材原文摘录,区分有出处、待人工核验和来源不足;修改论点提示核验,移除来源降级,Markdown/发布 HTML 导出对应引用。
观点文章、教程、热点评论模板预设读者、结构、文风和长度;通过选题、大纲、章节、审稿、发布步骤推进,每步可修改。
热点选题支持收藏、备注、受众痛点/反向观点/案例角度后创建文章;保留最近 5 次成功获取的历史榜单,收藏上限 100 个。
两侧栏可拖动或使用方向键调整宽度,并保存本机偏好。根据插件容器宽度收起侧栏,窄屏使用遮罩抽屉;章节默认紧凑显示,选中后展开设置。
顶部文档菜单统一文章库和版本,发布与导出合并入口;辅助文字提高可读性,窄屏保持保存状态可见。
新建、打开、编辑文章;约 1 秒后自动保存,Ctrl+S 手动保存。
标题、目标读者、核心观点、表达风格、大纲、文本素材。
Tiptap 富文本:标题、加粗、斜体、列表、撤销。
12 个配置化 Skills,覆盖标题、大纲、全文/章节起草、章节追加、续写、润色和检查。
选中文字显示操作栏;Ctrl+K 打开指令菜单;空段落输入
/打开指令菜单。原内容 / 建议修改预览、接受、拒绝、重新生成、取消生成。
版本检查:生成后发生任何已保存的编辑,旧建议不能直接覆盖新文章。
版本历史、恢复旧版本、Markdown 导出。
Harness 模式复用已注册的模型及凭据;不改 Harness 核心源码。
方式 A:先独立运行
安装 Node 24,然后在本目录执行:
npm ci --legacy-peer-deps
npm run build
npm start
浏览器打开 http://127.0.0.1:4317 。不配置 Key 也能编辑、保存、导出;生成操作会明确提示模型未配置,不会显示伪造结果。
要使用 AI,复制 .env.example 为 .env,填入自己的 LLM_API_KEY,然后重启。
LLM_BASE_URL=https://api.deepseek.com
LLM_API_KEY=填入自己的Key
LLM_MODEL=填入你实际可用的模型ID
独立模式使用 OpenAI 兼容的 Chat Completions 接口。LLM_BASE_URL 填到 /chat/completions 的上一层,例如兼容服务的 https://example.com/v1。Key 只由 Node 服务读取,不发送给网页。MiniMax 的兼容地址、模型和套餐权限需按你的实际账号配置,本项目不预设这些值。
Windows 可以双击 START-WINDOWS.cmd,或在 PowerShell 中执行上面的命令。默认数据位于 .data/writing.json,请备份该目录。
方式 B:作为 Harness 插件
本地源码接入方式:已实测 npm 发行版 @deepseek-ai/[email protected] 的 Web 模式。请先完成上述依赖安装和构建,再执行:
npm install -g @deepseek-ai/[email protected]
dsh plugin --profile web add /你的绝对路径/dsh-writing-workbench
dsh web --no-open
Windows 路径有空格时加双引号:
dsh plugin --profile web add "D:\projects\dsh-writing-workbench"
dsh web --no-open
包内 cordis.patch.yml 由安装命令自动启用,默认使用用户的 Harness home 保存文章。writing.overlay.yml 保留现有本机目录 D:/writing-data;需要继续使用该目录时,通过 dsh web --patch "插件目录/writing.overlay.yml" --no-open 加载。其他用户应按实际目录修改 overlay,不要直接使用此 Windows 路径。
打开 dsh 输出的本机地址,完成 Harness 自身的首次提示,点击左侧「创作工作台」。AI 模型凭据在 Harness 设置中配置;此模式不会读取独立运行的 .env Key。
当前仅支持 host=127.0.0.1 的本机 Web 使用。使用其他版本的 Harness 前应重新验证插件接口;Electron 尚未验证。
知乎热点
点击顶部右侧「知乎热点」打开选题面板,支持分类筛选、搜索标题与摘要、刷新热榜、打开知乎原题。
- 「加入当前素材」保留当前文章,把热点标题、原题链接、热度、获取时间和摘要追加到素材;同一原题不会重复加入。
- 「以此新建文章」先保存当前编辑,再创建以热点为标题的空白文章,同时保存来源素材。可继续用「写大纲」「继续写」等支持素材上下文的 Skill 创作。
- 「AI 分类」使用 AI 助手中当前所选模型,点击后才调用模型。未配置模型时仍可抓取热榜、使用关键词分类和选题。
实现迁自 D:/code/爆款文章生成器/backend/app/services/zhihu_service.py 和 frontend/src/components/workspace/canvas/HotTopicsDrawer.vue,改为当前项目的 Node + React 实现,不依赖旧项目的 Python/Java 服务。保留移动端优先、Web 备用、10 分钟缓存、限流退避及关键词分类;增加并发抓取合并、完整字符串问题 ID 和旧榜提示。缓存过期后在下次获取时更新;刷新失败时保留原获取时间和上次热榜。知乎 API 受限且无缓存时会明确提示错误。
对应接口为 POST /writing-api/zhihu-hot-topics({ "forceRefresh": false })和 POST /writing-api/zhihu-classify({ "provider": "...", "model": "..." }),同时用于独立运行和 Harness 插件。
验证:npm test 包含 9 项新增热点测试;npm run test:zhihu:browser 验证筛选、素材去重、新建、持久化、错误重试和 390px 窄屏。浏览器脚本沿用 Playwright,支持 CODEX_PRIMARY_RUNTIME_NODE_MODULES 和 CHROMIUM_PATH;Windows 可自动使用已安装的 Chrome/Edge。设置 ZHIHU_LIVE=1 可改用真实知乎数据;AI 响应仍来自本机测试模型,不消耗实际模型额度。
已安装的 Harness 插件使用安装副本时,需要将本项目的新构建更新到该副本并重启 Harness;仅刷新网页不会更新已经加载的服务端代码。请先保存当前文章。
Skill 配置
修改 skills/*.yml 即可更改提示词、允许范围和上下文。服务端每次执行都会重新读取配置;新增 Skill 后刷新界面即可显示。
target: body:替换正文或在光标处插入。target: title:只修改标题。target: outline:只修改左侧大纲。target: analysis:只显示检查意见,不提供直接写入正文的按钮。
模型只生成新文字。文章 ID、版本、选区、操作类型由服务端确定,不由模型填写。
全文操作暂支持 18000 字以内;局部操作使用选区和有限邻近上下文,避免每次发送整篇文章。逻辑检查不联网核实事实。
验证
npm run typecheck
npm test
npm run build
45 项自动测试覆盖章节结构与正文保留、追加和替换、标题候选、过期保护、版本、并发保存、数据兼容、热点选题、证据校验、导出和发行版数据目录。
可选浏览器验证:先安装 Playwright(npm install --no-save --legacy-peer-deps playwright),执行 npx playwright install chromium,再运行 npm run test:browser。此测试会启动本机测试模型服务,不需要真实 Key。
npm run test:zhihu:browser 验证热点操作;npm run test:workspace:browser 验证范围、生成准备、逐处导航、命令菜单、保存重试、证据、模板、版本命名和容器布局。生成使用独立测试模型服务,未消耗真实模型额度。
npm run test:creation:browser 验证采用大纲后起草、章节追加、结构同步、要求隔离、标题候选选用、生成期间编辑和最新稿重试,以及长标题和窄屏布局。
Harness 实际加载验证:/writing-api/bootstrap 返回 200、12 个 Skills 和已注册模型。真实模型生成质量、各供应商兼容性、Windows 打包和 Electron 未实测。
本版范围
本版不包含 AI Chat、自动长文 Agent、PDF 素材解析、Electron 打包和联网事实核查。“有出处”表示已关联素材原文,不代表事实已经独立核实。
文章、修改提案和历史版本保存在原子写入的 JSON 文件中,并在单个 Node 进程内串行提交。暂未接 Harness Storage/SQLite;同一数据目录只应由一个服务进程使用。每篇历史保留最近 5 个不同版本。
第一版为中文固定界面;后续可接 Harness Locale。npm 包包含预构建产物、Skill 配置和使用文档;源码目录不进入 npm 包。