dsh-openwrite 0.2.27 → 0.2.33

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.
Files changed (130) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +55 -6
  3. package/THIRD_PARTY_NOTICES.md +4 -3
  4. package/companions.mjs +508 -0
  5. package/cordis.patch.yml +0 -2
  6. package/docs/CLOSED_ISSUE_FOLLOWUPS.md +5 -3
  7. package/docs/COMPANION_PLUGINS.md +142 -0
  8. package/docs/CONTEXT_SLOTS.md +60 -0
  9. package/docs/COST_MEASUREMENT.md +2 -2
  10. package/docs/DEVELOPMENT.md +6 -11
  11. package/docs/DSH_STORE.md +14 -2
  12. package/docs/EDITOR_SAFETY_REPAIRS.md +17 -0
  13. package/docs/INSTALL.md +112 -4
  14. package/docs/ISSUES_121_123.md +97 -0
  15. package/docs/ISSUES_140_142.md +58 -0
  16. package/docs/ISSUES_149_150_151.md +77 -0
  17. package/docs/ISSUES_98_100.md +2 -0
  18. package/docs/ISSUE_123_FOLLOWUP.md +55 -0
  19. package/docs/ISSUE_146_REVIEW_EVIDENCE.md +53 -0
  20. package/docs/LEARNING.md +1 -1
  21. package/docs/MOBILE_READINESS.md +62 -0
  22. package/docs/PLUGIN_MAINTENANCE.md +1 -3
  23. package/docs/RELEASE_ACCEPTANCE.md +90 -3
  24. package/docs/REVIEW_ROUND_22.md +67 -0
  25. package/docs/REVIEW_ROUND_23.md +48 -0
  26. package/docs/REVIEW_ROUND_25.md +51 -0
  27. package/docs/SELECTION_UPGRADE_REPAIRS.md +16 -0
  28. package/docs/TOOLS.md +933 -0
  29. package/docs/WORKFLOWS.md +5 -5
  30. package/package.json +18 -21
  31. package/packages/openwrite-bridge/lib/client.d.ts +0 -1
  32. package/packages/openwrite-bridge/lib/client.js +90 -9
  33. package/packages/openwrite-bridge/lib/contracts-generated.js +2 -1
  34. package/packages/openwrite-bridge/lib/dog-delivery.d.ts +1 -0
  35. package/packages/openwrite-bridge/lib/dog-delivery.js +10 -4
  36. package/packages/openwrite-bridge/lib/dog-review.js +15 -3
  37. package/packages/openwrite-bridge/lib/domain.d.ts +27 -0
  38. package/packages/openwrite-bridge/lib/domain.js +250 -29
  39. package/packages/openwrite-bridge/lib/host-llm.d.ts +188 -0
  40. package/packages/openwrite-bridge/lib/host-llm.js +657 -0
  41. package/packages/openwrite-bridge/lib/host-web.d.ts +61 -0
  42. package/packages/openwrite-bridge/lib/host-web.js +166 -0
  43. package/packages/openwrite-bridge/lib/index.d.ts +4 -0
  44. package/packages/openwrite-bridge/lib/index.js +150 -6
  45. package/packages/openwrite-bridge/lib/managed-runtime.d.ts +47 -2
  46. package/packages/openwrite-bridge/lib/managed-runtime.js +179 -35
  47. package/packages/openwrite-bridge/lib/tool-policy.js +39 -12
  48. package/packages/openwrite-bridge/lib/tools.js +1238 -1219
  49. package/packages/openwrite-bridge/package.json +7 -5
  50. package/packages/studio-panel/lib/client.js +116667 -114773
  51. package/packages/studio-panel/lib/client.js.map +1 -1
  52. package/packages/studio-panel/lib/types/client/LaunchOpenWrite.d.ts +10 -0
  53. package/packages/studio-panel/lib/types/client/ModelView.d.ts +28 -4
  54. package/packages/studio-panel/lib/types/client/OpenWriteSettings.d.ts +64 -0
  55. package/packages/studio-panel/lib/types/client/SceneWorkbench.d.ts +2 -0
  56. package/packages/studio-panel/lib/types/client/SearchSettings.d.ts +2 -0
  57. package/packages/studio-panel/lib/types/client/SerialWritingView.d.ts +2 -1
  58. package/packages/studio-panel/lib/types/client/TurnMutationSummary.d.ts +2 -0
  59. package/packages/studio-panel/lib/types/client/VditorBody.d.ts +8 -2
  60. package/packages/studio-panel/lib/types/client/api.d.ts +41 -2
  61. package/packages/studio-panel/lib/types/client/browser-download.d.ts +4 -0
  62. package/packages/studio-panel/lib/types/client/companions.d.ts +46 -0
  63. package/packages/studio-panel/lib/types/client/dto.d.ts +22 -0
  64. package/packages/studio-panel/lib/types/client/locales.d.ts +1 -1
  65. package/packages/studio-panel/lib/types/client/manuscript-annotations.d.ts +2 -1
  66. package/packages/studio-panel/lib/types/client/manuscript-overlay.d.ts +2 -1
  67. package/packages/studio-panel/lib/types/client/manuscript-selection.d.ts +18 -5
  68. package/packages/studio-panel/lib/types/client/selection-coordinates.d.ts +15 -0
  69. package/packages/studio-panel/lib/types/client/workspace-chrome.d.ts +41 -0
  70. package/packages/studio-panel/package.json +5 -3
  71. package/plugin.mjs +159 -20
  72. package/preset-definition.mjs +144 -4
  73. package/presets/openwrite/agent.cordis.yml +7 -9
  74. package/presets/openwrite/ops-integration.mjs +28 -0
  75. package/presets/openwrite/preset.yml +2 -1
  76. package/presets/openwrite/skills/canon/SKILL.md +3 -3
  77. package/presets/openwrite/skills/delivery-artifact-query/SKILL.md +41 -0
  78. package/presets/openwrite/skills/dialoguequality/SKILL.md +16 -17
  79. package/presets/openwrite/skills/dog-delivery-verification/SKILL.md +113 -0
  80. package/presets/openwrite/skills/export-book/SKILL.md +3 -3
  81. package/presets/openwrite/skills/foreshadow/SKILL.md +1 -1
  82. package/presets/openwrite/skills/foreshadowing-system/SKILL.md +16 -25
  83. package/presets/openwrite/skills/import-artifact-query/SKILL.md +30 -0
  84. package/presets/openwrite/skills/learn/SKILL.md +3 -3
  85. package/presets/openwrite/skills/novel-creator/SKILL.md +10 -10
  86. package/presets/openwrite/skills/novel-reviewer/SKILL.md +11 -11
  87. package/presets/openwrite/skills/progress/SKILL.md +1 -1
  88. package/presets/openwrite/skills/review-artifact-query/SKILL.md +41 -0
  89. package/presets/openwrite/skills/review-chapter/SKILL.md +2 -2
  90. package/presets/openwrite/skills/revise-span/SKILL.md +5 -5
  91. package/presets/openwrite/skills/style-system/SKILL.md +13 -6
  92. package/presets/openwrite/skills/truth-validation/SKILL.md +9 -12
  93. package/presets/openwrite/skills/workflow-manager/SKILL.md +13 -13
  94. package/presets/openwrite/skills/world-query/SKILL.md +16 -11
  95. package/presets/openwrite/skills/write-next/SKILL.md +1 -1
  96. package/release/{openwrite-5.8.16-py3-none-any.whl → openwrite-5.8.30-py3-none-any.whl} +0 -0
  97. package/release/runtime-manifest.json +4 -12
  98. package/release/source.json +21 -21
  99. package/release/wheels/licenses/OPENSSL-3.6.3-LICENSE.txt +225 -0
  100. package/scripts/maintenance.mjs +67 -7
  101. package/scripts/plugin-doctor.mjs +179 -0
  102. package/scripts/prepare.mjs +11 -2
  103. package/scripts/safe-upgrade.mjs +141 -13
  104. package/dog-tools.mjs +0 -11
  105. package/presets/openwrite/skills/dog-delivery-query/SKILL.md +0 -42
  106. package/presets/openwrite/skills/dog-import-query/SKILL.md +0 -29
  107. package/presets/openwrite/skills/dog-review-query/SKILL.md +0 -42
  108. package/scripts/dog/delivery-stage.js +0 -32
  109. package/scripts/dog/import-chapter.js +0 -20
  110. package/scripts/dog/import-record.js +0 -35
  111. package/scripts/dog/review-dimension.js +0 -41
  112. package/scripts/dog/review-record.js +0 -42
  113. package/vendor/dsh-dog/LICENSE +0 -29
  114. package/vendor/dsh-dog/README.md +0 -114
  115. package/vendor/dsh-dog/UPSTREAM.md +0 -30
  116. package/vendor/dsh-dog/cordis.patch.yml +0 -14
  117. package/vendor/dsh-dog/lib/client.js +0 -2960
  118. package/vendor/dsh-dog/lib/client.js.map +0 -1
  119. package/vendor/dsh-dog/lib/core-BAlgZpLq.js +0 -2074
  120. package/vendor/dsh-dog/lib/core-BiEBMLz3.d.ts +0 -495
  121. package/vendor/dsh-dog/lib/core.d.ts +0 -2
  122. package/vendor/dsh-dog/lib/core.js +0 -2
  123. package/vendor/dsh-dog/lib/index.d.ts +0 -143
  124. package/vendor/dsh-dog/lib/index.js +0 -1279
  125. package/vendor/dsh-dog/package.json +0 -110
  126. package/vendor/dsh-dog/schemas/schema-0.2/graph.schema.json +0 -139
  127. package/vendor/dsh-dog/schemas/schema-0.2/report.schema.json +0 -87
  128. package/vendor/dsh-dog/schemas/schema-0.2/run.schema.json +0 -259
  129. package/vendor/dsh-dog/schemas/schema-0.2/runtime-event.schema.json +0 -105
  130. package/vendor/dsh-dog/schemas/schema-0.2/verification.schema.json +0 -40
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: delivery-artifact-query
3
+ description: Query a chapter delivery record across manuscript, review, revision application, and re-review closure. Use after writing or reviewing a chapter, after revision actions, or when the user asks whether a chapter is truly ready to deliver.
4
+ user-invocable: false
5
+ ---
6
+
7
+ Language: follow the author's current conversation language for responses and help; preserve the manuscript language. Translate these instructions when presenting them.
8
+
9
+ # 章节交付状态查询
10
+
11
+ 章节写作、评审和修订工具会直接返回交付状态,并把同一份记录落盘:
12
+ `data/novels/{id}/data/dog/deliveries/{chapter}/dog-graph.json`。
13
+ 它覆盖六个阶段:`writing → review → revision → application → rereview → closure`。
14
+ 它不替代 OpenWrite 的写章、六域累加评审或修订服务。
15
+
16
+ ## 查询流程
17
+
18
+ 1. 从最近一次 `novel_write_chapter`、`novel_review_chapter`、`novel_revision`
19
+ 或 `novel_task(action="get")` 结果里的 `dog_delivery` 读状态;需要完整阶段明细时再读
20
+ 上面的 `dog-graph.json`(`stages` 里有每一阶段的 verdict 与 evidence)。
21
+ 2. 按 `closure` 的状态给结论(见下表),不要自行推断。
22
+ 3. 修订应用后必须重新调用 `novel_review_chapter`;只有复评对应当前正文 SHA 且门禁通过,
23
+ `closure` 才能成为 `closed`。
24
+
25
+ ## 状态解释
26
+
27
+ - `review.missing`:正文存在但尚未评审。
28
+ - `closure.review_failed`:当前正文已评审但未通过门禁,进入修订闭环。
29
+ - `revision.proposal_pending`:提案已生成,等待作者确认应用或驳回。
30
+ - `revision.applied_requires_rereview`:修订已写入正文,但不能视为问题已解决。
31
+ - `closure.rereview_required`:必须对修订后的正文重新跑六域评审。
32
+ - `closure.closed`:当前正文的最新评审通过,可以交付。
33
+
34
+ `readyForDelivery=true` 等价于「当前正文 SHA 的最新复评通过且门禁通过」,
35
+ 可以直接作为交付结论;为 `false` 时说明上面某一项未满足。
36
+
37
+ ## 约束
38
+
39
+ - 只查询 canonical manuscript/review/revision 文件,不直接修改它们。
40
+ - 不因提案状态为 `applied` 就宣称问题关闭;必须以当前正文 SHA 对应的复评为准。
41
+ - 记录缺失时回到 OpenWrite 流程重新评审,不要把上一次的结论说成最新。
@@ -19,14 +19,15 @@ Language: follow the author's current conversation language for responses and he
19
19
  3. `data/style/composed.md` — 当前作品风格约束
