@actalk/inkos-core 0.3.6 → 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.
Files changed (103) hide show
  1. package/dist/agents/architect.d.ts.map +1 -1
  2. package/dist/agents/architect.js +17 -3
  3. package/dist/agents/architect.js.map +1 -1
  4. package/dist/agents/base.d.ts +10 -0
  5. package/dist/agents/base.d.ts.map +1 -1
  6. package/dist/agents/base.js +12 -0
  7. package/dist/agents/base.js.map +1 -1
  8. package/dist/agents/continuity.d.ts +3 -1
  9. package/dist/agents/continuity.d.ts.map +1 -1
  10. package/dist/agents/continuity.js +78 -13
  11. package/dist/agents/continuity.js.map +1 -1
  12. package/dist/agents/post-write-validator.d.ts +16 -0
  13. package/dist/agents/post-write-validator.d.ts.map +1 -0
  14. package/dist/agents/post-write-validator.js +204 -0
  15. package/dist/agents/post-write-validator.js.map +1 -0
  16. package/dist/agents/reviser.d.ts +1 -1
  17. package/dist/agents/reviser.d.ts.map +1 -1
  18. package/dist/agents/reviser.js +16 -3
  19. package/dist/agents/reviser.js.map +1 -1
  20. package/dist/agents/sensitive-words.d.ts +22 -0
  21. package/dist/agents/sensitive-words.d.ts.map +1 -0
  22. package/dist/agents/sensitive-words.js +91 -0
  23. package/dist/agents/sensitive-words.js.map +1 -0
  24. package/dist/agents/writer-prompts.d.ts +1 -1
  25. package/dist/agents/writer-prompts.d.ts.map +1 -1
  26. package/dist/agents/writer-prompts.js +122 -11
  27. package/dist/agents/writer-prompts.js.map +1 -1
  28. package/dist/agents/writer.d.ts +15 -0
  29. package/dist/agents/writer.d.ts.map +1 -1
  30. package/dist/agents/writer.js +150 -5
  31. package/dist/agents/writer.js.map +1 -1
  32. package/dist/index.d.ts +3 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +4 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/llm/provider.d.ts +1 -0
  37. package/dist/llm/provider.d.ts.map +1 -1
  38. package/dist/llm/provider.js +9 -4
  39. package/dist/llm/provider.js.map +1 -1
  40. package/dist/models/book.d.ts +4 -4
  41. package/dist/models/book.d.ts.map +1 -1
  42. package/dist/models/book.js +0 -3
  43. package/dist/models/book.js.map +1 -1
  44. package/dist/models/project.d.ts +23 -7
  45. package/dist/models/project.d.ts.map +1 -1
  46. package/dist/models/project.js +13 -6
  47. package/dist/models/project.js.map +1 -1
  48. package/dist/notify/webhook.d.ts +1 -1
  49. package/dist/notify/webhook.d.ts.map +1 -1
  50. package/dist/notify/webhook.js.map +1 -1
  51. package/dist/pipeline/agent.d.ts.map +1 -1
  52. package/dist/pipeline/agent.js +76 -8
  53. package/dist/pipeline/agent.js.map +1 -1
  54. package/dist/pipeline/runner.d.ts +14 -1
  55. package/dist/pipeline/runner.d.ts.map +1 -1
  56. package/dist/pipeline/runner.js +267 -30
  57. package/dist/pipeline/runner.js.map +1 -1
  58. package/dist/pipeline/scheduler.d.ts +20 -2
  59. package/dist/pipeline/scheduler.d.ts.map +1 -1
  60. package/dist/pipeline/scheduler.js +162 -32
  61. package/dist/pipeline/scheduler.js.map +1 -1
  62. package/dist/utils/web-search.d.ts +13 -0
  63. package/dist/utils/web-search.d.ts.map +1 -0
  64. package/dist/utils/web-search.js +37 -0
  65. package/dist/utils/web-search.js.map +1 -0
  66. package/genres/horror.md +1 -1
  67. package/genres/other.md +1 -1
  68. package/genres/urban.md +1 -1
  69. package/genres/xianxia.md +1 -1
  70. package/genres/xuanhuan.md +1 -1
  71. package/package.json +2 -1
  72. package/dist/__tests__/ai-tells.test.d.ts +0 -2
  73. package/dist/__tests__/ai-tells.test.d.ts.map +0 -1
  74. package/dist/__tests__/ai-tells.test.js +0 -78
  75. package/dist/__tests__/ai-tells.test.js.map +0 -1
  76. package/dist/__tests__/detection-insights.test.d.ts +0 -2
  77. package/dist/__tests__/detection-insights.test.d.ts.map +0 -1
  78. package/dist/__tests__/detection-insights.test.js +0 -50
  79. package/dist/__tests__/detection-insights.test.js.map +0 -1
  80. package/dist/__tests__/detector.test.d.ts +0 -2
  81. package/dist/__tests__/detector.test.d.ts.map +0 -1
  82. package/dist/__tests__/detector.test.js +0 -71
  83. package/dist/__tests__/detector.test.js.map +0 -1
  84. package/dist/__tests__/models.test.d.ts +0 -2
  85. package/dist/__tests__/models.test.d.ts.map +0 -1
  86. package/dist/__tests__/models.test.js +0 -328
  87. package/dist/__tests__/models.test.js.map +0 -1
  88. package/dist/__tests__/state-manager.test.d.ts +0 -2
  89. package/dist/__tests__/state-manager.test.d.ts.map +0 -1
  90. package/dist/__tests__/state-manager.test.js +0 -264
  91. package/dist/__tests__/state-manager.test.js.map +0 -1
  92. package/dist/__tests__/style-analyzer.test.d.ts +0 -2
  93. package/dist/__tests__/style-analyzer.test.d.ts.map +0 -1
  94. package/dist/__tests__/style-analyzer.test.js +0 -53
  95. package/dist/__tests__/style-analyzer.test.js.map +0 -1
  96. package/dist/__tests__/webhook.test.d.ts +0 -2
  97. package/dist/__tests__/webhook.test.d.ts.map +0 -1
  98. package/dist/__tests__/webhook.test.js +0 -62
  99. package/dist/__tests__/webhook.test.js.map +0 -1
  100. package/dist/__tests__/writer-parser.test.d.ts +0 -2
  101. package/dist/__tests__/writer-parser.test.d.ts.map +0 -1
  102. package/dist/__tests__/writer-parser.test.js +0 -195
  103. package/dist/__tests__/writer-parser.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"architect.d.ts","sourceRoot":"","sources":["../../src/agents/architect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,cAAe,SAAQ,SAAS;IAC3C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAkIxF,oBAAoB,CACxB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,eAAe,EACvB,eAAe,GAAE,OAAc,GAC9B,OAAO,CAAC,IAAI,CAAC;IA4ChB,OAAO,CAAC,aAAa;CAiBtB"}
