@zwbigi/ink-xy 0.1.21 → 0.1.23

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 (70) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +2 -2
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/_not-found.html +1 -1
  15. package/.next/server/app/_not-found.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  22. package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
  23. package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
  24. package/.next/server/app/api/agent/describe-image/route.js.nft.json +1 -1
  25. package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
  26. package/.next/server/app/api/agent/parse-characters/route.js.nft.json +1 -1
  27. package/.next/server/app/api/auth/all-providers/route.js.nft.json +1 -1
  28. package/.next/server/app/api/auth/api-key/[provider]/route.js.nft.json +1 -1
  29. package/.next/server/app/api/auth/login/[provider]/route.js.nft.json +1 -1
  30. package/.next/server/app/api/auth/logout/[provider]/route.js.nft.json +1 -1
  31. package/.next/server/app/api/auth/providers/route.js.nft.json +1 -1
  32. package/.next/server/app/api/files/[...path]/route.js.nft.json +1 -1
  33. package/.next/server/app/api/gem-xy/[id]/route.js.nft.json +1 -1
  34. package/.next/server/app/api/gem-xy/route.js.nft.json +1 -1
  35. package/.next/server/app/api/inkos/route.js.nft.json +1 -1
  36. package/.next/server/app/api/license/route.js.nft.json +1 -1
  37. package/.next/server/app/api/models/route.js.nft.json +1 -1
  38. package/.next/server/app/api/models-config/route.js.nft.json +1 -1
  39. package/.next/server/app/api/sessions/[id]/context/route.js.nft.json +1 -1
  40. package/.next/server/app/api/sessions/[id]/lock/route.js.nft.json +1 -1
  41. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  42. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  43. package/.next/server/app/api/skills/install/route.js.nft.json +1 -1
  44. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  45. package/.next/server/app/api/skills/search/route.js.nft.json +1 -1
  46. package/.next/server/app/api/tts/synthesize/route.js.nft.json +1 -1
  47. package/.next/server/app/index.html +1 -1
  48. package/.next/server/app/index.rsc +2 -2
  49. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  50. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  51. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  52. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  53. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  54. package/.next/server/app/page.js +44 -31
  55. package/.next/server/app/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app-paths-manifest.json +2 -2
  57. package/.next/server/middleware-build-manifest.js +1 -1
  58. package/.next/server/pages/404.html +1 -1
  59. package/.next/server/pages/500.html +1 -1
  60. package/.next/static/chunks/app/page-0f265b87c6adcbf5.js +217 -0
  61. package/.next/trace +4 -5
  62. package/.next/trace-build +1 -1
  63. package/README.md +211 -211
  64. package/inkos/packages/cli/dist/index.js +2 -2
  65. package/inkos/packages/core/dist/agents/chapter-analyzer.js +247 -247
  66. package/inkos/packages/core/src/agents/chapter-analyzer.ts +634 -634
  67. package/package.json +6 -1
  68. package/.next/static/chunks/app/page-e44dae523dff5f21.js +0 -217
  69. /package/.next/static/{lpnSsjt1h_QIr2FOShVhq → idBHU4puZBcAs3Q9RDDjG}/_buildManifest.js +0 -0
  70. /package/.next/static/{lpnSsjt1h_QIr2FOShVhq → idBHU4puZBcAs3Q9RDDjG}/_ssgManifest.js +0 -0
