@waterwx/dsh-novel-forge 1.2.1-alpha → 1.3.0-alpha
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.md +4 -5
- package/lib/client.js +2470 -858
- package/lib/index.js +2155 -388
- package/lib/types/action-guard.d.ts +1 -1
- package/lib/types/assets.d.ts +7 -7
- package/lib/types/client/api.d.ts +31 -1
- package/lib/types/client/llmLive.d.ts +12 -14
- package/lib/types/client/panel/LiveFeedLog.d.ts +5 -0
- package/lib/types/client/panel/ModelManager.d.ts +2 -2
- package/lib/types/client/panel/PromptSlotsView.d.ts +11 -0
- package/lib/types/client/panel/TensionView.d.ts +14 -0
- package/lib/types/client/panel/TimelineView.d.ts +14 -0
- package/lib/types/engine.d.ts +40 -2
- package/lib/types/index.d.ts +4 -0
- package/lib/types/llm-live.d.ts +65 -34
- package/lib/types/llm-retry.d.ts +38 -0
- package/lib/types/market-radar-sources.d.ts +1 -1
- package/lib/types/prompt-slots.d.ts +57 -0
- package/lib/types/prompting.d.ts +2 -2
- package/lib/types/protocol.d.ts +283 -3
- package/lib/types/snapshots.d.ts +46 -0
- package/lib/types/stage-contract.d.ts +1 -1
- package/lib/types/tension.d.ts +65 -0
- package/lib/types/timeline.d.ts +37 -0
- package/package.json +3 -2
- package/src/action-guard.ts +1 -1
- package/src/assets.ts +300 -268
- package/src/assistant.ts +45 -29
- package/src/client/api.ts +76 -2
- package/src/client/llmLive.ts +26 -16
- package/src/client/panel/AssetsTab.tsx +2 -2
- package/src/client/panel/LiveFeedLog.tsx +204 -67
- package/src/client/panel/ModelManager.tsx +2 -2
- package/src/client/panel/NovelPanel.tsx +127 -13
- package/src/client/panel/PromptSlotsView.tsx +97 -0
- package/src/client/panel/SettingsView.tsx +35 -0
- package/src/client/panel/TensionView.tsx +196 -0
- package/src/client/panel/TimelineView.tsx +192 -0
- package/src/engine.ts +549 -108
- package/src/index.ts +12 -0
- package/src/llm-live.ts +260 -68
- package/src/llm-retry.ts +77 -0
- package/src/market-radar-sources.ts +173 -173
- package/src/prompt-slots.ts +125 -0
- package/src/prompting.ts +8 -8
- package/src/protocol.ts +314 -3
- package/src/routes.ts +325 -6
- package/src/run.ts +4 -0
- package/src/snapshots.ts +174 -0
- package/src/stage-contract.ts +189 -189
- package/src/tension.ts +240 -0
- package/src/timeline.ts +159 -0
package/src/assets.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Writing assets — 题材基底库 / 推进模式库 / 反 AI 规则 / 写法引擎.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* - 8
|
|
6
|
-
* - 12
|
|
7
|
-
* -
|
|
4
|
+
* 内置种子数据(本项目自研表述;结构参考了同类工具的功能划分):
|
|
5
|
+
* - 8 套预置叙事风格模板
|
|
6
|
+
* - 12 条带命中模式的反 AI 规则
|
|
7
|
+
* - 题材树 + 推进模式种子
|
|
8
8
|
* Assets persist with the project (novel-project.json) and are injected into
|
|
9
9
|
* generation / planning / review prompts, and available to the AI assistant.
|
|
10
10
|
*/
|
|
@@ -13,154 +13,174 @@ import type { AntiAiRule, GenreNode, PlotBeatTemplate, ProgressionMode, ProjectA
|
|
|
13
13
|
|
|
14
14
|
// ------------------------------------------------------ built-in style templates
|
|
15
15
|
|
|
16
|
-
/**
|
|
16
|
+
/** 预置叙事风格模板(8 套,一键绑定无需样本文本)。 */
|
|
17
17
|
export const BUILTIN_STYLE_TEMPLATES: StyleTemplate[] = [
|
|
18
18
|
{
|
|
19
19
|
key: 'power-up-escalation',
|
|
20
|
-
name: '
|
|
21
|
-
description: '
|
|
20
|
+
name: '目标推进爽文流',
|
|
21
|
+
description: '冲突与收益逐级抬升,每章都要有可指认的目标推进与爽点兑现。',
|
|
22
22
|
category: '爽文流',
|
|
23
|
-
applicableGenres: [
|
|
23
|
+
applicableGenres: [
|
|
24
|
+
'都市',
|
|
25
|
+
'玄幻',
|
|
26
|
+
'热血',
|
|
27
|
+
],
|
|
24
28
|
tags: ["推进感", "收益点", "冲突升级"],
|
|
25
|
-
analysisMarkdown: "
|
|
26
|
-
narrative: { progressionMode: "goal_driven", sceneUnitPattern: ["目标", "阻碍", "压制", "反转收益"], multiPov: false, looping: false, endingStyle: "hook", summary: "
|
|
27
|
-
character: { allowSelfReflection: true, emotionExpression: "dialogue_and_action", defenseMechanisms: [], facePriority: false, dialogueStyle: "direct", summary: "
|
|
28
|
-
language: { register: "direct", roughness: 0.55, allowIncompleteSentences: false, allowSwearing: false, sentenceVariation: "medium", allowUselessDetails: false, summary: "
|
|
29
|
-
rhythm: { pace: "fast", paragraphDensity: "medium", allowFragmentedFlow: false, actionOverExplanation: true, summary: "
|
|
29
|
+
analysisMarkdown: "每一段都要落在「推进」或「兑现」上:因果清楚,节奏逐段抬升。",
|
|
30
|
+
narrative: { progressionMode: "goal_driven", sceneUnitPattern: ["目标", "阻碍", "压制", "反转收益"], multiPov: false, looping: false, endingStyle: "hook", summary: "围绕本章目标滚进,尽快给出局部收益。" },
|
|
31
|
+
character: { allowSelfReflection: true, emotionExpression: "dialogue_and_action", defenseMechanisms: [], facePriority: false, dialogueStyle: "direct", summary: "表达直接,情绪跟着胜负走。" },
|
|
32
|
+
language: { register: "direct", roughness: 0.55, allowIncompleteSentences: false, allowSwearing: false, sentenceVariation: "medium", allowUselessDetails: false, summary: "句子利落,删掉不承担信息的枝节。" },
|
|
33
|
+
rhythm: { pace: "fast", paragraphDensity: "medium", allowFragmentedFlow: false, actionOverExplanation: true, summary: "先冲突后解释,不做停顿式铺垫。" },
|
|
30
34
|
proseRules: [
|
|
31
|
-
'
|
|
32
|
-
'
|
|
33
|
-
'
|
|
35
|
+
'每段都要有可指认的推进或兑现,不允许只做情绪铺垫。',
|
|
36
|
+
'场景按「立目标 → 遇阻 → 被压 → 反转收利」组织,节奏逐段抬升。',
|
|
37
|
+
'结尾用钩子收束,不写总结式段落。',
|
|
34
38
|
],
|
|
35
39
|
dialogueRules: [
|
|
36
|
-
'
|
|
37
|
-
'
|
|
40
|
+
'台词直来直去,情绪随胜负切换。',
|
|
41
|
+
'对话承担推进与信息交换,同时保留各角色的语气差别。',
|
|
38
42
|
],
|
|
39
43
|
languageRules: [
|
|
40
|
-
'
|
|
41
|
-
'
|
|
44
|
+
'句子清晰,删掉不承载信息的修饰。',
|
|
45
|
+
'表达明确,不做无谓铺垫。',
|
|
42
46
|
],
|
|
43
47
|
rhythmRules: [
|
|
44
|
-
'
|
|
48
|
+
'快节奏、段落密度中等,动作先于解释。',
|
|
45
49
|
'尽快兑现局部收益,避免拖沓。',
|
|
46
50
|
],
|
|
47
51
|
defaultAntiAiRuleKeys: ['forbid-theme-summary', 'risk-dialogue-too-functional', 'risk-three-paragraphs-exposition'],
|
|
48
52
|
},
|
|
49
53
|
{
|
|
50
54
|
key: 'bottom-loop-reality',
|
|
51
|
-
name: '
|
|
52
|
-
description: '
|
|
55
|
+
name: '底层循环写实流',
|
|
56
|
+
description: '用碎片化的日常和反复落空写人物困境,不给廉价出路。',
|
|
53
57
|
category: '现实流',
|
|
54
|
-
applicableGenres: [
|
|
58
|
+
applicableGenres: [
|
|
59
|
+
'都市',
|
|
60
|
+
'现实',
|
|
61
|
+
'成长',
|
|
62
|
+
],
|
|
55
63
|
tags: ["第一人称", "口语化", "碎片叙事"],
|
|
56
|
-
analysisMarkdown: "
|
|
57
|
-
narrative: { progressionMode: "time_sequence", sceneUnitPattern: ["行为", "落差", "自我合理化"], multiPov: false, looping: true, endingStyle: "unresolved", summary: "
|
|
58
|
-
character: { allowSelfReflection: false, emotionExpression: "behavior_only", defenseMechanisms: ["嘴硬", "转移", "自我合理化"], facePriority: true, dialogueStyle: "short_colloquial", summary: "
|
|
59
|
-
language: { register: "colloquial", roughness: 0.8, allowIncompleteSentences: true, allowSwearing: true, sentenceVariation: "high", allowUselessDetails: true, summary: "
|
|
60
|
-
rhythm: { pace: "medium_fast", paragraphDensity: "high", allowFragmentedFlow: true, actionOverExplanation: true, summary: "
|
|
64
|
+
analysisMarkdown: "靠时间推移与现实落差形成张力,结尾不解决核心困境。",
|
|
65
|
+
narrative: { progressionMode: "time_sequence", sceneUnitPattern: ["行为", "落差", "自我合理化"], multiPov: false, looping: true, endingStyle: "unresolved", summary: "碎片化推进,不做总括式回顾。" },
|
|
66
|
+
character: { allowSelfReflection: false, emotionExpression: "behavior_only", defenseMechanisms: ["嘴硬", "转移", "自我合理化"], facePriority: true, dialogueStyle: "short_colloquial", summary: "情绪靠动作和嘴硬,不做内心解说。" },
|
|
67
|
+
language: { register: "colloquial", roughness: 0.8, allowIncompleteSentences: true, allowSwearing: true, sentenceVariation: "high", allowUselessDetails: true, summary: "口语、粗粝,允许生活杂音。" },
|
|
68
|
+
rhythm: { pace: "medium_fast", paragraphDensity: "high", allowFragmentedFlow: true, actionOverExplanation: true, summary: "段落写实,先给动作再给解释。" },
|
|
61
69
|
proseRules: [
|
|
62
|
-
'
|
|
63
|
-
'
|
|
64
|
-
'
|
|
70
|
+
'用时间推移与现实落差构成张力,结尾不解决核心困境。',
|
|
71
|
+
'场景按「行为 → 落差 → 自我合理化」组织。',
|
|
72
|
+
'碎片化推进,不做总括式回顾。',
|
|
65
73
|
],
|
|
66
74
|
dialogueRules: [
|
|
67
|
-
'
|
|
75
|
+
'情绪通过动作与嘴硬体现,台词短促口语化。',
|
|
68
76
|
'对话保留生活杂音与无效信息。',
|
|
69
77
|
],
|
|
70
78
|
languageRules: [
|
|
71
|
-
'
|
|
72
|
-
'
|
|
79
|
+
'语言粗粝口语化,允许不完整句。',
|
|
80
|
+
'句长变化大,允许无意义细节。',
|
|
73
81
|
],
|
|
74
82
|
rhythmRules: [
|
|
75
|
-
'
|
|
83
|
+
'段落写实,先给动作再给解释。',
|
|
76
84
|
'中快节奏,允许碎片化流动。',
|
|
77
85
|
],
|
|
78
86
|
defaultAntiAiRuleKeys: ['forbid-explicit-psychology', 'forbid-ending-elevation', 'encourage-useless-action', 'encourage-reality-gap', 'encourage-hard-mouth-compensation'],
|
|
79
87
|
},
|
|
80
88
|
{
|
|
81
89
|
key: 'suspense-pressure',
|
|
82
|
-
name: '
|
|
83
|
-
description: '
|
|
90
|
+
name: '信息遮蔽压迫流',
|
|
91
|
+
description: '用信息遮蔽、细节异常与压力叠加制造不安。',
|
|
84
92
|
category: '悬疑流',
|
|
85
|
-
applicableGenres: [
|
|
93
|
+
applicableGenres: [
|
|
94
|
+
'悬疑',
|
|
95
|
+
'惊悚',
|
|
96
|
+
'现实',
|
|
97
|
+
],
|
|
86
98
|
tags: ["压迫感", "信息差", "异常细节"],
|
|
87
|
-
analysisMarkdown: "
|
|
88
|
-
narrative: { progressionMode: "mystery_escalation", sceneUnitPattern: ["现场细节", "异常", "误判", "新风险"], multiPov: false, looping: false, endingStyle: "suspense", summary: "
|
|
89
|
-
character: { allowSelfReflection: true, emotionExpression: "reaction_only", defenseMechanisms: ["压抑"], facePriority: false, dialogueStyle: "restrained", summary: "
|
|
90
|
-
language: { register: "restrained", roughness: 0.45, allowIncompleteSentences: true, allowSwearing: false, sentenceVariation: "medium_high", allowUselessDetails: true, summary: "
|
|
91
|
-
rhythm: { pace: "medium", paragraphDensity: "medium_high", allowFragmentedFlow: true, actionOverExplanation: true, summary: "
|
|
99
|
+
analysisMarkdown: "异常细节、信息差与节奏收束一起给悬念加压。",
|
|
100
|
+
narrative: { progressionMode: "mystery_escalation", sceneUnitPattern: ["现场细节", "异常", "误判", "新风险"], multiPov: false, looping: false, endingStyle: "suspense", summary: "优先制造信息缺口与压迫氛围。" },
|
|
101
|
+
character: { allowSelfReflection: true, emotionExpression: "reaction_only", defenseMechanisms: ["压抑"], facePriority: false, dialogueStyle: "restrained", summary: "反应克制,恐惧从反应里透出来。" },
|
|
102
|
+
language: { register: "restrained", roughness: 0.45, allowIncompleteSentences: true, allowSwearing: false, sentenceVariation: "medium_high", allowUselessDetails: true, summary: "细节精确,留少量噪音增强现场感。" },
|
|
103
|
+
rhythm: { pace: "medium", paragraphDensity: "medium_high", allowFragmentedFlow: true, actionOverExplanation: true, summary: "用节奏收束与信息延迟制造压力。" },
|
|
92
104
|
proseRules: [
|
|
93
|
-
'
|
|
94
|
-
'
|
|
95
|
-
'
|
|
105
|
+
'以异常细节、信息差与节奏收束给悬念加压。',
|
|
106
|
+
'场景按「现场细节 → 异常 → 误判 → 新风险」组织。',
|
|
107
|
+
'优先制造信息缺口与压迫氛围。',
|
|
96
108
|
],
|
|
97
109
|
dialogueRules: [
|
|
98
|
-
'
|
|
99
|
-
'
|
|
110
|
+
'反应克制,恐惧从反应里透出来。',
|
|
111
|
+
'台词保持克制,不解释恐惧来源。',
|
|
100
112
|
],
|
|
101
113
|
languageRules: [
|
|
102
|
-
'
|
|
103
|
-
'
|
|
114
|
+
'细节写准,留一点杂音换现场感。',
|
|
115
|
+
'克制,句长变化中等偏高。',
|
|
104
116
|
],
|
|
105
117
|
rhythmRules: [
|
|
106
|
-
'
|
|
118
|
+
'用节奏收束与信息延迟制造压力。',
|
|
107
119
|
'中速,段落密度中等偏高。',
|
|
108
120
|
],
|
|
109
121
|
defaultAntiAiRuleKeys: ['forbid-explicit-psychology', 'forbid-theme-summary', 'risk-even-paragraph-length', 'encourage-reality-gap'],
|
|
110
122
|
},
|
|
111
123
|
{
|
|
112
124
|
key: 'emotional-tension',
|
|
113
|
-
name: '
|
|
114
|
-
description: '
|
|
125
|
+
name: '关系错位拉扯流',
|
|
126
|
+
description: '用错位表达、停顿与误读制造关系张力。',
|
|
115
127
|
category: '情感流',
|
|
116
|
-
applicableGenres: [
|
|
128
|
+
applicableGenres: [
|
|
129
|
+
'言情',
|
|
130
|
+
'都市',
|
|
131
|
+
'群像',
|
|
132
|
+
],
|
|
117
133
|
tags: ["误读", "拉扯", "停顿感"],
|
|
118
|
-
analysisMarkdown: "
|
|
119
|
-
narrative: { progressionMode: "relationship_push_pull", sceneUnitPattern: ["动作", "言外之意", "误读", "回避"], multiPov: false, looping: false, endingStyle: "emotional_hook", summary: "
|
|
120
|
-
character: { allowSelfReflection: true, emotionExpression: "subtext", defenseMechanisms: ["回避", "试探", "嘴硬"], facePriority: true, dialogueStyle: "subtext_heavy", summary: "
|
|
121
|
-
language: { register: "natural", roughness: 0.35, allowIncompleteSentences: true, allowSwearing: false, sentenceVariation: "high", allowUselessDetails: true, summary: "
|
|
122
|
-
rhythm: { pace: "medium_slow", paragraphDensity: "medium", allowFragmentedFlow: true, actionOverExplanation: false, summary: "
|
|
134
|
+
analysisMarkdown: "核心情绪不直说,靠误读、停顿与反应推动关系变化。",
|
|
135
|
+
narrative: { progressionMode: "relationship_push_pull", sceneUnitPattern: ["动作", "言外之意", "误读", "回避"], multiPov: false, looping: false, endingStyle: "emotional_hook", summary: "靠关系错位推进,不直接说明。" },
|
|
136
|
+
character: { allowSelfReflection: true, emotionExpression: "subtext", defenseMechanisms: ["回避", "试探", "嘴硬"], facePriority: true, dialogueStyle: "subtext_heavy", summary: "情绪落在停顿、动作与言外之意上。" },
|
|
137
|
+
language: { register: "natural", roughness: 0.35, allowIncompleteSentences: true, allowSwearing: false, sentenceVariation: "high", allowUselessDetails: true, summary: "语言自然,允许停顿和留白。" },
|
|
138
|
+
rhythm: { pace: "medium_slow", paragraphDensity: "medium", allowFragmentedFlow: true, actionOverExplanation: false, summary: "给关系反应留空间,但不写空洞抒情。" },
|
|
123
139
|
proseRules: [
|
|
124
|
-
'
|
|
125
|
-
'
|
|
126
|
-
'
|
|
140
|
+
'核心情绪不直说,靠误读、停顿与反应推动关系。',
|
|
141
|
+
'场景按「动作 → 言外之意 → 误读 → 回避」组织。',
|
|
142
|
+
'靠关系错位推进,不靠旁白说明。',
|
|
127
143
|
],
|
|
128
144
|
dialogueRules: [
|
|
129
|
-
'
|
|
130
|
-
'
|
|
145
|
+
'情绪通过停顿、动作与言外之意体现。',
|
|
146
|
+
'台词充满潜台词与试探。',
|
|
131
147
|
],
|
|
132
148
|
languageRules: [
|
|
133
|
-
'
|
|
134
|
-
'
|
|
149
|
+
'语言自然,允许停顿和留白。',
|
|
150
|
+
'句长变化大,允许无意义细节。',
|
|
135
151
|
],
|
|
136
152
|
rhythmRules: [
|
|
137
|
-
'
|
|
153
|
+
'给关系反应留白,但不写空泛抒情。',
|
|
138
154
|
'中慢节奏,段落密度中等。',
|
|
139
155
|
],
|
|
140
156
|
defaultAntiAiRuleKeys: ['forbid-direct-preaching', 'forbid-ending-elevation', 'risk-dialogue-too-functional', 'encourage-useless-action'],
|
|
141
157
|
},
|
|
142
158
|
{
|
|
143
159
|
key: 'ensemble-weave',
|
|
144
|
-
name: '
|
|
145
|
-
description: '
|
|
160
|
+
name: '群像交叉推进流',
|
|
161
|
+
description: '多条人物行动线交叉推进,视角差异清晰可控。',
|
|
146
162
|
category: '群像流',
|
|
147
|
-
applicableGenres: [
|
|
163
|
+
applicableGenres: [
|
|
164
|
+
'群像',
|
|
165
|
+
'都市',
|
|
166
|
+
'悬疑',
|
|
167
|
+
],
|
|
148
168
|
tags: ["多角色", "交织", "信息流动"],
|
|
149
|
-
analysisMarkdown: "
|
|
150
|
-
narrative: { progressionMode: "multi_thread", sceneUnitPattern: ["角色动作", "局部信息", "交叉影响"], multiPov: true, looping: false, endingStyle: "cross_hook", summary: "
|
|
151
|
-
character: { allowSelfReflection: true, emotionExpression: "mixed", defenseMechanisms: [], facePriority: false, dialogueStyle: "distinct_by_role", summary: "
|
|
152
|
-
language: { register: "flexible", roughness: 0.45, allowIncompleteSentences: true, allowSwearing: false, sentenceVariation: "high", allowUselessDetails: false, summary: "
|
|
153
|
-
rhythm: { pace: "balanced", paragraphDensity: "medium", allowFragmentedFlow: false, actionOverExplanation: true, summary: "
|
|
169
|
+
analysisMarkdown: "多角色并行推进,但每人的表达与认知边界必须分清。",
|
|
170
|
+
narrative: { progressionMode: "multi_thread", sceneUnitPattern: ["角色动作", "局部信息", "交叉影响"], multiPov: true, looping: false, endingStyle: "cross_hook", summary: "多线并进,视角切换要有控制。" },
|
|
171
|
+
character: { allowSelfReflection: true, emotionExpression: "mixed", defenseMechanisms: [], facePriority: false, dialogueStyle: "distinct_by_role", summary: "不同角色的口吻必须拉开差距。" },
|
|
172
|
+
language: { register: "flexible", roughness: 0.45, allowIncompleteSentences: true, allowSwearing: false, sentenceVariation: "high", allowUselessDetails: false, summary: "保持角色差异,避免千人一腔。" },
|
|
173
|
+
rhythm: { pace: "balanced", paragraphDensity: "medium", allowFragmentedFlow: false, actionOverExplanation: true, summary: "几条线同时走,节奏别散。" },
|
|
154
174
|
proseRules: [
|
|
155
|
-
'
|
|
156
|
-
'
|
|
175
|
+
'多角色并行推进,各人的表达与认知边界必须分清。',
|
|
176
|
+
'多线并进,切视角要有节制。',
|
|
157
177
|
],
|
|
158
178
|
dialogueRules: [
|
|
159
|
-
'
|
|
179
|
+
'不同角色的口吻要拉开差距,避免所有人说话一样。',
|
|
160
180
|
],
|
|
161
181
|
languageRules: [
|
|
162
|
-
'
|
|
163
|
-
'
|
|
182
|
+
'保持角色差异,句长变化大。',
|
|
183
|
+
'砍掉不推进剧情的枝节信息。',
|
|
164
184
|
],
|
|
165
185
|
rhythmRules: [
|
|
166
186
|
'多线交织但节奏不乱,平衡推进。',
|
|
@@ -171,92 +191,104 @@ export const BUILTIN_STYLE_TEMPLATES: StyleTemplate[] = [
|
|
|
171
191
|
{
|
|
172
192
|
key: 'immersive-daily',
|
|
173
193
|
name: '日常浸没流',
|
|
174
|
-
description: '
|
|
194
|
+
description: '用生活细节与细微情绪变化建立持续沉浸。',
|
|
175
195
|
category: '日常流',
|
|
176
|
-
applicableGenres: [
|
|
196
|
+
applicableGenres: [
|
|
197
|
+
'日常',
|
|
198
|
+
'治愈',
|
|
199
|
+
'都市',
|
|
200
|
+
],
|
|
177
201
|
tags: ["生活感", "沉浸", "细碎细节"],
|
|
178
|
-
analysisMarkdown: "
|
|
179
|
-
narrative: { progressionMode: "scene_immersion", sceneUnitPattern: ["动作", "环境", "关系反应"], multiPov: false, looping: false, endingStyle: "soft_open", summary: "
|
|
180
|
-
character: { allowSelfReflection: true, emotionExpression: "light_behavior", defenseMechanisms: [], facePriority: false, dialogueStyle: "daily_natural", summary: "
|
|
181
|
-
language: { register: "colloquial", roughness: 0.25, allowIncompleteSentences: true, allowSwearing: false, sentenceVariation: "medium_high", allowUselessDetails: true, summary: "
|
|
182
|
-
rhythm: { pace: "slow", paragraphDensity: "medium", allowFragmentedFlow: true, actionOverExplanation: false, summary: "
|
|
202
|
+
analysisMarkdown: "允许生活性动作与无效信息,但核心情绪仍要从场景里自然流出。",
|
|
203
|
+
narrative: { progressionMode: "scene_immersion", sceneUnitPattern: ["动作", "环境", "关系反应"], multiPov: false, looping: false, endingStyle: "soft_open", summary: "重场景体验与关系温度。" },
|
|
204
|
+
character: { allowSelfReflection: true, emotionExpression: "light_behavior", defenseMechanisms: [], facePriority: false, dialogueStyle: "daily_natural", summary: "说话像日常,不端戏剧腔。" },
|
|
205
|
+
language: { register: "colloquial", roughness: 0.25, allowIncompleteSentences: true, allowSwearing: false, sentenceVariation: "medium_high", allowUselessDetails: true, summary: "保留生活细节与杂音,不追求工整。" },
|
|
206
|
+
rhythm: { pace: "slow", paragraphDensity: "medium", allowFragmentedFlow: true, actionOverExplanation: false, summary: "慢节奏沉浸,但不空转。" },
|
|
183
207
|
proseRules: [
|
|
184
|
-
'
|
|
185
|
-
'
|
|
208
|
+
'重场景体验与关系温度,核心情绪从场景自然流出。',
|
|
209
|
+
'允许保留生活性动作与无效信息。',
|
|
186
210
|
],
|
|
187
211
|
dialogueRules: [
|
|
188
|
-
'
|
|
212
|
+
'台词贴近日常说话,不端戏剧腔。',
|
|
189
213
|
'对话保留生活气息。',
|
|
190
214
|
],
|
|
191
215
|
languageRules: [
|
|
192
|
-
'
|
|
193
|
-
'
|
|
216
|
+
'保留生活细节与杂音,不追求工整。',
|
|
217
|
+
'口语化,句长变化中等偏高。',
|
|
194
218
|
],
|
|
195
219
|
rhythmRules: [
|
|
196
|
-
'
|
|
220
|
+
'节奏放慢,但不许原地打转。',
|
|
197
221
|
'允许碎片化流动。',
|
|
198
222
|
],
|
|
199
223
|
defaultAntiAiRuleKeys: ['forbid-ending-elevation', 'risk-even-paragraph-length', 'encourage-useless-action'],
|
|
200
224
|
},
|
|
201
225
|
{
|
|
202
226
|
key: 'cold-professional',
|
|
203
|
-
name: '
|
|
204
|
-
description: '
|
|
227
|
+
name: '专业事实压情绪流',
|
|
228
|
+
description: '用行业事实与程序细节压住情绪,形成克制的压力感。',
|
|
205
229
|
category: '专业流',
|
|
206
|
-
applicableGenres: [
|
|
230
|
+
applicableGenres: [
|
|
231
|
+
'职场',
|
|
232
|
+
'现实',
|
|
233
|
+
'悬疑',
|
|
234
|
+
],
|
|
207
235
|
tags: ["专业细节", "克制", "事实压情绪"],
|
|
208
|
-
analysisMarkdown: "
|
|
209
|
-
narrative: { progressionMode: "fact_driven", sceneUnitPattern: ["事实", "动作", "专业判断", "后果"], multiPov: false, looping: false, endingStyle: "pressure_continue", summary: "
|
|
210
|
-
character: { allowSelfReflection: false, emotionExpression: "suppressed", defenseMechanisms: ["克制"], facePriority: false, dialogueStyle: "informational", summary: "
|
|
211
|
-
language: { register: "professional", roughness: 0.2, allowIncompleteSentences: false, allowSwearing: false, sentenceVariation: "medium", allowUselessDetails: false, summary: "
|
|
212
|
-
rhythm: { pace: "balanced", paragraphDensity: "medium_high", allowFragmentedFlow: false, actionOverExplanation: true, summary: "
|
|
236
|
+
analysisMarkdown: "行业事实与程序细节优先;情绪不直说,信息密度高于抒情密度。",
|
|
237
|
+
narrative: { progressionMode: "fact_driven", sceneUnitPattern: ["事实", "动作", "专业判断", "后果"], multiPov: false, looping: false, endingStyle: "pressure_continue", summary: "让事实与程序细节扛住叙事重量。" },
|
|
238
|
+
character: { allowSelfReflection: false, emotionExpression: "suppressed", defenseMechanisms: ["克制"], facePriority: false, dialogueStyle: "informational", summary: "情绪藏在专业动作与事实选择里。" },
|
|
239
|
+
language: { register: "professional", roughness: 0.2, allowIncompleteSentences: false, allowSwearing: false, sentenceVariation: "medium", allowUselessDetails: false, summary: "术语与事实优先,避免廉价金句。" },
|
|
240
|
+
rhythm: { pace: "balanced", paragraphDensity: "medium_high", allowFragmentedFlow: false, actionOverExplanation: true, summary: "信息给得密,却不铺开解释。" },
|
|
213
241
|
proseRules: [
|
|
214
|
-
'
|
|
215
|
-
'
|
|
216
|
-
'
|
|
242
|
+
'行业事实与程序细节优先,情绪不直说,信息密度高于抒情密度。',
|
|
243
|
+
'场景按「事实 → 动作 → 专业判断 → 后果」组织。',
|
|
244
|
+
'让事实与程序细节扛住叙事重量。',
|
|
217
245
|
],
|
|
218
246
|
dialogueRules: [
|
|
219
|
-
'
|
|
247
|
+
'情绪藏在专业动作与事实选择里。',
|
|
220
248
|
'对话以信息性表达为主,克制。',
|
|
221
249
|
],
|
|
222
250
|
languageRules: [
|
|
223
|
-
'
|
|
224
|
-
'
|
|
251
|
+
'术语与事实优先,避免廉价金句。',
|
|
252
|
+
'语言正式、克制。',
|
|
225
253
|
],
|
|
226
254
|
rhythmRules: [
|
|
227
|
-
'
|
|
228
|
-
'
|
|
255
|
+
'信息给得密,却不铺开解释。',
|
|
256
|
+
'节奏平衡,段落密度中等偏高。',
|
|
229
257
|
],
|
|
230
258
|
defaultAntiAiRuleKeys: ['forbid-direct-preaching', 'forbid-theme-summary', 'risk-repeated-sentence-structure'],
|
|
231
259
|
},
|
|
232
260
|
{
|
|
233
261
|
key: 'absurd-dark-humor',
|
|
234
|
-
name: '
|
|
235
|
-
description: '
|
|
262
|
+
name: '反差黑色幽默流',
|
|
263
|
+
description: '用反差、冷感观察与荒诞细节制造黑色幽默。',
|
|
236
264
|
category: '黑色幽默',
|
|
237
|
-
applicableGenres: [
|
|
265
|
+
applicableGenres: [
|
|
266
|
+
'都市',
|
|
267
|
+
'黑色幽默',
|
|
268
|
+
'现实',
|
|
269
|
+
],
|
|
238
270
|
tags: ["荒诞", "反差", "冷感"],
|
|
239
|
-
analysisMarkdown: "
|
|
240
|
-
narrative: { progressionMode: "contrast_driven", sceneUnitPattern: ["现实细节", "荒诞偏差", "冷反应"], multiPov: false, looping: false, endingStyle: "bitter_aftertaste", summary: "
|
|
241
|
-
character: { allowSelfReflection: false, emotionExpression: "deadpan", defenseMechanisms: ["自嘲", "转移"], facePriority: true, dialogueStyle: "deadpan_colloquial", summary: "
|
|
242
|
-
language: { register: "colloquial", roughness: 0.5, allowIncompleteSentences: true, allowSwearing: true, sentenceVariation: "high", allowUselessDetails: true, summary: "
|
|
243
|
-
rhythm: { pace: "balanced", paragraphDensity: "medium_high", allowFragmentedFlow: true, actionOverExplanation: true, summary: "
|
|
271
|
+
analysisMarkdown: "用反差与荒诞细节放大现实困境,笑点与压迫感并存。",
|
|
272
|
+
narrative: { progressionMode: "contrast_driven", sceneUnitPattern: ["现实细节", "荒诞偏差", "冷反应"], multiPov: false, looping: false, endingStyle: "bitter_aftertaste", summary: "靠反差与冷感观察,不靠热闹吐槽。" },
|
|
273
|
+
character: { allowSelfReflection: false, emotionExpression: "deadpan", defenseMechanisms: ["自嘲", "转移"], facePriority: true, dialogueStyle: "deadpan_colloquial", summary: "情绪藏在冷反应与嘴硬里。" },
|
|
274
|
+
language: { register: "colloquial", roughness: 0.5, allowIncompleteSentences: true, allowSwearing: true, sentenceVariation: "high", allowUselessDetails: true, summary: "允许夹带荒诞杂质与冷幽默节奏。" },
|
|
275
|
+
rhythm: { pace: "balanced", paragraphDensity: "medium_high", allowFragmentedFlow: true, actionOverExplanation: true, summary: "反差点要快落地,不解释笑点。" },
|
|
244
276
|
proseRules: [
|
|
245
|
-
'
|
|
246
|
-
'
|
|
247
|
-
'
|
|
277
|
+
'用反差与荒诞细节放大现实困境,笑点与压迫感并存。',
|
|
278
|
+
'场景按「现实细节 → 荒诞偏差 → 冷反应」组织。',
|
|
279
|
+
'靠反差与冷感观察,不靠热闹吐槽。',
|
|
248
280
|
],
|
|
249
281
|
dialogueRules: [
|
|
250
|
-
'
|
|
251
|
-
'
|
|
282
|
+
'情绪藏在冷反应与嘴硬里。',
|
|
283
|
+
'台词冷面口语化,允许自嘲与转移。',
|
|
252
284
|
],
|
|
253
285
|
languageRules: [
|
|
254
|
-
'
|
|
255
|
-
'
|
|
286
|
+
'允许夹带荒诞杂质与冷幽默节奏。',
|
|
287
|
+
'口语化,句长变化大。',
|
|
256
288
|
],
|
|
257
289
|
rhythmRules: [
|
|
258
|
-
'
|
|
259
|
-
'
|
|
290
|
+
'反差立刻见效,笑点不解释。',
|
|
291
|
+
'节奏平衡,段落密度中等偏高。',
|
|
260
292
|
],
|
|
261
293
|
defaultAntiAiRuleKeys: ['forbid-explicit-psychology', 'forbid-ending-elevation', 'encourage-reality-gap', 'encourage-hard-mouth-compensation'],
|
|
262
294
|
},
|
|
@@ -471,12 +503,12 @@ export const BUILTIN_STYLE_TEMPLATES: StyleTemplate[] = [
|
|
|
471
503
|
|
|
472
504
|
// ---------------------------------------------------------- built-in rules
|
|
473
505
|
|
|
474
|
-
/** 内置全局反 AI
|
|
506
|
+
/** 内置全局反 AI 规则(12 条,随插件发布;项目可叠加自定义规则)。 */
|
|
475
507
|
export const BUILTIN_ANTI_AI_RULES: AntiAiRule[] = [
|
|
476
508
|
{
|
|
477
|
-
name: '
|
|
478
|
-
avoid: '
|
|
479
|
-
fix: '
|
|
509
|
+
name: '不许直接解说心理',
|
|
510
|
+
avoid: '用「他感到」「他意识到」这类句式替读者总结人物内心。',
|
|
511
|
+
fix: '改成动作、语气、停顿、环境反馈或结果来呈现。',
|
|
480
512
|
detectPatterns: ['他感到', '她感到', '他意识到', '她意识到', '他明白了', '她明白了'],
|
|
481
513
|
builtin: true,
|
|
482
514
|
key: 'forbid-explicit-psychology',
|
|
@@ -486,9 +518,9 @@ export const BUILTIN_ANTI_AI_RULES: AntiAiRule[] = [
|
|
|
486
518
|
globalBaselineEnabled: true,
|
|
487
519
|
},
|
|
488
520
|
{
|
|
489
|
-
name: '
|
|
490
|
-
avoid: '
|
|
491
|
-
fix: '
|
|
521
|
+
name: '不许段尾拔高',
|
|
522
|
+
avoid: '在段落或章节收尾处放一句总结式升华(「生活就是…」「说到底…」)。',
|
|
523
|
+
fix: '删掉升华句,把收尾落回具体动作、现场或悬而未决的处境。',
|
|
492
524
|
detectPatterns: ['生活就是', '命运总会', '归根结底', '说到底', '这就是'],
|
|
493
525
|
builtin: true,
|
|
494
526
|
key: 'forbid-ending-elevation',
|
|
@@ -498,9 +530,9 @@ export const BUILTIN_ANTI_AI_RULES: AntiAiRule[] = [
|
|
|
498
530
|
globalBaselineEnabled: true,
|
|
499
531
|
},
|
|
500
532
|
{
|
|
501
|
-
name: '
|
|
502
|
-
avoid: '
|
|
503
|
-
fix: '
|
|
533
|
+
name: '不许概括主题',
|
|
534
|
+
avoid: '把段落写成中心思想总结或人生道理(「这说明…」「这意味着…」)。',
|
|
535
|
+
fix: '删掉概括,让信息从事态与结果里自然显出来。',
|
|
504
536
|
detectPatterns: ['这说明', '这意味着', '归根结底', '其实就是'],
|
|
505
537
|
builtin: true,
|
|
506
538
|
key: 'forbid-theme-summary',
|
|
@@ -510,9 +542,9 @@ export const BUILTIN_ANTI_AI_RULES: AntiAiRule[] = [
|
|
|
510
542
|
globalBaselineEnabled: true,
|
|
511
543
|
},
|
|
512
544
|
{
|
|
513
|
-
name: '
|
|
514
|
-
avoid: '
|
|
515
|
-
fix: '
|
|
545
|
+
name: '不许作者说教',
|
|
546
|
+
avoid: '作者替角色或读者下价值判断(「我们都应该…」「人总要学会…」)。',
|
|
547
|
+
fix: '换成角色的具体处境或台词,不做抽象说教。',
|
|
516
548
|
detectPatterns: ['我们都应该', '人总要学会', '真正重要的是'],
|
|
517
549
|
builtin: true,
|
|
518
550
|
key: 'forbid-direct-preaching',
|
|
@@ -522,9 +554,9 @@ export const BUILTIN_ANTI_AI_RULES: AntiAiRule[] = [
|
|
|
522
554
|
globalBaselineEnabled: true,
|
|
523
555
|
},
|
|
524
556
|
{
|
|
525
|
-
name: '
|
|
526
|
-
avoid: '
|
|
527
|
-
fix: '
|
|
557
|
+
name: '段落长短过于均匀',
|
|
558
|
+
avoid: '段落长度与节奏过于平均,读起来像范文。',
|
|
559
|
+
fix: '打散段落长短,让句子与段落有自然起伏。',
|
|
528
560
|
detectPatterns: [],
|
|
529
561
|
builtin: true,
|
|
530
562
|
key: 'risk-even-paragraph-length',
|
|
@@ -534,9 +566,9 @@ export const BUILTIN_ANTI_AI_RULES: AntiAiRule[] = [
|
|
|
534
566
|
globalBaselineEnabled: true,
|
|
535
567
|
},
|
|
536
568
|
{
|
|
537
|
-
name: '
|
|
538
|
-
avoid: '
|
|
539
|
-
fix: '
|
|
569
|
+
name: '连段交代没有动作',
|
|
570
|
+
avoid: '连续几段只在交代背景,没有动作与现场感。',
|
|
571
|
+
fix: '插入动作、对话、环境反馈,把连段说明拆开。',
|
|
540
572
|
detectPatterns: [],
|
|
541
573
|
builtin: true,
|
|
542
574
|
key: 'risk-three-paragraphs-exposition',
|
|
@@ -546,9 +578,9 @@ export const BUILTIN_ANTI_AI_RULES: AntiAiRule[] = [
|
|
|
546
578
|
globalBaselineEnabled: true,
|
|
547
579
|
},
|
|
548
580
|
{
|
|
549
|
-
name: '
|
|
550
|
-
avoid: '
|
|
551
|
-
fix: '
|
|
581
|
+
name: '对话只剩功能',
|
|
582
|
+
avoid: '对话只推进信息,没有语气差异与生活噪音(「告诉你…」「我们现在要…」)。',
|
|
583
|
+
fix: '补入停顿、绕弯、语气差异与无效信息。',
|
|
552
584
|
detectPatterns: ['告诉你', '我们现在要', '接下来就'],
|
|
553
585
|
builtin: true,
|
|
554
586
|
key: 'risk-dialogue-too-functional',
|
|
@@ -558,9 +590,9 @@ export const BUILTIN_ANTI_AI_RULES: AntiAiRule[] = [
|
|
|
558
590
|
globalBaselineEnabled: true,
|
|
559
591
|
},
|
|
560
592
|
{
|
|
561
|
-
name: '
|
|
562
|
-
avoid: '
|
|
563
|
-
fix: '
|
|
593
|
+
name: '句式重复率偏高',
|
|
594
|
+
avoid: '连续使用同构句式(「首先…然后…接着…最后…」),读起来机械。',
|
|
595
|
+
fix: '拉开句长与起句方式,打散结构。',
|
|
564
596
|
detectPatterns: ['首先', '然后', '接着', '最后'],
|
|
565
597
|
builtin: true,
|
|
566
598
|
key: 'risk-repeated-sentence-structure',
|
|
@@ -582,9 +614,9 @@ export const BUILTIN_ANTI_AI_RULES: AntiAiRule[] = [
|
|
|
582
614
|
globalBaselineEnabled: true,
|
|
583
615
|
},
|
|
584
616
|
{
|
|
585
|
-
name: '
|
|
586
|
-
avoid: '
|
|
587
|
-
fix: '
|
|
617
|
+
name: '多点无用小动作',
|
|
618
|
+
avoid: '(鼓励类)通篇没有真实但不推动剧情的小动作,人物显得空。',
|
|
619
|
+
fix: '补入挠头、点烟、抠包装、挪椅子之类的小动作,添人味与生活感。',
|
|
588
620
|
detectPatterns: [],
|
|
589
621
|
builtin: true,
|
|
590
622
|
key: 'encourage-useless-action',
|
|
@@ -594,9 +626,9 @@ export const BUILTIN_ANTI_AI_RULES: AntiAiRule[] = [
|
|
|
594
626
|
globalBaselineEnabled: false,
|
|
595
627
|
},
|
|
596
628
|
{
|
|
597
|
-
name: '
|
|
598
|
-
avoid: '
|
|
599
|
-
fix: '
|
|
629
|
+
name: '多点预期落差',
|
|
630
|
+
avoid: '(鼓励类)人物预期与现实结果完全一致,没有落差。',
|
|
631
|
+
fix: '把预期与实际结果之间的差距写出来,制造张力。',
|
|
600
632
|
detectPatterns: [],
|
|
601
633
|
builtin: true,
|
|
602
634
|
key: 'encourage-reality-gap',
|
|
@@ -606,9 +638,9 @@ export const BUILTIN_ANTI_AI_RULES: AntiAiRule[] = [
|
|
|
606
638
|
globalBaselineEnabled: false,
|
|
607
639
|
},
|
|
608
640
|
{
|
|
609
|
-
name: '
|
|
610
|
-
avoid: '
|
|
611
|
-
fix: '
|
|
641
|
+
name: '多点嘴硬找补',
|
|
642
|
+
avoid: '(鼓励类)人物吃瘪后没有任何维持体面的反应。',
|
|
643
|
+
fix: '补一句嘴硬找补或自我合理化,保住人设温度。',
|
|
612
644
|
detectPatterns: [],
|
|
613
645
|
builtin: true,
|
|
614
646
|
key: 'encourage-hard-mouth-compensation',
|
|
@@ -696,7 +728,7 @@ export const BUILTIN_GENRE_LIBRARY: GenreNode[] = [
|
|
|
696
728
|
name: '仙侠修真',
|
|
697
729
|
description: '以修仙境界、宗门斗争、法宝丹药为核心,读者期待从凡人到强者的成长与长生问道。',
|
|
698
730
|
id: 'genre_xianxia',
|
|
699
|
-
template: '
|
|
731
|
+
template: '落笔在修行路径、因果代价与宗门抉择上。',
|
|
700
732
|
children: [
|
|
701
733
|
{ name: '凡人流', description: '资质平凡、步步为营,靠资源积累与心机博弈逆袭,强调真实感与代入感。', children: [] },
|
|
702
734
|
{ name: '苟道流', description: '主角苟且发育、藏锋敛芒,坐收渔利,强调生存智慧与反差爽点。', children: [] },
|
|
@@ -942,7 +974,7 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
942
974
|
driver: "通过陪伴、修复、生活细节和关系回暖持续吸引读者。",
|
|
943
975
|
readerExpectation: "读者反复获得安稳、温柔、回暖和情绪落地的满足感。",
|
|
944
976
|
payoffs: ["生活日常", "陪伴修复", "小问题解决", "关系回温"],
|
|
945
|
-
risks: ["高压主线喧宾夺主", "
|
|
977
|
+
risks: ["高压主线喧宾夺主", "治愈感被反复打断"],
|
|
946
978
|
primary: true,
|
|
947
979
|
progressionUnits: ["生活日常", "陪伴修复", "小问题解决", "关系回温"],
|
|
948
980
|
allowedConflictForms: ["低到中烈度困境", "关系误差", "生活压力"],
|
|
@@ -951,8 +983,8 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
951
983
|
chapterUnit: "每章围绕一个生活片段或情绪修复点展开。",
|
|
952
984
|
volumeReward: "卷末让读者感到人物状态更稳、更暖、更愿意继续生活。",
|
|
953
985
|
mandatorySignals: ["生活感", "安抚点", "关系回暖"],
|
|
954
|
-
antiSignals: ["高压主线喧宾夺主", "
|
|
955
|
-
resolutionStyle: "
|
|
986
|
+
antiSignals: ["高压主线喧宾夺主", "治愈感被反复打断"],
|
|
987
|
+
resolutionStyle: "用陪伴、理解与日常小修补把问题化掉。",
|
|
956
988
|
},
|
|
957
989
|
{
|
|
958
990
|
key: "story_mode_comedy_root",
|
|
@@ -961,7 +993,7 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
961
993
|
driver: "通过反差、包袱、误会和整活节奏持续制造轻松爽快感。",
|
|
962
994
|
readerExpectation: "读者频繁获得笑点、反套路和情绪减压体验。",
|
|
963
995
|
payoffs: ["设包袱", "误会升级", "反差回收", "局面失控"],
|
|
964
|
-
risks: ["长时间严肃无包袱", "
|
|
996
|
+
risks: ["长时间严肃无包袱", "笑点全靠口癖与段子堆"],
|
|
965
997
|
primary: true,
|
|
966
998
|
progressionUnits: ["设包袱", "误会升级", "反差回收", "局面失控"],
|
|
967
999
|
allowedConflictForms: ["误会", "反差", "社死", "整活翻车"],
|
|
@@ -970,8 +1002,8 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
970
1002
|
chapterUnit: "每章至少要推进一个有效笑点结构。",
|
|
971
1003
|
volumeReward: "卷末形成更大的整活名场面或误会共同体。",
|
|
972
1004
|
mandatorySignals: ["反差", "回收", "轻松释放"],
|
|
973
|
-
antiSignals: ["长时间严肃无包袱", "
|
|
974
|
-
resolutionStyle: "
|
|
1005
|
+
antiSignals: ["长时间严肃无包袱", "笑点全靠口癖与段子堆"],
|
|
1006
|
+
resolutionStyle: "用包袱回收与失控场面完成释放。",
|
|
975
1007
|
},
|
|
976
1008
|
{
|
|
977
1009
|
key: "story_mode_mystery_root",
|
|
@@ -984,7 +1016,7 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
984
1016
|
primary: true,
|
|
985
1017
|
progressionUnits: ["抛出疑点", "收集线索", "推演验证", "局势反转"],
|
|
986
1018
|
allowedConflictForms: ["信息差", "隐藏动机", "智性对抗"],
|
|
987
|
-
forbiddenConflictForms: ["为了保密故意不讲理", "
|
|
1019
|
+
forbiddenConflictForms: ["为了保密故意不讲理", "纯拼体力,推演感被吃掉"],
|
|
988
1020
|
conflictCeiling: "high",
|
|
989
1021
|
chapterUnit: "每章推进一个新疑点或一个旧疑点的验证。",
|
|
990
1022
|
volumeReward: "卷末揭开一层更大的真相或完成一次关键博弈。",
|
|
@@ -999,17 +1031,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
999
1031
|
driver: "通过人物关系的靠近、拉扯、错位与回收,持续制造追读动力。",
|
|
1000
1032
|
readerExpectation: "读者不断获得关系变化、情感张力和关键情绪兑现。",
|
|
1001
1033
|
payoffs: ["关系建立", "情绪拉扯", "信任变化", "节点兑现"],
|
|
1002
|
-
risks: ["关系原地踏步", "
|
|
1034
|
+
risks: ["关系原地踏步", "设定堆在那儿,互动没有"],
|
|
1003
1035
|
primary: true,
|
|
1004
1036
|
progressionUnits: ["关系建立", "情绪拉扯", "信任变化", "节点兑现"],
|
|
1005
1037
|
allowedConflictForms: ["关系误差", "情感错位", "现实阻力", "价值观摩擦"],
|
|
1006
|
-
forbiddenConflictForms: ["关系线长期停滞", "
|
|
1038
|
+
forbiddenConflictForms: ["关系线长期停滞", "无意义狗血来回打转", "情感推进长期被别的线吃掉"],
|
|
1007
1039
|
conflictCeiling: "medium",
|
|
1008
1040
|
chapterUnit: "每章推进一个关系节点、情绪变化或彼此认知变化。",
|
|
1009
1041
|
volumeReward: "卷末让关键关系发生明确变化或完成一次高价值情感兑现。",
|
|
1010
1042
|
mandatorySignals: ["关系张力", "情绪节点", "兑现感"],
|
|
1011
|
-
antiSignals: ["关系原地踏步", "
|
|
1012
|
-
resolutionStyle: "
|
|
1043
|
+
antiSignals: ["关系原地踏步", "设定堆在那儿,互动没有"],
|
|
1044
|
+
resolutionStyle: "靠情绪交流、关系行动与关键选择推进或修复。",
|
|
1013
1045
|
},
|
|
1014
1046
|
{
|
|
1015
1047
|
key: "story_mode_growth_root",
|
|
@@ -1022,7 +1054,7 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1022
1054
|
primary: true,
|
|
1023
1055
|
progressionUnits: ["获得目标", "挑战升级", "突破瓶颈", "进入新区域"],
|
|
1024
1056
|
allowedConflictForms: ["试炼", "探索风险", "阶段门槛", "成长阵痛"],
|
|
1025
|
-
forbiddenConflictForms: ["长期停滞不成长", "
|
|
1057
|
+
forbiddenConflictForms: ["长期停滞不成长", "只见数值上涨,体验没有变化", "探索线长期缺席"],
|
|
1026
1058
|
conflictCeiling: "high",
|
|
1027
1059
|
chapterUnit: "每章推进一个成长动作、一次探索发现或一段闯关反馈。",
|
|
1028
1060
|
volumeReward: "卷末让人物到达更高阶段,或打开一片更大的冒险空间。",
|
|
@@ -1037,17 +1069,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1037
1069
|
driver: "让主角以明显优势碾压阻力,并不断刷新他人认知。",
|
|
1038
1070
|
readerExpectation: "读者每隔几章都能看到一次明确的压制和地位确立。",
|
|
1039
1071
|
payoffs: ["展示底牌", "压制对手", "扩大威慑", "重写规则"],
|
|
1040
|
-
risks: ["主角像普通升级文一样长期弱势", "
|
|
1072
|
+
risks: ["主角像普通升级文一样长期弱势", "核心优势被硬生生封住"],
|
|
1041
1073
|
primary: false,
|
|
1042
1074
|
progressionUnits: ["展示底牌", "压制对手", "扩大威慑", "重写规则"],
|
|
1043
1075
|
allowedConflictForms: ["身份误判", "势力挑衅", "高手试探"],
|
|
1044
|
-
forbiddenConflictForms: ["长期躲藏发育", "
|
|
1076
|
+
forbiddenConflictForms: ["长期躲藏发育", "长时间挨打却无法反击"],
|
|
1045
1077
|
conflictCeiling: "high",
|
|
1046
1078
|
chapterUnit: "单章围绕一次压制、试探或立威展开。",
|
|
1047
1079
|
volumeReward: "卷末形成新的权力格局或更大范围的承认。",
|
|
1048
1080
|
mandatorySignals: ["强者气场", "围观震撼", "越级压制"],
|
|
1049
|
-
antiSignals: ["主角像普通升级文一样长期弱势", "
|
|
1050
|
-
resolutionStyle: "
|
|
1081
|
+
antiSignals: ["主角像普通升级文一样长期弱势", "核心优势被硬生生封住"],
|
|
1082
|
+
resolutionStyle: "用迅速反制与高位碾压把冲突收掉。",
|
|
1051
1083
|
},
|
|
1052
1084
|
{
|
|
1053
1085
|
key: "story_mode_face_slap",
|
|
@@ -1056,17 +1088,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1056
1088
|
driver: "通过他人误判和后续反转持续兑现高频打脸快感。",
|
|
1057
1089
|
readerExpectation: "读者不断看到轻视者被现场回收和反噬。",
|
|
1058
1090
|
payoffs: ["误判铺垫", "身份反转", "公开回收", "舆论发酵"],
|
|
1059
|
-
risks: ["只挨打不回收", "
|
|
1091
|
+
risks: ["只挨打不回收", "回收力度太轻,爽不起来"],
|
|
1060
1092
|
primary: false,
|
|
1061
1093
|
progressionUnits: ["误判铺垫", "身份反转", "公开回收", "舆论发酵"],
|
|
1062
1094
|
allowedConflictForms: ["轻视", "公开羞辱", "资源争夺"],
|
|
1063
|
-
forbiddenConflictForms: ["铺垫过长却没有回收", "
|
|
1095
|
+
forbiddenConflictForms: ["铺垫过长却没有回收", "打脸之后没有任何实际影响"],
|
|
1064
1096
|
conflictCeiling: "medium",
|
|
1065
1097
|
chapterUnit: "单章重点制造一次误判与回收闭环。",
|
|
1066
1098
|
volumeReward: "卷末主角从被看轻者转为不可忽视的中心人物。",
|
|
1067
1099
|
mandatorySignals: ["误判", "反转", "当场回收"],
|
|
1068
|
-
antiSignals: ["只挨打不回收", "
|
|
1069
|
-
resolutionStyle: "
|
|
1100
|
+
antiSignals: ["只挨打不回收", "回收力度太轻,爽不起来"],
|
|
1101
|
+
resolutionStyle: "在最需要证明的场合完成反转与回收。",
|
|
1070
1102
|
},
|
|
1071
1103
|
{
|
|
1072
1104
|
key: "story_mode_misread",
|
|
@@ -1075,17 +1107,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1075
1107
|
driver: "利用他人对主角的过度解读制造持续失控的优势局面。",
|
|
1076
1108
|
readerExpectation: "读者反复获得‘别人自己脑补过头’的反差快感。",
|
|
1077
1109
|
payoffs: ["误读", "脑补升级", "群体扩散", "误会兑现"],
|
|
1078
|
-
risks: ["误会强行", "
|
|
1110
|
+
risks: ["误会强行", "所有人一眼就看穿"],
|
|
1079
1111
|
primary: false,
|
|
1080
1112
|
progressionUnits: ["误读", "脑补升级", "群体扩散", "误会兑现"],
|
|
1081
1113
|
allowedConflictForms: ["信息不对称", "误会连锁", "群体解读偏差"],
|
|
1082
|
-
forbiddenConflictForms: ["直接解释清楚", "
|
|
1114
|
+
forbiddenConflictForms: ["直接解释清楚", "误会只演一次就收"],
|
|
1083
1115
|
conflictCeiling: "medium",
|
|
1084
1116
|
chapterUnit: "单章围绕一次误解升级和意外收益展开。",
|
|
1085
1117
|
volumeReward: "卷末误读体系形成稳定共识或传奇形象。",
|
|
1086
1118
|
mandatorySignals: ["脑补", "失控传播", "主角被动受益"],
|
|
1087
|
-
antiSignals: ["误会强行", "
|
|
1088
|
-
resolutionStyle: "
|
|
1119
|
+
antiSignals: ["误会强行", "所有人一眼就看穿"],
|
|
1120
|
+
resolutionStyle: "让误会自然滚大,最后变成主角的资源或声望。",
|
|
1089
1121
|
},
|
|
1090
1122
|
{
|
|
1091
1123
|
key: "story_mode_secret_identity",
|
|
@@ -1094,7 +1126,7 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1094
1126
|
driver: "通过多重身份切换、隐藏与掉马风险制造连续张力。",
|
|
1095
1127
|
readerExpectation: "读者不断看到身份差、信息差和掉马边缘的刺激感。",
|
|
1096
1128
|
payoffs: ["建立马甲", "切换身份", "险些掉马", "掉马兑现"],
|
|
1097
|
-
risks: ["身份线长期静止", "
|
|
1129
|
+
risks: ["身份线长期静止", "马甲只是换个名字,没有实际用途"],
|
|
1098
1130
|
primary: false,
|
|
1099
1131
|
progressionUnits: ["建立马甲", "切换身份", "险些掉马", "掉马兑现"],
|
|
1100
1132
|
allowedConflictForms: ["身份隐藏", "关系错位", "能力来源误判"],
|
|
@@ -1103,8 +1135,8 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1103
1135
|
chapterUnit: "单章至少推进一次身份利用或风险逼近。",
|
|
1104
1136
|
volumeReward: "卷末形成关键掉马或更复杂的身份网。",
|
|
1105
1137
|
mandatorySignals: ["信息差", "身份切换", "掉马钩子"],
|
|
1106
|
-
antiSignals: ["身份线长期静止", "
|
|
1107
|
-
resolutionStyle: "
|
|
1138
|
+
antiSignals: ["身份线长期静止", "马甲只是换个名字,没有实际用途"],
|
|
1139
|
+
resolutionStyle: "用身份切换解局,再把压力推到下一层露馅风险上。",
|
|
1108
1140
|
},
|
|
1109
1141
|
{
|
|
1110
1142
|
key: "story_mode_farming",
|
|
@@ -1117,7 +1149,7 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1117
1149
|
primary: false,
|
|
1118
1150
|
progressionUnits: ["播种准备", "生产积累", "邻里互动", "收成兑现"],
|
|
1119
1151
|
allowedConflictForms: ["资源短缺", "天气与环境压力", "小范围利益摩擦"],
|
|
1120
|
-
forbiddenConflictForms: ["长期高压生死线", "
|
|
1152
|
+
forbiddenConflictForms: ["长期高压生死线", "大反派主线永远收不掉"],
|
|
1121
1153
|
conflictCeiling: "low",
|
|
1122
1154
|
chapterUnit: "单章围绕一项劳作、一项建设或一段生活改善展开。",
|
|
1123
1155
|
volumeReward: "卷末形成一个明显更稳定、更温暖的生活阶段。",
|
|
@@ -1132,17 +1164,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1132
1164
|
driver: "通过经营决策和组织扩张持续制造上升感。",
|
|
1133
1165
|
readerExpectation: "读者反复看到业务跑起来、组织成型和口碑增长。",
|
|
1134
1166
|
payoffs: ["找到突破口", "搭建流程", "扩大规模", "赢得市场"],
|
|
1135
|
-
risks: ["只讲结果不讲过程", "
|
|
1167
|
+
risks: ["只讲结果不讲过程", "经营主线被反派线吞掉"],
|
|
1136
1168
|
primary: false,
|
|
1137
1169
|
progressionUnits: ["找到突破口", "搭建流程", "扩大规模", "赢得市场"],
|
|
1138
1170
|
allowedConflictForms: ["经营竞争", "资源调配", "团队磨合"],
|
|
1139
|
-
forbiddenConflictForms: ["无关的恋爱狗血长期抢戏", "
|
|
1171
|
+
forbiddenConflictForms: ["无关的恋爱狗血长期抢戏", "经营过程一笔带过"],
|
|
1140
1172
|
conflictCeiling: "medium",
|
|
1141
1173
|
chapterUnit: "单章推进一个经营动作或组织问题。",
|
|
1142
1174
|
volumeReward: "卷末形成业务升级、品牌确立或组织跃迁。",
|
|
1143
1175
|
mandatorySignals: ["策略感", "经营动作", "结果反馈"],
|
|
1144
|
-
antiSignals: ["只讲结果不讲过程", "
|
|
1145
|
-
resolutionStyle: "
|
|
1176
|
+
antiSignals: ["只讲结果不讲过程", "经营主线被反派线吞掉"],
|
|
1177
|
+
resolutionStyle: "用策略、运营、分工与节奏管理解决问题。",
|
|
1146
1178
|
},
|
|
1147
1179
|
{
|
|
1148
1180
|
key: "story_mode_territory_building",
|
|
@@ -1151,17 +1183,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1151
1183
|
driver: "通过把一块地、一座城或一个据点逐步经营成型,持续制造扩张与稳固的成就感。",
|
|
1152
1184
|
readerExpectation: "读者不断看到领地变强、秩序成型和安全感提升。",
|
|
1153
1185
|
payoffs: ["招募与安置", "设施建设", "规则落地", "外部试探回击"],
|
|
1154
|
-
risks: ["只有战争没有建设", "
|
|
1186
|
+
risks: ["只有战争没有建设", "领地越来越没存在感"],
|
|
1155
1187
|
primary: false,
|
|
1156
1188
|
progressionUnits: ["招募与安置", "设施建设", "规则落地", "外部试探回击"],
|
|
1157
1189
|
allowedConflictForms: ["资源紧张", "边界摩擦", "管理压力", "治安危机"],
|
|
1158
|
-
forbiddenConflictForms: ["领地长期形同虚设", "
|
|
1190
|
+
forbiddenConflictForms: ["领地长期形同虚设", "主线被私人恩怨整个带偏"],
|
|
1159
1191
|
conflictCeiling: "medium",
|
|
1160
1192
|
chapterUnit: "单章推进一个领地建设动作、治理问题或外部试探应对。",
|
|
1161
1193
|
volumeReward: "卷末让领地规模、秩序或影响力出现清晰跃升。",
|
|
1162
1194
|
mandatorySignals: ["据点成长", "治理动作", "秩序成型"],
|
|
1163
|
-
antiSignals: ["只有战争没有建设", "
|
|
1164
|
-
resolutionStyle: "
|
|
1195
|
+
antiSignals: ["只有战争没有建设", "领地越来越没存在感"],
|
|
1196
|
+
resolutionStyle: "用建设、治理、组织与局部反制先把局面稳住。",
|
|
1165
1197
|
},
|
|
1166
1198
|
{
|
|
1167
1199
|
key: "story_mode_family_management",
|
|
@@ -1170,17 +1202,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1170
1202
|
driver: "通过家业扩张、家族关系重组和责任传承维持故事推进。",
|
|
1171
1203
|
readerExpectation: "读者既能看到家底变厚,也能看到家族成员关系越来越成体系。",
|
|
1172
1204
|
payoffs: ["家业调整", "成员磨合", "资源积累", "家族地位提升"],
|
|
1173
|
-
risks: ["只剩吵架不见经营", "
|
|
1205
|
+
risks: ["只剩吵架不见经营", "家族线缺少传承味道"],
|
|
1174
1206
|
primary: false,
|
|
1175
1207
|
progressionUnits: ["家业调整", "成员磨合", "资源积累", "家族地位提升"],
|
|
1176
1208
|
allowedConflictForms: ["家务分歧", "利益分配", "外部竞争", "代际观念冲突"],
|
|
1177
|
-
forbiddenConflictForms: ["狗血撕裂长期压倒经营线", "
|
|
1209
|
+
forbiddenConflictForms: ["狗血撕裂长期压倒经营线", "家族人只剩功能位,关系毫无变化"],
|
|
1178
1210
|
conflictCeiling: "medium",
|
|
1179
1211
|
chapterUnit: "单章推进一次家业动作、一场家族互动或一项责任兑现。",
|
|
1180
1212
|
volumeReward: "卷末让家族更稳固、更有凝聚力,或完成一次地位跃升。",
|
|
1181
1213
|
mandatorySignals: ["家族协作", "家业动作", "关系重组"],
|
|
1182
|
-
antiSignals: ["只剩吵架不见经营", "
|
|
1183
|
-
resolutionStyle: "
|
|
1214
|
+
antiSignals: ["只剩吵架不见经营", "家族线缺少传承味道"],
|
|
1215
|
+
resolutionStyle: "用协商、分工、经营成果与共同扛危机完成修复。",
|
|
1184
1216
|
},
|
|
1185
1217
|
{
|
|
1186
1218
|
key: "story_mode_healing_daily",
|
|
@@ -1189,17 +1221,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1189
1221
|
driver: "靠日常陪伴和细小修复慢慢把人物带回稳定状态。",
|
|
1190
1222
|
readerExpectation: "读者每几章都获得一次情绪被抚平的体验。",
|
|
1191
1223
|
payoffs: ["日常互动", "情绪安抚", "关系熟化", "生活改善"],
|
|
1192
|
-
risks: ["冲突升级成高压大戏", "
|
|
1224
|
+
risks: ["冲突升级成高压大戏", "一章读完只剩焦虑"],
|
|
1193
1225
|
primary: false,
|
|
1194
1226
|
progressionUnits: ["日常互动", "情绪安抚", "关系熟化", "生活改善"],
|
|
1195
1227
|
allowedConflictForms: ["生活小挫折", "关系别扭", "旧伤回响"],
|
|
1196
|
-
forbiddenConflictForms: ["大反派压顶", "
|
|
1228
|
+
forbiddenConflictForms: ["大反派压顶", "极端痛苦长期不回收"],
|
|
1197
1229
|
conflictCeiling: "low",
|
|
1198
1230
|
chapterUnit: "每章围绕一个情绪节点和一个安抚点展开。",
|
|
1199
1231
|
volumeReward: "卷末让角色和读者都感到状态明显回暖。",
|
|
1200
1232
|
mandatorySignals: ["安抚感", "生活细节", "温柔互动"],
|
|
1201
|
-
antiSignals: ["冲突升级成高压大戏", "
|
|
1202
|
-
resolutionStyle: "
|
|
1233
|
+
antiSignals: ["冲突升级成高压大戏", "一章读完只剩焦虑"],
|
|
1234
|
+
resolutionStyle: "让人物在陪伴、倾听与具体行动里一点点被治好。",
|
|
1203
1235
|
},
|
|
1204
1236
|
{
|
|
1205
1237
|
key: "story_mode_shop_daily",
|
|
@@ -1208,17 +1240,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1208
1240
|
driver: "通过店铺经营、来客故事和社区互动形成持续新鲜感。",
|
|
1209
1241
|
readerExpectation: "读者既能看到经营变化,也能得到温暖的陌生人故事。",
|
|
1210
1242
|
payoffs: ["来客事件", "经营调整", "社区互动", "日常收束"],
|
|
1211
|
-
risks: ["只剩经营数据没有人情味", "
|
|
1243
|
+
risks: ["只剩经营数据没有人情味", "店铺越来越没存在感"],
|
|
1212
1244
|
primary: false,
|
|
1213
1245
|
progressionUnits: ["来客事件", "经营调整", "社区互动", "日常收束"],
|
|
1214
1246
|
allowedConflictForms: ["小店经营压力", "人情摩擦", "生活琐事"],
|
|
1215
|
-
forbiddenConflictForms: ["连续恶性打压", "
|
|
1247
|
+
forbiddenConflictForms: ["连续恶性打压", "悬疑过重或阴谋高压主导"],
|
|
1216
1248
|
conflictCeiling: "medium",
|
|
1217
1249
|
chapterUnit: "每章推进一次来客互动或经营小事件。",
|
|
1218
1250
|
volumeReward: "卷末让小店更有人气、更有归属感。",
|
|
1219
1251
|
mandatorySignals: ["小店空间感", "来客故事", "社区温度"],
|
|
1220
|
-
antiSignals: ["只剩经营数据没有人情味", "
|
|
1221
|
-
resolutionStyle: "
|
|
1252
|
+
antiSignals: ["只剩经营数据没有人情味", "店铺越来越没存在感"],
|
|
1253
|
+
resolutionStyle: "靠待人接物、经营调整与社区互助自然化解。",
|
|
1222
1254
|
},
|
|
1223
1255
|
{
|
|
1224
1256
|
key: "story_mode_slow_life",
|
|
@@ -1227,17 +1259,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1227
1259
|
driver: "通过缓慢但持续的生活改善与身心安定感推动读者停留。",
|
|
1228
1260
|
readerExpectation: "读者反复获得放松、沉浸和‘终于缓下来’的满足感。",
|
|
1229
1261
|
payoffs: ["日常作息", "环境熟悉", "生活改善", "情绪回稳"],
|
|
1230
|
-
risks: ["为了刺激频繁硬拗大冲突", "
|
|
1262
|
+
risks: ["为了刺激频繁硬拗大冲突", "越写越躁,没有呼吸"],
|
|
1231
1263
|
primary: false,
|
|
1232
1264
|
progressionUnits: ["日常作息", "环境熟悉", "生活改善", "情绪回稳"],
|
|
1233
|
-
allowedConflictForms: ["轻微不适应", "生活小困扰", "
|
|
1234
|
-
forbiddenConflictForms: ["持续高压倒计时", "
|
|
1265
|
+
allowedConflictForms: ["轻微不适应", "生活小困扰", "疏远之后的重新磨合"],
|
|
1266
|
+
forbiddenConflictForms: ["持续高压倒计时", "强反派长期追杀,或阴谋压顶"],
|
|
1235
1267
|
conflictCeiling: "low",
|
|
1236
1268
|
chapterUnit: "单章围绕一个生活片段、一项微小改善或一次情绪缓冲展开。",
|
|
1237
1269
|
volumeReward: "卷末让人物真正拥有一个更稳、更舒服的生活状态。",
|
|
1238
1270
|
mandatorySignals: ["生活秩序", "松弛感", "细节沉浸"],
|
|
1239
|
-
antiSignals: ["为了刺激频繁硬拗大冲突", "
|
|
1240
|
-
resolutionStyle: "
|
|
1271
|
+
antiSignals: ["为了刺激频繁硬拗大冲突", "越写越躁,没有呼吸"],
|
|
1272
|
+
resolutionStyle: "用时间、陪伴、规律生活与小步修补慢慢化解。",
|
|
1241
1273
|
},
|
|
1242
1274
|
{
|
|
1243
1275
|
key: "story_mode_companion_healing",
|
|
@@ -1246,17 +1278,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1246
1278
|
driver: "通过陪伴关系逐步建立、安全感逐步累积来带动情绪兑现。",
|
|
1247
1279
|
readerExpectation: "读者不断获得被理解、被陪着走过低谷的温柔满足。",
|
|
1248
1280
|
payoffs: ["接近与试探", "日常照料", "情绪松动", "关系确认"],
|
|
1249
|
-
risks: ["治愈线突然变虐恋拉扯", "
|
|
1281
|
+
risks: ["治愈线突然变虐恋拉扯", "陪伴关系没有实质进展"],
|
|
1250
1282
|
primary: false,
|
|
1251
1283
|
progressionUnits: ["接近与试探", "日常照料", "情绪松动", "关系确认"],
|
|
1252
1284
|
allowedConflictForms: ["旧伤回避", "沟通迟滞", "生活压力", "短暂误解"],
|
|
1253
|
-
forbiddenConflictForms: ["反复背刺", "
|
|
1285
|
+
forbiddenConflictForms: ["反复背刺", "虐点长期不回收", "拉扯过火到失去控制"],
|
|
1254
1286
|
conflictCeiling: "low",
|
|
1255
1287
|
chapterUnit: "单章推进一次陪伴动作、一次关系松动或一次情绪落地。",
|
|
1256
1288
|
volumeReward: "卷末让关键关系显著升温,人物更愿意相信他人和生活。",
|
|
1257
1289
|
mandatorySignals: ["陪伴感", "信任增长", "修复落地"],
|
|
1258
|
-
antiSignals: ["治愈线突然变虐恋拉扯", "
|
|
1259
|
-
resolutionStyle: "
|
|
1290
|
+
antiSignals: ["治愈线突然变虐恋拉扯", "陪伴关系没有实质进展"],
|
|
1291
|
+
resolutionStyle: "靠耐心、陪伴与实际行动把关系一点点修回来。",
|
|
1260
1292
|
},
|
|
1261
1293
|
{
|
|
1262
1294
|
key: "story_mode_comedy",
|
|
@@ -1265,17 +1297,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1265
1297
|
driver: "靠高频包袱、反差和失控场面维持阅读快乐。",
|
|
1266
1298
|
readerExpectation: "读者每章都能收获明确的轻松和好笑点。",
|
|
1267
1299
|
payoffs: ["包袱铺设", "反差升级", "笑点回收", "场面翻车"],
|
|
1268
|
-
risks: ["整段都很严肃", "
|
|
1300
|
+
risks: ["整段都很严肃", "光有吐槽,没有结构"],
|
|
1269
1301
|
primary: false,
|
|
1270
1302
|
progressionUnits: ["包袱铺设", "反差升级", "笑点回收", "场面翻车"],
|
|
1271
1303
|
allowedConflictForms: ["误会", "社死", "身份反差", "认知错位"],
|
|
1272
|
-
forbiddenConflictForms: ["长时间沉重苦情线", "
|
|
1304
|
+
forbiddenConflictForms: ["长时间沉重苦情线", "笑点稀少,剧情也不动"],
|
|
1273
1305
|
conflictCeiling: "medium",
|
|
1274
1306
|
chapterUnit: "每章围绕至少一个有效包袱闭环展开。",
|
|
1275
1307
|
volumeReward: "卷末形成标志性名场面或持续流传的笑料。",
|
|
1276
1308
|
mandatorySignals: ["包袱", "回收", "场面感"],
|
|
1277
|
-
antiSignals: ["整段都很严肃", "
|
|
1278
|
-
resolutionStyle: "
|
|
1309
|
+
antiSignals: ["整段都很严肃", "光有吐槽,没有结构"],
|
|
1310
|
+
resolutionStyle: "靠回收与升级继续加码笑点,而不是转向沉重。",
|
|
1279
1311
|
},
|
|
1280
1312
|
{
|
|
1281
1313
|
key: "story_mode_misunderstanding_comedy",
|
|
@@ -1284,17 +1316,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1284
1316
|
driver: "通过多方信息差导致的误会扩散维持喜剧节奏。",
|
|
1285
1317
|
readerExpectation: "读者不断看到误会越滚越大却越有趣的效果。",
|
|
1286
1318
|
payoffs: ["误会建立", "多方误读", "失控扩散", "喜剧回收"],
|
|
1287
|
-
risks: ["误会无后劲", "
|
|
1319
|
+
risks: ["误会无后劲", "澄清太快,节奏直接熄火"],
|
|
1288
1320
|
primary: false,
|
|
1289
1321
|
progressionUnits: ["误会建立", "多方误读", "失控扩散", "喜剧回收"],
|
|
1290
1322
|
allowedConflictForms: ["误会", "错位沟通", "集体误读"],
|
|
1291
|
-
forbiddenConflictForms: ["误会太快澄清", "
|
|
1323
|
+
forbiddenConflictForms: ["误会太快澄清", "误会反复用同一个梗"],
|
|
1292
1324
|
conflictCeiling: "medium",
|
|
1293
1325
|
chapterUnit: "每章推进一层新的误解或回收节点。",
|
|
1294
1326
|
volumeReward: "卷末形成一场大型误会名场面。",
|
|
1295
1327
|
mandatorySignals: ["信息差", "误读", "扩散"],
|
|
1296
|
-
antiSignals: ["误会无后劲", "
|
|
1297
|
-
resolutionStyle: "
|
|
1328
|
+
antiSignals: ["误会无后劲", "澄清太快,节奏直接熄火"],
|
|
1329
|
+
resolutionStyle: "把误会放在最好笑的位置回收,或升级成更大的笑点。",
|
|
1298
1330
|
},
|
|
1299
1331
|
{
|
|
1300
1332
|
key: "story_mode_absurd_subversion",
|
|
@@ -1303,17 +1335,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1303
1335
|
driver: "通过不断拆解常规预期,再给出更离谱但更成立的结果维持新鲜感。",
|
|
1304
1336
|
readerExpectation: "读者持续获得‘居然还能这么来’的惊喜和轻松感。",
|
|
1305
1337
|
payoffs: ["建立预期", "突然拧转", "离谱升级", "反套路回收"],
|
|
1306
|
-
risks: ["为了搞怪牺牲可读性", "
|
|
1338
|
+
risks: ["为了搞怪牺牲可读性", "段子堆叠,故事不往前"],
|
|
1307
1339
|
primary: false,
|
|
1308
1340
|
progressionUnits: ["建立预期", "突然拧转", "离谱升级", "反套路回收"],
|
|
1309
1341
|
allowedConflictForms: ["反差", "错位", "整活失控", "设定玩梗"],
|
|
1310
|
-
forbiddenConflictForms: ["只剩无意义发疯", "
|
|
1342
|
+
forbiddenConflictForms: ["只剩无意义发疯", "够离谱,却找不到逻辑支点", "连续沉重正剧化"],
|
|
1311
1343
|
conflictCeiling: "medium",
|
|
1312
1344
|
chapterUnit: "每章至少推进一个预期建立与反套路回收闭环。",
|
|
1313
1345
|
volumeReward: "卷末形成高传播度的离谱名场面或反套路高潮。",
|
|
1314
1346
|
mandatorySignals: ["意外感", "反套路", "回收闭环"],
|
|
1315
|
-
antiSignals: ["为了搞怪牺牲可读性", "
|
|
1316
|
-
resolutionStyle: "
|
|
1347
|
+
antiSignals: ["为了搞怪牺牲可读性", "段子堆叠,故事不往前"],
|
|
1348
|
+
resolutionStyle: "用更高一层的反套路把局面收回来,而不是跌回沉重正统冲突。",
|
|
1317
1349
|
},
|
|
1318
1350
|
{
|
|
1319
1351
|
key: "story_mode_mystery_inference",
|
|
@@ -1326,7 +1358,7 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1326
1358
|
primary: false,
|
|
1327
1359
|
progressionUnits: ["提出疑点", "补充线索", "推演收束", "揭开真相"],
|
|
1328
1360
|
allowedConflictForms: ["线索冲突", "证词矛盾", "隐藏动机"],
|
|
1329
|
-
forbiddenConflictForms: ["关键证据凭空出现", "
|
|
1361
|
+
forbiddenConflictForms: ["关键证据凭空出现", "该说明的地方故意含糊拖节奏"],
|
|
1330
1362
|
conflictCeiling: "medium",
|
|
1331
1363
|
chapterUnit: "每章推进一个关键疑点的认知变化。",
|
|
1332
1364
|
volumeReward: "卷末揭穿核心谜面或打开更大的悬念入口。",
|
|
@@ -1345,7 +1377,7 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1345
1377
|
primary: false,
|
|
1346
1378
|
progressionUnits: ["布局", "试探", "反制", "收网"],
|
|
1347
1379
|
allowedConflictForms: ["策略对抗", "心理博弈", "资源算计"],
|
|
1348
|
-
forbiddenConflictForms: ["对手太蠢", "
|
|
1380
|
+
forbiddenConflictForms: ["对手太蠢", "每次赢都靠主角的信息外挂"],
|
|
1349
1381
|
conflictCeiling: "medium",
|
|
1350
1382
|
chapterUnit: "每章推进一轮试探、布子或拆招。",
|
|
1351
1383
|
volumeReward: "卷末完成一次大局收网或更高阶对手登场。",
|
|
@@ -1360,17 +1392,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1360
1392
|
driver: "通过资源稀缺、环境压力和规则对抗持续制造必须做出选择的张力。",
|
|
1361
1393
|
readerExpectation: "读者反复获得局势求解、代价权衡和绝境翻盘的紧绷满足。",
|
|
1362
1394
|
payoffs: ["压力逼近", "规则试探", "资源争夺", "短线反制"],
|
|
1363
|
-
risks: ["危机廉价化", "
|
|
1395
|
+
risks: ["危机廉价化", "困境反复在同一类里打转"],
|
|
1364
1396
|
primary: false,
|
|
1365
1397
|
progressionUnits: ["压力逼近", "规则试探", "资源争夺", "短线反制"],
|
|
1366
1398
|
allowedConflictForms: ["资源稀缺", "规则压迫", "环境威胁", "群体博弈"],
|
|
1367
|
-
forbiddenConflictForms: ["纯靠运气通关", "
|
|
1399
|
+
forbiddenConflictForms: ["纯靠运气通关", "全是硬碰硬,没有策略", "同一种危机反复来"],
|
|
1368
1400
|
conflictCeiling: "high",
|
|
1369
1401
|
chapterUnit: "单章推进一轮生存压力、规则发现或关键抉择。",
|
|
1370
1402
|
volumeReward: "卷末完成一次阶段求生成功、规则突破或阵营格局改写。",
|
|
1371
1403
|
mandatorySignals: ["资源压力", "选择代价", "规则利用"],
|
|
1372
|
-
antiSignals: ["危机廉价化", "
|
|
1373
|
-
resolutionStyle: "
|
|
1404
|
+
antiSignals: ["危机廉价化", "困境反复在同一类里打转"],
|
|
1405
|
+
resolutionStyle: "靠吃透规则、判断局势与有限资源调度破局。",
|
|
1374
1406
|
},
|
|
1375
1407
|
{
|
|
1376
1408
|
key: "story_mode_romantic_tension",
|
|
@@ -1379,17 +1411,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1379
1411
|
driver: "通过双向吸引与现实阻力之间的反复拉扯维持情感张力。",
|
|
1380
1412
|
readerExpectation: "读者不断看到关系升温、试探失控和情绪回收。",
|
|
1381
1413
|
payoffs: ["试探靠近", "边界碰撞", "情绪失衡", "关系推进"],
|
|
1382
|
-
risks: ["只有误会拖延", "
|
|
1414
|
+
risks: ["只有误会拖延", "关系没有实质变化"],
|
|
1383
1415
|
primary: false,
|
|
1384
1416
|
progressionUnits: ["试探靠近", "边界碰撞", "情绪失衡", "关系推进"],
|
|
1385
1417
|
allowedConflictForms: ["暧昧错位", "表达失败", "现实阻力", "价值观差异"],
|
|
1386
|
-
forbiddenConflictForms: ["故意降智不说人话", "拖太久不推进", "
|
|
1418
|
+
forbiddenConflictForms: ["故意降智不说人话", "拖太久不推进", "关系线被主线彻底盖住"],
|
|
1387
1419
|
conflictCeiling: "medium",
|
|
1388
1420
|
chapterUnit: "单章推进一个情感试探、认知变化或关系边界松动。",
|
|
1389
1421
|
volumeReward: "卷末让关系进入新阶段,或完成一次高浓度情绪确认。",
|
|
1390
1422
|
mandatorySignals: ["暧昧感", "双向张力", "靠近兑现"],
|
|
1391
|
-
antiSignals: ["只有误会拖延", "
|
|
1392
|
-
resolutionStyle: "
|
|
1423
|
+
antiSignals: ["只有误会拖延", "关系没有实质变化"],
|
|
1424
|
+
resolutionStyle: "靠互动升级、情绪承认与行动选择推进关系。",
|
|
1393
1425
|
},
|
|
1394
1426
|
{
|
|
1395
1427
|
key: "story_mode_chasing_wife",
|
|
@@ -1398,17 +1430,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1398
1430
|
driver: "通过失去后的追偿、悔改和关系重建制造强烈情绪牵引。",
|
|
1399
1431
|
readerExpectation: "读者持续获得‘该追的在追、该还的在还、该痛的有回应’的满足。",
|
|
1400
1432
|
payoffs: ["后悔显现", "追偿行动", "关系试炼", "重建兑现"],
|
|
1401
|
-
risks: ["只会口头道歉", "
|
|
1433
|
+
risks: ["只会口头道歉", "修复关系毫无代价"],
|
|
1402
1434
|
primary: false,
|
|
1403
1435
|
progressionUnits: ["后悔显现", "追偿行动", "关系试炼", "重建兑现"],
|
|
1404
1436
|
allowedConflictForms: ["信任断裂", "旧伤反扑", "补偿落差", "现实阻碍"],
|
|
1405
|
-
forbiddenConflictForms: ["追偿只停留在嘴上", "
|
|
1437
|
+
forbiddenConflictForms: ["追偿只停留在嘴上", "反复受伤却始终没有出口", "被追的一方彻底失去主动权"],
|
|
1406
1438
|
conflictCeiling: "medium",
|
|
1407
1439
|
chapterUnit: "单章推进一次追偿动作、一次旧伤碰撞或一次关系松动。",
|
|
1408
1440
|
volumeReward: "卷末形成清晰的关系修复阶段或强力情绪回收。",
|
|
1409
1441
|
mandatorySignals: ["悔意落地", "行动补偿", "边界重建"],
|
|
1410
|
-
antiSignals: ["只会口头道歉", "
|
|
1411
|
-
resolutionStyle: "
|
|
1442
|
+
antiSignals: ["只会口头道歉", "修复关系毫无代价"],
|
|
1443
|
+
resolutionStyle: "用持续行动、承担代价与尊重边界推进关系重建。",
|
|
1412
1444
|
},
|
|
1413
1445
|
{
|
|
1414
1446
|
key: "story_mode_ensemble_bond",
|
|
@@ -1417,17 +1449,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1417
1449
|
driver: "通过多人互动和羁绊变化让故事始终有新的关系火花。",
|
|
1418
1450
|
readerExpectation: "读者不断获得角色之间的新连接、站队变化和情感共振。",
|
|
1419
1451
|
payoffs: ["关系串联", "群体事件", "立场变化", "羁绊加深"],
|
|
1420
|
-
risks: ["角色只报名字不干活", "
|
|
1452
|
+
risks: ["角色只报名字不干活", "群像散架,成了独角戏"],
|
|
1421
1453
|
primary: false,
|
|
1422
1454
|
progressionUnits: ["关系串联", "群体事件", "立场变化", "羁绊加深"],
|
|
1423
1455
|
allowedConflictForms: ["立场差异", "责任分歧", "情感错位", "团队压力"],
|
|
1424
|
-
forbiddenConflictForms: ["群像角色长期工具化", "只剩主角独走", "
|
|
1456
|
+
forbiddenConflictForms: ["群像角色长期工具化", "只剩主角独走", "人物关系始终原样不动"],
|
|
1425
1457
|
conflictCeiling: "medium",
|
|
1426
1458
|
chapterUnit: "单章推进一个群体互动节点或关键角色对之间的关系变化。",
|
|
1427
1459
|
volumeReward: "卷末让群像结构更稳,或让队伍/关系网进入新阶段。",
|
|
1428
1460
|
mandatorySignals: ["群体互动", "关系联动", "角色互相成就"],
|
|
1429
|
-
antiSignals: ["角色只报名字不干活", "
|
|
1430
|
-
resolutionStyle: "
|
|
1461
|
+
antiSignals: ["角色只报名字不干活", "群像散架,成了独角戏"],
|
|
1462
|
+
resolutionStyle: "靠团队互动、共同经历与角色选择推动关系演化。",
|
|
1431
1463
|
},
|
|
1432
1464
|
{
|
|
1433
1465
|
key: "story_mode_growth_leveling",
|
|
@@ -1436,17 +1468,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1436
1468
|
driver: "通过清晰可感的成长曲线和阶段突破持续拉动阅读。",
|
|
1437
1469
|
readerExpectation: "读者不断看到能力、地位或认知层级获得实质提升。",
|
|
1438
1470
|
payoffs: ["积累条件", "卡点受阻", "完成突破", "展示提升"],
|
|
1439
|
-
risks: ["升级像流水账", "
|
|
1471
|
+
risks: ["升级像流水账", "能力提升不带来剧情后果"],
|
|
1440
1472
|
primary: false,
|
|
1441
1473
|
progressionUnits: ["积累条件", "卡点受阻", "完成突破", "展示提升"],
|
|
1442
1474
|
allowedConflictForms: ["瓶颈", "试炼", "资源不足", "同层竞争"],
|
|
1443
|
-
forbiddenConflictForms: ["成长全靠旁白略过", "
|
|
1475
|
+
forbiddenConflictForms: ["成长全靠旁白略过", "突破既无代价也无铺垫", "升级之后拿不到任何兑现"],
|
|
1444
1476
|
conflictCeiling: "high",
|
|
1445
1477
|
chapterUnit: "单章推进一次积累、一次卡点试探或一次成长兑现。",
|
|
1446
1478
|
volumeReward: "卷末完成一个清晰等级、境界或阶段跃迁。",
|
|
1447
1479
|
mandatorySignals: ["成长门槛", "突破反馈", "阶段变化"],
|
|
1448
|
-
antiSignals: ["升级像流水账", "
|
|
1449
|
-
resolutionStyle: "
|
|
1480
|
+
antiSignals: ["升级像流水账", "能力提升不带来剧情后果"],
|
|
1481
|
+
resolutionStyle: "靠积累、训练、实战与关键顿悟完成成长突破。",
|
|
1450
1482
|
},
|
|
1451
1483
|
{
|
|
1452
1484
|
key: "story_mode_adventure_exploration",
|
|
@@ -1455,17 +1487,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1455
1487
|
driver: "通过不断进入未知区域、接触新规则和发现新秘密保持阅读新鲜感。",
|
|
1456
1488
|
readerExpectation: "读者持续获得开图、发现与未知感兑现。",
|
|
1457
1489
|
payoffs: ["进入新区域", "发现新规则", "遭遇风险", "带出新认知"],
|
|
1458
|
-
risks: ["探索空转", "
|
|
1490
|
+
risks: ["探索空转", "新区域没有存在的必要"],
|
|
1459
1491
|
primary: false,
|
|
1460
1492
|
progressionUnits: ["进入新区域", "发现新规则", "遭遇风险", "带出新认知"],
|
|
1461
1493
|
allowedConflictForms: ["环境威胁", "未知规则", "探索竞争", "文明差异"],
|
|
1462
|
-
forbiddenConflictForms: ["场景只是换皮", "
|
|
1494
|
+
forbiddenConflictForms: ["场景只是换皮", "探索不产出新信息", "一直原地打转,世界边界不动"],
|
|
1463
1495
|
conflictCeiling: "high",
|
|
1464
1496
|
chapterUnit: "单章推进一次新发现、一次环境应对或一次地图探索。",
|
|
1465
1497
|
volumeReward: "卷末打开新的区域层级、秘密入口或冒险目标。",
|
|
1466
1498
|
mandatorySignals: ["未知感", "发现感", "地图扩展"],
|
|
1467
|
-
antiSignals: ["探索空转", "
|
|
1468
|
-
resolutionStyle: "
|
|
1499
|
+
antiSignals: ["探索空转", "新区域没有存在的必要"],
|
|
1500
|
+
resolutionStyle: "靠观察、应对、适应与局部突破打开更深探索。",
|
|
1469
1501
|
},
|
|
1470
1502
|
{
|
|
1471
1503
|
key: "story_mode_dungeon_challenge",
|
|
@@ -1474,17 +1506,17 @@ export const BUILTIN_PROGRESSION_MODES: ProgressionMode[] = [
|
|
|
1474
1506
|
driver: "通过阶段性关卡挑战和规则破解形成连续的推进快感。",
|
|
1475
1507
|
readerExpectation: "读者不断获得过关、破局和奖励兑现的满足。",
|
|
1476
1508
|
payoffs: ["进入副本", "识别机制", "破解难点", "通关结算"],
|
|
1477
|
-
risks: ["关卡同质化", "
|
|
1509
|
+
risks: ["关卡同质化", "只有数值叠加,没有机制可言"],
|
|
1478
1510
|
primary: false,
|
|
1479
1511
|
progressionUnits: ["进入副本", "识别机制", "破解难点", "通关结算"],
|
|
1480
1512
|
allowedConflictForms: ["关卡机制", "时间压力", "队伍配合", "资源限制"],
|
|
1481
|
-
forbiddenConflictForms: ["副本机制全靠硬抗", "
|
|
1513
|
+
forbiddenConflictForms: ["副本机制全靠硬抗", "通关后拿不到奖励反馈", "关卡反复刷到失去新意"],
|
|
1482
1514
|
conflictCeiling: "high",
|
|
1483
1515
|
chapterUnit: "单章推进一个关卡节点、一个机制破解或一次通关反馈。",
|
|
1484
1516
|
volumeReward: "卷末完成一段完整副本征程,获得显著奖励或更高阶入口。",
|
|
1485
1517
|
mandatorySignals: ["机制感", "闯关反馈", "奖励兑现"],
|
|
1486
|
-
antiSignals: ["关卡同质化", "
|
|
1487
|
-
resolutionStyle: "
|
|
1518
|
+
antiSignals: ["关卡同质化", "只有数值叠加,没有机制可言"],
|
|
1519
|
+
resolutionStyle: "靠识别规则、团队配合与关键执行完成通关。",
|
|
1488
1520
|
},
|
|
1489
1521
|
]
|
|
1490
1522
|
|
|
@@ -1712,12 +1744,12 @@ export function styleTemplateToAsset(template: StyleTemplate): StyleAsset {
|
|
|
1712
1744
|
|
|
1713
1745
|
// ---------------------------------------------------------- starter profiles
|
|
1714
1746
|
|
|
1715
|
-
/**
|
|
1747
|
+
/** 起始风格画像库:无样本文本也能快速绑定一套写法(4 档起步写法)。 */
|
|
1716
1748
|
export const BUILTIN_STARTER_STYLE_PROFILES: StarterStyleProfile[] = [
|
|
1717
|
-
{ key: 'starter-power-up', templateKey: 'power-up-escalation', name: '
|
|
1718
|
-
{ key: 'starter-suspense', templateKey: 'suspense-pressure', name: '
|
|
1719
|
-
{ key: 'starter-emotional', templateKey: 'emotional-tension', name: '
|
|
1720
|
-
{ key: 'starter-daily', templateKey: 'immersive-daily', name: '
|
|
1749
|
+
{ key: 'starter-power-up', templateKey: 'power-up-escalation', name: '开书快跑·目标推进型', description: '第一次开书想先把推进感与爽点兑现跑顺,可以直接拿它起手,之后在这个底子上改。' },
|
|
1750
|
+
{ key: 'starter-suspense', templateKey: 'suspense-pressure', name: '开书快跑·信息遮蔽型', description: '写给异常、规则、调查、危险逼近这类故事:先把压迫感与信息差立起来。' },
|
|
1751
|
+
{ key: 'starter-emotional', templateKey: 'emotional-tension', name: '开书快跑·关系拉扯型', description: '写给关系推进、误读拉扯类故事:先拿一套能直接开写的关系表达底子。' },
|
|
1752
|
+
{ key: 'starter-daily', templateKey: 'immersive-daily', name: '开书快跑·日常浸没型', description: '写给治愈、陪伴、生活经营、轻缓成长类故事:优先保证生活感与沉浸感。' },
|
|
1721
1753
|
]
|
|
1722
1754
|
|
|
1723
1755
|
/** 起始风格画像 → 可直接绑定的 StyleAsset(绑定对应模板,名称用画像名)。 */
|
|
@@ -1749,7 +1781,7 @@ export function styleEngineSystemPrompt(): string {
|
|
|
1749
1781
|
'6. 判断预设 preset:imitate=高保真仿写(保留全部特征),balanced=平衡(保留可迁移特征、降指纹),transfer=迁移(只取骨架、彻底去指纹)。',
|
|
1750
1782
|
'7. 判断 fingerprintRisk:low/medium/high,表示照搬本样本会被识别为抄原作的风险。',
|
|
1751
1783
|
'8. 输出必须是合法 JSON 对象,不要输出任何其他文字。',
|
|
1752
|
-
'
|
|
1784
|
+
'输出结构:',
|
|
1753
1785
|
'{"proseRules": ["叙述视角与句式节奏规则"], "dialogueRules": ["台词风格规则"], "descriptionRules": ["描写密度与情绪表达规则"], "boundaries": ["表达边界"], "preset": "imitate|balanced|transfer", "fingerprintRisk": "low|medium|high", "writingGuidance": ["净化后的写作指引"], "forbiddenEntities": ["不可照搬的原作特有实体"]}',
|
|
1754
1786
|
].join('\n')
|
|
1755
1787
|
}
|
|
@@ -1768,7 +1800,7 @@ export function styleFormulaSystemPrompt(depth: 'basic' | 'standard' | 'deep'):
|
|
|
1768
1800
|
'1. 聚焦 focusAreas 指定的重点(如 开场/对话/节奏/爽点密度/段落结构)。',
|
|
1769
1801
|
'2. formula 用 Markdown 分小节;applyGuidance 说明生成/改写时如何套用(1-3 句)。',
|
|
1770
1802
|
'3. 只输出合法 JSON 对象,不要任何其他文字。',
|
|
1771
|
-
'
|
|
1803
|
+
'输出结构:',
|
|
1772
1804
|
'{"name": "公式名", "focusAreas": ["重点域"], "formula": "Markdown 公式正文", "applyGuidance": "套用指引"}',
|
|
1773
1805
|
].join('\n')
|
|
1774
1806
|
}
|