1
+ {"version":3,"file":"architect.d.ts","sourceRoot":"","sources":["../../src/agents/architect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,cAAe,SAAQ,SAAS;IAC3C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAgJxF,oBAAoB,CACxB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,eAAe,EACvB,eAAe,GAAE,OAAc,GAC9B,OAAO,CAAC,IAAI,CAAC;IA4ChB,OAAO,CAAC,aAAa;CAiBtB"}
@@ -52,8 +52,22 @@ ${genreBody}
52
52
  地图/场景设定、环境特色
53
53
 
54
54
  ## 05_书名与简介
55
- - 书名建议:采用"题材+核心爽点+主角行为"的长书名格式,避免文艺化
56
- - 简介(300字内):第一句抛困境,第二句亮金手指/核心能力,第三句留悬念
55
+ 书名方法论:
56
+ - 书名必须简单扼要、通俗易懂,读者看到书名就能知道题材和主题
57
+ - 采用"题材+核心爽点+主角行为"的长书名格式,避免文艺化
58
+ - 融入平台当下热点词汇,吸引精准流量
59
+ - 禁止题材错位(都市文取玄幻书名会导致读者流失)
60
+ - 参考热榜书名风格:俏皮、通俗、有记忆点
61
+
62
+ 简介方法论(300字内,三种写法任选其一):
63
+ 1. 冲突开篇法:第一句抛困境/冲突,第二句亮金手指/核心能力,第三句留悬念
64
+ 2. 高度概括法:只挑主线概括(不是全篇概括),必须留悬念
65
+ 3. 小剧场法:提炼故事中最经典的桥段,作为引子
66
+
67
+ 简介核心原则:
68
+ - 简介 = 产品宣传语,必须让读者产生"我要点开看"的冲动
69
+ - 可以从剧情设定、人设、或某个精彩片段切入
70
+ - 必须有噱头(如"凡是被写在笔记本上的名字,最后都得死")
57
71
 
58
72
  === SECTION: volume_outline ===
59
73
  卷纲规划,每卷包含:卷名、章节范围、核心冲突、关键转折、收益目标
@@ -141,7 +155,7 @@ ${eraBlock}
141
155
  writes.push(writeFile(join(storyDir, "particle_ledger.md"), "# 资源账本\n\n| 章节 | 期初值 | 来源 | 完整度 | 增量 | 期末值 | 依据 |\n|------|--------|------|--------|------|--------|------|\n| 0 | 0 | 初始化 | - | 0 | 0 | 开书初始 |\n", "utf-8"));
142
156
  }
143
157
  // Initialize new truth files