20
20
  4. `src/outline.md` / canonical packet — 本章戏剧位置与章节目标
21
21
 
22
- 如果需要完整判断某章对白是否失真,优先结合 `review_chapter` 或章节 packet,而不是只看几行台词。
22
+ 如果需要完整判断某章对白是否失真,优先结合 `novel_review_chapter` 或 `novel_chapter_work` 的章节 packet,而不是只看几行台词。
23
23
 
24
24
  ## 可用工具
25
25
 
26
26
  | 工具 | 说明 |
27
27
  |------|------|
28
- | `extract_dialogue_fingerprint` | 提取角色对白指纹 |
29
- | `review_chapter` | 对整章做审查,可发现台词失真、解释性对话、套路对白 |
28
+ | `novel_manuscript_metrics(chapter_id=…)` | 章节可量化信号:字数、句长、对白占比等 |
29
+ | `novel_review_chapter(chapter_id=…, domains=["prose","character"])` | 对整章做审查,可发现台词失真、解释性对话、套路对白 |
30
+ | `novel_chapter_work(chapter_id=…)` | 章节工作 brief:戏剧位置、出场角色、章节目标 |
30
31
 
31
32
  ## 什么时候用
32
33
 
@@ -37,26 +38,24 @@ Language: follow the author's current conversation language for responses and he
37
38
 
