@waterwx/dsh-novel-forge 2.2.0 → 2.3.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/README.md +5 -3
- package/lib/client.js +633 -615
- package/lib/index.js +1424 -1127
- package/lib/types/engine.d.ts +3 -8
- package/lib/types/prompt-cache.d.ts +43 -0
- package/lib/types/prompts/adapt.d.ts +21 -0
- package/lib/types/prompts/audit.d.ts +15 -0
- package/lib/types/prompts/bible.d.ts +10 -0
- package/lib/types/prompts/catalog.d.ts +40 -0
- package/lib/types/prompts/characters.d.ts +19 -0
- package/lib/types/prompts/common.d.ts +9 -0
- package/lib/types/prompts/digest.d.ts +27 -0
- package/lib/types/prompts/facts.d.ts +26 -0
- package/lib/types/prompts/foreshadow.d.ts +10 -0
- package/lib/types/prompts/market.d.ts +18 -0
- package/lib/types/prompts/outline.d.ts +25 -0
- package/lib/types/prompts/plan.d.ts +22 -0
- package/lib/types/prompts/plotlines.d.ts +21 -0
- package/lib/types/prompts/polish.d.ts +22 -0
- package/lib/types/prompts/review.d.ts +30 -0
- package/lib/types/prompts/world.d.ts +13 -0
- package/lib/types/prompts/writing.d.ts +29 -0
- package/lib/types/protocol.d.ts +4 -0
- package/package.json +1 -1
package/lib/types/engine.d.ts
CHANGED
|
@@ -4,13 +4,10 @@
|
|
|
4
4
|
* auto-review + rewrite, polish (de-AI-ify), narrative summaries, foreshadow
|
|
5
5
|
* tracking, project persistence, and whole-book export. Pure Node (no
|
|
6
6
|
* web-server dependencies), so routes stay thin and logic is testable.
|
|
7
|
+
*
|
|
8
|
+
* 系统提示词全部住在 src/prompts/(按域拆分 + catalog 注册表),本文件只做
|
|
9
|
+
* 组装与调用——提示词文案的修改去对应域文件,不要在这里新起一段。
|
|
7
10
|
*/
|
|
8
|
-
/**
|
|
9
|
-
* 内容合规红线(平台硬性要求):所有书籍、所有章节无条件生效,
|
|
10
|
-
* 优先级高于单书大纲/道藏中的任何设定与作者自定义红线。
|
|
11
|
-
* 注入点:章节生成系统提示 + 审稿系统提示(命中即 high)。
|
|
12
|
-
*/
|
|
13
|
-
export declare const COMPLIANCE_REDLINES: ReadonlyArray<string>;
|
|
14
11
|
import type { Context } from '@deepseek-ai/cordis';
|
|
15
12
|
import { type StyleFingerprint } from './style-fingerprint.ts';
|
|
16
13
|
import { fullTextBudget } from './model-capability.ts';
|
|
@@ -397,8 +394,6 @@ export interface ImpactItem {
|
|
|
397
394
|
* 定位一次改动波及的所有位置。助手在修改后主动调用,做连锁维护。
|
|
398
395
|
*/
|
|
399
396
|
export declare function analyzeImpact(ctx: Context, config: NovelConfig, project: ProjectState, outputDir: string, change: string): Promise<ImpactItem[]>;
|
|
400
|
-
/** 把大世界结构化数据渲染成提示词块(境界体系按顺序强约束)。 */
|
|
401
|
-
export declare function renderWorld(world: WorldState | undefined): string;
|
|
402
397
|
/** 提炼大世界:从大纲 + 道藏生成结构化境界体系/区域/势力。 */
|
|
403
398
|
export declare function extractWorld(ctx: Context, config: NovelConfig, project: ProjectState): Promise<WorldState>;
|
|
404
399
|
/**
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 提示词分层组装。
|
|
3
|
+
*
|
|
4
|
+
* 同一本书的连续多次调用(逐章正文、审稿、润色、修订…)里,输入的大部分是重复的,
|
|
5
|
+
* 但各块的变化频率差着量级:
|
|
6
|
+
*
|
|
7
|
+
* - **固定层(fixed)**:合规红线、写作硬性要求——永远不变,写死在代码里;
|
|
8
|
+
* - **本书层(book)**:道藏、世界、大纲、资产、提示词槽位——只随作者编辑变,
|
|
9
|
+
* 一次章节生产循环里不变;
|
|
10
|
+
* - **本章层(chapter)**:活跃伏笔、剧情线、时间线锚点、张力、章节骨架——
|
|
11
|
+
* 随创作进度逐章变。
|
|
12
|
+
*
|
|
13
|
+
* 厂商的输入缓存按**前缀**命中:只有排在前面的内容逐字节相同,后面的重复输入才有
|
|
14
|
+
* 机会整段命中。所以组装顺序必须是「固定 → 本书 → 本章」,把次次都变的挤到末尾。
|
|
15
|
+
* 反过来,若静态规则夹在书级内容中段,作者每改一次道藏,它后面的全部内容都跟着
|
|
16
|
+
* 作废、重新计费——分层就是把「不变的内容」尽量往前固定住。
|
|
17
|
+
*
|
|
18
|
+
* 三条纪律由本模块强制,不靠调用方自觉:
|
|
19
|
+
* 1. 三层顺序写死(LAYER_ORDER),调用方只标层、不决定顺序;
|
|
20
|
+
* 2. 同层内稳定排序,保持调用方的书写顺序;
|
|
21
|
+
* 3. 空白块直接丢弃——「无伏笔」时留一段空分隔,会让前后两次调用的前缀在这里分叉。
|
|
22
|
+
*
|
|
23
|
+
* 实话实说:分层只是给缓存命中**创造条件**。厂商是否命中、命中多少,以每次调用
|
|
24
|
+
* 实际上报的用量为准(见 llm-live 的缓存统计),本模块不做任何承诺,也不做
|
|
25
|
+
* 模型预热之类的玄学操作。
|
|
26
|
+
*/
|
|
27
|
+
/** 提示词分层:越靠前的内容越稳定。 */
|
|
28
|
+
export type PromptLayer = 'fixed' | 'book' | 'chapter';
|
|
29
|
+
/** 一个待组装进系统提示词的文本块。 */
|
|
30
|
+
export interface PromptBlock {
|
|
31
|
+
/** 该块的变化频率归属哪一层。 */
|
|
32
|
+
layer: PromptLayer;
|
|
33
|
+
/** 块文本(内部可含多行)。 */
|
|
34
|
+
text: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 按「固定 → 本书 → 本章」组装系统提示词。
|
|
38
|
+
*
|
|
39
|
+
* 同层内保持书写顺序(稳定排序);空白块丢弃,不在结果里留空段。
|
|
40
|
+
* @param blocks 调用方按书写顺序给出的块(层标可以乱,组装后一定分层有序)。
|
|
41
|
+
* @param separator 块间分隔符(默认换行)。
|
|
42
|
+
*/
|
|
43
|
+
export declare function assemblePromptBlocks(blocks: readonly PromptBlock[], separator?: string): string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 改编域:原文设定卡片分析、改编方案生成、按映射表重写章节。
|
|
3
|
+
*
|
|
4
|
+
* 改编是「结构性改写」而非换词:分析出的可改矩阵 → 用户勾选 → 映射表 +
|
|
5
|
+
* 保留/改变规则 → 逐章重写。提示词同域放一处,改口径时三份一起看。
|
|
6
|
+
*
|
|
7
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
8
|
+
*/
|
|
9
|
+
import type { PromptEntry } from './catalog.ts';
|
|
10
|
+
/** 改编 P0 分析:system 侧只声明角色(指令主体在 user 侧,位置效应更不易被长上下文稀释)。 */
|
|
11
|
+
export declare function adaptationAnalyzeSystemPrompt(): string;
|
|
12
|
+
/** 改编 P0 分析:user 侧指令(原文设定卡片 + 可改范围矩阵)。 */
|
|
13
|
+
export declare function adaptationAnalyzeUser(sampleBodies: string[]): string;
|
|
14
|
+
/** 改编方案:system 侧角色声明(指令主体在 user 侧)。 */
|
|
15
|
+
export declare function adaptationProposeSystemPrompt(): string;
|
|
16
|
+
/** 改编方案:user 侧指令 + 用户勾选的改动与已分析的可改矩阵。 */
|
|
17
|
+
export declare function adaptationProposeUser(selLines: string, dimLines: string): string;
|
|
18
|
+
/** 改编重写:按映射表与规则把一章正文结构性重写(不只是换词)。 */
|
|
19
|
+
export declare function adaptationRewriteSystemPrompt(): string;
|
|
20
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
21
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 一致性质检域:全书分批质检、改动影响分析。
|
|
3
|
+
*
|
|
4
|
+
* 两者都是「拿道藏 + 事实库 + 正文节选找矛盾」的同族任务,差别在触发方式:
|
|
5
|
+
* 质检是定期全本扫,影响分析是作者改一处后主动扫波及面。
|
|
6
|
+
*
|
|
7
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
8
|
+
*/
|
|
9
|
+
import type { PromptEntry } from './catalog.ts';
|
|
10
|
+
/** 单批质检:设定 + 事实库 + 该批章节节选 → 矛盾清单。 */
|
|
11
|
+
export declare function auditBatchSystemPrompt(): string;
|
|
12
|
+
/** 影响分析:一处改动 → 全书波及位置清单(设定/大纲/正文/事实库/简介)。 */
|
|
13
|
+
export declare function impactAnalysisSystemPrompt(): string;
|
|
14
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
15
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 道藏域:从大纲提炼结构化设定(题材/世界规则/角色卡/红线/风格)。
|
|
3
|
+
*
|
|
4
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
5
|
+
*/
|
|
6
|
+
import type { PromptEntry } from './catalog.ts';
|
|
7
|
+
/** System prompt for story-bible extraction. */
|
|
8
|
+
export declare function bibleSystemPrompt(): string;
|
|
9
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
10
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 提示词注册表(轻量版)。
|
|
3
|
+
*
|
|
4
|
+
* ## 它解决什么问题
|
|
5
|
+
*
|
|
6
|
+
* 提示词散落在 engine.ts 里时,有三件事会慢慢腐烂:
|
|
7
|
+
* 1. **看不见总量**:没人说得清这个插件到底有多少份系统提示、各是干什么的;
|
|
8
|
+
* 2. **改一处忘三处**:合规红线有四份注入点,「反 AI 套话口径」在润色和局部
|
|
9
|
+
* 修订里各写一份,改一边漏一边,两个提示词悄悄漂移;
|
|
10
|
+
* 3. **新人不敢动**:想改审稿维度,先得在 5000 行里 grep 出所有相关文案。
|
|
11
|
+
*
|
|
12
|
+
* 注册表把「有哪些提示词、各自负责什么」变成一份可检索、可测试的清单。
|
|
13
|
+
* 域模块(`./*.ts`,catalog 自身除外)各自导出 `entries` 登记表,此处汇总。
|
|
14
|
+
*
|
|
15
|
+
* ## 纪律(由 tests/prompt-registry.test.ts 强制执行)
|
|
16
|
+
*
|
|
17
|
+
* 1. **目录完整**:src/prompts/ 下每个域文件都必须被本文件 import——
|
|
18
|
+
* 新建了域文件却忘了登记,测试直接红;
|
|
19
|
+
* 2. **双向完整**:登记表里的每条 id 必须以所在域的文件名开头(`域.名称`),
|
|
20
|
+
* 域名与文件域一一对应,没有挂靠的孤条;
|
|
21
|
+
* 3. **id 唯一**:全库不允许重复 id;
|
|
22
|
+
* 4. **短描述**:description 是给人看的索引,不是第二份提示词——必须非空、
|
|
23
|
+
* 不超长,且不得原文照抄提示词首句(那是重复维护两份)。
|
|
24
|
+
*
|
|
25
|
+
* 遥测(哪次调用用了哪条提示词)与导出器暂不做:那需要改调用点传 id,
|
|
26
|
+
* 等真有度量需求再接,避免为假想的功能付出复杂度。
|
|
27
|
+
*/
|
|
28
|
+
/** 一条提示词登记。 */
|
|
29
|
+
export interface PromptEntry {
|
|
30
|
+
/** 稳定标识:`域.名称`,全库唯一(域名与 src/prompts/ 下的文件名对应)。 */
|
|
31
|
+
id: string;
|
|
32
|
+
/** 中文短描述:给人看的索引,不进提示词本身。 */
|
|
33
|
+
description: string;
|
|
34
|
+
}
|
|
35
|
+
/** 全库提示词清单(按域名字典序)。 */
|
|
36
|
+
export declare const PROMPT_CATALOG: readonly PromptEntry[];
|
|
37
|
+
/** 查一条提示词的中文描述;未登记返回 undefined。 */
|
|
38
|
+
export declare function describePrompt(id: string): string | undefined;
|
|
39
|
+
/** 全库清单(供测试与将来的导出器使用)。 */
|
|
40
|
+
export declare function listPromptEntries(): readonly PromptEntry[];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 角色域:角色库提炼(含补漏后缀)、角色当前状态聚合。
|
|
3
|
+
*
|
|
4
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
5
|
+
*/
|
|
6
|
+
import type { PromptEntry } from './catalog.ts';
|
|
7
|
+
/** AI 从全书提炼角色库:大纲 + 道藏 + 编年录 + 章节摘要 → 结构化角色清单。 */
|
|
8
|
+
export declare function extractRolesSystemPrompt(): string;
|
|
9
|
+
/**
|
|
10
|
+
* 角色补漏后缀(拼在 extractRolesSystemPrompt 之后)。
|
|
11
|
+
*
|
|
12
|
+
* 第一轮偶发漏掉「身份型/功能性角色」(站长/律师/警察等反复出现者),
|
|
13
|
+
* 用这一轮专项补捞;没有遗漏就输出 []。
|
|
14
|
+
*/
|
|
15
|
+
export declare function roleCatchUpSuffix(names: string): string;
|
|
16
|
+
/** 角色当前状态聚合:角色名单 + 已确立事实库 → 每角色一句话状态。 */
|
|
17
|
+
export declare function roleStatusSystemPrompt(): string;
|
|
18
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
19
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 提示词共享件:内容合规红线。
|
|
3
|
+
*
|
|
4
|
+
* 所有书籍、所有章节无条件生效,优先级高于单书大纲/道藏中的任何设定与作者
|
|
5
|
+
* 自定义红线。原来住在 engine.ts 里,随二期拆分成域模块后迁到此处——
|
|
6
|
+
* 各域模块(writing/review/polish…)都注入它,放共享件里避免循环导入。
|
|
7
|
+
*/
|
|
8
|
+
/** 内容合规红线(平台硬性要求)。注入点:章节生成 + 审稿 + 润色 + 局部修订系统提示(命中即 high)。 */
|
|
9
|
+
export declare const COMPLIANCE_REDLINES: ReadonlyArray<string>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 拆书与摘要域:源片段笔记、分节分析、单章摘要、书分析。
|
|
3
|
+
*
|
|
4
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
5
|
+
*/
|
|
6
|
+
import type { PromptEntry } from './catalog.ts';
|
|
7
|
+
/** 拆书阶段一:单章正文 → 结构化笔记(供后续章节级分析复用)。 */
|
|
8
|
+
export declare function breakdownNoteSystemPrompt(): string;
|
|
9
|
+
/** 拆书分节配置项。 */
|
|
10
|
+
export interface BreakdownSection {
|
|
11
|
+
key: string;
|
|
12
|
+
title: string;
|
|
13
|
+
focus: string;
|
|
14
|
+
system: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 拆书阶段二:分节分析配置。
|
|
18
|
+
*
|
|
19
|
+
* @param preset - quick(总览/剧情/人物/文风)| standard(+ 商业化卖点)。
|
|
20
|
+
*/
|
|
21
|
+
export declare function breakdownSections(preset: 'quick' | 'standard'): BreakdownSection[];
|
|
22
|
+
/** 单章摘要(叙事记忆):供后续章节写作时保持连贯性。 */
|
|
23
|
+
export declare function chapterSummarySystemPrompt(): string;
|
|
24
|
+
/** 书分析/拆书:输入一本书/章节文本 → 卖点/结构/可借鉴点/风险。 */
|
|
25
|
+
export declare function bookAnalysisSystemPrompt(): string;
|
|
26
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
27
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 章节记忆域:摘要 + 事实 + 时间线的抽取提示词。
|
|
3
|
+
*
|
|
4
|
+
* 三者的输入是同一份章节正文(合并调用的理由见 engine 侧注释);
|
|
5
|
+
* 提示词同域放一处,改口径时五份一起看,避免「摘要说 3-6 条、事实说 3-8 条」漂移。
|
|
6
|
+
*
|
|
7
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
8
|
+
*/
|
|
9
|
+
import type { PromptEntry } from './catalog.ts';
|
|
10
|
+
/** 摘要 + 事实(两件事一次出)。 */
|
|
11
|
+
export declare function summaryFactsSystemPrompt(): string;
|
|
12
|
+
/**
|
|
13
|
+
* 摘要 + 事实 + 时间线(三件事一次出)。
|
|
14
|
+
*
|
|
15
|
+
* @param wantTimeline - 关闭时间线时连 timeline 字段都不问,省掉输出 token
|
|
16
|
+
* 与模型的无用工作量。
|
|
17
|
+
*/
|
|
18
|
+
export declare function summaryFactsTimelineSystemPrompt(wantTimeline: boolean): string;
|
|
19
|
+
/** 事实抽取:本章正文 → 已确立事实(每行一条,3-6 条)。 */
|
|
20
|
+
export declare function extractFactsSystemPrompt(): string;
|
|
21
|
+
/** 时间线抽取:一章正文 → 故事时间线事件(时间/地点/在场角色/事件)。 */
|
|
22
|
+
export declare function timelineExtractSystemPrompt(): string;
|
|
23
|
+
/** 时间线复核:规则初筛之外,让模型找时序矛盾(时间倒流/瞬移/跨度不合理/季节错位)。 */
|
|
24
|
+
export declare function timelineReviewSystemPrompt(): string;
|
|
25
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
26
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 伏笔(暗线)域:从大纲与已写信息建议值得埋设的伏笔。
|
|
3
|
+
*
|
|
4
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
5
|
+
*/
|
|
6
|
+
import type { PromptEntry } from './catalog.ts';
|
|
7
|
+
/** System prompt for foreshadow suggestions. */
|
|
8
|
+
export declare function foreshadowSystemPrompt(): string;
|
|
9
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
10
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 市场域:题材雷达(榜单信号 → 生产底座)、雷达灵感、作品简介。
|
|
3
|
+
*
|
|
4
|
+
* 三份提示词共享同一条纪律:**严禁复用榜单作品的人名/专有设定/简介句子/
|
|
5
|
+
* 完整书名**,只能提炼读者需求、爽点机制与结构机会——市场雷达是拿来
|
|
6
|
+
* 找方向的,不是拿来抄的。
|
|
7
|
+
*
|
|
8
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
9
|
+
*/
|
|
10
|
+
import type { PromptEntry } from './catalog.ts';
|
|
11
|
+
/** 市场雷达系统提示(分析师角色与输出纪律)。 */
|
|
12
|
+
export declare function marketRadarSystemPrompt(): string;
|
|
13
|
+
/** 雷达→灵感:基于市场信号/生产底座/创意简报,生成贴合市场的开书灵感。 */
|
|
14
|
+
export declare function marketIdeaInspirationSystemPrompt(): string;
|
|
15
|
+
/** 作品简介:面向读者的门面(卖点 + 开局钩子,不剧透)。 */
|
|
16
|
+
export declare function blurbSystemPrompt(): string;
|
|
17
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
18
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 开书与大纲域:创意灵感、大纲方案生成、反推总纲(两个来源)。
|
|
3
|
+
*
|
|
4
|
+
* 「反推大纲」与「大纲方案」方向相反(已写→总纲 vs 想法→方案),但同属
|
|
5
|
+
* 大纲资产的生产与再生产,放同一域。
|
|
6
|
+
*
|
|
7
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
8
|
+
*/
|
|
9
|
+
import type { PromptEntry } from './catalog.ts';
|
|
10
|
+
/** 创意灵感:一句话/题材 → 多方向开书灵感。 */
|
|
11
|
+
export declare function ideaInspirationSystemPrompt(): string;
|
|
12
|
+
/**
|
|
13
|
+
* 大纲方案:作者的一句「想法」→ 2-3 个方向差异明显的完整大纲。
|
|
14
|
+
*
|
|
15
|
+
* @param n - 本次要输出的方案数(1-3)。
|
|
16
|
+
*/
|
|
17
|
+
export declare function outlineCandidatesSystemPrompt(n: number): string;
|
|
18
|
+
/** 反推大纲 · 阶段一:分批为每章输出一行「事件摘要」。 */
|
|
19
|
+
export declare function reverseOutlineBatchSystemPrompt(): string;
|
|
20
|
+
/** 反推大纲 · 阶段二:各章事件摘要 → 全书总纲(Markdown)。 */
|
|
21
|
+
export declare function reverseOutlineSystemPrompt(): string;
|
|
22
|
+
/** 反推大纲 · 改编线:从拆章节选反推总纲,作为改编与续写的骨架。 */
|
|
23
|
+
export declare function reverseOutlineFromAdaptationSystemPrompt(): string;
|
|
24
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
25
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 规划域:分卷规划、章节规划(含续写后缀)、自动导演编排。
|
|
3
|
+
*
|
|
4
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
5
|
+
*/
|
|
6
|
+
import type { Volume } from '../protocol.ts';
|
|
7
|
+
import type { PromptEntry } from './catalog.ts';
|
|
8
|
+
/** System prompt for volume planning. */
|
|
9
|
+
export declare function volumeSystemPrompt(): string;
|
|
10
|
+
/** The chapter-planning prompt template. */
|
|
11
|
+
export declare function planSystemPrompt(volumes: Volume[] | undefined): string;
|
|
12
|
+
/**
|
|
13
|
+
* 续写规划的附加要求(拼在 planSystemPrompt 之后)。
|
|
14
|
+
*
|
|
15
|
+
* 与 user 侧的「续写硬性要求」分工:这里管**标题与接续的唯一性**,
|
|
16
|
+
* user 侧管「已发生事件不得重写」与全书进度感知。
|
|
17
|
+
*/
|
|
18
|
+
export declare function planContinuationSuffix(): string;
|
|
19
|
+
/** 自动导演:整本编排/节奏/风险/再平衡建议(不输出正文)。 */
|
|
20
|
+
export declare function directorSystemPrompt(): string;
|
|
21
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
22
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 剧情线域:建议提炼、进度刷新(批量)、健康检查、下一阶段方案。
|
|
3
|
+
*
|
|
4
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
5
|
+
*/
|
|
6
|
+
import type { PromptEntry } from './catalog.ts';
|
|
7
|
+
/** 建议剧情线:基于大纲/卷计划/已写章节/编年录,提炼候选线。 */
|
|
8
|
+
export declare function suggestPlotlinesSystemPrompt(): string;
|
|
9
|
+
/**
|
|
10
|
+
* 剧情线进度刷新(批量)。
|
|
11
|
+
*
|
|
12
|
+
* @param count - 本次要判断的线数。单条时问单线进度,多条时要求逐条判断、
|
|
13
|
+
* name 与输入逐字相同(用于对齐回写,见 plotline-align.ts)。
|
|
14
|
+
*/
|
|
15
|
+
export declare function refreshPlotlinesSystemPrompt(count: number): string;
|
|
16
|
+
/** 剧情健康检查:基于已写章节数/各线状态/编年录,判断是否需要新线及添加时机。 */
|
|
17
|
+
export declare function plotlineHealthSystemPrompt(): string;
|
|
18
|
+
/** 剧情方案:基于健康检查结果设计下一阶段方向与建议新线。 */
|
|
19
|
+
export declare function plotlinePlanSystemPrompt(): string;
|
|
20
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
21
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 润色域:整章去 AI 味润色、局部段落修订。
|
|
3
|
+
*
|
|
4
|
+
* 两者都按分层组装:润色口径与合规红线排最前(永不变),本书红线与写法
|
|
5
|
+
* 资产排后面(只随作者编辑变)——见 prompt-cache.ts。
|
|
6
|
+
*
|
|
7
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
8
|
+
*/
|
|
9
|
+
import type { ProjectState } from '../protocol.ts';
|
|
10
|
+
import type { PromptEntry } from './catalog.ts';
|
|
11
|
+
/** The de-AI-ify polish system prompt (with project writing assets injected). */
|
|
12
|
+
export declare function polishSystemPrompt(project: ProjectState): string;
|
|
13
|
+
/**
|
|
14
|
+
* 局部修订(只改一个自然段)的系统提示。
|
|
15
|
+
*
|
|
16
|
+
* 与整章修订的区别:不套用字数区间、不注入全书资料(大纲/资产/时间线),
|
|
17
|
+
* 只带合规红线、本书红线、反 AI 套话口径与角色卡——局部改写要的是「表达
|
|
18
|
+
* 卫生」,不是重新生成。同样按分层组装(约束口径排最前)。
|
|
19
|
+
*/
|
|
20
|
+
export declare function localRevisionSystemPrompt(project: ProjectState): string;
|
|
21
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
22
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 审稿域:章节审稿(九维)、修订验证、作者复盘、验证模式道藏注入。
|
|
3
|
+
*
|
|
4
|
+
* 审稿是逐章连打的动作,固定层(审稿口径 + 合规红线)排最前、本书层
|
|
5
|
+
* (道藏/资产)排后面——前缀稳定才有机会命中厂商输入缓存(见 prompt-cache.ts)。
|
|
6
|
+
*
|
|
7
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
8
|
+
*/
|
|
9
|
+
import type { ProjectState } from '../protocol.ts';
|
|
10
|
+
import type { PromptEntry } from './catalog.ts';
|
|
11
|
+
/** The review system prompt. */
|
|
12
|
+
export declare function reviewSystemPrompt(project: ProjectState): string;
|
|
13
|
+
/** 验证模式系统提示:修订后逐条核对原意见是否解决,只挑新增 high,不重复挑剔主观项。 */
|
|
14
|
+
export declare function verifySystemPrompt(project: ProjectState): string;
|
|
15
|
+
/**
|
|
16
|
+
* 验证模式下注入道藏。
|
|
17
|
+
*
|
|
18
|
+
* 原实现是 `JSON.stringify(project.bible).slice(0, 3000)`——有两个问题:
|
|
19
|
+
* 1. **腰斩的 JSON 不是 JSON**:`slice` 从中间切断,审稿员会看到语法残缺的
|
|
20
|
+
* 对象(字符串没闭合、数组没结尾),既浪费 token 又可能误读设定。
|
|
21
|
+
* 2. **静默截断设定**:世界规则/角色卡排在后面的字段最先被切掉,而那恰恰是
|
|
22
|
+
* 核对设定冲突最需要的部分。
|
|
23
|
+
*
|
|
24
|
+
* 改为结构化渲染 + 按「世界规则/角色/红线」分配独立预算。
|
|
25
|
+
*/
|
|
26
|
+
export declare function renderBibleForVerify(project: ProjectState): string;
|
|
27
|
+
/** Build the author-review system prompt (narrative structure, not prose). */
|
|
28
|
+
export declare function authorReviewSystemPrompt(): string;
|
|
29
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
30
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 大世界域:结构化设定(境界体系/地理区域/势力分布)的渲染与提炼。
|
|
3
|
+
*
|
|
4
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
5
|
+
*/
|
|
6
|
+
import type { WorldState } from '../protocol.ts';
|
|
7
|
+
import type { PromptEntry } from './catalog.ts';
|
|
8
|
+
/** 把大世界结构化数据渲染成提示词块(境界体系按顺序强约束)。 */
|
|
9
|
+
export declare function renderWorld(world: WorldState | undefined): string;
|
|
10
|
+
/** 大世界提炼:从大纲 + 道藏生成结构化境界体系/区域/势力。 */
|
|
11
|
+
export declare function extractWorldSystemPrompt(): string;
|
|
12
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
13
|
+
export declare const entries: PromptEntry[];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 写作域:正文生成、整章修订、续写补齐的系统提示。
|
|
3
|
+
*
|
|
4
|
+
* ## 分层组装(缓存命中的纪律)
|
|
5
|
+
*
|
|
6
|
+
* 同一本书的连续多次调用里,输入的大部分是重复的,但各块的变化频率差着量级:
|
|
7
|
+
* 固定层(写作硬性要求 + 合规红线)永不变;本书层(道藏/世界/大纲/资产/槽位)
|
|
8
|
+
* 只随作者编辑变;本章层(伏笔/剧情线/骨架/时间线/张力)随创作进度逐章变。
|
|
9
|
+
* 厂商的输入缓存按**前缀**命中——顺序写死在 prompt-cache.ts,调用方只标层。
|
|
10
|
+
*
|
|
11
|
+
* 本文件同时是提示词注册表的域模块之一(见 catalog.ts)。
|
|
12
|
+
*/
|
|
13
|
+
import type { ProjectState } from '../protocol.ts';
|
|
14
|
+
import type { PromptEntry } from './catalog.ts';
|
|
15
|
+
/** Build the writing system prompt (bible + outline + active foreshadows).
|
|
16
|
+
* `targetChars` 来自每章计划(规划时快照,= 设置的每章目标字数);无则退回默认 3500。
|
|
17
|
+
* 字数区间按目标动态生成(±15%,取整到百位),避免系统提示词与设置互相冲突。
|
|
18
|
+
* `lengthRule` 可覆盖第 1 条字数要求(整章修订/改编时按原文长度为准)。 */
|
|
19
|
+
export declare function writeSystemPrompt(project: ProjectState, targetChars?: number, lengthRule?: string, beforeChapter?: number): string;
|
|
20
|
+
/** Build the rewrite system prompt (fix review issues / instructions). */
|
|
21
|
+
export declare function rewriteSystemPrompt(project: ProjectState, targetChars?: number, beforeChapter?: number): string;
|
|
22
|
+
/**
|
|
23
|
+
* 正文续写补齐的附加要求(拼在 writeSystemPrompt 之后)。
|
|
24
|
+
*
|
|
25
|
+
* 触发场景:生成的正文不足目标字数 90% 时,最多补两轮。
|
|
26
|
+
*/
|
|
27
|
+
export declare function bodyContinuationSuffix(): string;
|
|
28
|
+
/** 本域提示词登记(注册表消费)。 */
|
|
29
|
+
export declare const entries: PromptEntry[];
|
package/lib/types/protocol.d.ts
CHANGED
|
@@ -1494,6 +1494,8 @@ export interface LlmUsageBucket {
|
|
|
1494
1494
|
inputTokens: number;
|
|
1495
1495
|
outputTokens: number;
|
|
1496
1496
|
reasoningTokens: number;
|
|
1497
|
+
/** 命中缓存的输入用量(属于 inputTokens 的一部分,不额外相加)。 */
|
|
1498
|
+
cacheReadTokens?: number;
|
|
1497
1499
|
elapsedMs: number;
|
|
1498
1500
|
}
|
|
1499
1501
|
/** 本次运行(进程内,重启归零)的 LLM 用量汇总。 */
|
|
@@ -1504,6 +1506,8 @@ export interface LlmUsageSummary {
|
|
|
1504
1506
|
outputTokens: number;
|
|
1505
1507
|
reasoningTokens: number;
|
|
1506
1508
|
totalTokens: number;
|
|
1509
|
+
/** 命中缓存的输入用量(属于 inputTokens 的一部分,不额外相加)。 */
|
|
1510
|
+
cacheReadTokens?: number;
|
|
1507
1511
|
elapsedMs: number;
|
|
1508
1512
|
/** 供应商未上报 usage 的调用次数(用于说明数据为何不完整)。 */
|
|
1509
1513
|
callsWithoutUsage: number;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@waterwx/dsh-novel-forge",
|
|
3
3
|
"description": "AI 编译纯文本小说工作台 for the dsh web GUI: import a novel outline (docx/text), plan volumes & chapters with LLM, generate chapter by chapter (3000-4000 chars each), auto AI review & book audit, and export the full book as Markdown/TXT into your chosen output folder.",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.3.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "waterwx",
|
|
7
7
|
"repository": {
|