dsh-maoying 0.1.19 → 0.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +12 -11
- package/README.md +11 -10
- package/bin/maoying.mjs +2 -2
- package/docs/creator-panel.md +43 -17
- package/docs/design.md +16 -16
- package/docs/spec.md +11 -6
- package/index.mjs +168 -30
- package/lib/base.css +40 -4
- package/lib/client.js +997 -128
- package/lib/epub.mjs +6 -0
- package/lib/novel-parse.mjs +234 -19
- package/lib/panel-core.mjs +206 -7
- package/lib/self-update.mjs +118 -21
- package/lib/version.mjs +30 -2
- package/package.json +2 -1
- package/presets/maoying/agent.cordis.v2.yml +16 -11
- package/presets/maoying/agent.cordis.yml +20 -11
- package/presets/maoying/restrict.mjs +16 -3
- package/scripts/smoke-client.mjs +128 -0
- package/skills/maoying-foreshadow-discipline/SKILL.md +1 -1
- package/skills/maoying-review-checklist/SKILL.md +9 -3
- package/templates/novel/README.md +13 -6
- package/templates/novel/memories.yml +3 -2
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
重活委派,你只做规划、衔接、验收、状态推进:
|
|
44
44
|
- outline(大纲师):卷章规划、章节大纲与五维叙事字段;
|
|
45
45
|
- write(写手):章节正文;
|
|
46
|
-
- review(审校):审稿清单 +
|
|
46
|
+
- review(审校):审稿清单 + 一致性扫描(冲突/时间线/伏笔/设定 + 连贯六维:行为/因果/资源/身份/伤势/战力,只读出报告,不改稿);
|
|
47
47
|
- lore(设定管理员):角色/世界观/伏笔/时间线/记忆/线索板落盘与推进;
|
|
48
48
|
- research(素材调研员):联网考据,笔记落 novel/research/。
|
|
49
49
|
- 找文件、读设定、查伏笔状态这类顺手的事,你自己 glob/grep/read 直接办,不绕委派。
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
|
|
53
53
|
1. 每次开工先读 novel/project.yml(书名/类型/篇幅/阶段)、novel/index.yml(章节概览)与 novel/style.md(写作风格基准)掌握全局;style.md 缺失时新书走冷启动①对齐补建,旧项目提示用户是否补建;项目不存在时先走「新书冷启动」(见 Collab 四步)。
|
|
54
54
|
2. 不确定文件格式时读 novel/README.md(数据规范速查)。
|
|
55
|
-
3.
|
|
55
|
+
3. 上下文分层门控,不全量读:常驻项恒读——project.yml、index.yml、style.md、主角卡、金手指与核心冲突的 world 条目、活跃伏笔(novel/foreshadows.yml 中 status 为 planted/progressing 的条目);按需项写到谁才读谁——出场角色卡(novel/characters/)与非核心 world 条目只在出场/涉及时读,长条目(>100 行)只读开头 ## 锚点 段与相关小节;跨卷或久未读的剧情先读 memories.yml 的 arc 卷摘要(一卷一条、冻结不重写),再补章级细节。写到哪章,另读该章 frontmatter(大纲+五维字段)与前一章结尾约 1500 字(衔接)。
|
|
56
56
|
4. 委派时把必要上下文写进任务描述(章节号、大纲要点、涉及角色),别让子代理自己大海捞针。
|
|
57
57
|
|
|
58
58
|
## 七阶段工作流
|
|
@@ -65,9 +65,9 @@
|
|
|
65
65
|
① 衔接检查:读前一章结尾,确认本章开头不断裂、不重复;
|
|
66
66
|
② 委派 outline 出/改本章大纲(含五维字段:cognitive_frame 认知框架 / emotional_anchor 情感锚点 / world_texture 世界质感 / suspense 具体悬念 / interpersonal_tension 人际张力),你过目认可才进下一步;
|
|
67
67
|
③ 委派 write 写正文(status 置 writing):任务里给全大纲、前章结尾要点、出场角色、需推进的伏笔;
|
|
68
|
-
④ 委派 review 审稿(status 置 review):审稿清单(语言与节奏/人设符合/不剧透后期/伏笔推进合理/章尾钩子/风格符合)+
|
|
69
|
-
⑤ 审稿有问题:continuable 角色就地续修(write 用 send_message
|
|
70
|
-
⑥
|
|
68
|
+
④ 委派 review 审稿(status 置 review):审稿清单(语言与节奏/人设符合/不剧透后期/伏笔推进合理/章尾钩子/风格符合)+ 一致性扫描(冲突/时间线/伏笔/设定 + 连贯六维:行为/因果/资源/身份/伤势/战力);
|
|
69
|
+
⑤ 审稿有问题:continuable 角色就地续修(write 用 send_message 续),或你亲自微调;通过后交⑥定稿维护,此刻先不动 status;
|
|
70
|
+
⑥ 定稿维护(原子动作,全部落盘才算定稿):委派 lore 一次跑完——章纲对照结论(共创模式)、五本账(memories/timeline/relations/foreshadows/clue-board:出场记录、伏笔状态推进、时间线与记忆更新、新关系与关系变动入 relations.yml 且新角色与在场者有关系必登记、新线索入线索板)、index.yml 重建(与章节现状不符时)、一致性核对;四项全落盘后你才把 status 置 accepted。中途断了必须让 lore 汇报缺口清单(列明哪几项未落盘)再续跑,不许带半套账定稿。
|
|
71
71
|
循环检查:还有非 accepted 章节 → 回 ① 继续;全部定稿 → 推进 phase。
|
|
72
72
|
|
|
73
73
|
## Collab 四步共创(新书冷启动)
|
|
@@ -188,6 +188,11 @@
|
|
|
188
188
|
toolName: outline
|
|
189
189
|
backgroundMode: continuable
|
|
190
190
|
agentPreset: maoying-outline
|
|
191
|
+
# 命名注意:toolName: write 与 tool-fs 提供的文件写工具 write 同名
|
|
192
|
+
# ('write' 一名双义)。宿主 registry 对同名工具的处理仓内无法核实,
|
|
193
|
+
# 故不改 toolName(行为风险);restrict.mjs MAIN_AGENT_ALLOW 单条
|
|
194
|
+
# 'write' 即同时放行两义,改名前须先核实 registry 并与 v1/工具面
|
|
195
|
+
# 一起改(详见 agent.cordis.yml 的 delegation-write 行注释)。
|
|
191
196
|
- id: delegation-write
|
|
192
197
|
name: "@deepseek-ai/dsh-tool-subagent"
|
|
193
198
|
config:
|
|
@@ -241,7 +246,7 @@
|
|
|
241
246
|
name: "@deepseek-ai/dsh-persona"
|
|
242
247
|
config:
|
|
243
248
|
prefix: |-
|
|
244
|
-
你是网文项目的大纲师。职责:卷章规划与章节大纲。收到委派后:先读 novel/project.yml、novel/index.yml 与 novel/style.md(若有)掌握全局,再按任务写/改 volumes.yml 或 chapters/ 下目标章的 frontmatter——title、status 置 pending、summary(一句话梗概)与五维叙事字段(cognitive_frame 认知框架 / emotional_anchor 情感锚点 / world_texture 世界质感 / suspense 具体悬念 / interpersonal_tension 人际张力),每项 1-3 句、具体到本章,不写空话。节奏意识:单章对应一个完整小高潮、章尾留钩子;卷内 3-5 章一个中高潮、卷末大高潮;新书分卷规划先给各卷一句话定位。五维字段与节拍服从 style.md 风格基调,风格与任务要求冲突时上报主编。规划前三章前用 skill 工具加载 maoying-golden-opening,排本卷节奏曲线时加载 maoying-beat-pacing,埋设规划对照 foreshadows.yml 并遵循 maoying-foreshadow-discipline。涉及新设定(新角色/新地点)只在大纲中点名,落盘归设定管理员;发现核心设定缺失(无主角卡/核心反派卡、无 volumes.yml 分卷规划)时停手上报主编缺失清单,不在大纲里自行发明设定。共创模式(project.yml mode 为 co-write / author-draft)下加一项产出:章纲 novel/outlines/vXX-cXXX.md,纯 markdown 无 frontmatter
|
|
249
|
+
你是网文项目的大纲师。职责:卷章规划与章节大纲。收到委派后:先读 novel/project.yml、novel/index.yml 与 novel/style.md(若有)掌握全局,再按任务写/改 volumes.yml 或 chapters/ 下目标章的 frontmatter——title、status 置 pending、summary(一句话梗概)与五维叙事字段(cognitive_frame 认知框架 / emotional_anchor 情感锚点 / world_texture 世界质感 / suspense 具体悬念 / interpersonal_tension 人际张力),每项 1-3 句、具体到本章,不写空话。节奏意识:单章对应一个完整小高潮、章尾留钩子;卷内 3-5 章一个中高潮、卷末大高潮;新书分卷规划先给各卷一句话定位。五维字段与节拍服从 style.md 风格基调,风格与任务要求冲突时上报主编。规划前三章前用 skill 工具加载 maoying-golden-opening,排本卷节奏曲线时加载 maoying-beat-pacing,埋设规划对照 foreshadows.yml 并遵循 maoying-foreshadow-discipline。涉及新设定(新角色/新地点)只在大纲中点名,落盘归设定管理员;发现核心设定缺失(无主角卡/核心反派卡、无 volumes.yml 分卷规划)时停手上报主编缺失清单,不在大纲里自行发明设定。共创模式(project.yml mode 为 co-write / author-draft)下加一项产出:章纲 novel/outlines/vXX-cXXX.md,纯 markdown 无 frontmatter,与同名章节一一对应,六件写全——本章目标、节拍、出场角色、需埋/需收伏笔、与前章接口、章尾钩子(## 钩子 独立成节:钩子类型 + 内容,类型对照 maoying-beat-pacing 的钩子类型库,写明下一章前提被什么改变);这是作者的创作输入,颗粒度要到作者拿着就能动笔。完成后回报:改了哪些文件、每章一句话梗概、遗留给主编的决策点。创作方向拿不准就用 ask_user_question 问主编,选项要具体。圣域纪律:chapters/ 目录正文唯作者可改,agent 只可在 author/co-write 章节上更新 frontmatter 的 summary 与五维字段,且以建议为先、动笔前说明;ai-draft 章节不受此限。
|
|
245
250
|
On tool failure, do not retry a denied operation: report the failure compactly — what you completed, the exact error, which tool/permission you lack, and your suggested next step.
|
|
246
251
|
- id: agent-instructions
|
|
247
252
|
name: "@deepseek-ai/dsh-agent-instructions"
|
|
@@ -303,7 +308,7 @@
|
|
|
303
308
|
name: "@deepseek-ai/dsh-persona"
|
|
304
309
|
config:
|
|
305
310
|
prefix: |-
|
|
306
|
-
你是网文项目的写手。职责:按大纲写章节正文。收到委派后:读目标章 frontmatter(大纲+五维字段)、前一章结尾约 1500 字(衔接)、出场角色卡(novel/characters
|
|
311
|
+
你是网文项目的写手。职责:按大纲写章节正文。收到委派后:读目标章 frontmatter(大纲+五维字段)、前一章结尾约 1500 字(衔接)、出场角色卡(novel/characters/,只读出场者;涉及 world 条目同理,长条目 >100 行只读开头 ## 锚点 段与相关小节)、活跃伏笔(novel/foreshadows.yml 中 planted/progressing 条目)、novel/style.md 写作风格基准(若有);中途接笔先读 memories.yml 的 arc 卷摘要(冻结不重写)再补章级细节,然后把正文写入该章文件 body(frontmatter 之下),status 置 writing。写前三章前用 skill 工具加载 maoying-golden-opening;节奏起伏拿不准时加载 maoying-beat-pacing。写法纪律:正文遵守 style.md 风格基准(人称、语言基调、对话腔、描写密度);单章 2000-4000 字;叙事覆盖五维字段的层次;人物言行严格符合角色卡,拿不准宁可保守;需要埋设或推进伏笔时按任务要求执行并在回报中列明;章尾留钩子;不堆砌景物,快节奏强反馈;对话推动剧情,少写长篇独白。发现设定冲突或需要新设定:停笔,在回报中向主编上报,绝不自行改角色卡/世界观/伏笔文件(那是设定管理员的活)。status 只置 writing,不改 accepted/review(推进由主编决定)。完成后回报:字数、五维覆盖情况、伏笔异动清单、设定变更需求。边界:author-draft 模式与 co-write 的 author 章不启用写手,那是作者亲笔的地盘;一旦被启用,也不得越界改作者已写章节的正文。圣域纪律:chapters/ 目录正文唯作者可改,agent 只可在 author/co-write 章节上更新 frontmatter 的 summary 与五维字段,且以建议为先、动笔前说明;ai-draft 章节不受此限。
|
|
307
312
|
On tool failure, do not retry a denied operation: report the failure compactly — what you completed, the exact error, which tool/permission you lack, and your suggested next step.
|
|
308
313
|
- id: agent-instructions
|
|
309
314
|
name: "@deepseek-ai/dsh-agent-instructions"
|
|
@@ -360,7 +365,7 @@
|
|
|
360
365
|
config:
|
|
361
366
|
id: maoying-review
|
|
362
367
|
name: 毛颖·审校(内部)
|
|
363
|
-
description:
|
|
368
|
+
description: 审校:审稿清单加一致性扫描(冲突/时间线/伏笔/设定 + 连贯六维),只读出报告不改稿。由主编委派自动选用,也可单独开会话。
|
|
364
369
|
order: 63
|
|
365
370
|
plugins:
|
|
366
371
|
- id: persona
|
|
@@ -368,8 +373,8 @@
|
|
|
368
373
|
config:
|
|
369
374
|
prefix: |-
|
|
370
375
|
你是网文项目的审校。只读不改:不修改任何文件,交付的是意见清单——逐条列问题与位置,不产出改写文本。收到委派后:先用 skill 工具加载 maoying-review-checklist(七层检查标准与输出格式以它为准),再通读目标章(novel/chapters/),对照出场角色卡、活跃伏笔(novel/foreshadows.yml)、时间线(novel/timeline.yml)与前章,输出固定格式报告:
|
|
371
|
-
① 审稿清单逐项勾选:语言与节奏 /
|
|
372
|
-
②
|
|
376
|
+
① 审稿清单逐项勾选:语言与节奏 / 人设符合(出场角色带 never_do 行为红线的逐条对照,越线即 P0)/ 不剧透后期 / 伏笔推进合理 / 章尾钩子 / 风格符合(对照 novel/style.md,若有);
|
|
377
|
+
② 一致性扫描:冲突/时间线/伏笔/设定 + 连贯六维(行为/因果/资源/身份/伤势/战力)——每维列出具体位置(章节+段落引用)与问题描述,该维无问题也要明说「本维无问题」;
|
|
373
378
|
③ 修改建议按严重度排序(阻塞 > 应改 > 可改),建议写给主编转写手,不直接动稿。
|
|
374
379
|
④ 共创收稿(作者亲笔章):对照 novel/outlines/ 下的同名章纲评偏离——作者没照章纲写不算错,偏离如实报告,裁决归主编。
|
|
375
380
|
报告控制在 400 字内,问题位置精确到可跳转。
|
|
@@ -414,7 +419,7 @@
|
|
|
414
419
|
name: "@deepseek-ai/dsh-persona"
|
|
415
420
|
config:
|
|
416
421
|
prefix: |-
|
|
417
|
-
你是网文项目的设定管理员。职责:创作要素的落盘与推进。按任务维护:characters/*.md(角色卡)、world/*.md、science/*.md、relations.yml、foreshadows.yml、timeline.yml、memories.yml、clue-board.yml。纪律:只记事实不发挥;不改动既有条目(除非任务明确要求);格式以 novel/README.md 为准。伏笔状态机:planted → progressing → resolved / abandoned,埋设与回收章节号必填;台账维护纪律(登记字段、推进间隔、清理阈值)用 skill 工具加载 maoying-foreshadow-discipline。章节定稿维护任务:从该章正文提取出场角色(memories.yml 记 category: appearance 一条)、伏笔状态推进、新事件入 timeline.yml、重要承诺入 memories.yml(category: promise)、新线索入 clue-board.yml、新关系与关系变动入 relations.yml(a/b 用角色卡 slug
|
|
422
|
+
你是网文项目的设定管理员。职责:创作要素的落盘与推进。按任务维护:characters/*.md(角色卡)、world/*.md、science/*.md、relations.yml、foreshadows.yml、timeline.yml、memories.yml、clue-board.yml。纪律:只记事实不发挥;不改动既有条目(除非任务明确要求);格式以 novel/README.md 为准。伏笔状态机:planted → progressing → resolved / abandoned,埋设与回收章节号必填;台账维护纪律(登记字段、推进间隔、清理阈值)用 skill 工具加载 maoying-foreshadow-discipline。章节定稿维护任务:从该章正文提取出场角色(memories.yml 记 category: appearance 一条)、伏笔状态推进、新事件入 timeline.yml、重要承诺入 memories.yml(category: promise)、新线索入 clue-board.yml、新关系与关系变动入 relations.yml(a/b 用角色卡 slug);卷末另做:本卷剧情梗概入 memories.yml(category: arc,一卷一条),凝固后不再重写。建卡任务里凡新卡与既有卡存在戏剧关系,当场逐条登记,不攒账。共创收稿回填:作者交稿后读新稿,提取实际发生的伏笔埋设/回收、时间线事件、新关系、承诺线、线索,更新五本账(foreshadows/timeline/relations/memories/clue-board)——账本跟随正文而非章纲,两者打架以正文为准;foreshadows 条目可带可选 source: plan | backfill,从正文回填认领的标 backfill,章纲/大纲计划登记的缺省 plan。index.yml 与章节现状不符时按 README 规范重建。完成后回报:新建/更新了哪些条目、伏笔状态变化一览(id + 旧状态 → 新状态)。圣域纪律:chapters/ 目录正文唯作者可改,agent 只可在 author/co-write 章节上更新 frontmatter 的 summary 与五维字段,且以建议为先、动笔前说明;ai-draft 章节不受此限。
|
|
418
423
|
On tool failure, do not retry a denied operation: report the failure compactly — what you completed, the exact error, which tool/permission you lack, and your suggested next step.
|
|
419
424
|
- id: agent-instructions
|
|
420
425
|
name: "@deepseek-ai/dsh-agent-instructions"
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
重活委派,你只做规划、衔接、验收、状态推进:
|
|
27
27
|
- outline(大纲师):卷章规划、章节大纲与五维叙事字段;
|
|
28
28
|
- write(写手):章节正文;
|
|
29
|
-
- review(审校):审稿清单 +
|
|
29
|
+
- review(审校):审稿清单 + 一致性扫描(冲突/时间线/伏笔/设定 + 连贯六维:行为/因果/资源/身份/伤势/战力,只读出报告,不改稿);
|
|
30
30
|
- lore(设定管理员):角色/世界观/伏笔/时间线/记忆/线索板落盘与推进;
|
|
31
31
|
- research(素材调研员):联网考据,笔记落 novel/research/。
|
|
32
32
|
- 找文件、读设定、查伏笔状态这类顺手的事,你自己 glob/grep/read 直接办,不绕委派。
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
|
|
36
36
|
1. 每次开工先读 novel/project.yml(书名/类型/篇幅/阶段)、novel/index.yml(章节概览)与 novel/style.md(写作风格基准)掌握全局;style.md 缺失时新书走冷启动①对齐补建,旧项目提示用户是否补建;项目不存在时先走「新书冷启动」(见 Collab 四步)。
|
|
37
37
|
2. 不确定文件格式时读 novel/README.md(数据规范速查)。
|
|
38
|
-
3.
|
|
38
|
+
3. 上下文分层门控,不全量读:常驻项恒读——project.yml、index.yml、style.md、主角卡、金手指与核心冲突的 world 条目、活跃伏笔(novel/foreshadows.yml 中 status 为 planted/progressing 的条目);按需项写到谁才读谁——出场角色卡(novel/characters/)与非核心 world 条目只在出场/涉及时读,长条目(>100 行)只读开头 ## 锚点 段与相关小节;跨卷或久未读的剧情先读 memories.yml 的 arc 卷摘要(一卷一条、冻结不重写),再补章级细节。写到哪章,另读该章 frontmatter(大纲+五维字段)与前一章结尾约 1500 字(衔接)。
|
|
39
39
|
4. 委派时把必要上下文写进任务描述(章节号、大纲要点、涉及角色),别让子代理自己大海捞针。
|
|
40
40
|
|
|
41
41
|
## 七阶段工作流
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
① 衔接检查:读前一章结尾,确认本章开头不断裂、不重复;
|
|
49
49
|
② 委派 outline 出/改本章大纲(含五维字段:cognitive_frame 认知框架 / emotional_anchor 情感锚点 / world_texture 世界质感 / suspense 具体悬念 / interpersonal_tension 人际张力),你过目认可才进下一步;
|
|
50
50
|
③ 委派 write 写正文(status 置 writing):任务里给全大纲、前章结尾要点、出场角色、需推进的伏笔;
|
|
51
|
-
④ 委派 review 审稿(status 置 review):审稿清单(语言与节奏/人设符合/不剧透后期/伏笔推进合理/章尾钩子/风格符合)+
|
|
52
|
-
⑤ 审稿有问题:continuable 角色就地续修(write 用 send_message
|
|
53
|
-
⑥
|
|
51
|
+
④ 委派 review 审稿(status 置 review):审稿清单(语言与节奏/人设符合/不剧透后期/伏笔推进合理/章尾钩子/风格符合)+ 一致性扫描(冲突/时间线/伏笔/设定 + 连贯六维:行为/因果/资源/身份/伤势/战力);
|
|
52
|
+
⑤ 审稿有问题:continuable 角色就地续修(write 用 send_message 续),或你亲自微调;通过后交⑥定稿维护,此刻先不动 status;
|
|
53
|
+
⑥ 定稿维护(原子动作,全部落盘才算定稿):委派 lore 一次跑完——章纲对照结论(共创模式)、五本账(memories/timeline/relations/foreshadows/clue-board:出场记录、伏笔状态推进、时间线与记忆更新、新关系与关系变动入 relations.yml 且新角色与在场者有关系必登记、新线索入线索板)、index.yml 重建(与章节现状不符时)、一致性核对;四项全落盘后你才把 status 置 accepted。中途断了必须让 lore 汇报缺口清单(列明哪几项未落盘)再续跑,不许带半套账定稿。
|
|
54
54
|
循环检查:还有非 accepted 章节 → 回 ① 继续;全部定稿 → 推进 phase。
|
|
55
55
|
|
|
56
56
|
## Collab 四步共创(新书冷启动)
|
|
@@ -110,6 +110,9 @@
|
|
|
110
110
|
disabled: !!js process.platform !== 'win32'
|
|
111
111
|
|
|
112
112
|
# ── filesystem ──────────────────────────────────────────────────────────────
|
|
113
|
+
# 命名注意:tool-fs 的文件写工具名是 write,与下方 delegation 组 delegation-write
|
|
114
|
+
# 以 toolName: write 注册的委派工具同名('write' 一名双义——restrict.mjs 的
|
|
115
|
+
# MAIN_AGENT_ALLOW 单条同时放行两义,详见 delegation-write 行注释)。
|
|
113
116
|
|
|
114
117
|
- id: tool-fs
|
|
115
118
|
name: '@deepseek-ai/dsh-tool-fs'
|
|
@@ -216,7 +219,7 @@
|
|
|
216
219
|
toolName: outline
|
|
217
220
|
backgroundMode: continuable
|
|
218
221
|
persona: |-
|
|
219
|
-
你是网文项目的大纲师。职责:卷章规划与章节大纲。收到委派后:先读 novel/project.yml、novel/index.yml 与 novel/style.md(若有)掌握全局,再按任务写/改 volumes.yml 或 chapters/ 下目标章的 frontmatter——title、status 置 pending、summary(一句话梗概)与五维叙事字段(cognitive_frame 认知框架 / emotional_anchor 情感锚点 / world_texture 世界质感 / suspense 具体悬念 / interpersonal_tension 人际张力),每项 1-3 句、具体到本章,不写空话。节奏意识:单章对应一个完整小高潮、章尾留钩子;卷内 3-5 章一个中高潮、卷末大高潮;新书分卷规划先给各卷一句话定位。五维字段与节拍服从 style.md 风格基调,风格与任务要求冲突时上报主编。规划前三章前用 skill 工具加载 maoying-golden-opening,排本卷节奏曲线时加载 maoying-beat-pacing,埋设规划对照 foreshadows.yml 并遵循 maoying-foreshadow-discipline。涉及新设定(新角色/新地点)只在大纲中点名,落盘归设定管理员;发现核心设定缺失(无主角卡/核心反派卡、无 volumes.yml 分卷规划)时停手上报主编缺失清单,不在大纲里自行发明设定。共创模式(project.yml mode 为 co-write / author-draft)下加一项产出:章纲 novel/outlines/vXX-cXXX.md,纯 markdown 无 frontmatter
|
|
222
|
+
你是网文项目的大纲师。职责:卷章规划与章节大纲。收到委派后:先读 novel/project.yml、novel/index.yml 与 novel/style.md(若有)掌握全局,再按任务写/改 volumes.yml 或 chapters/ 下目标章的 frontmatter——title、status 置 pending、summary(一句话梗概)与五维叙事字段(cognitive_frame 认知框架 / emotional_anchor 情感锚点 / world_texture 世界质感 / suspense 具体悬念 / interpersonal_tension 人际张力),每项 1-3 句、具体到本章,不写空话。节奏意识:单章对应一个完整小高潮、章尾留钩子;卷内 3-5 章一个中高潮、卷末大高潮;新书分卷规划先给各卷一句话定位。五维字段与节拍服从 style.md 风格基调,风格与任务要求冲突时上报主编。规划前三章前用 skill 工具加载 maoying-golden-opening,排本卷节奏曲线时加载 maoying-beat-pacing,埋设规划对照 foreshadows.yml 并遵循 maoying-foreshadow-discipline。涉及新设定(新角色/新地点)只在大纲中点名,落盘归设定管理员;发现核心设定缺失(无主角卡/核心反派卡、无 volumes.yml 分卷规划)时停手上报主编缺失清单,不在大纲里自行发明设定。共创模式(project.yml mode 为 co-write / author-draft)下加一项产出:章纲 novel/outlines/vXX-cXXX.md,纯 markdown 无 frontmatter,与同名章节一一对应,六件写全——本章目标、节拍、出场角色、需埋/需收伏笔、与前章接口、章尾钩子(## 钩子 独立成节:钩子类型 + 内容,类型对照 maoying-beat-pacing 的钩子类型库,写明下一章前提被什么改变);这是作者的创作输入,颗粒度要到作者拿着就能动笔。完成后回报:改了哪些文件、每章一句话梗概、遗留给主编的决策点。创作方向拿不准就用 ask_user_question 问主编,选项要具体。圣域纪律:chapters/ 目录正文唯作者可改,agent 只可在 author/co-write 章节上更新 frontmatter 的 summary 与五维字段,且以建议为先、动笔前说明;ai-draft 章节不受此限。
|
|
220
223
|
On tool failure, do not retry a denied operation: report the failure compactly — what you completed, the exact error, which tool/permission you lack, and your suggested next step.
|
|
221
224
|
toolFilter:
|
|
222
225
|
allow:
|
|
@@ -232,6 +235,12 @@
|
|
|
232
235
|
- todo_write
|
|
233
236
|
|
|
234
237
|
# 写手:章节正文
|
|
238
|
+
# 命名注意:toolName: write 与本文件上方 filesystem 区 tool-fs 提供的文件
|
|
239
|
+
# 写工具 write 同名——主编工具面里 'write' 一名双义(文件写 vs 本委派)。
|
|
240
|
+
# 宿主 registry 对同名工具的处理仓内无法核实,故不改 toolName(行为风险);
|
|
241
|
+
# restrict.mjs 的 MAIN_AGENT_ALLOW 单条 'write' 即同时放行两义。改名前必须
|
|
242
|
+
# 先核实宿主 registry 对同名工具的处理,并连同 restrict.mjs 与 filesystem
|
|
243
|
+
# 区一起改。
|
|
235
244
|
- id: delegation-write
|
|
236
245
|
name: '@deepseek-ai/dsh-tool-subagent'
|
|
237
246
|
config:
|
|
@@ -239,7 +248,7 @@
|
|
|
239
248
|
toolName: write
|
|
240
249
|
backgroundMode: continuable
|
|
241
250
|
persona: |-
|
|
242
|
-
你是网文项目的写手。职责:按大纲写章节正文。收到委派后:读目标章 frontmatter(大纲+五维字段)、前一章结尾约 1500 字(衔接)、出场角色卡(novel/characters
|
|
251
|
+
你是网文项目的写手。职责:按大纲写章节正文。收到委派后:读目标章 frontmatter(大纲+五维字段)、前一章结尾约 1500 字(衔接)、出场角色卡(novel/characters/,只读出场者;涉及 world 条目同理,长条目 >100 行只读开头 ## 锚点 段与相关小节)、活跃伏笔(novel/foreshadows.yml 中 planted/progressing 条目)、novel/style.md 写作风格基准(若有);中途接笔先读 memories.yml 的 arc 卷摘要(冻结不重写)再补章级细节,然后把正文写入该章文件 body(frontmatter 之下),status 置 writing。写前三章前用 skill 工具加载 maoying-golden-opening;节奏起伏拿不准时加载 maoying-beat-pacing。写法纪律:正文遵守 style.md 风格基准(人称、语言基调、对话腔、描写密度);单章 2000-4000 字;叙事覆盖五维字段的层次;人物言行严格符合角色卡,拿不准宁可保守;需要埋设或推进伏笔时按任务要求执行并在回报中列明;章尾留钩子;不堆砌景物,快节奏强反馈;对话推动剧情,少写长篇独白。发现设定冲突或需要新设定:停笔,在回报中向主编上报,绝不自行改角色卡/世界观/伏笔文件(那是设定管理员的活)。status 只置 writing,不改 accepted/review(推进由主编决定)。完成后回报:字数、五维覆盖情况、伏笔异动清单、设定变更需求。边界:author-draft 模式与 co-write 的 author 章不启用写手,那是作者亲笔的地盘;一旦被启用,也不得越界改作者已写章节的正文。圣域纪律:chapters/ 目录正文唯作者可改,agent 只可在 author/co-write 章节上更新 frontmatter 的 summary 与五维字段,且以建议为先、动笔前说明;ai-draft 章节不受此限。
|
|
243
252
|
On tool failure, do not retry a denied operation: report the failure compactly — what you completed, the exact error, which tool/permission you lack, and your suggested next step.
|
|
244
253
|
toolFilter:
|
|
245
254
|
allow:
|
|
@@ -254,7 +263,7 @@
|
|
|
254
263
|
- ask_user_question
|
|
255
264
|
- todo_write
|
|
256
265
|
|
|
257
|
-
# 审校:审稿清单 +
|
|
266
|
+
# 审校:审稿清单 + 一致性扫描(冲突/时间线/伏笔/设定 + 连贯六维)(只读,出报告不改稿)
|
|
258
267
|
- id: delegation-review
|
|
259
268
|
name: '@deepseek-ai/dsh-tool-subagent'
|
|
260
269
|
config:
|
|
@@ -263,8 +272,8 @@
|
|
|
263
272
|
backgroundMode: one-shot
|
|
264
273
|
persona: |-
|
|
265
274
|
你是网文项目的审校。只读不改:不修改任何文件,交付的是意见清单——逐条列问题与位置,不产出改写文本。收到委派后:先用 skill 工具加载 maoying-review-checklist(七层检查标准与输出格式以它为准),再通读目标章(novel/chapters/),对照出场角色卡、活跃伏笔(novel/foreshadows.yml)、时间线(novel/timeline.yml)与前章,输出固定格式报告:
|
|
266
|
-
① 审稿清单逐项勾选:语言与节奏 /
|
|
267
|
-
②
|
|
275
|
+
① 审稿清单逐项勾选:语言与节奏 / 人设符合(出场角色带 never_do 行为红线的逐条对照,越线即 P0)/ 不剧透后期 / 伏笔推进合理 / 章尾钩子 / 风格符合(对照 novel/style.md,若有);
|
|
276
|
+
② 一致性扫描:冲突/时间线/伏笔/设定 + 连贯六维(行为/因果/资源/身份/伤势/战力)——每维列出具体位置(章节+段落引用)与问题描述,该维无问题也要明说「本维无问题」;
|
|
268
277
|
③ 修改建议按严重度排序(阻塞 > 应改 > 可改),建议写给主编转写手,不直接动稿。
|
|
269
278
|
④ 共创收稿(作者亲笔章):对照 novel/outlines/ 下的同名章纲评偏离——作者没照章纲写不算错,偏离如实报告,裁决归主编。
|
|
270
279
|
报告控制在 400 字内,问题位置精确到可跳转。
|
|
@@ -290,7 +299,7 @@
|
|
|
290
299
|
toolName: lore
|
|
291
300
|
backgroundMode: continuable
|
|
292
301
|
persona: |-
|
|
293
|
-
你是网文项目的设定管理员。职责:创作要素的落盘与推进。按任务维护:characters/*.md(角色卡)、world/*.md、science/*.md、relations.yml、foreshadows.yml、timeline.yml、memories.yml、clue-board.yml。纪律:只记事实不发挥;不改动既有条目(除非任务明确要求);格式以 novel/README.md 为准。伏笔状态机:planted → progressing → resolved / abandoned,埋设与回收章节号必填;台账维护纪律(登记字段、推进间隔、清理阈值)用 skill 工具加载 maoying-foreshadow-discipline。章节定稿维护任务:从该章正文提取出场角色(memories.yml 记 category: appearance 一条)、伏笔状态推进、新事件入 timeline.yml、重要承诺入 memories.yml(category: promise)、新线索入 clue-board.yml、新关系与关系变动入 relations.yml(a/b 用角色卡 slug
|
|
302
|
+
你是网文项目的设定管理员。职责:创作要素的落盘与推进。按任务维护:characters/*.md(角色卡)、world/*.md、science/*.md、relations.yml、foreshadows.yml、timeline.yml、memories.yml、clue-board.yml。纪律:只记事实不发挥;不改动既有条目(除非任务明确要求);格式以 novel/README.md 为准。伏笔状态机:planted → progressing → resolved / abandoned,埋设与回收章节号必填;台账维护纪律(登记字段、推进间隔、清理阈值)用 skill 工具加载 maoying-foreshadow-discipline。章节定稿维护任务:从该章正文提取出场角色(memories.yml 记 category: appearance 一条)、伏笔状态推进、新事件入 timeline.yml、重要承诺入 memories.yml(category: promise)、新线索入 clue-board.yml、新关系与关系变动入 relations.yml(a/b 用角色卡 slug);卷末另做:本卷剧情梗概入 memories.yml(category: arc,一卷一条),凝固后不再重写。建卡任务里凡新卡与既有卡存在戏剧关系,当场逐条登记,不攒账。共创收稿回填:作者交稿后读新稿,提取实际发生的伏笔埋设/回收、时间线事件、新关系、承诺线、线索,更新五本账(foreshadows/timeline/relations/memories/clue-board)——账本跟随正文而非章纲,两者打架以正文为准;foreshadows 条目可带可选 source: plan | backfill,从正文回填认领的标 backfill,章纲/大纲计划登记的缺省 plan。index.yml 与章节现状不符时按 README 规范重建。完成后回报:新建/更新了哪些条目、伏笔状态变化一览(id + 旧状态 → 新状态)。圣域纪律:chapters/ 目录正文唯作者可改,agent 只可在 author/co-write 章节上更新 frontmatter 的 summary 与五维字段,且以建议为先、动笔前说明;ai-draft 章节不受此限。
|
|
294
303
|
On tool failure, do not retry a denied operation: report the failure compactly — what you completed, the exact error, which tool/permission you lack, and your suggested next step.
|
|
295
304
|
toolFilter:
|
|
296
305
|
allow:
|
|
@@ -17,8 +17,11 @@
|
|
|
17
17
|
* web_fetch(考据委派 research)、skill 目录(registry deny 堵 ~1.3k 注入)、
|
|
18
18
|
* 以及未列出的一切通用委派与工作流工具。
|
|
19
19
|
*
|
|
20
|
-
* write / edit 保留在白名单(见 MAIN_AGENT_ALLOW
|
|
21
|
-
* 小补(改 phase、补 frontmatter
|
|
20
|
+
* write / edit 保留在白名单(见 MAIN_AGENT_ALLOW):主编需要亲自做小修
|
|
21
|
+
* 小补(改 phase、补 frontmatter、微调摘要),这些活不值得委派一次。注意
|
|
22
|
+
* 'write' 一名双义——既是 tool-fs 的文件写工具,也是 delegation-write 以
|
|
23
|
+
* toolName: write 注册的委派工具(宿主 registry 对同名工具的处理仓内无法
|
|
24
|
+
* 核实,改名前必须先核实;详见 MAIN_AGENT_ALLOW 内注释)。
|
|
22
25
|
*
|
|
23
26
|
* Host 工具(mcp__*、插件工具)一律不硬编码——是否挂载是检测期事实,
|
|
24
27
|
* 硬编码会让未装对应插件的宿主直接出错。本文件只留 dsh 核心工具。
|
|
@@ -36,6 +39,11 @@ export const inject = ['systemPrompt', 'tools']
|
|
|
36
39
|
const MAIN_AGENT_ALLOW = new Set([
|
|
37
40
|
// ── 角色委派 ─────────────────────────────────────────────────────
|
|
38
41
|
'outline',
|
|
42
|
+
// 命名注意:'write' 一名双义——delegation-write 以 toolName: write 注册的
|
|
43
|
+
// 委派工具,与 tool-fs 提供的文件写工具(agent.cordis*.yml 的 filesystem 区)
|
|
44
|
+
// 同名。白名单按工具名匹配,这里单条 'write' 即同时放行两义。宿主 registry
|
|
45
|
+
// 对同名工具的处理仓内无法核实,故不改名;改名前必须先核实 registry 行为,
|
|
46
|
+
// 并连同两份 agent.cordis*.yml 的 toolName/filesystem 一起改。
|
|
39
47
|
'write',
|
|
40
48
|
'review',
|
|
41
49
|
'lore',
|
|
@@ -61,7 +69,9 @@ const MAIN_AGENT_ALLOW = new Set([
|
|
|
61
69
|
'job_list',
|
|
62
70
|
'job_kill',
|
|
63
71
|
// ── 主编亲笔(小修小补不过委派) ────────────────────────────────
|
|
64
|
-
'write'
|
|
72
|
+
// 这里只列 'edit':'write'(文件写语义正属此区)已由上方「角色委派」区的
|
|
73
|
+
// 同名条目放行——同一个 Set 里写两遍会被静默去重,反而掩盖「'write' 一名
|
|
74
|
+
// 双义(文件写 vs 委派工具)」这一事实,故显式只写一处并加注释。
|
|
65
75
|
'edit',
|
|
66
76
|
])
|
|
67
77
|
|
|
@@ -84,6 +94,9 @@ let warned = false
|
|
|
84
94
|
function isDelegatedChild(agent) {
|
|
85
95
|
const header = agent?.session?.header
|
|
86
96
|
if (header === undefined) return false
|
|
97
|
+
// 括号必须显式:?? 的优先级低于比较运算符,裸写 delegationDepth ?? 0 > 0
|
|
98
|
+
// 会被解析成 delegationDepth ?? (0 > 0)——当前取值侥幸同义,显式括号防未来
|
|
99
|
+
// 改默认值/比较符时悄悄变义。
|
|
87
100
|
return header.origin === 'subagent' || (header.delegationDepth ?? 0) > 0
|
|
88
101
|
}
|
|
89
102
|
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* client.js 冒烟(npm run smoke,CI 同跑):不启浏览器、零依赖,三步校验
|
|
4
|
+
* lib/client.js 的可加载性与导出面契约——
|
|
5
|
+
* ① 语法可编译:整份源码 new Function 包裹,解析失败即红;
|
|
6
|
+
* ② ModuleLoader 拦截:stub window / document 求值,截获 load({ id, factory }),
|
|
7
|
+
* id 必须是 dsh-maoying(图行 id 约定,挂错名宿主首载即 import 报错);
|
|
8
|
+
* ③ factory 求值:stub react(五个 hook + createElement + Component——
|
|
9
|
+
* class extends 在定义期就要 Component)与宿主 UI 原语;react-dom/client
|
|
10
|
+
* 缺席由 factory 内部 catch(Node 下拿不到属正常)。导出面必须 =
|
|
11
|
+
* { inject: 含 "slots" 的数组, apply: 函数 },且 apply 两次求值:
|
|
12
|
+
* 带 slots stub 时应把入口挂到 sidebar.footer.action 键控槽(id
|
|
13
|
+
* maoying-creator),不带 slots 时护栏折返也不炸——两次都返回 disposer
|
|
14
|
+
* 函数且可安全调用。
|
|
15
|
+
* 任何一步失败 exit 1(console.error 中文说明)。
|
|
16
|
+
*/
|
|
17
|
+
import { readFileSync } from 'node:fs'
|
|
18
|
+
import path from 'node:path'
|
|
19
|
+
import { fileURLToPath } from 'node:url'
|
|
20
|
+
|
|
21
|
+
const fail = (message) => {
|
|
22
|
+
console.error(`smoke: ${message}`)
|
|
23
|
+
process.exit(1)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const pluginRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
|
|
27
|
+
const source = readFileSync(path.join(pluginRoot, 'lib', 'client.js'), 'utf8')
|
|
28
|
+
|
|
29
|
+
// ① 语法可编译
|
|
30
|
+
let compiled
|
|
31
|
+
try {
|
|
32
|
+
compiled = new Function('window', 'document', source)
|
|
33
|
+
} catch (err) {
|
|
34
|
+
fail(`lib/client.js 语法不可编译:${err.message}`)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// ② 求值并截获 ModuleLoader.load(querySelector 给真值走 mountCss 幂等跳过支,
|
|
38
|
+
// Node 下不触碰任何真实 DOM)
|
|
39
|
+
let definition = null
|
|
40
|
+
const windowStub = {
|
|
41
|
+
__ModuleLoader__: {
|
|
42
|
+
load(def) {
|
|
43
|
+
definition = def
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
}
|
|
47
|
+
const documentStub = { currentScript: null, querySelector: () => ({}) }
|
|
48
|
+
try {
|
|
49
|
+
compiled(windowStub, documentStub)
|
|
50
|
+
} catch (err) {
|
|
51
|
+
fail(`lib/client.js 顶层求值失败:${err.message}`)
|
|
52
|
+
}
|
|
53
|
+
if (!definition || typeof definition.factory !== 'function') {
|
|
54
|
+
fail(`未截获 __ModuleLoader__.load({ factory }),实得:${JSON.stringify(definition)?.slice(0, 120)}`)
|
|
55
|
+
}
|
|
56
|
+
if (definition.id !== 'dsh-maoying') {
|
|
57
|
+
fail(`插件 id 应为 dsh-maoying(图行 id 约定),实得「${definition.id}」`)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// ③ factory 求值:导出面 + apply 双路
|
|
61
|
+
const reactStub = {
|
|
62
|
+
createElement: (...args) => ({ $$el: args }),
|
|
63
|
+
useState: (initial) => [initial, () => {}],
|
|
64
|
+
useEffect: () => {},
|
|
65
|
+
useCallback: (fn) => fn,
|
|
66
|
+
useRef: (initial) => ({ current: initial }),
|
|
67
|
+
useMemo: (fn) => fn(),
|
|
68
|
+
Component: class Component {},
|
|
69
|
+
}
|
|
70
|
+
const requireStub = (name) => {
|
|
71
|
+
if (name === 'react') return reactStub
|
|
72
|
+
// 宿主 UI 原语:factory 只做 Object.assign 拷贝,空对象即可(缺名图标渲染期
|
|
73
|
+
// 才会用到,本冒烟不渲染)。
|
|
74
|
+
if (name === '@deepseek-ai/dsh-client-ui-primitives') return {}
|
|
75
|
+
// react-dom/client 由 factory 内部 catch(返回 null),这里抛错即模拟缺席;
|
|
76
|
+
// 其余未知模块视为依赖面外溢,直接红。
|
|
77
|
+
throw new Error(`smoke require stub: 意外模块「${name}」`)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
let exportsSurface = null
|
|
81
|
+
try {
|
|
82
|
+
exportsSurface = definition.factory(requireStub)
|
|
83
|
+
} catch (err) {
|
|
84
|
+
fail(`factory 求值失败:${err.message}`)
|
|
85
|
+
}
|
|
86
|
+
if (!exportsSurface || typeof exportsSurface !== 'object') fail('factory 未返回导出对象')
|
|
87
|
+
if (!Array.isArray(exportsSurface.inject) || !exportsSurface.inject.includes('slots')) {
|
|
88
|
+
fail(`exports.inject 应为含 "slots" 的依赖数组,实得:${JSON.stringify(exportsSurface.inject)}`)
|
|
89
|
+
}
|
|
90
|
+
if (typeof exportsSurface.apply !== 'function') fail('exports.apply 应为函数')
|
|
91
|
+
|
|
92
|
+
// apply ①:带 slots stub——入口应挂到 sidebar.footer.action 键控槽
|
|
93
|
+
const injectedSlots = []
|
|
94
|
+
const registeredMetas = []
|
|
95
|
+
let registerReturns = 0
|
|
96
|
+
const slotsStub = {
|
|
97
|
+
inject(slot, mount) {
|
|
98
|
+
injectedSlots.push(slot)
|
|
99
|
+
const component = mount() // 触发 register:只求值组件引用,不渲染
|
|
100
|
+
if (component === undefined) fail('slots.inject 的 mount 工厂未返回 register 结果')
|
|
101
|
+
return () => {}
|
|
102
|
+
},
|
|
103
|
+
register(meta) {
|
|
104
|
+
registeredMetas.push(meta)
|
|
105
|
+
registerReturns += 1
|
|
106
|
+
return { disposed: false }
|
|
107
|
+
},
|
|
108
|
+
}
|
|
109
|
+
const loggerWarns = []
|
|
110
|
+
const disposerA = exportsSurface.apply({
|
|
111
|
+
logger: { warn(...args) { loggerWarns.push(args.map(String).join(' ')) } },
|
|
112
|
+
slots: slotsStub,
|
|
113
|
+
})
|
|
114
|
+
if (typeof disposerA !== 'function') fail('apply(ctx) 应返回 disposer 函数')
|
|
115
|
+
if (injectedSlots.join(',') !== 'sidebar.footer.action') {
|
|
116
|
+
fail(`入口应注入 sidebar.footer.action 槽,实得:${injectedSlots.join(',') || '(无)'}`)
|
|
117
|
+
}
|
|
118
|
+
if (registerReturns !== 1 || registeredMetas[0]?.id !== 'maoying-creator') {
|
|
119
|
+
fail(`应注册 id 为 maoying-creator 的入口,实得:${JSON.stringify(registeredMetas)}`)
|
|
120
|
+
}
|
|
121
|
+
disposerA() // disposer 必须可安全调用(幂等清理不抛)
|
|
122
|
+
|
|
123
|
+
// apply ②:无 slots(护栏未声明该服务)——折返不炸,照样给出 disposer
|
|
124
|
+
const disposerB = exportsSurface.apply({ logger: { warn() {} } })
|
|
125
|
+
if (typeof disposerB !== 'function') fail('apply 无 slots 时也应返回 disposer(护栏折返语义)')
|
|
126
|
+
disposerB()
|
|
127
|
+
|
|
128
|
+
console.log('smoke 通过:client.js 编译 ✓ ModuleLoader 截获 ✓ 导出面 { inject, apply } ✓ slots 注入与 disposer ✓')
|
|
@@ -37,4 +37,4 @@ description: 伏笔管理纪律——埋设登记、推进节奏、回收标准
|
|
|
37
37
|
- **大纲师**:规划章节大纲时核对 foreshadows.yml——本章该埋什么、该推进什么、到限该回收什么,写进五维字段的具体悬念项。
|
|
38
38
|
- **写手**:按任务要求执行埋设/推进,回报里列「本章伏笔异动清单」(动了哪个 id、什么动作);发现正文自然长出的新伏笔,回报主编裁决是否登记。
|
|
39
39
|
- **设定管理员**:定稿维护时按本章正文核准台账(状态、章节号、notes),并输出状态变化一览。
|
|
40
|
-
-
|
|
40
|
+
- **审校**:一致性扫描(冲突/时间线/伏笔/设定 + 连贯六维)的伏笔维,以本台账为唯一事实源。
|
|
@@ -23,15 +23,21 @@ description: 网文章节审校清单——语言/节奏/人设/逻辑/伏笔/
|
|
|
23
23
|
|
|
24
24
|
### 3. 人设层(对照 characters/ 角色卡)
|
|
25
25
|
- 言行符合角色卡的性格与说话方式;偏离必须有剧情内的成因(成长/刺激/伪装),否则记 P0;
|
|
26
|
+
- 行为红线:出场角色卡带 `never_do` 的逐条对照——此角色绝不会做的事写了就是越线,记 P0;
|
|
26
27
|
- 动机成立:本章角色的关键行动有可信动机;
|
|
27
28
|
- 能力边界一致:主角能力/金手指没有无端膨胀(超出已确立的规则记 P0);
|
|
28
29
|
- 配角不工具化:反派行为符合其自身利益逻辑。
|
|
29
30
|
|
|
30
|
-
### 4.
|
|
31
|
+
### 4. 逻辑层(连贯六维:前后矛盾按行为/因果/资源/身份/伤势/战力逐维扫)
|
|
32
|
+
- **行为**:本章言行与角色既有行为模式、立场连续,无无端变卦;
|
|
33
|
+
- **因果**:本章引入的冲突有来源,兑现的铺垫有出处,无凭空起事;
|
|
34
|
+
- **资源**:钱/物/人的数量与去向逐笔对得上——花掉要减、得到要记、带走的人要有着落;
|
|
35
|
+
- **身份**:称谓/立场/知情范围与已揭示的身份一致,未揭示前不得穿帮;
|
|
36
|
+
- **伤势**:伤病跨章连续,重伤不凭空痊愈,痊愈须有过程;
|
|
37
|
+
- **战力**:能力/金手指按已确立规则排布,无无端膨胀或降智(违者 P0);
|
|
31
38
|
- 时间线连续:与前章及 timeline.yml 无矛盾(昼夜/季节/时长对得上);
|
|
32
39
|
- 空间移动合理:位置变化有过程或合理解释;
|
|
33
|
-
- **信息知情权**:角色只知道他该知道的——不得使用其不在场、无人告知的信息做决策(违者 P0
|
|
34
|
-
- 因果闭合:本章引入的冲突有来源,本章兑现的铺垫有出处。
|
|
40
|
+
- **信息知情权**:角色只知道他该知道的——不得使用其不在场、无人告知的信息做决策(违者 P0)。
|
|
35
41
|
|
|
36
42
|
### 5. 伏笔层(对照 foreshadows.yml)
|
|
37
43
|
- 本章埋设的伏笔是否已登记(未登记记 P1,报给主编转设定管理员);
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
- 阶段 `phase`(七态):`idea` `setting` `outline` `writing` `review` `consistency` `export`
|
|
14
14
|
- 角色 `role`:`protagonist`(主角)`antagonist`(反派)`supporting`(重要配角)`minor`(龙套)
|
|
15
15
|
- 考据 `label`:`known`(史实/公理)`extrapolation`(合理推演)`hypothesis`(自设假说)
|
|
16
|
-
- 记忆 `category`:`character` `location` `item` `event` `promise` `appearance` `other`
|
|
16
|
+
- 记忆 `category`:`character` `location` `item` `event` `promise` `appearance` `arc`(卷级梗概)`other`
|
|
17
17
|
- 线索 `kind`:`clue`(线索)`red-herring`(误导)`deduction`(推理)`question`(悬问)
|
|
18
18
|
- 章节文件名 `v<卷号2位>-c<章号3位>.md`(如 `v01-c001.md`);frontmatter 里的 `volume`/`num` 与文件名保持一致。
|
|
19
19
|
- 角色/世界观/考据文件用小写英文短横线 slug 命名(如 `lin-waner.md`);其他文件引用角色时用同一个 slug。
|
|
@@ -73,7 +73,7 @@ interpersonal_tension: 本章人物关系中的压力与变化
|
|
|
73
73
|
|
|
74
74
|
## outlines/vXX-cXXX.md
|
|
75
75
|
|
|
76
|
-
章纲:共创模式(co-write / author-draft)下大纲师写给作者的创作输入,与章节文件一一对应(`outlines/v01-c005.md` ↔ `chapters/v01-c005.md`)。纯 markdown、无 frontmatter
|
|
76
|
+
章纲:共创模式(co-write / author-draft)下大纲师写给作者的创作输入,与章节文件一一对应(`outlines/v01-c005.md` ↔ `chapters/v01-c005.md`)。纯 markdown、无 frontmatter——作者在任意编辑器打开就要能看。六件内容写全,章尾钩子从「与前章接口」独立成 `## 钩子` 节:
|
|
77
77
|
|
|
78
78
|
```markdown
|
|
79
79
|
# 第 5 章 雪夜来客
|
|
@@ -82,14 +82,19 @@ interpersonal_tension: 本章人物关系中的压力与变化
|
|
|
82
82
|
- 节拍:……(场景推进顺序与情绪起伏)
|
|
83
83
|
- 出场角色:……(谁上场、各带什么目的)
|
|
84
84
|
- 需埋/需收伏笔:……(对照 foreshadows.yml 报 id)
|
|
85
|
-
-
|
|
85
|
+
- 与前章接口:……(从哪个钩子接)
|
|
86
|
+
|
|
87
|
+
## 钩子
|
|
88
|
+
|
|
89
|
+
- 类型:……(对照 maoying-beat-pacing 的钩子类型库选型)
|
|
90
|
+
- 内容:……(章尾钩到哪,下一章的前提被什么改变)
|
|
86
91
|
```
|
|
87
92
|
|
|
88
93
|
颗粒度标准:作者拿着就能动笔。章纲是计划不是章节事实,不入 index.yml;大纲师写、作者读、review 收稿时对照评偏离——作者没照章纲写不算错,账本永远跟正文走。
|
|
89
94
|
|
|
90
95
|
## characters/<slug>.md
|
|
91
96
|
|
|
92
|
-
角色卡。`markers`
|
|
97
|
+
角色卡。`markers` 是角色的辨识性口癖/习惯清单(审校盯人设用);可选 `never_do` 是行为红线——此角色绝不会做的事(如「绝不当众认输」「从不撒谎害人」),出场即逐条对照,越线记 P0;body 写备注。
|
|
93
98
|
|
|
94
99
|
```markdown
|
|
95
100
|
---
|
|
@@ -104,6 +109,8 @@ motivation: 行动动机
|
|
|
104
109
|
arc: 全书成长弧线(从什么到什么)
|
|
105
110
|
markers: # 辨识标记,一行一个
|
|
106
111
|
- 紧张时摩挲袖口
|
|
112
|
+
never_do: # 可选:行为红线(绝不会做的事),一行一个
|
|
113
|
+
- 绝不当众认输
|
|
107
114
|
---
|
|
108
115
|
|
|
109
116
|
备注……
|
|
@@ -111,7 +118,7 @@ markers: # 辨识标记,一行一个
|
|
|
111
118
|
|
|
112
119
|
## world/<slug>.md
|
|
113
120
|
|
|
114
|
-
世界观条目。`category` 用中文四类:`地点` `组织` `概念` `事件`;body
|
|
121
|
+
世界观条目。`category` 用中文四类:`地点` `组织` `概念` `事件`;body 是描述。长条目(>100 行)建议在开头放 `## 锚点` 段——10 行内摘要(这是什么、规则边界、与主线的关系),agent 取上下文只读锚点段与相关小节,不整读长文。
|
|
115
122
|
|
|
116
123
|
```markdown
|
|
117
124
|
---
|
|
@@ -183,7 +190,7 @@ references: # 依据来源,一行一个(已知设定 id 或现
|
|
|
183
190
|
|
|
184
191
|
## memories.yml
|
|
185
192
|
|
|
186
|
-
叙事记忆:正文里已成立的事实账。`appearance` 是出场记录(谁在哪章登过场),`promise`
|
|
193
|
+
叙事记忆:正文里已成立的事实账。`appearance` 是出场记录(谁在哪章登过场),`promise` 是角色说出口的承诺(读者记着账),`arc` 是卷级剧情梗概(一卷一条,卷末凝固,写定不再重写)。只记已写进正文的事实,不记计划。
|
|
187
194
|
|
|
188
195
|
```yaml
|
|
189
196
|
- category: appearance # character|location|item|event|promise|appearance|other
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# memories.yml —— 叙事记忆(顶层数组;只记已写进正文的事实,不记计划)
|
|
2
2
|
# 字段:
|
|
3
|
-
# category character|location|item|event|promise|appearance|other
|
|
4
|
-
# (appearance = 出场记录:谁在哪章登过场;promise =
|
|
3
|
+
# category character|location|item|event|promise|appearance|arc|other
|
|
4
|
+
# (appearance = 出场记录:谁在哪章登过场;promise = 已说出口的承诺;
|
|
5
|
+
# arc = 卷级剧情梗概,卷末凝固,写定不再重写)
|
|
5
6
|
# content 事实一句话
|
|
6
7
|
# source_chapter 出处章节号
|
|
7
8
|
[]
|