38
39
  ## 工作方式
39
40
 
40
- ### 1. 提取对白指纹
41
+ ### 1. 读取章节信号
41
42
 
42
- 先定位章节和角色,再提取:
43
+ 先定位章节,再读可量化指标:
43
44
 
44
45
  ```text
45
46
  用户: 分析一下林月在第六章的对话风格
46
47
 
47
- AI:
48
- [COMMAND] extract_dialogue_fingerprint {
49
- "chapter_id": "ch_006",
50
- "character_names": ["林月"]
51
- }
48
+ AI: 调用 novel_manuscript_metrics(chapter_id="ch_006")
52
49
  ```
53
50
 
54
- 重点观察:
51
+ 重点观察返回里的:
55
52
 
56
- - `avg_sentence_length`:句长偏短还是偏长
57
- - `question_ratio`:疑问句比例
58
- - `common_bigrams`:高频词组
59
- - `speech_patterns`:口头禅、重复习惯、语气特征
53
+ - 字数与对白占比:这一章是谁在说话
54
+ - 句长相关指标:偏短还是偏长
55
+ - 出场角色:林月是否真的有戏份
56
+
57
+ 没有工具会直接给出"对白指纹";上面的指标加上正文摘录就是判断依据。
58
+ 需要整章判断时再调用 `novel_review_chapter(chapter_id="ch_006", domains=["prose","character"])`。
60
59
 
61
60
  ### 2. 结合角色档案复核
62
61
 
@@ -163,6 +162,6 @@ AI:
163
162
 
164
163
  ## 注意
165
164
 
