@waterwx/dsh-novel-forge 1.2.0 → 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.
Files changed (141) hide show
  1. package/README.md +236 -349
  2. package/lib/client.js +56064 -10565
  3. package/lib/index.js +13922 -5218
  4. package/lib/types/action-guard.d.ts +61 -0
  5. package/lib/types/ai-scan.d.ts +36 -0
  6. package/lib/types/assets.d.ts +24 -9
  7. package/lib/types/assistant.d.ts +29 -0
  8. package/lib/types/author-assets.d.ts +25 -0
  9. package/lib/types/bookshelf.d.ts +11 -1
  10. package/lib/types/client/api.d.ts +178 -10
  11. package/lib/types/client/docx.d.ts +2 -0
  12. package/lib/types/client/index.d.ts +1 -1
  13. package/lib/types/client/llmLive.d.ts +31 -0
  14. package/lib/types/client/locales.d.ts +28 -11
  15. package/lib/types/client/panel/AdaptModeView.d.ts +5 -0
  16. package/lib/types/client/panel/AiTag.d.ts +1 -0
  17. package/lib/types/client/panel/AssistantTab.d.ts +4 -1
  18. package/lib/types/client/panel/AuthorAssetsView.d.ts +4 -0
  19. package/lib/types/client/panel/AuthorHome.d.ts +34 -0
  20. package/lib/types/client/panel/BookAnalysisView.d.ts +4 -0
  21. package/lib/types/client/panel/CmdPalette.d.ts +12 -0
  22. package/lib/types/client/panel/CreateBookView.d.ts +5 -1
  23. package/lib/types/client/panel/DirectorView.d.ts +7 -0
  24. package/lib/types/client/panel/GlobalAssetLibraryView.d.ts +4 -0
  25. package/lib/types/client/panel/IdeaInspirationView.d.ts +6 -0
  26. package/lib/types/client/panel/ImportModal.d.ts +7 -0
  27. package/lib/types/client/panel/KnowledgeBaseView.d.ts +4 -0
  28. package/lib/types/client/panel/LiveFeedLog.d.ts +13 -0
  29. package/lib/types/client/panel/MarketRadarView.d.ts +5 -0
  30. package/lib/types/client/panel/ModelManager.d.ts +14 -0
  31. package/lib/types/client/panel/NovelPanel.d.ts +6 -1
  32. package/lib/types/client/panel/PageHeader.d.ts +18 -0
  33. package/lib/types/client/panel/ProgressConsole.d.ts +17 -0
  34. package/lib/types/client/panel/ProgressHomeView.d.ts +5 -0
  35. package/lib/types/client/panel/PromptSlotsView.d.ts +11 -0
  36. package/lib/types/client/panel/ReasoningSection.d.ts +10 -0
  37. package/lib/types/client/panel/SettingsView.d.ts +19 -0
  38. package/lib/types/client/panel/ShelfView.d.ts +12 -1
  39. package/lib/types/client/panel/SubPage.d.ts +27 -0
  40. package/lib/types/client/panel/TensionView.d.ts +14 -0
  41. package/lib/types/client/panel/TimelineView.d.ts +14 -0
  42. package/lib/types/client/panel/toast.d.ts +2 -0
  43. package/lib/types/client/panel/views.d.ts +25 -7
  44. package/lib/types/client/run-status.d.ts +19 -0
  45. package/lib/types/client/text.d.ts +9 -0
  46. package/lib/types/docx-core.d.ts +16 -0
  47. package/lib/types/docx.d.ts +2 -3
  48. package/lib/types/engine.d.ts +185 -41
  49. package/lib/types/global-assets.d.ts +6 -0
  50. package/lib/types/index.d.ts +22 -2
  51. package/lib/types/llm-live.d.ts +75 -0
  52. package/lib/types/llm-retry.d.ts +38 -0
  53. package/lib/types/market-radar-scan.d.ts +19 -0
  54. package/lib/types/market-radar-sources.d.ts +31 -0
  55. package/lib/types/migrate-output.d.ts +25 -0
  56. package/lib/types/novel-context.d.ts +80 -0
  57. package/lib/types/prompt-slots.d.ts +57 -0
  58. package/lib/types/prompt-utils.d.ts +35 -0
  59. package/lib/types/prompting.d.ts +10 -0
  60. package/lib/types/protocol.d.ts +1311 -125
  61. package/lib/types/review-policy.d.ts +97 -0
  62. package/lib/types/routes.d.ts +4 -0
  63. package/lib/types/run.d.ts +3 -1
  64. package/lib/types/snapshots.d.ts +46 -0
  65. package/lib/types/stage-contract.d.ts +60 -0
  66. package/lib/types/tension.d.ts +65 -0
  67. package/lib/types/timeline.d.ts +37 -0
  68. package/package.json +52 -27
  69. package/scripts/patch-schemastery.mjs +47 -0
  70. package/src/action-guard.ts +127 -0
  71. package/src/ai-scan.ts +179 -0
  72. package/src/assets.ts +1806 -520
  73. package/src/assistant.ts +1098 -770
  74. package/src/author-assets.ts +149 -0
  75. package/src/bookshelf.ts +187 -151
  76. package/src/client/api.ts +758 -410
  77. package/src/client/docx.ts +37 -69
  78. package/src/client/index.ts +3 -1
  79. package/src/client/llmLive.ts +111 -0
  80. package/src/client/locales.ts +418 -383
  81. package/src/client/mount.tsx +1 -1
  82. package/src/client/panel/AdaptModeView.tsx +535 -0
  83. package/src/client/panel/AiTag.tsx +7 -0
  84. package/src/client/panel/AssetsTab.tsx +448 -458
  85. package/src/client/panel/AssistantTab.tsx +355 -301
  86. package/src/client/panel/AuthorAssetsView.tsx +206 -0
  87. package/src/client/panel/AuthorHome.tsx +309 -0
  88. package/src/client/panel/BookAnalysisView.tsx +63 -0
  89. package/src/client/panel/CmdPalette.tsx +102 -0
  90. package/src/client/panel/CreateBookView.tsx +366 -348
  91. package/src/client/panel/DirectorView.tsx +200 -0
  92. package/src/client/panel/GlobalAssetLibraryView.tsx +168 -0
  93. package/src/client/panel/IdeaInspirationView.tsx +76 -0
  94. package/src/client/panel/ImportModal.tsx +303 -0
  95. package/src/client/panel/KnowledgeBaseView.tsx +125 -0
  96. package/src/client/panel/LiveFeedLog.tsx +204 -0
  97. package/src/client/panel/MarketRadarView.tsx +377 -0
  98. package/src/client/panel/ModelManager.tsx +205 -0
  99. package/src/client/panel/NovelPanel.tsx +5517 -4597
  100. package/src/client/panel/PageHeader.tsx +37 -0
  101. package/src/client/panel/ProgressConsole.tsx +63 -0
  102. package/src/client/panel/PromptSlotsView.tsx +97 -0
  103. package/src/client/panel/ReaderView.tsx +306 -306
  104. package/src/client/panel/ReasoningSection.tsx +31 -0
  105. package/src/client/panel/RunPanel.tsx +223 -204
  106. package/src/client/panel/SettingsView.tsx +340 -0
  107. package/src/client/panel/ShelfView.tsx +266 -236
  108. package/src/client/panel/SubPage.tsx +42 -0
  109. package/src/client/panel/TensionView.tsx +196 -0
  110. package/src/client/panel/TimelineView.tsx +192 -0
  111. package/src/client/panel/WorldTab.tsx +202 -202
  112. package/src/client/panel/panel.module.css +5764 -2941
  113. package/src/client/panel/toast.ts +51 -0
  114. package/src/client/panel/views.tsx +401 -314
  115. package/src/client/run-status.ts +143 -0
  116. package/src/client/sidebar-entry.ts +1 -1
  117. package/src/client/text.ts +28 -0
  118. package/src/docx-core.ts +53 -0
  119. package/src/docx.ts +44 -83
  120. package/src/engine.ts +4672 -2787
  121. package/src/global-assets.ts +59 -0
  122. package/src/index.ts +323 -252
  123. package/src/llm-live.ts +260 -0
  124. package/src/llm-retry.ts +77 -0
  125. package/src/market-radar-scan.ts +41 -0
  126. package/src/market-radar-sources.ts +173 -0
  127. package/src/migrate-output.ts +76 -0
  128. package/src/novel-context.ts +286 -0
  129. package/src/prompt-slots.ts +125 -0
  130. package/src/prompting.ts +26 -0
  131. package/src/protocol.ts +2383 -1182
  132. package/src/review-policy.ts +161 -0
  133. package/src/routes.ts +3724 -2151
  134. package/src/run.ts +346 -330
  135. package/src/snapshots.ts +174 -0
  136. package/src/stage-contract.ts +189 -0
  137. package/src/tension.ts +240 -0
  138. package/src/timeline.ts +159 -0
  139. package/lib/client.js.map +0 -1
  140. package/lib/index.js.map +0 -1
  141. package/src/client/panel/BookshelfBar.tsx +0 -170