144
- writes.push(writeFile(join(storyDir, "subplot_board.md"), "# 支线进度板\n\n| 支线ID | 支线名 | 相关角色 | 起始章 | 最近活跃章 | 状态 | 进度概述 |\n|--------|--------|----------|--------|------------|------|----------|\n", "utf-8"), writeFile(join(storyDir, "emotional_arcs.md"), "# 情感弧线\n\n| 角色 | 章节 | 情绪状态 | 触发事件 | 强度(1-10) | 弧线方向 |\n|------|------|----------|----------|------------|----------|\n", "utf-8"), writeFile(join(storyDir, "character_matrix.md"), "# 角色交互矩阵\n\n### 相遇记录\n| 角色A | 角色B | 首次相遇章 | 最近交互章 | 关系性质 | 关系变化 |\n|-------|-------|------------|------------|----------|----------|\n\n### 信息边界\n| 角色 | 已知信息 | 未知信息 | 信息来源章 |\n|------|----------|----------|------------|\n", "utf-8"));
158
+ writes.push(writeFile(join(storyDir, "subplot_board.md"), "# 支线进度板\n\n| 支线ID | 支线名 | 相关角色 | 起始章 | 最近活跃章 | 距今章数 | 状态 | 进度概述 | 回收ETA |\n|--------|--------|----------|--------|------------|----------|------|----------|---------|\n", "utf-8"), writeFile(join(storyDir, "emotional_arcs.md"), "# 情感弧线\n\n| 角色 | 章节 | 情绪状态 | 触发事件 | 强度(1-10) | 弧线方向 |\n|------|------|----------|----------|------------|----------|\n", "utf-8"), writeFile(join(storyDir, "character_matrix.md"), "# 角色交互矩阵\n\n### 角色档案\n| 角色 | 核心标签 | 反差细节 | 说话风格 | 性格底色 | 与主角关系 | 核心动机 | 当前目标 |\n|------|----------|----------|----------|----------|------------|----------|----------|\n\n### 相遇记录\n| 角色A | 角色B | 首次相遇章 | 最近交互章 | 关系性质 | 关系变化 |\n|-------|-------|------------|------------|----------|----------|\n\n### 信息边界\n| 角色 | 已知信息 | 未知信息 | 信息来源章 |\n|------|----------|----------|------------|\n", "utf-8"));
145
159
  await Promise.all(writes);
146
160
  }