166
- - `extract_dialogue_fingerprint` 适合看“说话指纹”
167
- - `review_chapter` 适合看“对白放在整章里是否成立”
165
+ - `novel_manuscript_metrics` 提供可量化信号,判断"说话指纹"要靠它加上正文摘录
166
+ - `novel_review_chapter` 适合看“对白放在整章里是否成立”
168
167
  - 真要改对白,必须结合人物文档和章节戏剧位置一起判断
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: dog-delivery-verification
3
+ description: 用宿主已安装的 dsh-dog(DoG)对 OpenWrite 章节或整书做独立验证。Use when the author asks for DoG / 独立验收 / second-opinion verification before delivery, or when dog_validate, dog_create and dog_run are available and the author wants a judgment that is not the author's own review.
4
+ user-invocable: false
5
+ ---
6
+
7
+ Language: follow the author's current conversation language for responses and help; preserve the manuscript language. Translate these instructions when presenting them.
8
+
9
+ # DoG 独立验收(OpenWrite → dsh-dog)
10
+
11
+ 这条技能把 OpenWrite 的正文与评审证据交给宿主已安装的 `@dsh-external/dsh-dog`,
12
+ 由它用独立 verifier 再判断一次。它不是 OpenWrite 六域评审的替代品,也不修改正文。
13
+
14
+ 先确认工具面真的有 `dog_validate` / `dog_create` / `dog_run`。没有时不要假装跑过:
15
+ 说明 dsh-dog 未安装或当前宿主不放行,回到 `novel_review_chapter` 与
16
+ `novel_export(action="preflight")` 的 OpenWrite 门禁。
17
+
18
+ ## 1. 收集被测对象与证据
19
+
20
+ 单章:
21
+
22
+ 1. `novel_outline_read` 与 `novel_status` 定位 `chapter_id`。
23
+ 2. `novel_chapter_work` 读取正文 revision、评审新鲜度、本章义务。
24
+ 3. `novel_review_chapter(action="versions", chapter_id=...)` 取最新评审;
25
+ 若正文 revision 与评审 revision 不一致,先重新评审,不要把旧评审当证据。
26
+ 4. `novel_export(action="preflight", purpose="delivery")` 读取交付门禁和缺口。
27
+
28
+ 整书:先 `novel_status`,再对每个已写章节重复上面的 2–4;不要把未写章节算进范围。
29
+
30
+ ## 2. 建立不可变交付包
31
+
32
+ 在**当前工作区根目录**下创建 `.openwrite/dog-handoff/<handoff-id>/`(示例用 `1`),写入:
33
+
34
+ - `manuscript.md`:被测正文的逐字副本(单章就是该章;整书按章节分隔)。
35
+ - `evidence.md`:outline 摘要、最新评审的 revision/分数/门禁/问题、交付 preflight 缺口。
36
+ - `graph.json`:下面的 0.9 图。`target` 必须是相对**会话工作区根目录**的路径,不是相对 handoff 目录;
37
+ root 指向 handoff 目录(dog 会把目录打包捕获),叶子分别指向其中的 `manuscript.md` / `evidence.md`。
38
+
39
+ 用文件工具写,不要用 `novel_doc` 写项目外路径。`handoff-id` 用时间戳或短随机串,
40
+ 保留目录供审计;不要把它放进 `data/manuscript/`。
41
+
42
+ ## 3. 图模板
43
+
44
+ ```json
45
+ {
46
+ "schemaVersion": "0.9",
47
+ "id": "openwrite-delivery-1",
48
+ "root": "root",
49
+ "nodes": {
50
+ "root": {
51
+ "kind": "composite",
52
+ "title": "OpenWrite 交付整体判断",
53
+ "constraint": "hard",
54
+ "target": ".openwrite/dog-handoff/1/",
55
+ "completion": { "op": "all", "items": [
56
+ { "op": "ref", "id": "continuity" },
57
+ { "op": "ref", "id": "prose" },
58
+ { "op": "ref", "id": "canon" },
59
+ { "op": "ref", "id": "delivery-evidence" }
60
+ ] },
61
+ "verifier": {
62
+ "mode": "agentic",
63
+ "instruction": "Read manuscript.md and evidence.md in the captured handoff directory. Judge whether the chapter(s) hold together as a deliverable: continuity, prose quality, canon consistency and the claimed delivery evidence. Return pass only when the evidence supports every claim; otherwise fail with the exact gap."
64
+ }
65
+ },
66
+ "continuity": {
67
+ "kind": "leaf", "title": "连续性", "constraint": "hard", "target": ".openwrite/dog-handoff/1/manuscript.md",
68
+ "verifier": { "mode": "agentic", "instruction": "Check scene-to-scene continuity in manuscript.md: who is present, where, when, what changed, and whether any action contradicts the previous scene. Cite exact lines." }
69
+ },
70
+ "prose": {
71
+ "kind": "leaf", "title": "文笔", "constraint": "hard", "target": ".openwrite/dog-handoff/1/manuscript.md",
72
+ "verifier": { "mode": "agentic", "instruction": "Judge prose quality in manuscript.md: viewpoint discipline, concrete detail, dialogue that carries character, and absence of filler or repeated exposition. Cite exact lines." }
73
+ },
74
+ "canon": {
75
+ "kind": "leaf", "title": "正典一致性", "constraint": "hard", "target": ".openwrite/dog-handoff/1/manuscript.md",
76
+ "verifier": { "mode": "agentic", "instruction": "Check manuscript.md against the facts in evidence.md: names, world rules, timeline and stated canon. Report any contradiction with the exact conflicting lines." }
77
+ },
78
+ "delivery-evidence": {
79
+ "kind": "leaf", "title": "交付证据", "constraint": "hard", "target": ".openwrite/dog-handoff/1/evidence.md",
80
+ "verifier": { "mode": "agentic", "instruction": "Check whether evidence.md actually supports delivery: review revision matches the manuscript, gate status is pass, and no listed preflight gap remains. Do not accept a claim that is not backed by the evidence text." }
81
+ }
82
+ },
83
+ "contains": [
84
+ { "parent": "root", "child": "continuity", "required": true, "failure": "fatal" },
85
+ { "parent": "root", "child": "prose", "required": true, "failure": "fatal" },
86
+ { "parent": "root", "child": "canon", "required": true, "failure": "fatal" },
87
+ { "parent": "root", "child": "delivery-evidence", "required": true, "failure": "fatal" }
88
+ ],
89
+ "dependsOn": []
90
+ }
91
+ ```
92
+
93
+ 每次 handoff 必须把示例里的 `1` 同时替换成同一个唯一值(graph.id 与所有 target),
94
+ 否则第二次 `dog_create` 会和上一张图撞 id。`dog_create` 在**会话工作区根目录**调用;
95
+ 上面的 target 已经带上 `.openwrite/dog-handoff/1/`,不需要先 cd 进 handoff 目录。
96
+ 如果只验单章,删掉整书范围描述即可,不要为了凑节点加空 verifier。
97
+
98
+ ## 4. 运行与报告
99
+
100
+ 1. `dog_validate(graph)`:先只校验,不运行;有 schema 错误按返回信息修。
101
+ 2. `dog_create(graph)`:捕获不可变副本,记下 graphId。
102
+ 3. `dog_run(graphId)`,然后 `dog_wait` 或轮询 `dog_status`,直到终态。
103
+ 4. 逐节点报告 verdict 与 evidence;`needs_human` 原样交给作者,不猜。
104
+ 5. 根节点通过才说“DoG 独立验收通过”。任何 fatal / needs_human 都必须说明具体子目标。
105
+
106
+ ## 约束
107
+
108
+ - DoG 只读捕获副本;不要用 DoG 的结论直接改正文。要改稿走
109
+ `novel_change_plan` / `novel_revision` 的预览与确认流程。
110
+ - 不把 OpenWrite 自己的 `dog_review` / `dog_delivery` 产物冒充 dsh-dog 的运行结果;
111
+ 两者不是同一个引擎。
112
+ - 不因 `dog_*` 工具存在就自动跑模型;先向作者说明将调用独立 verifier(会产生模型调用),
113
+ 得到同意再运行。
@@ -9,8 +9,8 @@ Language: follow the author's current conversation language for responses and he
9
9
 
10
10
  接到已有 `novel_*`。成稿导出与会话日志下载不是同一条命令。
11
11
 
12
- 1. `novel_export_preflight`:阅读顺序、结构缺陷、写作目标、评审新鲜度、正文接纳、阻断项与警告。
13
- 2. 向作者说明 `backup`(可带警告下载)与 `delivery`(门禁阻断则不可交付)。
12
+ 1. `novel_export(action="preflight"`:阅读顺序、结构缺陷、写作目标、评审新鲜度、正文接纳、阻断项与警告。
13
+ 2. 向作者说明三种 `purpose`:`personal_archive`(作者自留,可带警告下载,**不代表通过交付门禁**)、`backup`、`delivery`(门禁阻断则不可交付)。
14
14
  3. 作者确认后 `novel_export`,原样传入同一 `format`、`purpose` 与 `preflight_revision`。
15
15
 
16
- 不要用宿主 `/export` 下载会话日志来代替成稿。完整项目档案走 `novel_project_archive_action`。
16
+ 不要用宿主 `/export` 下载会话日志来代替成稿。完整项目档案走 `novel_project(action="archive", archive_op="preflight"` → `archive_op="create"`(需带 `expected_preflight_revision`)→ 需要时 `archive_op="restore_preview"` / `archive_op="restore"`。
@@ -13,4 +13,4 @@ Language: follow the author's current conversation language for responses and he
13
13
  2. 当前章用 `novel_chapter_work`:到期 `must_resolve`、超期 `overdue`、待埋入 `to_plant`。