@@ -0,0 +1,80 @@
1
+ /**
2
+ * 统一上下文组装与相关设定检索
3
+ *
4
+ * 取代各阶段各自拼装 prompt,消除「生成看得到、审稿看不到」的断层。
5
+ * 所有阶段通过 buildChapterContext 获取同一来源的事实与设定。
6
+ */
7
+ import type { ProjectState, ChapterPlan, StoryBible, RoleRecord, ChapterFact, Foreshadow, Plotline } from './protocol';
8
+ export interface ChapterContext {
9
+ /** 平台合规红线(永远全量) */
10
+ complianceRedLines: string[];
11
+ /** 本书写作红线(永远全量) */
12
+ bookRedLines: string[];
13
+ /** 当前章相关角色卡(全量信息) */
14
+ relevantRoles: Array<{
15
+ name: string;
16
+ role: string;
17
+ traits: string[];
18
+ goals?: string;
19
+ knowledge?: string[];
20
+ }>;
21
+ /** 当前章相关道藏规则 */
22
+ relevantWorldRules: string[];
23
+ /** 活跃剧情线 */
24
+ activePlotlines: Plotline[];
25
+ /** 未回收伏笔 */
26
+ activeForeshadows: Foreshadow[];
27
+ /** 上一章结尾原文 */
28
+ prevChapterTail: string;
29
+ /** 上一章摘要 */
30
+ prevChapterSummary?: string;
31
+ /** 最近事实(近因记忆,top20) */
32
+ recentFacts: string[];
33
+ /** 相关旧事实(按本章 beats 检索,top15) */
34
+ relatedFacts: string[];
35
+ /** 当前卷大纲 */
36
+ currentVolumeOutline: string;
37
+ /** 本章 beats */
38
+ beats: string;
39
+ /** 本章标题 */
40
+ chapterTitle: string;
41
+ }
42
+ export interface ContextBuildOptions {
43
+ /** 阶段:writing/review/revise/polish/plan */
44
+ stage?: 'writing' | 'review' | 'revise' | 'polish' | 'plan';
45
+ /** 是否注入完整角色卡(false 时只注入角色名+定位) */
46
+ fullRoleCards?: boolean;
47
+ /** 相关事实检索上限 */
48
+ relatedFactsLimit?: number;
49
+ /** 最近事实数量 */
50
+ recentFactsLimit?: number;
51
+ }
52
+ /**
53
+ * 相关事实检索:trigram 重合度 + 角色名命中加权 + 近因加权
54
+ * 从 generateChapterStream 抽取,扩展为通用函数。
55
+ */
56
+ export declare function retrieveRelatedFacts(facts: ChapterFact[], beatsText: string, roleNames: string[], limit?: number): string[];
57
+ /**
58
+ * 相关角色检索:beats 中出现的角色 + 主角/主要反派永远全量
59
+ */
60
+ export declare function retrieveRelevantRoles(bible: StoryBible | undefined, roles: RoleRecord[] | undefined, beatsText: string): ChapterContext['relevantRoles'];
61
+ /**
62
+ * 构建章节统一上下文
63
+ *
64
+ * 各阶段调用此函数获取同一来源的事实与设定,消除上下文断层。
65
+ * 检索结果不足时自动回退全量,保证不丢失关键信息。
66
+ */
67
+ export declare function buildChapterContext(project: ProjectState, chapter: ChapterPlan, outputDir: string, options?: ContextBuildOptions): ChapterContext;
68
+ /**
69
+ * 将上下文渲染为 prompt 文本块
70
+ * 各阶段可按需选择注入哪些块。
71
+ */
72
+ export declare function renderContextBlocks(ctx: ChapterContext): {
73
+ rolesBlock: string;
74
+ worldRulesBlock: string;
75
+ factsBlock: string;
76
+ plotlinesBlock: string;
77
+ foreshadowsBlock: string;
78
+ continuityBlock: string;
79
+ redLinesBlock: string;
80
+ };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * 提示词槽位:给作者留几个**安全可改**的位置,用来微调本书的写作偏好。
3
+ *
4
+ * 设计边界(很重要):
5
+ * * 槽位只追加"作者偏好",**不允许覆盖**规则工程与合规红线——道藏、写作红线、
6
+ * 九条内容合规红线、反 AI 规则、阶段契约都由宿主锁定,槽位碰不到;
7
+ * * 槽位内容随项目保存(`novel-project.json`),换书即换槽位;
8
+ * * 每个槽位有长度上限,超长直接截断并标记(沿用「截断显式化」的规则)。
9
+ */
10
+ import type { ProjectState, PromptSlotId } from './protocol.ts';
11
+ /** 单个槽位的元信息。 */
12
+ export interface PromptSlotSpec {
13
+ id: PromptSlotId;
14
+ /** 面板显示名。 */
15
+ label: string;
16
+ /** 一句话说明它影响什么。 */
17
+ hint: string;
18
+ /** 示例(面板占位符)。 */
19
+ placeholder: string;
20
+ /** 字符上限。 */
21
+ maxChars: number;
22
+ }
23
+ /** 允许作者编辑的槽位(白名单;不在此列表的提示词一律不可改)。 */
24
+ export declare const PROMPT_SLOTS: readonly PromptSlotSpec[];
25
+ /** 单个槽位的渲染结果。 */
26
+ export interface RenderedSlot {
27
+ id: PromptSlotId;
28
+ label: string;
29
+ text: string;
30
+ /** 是否因超长被截断。 */
31
+ truncated: boolean;
32
+ /** 原文长度(截断前)。 */
33
+ chars: number;
34
+ }
35
+ /**
36
+ * 读取并规整项目里的槽位内容(去空白、按上限截断)。
37
+ *
38
+ * @param project 项目状态。
39
+ * @returns 非空槽位列表(保持 PROMPT_SLOTS 的声明顺序)。
40
+ */
41
+ export declare function readPromptSlots(project: ProjectState): RenderedSlot[];
42
+ /**
43
+ * 把槽位渲染成注入提示词的段落。
44
+ *
45
+ * @param project 项目状态。
46
+ * @returns 提示词片段;无槽位时返回空串。
47
+ */
48
+ export declare function renderPromptSlots(project: ProjectState): string;
49
+ /**
50
+ * 校验并规整一次槽位写入。
51
+ *
52
+ * @param id 槽位 id。
53
+ * @param value 内容(空串表示清空该槽位)。
54
+ * @returns 归一化后的内容。
55
+ * @throws 槽位 id 不在白名单时抛错。
56
+ */
57
+ export declare function normalizeSlotValue(id: string, value: string): string;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 提示词共享常量与工具
3
+ *
4
+ * 所有 JSON 输出规则、通用约束集中在此,避免各阶段重复定义、互相打架。
5
+ */
6
+ /** JSON 输出规则(所有要求模型输出 JSON 的地方共用) */
7
+ export declare const JSON_OUTPUT_RULES: string[];
8
+ /** JSON 输出规则的紧凑版(适合放在提示词末尾) */
9
+ export declare const JSON_OUTPUT_RULES_COMPACT: string;
10
+ /**
11
+ * 估算 prompt 的 token 数(粗略估算,用于上下文预算控制)
12
+ * 中文约 1.7 字/token,英文约 4 字符/token
13
+ */
14
+ export declare function estimateTokens(text: string): number;
15
+ /**
16
+ * 按 token 预算截断文本(保留开头,末尾加省略标记)
17
+ * 用于控制单块上下文不超预算。
18
+ */
19
+ export declare function truncateByTokens(text: string, maxTokens: number, marker?: string): string;
20
+ /** 通用「只改表达不改情节」约束(润色/局部修订共用) */
21
+ export declare const EXPRESSION_ONLY_RULE: string[];
22
+ /** 章节上下文各阶段的 token 预算(粗略,用于控制注入量) */
23
+ export declare const CONTEXT_BUDGET: {
24
+ /** 章节生成:道藏+角色+大纲+事实+伏笔 */
25
+ readonly writing: 12000;
26
+ /** AI 审稿:道藏+角色+事实+正文 */
27
+ readonly review: 10000;
28
+ /** 修订:原意见+相关事实+目标正文 */
29
+ readonly revise: 8000;
30
+ /** 润色:风格资产+原正文 */
31
+ readonly polish: 6000;
32
+ /** 分章规划:大纲+道藏+角色+近期事实 */
33
+ readonly plan: 15000;
34
+ };
35
+ export type ContextStage = keyof typeof CONTEXT_BUDGET;
@@ -0,0 +1,10 @@
1
+ /** 章节写作约束:把写作骨架渲染成可附加到系统提示词末尾的必达/禁止/自查块。 */
2
+ export declare function renderChapterWriterSkeleton(meta: {
3
+ targetChars: number;
4
+ minChars: number;
5
+ maxChars: number;
6
+ pov?: string;
7
+ tonePreference?: string;
8
+ endingHookPreference?: string;
9
+ antiAiRules?: string;
10
+ }): string;