@actalk/inkos-core 0.3.5 → 0.4.0
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/dist/agents/architect.d.ts.map +1 -1
- package/dist/agents/architect.js +17 -3
- package/dist/agents/architect.js.map +1 -1
- package/dist/agents/base.d.ts +10 -0
- package/dist/agents/base.d.ts.map +1 -1
- package/dist/agents/base.js +12 -0
- package/dist/agents/base.js.map +1 -1
- package/dist/agents/continuity.d.ts +3 -1
- package/dist/agents/continuity.d.ts.map +1 -1
- package/dist/agents/continuity.js +78 -13
- package/dist/agents/continuity.js.map +1 -1
- package/dist/agents/post-write-validator.d.ts +16 -0
- package/dist/agents/post-write-validator.d.ts.map +1 -0
- package/dist/agents/post-write-validator.js +204 -0
- package/dist/agents/post-write-validator.js.map +1 -0
- package/dist/agents/reviser.d.ts +1 -1
- package/dist/agents/reviser.d.ts.map +1 -1
- package/dist/agents/reviser.js +16 -3
- package/dist/agents/reviser.js.map +1 -1
- package/dist/agents/sensitive-words.d.ts +22 -0
- package/dist/agents/sensitive-words.d.ts.map +1 -0
- package/dist/agents/sensitive-words.js +91 -0
- package/dist/agents/sensitive-words.js.map +1 -0
- package/dist/agents/writer-prompts.d.ts +1 -1
- package/dist/agents/writer-prompts.d.ts.map +1 -1
- package/dist/agents/writer-prompts.js +122 -11
- package/dist/agents/writer-prompts.js.map +1 -1
- package/dist/agents/writer.d.ts +16 -0
- package/dist/agents/writer.d.ts.map +1 -1
- package/dist/agents/writer.js +151 -6
- package/dist/agents/writer.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/llm/provider.d.ts +1 -0
- package/dist/llm/provider.d.ts.map +1 -1
- package/dist/llm/provider.js +9 -4
- package/dist/llm/provider.js.map +1 -1
- package/dist/models/book.d.ts +4 -4
- package/dist/models/book.d.ts.map +1 -1
- package/dist/models/book.js +0 -3
- package/dist/models/book.js.map +1 -1
- package/dist/models/project.d.ts +23 -7
- package/dist/models/project.d.ts.map +1 -1
- package/dist/models/project.js +13 -6
- package/dist/models/project.js.map +1 -1
- package/dist/notify/webhook.d.ts +1 -1
- package/dist/notify/webhook.d.ts.map +1 -1
- package/dist/notify/webhook.js.map +1 -1
- package/dist/pipeline/agent.d.ts.map +1 -1
- package/dist/pipeline/agent.js +76 -8
- package/dist/pipeline/agent.js.map +1 -1
- package/dist/pipeline/runner.d.ts +15 -2
- package/dist/pipeline/runner.d.ts.map +1 -1
- package/dist/pipeline/runner.js +270 -31
- package/dist/pipeline/runner.js.map +1 -1
- package/dist/pipeline/scheduler.d.ts +20 -2
- package/dist/pipeline/scheduler.d.ts.map +1 -1
- package/dist/pipeline/scheduler.js +162 -32
- package/dist/pipeline/scheduler.js.map +1 -1
- package/dist/utils/web-search.d.ts +13 -0
- package/dist/utils/web-search.d.ts.map +1 -0
- package/dist/utils/web-search.js +37 -0
- package/dist/utils/web-search.js.map +1 -0
- package/genres/horror.md +1 -1
- package/genres/other.md +1 -1
- package/genres/urban.md +1 -1
- package/genres/xianxia.md +1 -1
- package/genres/xuanhuan.md +1 -1
- package/package.json +2 -1
- package/dist/__tests__/ai-tells.test.d.ts +0 -2
- package/dist/__tests__/ai-tells.test.d.ts.map +0 -1
- package/dist/__tests__/ai-tells.test.js +0 -78
- package/dist/__tests__/ai-tells.test.js.map +0 -1
- package/dist/__tests__/detection-insights.test.d.ts +0 -2
- package/dist/__tests__/detection-insights.test.d.ts.map +0 -1
- package/dist/__tests__/detection-insights.test.js +0 -50
- package/dist/__tests__/detection-insights.test.js.map +0 -1
- package/dist/__tests__/detector.test.d.ts +0 -2
- package/dist/__tests__/detector.test.d.ts.map +0 -1
- package/dist/__tests__/detector.test.js +0 -71
- package/dist/__tests__/detector.test.js.map +0 -1
- package/dist/__tests__/models.test.d.ts +0 -2
- package/dist/__tests__/models.test.d.ts.map +0 -1
- package/dist/__tests__/models.test.js +0 -328
- package/dist/__tests__/models.test.js.map +0 -1
- package/dist/__tests__/state-manager.test.d.ts +0 -2
- package/dist/__tests__/state-manager.test.d.ts.map +0 -1
- package/dist/__tests__/state-manager.test.js +0 -264
- package/dist/__tests__/state-manager.test.js.map +0 -1
- package/dist/__tests__/style-analyzer.test.d.ts +0 -2
- package/dist/__tests__/style-analyzer.test.d.ts.map +0 -1
- package/dist/__tests__/style-analyzer.test.js +0 -53
- package/dist/__tests__/style-analyzer.test.js.map +0 -1
- package/dist/__tests__/webhook.test.d.ts +0 -2
- package/dist/__tests__/webhook.test.d.ts.map +0 -1
- package/dist/__tests__/webhook.test.js +0 -62
- package/dist/__tests__/webhook.test.js.map +0 -1
- package/dist/__tests__/writer-parser.test.d.ts +0 -2
- package/dist/__tests__/writer-parser.test.d.ts.map +0 -1
- package/dist/__tests__/writer-parser.test.js +0 -195
- package/dist/__tests__/writer-parser.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviser.js","sourceRoot":"","sources":["../../src/agents/reviser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAajC,MAAM,iBAAiB,GAA+B;IACpD,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"reviser.js","sourceRoot":"","sources":["../../src/agents/reviser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sensitive word detection — rule-based analysis (no LLM).
|
|
3
|
+
*
|
|
4
|
+
* Detects politically sensitive, sexually explicit, and extremely violent terms
|
|
5
|
+
* in Chinese web novel content. Used in audit pipeline to flag or block content.
|
|
6
|
+
*/
|
|
7
|
+
import type { AuditIssue } from "./continuity.js";
|
|
8
|
+
export interface SensitiveWordMatch {
|
|
9
|
+
readonly word: string;
|
|
10
|
+
readonly count: number;
|
|
11
|
+
readonly severity: "block" | "warn";
|
|
12
|
+
}
|
|
13
|
+
export interface SensitiveWordResult {
|
|
14
|
+
readonly issues: ReadonlyArray<AuditIssue>;
|
|
15
|
+
readonly found: ReadonlyArray<SensitiveWordMatch>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Analyze text content for sensitive words.
|
|
19
|
+
* Returns issues that can be merged into audit results.
|
|
20
|
+
*/
|
|
21
|
+
export declare function analyzeSensitiveWords(content: string, customWords?: ReadonlyArray<string>): SensitiveWordResult;
|
|
22
|
+
//# sourceMappingURL=sensitive-words.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive-words.d.ts","sourceRoot":"","sources":["../../src/agents/sensitive-words.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;CACnD;AA2CD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAClC,mBAAmB,CAqCrB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sensitive word detection — rule-based analysis (no LLM).
|
|
3
|
+
*
|
|
4
|
+
* Detects politically sensitive, sexually explicit, and extremely violent terms
|
|
5
|
+
* in Chinese web novel content. Used in audit pipeline to flag or block content.
|
|
6
|
+
*/
|
|
7
|
+
// Political terms — severity "block"
|
|
8
|
+
const POLITICAL_WORDS = [
|
|
9
|
+
"习近平", "习主席", "习总书记", "共产党", "中国共产党", "共青团",
|
|
10
|
+
"六四", "天安门事件", "天安门广场事件", "法轮功", "法轮大法",
|
|
11
|
+
"台独", "藏独", "疆独", "港独",
|
|
12
|
+
"新疆集中营", "再教育营",
|
|
13
|
+
"维吾尔", "达赖喇嘛", "达赖",
|
|
14
|
+
"刘晓波", "艾未未", "赵紫阳",
|
|
15
|
+
"文化大革命", "文革", "大跃进",
|
|
16
|
+
"反右运动", "镇压", "六四屠杀",
|
|
17
|
+
"中南海", "政治局常委",
|
|
18
|
+
"翻墙", "防火长城",
|
|
19
|
+
];
|
|
20
|
+
// Sexual terms — severity "warn"
|
|
21
|
+
const SEXUAL_WORDS = [
|
|
22
|
+
"性交", "做爱", "口交", "肛交", "自慰", "手淫",
|
|
23
|
+
"阴茎", "阴道", "阴蒂", "乳房", "乳头",
|
|
24
|
+
"射精", "高潮", "潮吹",
|
|
25
|
+
"淫荡", "淫乱", "荡妇", "婊子",
|
|
26
|
+
"强奸", "轮奸",
|
|
27
|
+
];
|
|
28
|
+
// Extreme violence — severity "warn"
|
|
29
|
+
const VIOLENCE_EXTREME = [
|
|
30
|
+
"肢解", "碎尸", "挖眼", "剥皮", "开膛破肚",
|
|
31
|
+
"虐杀", "凌迟", "活剥", "活埋", "烹煮活人",
|
|
32
|
+
];
|
|
33
|
+
const WORD_LISTS = [
|
|
34
|
+
{ words: POLITICAL_WORDS, severity: "block", label: "政治敏感词" },
|
|
35
|
+
{ words: SEXUAL_WORDS, severity: "warn", label: "色情敏感词" },
|
|
36
|
+
{ words: VIOLENCE_EXTREME, severity: "warn", label: "极端暴力词" },
|
|
37
|
+
];
|
|
38
|
+
/**
|
|
39
|
+
* Analyze text content for sensitive words.
|
|
40
|
+
* Returns issues that can be merged into audit results.
|
|
41
|
+
*/
|
|
42
|
+
export function analyzeSensitiveWords(content, customWords) {
|
|
43
|
+
const found = [];
|
|
44
|
+
const issues = [];
|
|
45
|
+
// Check built-in word lists
|
|
46
|
+
for (const list of WORD_LISTS) {
|
|
47
|
+
const matches = scanWords(content, list.words, list.severity);
|
|
48
|
+
if (matches.length > 0) {
|
|
49
|
+
found.push(...matches);
|
|
50
|
+
const wordSummary = matches.map((m) => `"${m.word}"×${m.count}`).join("、");
|
|
51
|
+
issues.push({
|
|
52
|
+
severity: list.severity === "block" ? "critical" : "warning",
|
|
53
|
+
category: "敏感词",
|
|
54
|
+
description: `检测到${list.label}:${wordSummary}`,
|
|
55
|
+
suggestion: list.severity === "block"
|
|
56
|
+
? "必须删除或替换政治敏感词,否则无法发布"
|
|
57
|
+
: `建议替换或弱化${list.label},避免平台审核问题`,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Check custom words
|
|
62
|
+
if (customWords && customWords.length > 0) {
|
|
63
|
+
const customMatches = scanWords(content, customWords, "warn");
|
|
64
|
+
if (customMatches.length > 0) {
|
|
65
|
+
found.push(...customMatches);
|
|
66
|
+
const wordSummary = customMatches.map((m) => `"${m.word}"×${m.count}`).join("、");
|
|
67
|
+
issues.push({
|
|
68
|
+
severity: "warning",
|
|
69
|
+
category: "敏感词",
|
|
70
|
+
description: `检测到自定义敏感词:${wordSummary}`,
|
|
71
|
+
suggestion: "根据项目规则替换或删除这些词语",
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return { issues, found };
|
|
76
|
+
}
|
|
77
|
+
function scanWords(content, words, severity) {
|
|
78
|
+
const matches = [];
|
|
79
|
+
for (const word of words) {
|
|
80
|
+
const regex = new RegExp(escapeRegExp(word), "g");
|
|
81
|
+
const hits = content.match(regex);
|
|
82
|
+
if (hits && hits.length > 0) {
|
|
83
|
+
matches.push({ word, count: hits.length, severity });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return matches;
|
|
87
|
+
}
|
|
88
|
+
function escapeRegExp(str) {
|
|
89
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=sensitive-words.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive-words.js","sourceRoot":"","sources":["../../src/agents/sensitive-words.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { BookConfig } from "../models/book.js";
|
|
2
2
|
import type { GenreProfile } from "../models/genre-profile.js";
|
|
3
3
|
import type { BookRules } from "../models/book-rules.js";
|
|
4
|
-
export declare function buildWriterSystemPrompt(book: BookConfig, genreProfile: GenreProfile, bookRules: BookRules | null, bookRulesBody: string, genreBody: string, styleGuide: string, styleFingerprint?: string): string;
|
|
4
|
+
export declare function buildWriterSystemPrompt(book: BookConfig, genreProfile: GenreProfile, bookRules: BookRules | null, bookRulesBody: string, genreBody: string, styleGuide: string, styleFingerprint?: string, chapterNumber?: number): string;
|
|
5
5
|
//# sourceMappingURL=writer-prompts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer-prompts.d.ts","sourceRoot":"","sources":["../../src/agents/writer-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMzD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,gBAAgB,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"writer-prompts.d.ts","sourceRoot":"","sources":["../../src/agents/writer-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMzD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,gBAAgB,CAAC,EAAE,MAAM,EACzB,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAsBR"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
// ---------------------------------------------------------------------------
|
|
2
2
|
// Public API
|
|
3
3
|
// ---------------------------------------------------------------------------
|
|
4
|
-
export function buildWriterSystemPrompt(book, genreProfile, bookRules, bookRulesBody, genreBody, styleGuide, styleFingerprint) {
|
|
4
|
+
export function buildWriterSystemPrompt(book, genreProfile, bookRules, bookRulesBody, genreBody, styleGuide, styleFingerprint, chapterNumber) {
|
|
5
5
|
const sections = [
|
|
6
6
|
buildGenreIntro(book, genreProfile),
|
|
7
7
|
buildCoreRules(book),
|
|
8
|
+
buildAntiAIExamples(),
|
|
8
9
|
buildCharacterPsychologyMethod(),
|
|
10
|
+
buildSupportingCharacterMethod(),
|
|
9
11
|
buildReaderPsychologyMethod(),
|
|
10
12
|
buildEmotionalPacingMethod(),
|
|
11
13
|
buildImmersionTechniques(),
|
|
14
|
+
buildGoldenChaptersRules(chapterNumber),
|
|
12
15
|
bookRules?.enableFullCastTracking ? buildFullCastTracking() : "",
|
|
13
16
|
buildGenreRules(genreProfile, genreBody),
|
|
14
17
|
buildProtagonistRules(bookRules),
|
|
@@ -52,6 +55,7 @@ function buildCoreRules(book) {
|
|
|
52
55
|
- 钩子设计:每章结尾设置悬念/伏笔/钩子,勾住读者继续阅读
|
|
53
56
|
- 信息分层植入:基础信息在行动中自然带出,关键设定结合剧情节点揭示,严禁大段灌输世界观
|
|
54
57
|
- 描写必须服务叙事:环境描写烘托氛围或暗示情节,一笔带过即可;禁止无效描写
|
|
58
|
+
- 日常/过渡段落必须为后续剧情服务:或埋伏笔,或推进关系,或建立反差。纯填充式日常是流水账的温床
|
|
55
59
|
|
|
56
60
|
## 逻辑自洽
|
|
57
61
|
|
|
@@ -84,6 +88,49 @@ function buildCoreRules(book) {
|
|
|
84
88
|
- 正文中禁止出现hook_id/账本式数据(如"余量由X%降到Y%"),数值结算只放POST_SETTLEMENT`;
|
|
85
89
|
}
|
|
86
90
|
// ---------------------------------------------------------------------------
|
|
91
|
+
// 去AI味正面范例(反例→正例对照表)
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
function buildAntiAIExamples() {
|
|
94
|
+
return `## 去AI味:反例→正例对照
|
|
95
|
+
|
|
96
|
+
以下对照表展示AI常犯的"味道"问题和修正方法。正文必须贴近正例风格。
|
|
97
|
+
|
|
98
|
+
### 情绪描写
|
|
99
|
+
| 反例(AI味) | 正例(人味) | 要点 |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| 他感到非常愤怒。 | 他捏碎了手中的茶杯,滚烫的茶水流过指缝,但他像没感觉一样。 | 用动作外化情绪 |
|
|
102
|
+
| 她心里很悲伤,眼泪流了下来。 | 她攥紧手机,指节发白,屏幕上的聊天记录模糊成一片。 | 用身体细节替代直白标签 |
|
|
103
|
+
| 他感到一阵恐惧。 | 他后背的汗毛竖了起来,脚底像踩在了冰上。 | 五感传递恐惧 |
|
|
104
|
+
|
|
105
|
+
### 转折与衔接
|
|
106
|
+
| 反例(AI味) | 正例(人味) | 要点 |
|
|
107
|
+
|---|---|---|
|
|
108
|
+
| 虽然他很强,但是他还是输了。 | 他确实强,可对面那个老东西更脏。 | 口语化转折,少用"虽然...但是" |
|
|
109
|
+
| 然而,事情并没有那么简单。 | 哪有那么便宜的事。 | "然而"换成角色内心吐槽 |
|
|
110
|
+
| 因此,他决定采取行动。 | 他站起来,把凳子踢到一边。 | 删掉因果连词,直接写动作 |
|
|
111
|
+
|
|
112
|
+
### "了"字与助词控制
|
|
113
|
+
| 反例(AI味) | 正例(人味) | 要点 |
|
|
114
|
+
|---|---|---|
|
|
115
|
+
| 他走了过去,拿了杯子,喝了一口水。 | 他走过去,端起杯子,灌了一口。 | 连续"了"字削弱节奏,保留最有力的一个 |
|
|
116
|
+
| 他看了看四周,发现了一个洞口。 | 他扫了一眼四周,墙根裂开一道缝。 | 两个"了"减为一个,"发现"换成具体画面 |
|
|
117
|
+
|
|
118
|
+
### 词汇与句式
|
|
119
|
+
| 反例(AI味) | 正例(人味) | 要点 |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| 那双眼睛充满了智慧和深邃。 | 那双眼睛像饿狼见了肉。 | 用具体比喻替代空洞形容词 |
|
|
122
|
+
| 他的内心充满了矛盾和挣扎。 | 他攥着拳头站了半天,最后骂了句脏话,转身走了。 | 内心活动外化为行动 |
|
|
123
|
+
| 全场为之震惊。 | 老陈的烟掉在了裤子上,烫得他跳起来。 | 群像反应具体到个人 |
|
|
124
|
+
| 不禁感叹道…… | (直接写感叹内容,删掉"不禁感叹") | 删除无意义的情绪中介词 |
|
|
125
|
+
|
|
126
|
+
### 叙述者姿态
|
|
127
|
+
| 反例(AI味) | 正例(人味) | 要点 |
|
|
128
|
+
|---|---|---|
|
|
129
|
+
| 这一刻,他终于明白了什么是真正的力量。 | (删掉这句——让读者自己从前文感受) | 不替读者下结论 |
|
|
130
|
+
| 显然,对方低估了他的实力。 | (只写对方的表情变化,让读者自己判断) | "显然"是作者在说教 |
|
|
131
|
+
| 他知道,这将是改变命运的一战。 | 他把刀从鞘里拔了一寸,又推回去。 | 用犹豫的动作暗示重要性 |`;
|
|
132
|
+
}
|
|
133
|
+
// ---------------------------------------------------------------------------
|
|
87
134
|
// 六步走人物心理分析(新增方法论)
|
|
88
135
|
// ---------------------------------------------------------------------------
|
|
89
136
|
function buildCharacterPsychologyMethod() {
|
|
@@ -101,6 +148,27 @@ function buildCharacterPsychologyMethod() {
|
|
|
101
148
|
禁止跳过步骤直接写行为。如果推导不出合理行为,说明前置铺垫不足,先补铺垫。`;
|
|
102
149
|
}
|
|
103
150
|
// ---------------------------------------------------------------------------
|
|
151
|
+
// 配角设计方法论
|
|
152
|
+
// ---------------------------------------------------------------------------
|
|
153
|
+
function buildSupportingCharacterMethod() {
|
|
154
|
+
return `## 配角设计方法论
|
|
155
|
+
|
|
156
|
+
### 配角B面原则
|
|
157
|
+
配角必须有反击,有自己的算盘。主角的强大在于压服聪明人,而不是碾压傻子。
|
|
158
|
+
|
|
159
|
+
### 构建方法
|
|
160
|
+
1. **动机绑定主线**:每个配角的行为动机必须与主线产生关联
|
|
161
|
+
- 反派对抗主角不是因为"反派脸谱",而是有自己的诉求(如保护家人、争夺生存资源)
|
|
162
|
+
- 盟友帮助主角是因为有共同敌人或欠了人情,而非无条件忠诚
|
|
163
|
+
2. **核心标签 + 反差细节**:让配角"活"过来
|
|
164
|
+
- 表面冷硬的角色有不为人知的温柔一面(如偷偷照顾流浪动物)
|
|
165
|
+
- 看似粗犷的角色有出人意料的细腻爱好
|
|
166
|
+
- 反派头子对老母亲言听计从
|
|
167
|
+
3. **通过事件立人设**:禁止通过外貌描写和形容词堆砌来立人设,用角色在事件中的反应、选择、语气来展现性格
|
|
168
|
+
4. **语言区分度**:不同角色的说话方式必须有辨识度——用词习惯、句子长短、口头禅、方言痕迹都是工具
|
|
169
|
+
5. **拒绝集体反应**:群戏中不写"众人齐声惊呼",而是挑1-2个角色写具体反应`;
|
|
170
|
+
}
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
104
172
|
// 读者心理学框架(新增方法论)
|
|
105
173
|
// ---------------------------------------------------------------------------
|
|
106
174
|
function buildReaderPsychologyMethod() {
|
|
@@ -142,6 +210,43 @@ function buildImmersionTechniques() {
|
|
|
142
210
|
- **信息落差应用**:让读者比角色多知道一点(紧张感)或少知道一点(好奇心),动态切换`;
|
|
143
211
|
}
|
|
144
212
|
// ---------------------------------------------------------------------------
|
|
213
|
+
// 黄金三章(前3章特殊指令)
|
|
214
|
+
// ---------------------------------------------------------------------------
|
|
215
|
+
function buildGoldenChaptersRules(chapterNumber) {
|
|
216
|
+
if (chapterNumber === undefined || chapterNumber > 3)
|
|
217
|
+
return "";
|
|
218
|
+
const chapterRules = {
|
|
219
|
+
1: `### 第一章:抛出核心冲突
|
|
220
|
+
- 开篇直接进入冲突场景,禁止用背景介绍/世界观设定开头
|
|
221
|
+
- 第一段必须有动作或对话,让读者"看到"画面
|
|
222
|
+
- 开篇场景限制:最多1-2个场景,最多3个角色
|
|
223
|
+
- 主角身份/外貌/背景通过行动自然带出,禁止资料卡式罗列
|
|
224
|
+
- 本章结束前,核心矛盾必须浮出水面
|
|
225
|
+
- 一句对话能交代的信息不要用一段叙述,角色身份、性格、地位都可以从一句有特色的台词中带出`,
|
|
226
|
+
2: `### 第二章:展现金手指/核心能力
|
|
227
|
+
- 主角的核心优势(金手指/特殊能力/信息差等)必须在本章初现
|
|
228
|
+
- 金手指的展现必须通过具体事件,不能只是内心独白"我获得了XX"
|
|
229
|
+
- 开始建立"主角有什么不同"的读者认知
|
|
230
|
+
- 第一个小爽点应在本章出现
|
|
231
|
+
- 继续收紧核心冲突,不引入新支线`,
|
|
232
|
+
3: `### 第三章:明确短期目标
|
|
233
|
+
- 主角的第一个阶段性目标必须在本章确立
|
|
234
|
+
- 目标必须具体可衡量(打败某人/获得某物/到达某处),不能是抽象的"变强"
|
|
235
|
+
- 读完本章,读者应能说出"接下来主角要干什么"
|
|
236
|
+
- 章尾钩子要足够强,这是读者决定是否继续追读的关键章`,
|
|
237
|
+
};
|
|
238
|
+
return `## 黄金三章特殊指令(当前第${chapterNumber}章)
|
|
239
|
+
|
|
240
|
+
开篇三章决定读者是否追读。遵循以下强制规则:
|
|
241
|
+
|
|
242
|
+
- 开篇不要从第一块砖头开始砌楼——从炸了一栋楼开始写
|
|
243
|
+
- 禁止信息轰炸:世界观、力量体系等设定随剧情自然揭示
|
|
244
|
+
- 每章聚焦1条故事线,人物数量控制在3个以内
|
|
245
|
+
- 强情绪优先:利用读者共情(亲情纽带、不公待遇、被低估)快速建立代入感
|
|
246
|
+
|
|
247
|
+
${chapterRules[chapterNumber] ?? ""}`;
|
|
248
|
+
}
|
|
249
|
+
// ---------------------------------------------------------------------------
|
|
145
250
|
// Full cast tracking (conditional)
|
|
146
251
|
// ---------------------------------------------------------------------------
|
|
147
252
|
function buildFullCastTracking() {
|
|
@@ -233,19 +338,21 @@ ${fingerprint}`;
|
|
|
233
338
|
// Pre-write checklist
|
|
234
339
|
// ---------------------------------------------------------------------------
|
|
235
340
|
function buildPreWriteChecklist(book, gp) {
|
|
341
|
+
let idx = 1;
|
|
236
342
|
const lines = [
|
|
237
343
|
"## 动笔前必须自问",
|
|
238
344
|
"",
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
"6. 如果任何问题答不上来,先补逻辑链,再写正文",
|
|
345
|
+
`${idx++}. 主角此刻利益最大化的选择是什么?`,
|
|
346
|
+
`${idx++}. 这场冲突是谁先动手,为什么非做不可?`,
|
|
347
|
+
`${idx++}. 配角/反派是否有明确诉求、恐惧和反制?行为是否由"过往经历+当前利益+性格底色"驱动?`,
|
|
348
|
+
`${idx++}. 反派当前掌握了哪些已知信息?哪些信息只有读者知道?有无信息越界?`,
|
|
349
|
+
`${idx++}. 章尾是否留了钩子(悬念/伏笔/冲突升级)?`,
|
|
245
350
|
];
|
|
246
351
|
if (gp.numericalSystem) {
|
|
247
|
-
lines.push(
|
|
352
|
+
lines.push(`${idx++}. 本章收益能否落到具体资源、数值增量、地位变化或已回收伏笔?`);
|
|
248
353
|
}
|
|
354
|
+
// 17雷点精华预防
|
|
355
|
+
lines.push(`${idx++}. 【流水账检查】本章是否有无冲突的日常流水叙述?如有,加入前因后果或强情绪改造`, `${idx++}. 【主线偏离检查】本章是否推进了主线目标?支线是否在2-3章内与核心目标关联?`, `${idx++}. 【爽点节奏检查】最近3-5章内是否有小爽点落地?读者的"情绪缺口"是否在积累或释放?`, `${idx++}. 【人设崩塌检查】角色行为是否与已建立的性格标签一致?有无无铺垫的突然转变?`, `${idx++}. 【视角检查】本章视角是否清晰?同场景内说话人物是否控制在3人以内?`, `${idx++}. 如果任何问题答不上来,先补逻辑链,再写正文`);
|
|
249
356
|
return lines.join("\n");
|
|
250
357
|
}
|
|
251
358
|
// ---------------------------------------------------------------------------
|
|
@@ -307,8 +414,8 @@ ${updatedLedger}
|
|
|
307
414
|
|
|
308
415
|
=== UPDATED_SUBPLOTS ===
|
|
309
416
|
(更新后的完整支线进度板,Markdown表格格式)
|
|
310
|
-
| 支线ID | 支线名 | 相关角色 | 起始章 | 最近活跃章 | 状态 | 进度概述 |
|
|
311
|
-
|
|
417
|
+
| 支线ID | 支线名 | 相关角色 | 起始章 | 最近活跃章 | 距今章数 | 状态 | 进度概述 | 回收ETA |
|
|
418
|
+
|--------|--------|----------|--------|------------|----------|------|----------|---------|
|
|
312
419
|
|
|
313
420
|
=== UPDATED_EMOTIONAL_ARCS ===
|
|
314
421
|
(更新后的完整情感弧线,Markdown表格格式)
|
|
@@ -316,7 +423,11 @@ ${updatedLedger}
|
|
|
316
423
|
|------|------|----------|----------|------------|----------|
|
|
317
424
|
|
|
318
425
|
=== UPDATED_CHARACTER_MATRIX ===
|
|
319
|
-
(
|
|
426
|
+
(更新后的角色交互矩阵,分三个子表)
|
|
427
|
+
|
|
428
|
+
### 角色档案
|
|
429
|
+
| 角色 | 核心标签 | 反差细节 | 说话风格 | 性格底色 | 与主角关系 | 核心动机 | 当前目标 |
|
|
430
|
+
|------|----------|----------|----------|----------|------------|----------|----------|
|
|
320
431
|
|
|
321
432
|
### 相遇记录
|
|
322
433
|
| 角色A | 角色B | 首次相遇章 | 最近交互章 | 关系性质 | 关系变化 |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer-prompts.js","sourceRoot":"","sources":["../../src/agents/writer-prompts.ts"],"names":[],"mappings":"AAIA,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,UAAU,uBAAuB,CACrC,IAAgB,EAChB,YAA0B,EAC1B,SAA2B,EAC3B,aAAqB,EACrB,SAAiB,EACjB,UAAkB,EAClB,gBAAyB;
|
|
1
|
+
{"version":3,"file":"writer-prompts.js","sourceRoot":"","sources":["../../src/agents/writer-prompts.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/writer.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { BaseAgent } from "./base.js";
|
|
2
2
|
import type { BookConfig } from "../models/book.js";
|
|
3
|
+
import { type PostWriteViolation } from "./post-write-validator.js";
|
|
3
4
|
export interface WriteChapterInput {
|
|
4
5
|
readonly book: BookConfig;
|
|
5
6
|
readonly bookDir: string;
|
|
6
7
|
readonly chapterNumber: number;
|
|
7
8
|
readonly externalContext?: string;
|
|
9
|
+
readonly wordCountOverride?: number;
|
|
10
|
+
readonly temperatureOverride?: number;
|
|
8
11
|
}
|
|
9
12
|
export interface WriteChapterOutput {
|
|
10
13
|
readonly chapterNumber: number;
|
|
@@ -20,6 +23,8 @@ export interface WriteChapterOutput {
|
|
|
20
23
|
readonly updatedSubplots: string;
|
|
21
24
|
readonly updatedEmotionalArcs: string;
|
|
22
25
|
readonly updatedCharacterMatrix: string;
|
|
26
|
+
readonly postWriteErrors: ReadonlyArray<PostWriteViolation>;
|
|
27
|
+
readonly postWriteWarnings: ReadonlyArray<PostWriteViolation>;
|
|
23
28
|
}
|
|
24
29
|
export declare class WriterAgent extends BaseAgent {
|
|
25
30
|
get name(): string;
|
|
@@ -33,6 +38,17 @@ export declare class WriterAgent extends BaseAgent {
|
|
|
33
38
|
saveNewTruthFiles(bookDir: string, output: WriteChapterOutput): Promise<void>;
|
|
34
39
|
private appendChapterSummary;
|
|
35
40
|
private buildStyleFingerprint;
|
|
41
|
+
/**
|
|
42
|
+
* Extract dialogue fingerprints from recent chapters.
|
|
43
|
+
* For each character with multiple dialogue lines, compute speaking style markers.
|
|
44
|
+
*/
|
|
45
|
+
private extractDialogueFingerprints;
|
|
46
|
+
/**
|
|
47
|
+
* Find relevant chapter summaries based on volume outline context.
|
|
48
|
+
* Extracts character names and hook IDs from the current volume's outline,
|
|
49
|
+
* then searches chapter summaries for matching entries.
|
|
50
|
+
*/
|
|
51
|
+
private findRelevantSummaries;
|
|
36
52
|
private sanitizeFilename;
|
|
37
53
|
}
|
|
38
54
|
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/agents/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/agents/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKpD,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAKvF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC5D,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;CAC/D;AAED,qBAAa,WAAY,SAAQ,SAAS;IACxC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqGnE,WAAW,CACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAC1B,eAAe,GAAE,OAAc,GAC9B,OAAO,CAAC,IAAI,CAAC;IA6BhB,OAAO,CAAC,eAAe;YA+ET,kBAAkB;YA2BlB,iBAAiB;IAQ/B,OAAO,CAAC,WAAW;IAkCnB,oFAAoF;IAC9E,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;YA2BrE,oBAAoB;IAqBlC,OAAO,CAAC,qBAAqB;IAmB7B;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IA0DnC;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAqD7B,OAAO,CAAC,gBAAgB;CAMzB"}
|