14
14
  3. 全书未回收与漂移用 `novel_continuity`。
15
15
 
16
- 向作者报告分类清单,不要输出内部 JSON 当主界面。写入走 `novel_structured_change_plan(change_kind="foreshadowing")`;仅在作者本轮已授权精确变更时才用 `novel_foreshadowing`。
16
+ 向作者报告分类清单,不要输出内部 JSON 当主界面。写入走 `novel_change_plan(action="structured"(change_kind="foreshadowing")`;仅在作者本轮已授权精确变更时才用 `novel_foreshadowing`。
@@ -29,10 +29,10 @@ Language: follow the author's current conversation language for responses and he
29
29
 
30
30
  | 工具 | 说明 |
31
31
  |------|------|
32
- | `create_foreshadowing` | 创建伏笔节点 |
33
- | `list_foreshadowing` | 列出伏笔 |
34
- | `update_foreshadowing` | 更新伏笔状态 |
35
- | `validate_foreshadowing` | 验证伏笔DAG |
32
+ | `novel_foreshadowing(action="create")` | 创建伏笔节点(仅作者本轮已授权该精确变更时的一次性写入) |
33
+ | `novel_foreshadowing(action="update")` | 更新伏笔状态 |
34
+ | `novel_change_plan(action="structured", change_kind="foreshadowing", step="preview"/"apply")` | 伏笔 DAG 的逐项预览/确认维护(**默认路径**) |
35
+ | `novel_continuity` | 未回收伏笔、人物状态漂移、时间线一致性报告 |
36
36
 
37
37
  ## 使用示例
38
38
 
@@ -41,15 +41,11 @@ Language: follow the author's current conversation language for responses and he
41
41
  ```
42
42
  用户: 在第三章埋一个伏笔,关于主角的神秘身世
43
43
 
44
- AI: 好的,我来创建一个主线伏笔。
45
- [COMMAND] create_foreshadowing {
46
- "node_id": "f001",
47
- "content": "主角发现自己体内有一道封印的神秘力量",
48
- "weight": 9,
49
- "layer": "主线",
50
- "created_at": "ch_003",
51
- "target_chapter": "ch_015"
52
- }
44
+ AI: 好的,伏笔 DAG 的维护走变更计划两阶段确认。
45
+ 先 `novel_change_plan(action="structured", change_kind="foreshadowing", step="preview", change={…})`,
46
+ 把 diff 展示给作者;作者确认后才 `step="apply"` 并传回 `preview_token`。
47
+ 仅当作者在本轮已明确授权这条精确变更时,才可用直接入口
48
+ `novel_foreshadowing(action="create", node_id="f001", content="主角发现自己体内有一道封印的神秘力量", weight=9, layer="主线", target_chapter="ch_015")`。
53
49
 
54
50
  结果: ✅ 伏笔已创建
55
51
  - ID: f001
@@ -64,11 +60,8 @@ AI: 好的,我来创建一个主线伏笔。
64
60
  ```
65
61
  用户: 有哪些待回收的伏笔?
66
62
 
67
- AI: 让我查询一下...
68
- [COMMAND] list_foreshadowing {
69
- "status": "待收",
70
- "min_weight": 5
71
- }
63
+ AI: 让我读一下连续性报告……
64
+ 调用 `novel_continuity`(无参数,项目级)。
72
65
 
73
66
  结果:
74
67
  - f001: 主角身世之谜 (权重9, 主线)
@@ -81,11 +74,9 @@ AI: 让我查询一下...
81
74
  ```
82
75
  用户: 第八章回收了 f003 的伏笔,更新状态
83
76
 
84
- AI: 好的
85
- [COMMAND] update_foreshadowing {
86
- "node_id": "f003",
87
- "status": "已收"
88
- }
77
+ AI: 同样走两阶段确认:`novel_change_plan(action="structured", change_kind="foreshadowing", step="preview", change={…})`
78
+ → 展示 → `step="apply"`。作者本轮已授权时可用
79
+ `novel_foreshadowing(action="update", node_id="f003", status="paid-off")`。
89
80
 
90
81
  结果: ✅ f003 状态已更新为「已收」
91
82
  ```