@@ -154,212 +154,212 @@ export class ChapterAnalyzerAgent extends BaseAgent {
154
154
  const numericalBlock = genreProfile.numericalSystem
155
155
  ? "\n- This genre tracks numerical/resources systems; UPDATED_LEDGER must capture every resource change shown in the chapter."
156
156
  : "\n- This genre has no numerical system; leave UPDATED_LEDGER empty.";
157
- return `【LANGUAGE OVERRIDE】ALL output MUST be in English. The === TAG === markers remain unchanged.
158
-
159
- You are a fiction continuity analyst. Analyze a finished chapter, extract every state change, and update the tracking files.
160
-
161
- ## Working Mode
162
-
163
- You are not writing new prose. You are reading completed chapter text and updating the book's truth files.
164
- 1. Read the chapter carefully and extract all important facts.
165
- 2. Update the existing tracking files incrementally rather than rebuilding them from scratch.
166
- 3. Keep the output contract identical to the writer pipeline.
167
-
168
- ## What To Extract
169
-
170
- - Character entrances, exits, injuries, breakthroughs, deaths, and other status changes
171
- - Location movement and scene transitions
172
- - Item or resource gains and losses
173
- - Hook setup, advancement, and payoff
174
- - Emotional arc movement
175
- - Subplot progress
176
- - Relationship changes and information-boundary changes
177
-
178
- ## Book Information
179
-
180
- - Title: ${book.title}
181
- - Genre: ${genreProfile.name} (${book.genre})
182
- - Platform: ${book.platform}
183
- ${numericalBlock}
184
-
185
- ## Genre Guidance
186
-
187
- ${genreBody}
188
-
189
- ${bookRulesBody ? `## Book Rules\n\n${bookRulesBody}` : ""}
190
-
191
- ## Output Format
192
-
193
- Use === TAG === delimiters exactly as shown:
194
-
195
- === CHAPTER_TITLE ===
196
- (Extract or infer the chapter title. Output title text only.)
197
-
198
- === CHAPTER_CONTENT ===
199
- (Repeat the original chapter content exactly. Do not rewrite.)
200
-
201
- === PRE_WRITE_CHECK ===
202
- (Leave empty in analysis mode.)
203
-
204
- === POST_SETTLEMENT ===
205
- (Leave empty in analysis mode.)
206
-
207
- === UPDATED_STATE ===
208
- Updated state card as a Markdown table reflecting the end-of-chapter state:
209
- | Field | Value |
210
- | --- | --- |
211
- | Current Chapter | {chapter_number} |
212
- | Current Location | ... |
213
- | Protagonist State | ... |
214
- | Current Goal | ... |
215
- | Current Constraint | ... |
216
- | Current Alliances | ... |
217
- | Current Conflict | ... |
218
-
219
- === UPDATED_LEDGER ===
220
- (If the genre has a numerical system: output the fully updated resource ledger table. Otherwise leave empty.)
221
-
222
- === UPDATED_HOOKS ===
223
- Updated hooks pool as a Markdown table with the latest status of every known hook:
224
- | hook_id | start_chapter | type | status | last_advanced_chapter | expected_payoff | payoff_timing | notes |
225
-
226
- === CHAPTER_SUMMARY ===
227
- Single Markdown table row:
228
- | Chapter | Title | Characters | Key Events | State Changes | Hook Activity | Mood | Chapter Type |
229
-
230
- === UPDATED_SUBPLOTS ===
231
- Updated subplot board (Markdown table)
232
-
233
- === UPDATED_EMOTIONAL_ARCS ===
234
- Updated emotional arcs (Markdown table)
235
-
236
- === UPDATED_CHARACTER_MATRIX ===
237
- Updated character matrix (one ## section per character, bullet-list fields):
238
-
239
- ## Character Name
240
- - **Role**: protagonist / antagonist / ally / minor / mentioned
241
- - **Tags**: core identity tags
242
- - **Contrast**: distinctive details that defy expectations
243
- - **Speech**: speaking style summary
244
- - **Personality**: core personality traits
245
- - **Motivation**: fundamental driving force
246
- - **Current**: immediate goal this chapter
247
- - **Relationships**: OtherChar(type/Ch#) | ...
248
- - **Known**: what this character knows (only witnessed or told)
249
- - **Unknown**: what this character does not know
250
-
251
- (Repeat for each character. Add new characters; keep existing ones updated.)
252
-
253
- ## Rules
254
-
255
- 1. UPDATED_STATE and UPDATED_HOOKS must be incremental updates based on the current tracking files.
256
- 2. Every factual change in the chapter must appear in the corresponding tracking file.
257
- 3. Do not miss resource changes, movement, relationship changes, or information changes.
157
+ return `【LANGUAGE OVERRIDE】ALL output MUST be in English. The === TAG === markers remain unchanged.
158
+
159
+ You are a fiction continuity analyst. Analyze a finished chapter, extract every state change, and update the tracking files.
160
+
161
+ ## Working Mode
162
+
163
+ You are not writing new prose. You are reading completed chapter text and updating the book's truth files.
164
+ 1. Read the chapter carefully and extract all important facts.
165
+ 2. Update the existing tracking files incrementally rather than rebuilding them from scratch.
166
+ 3. Keep the output contract identical to the writer pipeline.
167
+
168
+ ## What To Extract
169
+
170
+ - Character entrances, exits, injuries, breakthroughs, deaths, and other status changes
171
+ - Location movement and scene transitions
172
+ - Item or resource gains and losses
173
+ - Hook setup, advancement, and payoff
174
+ - Emotional arc movement
175
+ - Subplot progress
176
+ - Relationship changes and information-boundary changes
177
+
178
+ ## Book Information
179
+
180
+ - Title: ${book.title}
181
+ - Genre: ${genreProfile.name} (${book.genre})
182
+ - Platform: ${book.platform}
183
+ ${numericalBlock}
184
+
185
+ ## Genre Guidance
186
+
187
+ ${genreBody}
188
+
189
+ ${bookRulesBody ? `## Book Rules\n\n${bookRulesBody}` : ""}
190
+
191
+ ## Output Format
192
+
193
+ Use === TAG === delimiters exactly as shown:
194
+
195
+ === CHAPTER_TITLE ===
196
+ (Extract or infer the chapter title. Output title text only.)
197
+
198
+ === CHAPTER_CONTENT ===
199
+ (Repeat the original chapter content exactly. Do not rewrite.)
200
+
201
+ === PRE_WRITE_CHECK ===
202
+ (Leave empty in analysis mode.)
203
+
204
+ === POST_SETTLEMENT ===
205
+ (Leave empty in analysis mode.)
206
+
207
+ === UPDATED_STATE ===
208
+ Updated state card as a Markdown table reflecting the end-of-chapter state:
209
+ | Field | Value |
210
+ | --- | --- |
211
+ | Current Chapter | {chapter_number} |
212
+ | Current Location | ... |
213
+ | Protagonist State | ... |
214
+ | Current Goal | ... |
215
+ | Current Constraint | ... |
216
+ | Current Alliances | ... |
217
+ | Current Conflict | ... |
218
+
219
+ === UPDATED_LEDGER ===
220
+ (If the genre has a numerical system: output the fully updated resource ledger table. Otherwise leave empty.)
221
+
222
+ === UPDATED_HOOKS ===
223
+ Updated hooks pool as a Markdown table with the latest status of every known hook:
224
+ | hook_id | start_chapter | type | status | last_advanced | expected_payoff | payoff_timing | depends_on | pays_off_in_arc | core_hook | half_life | promoted | notes |
225
+
226
+ === CHAPTER_SUMMARY ===
227
+ Single Markdown table row:
228
+ | Chapter | Title | Characters | Key Events | State Changes | Hook Activity | Mood | Chapter Type |
229
+
230
+ === UPDATED_SUBPLOTS ===
231
+ Updated subplot board (Markdown table)
232
+
233
+ === UPDATED_EMOTIONAL_ARCS ===
234
+ Updated emotional arcs (Markdown table)
235
+
236
+ === UPDATED_CHARACTER_MATRIX ===
237
+ Updated character matrix (one ## section per character, bullet-list fields):
238
+
239
+ ## Character Name
240
+ - **Role**: protagonist / antagonist / ally / minor / mentioned
241
+ - **Tags**: core identity tags
242
+ - **Contrast**: distinctive details that defy expectations
243
+ - **Speech**: speaking style summary
244
+ - **Personality**: core personality traits
245
+ - **Motivation**: fundamental driving force
246
+ - **Current**: immediate goal this chapter
247
+ - **Relationships**: OtherChar(type/Ch#) | ...
248
+ - **Known**: what this character knows (only witnessed or told)
249
+ - **Unknown**: what this character does not know
250
+
251
+ (Repeat for each character. Add new characters; keep existing ones updated.)
252
+
253
+ ## Rules
254
+
255
+ 1. UPDATED_STATE and UPDATED_HOOKS must be incremental updates based on the current tracking files.
256
+ 2. Every factual change in the chapter must appear in the corresponding tracking file.
257
+ 3. Do not miss resource changes, movement, relationship changes, or information changes.
258
258
  4. Information boundaries in the character matrix must stay exact: each character only knows what they directly witnessed or learned.`;
259
259
  }
260
260
  const numericalBlock = genreProfile.numericalSystem
261
261
  ? `\n- 本题材有数值/资源体系,你必须在 UPDATED_LEDGER 中追踪正文中出现的所有资源变动`
262
262
  : `\n- 本题材无数值系统,UPDATED_LEDGER 留空`;
263
- return `你是小说连续性分析师。你的任务是分析一章已完成的小说正文,从中提取所有状态变化并更新追踪文件。
264
-
265
- ## 工作模式
266
-
267
- 你不是在写作,而是在分析已有正文。你需要:
268
- 1. 仔细阅读正文,提取所有关键信息
269
- 2. 基于"当前追踪文件"做增量更新
270
- 3. 输出格式与写作模块完全一致
271
-
272
- ## 分析维度
273
-
274
- 从正文中提取以下信息:
275
- - 角色出场、退场、状态变化(受伤/突破/死亡等)
276
- - 位置移动、场景转换
277
- - 物品/资源的获得与消耗
278
- - 伏笔的埋设、推进、回收
279
- - 情感弧线变化
280
- - 支线进展
281
- - 角色间关系变化、新的信息边界
282
-
283
- ## 书籍信息
284
-
285
- - 标题:${book.title}
286
- - 题材:${genreProfile.name}(${book.genre})
287
- - 平台:${book.platform}
288
- ${numericalBlock}
289
-
290
- ## 题材特征
291
-
292
- ${genreBody}
293
-
294
- ${bookRulesBody ? `## 本书规则\n\n${bookRulesBody}` : ""}
295
-
296
- ## 输出格式(必须严格遵循)
297
-
298
- 使用 === TAG === 分隔各部分,与写作模块完全一致:
299
-
300
- === CHAPTER_TITLE ===
301
- (从正文标题行提取或推断章节标题,只输出标题文字)
302
-
303
- === CHAPTER_CONTENT ===
304
- (原样输出正文内容,不做任何修改)
305
-
306
- === PRE_WRITE_CHECK ===
307
- (留空,分析模式不需要写作自检)
308
-
309
- === POST_SETTLEMENT ===
310
- (留空,分析模式不需要写后结算)
311
-
312
- === UPDATED_STATE ===
313
- 更新后的状态卡(Markdown表格),反映本章结束时的最新状态:
314
- | 字段 | 值 |
315
- |------|-----|
316
- | 当前章节 | {章节号} |
317
- | 当前位置 | ... |
318
- | 主角状态 | ... |
319
- | 当前目标 | ... |
320
- | 当前限制 | ... |
321
- | 当前敌我 | ... |
322
- | 当前冲突 | ... |
323
-
324
- === UPDATED_LEDGER ===
325
- (如有数值系统:更新后的完整资源账本表格;无则留空)
326
-
327
- === UPDATED_HOOKS ===
328
- 更新后的伏笔池(Markdown表格),包含所有已知伏笔的最新状态:
329
- | hook_id | 起始章节 | 类型 | 状态 | 最近推进 | 预期回收 | 回收节奏 | 备注 |
330
-
331
- === CHAPTER_SUMMARY ===
332
- 本章摘要(Markdown表格行):
333
- | 章节 | 标题 | 出场人物 | 关键事件 | 状态变化 | 伏笔动态 | 情绪基调 | 章节类型 |
334
-
335
- === UPDATED_SUBPLOTS ===
336
- 更新后的支线进度板(Markdown表格)
337
-
338
- === UPDATED_EMOTIONAL_ARCS ===
339
- 更新后的情感弧线(Markdown表格)
340
-
341
- === UPDATED_CHARACTER_MATRIX ===
342
- 更新后的角色矩阵(每个角色一个 ## 块,字段用 bullet list):
343
-
344
- ## 角色名
345
- - **定位**: 主角 / 反派 / 盟友 / 配角 / 提及
346
- - **标签**: 核心身份标签
347
- - **反差**: 打破刻板印象的独特细节
348
- - **说话**: 说话风格概述
349
- - **性格**: 性格底色
350
- - **动机**: 根本驱动力
351
- - **当前**: 本章即时目标
352
- - **关系**: 某角色(关系性质/Ch#) | ...
353
- - **已知**: 该角色已知的信息(仅限亲历或被告知)
354
- - **未知**: 该角色不知道的信息
355
-
356
- (每个角色重复以上格式。新角色追加新 ## 块,已有角色做增量更新。)
357
-
358
- ## 关键规则
359
-
360
- 1. 状态卡和伏笔池必须基于"当前追踪文件"做增量更新,不是从零开始
361
- 2. 正文中的每一个事实性变化都必须反映在对应的追踪文件中
362
- 3. 不要遗漏细节:数值变化、位置变化、关系变化、信息变化都要记录
263
+ return `你是小说连续性分析师。你的任务是分析一章已完成的小说正文,从中提取所有状态变化并更新追踪文件。
264
+
265
+ ## 工作模式
266
+
267
+ 你不是在写作,而是在分析已有正文。你需要:
268
+ 1. 仔细阅读正文,提取所有关键信息
269
+ 2. 基于"当前追踪文件"做增量更新
270
+ 3. 输出格式与写作模块完全一致
271
+
272
+ ## 分析维度
273
+
274
+ 从正文中提取以下信息:
275
+ - 角色出场、退场、状态变化(受伤/突破/死亡等)
276
+ - 位置移动、场景转换
277
+ - 物品/资源的获得与消耗
278
+ - 伏笔的埋设、推进、回收
279
+ - 情感弧线变化
280
+ - 支线进展
281
+ - 角色间关系变化、新的信息边界
282
+
283
+ ## 书籍信息
284
+
285
+ - 标题:${book.title}
286
+ - 题材:${genreProfile.name}(${book.genre})
287
+ - 平台:${book.platform}
288
+ ${numericalBlock}
289
+
290
+ ## 题材特征
291
+
292
+ ${genreBody}
293
+
294
+ ${bookRulesBody ? `## 本书规则\n\n${bookRulesBody}` : ""}
295
+
296
+ ## 输出格式(必须严格遵循)
297
+
298
+ 使用 === TAG === 分隔各部分,与写作模块完全一致:
299
+
300
+ === CHAPTER_TITLE ===
301
+ (从正文标题行提取或推断章节标题,只输出标题文字)
302
+
303
+ === CHAPTER_CONTENT ===
304
+ (原样输出正文内容,不做任何修改)
305
+
306
+ === PRE_WRITE_CHECK ===
307
+ (留空,分析模式不需要写作自检)
308
+
309
+ === POST_SETTLEMENT ===
310
+ (留空,分析模式不需要写后结算)
311
+
312
+ === UPDATED_STATE ===
313
+ 更新后的状态卡(Markdown表格),反映本章结束时的最新状态:
314
+ | 字段 | 值 |
315
+ |------|-----|
316
+ | 当前章节 | {章节号} |
317
+ | 当前位置 | ... |
318
+ | 主角状态 | ... |
319
+ | 当前目标 | ... |
320
+ | 当前限制 | ... |
321
+ | 当前敌我 | ... |
322
+ | 当前冲突 | ... |
323
+
324
+ === UPDATED_LEDGER ===
325
+ (如有数值系统:更新后的完整资源账本表格;无则留空)
326
+
327
+ === UPDATED_HOOKS ===
328
+ 更新后的伏笔池(Markdown表格),包含所有已知伏笔的最新状态:
329
+ | hook_id | 起始章节 | 类型 | 状态 | 最近推进 | 预期回收 | 回收节奏 | 上游依赖 | 回收卷 | 核心 | 半衰期 | 升级 | 备注 |
330
+
331
+ === CHAPTER_SUMMARY ===
332
+ 本章摘要(Markdown表格行):
333
+ | 章节 | 标题 | 出场人物 | 关键事件 | 状态变化 | 伏笔动态 | 情绪基调 | 章节类型 |
334
+
335
+ === UPDATED_SUBPLOTS ===
336
+ 更新后的支线进度板(Markdown表格)
337
+
338
+ === UPDATED_EMOTIONAL_ARCS ===
339
+ 更新后的情感弧线(Markdown表格)
340
+
341
+ === UPDATED_CHARACTER_MATRIX ===
342
+ 更新后的角色矩阵(每个角色一个 ## 块,字段用 bullet list):
343
+
344
+ ## 角色名
345
+ - **定位**: 主角 / 反派 / 盟友 / 配角 / 提及
346
+ - **标签**: 核心身份标签
347
+ - **反差**: 打破刻板印象的独特细节
348
+ - **说话**: 说话风格概述
349
+ - **性格**: 性格底色
350
+ - **动机**: 根本驱动力
351
+ - **当前**: 本章即时目标
352
+ - **关系**: 某角色(关系性质/Ch#) | ...
353
+ - **已知**: 该角色已知的信息(仅限亲历或被告知)
354
+ - **未知**: 该角色不知道的信息
355
+
356
+ (每个角色重复以上格式。新角色追加新 ## 块,已有角色做增量更新。)
357
+
358
+ ## 关键规则
359
+
360
+ 1. 状态卡和伏笔池必须基于"当前追踪文件"做增量更新,不是从零开始
361
+ 2. 正文中的每一个事实性变化都必须反映在对应的追踪文件中
362
+ 3. 不要遗漏细节:数值变化、位置变化、关系变化、信息变化都要记录
363
363
  4. 角色矩阵中的"已知/未知"要准确——角色只知道他在场时发生的事`;
364
364
  }
365
365
  buildUserPrompt(params) {
@@ -370,17 +370,17 @@ ${bookRulesBody ? `## 本书规则\n\n${bookRulesBody}` : ""}
370
370
  const ledgerBlock = params.ledger
371
371
  ? `\n## Current Resource Ledger\n${params.ledger}\n`
372
372
  : "";
373
- return `Analyze chapter ${params.chapterNumber} and update all tracking files.
374
- ${titleLine}
375
- ## Chapter Content
376
-
377
- ${params.chapterContent}
378
-
379
- ## Current State
380
- ${params.currentState}
381
- ${ledgerBlock}
382
- ${params.hooksBlock}${params.volumeSummariesBlock}${params.subplotBlock}${params.emotionalBlock}${params.matrixBlock}${params.summariesBlock}${params.outlineOrControlBlock}${params.bibleBlock}
383
-
373
+ return `Analyze chapter ${params.chapterNumber} and update all tracking files.
374
+ ${titleLine}
375
+ ## Chapter Content
376
+
377
+ ${params.chapterContent}
378
+
379
+ ## Current State
380
+ ${params.currentState}
381
+ ${ledgerBlock}
382
+ ${params.hooksBlock}${params.volumeSummariesBlock}${params.subplotBlock}${params.emotionalBlock}${params.matrixBlock}${params.summariesBlock}${params.outlineOrControlBlock}${params.bibleBlock}
383
+
384
384
  Please return the result strictly in the === TAG === format.`;
385
385
  }
386
386
  const titleLine = params.chapterTitle
@@ -389,17 +389,17 @@ Please return the result strictly in the === TAG === format.`;
389
389
  const ledgerBlock = params.ledger
390
390
  ? `\n## 当前资源账本\n${params.ledger}\n`
391
391
  : "";
392
- return `请分析第${params.chapterNumber}章正文,更新所有追踪文件。
393
- ${titleLine}
394
- ## 正文内容
395
-
396
- ${params.chapterContent}
397
-
398
- ## 当前状态卡
399
- ${params.currentState}
400
- ${ledgerBlock}
401
- ${params.hooksBlock}${params.volumeSummariesBlock}${params.subplotBlock}${params.emotionalBlock}${params.matrixBlock}${params.summariesBlock}${params.outlineOrControlBlock}${params.bibleBlock}
402
-
392
+ return `请分析第${params.chapterNumber}章正文,更新所有追踪文件。
393
+ ${titleLine}
394
+ ## 正文内容
395
+
396
+ ${params.chapterContent}
397
+
398
+ ## 当前状态卡
399
+ ${params.currentState}
400
+ ${ledgerBlock}
401
+ ${params.hooksBlock}${params.volumeSummariesBlock}${params.subplotBlock}${params.emotionalBlock}${params.matrixBlock}${params.summariesBlock}${params.outlineOrControlBlock}${params.bibleBlock}
402
+
403
403
  请严格按照 === TAG === 格式输出分析结果。`;
404
404
  }
405
405
  buildReducedControlBlock(chapterIntent, contextPackage, ruleStack, language) {
@@ -412,31 +412,31 @@ ${params.hooksBlock}${params.volumeSummariesBlock}${params.subplotBlock}${params
412
412
  .join("\n")
413
413
  : "- none";
414
414
  return language === "en"
415
- ? `\n## Chapter Control Inputs (compiled by Planner/Composer)
416
- ${chapterIntent}
417
-
418
- ### Selected Context
419
- ${selectedContext || "- none"}
420
-
421
- ### Rule Stack
422
- - Hard guardrails: ${ruleStack.sections.hard.join(", ") || "(none)"}
423
- - Soft constraints: ${ruleStack.sections.soft.join(", ") || "(none)"}
424
- - Diagnostic rules: ${ruleStack.sections.diagnostic.join(", ") || "(none)"}
425
-
426
- ### Active Overrides
415
+ ? `\n## Chapter Control Inputs (compiled by Planner/Composer)
416
+ ${chapterIntent}
417
+
418
+ ### Selected Context
419
+ ${selectedContext || "- none"}
420
+
421
+ ### Rule Stack
422
+ - Hard guardrails: ${ruleStack.sections.hard.join(", ") || "(none)"}
423
+ - Soft constraints: ${ruleStack.sections.soft.join(", ") || "(none)"}
424
+ - Diagnostic rules: ${ruleStack.sections.diagnostic.join(", ") || "(none)"}
425
+
426
+ ### Active Overrides
427
427
  ${overrides}\n`
428
- : `\n## 本章控制输入(由 Planner/Composer 编译)
429
- ${chapterIntent}
430
-
431
- ### 已选上下文
432
- ${selectedContext || "- none"}
433
-
434
- ### 规则栈
435
- - 硬护栏:${ruleStack.sections.hard.join("、") || "(无)"}
436
- - 软约束:${ruleStack.sections.soft.join("、") || "(无)"}
437
- - 诊断规则:${ruleStack.sections.diagnostic.join("、") || "(无)"}
438
-
439
- ### 当前覆盖
428
+ : `\n## 本章控制输入(由 Planner/Composer 编译)
429
+ ${chapterIntent}
430
+
431
+ ### 已选上下文
432
+ ${selectedContext || "- none"}
433
+
434
+ ### 规则栈
435
+ - 硬护栏:${ruleStack.sections.hard.join("、") || "(无)"}
436
+ - 软约束:${ruleStack.sections.soft.join("、") || "(无)"}
437
+ - 诊断规则:${ruleStack.sections.diagnostic.join("、") || "(无)"}
438
+
439
+ ### 当前覆盖
440
440
  ${overrides}\n`;
441
441
  }
442
442
  buildMemoryGoal(chapterTitle, chapterContent) {