147
161
  parseSections(content) {
@@ -1 +1 @@
1
- {"version":3,"file":"architect.js","sourceRoot":"","sources":["../../src/agents/architect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"architect.js","sourceRoot":"","sources":["../../src/agents/architect.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,16 @@ export declare abstract class BaseAgent {
12
12
  readonly temperature?: number;
13
13
  readonly maxTokens?: number;
14
14
  }): Promise<LLMResponse>;
15
+ /**
16
+ * Chat with provider-native web search enabled.
17
+ * OpenAI Chat API: uses web_search_options.
18
+ * OpenAI Responses API: uses web_search_preview hosted tool.
19
+ * Anthropic: falls back to regular chat (no native search).
20
+ */
21
+ protected chatWithSearch(messages: ReadonlyArray<LLMMessage>, options?: {
22
+ readonly temperature?: number;
23
+ readonly maxTokens?: number;
24
+ }): Promise<LLMResponse>;
15
25
  abstract get name(): string;
16
26
  }
17
27
  //# sourceMappingURL=base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/agents/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG7E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,8BAAsB,SAAS;IAC7B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;gBAEzB,GAAG,EAAE,YAAY;cAIb,IAAI,CAClB,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,EACnC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACvE,OAAO,CAAC,WAAW,CAAC;IAIvB,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC;CAC7B"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/agents/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG7E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,8BAAsB,SAAS;IAC7B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;gBAEzB,GAAG,EAAE,YAAY;cAIb,IAAI,CAClB,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,EACnC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACvE,OAAO,CAAC,WAAW,CAAC;IAIvB;;;;;OAKG;cACa,cAAc,CAC5B,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,EACnC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACvE,OAAO,CAAC,WAAW,CAAC;IAOvB,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC;CAC7B"}
@@ -7,5 +7,17 @@ export class BaseAgent {
7
7
  async chat(messages, options) {
8
8
  return chatCompletion(this.ctx.client, this.ctx.model, messages, options);
9
9
  }
10
+ /**
11
+ * Chat with provider-native web search enabled.
12
+ * OpenAI Chat API: uses web_search_options.
13
+ * OpenAI Responses API: uses web_search_preview hosted tool.
14
+ * Anthropic: falls back to regular chat (no native search).
15
+ */
16
+ async chatWithSearch(messages, options) {
17
+ return chatCompletion(this.ctx.client, this.ctx.model, messages, {
18
+ ...options,
19
+ webSearch: true,
20
+ });
21
+ }
10
22
  }
11
23
  //# sourceMappingURL=base.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/agents/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AASpD,MAAM,OAAgB,SAAS;IACV,GAAG,CAAe;IAErC,YAAY,GAAiB;QAC3B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAES,KAAK,CAAC,IAAI,CAClB,QAAmC,EACnC,OAAwE;QAExE,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;CAGF"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/agents/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AASpD,MAAM,OAAgB,SAAS;IACV,GAAG,CAAe;IAErC,YAAY,GAAiB;QAC3B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAES,KAAK,CAAC,IAAI,CAClB,QAAmC,EACnC,OAAwE;QAExE,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,cAAc,CAC5B,QAAmC,EACnC,OAAwE;QAExE,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE;YAC/D,GAAG,OAAO;YACV,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;CAGF"}
@@ -12,7 +12,9 @@ export interface AuditIssue {
12
12
  }
13
13
  export declare class ContinuityAuditor extends BaseAgent {
14
14
  get name(): string;
15
- auditChapter(bookDir: string, chapterContent: string, chapterNumber: number, genre?: string): Promise<AuditResult>;
15
+ auditChapter(bookDir: string, chapterContent: string, chapterNumber: number, genre?: string, options?: {
16
+ temperature?: number;
17
+ }): Promise<AuditResult>;
16
18
  private parseAuditResult;
17
19
  private readFileSafe;
18
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"continuity.d.ts","sourceRoot":"","sources":["../../src/agents/continuity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAOtC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AA0FD,qBAAa,iBAAkB,SAAQ,SAAS;IAC9C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC;IAgGvB,OAAO,CAAC,gBAAgB;YAwCV,YAAY;CAO3B"}
1
+ {"version":3,"file":"continuity.d.ts","sourceRoot":"","sources":["../../src/agents/continuity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAOtC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAiJD,qBAAa,iBAAkB,SAAQ,SAAS;IAC9C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACjC,OAAO,CAAC,WAAW,CAAC;IA8GvB,OAAO,CAAC,gBAAgB;YAwCV,YAAY;CAO3B"}
@@ -30,20 +30,57 @@ const DIMENSION_MAP = {
30
30
  24: "支线停滞",
31
31
  25: "弧线平坦",
32
32
  26: "节奏单调",
33
+ 27: "敏感词检查",
34
+ 28: "正传事件冲突",
35
+ 29: "未来信息泄露",
36
+ 30: "世界规则跨书一致性",
37
+ 31: "番外伏笔隔离",
38
+ 32: "读者期待管理",
33
39
  };
34
- function buildDimensionList(gp, bookRules) {
40
+ function buildDimensionList(gp, bookRules, hasParentCanon = false) {
35
41
  const activeIds = new Set(gp.auditDimensions);
36
- // Add book-level additional dimensions
42
+ // Add book-level additional dimensions (supports both numeric IDs and name strings)
37
43
  if (bookRules?.additionalAuditDimensions) {
44
+ // Build reverse lookup: name → id
45
+ const nameToId = new Map();
46
+ for (const [id, name] of Object.entries(DIMENSION_MAP)) {
47
+ nameToId.set(name, Number(id));
48
+ }
38
49
  for (const d of bookRules.additionalAuditDimensions) {
39
- if (typeof d === "number")
50
+ if (typeof d === "number") {
40
51
  activeIds.add(d);
52
+ }
53
+ else if (typeof d === "string") {
54
+ // Try exact match first, then substring match
55
+ const exactId = nameToId.get(d);
56
+ if (exactId !== undefined) {
57
+ activeIds.add(exactId);
58
+ }
59
+ else {
60
+ // Fuzzy: find dimension whose name contains the string
61
+ for (const [name, id] of nameToId) {
62
+ if (name.includes(d) || d.includes(name)) {
63
+ activeIds.add(id);
64
+ break;
65
+ }
66
+ }
67
+ }
68
+ }
41
69
  }
42
70
  }
71
+ // Always-active dimensions
72
+ activeIds.add(32); // 读者期待管理 — universal
43
73
  // Conditional overrides
44
74
  if (gp.eraResearch || bookRules?.eraConstraints?.enabled) {
45
75
  activeIds.add(12);
46
76
  }
77
+ // Spinoff dimensions — activated when parent_canon.md exists
78
+ if (hasParentCanon) {
79
+ activeIds.add(28); // 正传事件冲突
80
+ activeIds.add(29); // 未来信息泄露
81
+ activeIds.add(30); // 世界规则跨书一致性
82
+ activeIds.add(31); // 番外伏笔隔离
83
+ }
47
84
  const dims = [];
48
85
  for (const id of [...activeIds].sort((a, b) => a - b)) {
49
86
  const name = DIMENSION_MAP[id];
@@ -69,13 +106,28 @@ function buildDimensionList(gp, bookRules) {
69
106
  note = "检查视角切换是否有过渡、是否与设定视角一致";
70
107
  }
71
108
  if (id === 24) {
72
- note = "检查支线剧情是否停滞超过5章未推进";
109
+ note = "对照 subplot_board 和 chapter_summaries:如果任何支线超过5章未被提及或推进→warning。如果存在支线但近3章完全没有任何支线推进→warning";
73
110
  }
74
111
  if (id === 25) {
75
- note = "检查主要角色情感弧线是否平坦(连续3章无情绪变化)";
112
+ note = "对照 emotional_arcs 和 chapter_summaries:如果主要角色连续3章情绪状态无变化(没有新的压力、释放、转变)→warning。注意区分'角色处境未变'和'角色内心未变'";
76
113
  }
77
114
  if (id === 26) {
78
- note = "检查章节类型节奏:连续≥3同类型章→warning,≥5章无高潮/回收→warning";
115
+ note = "对照 chapter_summaries 的章节类型分布:连续≥3章相同类型(如连续3个事件章/战斗章/布局章)→warning。≥5章没有出现回收章或高潮章→warning。请明确列出最近章节的类型序列";
116
+ }
117
+ if (id === 28) {
118
+ note = "检查番外事件是否与正典约束表矛盾";
119
+ }
120
+ if (id === 29) {
121
+ note = "检查角色是否引用了分歧点之后才揭示的信息(参照信息边界表)";
122
+ }
123
+ if (id === 30) {
124
+ note = "检查番外是否违反正传世界规则(力量体系、地理、阵营)";
125
+ }
126
+ if (id === 31) {
127
+ note = "检查番外是否越权回收正传伏笔(warning级别)";
128
+ }
129
+ if (id === 32) {
130
+ note = "检查:章尾是否有钩子?最近3-5章内是否有爽点落地?是否存在超过3章的情绪压制无释放?读者的情绪缺口是否在积累或被满足?";
79
131
  }
80
132
  dims.push({ id, name, note });
81
133
  }
@@ -85,8 +137,8 @@ export class ContinuityAuditor extends BaseAgent {
85
137
  get name() {
86
138
  return "continuity-auditor";
87
139
  }
88
- async auditChapter(bookDir, chapterContent, chapterNumber, genre) {
89
- const [currentState, ledger, hooks, styleGuideRaw, subplotBoard, emotionalArcs, characterMatrix, chapterSummaries] = await Promise.all([
140
+ async auditChapter(bookDir, chapterContent, chapterNumber, genre, options) {
141
+ const [currentState, ledger, hooks, styleGuideRaw, subplotBoard, emotionalArcs, characterMatrix, chapterSummaries, parentCanon] = await Promise.all([
90
142
  this.readFileSafe(join(bookDir, "story/current_state.md")),
91
143
  this.readFileSafe(join(bookDir, "story/particle_ledger.md")),
92
144
  this.readFileSafe(join(bookDir, "story/pending_hooks.md")),
@@ -95,7 +147,9 @@ export class ContinuityAuditor extends BaseAgent {
95
147
  this.readFileSafe(join(bookDir, "story/emotional_arcs.md")),
96
148
  this.readFileSafe(join(bookDir, "story/character_matrix.md")),
97
149
  this.readFileSafe(join(bookDir, "story/chapter_summaries.md")),
150
+ this.readFileSafe(join(bookDir, "story/parent_canon.md")),
98
151
  ]);
152
+ const hasParentCanon = parentCanon !== "(文件不存在)";
99
153
  // Load genre profile and book rules
100
154
  const genreId = genre ?? "other";
101
155
  const { profile: gp } = await readGenreProfile(this.ctx.projectRoot, genreId);
@@ -105,14 +159,17 @@ export class ContinuityAuditor extends BaseAgent {
105
159
  const styleGuide = styleGuideRaw !== "(文件不存在)"
106
160
  ? styleGuideRaw
107
161
  : (parsedRules?.body ?? "(无文风指南)");
108
- const dimensions = buildDimensionList(gp, bookRules);
162
+ const dimensions = buildDimensionList(gp, bookRules, hasParentCanon);
109
163
  const dimList = dimensions
110
164
  .map((d) => `${d.id}. ${d.name}${d.note ? `(${d.note})` : ""}`)
111
165
  .join("\n");
112
166
  const protagonistBlock = bookRules?.protagonist
113
167
  ? `\n主角人设锁定:${bookRules.protagonist.name},${bookRules.protagonist.personalityLock.join("、")},行为约束:${bookRules.protagonist.behavioralConstraints.join("、")}`
114
168
  : "";
115
- const systemPrompt = `你是一位严格的${gp.name}网络小说审稿编辑。你的任务是对章节进行连续性、一致性和质量审查。${protagonistBlock}
169
+ const searchNote = gp.eraResearch
170
+ ? "\n\n你有联网搜索能力(search_web / fetch_url)。对于涉及真实年代、人物、事件、地理、政策的内容,你必须用search_web核实,不可凭记忆判断。至少对比2个来源交叉验证。"
171
+ : "";
172
+ const systemPrompt = `你是一位严格的${gp.name}网络小说审稿编辑。你的任务是对章节进行连续性、一致性和质量审查。${protagonistBlock}${searchNote}
116
173
 
117
174
  审查维度:
118
175
  ${dimList}
@@ -147,6 +204,9 @@ ${dimList}
147
204
  const summariesBlock = chapterSummaries !== "(文件不存在)"
148
205
  ? `\n## 章节摘要(用于节奏检查)\n${chapterSummaries}\n`
149
206
  : "";
207
+ const canonBlock = hasParentCanon
208
+ ? `\n## 正传正典参照(番外审查专用)\n${parentCanon}\n`
209
+ : "";
150
210
  const userPrompt = `请审查第${chapterNumber}章。
151
211
 
152
212
  ## 当前状态卡
@@ -154,16 +214,21 @@ ${currentState}
154
214
  ${ledgerBlock}
155
215
  ## 伏笔池
156
216
  ${hooks}
157
- ${subplotBlock}${emotionalBlock}${matrixBlock}${summariesBlock}
217
+ ${subplotBlock}${emotionalBlock}${matrixBlock}${summariesBlock}${canonBlock}
158
218
  ## 文风指南
159
219
  ${styleGuide}
160
220
 
161
221
  ## 待审章节内容
162
222
  ${chapterContent}`;
163
- const response = await this.chat([
223
+ const chatMessages = [
164
224
  { role: "system", content: systemPrompt },
165
225
  { role: "user", content: userPrompt },
166
- ], { temperature: 0.3, maxTokens: 4096 });
226
+ ];
227
+ const chatOptions = { temperature: options?.temperature ?? 0.3, maxTokens: 4096 };
228
+ // Use web search for fact verification when eraResearch is enabled
229
+ const response = gp.eraResearch
230
+ ? await this.chatWithSearch(chatMessages, chatOptions)
231
+ : await this.chat(chatMessages, chatOptions);
167
232
  return this.parseAuditResult(response.content);
168
233
  }
169
234
  parseAuditResult(content) {
@@ -1 +1 @@
1
- {"version":3,"file":"continuity.js","sourceRoot":"","sources":["../../src/agents/continuity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"continuity.js","sourceRoot":"","sources":["../../src/agents/continuity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Post-write rule-based validator.
3
+ *
4
+ * Deterministic, zero-LLM-cost checks that run after every chapter generation.
5
+ * Catches violations that prompt-only rules cannot guarantee.
6
+ */
7
+ import type { BookRules } from "../models/book-rules.js";
8
+ import type { GenreProfile } from "../models/genre-profile.js";
9
+ export interface PostWriteViolation {
10
+ readonly rule: string;
11
+ readonly severity: "error" | "warning";
12
+ readonly description: string;
13
+ readonly suggestion: string;
14
+ }
15
+ export declare function validatePostWrite(content: string, genreProfile: GenreProfile, bookRules: BookRules | null): ReadonlyArray<PostWriteViolation>;
16
+ //# sourceMappingURL=post-write-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-write-validator.d.ts","sourceRoot":"","sources":["../../src/agents/post-write-validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAmCD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,aAAa,CAAC,kBAAkB,CAAC,CAuLnC"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Post-write rule-based validator.
3
+ *
4
+ * Deterministic, zero-LLM-cost checks that run after every chapter generation.
5
+ * Catches violations that prompt-only rules cannot guarantee.
6
+ */
7
+ // --- Marker word lists ---
8
+ /** AI转折/惊讶标记词 */
9
+ const SURPRISE_MARKERS = ["仿佛", "忽然", "竟然", "猛地", "猛然", "不禁", "宛如"];
10
+ /** 元叙事/编剧旁白模式 */
11
+ const META_NARRATION_PATTERNS = [
12
+ /到这里[,,]?算是/,
13
+ /接下来[,,]?(?:就是|将会|即将)/,
14
+ /(?:后面|之后)[,,]?(?:会|将|还会)/,
15
+ /(?:故事|剧情)(?:发展)?到了/,
16
+ /读者[,,]?(?:可能|应该|也许)/,
17
+ /我们[,,]?(?:可以|不妨|来看)/,
18
+ ];
19
+ /** 分析报告式术语(禁止出现在正文中) */
20
+ const REPORT_TERMS = [
21
+ "核心动机", "信息边界", "信息落差", "核心风险", "利益最大化",
22
+ "当前处境", "行为约束", "性格过滤", "情绪外化", "锚定效应",
23
+ "沉没成本", "认知共鸣",
24
+ ];
25
+ /** 作者说教词 */
26
+ const SERMON_WORDS = ["显然", "毋庸置疑", "不言而喻", "众所周知", "不难看出"];
27
+ /** 全场震惊类集体反应 */
28
+ const COLLECTIVE_SHOCK_PATTERNS = [
29
+ /(?:全场|众人|所有人|在场的人)[,,]?(?:都|全|齐齐|纷纷)?(?:震惊|惊呆|倒吸凉气|目瞪口呆|哗然|惊呼)/,
30
+ /(?:全场|一片)[,,]?(?:寂静|哗然|沸腾|震动)/,
31
+ ];
32
+ // --- Validator ---
33
+ export function validatePostWrite(content, genreProfile, bookRules) {
34
+ const violations = [];
35
+ // 1. 硬性禁令: "不是…而是…" 句式
36
+ if (/不是[^,。!?\n]{0,30}[,,]?\s*而是/.test(content)) {
37
+ violations.push({
38
+ rule: "禁止句式",
39
+ severity: "error",
40
+ description: "出现了「不是……而是……」句式",
41
+ suggestion: "改用直述句",
42
+ });
43
+ }
44
+ // 2. 硬性禁令: 破折号
45
+ if (content.includes("——")) {
46
+ violations.push({
47
+ rule: "禁止破折号",
48
+ severity: "error",
49
+ description: "出现了破折号「——」",
50
+ suggestion: "用逗号或句号断句",
51
+ });
52
+ }
53
+ // 3. 转折/惊讶标记词密度 ≤ 1次/3000字
54
+ const markerCounts = {};
55
+ let totalMarkerCount = 0;
56
+ for (const word of SURPRISE_MARKERS) {
57
+ const matches = content.match(new RegExp(word, "g"));
58
+ const count = matches?.length ?? 0;
59
+ if (count > 0) {
60
+ markerCounts[word] = count;
61
+ totalMarkerCount += count;
62
+ }
63
+ }
64
+ const markerLimit = Math.max(1, Math.floor(content.length / 3000));
65
+ if (totalMarkerCount > markerLimit) {
66
+ const detail = Object.entries(markerCounts)
67
+ .map(([w, c]) => `"${w}"×${c}`)
68
+ .join("、");
69
+ violations.push({
70
+ rule: "转折词密度",
71
+ severity: "warning",
72
+ description: `转折/惊讶标记词共${totalMarkerCount}次(上限${markerLimit}次/${content.length}字),明细:${detail}`,
73
+ suggestion: "改用具体动作或感官描写传递突然性",
74
+ });
75
+ }
76
+ // 4. 高疲劳词检查(从 genreProfile 读取,单章每词 ≤ 1次)
77
+ const fatigueWords = bookRules?.fatigueWordsOverride && bookRules.fatigueWordsOverride.length > 0
78
+ ? bookRules.fatigueWordsOverride
79
+ : genreProfile.fatigueWords;
80
+ for (const word of fatigueWords) {
81
+ const escaped = word.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
82
+ const matches = content.match(new RegExp(escaped, "g"));
83
+ const count = matches?.length ?? 0;
84
+ if (count > 1) {
85
+ violations.push({
86
+ rule: "高疲劳词",
87
+ severity: "warning",
88
+ description: `高疲劳词"${word}"出现${count}次(上限1次/章)`,
89
+ suggestion: `替换多余的"${word}"为同义但不同形式的表达`,
90
+ });
91
+ }
92
+ }
93
+ // 5. 元叙事检查(编剧旁白)
94
+ for (const pattern of META_NARRATION_PATTERNS) {
95
+ const match = content.match(pattern);
96
+ if (match) {
97
+ violations.push({
98
+ rule: "元叙事",
99
+ severity: "warning",
100
+ description: `出现编剧旁白式表述:"${match[0]}"`,
101
+ suggestion: "删除元叙事,让剧情自然展开",
102
+ });
103
+ break; // 报一次即可
104
+ }
105
+ }
106
+ // 6. 分析报告式术语
107
+ const foundTerms = [];
108
+ for (const term of REPORT_TERMS) {
109
+ if (content.includes(term)) {
110
+ foundTerms.push(term);
111
+ }
112
+ }
113
+ if (foundTerms.length > 0) {
114
+ violations.push({
115
+ rule: "报告术语",
116
+ severity: "error",
117
+ description: `正文中出现分析报告术语:${foundTerms.map(t => `"${t}"`).join("、")}`,
118
+ suggestion: "这些术语只能用于 PRE_WRITE_CHECK 内部推理,正文中用口语化表达替代",
119
+ });
120
+ }
121
+ // 7. 作者说教词
122
+ const foundSermons = [];
123
+ for (const word of SERMON_WORDS) {
124
+ if (content.includes(word)) {
125
+ foundSermons.push(word);
126
+ }
127
+ }
128
+ if (foundSermons.length > 0) {
129
+ violations.push({
130
+ rule: "作者说教",
131
+ severity: "warning",
132
+ description: `出现说教词:${foundSermons.map(w => `"${w}"`).join("、")}`,
133
+ suggestion: "删除说教词,让读者自己从情节中判断",
134
+ });
135
+ }
136
+ // 8. 全场震惊类集体反应
137
+ for (const pattern of COLLECTIVE_SHOCK_PATTERNS) {
138
+ const match = content.match(pattern);
139
+ if (match) {
140
+ violations.push({
141
+ rule: "集体反应",
142
+ severity: "warning",
143
+ description: `出现集体反应套话:"${match[0]}"`,
144
+ suggestion: "改写成1-2个具体角色的身体反应",
145
+ });
146
+ break;
147
+ }
148
+ }
149
+ // 9. 连续"了"字检查(3句以上连续含"了")
150
+ const sentences = content
151
+ .split(/[。!?]/)
152
+ .map(s => s.trim())
153
+ .filter(s => s.length > 2);
154
+ let consecutiveLe = 0;
155
+ let maxConsecutiveLe = 0;
156
+ for (const sentence of sentences) {
157
+ if (sentence.includes("了")) {
158
+ consecutiveLe++;
159
+ maxConsecutiveLe = Math.max(maxConsecutiveLe, consecutiveLe);
160
+ }
161
+ else {
162
+ consecutiveLe = 0;
163
+ }
164
+ }
165
+ if (maxConsecutiveLe >= 4) {
166
+ violations.push({
167
+ rule: "连续了字",
168
+ severity: "warning",
169
+ description: `检测到${maxConsecutiveLe}句连续包含"了"字,节奏拖沓`,
170
+ suggestion: "保留最有力的一个「了」,其余改为无「了」句式",
171
+ });
172
+ }
173
+ // 10. 段落长度检查(手机阅读适配:50-250字/段为宜)
174
+ const paragraphs = content
175
+ .split(/\n\s*\n/)
176
+ .map(p => p.trim())
177
+ .filter(p => p.length > 0);
178
+ const longParagraphs = paragraphs.filter(p => p.length > 300);
179
+ if (longParagraphs.length >= 2) {
180
+ violations.push({
181
+ rule: "段落过长",
182
+ severity: "warning",
183
+ description: `${longParagraphs.length}个段落超过300字,不适合手机阅读`,
184
+ suggestion: "长段落拆分为3-5行的短段落,在动作切换或情绪节点处断开",
185
+ });
186
+ }
187
+ // 11. Book-level prohibitions
188
+ // Short prohibitions (2-30 chars): exact substring match
189
+ // Long prohibitions (>30 chars): skip — these are conceptual rules for prompt-level enforcement only
190
+ if (bookRules?.prohibitions) {
191
+ for (const prohibition of bookRules.prohibitions) {
192
+ if (prohibition.length >= 2 && prohibition.length <= 30 && content.includes(prohibition)) {
193
+ violations.push({
194
+ rule: "本书禁忌",
195
+ severity: "error",
196
+ description: `出现了本书禁忌内容:"${prohibition}"`,
197
+ suggestion: "删除或改写该内容",
198
+ });
199
+ }
200
+ }
201
+ }
202
+ return violations;
203
+ }
204
+ //# sourceMappingURL=post-write-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-write-validator.js","sourceRoot":"","sources":["../../src/agents/post-write-validator.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { BaseAgent } from "./base.js";
2
2
  import type { AuditIssue } from "./continuity.js";
3
- export type ReviseMode = "polish" | "rewrite" | "rework" | "anti-detect";
3
+ export type ReviseMode = "polish" | "rewrite" | "rework" | "anti-detect" | "spot-fix";
4
4
  export interface ReviseOutput {
5
5
  readonly revisedContent: string;
6
6
  readonly wordCount: number;
@@ -1 +1 @@
1
- {"version":3,"file":"reviser.d.ts","sourceRoot":"","sources":["../../src/agents/reviser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEzE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AASD,qBAAa,YAAa,SAAQ,SAAS;IACzC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EACjC,IAAI,GAAE,UAAsB,EAC5B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC;IAyFxB,OAAO,CAAC,WAAW;YA2BL,YAAY;CAO3B"}
1
+ {"version":3,"file":"reviser.d.ts","sourceRoot":"","sources":["../../src/agents/reviser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC;AAEtF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAqBD,qBAAa,YAAa,SAAQ,SAAS;IACzC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EACjC,IAAI,GAAE,UAAsB,EAC5B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC;IA2FxB,OAAO,CAAC,WAAW;YA2BL,YAAY;CAO3B"}
@@ -3,10 +3,22 @@ import { readGenreProfile, readBookRules } from "./rules-reader.js";
3
3
  import { readFile } from "node:fs/promises";
4
4
  import { join } from "node:path";
5
5
  const MODE_DESCRIPTIONS = {
6
- polish: "润色:只改表达、节奏、段落呼吸,不改事实与剧情结论",
6
+ polish: "润色:只改表达、节奏、段落呼吸,不改事实与剧情结论。禁止:增删段落、改变人名/地名/物品名、增加新情节或新对话、改变因果关系。只允许:替换用词、调整句序、修改标点节奏",
7
7
  rewrite: "改写:可改叙述顺序、画面、力度,但保留核心事实与人物动机",
8
8
  rework: "重写:可重构场景推进和冲突组织,但不改主设定和大事件结果",
9
- "anti-detect": "反检测改写:在保持剧情不变的前提下,降低AI生成可检测性。手法包括:增加段落长度差异、打破句式规律、用口语化/个性化表达替代书面套话、加入非对称修辞、随机化过渡方式",
9
+ "anti-detect": `反检测改写:在保持剧情不变的前提下,降低AI生成可检测性。
10
+
11
+ 改写手法(附正例):
12
+ 1. 打破句式规律:连续短句 → 长短交替,句式不可预测
13
+ 2. 口语化替代:✗"然而事情并没有那么简单" → ✓"哪有那么便宜的事"
14
+ 3. 减少"了"字密度:✗"他走了过去,拿了杯子" → ✓"他走过去,端起杯子"
15
+ 4. 转折词降频:✗"虽然…但是…" → ✓ 用角色内心吐槽或直接动作切换
16
+ 5. 情绪外化:✗"他感到愤怒" → ✓"他捏碎了茶杯,滚烫的茶水流过指缝"
17
+ 6. 删掉叙述者结论:✗"这一刻他终于明白了力量" → ✓ 只写行动,让读者自己感受
18
+ 7. 群像反应具体化:✗"全场震惊" → ✓"老陈的烟掉在裤子上,烫得他跳起来"
19
+ 8. 段落长度差异化:不再等长段落,有的段只有一句话,有的段七八行
20
+ 9. 消灭"不禁""仿佛""宛如"等AI标记词:换成具体感官描写`,
21
+ "spot-fix": "定点修复:只修改审稿意见指出的具体句子或段落,其余所有内容必须原封不动保留。修改范围限定在问题句子及其前后各一句。禁止改动无关段落",
10
22
  };
11
23
  export class ReviserAgent extends BaseAgent {
12
24
  get name() {
@@ -82,10 +94,11 @@ ${styleGuide}
82
94
 
83
95
  ## 待修正章节
84
96
  ${chapterContent}`;
97
+ const maxTokens = mode === "spot-fix" ? 8192 : 16384;
85
98
  const response = await this.chat([
86
99
  { role: "system", content: systemPrompt },
87
100
  { role: "user", content: userPrompt },
88
- ], { temperature: 0.3, maxTokens: 16384 });
101
+ ], { temperature: 0.3, maxTokens });
89
102
  return this.parseOutput(response.content, gp);
90
103
  }
91
104
  parseOutput(content, gp) {