@@ -95,8 +86,8 @@ AI: 好的
95
86
  ```
96
87
  用户: 检查伏笔有没有问题
97
88
 
98
- AI: 让我验证一下伏笔图...
99
- [COMMAND] validate_foreshadowing {}
89
+ AI: 让我读一下连续性报告……
90
+ 调用 `novel_continuity`(无参数,项目级)。
100
91
 
101
92
  结果:
102
93
  - ✅ DAG有效,无环
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: import-artifact-query
3
+ description: Query a smart-import record after a novel has been split into chapters. Use to inspect import completeness, AI precheck errors, and pending outline/asset/canonical setup.
4
+ user-invocable: false
5
+ ---
6
+
7
+ Language: follow the author's current conversation language for responses and help; preserve the manuscript language. Translate these instructions when presenting them.
8
+
9
+ # 拆书导入结果查询
10
+
11
+ `conductor/smart_import.py` 完成导入后会写出记录:
12
+ `data/novels/{id}/data/dog/imports/{IMPORT_ID}/dog-graph.json`,
13
+ 以及同目录的 manifest。这份记录只描述导入结果,不负责写入章节、资产或大纲。
14
+
15
+ ## 工作流
16
+
17
+ 1. 从导入输出找到 `data/novels/{id}/data/dog/imports/{IMPORT_ID}/`,读 manifest。
18
+ 2. 按 manifest 的 `status` 汇报导入完整性:`partial|failed` 表示导入中途出错,
19
+ 先读 `error` 和已完成的章节,再修复或重试导入。
20
+ 3. 读 `aiCheck.status`:`failed` 要如实报告,不能当成“无问题”。
21
+ 4. 根节点通过后,读 manifest 的 `construction.nextActions`,再调用规划和资产工具
22
+ 建立大纲、角色、世界观、进度和正典事件。
23
+ 5. 资产/大纲建立完成后重新调用 `novel_review_chapter`,再用 `review-artifact-query`
24
+ 查询六域评审和 37 个 legacy leaf。
25
+
26
+ ## 约束
27
+
28
+ - 只读导入记录,不直接修改正文。
29
+ - `construction` 中的 `pending` 是后续建模待办,不是导入失败。
30
+ - 不要让任何验证步骤再调用 Studio 导入接口或重新读取原始整本小说。
@@ -13,14 +13,14 @@ Language: follow the author's current conversation language for responses and he
13
13
 
14
14
  1. `novel_status` 确认当前作品。
15
15
  2. 风格与提取源:`novel_source_action`(`status_v2` / `profile_v2`)。
16
- 3. 已登记钩子:`novel_assets_list`,必要时 `novel_asset_read`。
16
+ 3. 已登记钩子:`novel_assets(action="list"`,必要时 `novel_assets(action="read", kind="character"|"world"|"progression", id=…)`。
17
17
 
18
18
  没有 Workspace(session cwd 缺失)时这些工具返回 `WORKSPACE_CONTEXT_MISSING`,不要改写全局或别的项目。
19
19
 
20
20
  ## 写入(预览/确认)
21
21
 
22
- - 作者偏好、必须保留/避免:`novel_structured_change_plan(change_kind="focus")`。
23
- - 成功钩子与可复用写法:`novel_source_action` extract/review,晋升用 `promote_v2` 且作者确认后 `confirm: true`;登记为资产时用 `novel_structured_change_plan(change_kind="asset")`。
22
+ - 作者偏好、必须保留/避免:`novel_change_plan(action="structured"(change_kind="focus")`。
23
+ - 成功钩子与可复用写法:`novel_source_action` extract/review,晋升用 `promote_v2` 且作者确认后 `confirm: true`;登记为资产时用 `novel_change_plan(action="structured"(change_kind="asset")`。
24
24
  - 普通讨论不得写入。
25
25
 
26
26
  细则见 style-system。不要另建记忆文件。
@@ -21,12 +21,12 @@ Language: follow the author's current conversation language for responses and he
21
21
  ## 工作流程
22
22
 
23
23
  1. `novel_status` 看项目阶段、资产缺口、待确认项。
24
- 2. `novel_outline_read` 定位章纲:未指定章节时取大纲顺序中最早尚无正文的章;指定章节时校验章纲存在。已有正文则打开或审查,不得直接覆盖。
24
+ 2. `novel_outline_read` 定位章纲并读 `recommendation`:未指定章节时省略 `chapter_id`,让服务端取推荐下一章(自行推算的 id 与推荐不一致会被拒绝);作者点名章节时才传 `chapter_id`,并先用 `recommendation` 校验一致。已有正文则打开或审查,不得直接覆盖。
25
25
  3. `novel_context_preview` 预检写章上下文包(大纲窗口、出场角色、伏笔、风格、正典)。
26
26
  4. `novel_chapter_work` 读取本章到期/超期/待埋入伏笔与字数目标。
27
27
  5. `novel_write_chapter` 写下一章或指定章(可带 `outline_revision` 与 `guidance`)。
28
28
  6. 草稿出来后暂停,请作者选择:通过进入评审、按意见重写、或到创作页手工编辑。
29
- 7. 作者通过后调用 `novel_review_chapter`;需要改稿时用 `novel_revision_create_from_review`,确认后再 `novel_revision_apply`。
29
+ 7. 作者通过后调用 `novel_review_chapter`;需要改稿时用 `novel_revision(action="create", source="review"`,确认后再 `novel_revision(action="apply"`。
30
30
 
31
31
  ## 工具
32
32
 
@@ -38,10 +38,10 @@ Language: follow the author's current conversation language for responses and he
38
38
  | `novel_chapter_work` | 本章目标、伏笔义务、最近修改 |
39
39
  | `novel_write_chapter` | 写章(长耗时) |
40
40
  | `novel_review_chapter` | 六域累加评审 |
41
- | `novel_document_change_plan` | 已有正文的逐项预览/确认修改 |
42
- | `novel_structured_change_plan` | 大纲/资产/伏笔的逐项预览/确认 |
41
+ | `novel_change_plan(action="document"` | 已有正文的逐项预览/确认修改 |
42
+ | `novel_change_plan(action="structured"` | 大纲/资产/伏笔的逐项预览/确认 |
43
43
 
44
- `novel_doc_write` 与 `novel_outline_edit` 仅在作者本轮已明确授权精确变更时作为直接写入兼容入口。
44
+ `novel_doc(action="write"` 与 `novel_outline_edit` 仅在作者本轮已明确授权精确变更时作为直接写入兼容入口。
45
45
 
46
46
  ## 节拍
47
47
 
@@ -68,7 +68,7 @@ Language: follow the author's current conversation language for responses and he
68
68
  | 数据 | 必须? | 如何确认 |
69
69
  |------|--------|----------|
70
70
  | 大纲 | 必须 | `novel_outline_read` |
71
- | 本章出场角色 | 必须 | `novel_context_preview` / `novel_assets_list` |
71
+ | 本章出场角色 | 必须 | `novel_context_preview` / `novel_assets(action="list"` |
72
72
  | 合成风格 | 建议 | 上下文包 |
73
73
  | 伏笔 | 可选 | `novel_chapter_work` 的分类义务 |
74
74
 
@@ -79,12 +79,12 @@ Language: follow the author's current conversation language for responses and he
79
79
  | 情况 | 处理 |
80
80
  |------|------|
81
81
  | 上下文超限 | 报告 `novel_context_preview` 的压缩/保护原因,不静默丢掉正典 |
82
- | 章纲缺失 | 回到规划,用 `novel_structured_change_plan(change_kind="outline")` |
83
- | 已有正文 | 打开或审查;改稿走 `novel_document_change_plan` |
84
- | 写章失败 | 用 `novel_tasks_list` / `novel_task_get` 查看后台任务,可 `novel_task_retry` |
82
+ | 章纲缺失 | 回到规划,用 `novel_change_plan(action="structured"(change_kind="outline")` |
83
+ | 已有正文 | 打开或审查;改稿走 `novel_change_plan(action="document"` |
84
+ | 写章失败 | 用 `novel_task(action="list"` / `novel_task(action="get"` 查看后台任务,可 `novel_task(action="retry"` |
85
85
 
86
86
  ## 与其他技能
87
87
 
88
88
  - **novel-reviewer**:写完后评审
89
89
  - **workflow-manager**:连写、后台任务、中断恢复
90
- - **foreshadowing-system**:伏笔 DAG 维护仍走 `novel_structured_change_plan` / `novel_foreshadowing`
90
+ - **foreshadowing-system**:伏笔 DAG 维护仍走 `novel_change_plan(action="structured"` / `novel_foreshadowing`
@@ -8,7 +8,7 @@ Language: follow the author's current conversation language for responses and he
8
8
 
9
9
  # 小说审查润色
10
10
 
11
- 通过 openwrite-bridge 的 `novel_*` 工具评审与修订。不要调用 Python 审查类或本地 33 维脚本。
11
+ 通过 openwrite-bridge 的 `novel_*` 工具评审与修订。不要调用 Python 审查类或本地 37 项脚本。
12
12
  正式评审是六域累加:质量分、覆盖率、硬门禁、交付状态分开判断;37 项只作展开查询。
13
13
  `novel_config.yaml` 的 `form: web_novel` 时,情节/节奏域额外检查钩子、黄金三章、追读力;这些准则 `max=0`,不另起一套评分。黄金三章只适用于第 1–3 章。
14
14
 
@@ -27,9 +27,9 @@ Language: follow the author's current conversation language for responses and he
27
27
  3. `novel_review_framework` 需要时查看六域与 37 项映射。
28
28
  4. `novel_review_chapter` 对已有正文跑六域评审(可传 `chapter_id` 或稿件路径)。
29
29
  5. 向作者报告质量分、覆盖率、门禁、交付状态,以及带正文证据的问题。
30
- 6. 作者要改稿:`novel_revision_create_from_review`(或选区 `novel_revision_create_selection`)→ 展示 before/after → 确认后 `novel_revision_apply`。
30
+ 6. 作者要改稿:`novel_revision(action="create", source="review"`(或选区 `novel_revision(action="create", source="selection"`)→ 展示 before/after → 确认后 `novel_revision(action="apply"`。
31
31
  7. 应用后必须 `novel_review_chapter` 复评;正文 SHA 变了旧评审即 stale。
32
- 8. 润色类局部修改走 `novel_document_change_plan` 预览/确认,不直接整章覆盖。
32
+ 8. 润色类局部修改走 `novel_change_plan(action="document"` 预览/确认,不直接整章覆盖。
33
33
 
34
34
  ## 工具
35
35
 
@@ -38,11 +38,11 @@ Language: follow the author's current conversation language for responses and he
38
38
  | `novel_review_framework` | 六域 / 37 项框架 |
39
39
  | `novel_review_chapter` | 正式评审(长耗时) |
40
40
  | `novel_chapter_work` | 评审新鲜度、闭合结果、伏笔 |
41
- | `novel_revision_create_from_review` | 从问题生成修订提案 |
42
- | `novel_revision_create_selection` | 从选区生成修订 |
43
- | `novel_revisions_list` / `novel_revision_get` | 查看提案 |
44
- | `novel_revision_apply` / `novel_revision_reject` / `novel_revision_regenerate` | 应用、驳回、重生成 |
45
- | `novel_document_change_plan` | 手工/润色类正文预览确认 |
41
+ | `novel_revision(action="create", source="review"` | 从问题生成修订提案 |
42
+ | `novel_revision(action="create", source="selection"` | 从选区生成修订 |
43
+ | `novel_revision(action="list"` / `novel_revision(action="get"` | 查看提案 |
44
+ | `novel_revision(action="apply"` / `novel_revision(action="reject"` / `novel_revision(action="regenerate"` | 应用、驳回、重生成 |
45
+ | `novel_change_plan(action="document"` | 手工/润色类正文预览确认 |
46
46
  | `novel_continuity` | 连续性、关系、未回收伏笔 |
47
47
 
48
48
  ## 六域(计分)与硬门禁
@@ -77,11 +77,11 @@ Language: follow the author's current conversation language for responses and he
77
77
  |------|------|
78
78
  | 尚无正文 | 提示先写章,不要空审 |
79
79
  | 评审 stale | 先 `novel_review_chapter`,禁止对旧问题直接 apply |
80
- | 提案源 revision 不匹配 | `novel_revision_regenerate` 或重新预览 |
81
- | 后台任务进行中 | `novel_task_get` 轮询,不要重复提交 |
80
+ | 提案源 revision 不匹配 | `novel_revision(action="regenerate"` 或重新预览 |
81
+ | 后台任务进行中 | `novel_task(action="get"` 轮询,不要重复提交 |
82
82
 
83
83
  ## 与其他技能
84
84
 
85
85
  - **novel-creator**:写章后进入本技能
86
- - **dog-review-query** / **dog-delivery-query**:查询已物化评审/交付图,不重新调用模型
86
+ - **review-artifact-query** / **delivery-artifact-query**:查询已物化评审/交付记录,不重新调用模型
87
87
  - **truth-validation**:正典与事实核对
@@ -11,7 +11,7 @@ Language: follow the author's current conversation language for responses and he
11
11
 
12
12
  1. `novel_status`:当前作品、阶段、资产缺口、待确认项。
13
13
  2. 需要章级细节时 `novel_chapter_work`。
14
- 3. 后台工作 `novel_tasks_list`;进行中或待确认的任务 `novel_task_get`。
14
+ 3. 后台工作 `novel_task(action="list"`;进行中或待确认的任务 `novel_task(action="get"`。
15
15
 
16
16
  向作者报告:当前章、正文是否存在、评审是否新鲜、任务 phase、伏笔到期/超期/待埋入计数。不要把内部 JSON 当主界面。
17
17
 
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: review-artifact-query
3
+ description: Query an existing hierarchical OpenWrite review-v2 artifact. Use after novel_review_chapter or when inspecting six quality domains, evidence, coverage, blockers, delivery status, or the 37 legacy checks. Never rerun model review from this skill.
4
+ user-invocable: false
5
+ ---
6
+
7
+ Language: follow the author's current conversation language for responses and help; preserve the manuscript language. Translate these instructions when presenting them.
8
+
9
+ # 分层评审产物查询
10
+
11
+ 这个 Skill 只查询 OpenWrite 已物化的 review-v2 artifact。OpenWrite 的
12
+ `novel_review_chapter` / conductor 是评审真源;本 Skill 直接读同一批产物:
13
+ `review.json`、`context.json`、`domain-*.json`、`gate.json`、`aggregate.json` 和
14
+ `dim_01.json` … `dim_37.json`。它不调用评审模型,也不改写任何产物。
15
+
16
+ ## 查询流程
17
+
18
+ 1. 如果本轮还没有评审结果,先按 OpenWrite 写作流程调用 `novel_review_chapter`。
19
+ 2. 从评审输出(或工具响应里的 `dog_review`)找到产物目录;`review.json` 与
20
+ `domain-*.json`、`gate.json`、`aggregate.json`、`dim_01.json` … `dim_37.json`
21
+ 在同一目录。
22
+ 3. 读取 `aggregate.json` 汇报 `qualityScore`、`coverage`、`gateStatus` 和
23
+ `deliveryStatus`,再按需展开域、criterion、evidence、issue 和 legacy ID。
24
+ `inconclusive` 表示覆盖不足、未请求或 artifact 不可判定,不能描述为通过。
25
+ 4. 只有 OpenWrite 的审查问题才能进入 `novel_revision` 回炉闭环。应用修订后
26
+ 必须复评,再用 `delivery-artifact-query` 确认 closure 已关闭。评审的 `failure`
27
+ 只负责定位问题,不直接改正文或资产。
28
+
29
+ ## 状态约定
30
+
31
+ - `qualityScore` 是有可定位正文证据的正向累加分;issue 不直接扣分。
32
+ - `coverage` 单独表达实际完成的评审范围;`inconclusive` 会降低覆盖率。
33
+ - `gateStatus=blocked` 来自 hard-gate 或 critical finding,不改写质量分。
34
+ - `deliveryStatus` 综合质量、覆盖、门禁和正文 SHA 新鲜度;它不是 `passed` 的别名。
35
+ - 37 个 leaf 是 `legacy_check_ids` 查询入口,不是 37 个顶层计分维度。
36
+
37
+ ## 边界
38
+
39
+ - 只读:不调用 Studio 写入接口,不重新生成、补写或刷新评审。
40
+ - artifact 缺失或 stale 时回到 OpenWrite 流程重新评审,不要把旧结果说成最新。
41
+ - 不要把 warning 自动升级成失败;先展示 evidence,由 `gate.json` / `aggregate.json` 里的 `gateStatus` 和作者决定。
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: review-chapter
3
- description: 审这一章。Use when the author asks 审这一章, 审查, 检查逻辑, or types /review-chapter. Run six-domain novel_review_chapter; do not rerun review from DoG.
3
+ description: 审这一章。Use when the author asks 审这一章, 审查, 检查逻辑, or types /review-chapter. Run six-domain novel_review_chapter; do not rerun review from the query skills.
4
4
  ---
5
5
 
6
6
  Language: follow the author's current conversation language for responses and help; preserve the manuscript language. Translate these instructions when presenting them.
@@ -16,4 +16,4 @@ Language: follow the author's current conversation language for responses and he
16
16
  4. `novel_review_chapter` 跑六域评审。
17
17
  5. 向作者报告质量分、覆盖率、门禁、交付状态,以及带正文证据的问题。
18
18
 
19
- 作者要改稿时转到 /revise-span。查询已物化评审图用 dog-review-query,不要让 DoG 再调模型。细则见 novel-reviewer。
19
+ 作者要改稿时转到 /revise-span。查询已物化评审图用 review-artifact-query,它只读产物、不会再调模型。细则见 novel-reviewer。
@@ -9,10 +9,10 @@ Language: follow the author's current conversation language for responses and he
9
9
 
10
10
  接到已有 `novel_*`。改稿只走修订提案,不直接整章覆盖。
11
11
 
12
- 1. 选区扩写/缩写/去 AI 味:`novel_revision_create_selection`。
13
- 2. 按审稿改:`novel_revision_create_from_review`(带 issue 与期望 revision)。
14
- 3. 展示 before/after;作者确认后 `novel_revision_apply`(可带 `selected_hunk_ids`)。
15
- 4. 提案 `source_revision` 与当前正文不一致时拒绝覆盖,改为 `novel_revision_regenerate` 或重新预览。
12
+ 1. 选区扩写/缩写/去 AI 味:`novel_revision(action="create", source="selection"`。
13
+ 2. 按审稿改:`novel_revision(action="create", source="review"`(带 issue 与期望 revision)。
14
+ 3. 展示 before/after;作者确认后 `novel_revision(action="apply"`(可带 `selected_hunk_ids`)。
15
+ 4. 提案的 `source_revision` 与当前正文不一致时拒绝覆盖,改为 `novel_revision(action="regenerate", proposal_id=…)`;仍不匹配就用 `novel_revision(action="create", source="review"/"selection", …)` 生成新提案。该工具没有「重新预览」这一步。
16
16
  5. 应用后必须 `novel_review_chapter` 复评。
17
17
 
18
- 手工/润色类正文预览用 `novel_document_change_plan`。没有当前评审时,按审稿改失败闭合。细则见 novel-reviewer。
18
+ 手工/润色类正文预览用 `novel_change_plan(action="document"`。没有当前评审时,按审稿改失败闭合。细则见 novel-reviewer。
@@ -121,13 +121,20 @@ front matter 放:
121
121
  - negative_rules
122
122
  - promotion_notes
123
123
 
124
- ## 当前命令口径
124
+ ## 当前工具口径
125
125
 
126
- - `openwrite style extract <source_id> --source <file>`
127
- - `openwrite setting extract <source_id> --source <file>`
128
- - `openwrite source review <source_id>`
129
- - `openwrite source promote <source_id> --target all`
130
- - `openwrite style synthesize`
126
+ 一律走 `novel_source_action`,没有 `openwrite` 命令行(本插件只发行
127
+ `openwrite-maintenance` 与 `openwrite-safe-upgrade` 两个维护脚本):
128
+
129
+ - 提取风格信号:`novel_source_action(action="analyze_v2", source_id=…, content=<原文>, focus=["style"])`
130
+ - 提取设定提要:`novel_source_action(action="analyze_v2", source_id=…, content=<原文>, focus=["setting"])`
131
+ - 查看提取状态:`novel_source_action(action="status_v2", source_id=…)`
132
+ - 复审:`novel_source_action(action="review", source_id=…)`
133
+ - 晋升预览:`novel_source_action(action="promotion_preview_v2", profile_id=…, target=…)`
134
+ - 执行晋升:`novel_source_action(action="promote_v2", preview_id=…, confirm=true)`
135
+ - 综合风格:`novel_source_action(action="synthesize_v2", source_ids=[…])`
136
+
137
+ 带 `confirm` 的动作必须先预览再执行;模型侧动作是长时的,见任务页。
131
138
 
132
139
  其中 `source promote --target all` 会把:
133
140
  - style 信号晋升到当前 `style_id`