🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

毛颖 lifangjin/dsh-maoying

DeepSeek Harnessv0.1.36
lifangjin4 天前有提交已提供中文文档扫描:含敏感能力

毛颖——DeepSeek Harness 网文创作辅助插件:主编五帮手编排大纲/正文/审校/设定/考据、novel/…

39.5/100
综合分
10
GitHub 星标
3,511
npm 周下载
—/5
用户评分

数据截至 2026/10/31 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-maoying
npm 源 · dsh-maoying 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · other
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

✓npm 包dsh-maoying @ 0.1.36
✓Node 引擎要求 >=18 · 基线 Node 22.19 满足
✓dsh CLI 依赖要求 >=0.1.7 <0.3 · 最新 0.2.1-rc.5 兼容
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 20:47:04

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 89 处,展示前 50 条)
  • 读取本地文件
    index.mjs:151
    const pkg = JSON.parse(readFileSync(path.join(PLUGIN_ROOT, 'package.json'), 'utf8'))
  • 读取本地文件
    index.mjs:181
    same = existsSync(dst) && readFileSync(dst).equals(readFileSync(src))
  • 读取本地文件
    index.mjs:181
    same = existsSync(dst) && readFileSync(dst).equals(readFileSync(src))
  • 写入本地文件
    index.mjs:186
    mkdirSync(path.dirname(dst), { recursive: true })
  • 写入本地文件
    index.mjs:187
    copyFileSync(src, dst)
  • 读取本地文件
    index.mjs:201
    current = existsSync(markerPath) && readFileSync(markerPath, 'utf8').trim() === version
  • 读取本地文件
    index.mjs:201
    current = existsSync(markerPath) && readFileSync(markerPath, 'utf8').trim() === version
  • 写入本地文件
    index.mjs:206
    writeFileSync(markerPath, `${version}\n`, 'utf8')
  • 读取本地文件
    index.mjs:324
    if (!existsSync(pkgPath)) continue
  • 写入本地文件
    index.mjs:826
    mkdirSync(targetDir, { recursive: true })
  • 写入本地文件
    index.mjs:828
    writeFileSync(tmpPath, content, 'utf8')
  • 写入本地文件
    index.mjs:830
    renameSync(tmpPath, target)
  • 删除本地文件
    index.mjs:834
    try { unlinkSync(tmpPath) } catch { }
  • 删除本地文件
    index.mjs:883
    try { unlinkSync(tmpPath) } catch { }
  • 删除本地文件
    index.mjs:916
    unlinkSync(path.join(dshHome, name))
  • 读取本地文件
    bin/maoying.mjs:68
    if (!existsSync(target)) return { path: target, renamed: false }
  • 读取本地文件
    bin/maoying.mjs:74
    if (!existsSync(candidate)) return { path: candidate, renamed: true }
  • 写入本地文件
    bin/maoying.mjs:84
    mkdirSync(destDir, { recursive: true })
  • 读取本地文件
    bin/maoying.mjs:85
    for (const entry of readdirSync(srcDir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
  • 读取本地文件
    bin/maoying.mjs:93
    } else if (existsSync(dst)) {
  • 写入本地文件
    bin/maoying.mjs:96
    copyFileSync(src, dst)
  • 读取本地文件
    bin/maoying.mjs:104
    if (!existsSync(TEMPLATE_DIR)) fail(`模板目录缺失:${TEMPLATE_DIR}(插件包不完整?)`)
  • 写入本地文件
    bin/maoying.mjs:173
    writeFileSync(indexPath, text, 'utf8')
  • 写入本地文件
    bin/maoying.mjs:342
    mkdirSync(outDir, { recursive: true })
  • 写入本地文件
    bin/maoying.mjs:343
    writeFileSync(target.path, content)
  • 写入本地文件
    bin/maoying.mjs:401
    mkdirSync(path.dirname(target.path), { recursive: true })
  • 读取本地文件
    lib/version.mjs:61
    const raw = await readFile(new URL('../package.json', import.meta.url), 'utf8')
  • 执行外部命令来自配置/变量
    lib/self-update.mjs:141
    child = nodeSpawn(command, args, options)
  • 执行外部命令固定命令
    lib/self-update.mjs:164
    const killer = nodeSpawn('taskkill', ['/T', '/F', '/PID', String(child.pid)], { stdio: 'ignore' })
  • 读取本地文件
    lib/self-update.mjs:435
    existsImpl: opts.existsImpl ?? ((p) => existsSync(p)),
  • 读取本地文件
    lib/self-update.mjs:436
    readdirImpl: opts.readdirImpl ?? ((p) => readdirSync(p)),
  • 读取本地文件
    lib/self-update.mjs:437
    readImpl: opts.readImpl ?? ((p) => readFileSync(p, 'utf8')),
  • 读取本地文件
    lib/panel-core.mjs:139
    return [{ path: resolved, name, hasNovel: existsSync(path.join(resolved, 'novel', 'project.yml')) }]
  • 读取本地文件
    lib/panel-core.mjs:183
    text = readFileSync(target, 'utf8')
  • 写入本地文件
    lib/panel-core.mjs:216
    writeFileSync(tmp, data, 'utf8')
  • 写入本地文件
    lib/panel-core.mjs:217
    renameSync(tmp, target)
  • 删除本地文件
    lib/panel-core.mjs:219
    try { unlinkSync(tmp) } catch { }
  • 读取本地文件
    lib/panel-core.mjs:310
    names = readdirSync(dir).filter((n) => /\.md$/i.test(n))
  • 读取本地文件
    lib/panel-core.mjs:322
    text = readFileSync(path.join(dir, name), 'utf8')
  • 读取本地文件
    lib/panel-core.mjs:343
    names = readdirSync(dir).filter((n) => /\.md$/i.test(n)).sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))
  • 读取本地文件
    lib/panel-core.mjs:350
    const text = readFileSync(path.join(dir, name), 'utf8')
  • 写入本地文件
    lib/panel-core.mjs:793
    mkdirSync(path.dirname(target), { recursive: true })
  • 写入本地文件
    lib/panel-core.mjs:1252
    mkdirSync(path.dirname(target), { recursive: true })
  • 删除本地文件
    lib/panel-core.mjs:1264
    unlinkSync(target)
  • 读取本地文件
    lib/novel-parse.mjs:228
    if (!existsSync(dir)) return []
  • 读取本地文件
    lib/novel-parse.mjs:229
    return readdirSync(dir)
  • 读取本地文件
    lib/novel-parse.mjs:242
    if (!existsSync(chaptersDir)) return null
  • 读取本地文件
    lib/novel-parse.mjs:250
    text = readFileSync(path.join(chaptersDir, file), 'utf8')
  • 读取本地文件
    lib/novel-parse.mjs:376
    return readFileSync(file, 'utf8')
  • 读取本地文件
    lib/novel-parse.mjs:468
    if (!existsSync(dir)) return []
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
v0.1.342026-10-31
· 新增 · 编辑器字体选择器 章节阅读页正文编辑卡工具行、字号 A−/A+ 之前加字体下拉(全屏编辑头部同款),六档:系统默认 / 黑体 / 宋体 / 楷体 / 仿宋 / 霞鹜文楷。本机未装的字体沿回落栈逐级降级(霞鹜文楷最终落 Noto Serif CJK SC → serif);选择全局记忆一份(localStorage,跨章共享),阅读与书写同源生效——只读正文与编辑器同字体切换;行号数字维持 UI 字体不动,行高公式不随字体变。 · 修复 · 行号缩放错位(时序加固) 面板缩放非 100% 档位下按 A−/A+ 调字号后行号与正文错位且不恢复。镜像测量机制经全矩阵复验无病,症状指向宿主 webview 迟到布局/绘制时序,本版三重加固: · 测量 effect 改 useLayoutEffect(绘制前重排行号,消灭缩放后旧坐标可见帧) · 双 rAF 复测兜字体换装、zoom 迟到应用等场景(不依赖 ResizeObserver 是否触发) · 滚动钳位重同步:缩放后内容变矮、浏览器夹紧 scrollTop 不发 scroll 事件时,行号层 transform 按当前值对齐 · 附一次性发散告警([maoying] 前缀 console.warn),异常环境留现场数据 · 句式重复检查误报与显示 「。" 收尾 + 换行分段」的对话排版不再误报连续句式重复(前缀跳过空白字符);消息里的前缀转义控制字符并附 U+XXXX 码点——中文引号显示不再依赖字体,半角/全角引号一眼分清。 完整变更:
v0.1.332026-10-30
· 修复 · Android compat 壳重启损坏 home patch(#1) Android compat 壳(DeepSeekHarnessCompat)每次重启会重写 home 层 cordis.patch.yml 并把托管块拍成坏 YAML,导致宿主启动 fatal。本版把托管块写入层改为可配置,兼容壳环境默认改写 profile 层(壳不碰): · 层选择 resolvePatchLayer:环境变量 DSH_MAOYING_PATCH_LAYER=home|profile 覆盖优先;启发式——platform==='android' 或 DSH_HOME 含 com.deepseek.harness.compat / /payload/ 段时默认 profile 层 · resolveProfilePatchPath:按 --profile 参数(兜底 web)解析 /profiles//cordis.patch.yml,目录缺失自动退回 home 层 · removeManagedBlockFromHome:切 profile 层时清掉 home 层遗留托管块,防双声明;块外内容逐字节保留 · 写前自检:落盘前整文件 yaml.parse 回验(先中和 !!js 表达式,不误判宿主合法手工条目),解析失败拒写半截、保留旧文件并 warn · 坏块检测:托管块之外出现 - id: 形状的坏行时 warn 并给出手工清理指引 壳每次启动会把 profile patch 重置成 seed,插件每次启动自动补写——自愈(真机已验,见 issue #1 第七节)。 Full changelog:
v0.1.322026-10-27
· 修复 · 模型缓存命中率:compaction thresholdRatio 0.45 → 0.8(宿主默认)、tool-result-pruner thresholdChars 8192 → 32768(head 8192 / tail 2048),v1/v2 双源同步。根因:压力点上 pruner 以 surface replace 改写已发送的超预算工具结果、compaction 再摘要改写中段历史,两者都使 DeepSeek 前缀缓存从改写点起整体 miss;五本账(foreshadows/memories/index/clue-board/timeline)随章节累积普遍超旧阈值 8192 字符,是反复被剪的大头。重启 DSH 后安装器逐字节比较自动换新 preset,无需重装。 · 面板 · 编辑器字号缩放:A−/A+,9–27px 档位、比例常显、localStorage 记忆,行号镜像同源联动 · 全屏编辑:MaskPortal 覆盖层,Esc / 遮罩 / 按钮三路退出(不走 Fullscreen API) · 字数统计双口径并显:不含标点(CJK,与全库同口径)/ 含标点(去空白全部码点,u 标志防代理对双计) · 测试 npm test 214 pass / 0 fail(1 skip 为 yaml 条件跳过);npm run smoke 通过。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-maoying(毛颖) 毛颖者,笔也——韩愈作《毛颖传》,把一支毛笔写成有封地有爵位的臣子。dsh-maoying 把这支笔装进 DSH(DeepSeek Harness):一支管着一班帮手、守着一摞书稿的毛笔——网文创作辅助插件,全部实现原创,MIT 发布。 装上之后,主智能体变身网文主编(创作总监):带七阶段工作流与六步写作法,把大纲、正文、审校、设定维护、素材考据分别委派给五个只带本行工具的帮手;整部小说就是工作区里的 novel/ 结构化 markdown/YAML 目录(角色卡、伏笔状态机、时间线、线索板、叙事记忆)——智能体直接读写文件,没有数据库,没有 API 层。查「所有未回收伏笔」就是 grep 一行。 功能特性 - 主编 + 五帮手:主智能体当主编,只做规划、衔接、验收、状态推进;大纲师(outline)、写手(write)、审校(review)、设定管理员(lore)、素材调研员(research)各带本行工具随叫随到。找文件、查伏笔状态这类顺手小事主编自己 glob/grep 就办,不绕委派。 - novel/ 文件数据库:角色卡、世界观、科学设定三色标注、关系图、伏笔账本、时间线、叙事记忆、线索板,全部是 grep 友好的平键/顶层数组 YAML——人可直接改,git 可版本化,无迁移无运维。
展开完整文档(README 剩余 1 节)
dsh-maoying(毛颖)

毛颖者,笔也——韩愈作《毛颖传》,把一支毛笔写成有封地有爵位的臣子。dsh-maoying 把这支笔装进 DSH(DeepSeek Harness):一支管着一班帮手、守着一摞书稿的毛笔——网文创作辅助插件,全部实现原创,MIT 发布。

装上之后,主智能体变身网文主编(创作总监):带七阶段工作流与六步写作法,把大纲、正文、审校、设定维护、素材考据分别委派给五个只带本行工具的帮手;整部小说就是工作区里的 novel/ 结构化 markdown/YAML 目录(角色卡、伏笔状态机、时间线、线索板、叙事记忆)——智能体直接读写文件,没有数据库,没有 API 层。查「所有未回收伏笔」就是 grep 一行。

功能特性

- 主编 + 五帮手:主智能体当主编,只做规划、衔接、验收、状态推进;大纲师(outline)、写手(write)、审校(review)、设定管理员(lore)、素材调研员(research)各带本行工具随叫随到。找文件、查伏笔状态这类顺手小事主编自己 glob/grep 就办,不绕委派。
- novel/ 文件数据库:角色卡、世界观、科学设定三色标注、关系图、伏笔账本、时间线、叙事记忆、线索板,全部是 grep 友好的平键/顶层数组 YAML——人可直接改,git 可版本化,无迁移无运维。
- 七阶段工作流:idea 选题 → setting 设定 → outline 大纲 → writing 写作 → review 审阅 → consistency 一致性 → export 导出。阶段记在 project.yml 的 phase 键,每完成一个里程碑主编推进并简报;推进有完成判据(核心设定落盘、分卷规划与目标章大纲在案才进 writing),不满足就回上一阶段补齐。
- Writing 六步法:衔接检查 → 出大纲 → 写正文 → 审稿 → 修改 → 定稿维护,逐章循环;配合 Collab 四步共创(设定共创 → 分卷规划 → 黄金三章 → 交接循环)把新书从零带到滚动更新;设定一览与分卷规划各设一个用户拍板点,前三章在设定齐备前不开工。
- 伏笔状态机:planted(埋设)→ progressing(推进)→ resolved(回收)/ abandoned(弃用),埋设与回收记章节号、预期回收章节排期、优先级分档——长篇不断线,活跃伏笔超 15 条主编主动提醒清理。
- 上下文按需取:主编先读 index.yml 概览,写到哪章读哪章(前章结尾约 1500 字 + 该章大纲 + 出场角色卡 + 活跃伏笔节选),不把整本书塞进上下文。
- 工具面收窄:主编只见「角色委派 + 内部检索 + 协调」白名单,帮手各带本行工具(审校只读、考据只带联网+落笔记);每次请求的工具开销与上下文占用随之下降。
- 素材考据:research 帮手联网检索历史/地理/专业领域素材,笔记落 novel/research/,区分史实/通说/演义并附来源——DSH 架构的红利。
- 创作台面板:DSH 侧栏一键打开的可视化创作台——默认中栏全页面板,也可按「打开方式」设置整体搬进右侧栏(分栏:创作台中栏 + 文章页右侧栏 tab / 中间栏 / 右侧栏三选一,宿主 0.2.x 支持右侧栏)——概览(含书稿元信息编辑与分卷规划)/章节/角色/伏笔/关系图/时间线/设定/写作风格/索引板九个 tab;章节整页阅读(章纲对照 + 正文/章纲编辑保存 + 五维 + 状态流转)、project.yml 表单化编辑、写作风格查看与编辑(缺失时用默认基线创建)、账本与实体卡的人工编辑写面(编辑/新建/删除,带结构校验与确认弹层)、顶栏字号六档缩放、界面语言中文/English 可切与自动新版检测。
- 命令行兜底:maoying init / stats / index / export / brief / check 六条零依赖命令管脚手架、统计、索引重建、导出、写作卡打包与静态体检。

快速开始

前置:Node.js ≥ 18、已装好的 DSH host(0.1.7+,见「兼容面」)。

官方插件通道——一条命令,装完重启即用:

dsh plugin --profile web add dsh-maoying

重启 DSH(dsh web):插件启动时自动把预设装进 ~/.dsh/.agent-presets/maoying/,并写好声明行托管块,无需再点任何按钮。托管块写入层自动选择:桌面/服务器默认写 home 级 ~/.dsh/cordis.patch.yml;Android compat 壳环境(该壳每次启动会把 home 级 patch 重写坏)自动改写 profile 级 ~/.dsh/profiles/<name>/cordis.patch.yml——壳不碰 profile 层,插件每次启动补写自愈,并顺手清掉 home 级遗留托管块防双声明;也可用环境变量 DSH_MAOYING_PATCH_LAYER=home|profile 强制指定。新会话的预设选择器里选「毛颖创作 (Maoying)」即可开写;要设为默认,在 Settings → Agent Presets 里选。

开发检出(想改插件或预设源码)用 link 形态直连仓库,改动经重启生效:

git clone https://github.com/lifangjin/dsh-maoying.git
dsh plugin --profile web add link:"$PWD/dsh-maoying"

只要命令行工具、不装插件的读者:零依赖命令行单独可用,npx 即跑,或装成全局命令(均为 npm 通道,与插件互不相干):

npx maoying init # 免安装直接跑
npm install -g dsh-maoying # 或装成全局 maoying 命令

怎么用

选好预设后,对主编说话即可,它按工作流自己路由:

开新书(Collab 四步共创):

我想写一本东方玄幻,主角靠「听懂器物说话」的金手指鉴宝升级。

主编与你逐项对齐设定(题材、金手指、基调、主角三要素、对抗主线),设定管理员落盘核心角色卡与世界观条目后交你拍板;大纲师出分卷规划再交你拍板——设定与分卷都定了,才动笔黄金三章(立世界钩子、立主角动机、立核心冲突)交付。

逐章写作(Writing 六步法):

第三章可以开写了吗?
主编做衔接检查,委派大纲师出本章大纲(含五维叙事字段),过目后派写手写正文、审校审稿(清单 + 一致性扫描:冲突/时间线/伏笔/设定 + 连贯六维:行为/因果/资源/身份/伤势/战力),有问题回写手修,通过后由设定管理员一次跑完定稿维护(章纲对照 + 五本账 + index 重建 + 一致性核对,全部落盘才置 accepted)——你只需要在决策点拍板。

集中审查:

前 20 章做一次一致性检查。

主编推进 phase 到 consistency,审校扫描冲突/时间线/伏笔/设定与连贯六维(行为/因果/资源/身份/伤势/战力),问题按严重度排好交回写手。

用户回「ok / 可以 / 继续」即视为确认,主编直接推进,不复述确认。

创作台面板

DSH 左侧栏底部点「毛颖创作台」打开创作台(改文件、跑流程之外,给肉眼看的驾驶舱)。打开方式在面板系统设置里三选一(立即记忆,对下一次打开生效):

- 分栏(默认):创作台在中栏全页,点章节/最近更新开文章页右侧栏 tab——阅读/编辑与创作台同屏对照;
- 中间栏:两者都在中栏(0.1.25 及以前的唯一形态);
- 右侧栏:两者都在右侧栏 tab(需 DSH 0.2.x;0.1.x 宿主设置里右栏两项置灰,一切按中间栏走)。

右侧栏 tab 切走/切会话/收栏都不卸载(草稿保活),重新打开即拉最新内容;文章页换章会重挂编辑器,30 秒自动保存窗口内的未存稿不保留。中栏形态行为不变:

- 章节:状态筛选 + 按单写作清单;点章节进整页阅读——返回按钮、章纲对照(Markdown 渲染)、正文与章纲就地编辑保存(正文 textarea 自动保存——待写空章节与写作中(status=writing)章节打开即直接进编辑器、约 30 秒防抖落盘、手动/自动保存都停留在编辑态续写、回车换行自动加段首两个全角空格缩进、编辑栏实时显示正文字数(不含标点/含标点双口径)、章节标题可在编辑器顶部修改(与正文一次原子保存)、编辑器带行号(逻辑行号、随软换行对齐)、编辑器字号可缩放(A−/A+,localStorage 记忆)、可全屏编辑(Esc 退出);章纲 textarea 手动保存;文件在编辑期间被外部改过时拒绝保存并放回磁盘最新内容,不覆盖人工改动)、五维叙事字段、一键状态流转。
- 概览:书稿卡右上「编辑」按钮展开 project.yml 的书名/作者/题材/篇幅/语言/工作流阶段/共创模式/简介表单化编辑(原「小说设置」tab 并入),保存保留文件里原有注释;表单载入后 project.yml 被外部(作者手改 / agent 推进阶段)改过时拒绝保存并提示重改,不覆盖人工改动。概览另设「分卷规划」卡,列出 volumes.yml 各卷定位与计划章节范围——拍板过的分卷有处可查,卡头「编辑源文件」可整文件编辑 volumes.yml。
- 受管文件写面:角色/设定/科学设定卡与六本账本(关系/时间线/记忆/线索板/伏笔/分卷)均可从面板编辑源文件——墙头「新建」、卡详情「编辑源文件/删除文件」、各账本卡头「编辑源文件」(时间线/关系图空态也给入口);保存时结构校验(账本须是条目数组、实体卡须带 frontmatter 围栏,不合即拒存),外部改动保护与正文编辑同口径;章节阅读页可新建章纲(本章目标/节拍/出场角色/需埋需收伏笔/与前章接口五件骨架预填)、删除章纲与删除章节——删除均确认弹层,不可逆,后悔靠 git,静态体检会把孤儿引用标出来。
- 顶栏:当前版本号常驻;npm 上有新版时亮「有新版 ↗」徽章直连发布页,旁边「一键升级」按钮直接用 pnpm 把最新包装进当前 DSH 档(仅支持 profile 目录安装,pnpm 缺失时自动回落 corepack;检测到全局 maoying CLI 时顺带以同一精确版本更新,未装则跳过;装完需重启 DeepSeek 才生效);「检测更新」按钮只在无新版时显示(有新版时收起,让位给徽章与「一键升级」),点击手动现测线上最新版(绕过 1h 缓存——面板打开时只自动拉一次,页面开久了也不聋);版本区后的齿轮打开系统设置,界面语言中文/English 可切、字号六档(100%–150%)整体缩放、打开方式三选一(分栏/中间栏/右侧栏),均立即生效并记忆。

面板写状态(章节状态、project.yml、index.yml 重建),正文/章纲/账本/实体卡等全部人工编辑入口只给人用(hash 旧版检测 + 结构校验,外部改动一律拒绝覆盖)——agent 的创作边界不变:共创模式下正文永远归作者与主编。

共创模式(作者亲笔)

不是谁都想让 AI 代笔。project.yml 的 mode 键决定正文归谁写,三种模式一句话:ai-draft(默认)AI 代笔,走 Writing 六步法;co-write 逐章指派谁写,主编动笔前先问清本章归谁;author-draft 全书作者亲笔,毛颖只备料、审稿、记账,永不代写。

author-draft 下的协作循环——你只管写,交稿即接管杂务:

第 5 章写完了,贴给你。(正文直接粘进对话,或者说一声第 X 章写完、指个文件)

主编收稿后你会拿到三样东西:审校意见清单(只挑问题、不代改,改不改随你)、账本回填(伏笔/时间线/关系/记忆/线索五本账按你正文实际发生的记,计划外的改动也能认领,来源标 backfill)、下一章章纲(novel/outlines/vXX-cXXX.md,拿着就能写)。圣域纪律:chapters/ 正文唯作者可改,agent 至多更新 frontmatter 的 summary 与五维字段,且先建议后动手。

配套命令:maoying brief <dir> <章号> 打包写作卡(章纲 + 前章结尾 + 角色卡 + 活跃伏笔,带去任意编辑器或其他 AI),maoying check <dir> 做零模型静态体检(frontmatter 完整性、伏笔章号引用与超期、章纲钩子小节、时间线乱序、AI 味统计(句式重复/比喻密度/句长节奏)等,不调模型——LLM 审校走主编)。

方法论技能

随插件带 6 个网文方法论技能,插件启动时安装器把它们落盘到 ~/.dsh/skills/(即 <home>/skills/)下的 maoying- 六个目录,宿主技能面板可直接看到;大纲师、写手、审校、设定管理员按场景自动加载,你不用手动操作:

| 技能 | 一句话说明 |
| maoying-golden-opening | 黄金三章:开篇四型选型、前三章职能分工(世界钩子 → 动机确立 → 冲突引爆)、对抗格局聚焦与金手指原则、前 300 字出事原则、信息释放纪律与自检清单 |
| maoying-beat-pacing | 爽点节奏:即时正反馈环、期待感管理、爽点类型库与打脸节拍配比、压抑-释放配比、三级节奏曲线与章尾钩子选型 |
| maoying-review-checklist | 审校清单:语言、节奏、人设、逻辑、伏笔、剧透、风格七层逐项检查,按 P0/P1/P2 三档严重度输出 |
| maoying-foreshadow-discipline | 伏笔管理:铺垫与伏笔之辨、埋设即登记、推进节奏排期、回收「意外 + 合理」标准与台账清理阈值 |
| maoying-suspense-craft | 悬疑与对比:悖论式悬念、悬念-行动-线索循环、信息差四象限、堵死猜测与对比表现力技巧 |
| maoying-volume-craft | 卷纲与单元结构:卷四定(主题、收获、上限、刻度)、情节五步循环、支线字数红线、换地图纪律、群像戏份账与期待线并行 |

安装器只认 maoying- 前缀目录,~/.dsh/skills/ 下你自己的技能一个字节不动。卸载插件后技能目录需手动清理(六个目录一起删):

dsh plugin --profile web remove dsh-maoying
rm -rf "${DSH_HOME:-$HOME/.dsh}/skills/"maoying-*

novel/ 数据规范

novel/ 目录是整个插件的数据库:project.yml(元信息与七阶段 phase)、style.md(写作风格基准)、volumes.yml、chapters/(frontmatter 五维叙事字段 + 正文)、characters/(角色卡)、world/、science/(三色设定)、relations.yml、foreshadows.yml(伏笔状态机)、timeline.yml、memories.yml(出场记录、承诺账、卷级梗概)、clue-board.yml、research/、exports/。全部格式、示例与设计理由见:

- 速查版:项目初始化后的 novel/README.md(模板源 templates/novel/README.md)
- 完整版:docs/spec.md(为什么不用 SQLite、五维字段定义、伏笔状态机语义、出场记录约定)

CLI

maoying init [dir] # 生成 novel/ 脚手架(默认 ./novel;已存在文件一律跳过,绝不覆盖) maoying stats [dir] # 逐章 CJK 字数、状态分布、当前 phase maoying index [dir] # 从 volumes.yml + chapters/ 重建 index.yml(派生文件) maoying export [dir] # 导出全书:--format md|txt|epub(默认 md),--out <目录> 改输出位置 maoying brief [dir] <chapter> # 组装单章写作卡(章纲+前章结尾+角色卡+活跃伏笔);--out 落盘,缺省 stdout maoying check [dir] # 静态体检(不调模型):frontmatter/枚举/章号/伏笔引用与超期/章纲钩子/AI 味统计/时间线年份/关系卡引用/phase 就绪判据

export 示例:

maoying export novel # Markdown,落到 novel/exports/ maoying export novel --format txt # 纯文本 maoying export novel --format epub # EPUB 3(零依赖打包,可直接导入阅读器) maoying export novel --format epub --out ~/Downloads # 换输出目录

输出目录默认 <dir>/exports/,文件名 <书名>-<YYYYMMDD>.<扩展名>(书名取 project.yml 的 title);章节解析与 stats/index 同一套逻辑,frontmatter 不会混进正文。

零依赖(node:fs/path/url/crypto),任意 cwd 可用。装法三选一:npm install -g dsh-maoying、随用随取的 npx maoying <命令>、或开发机的 npm link(仓库检出即改即生效)。三样都没有时 node <插件目录>/bin/maoying.mjs 等价(dsh 插件安装也会把包落进 profile,可直接指过去)。日常写作中 index.yml 由设定管理员直接重建,CLI 主要给人用。

卸载

dsh plugin --profile web remove dsh-maoying
rm -rf "${DSH_HOME:-$HOME/.dsh}/.agent-presets/maoying"
rm -rf "${DSH_HOME:-$HOME/.dsh}/skills/"maoying-*

宿主是 DSH 0.1.7+ 时再补一步:删去 ~/.dsh/cordis.patch.yml 里的 dsh-maoying 托管块(# --- dsh-maoying preset managed (auto-generated; do not edit) --- 到 # --- end dsh-maoying preset managed --- 之间的整段,含两行标记),免得留下指向已删目录的声明行;Android compat 壳上托管块写在 profile 层,~/.dsh/profiles/<name>/cordis.patch.yml 里的同名托管块也照此删除。novel/ 目录是你的书稿,卸载插件不会动它。

兼容面

插件启动时读宿主版本,按版本自动选择委派行形状——宿主升级后重启即切换,无需重装插件。版本探测是五级探针(argv[1] → 全 argv 扫描 → app.asar / desktop-runtime → Electron API → home 全局兜底),前四级锚定当前进程的真实宿主,<home>/node_modules/@deepseek-ai/dsh/package.json 那份 home 全局安装只做最后兜底(老 CLI 残留可能陈旧几个大版本);每级读到了什么可查创作台面板的 host-debug 端点(路径已脱敏):

- DSH 0.1.7 – 0.2.1-rc.1 → v1 内联形状:5 个角色委派行直接内联 persona 与 toolFilter,托管块 1 条声明行。
- DSH 0.2.1-rc.2+ → v2 AgentPreset 形状:从该版本起,dsh-tool-subagent 拒绝内联 persona/toolFilter,插件改用 presets/maoying/agent.cordis.v2.yml——托管块写 6 条声明行(主编 preset + 大纲师/写手/审校/设定管理员/素材调研员 5 张角色 preset),主编委派行以 agentPreset 指向角色 preset,角色的工具面由 preset 里的实体工具行承载(审校只读、考据带联网检索)。
- 角色预设会出现在预设选择器(宿主对预设没有隐藏机制),name 带「(内部)」标明:日常写作由主编委派自动选用,不经主编、想单独开一个写手/考据会话时直接选中即可。
- 两种形状的 persona 文本同源逐字一致(test/composition.test.mjs 逐字节把关);宿主版本完全未知(五级探针全败)时不写声明行、预设文件照落走 partial 自愈,绝不把可能已 ≥0.2.1-rc.2 的宿主声明成 v1 内联(下次启动版本可读时自动补写)。
- ≤0.1.6 的目录扫描轨道:不做(宿主已淘汰)。

许可

MIT © 2026 lifangjin

致谢

- 「毛颖」得名于韩愈《毛颖传》:毛笔拟人,有封地有爵位。
预览分享卡片长什么样 ↓lifangjin/dsh-maoying
分享 · DeepSeek Harness Hub
lifangjin/dsh-maoying

毛颖——DeepSeek Harness 网文创作辅助插件:主编五帮手编排大纲/正文/审校/设定/考据、novel/…

回到顶部