@waterwx/dsh-novel-forge 0.1.0 → 1.0.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.
- package/README.md +162 -111
- package/cordis.patch.yml +1 -1
- package/lib/client.js +54165 -2666
- package/lib/index.js +11895 -2211
- package/lib/types/ai-scan.d.ts +36 -0
- package/lib/types/assets.d.ts +19 -4
- package/lib/types/assistant.d.ts +6 -0
- package/lib/types/author-assets.d.ts +25 -0
- package/lib/types/bookshelf.d.ts +8 -1
- package/lib/types/client/api.d.ts +235 -3
- package/lib/types/client/index.d.ts +1 -1
- package/lib/types/client/llmLive.d.ts +33 -0
- package/lib/types/client/locales.d.ts +101 -28
- package/lib/types/client/panel/AdaptModeView.d.ts +5 -0
- package/lib/types/client/panel/AssetsTab.d.ts +6 -1
- package/lib/types/client/panel/AuthorAssetsView.d.ts +4 -0
- package/lib/types/client/panel/AuthorHome.d.ts +34 -0
- package/lib/types/client/panel/BookAnalysisView.d.ts +4 -0
- package/lib/types/client/panel/CreateBookView.d.ts +13 -0
- package/lib/types/client/panel/DirectorView.d.ts +7 -0
- package/lib/types/client/panel/FlowGuide.d.ts +22 -0
- package/lib/types/client/panel/GlobalAssetLibraryView.d.ts +4 -0
- package/lib/types/client/panel/IdeaInspirationView.d.ts +6 -0
- package/lib/types/client/panel/ImportModal.d.ts +7 -0
- package/lib/types/client/panel/KnowledgeBaseView.d.ts +4 -0
- package/lib/types/client/panel/LiveFeedLog.d.ts +5 -0
- package/lib/types/client/panel/MangaRoleLibrary.d.ts +20 -0
- package/lib/types/client/panel/MangaWorkspace.d.ts +12 -0
- package/lib/types/client/panel/MarketRadarView.d.ts +5 -0
- package/lib/types/client/panel/ModelManager.d.ts +14 -0
- package/lib/types/client/panel/ModelPicker.d.ts +11 -0
- package/lib/types/client/panel/NovelPanel.d.ts +1 -1
- package/lib/types/client/panel/ProgressConsole.d.ts +17 -0
- package/lib/types/client/panel/ProgressHomeView.d.ts +5 -0
- package/lib/types/client/panel/PropLibrary.d.ts +8 -0
- package/lib/types/client/panel/ReaderView.d.ts +8 -0
- package/lib/types/client/panel/ReasoningSection.d.ts +10 -0
- package/lib/types/client/panel/RunPanel.d.ts +5 -0
- package/lib/types/client/panel/SceneLibrary.d.ts +16 -0
- package/lib/types/client/panel/SettingsView.d.ts +16 -0
- package/lib/types/client/panel/ShelfView.d.ts +15 -0
- package/lib/types/client/panel/StoryboardTab.d.ts +19 -0
- package/lib/types/client/panel/StyleCard.d.ts +8 -0
- package/lib/types/client/panel/StyleGallery.d.ts +1 -0
- package/lib/types/client/panel/WorldTab.d.ts +10 -0
- package/lib/types/client/panel/helpers.d.ts +10 -0
- package/lib/types/client/panel/views.d.ts +77 -0
- package/lib/types/client/run-status.d.ts +19 -0
- package/lib/types/client/text.d.ts +9 -0
- package/lib/types/comic-presets.d.ts +12 -0
- package/lib/types/engine.d.ts +250 -8
- package/lib/types/global-assets.d.ts +6 -0
- package/lib/types/index.d.ts +24 -2
- package/lib/types/llm-live.d.ts +44 -0
- package/lib/types/manga-genre-rules.d.ts +22 -0
- package/lib/types/market-radar-scan.d.ts +19 -0
- package/lib/types/market-radar-sources.d.ts +31 -0
- package/lib/types/novel-context.d.ts +80 -0
- package/lib/types/prompt-utils.d.ts +35 -0
- package/lib/types/prompting.d.ts +35 -0
- package/lib/types/protocol.d.ts +1453 -5
- package/lib/types/review-policy.d.ts +97 -0
- package/lib/types/run.d.ts +32 -0
- package/lib/types/shot-language.d.ts +46 -0
- package/lib/types/src/ai-scan.d.ts +36 -0
- package/lib/types/src/assets.d.ts +37 -0
- package/lib/types/src/assistant.d.ts +45 -0
- package/lib/types/src/author-assets.d.ts +25 -0
- package/lib/types/src/bookshelf.d.ts +42 -0
- package/lib/types/src/client/api.d.ts +234 -0
- package/lib/types/src/client/docx.d.ts +15 -0
- package/lib/types/src/client/index.d.ts +14 -0
- package/lib/types/src/client/locales.d.ts +212 -0
- package/lib/types/src/client/mount.d.ts +9 -0
- package/lib/types/src/client/panel/AdaptModeView.d.ts +5 -0
- package/lib/types/src/client/panel/AssetsTab.d.ts +12 -0
- package/lib/types/src/client/panel/AssistantTab.d.ts +7 -0
- package/lib/types/src/client/panel/AuthorAssetsView.d.ts +4 -0
- package/lib/types/src/client/panel/AuthorHome.d.ts +32 -0
- package/lib/types/src/client/panel/BookshelfBar.d.ts +11 -0
- package/lib/types/src/client/panel/CreateBookView.d.ts +9 -0
- package/lib/types/src/client/panel/FlowGuide.d.ts +22 -0
- package/lib/types/src/client/panel/GlobalAssetLibraryView.d.ts +4 -0
- package/lib/types/src/client/panel/ImportModal.d.ts +7 -0
- package/lib/types/src/client/panel/MangaRoleLibrary.d.ts +20 -0
- package/lib/types/src/client/panel/MangaWorkspace.d.ts +12 -0
- package/lib/types/src/client/panel/ModelManager.d.ts +14 -0
- package/lib/types/src/client/panel/NovelPanel.d.ts +13 -0
- package/lib/types/src/client/panel/ProgressConsole.d.ts +17 -0
- package/lib/types/src/client/panel/ProgressHomeView.d.ts +5 -0
- package/lib/types/src/client/panel/PropLibrary.d.ts +8 -0
- package/lib/types/src/client/panel/ReaderView.d.ts +8 -0
- package/lib/types/src/client/panel/ReasoningSection.d.ts +10 -0
- package/lib/types/src/client/panel/RunPanel.d.ts +5 -0
- package/lib/types/src/client/panel/SceneLibrary.d.ts +16 -0
- package/lib/types/src/client/panel/SettingsView.d.ts +16 -0
- package/lib/types/src/client/panel/ShelfView.d.ts +15 -0
- package/lib/types/src/client/panel/StoryboardTab.d.ts +19 -0
- package/lib/types/src/client/panel/StyleCard.d.ts +8 -0
- package/lib/types/src/client/panel/StyleGallery.d.ts +1 -0
- package/lib/types/src/client/panel/WorldTab.d.ts +10 -0
- package/lib/types/src/client/panel/controller.d.ts +19 -0
- package/lib/types/src/client/panel/helpers.d.ts +18 -0
- package/lib/types/src/client/panel/views.d.ts +77 -0
- package/lib/types/src/client/sidebar-entry.d.ts +13 -0
- package/lib/types/src/client/text.d.ts +9 -0
- package/lib/types/src/comic-presets.d.ts +12 -0
- package/lib/types/src/docx.d.ts +19 -0
- package/lib/types/src/engine.d.ts +402 -0
- package/lib/types/src/index.d.ts +79 -0
- package/lib/types/src/manga-genre-rules.d.ts +22 -0
- package/lib/types/src/novel-context.d.ts +80 -0
- package/lib/types/src/prompt-utils.d.ts +35 -0
- package/lib/types/src/protocol.d.ts +2176 -0
- package/lib/types/src/review-policy.d.ts +97 -0
- package/lib/types/src/routes.d.ts +29 -0
- package/lib/types/src/run.d.ts +32 -0
- package/lib/types/src/shot-language.d.ts +46 -0
- package/lib/types/src/story-beat-language.d.ts +35 -0
- package/lib/types/src/style-library.d.ts +33 -0
- package/lib/types/story-beat-language.d.ts +35 -0
- package/lib/types/style-library.d.ts +33 -0
- package/package.json +57 -42
- package/scripts/patch-schemastery.mjs +47 -0
- package/src/ai-scan.ts +179 -0
- package/src/assets.ts +1774 -518
- package/src/assistant.ts +915 -547
- package/src/author-assets.ts +147 -0
- package/src/bookshelf.ts +32 -2
- package/src/client/api.ts +666 -254
- package/src/client/index.ts +3 -1
- package/src/client/llmLive.ts +101 -0
- package/src/client/locales.ts +178 -31
- package/src/client/mount.tsx +1 -1
- package/src/client/panel/AdaptModeView.tsx +535 -0
- package/src/client/panel/AssetsTab.tsx +168 -51
- package/src/client/panel/AssistantTab.tsx +339 -188
- package/src/client/panel/AuthorAssetsView.tsx +208 -0
- package/src/client/panel/AuthorHome.tsx +234 -0
- package/src/client/panel/BookAnalysisView.tsx +60 -0
- package/src/client/panel/BookshelfBar.tsx +63 -9
- package/src/client/panel/CreateBookView.tsx +371 -0
- package/src/client/panel/DirectorView.tsx +200 -0
- package/src/client/panel/GlobalAssetLibraryView.tsx +172 -0
- package/src/client/panel/IdeaInspirationView.tsx +71 -0
- package/src/client/panel/ImportModal.tsx +303 -0
- package/src/client/panel/KnowledgeBaseView.tsx +73 -0
- package/src/client/panel/LiveFeedLog.tsx +67 -0
- package/src/client/panel/MarketRadarView.tsx +374 -0
- package/src/client/panel/ModelManager.tsx +205 -0
- package/src/client/panel/NovelPanel.tsx +4713 -990
- package/src/client/panel/ProgressConsole.tsx +63 -0
- package/src/client/panel/ProgressHomeView.tsx +87 -0
- package/src/client/panel/ReaderView.tsx +306 -0
- package/src/client/panel/ReasoningSection.tsx +31 -0
- package/src/client/panel/RunPanel.tsx +204 -0
- package/src/client/panel/SettingsView.tsx +265 -0
- package/src/client/panel/ShelfView.tsx +242 -0
- package/src/client/panel/WorldTab.tsx +202 -0
- package/src/client/panel/helpers.ts +50 -0
- package/src/client/panel/panel.module.css +4325 -526
- package/src/client/panel/views.tsx +346 -0
- package/src/client/run-status.ts +100 -0
- package/src/client/sidebar-entry.ts +1 -1
- package/src/client/text.ts +28 -0
- package/src/engine.ts +4230 -1019
- package/src/global-assets.ts +59 -0
- package/src/index.ts +123 -9
- package/src/llm-live.ts +68 -0
- package/src/market-radar-scan.ts +41 -0
- package/src/market-radar-sources.ts +173 -0
- package/src/novel-context.ts +287 -0
- package/src/prompt-utils.ts +73 -0
- package/src/prompting.ts +159 -0
- package/src/protocol.ts +1998 -539
- package/src/review-policy.ts +161 -0
- package/src/routes.ts +3277 -955
- package/src/run.ts +338 -0
- package/lib/client.js.map +0 -1
- package/lib/index.js.map +0 -1
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 审稿规则注册表
|
|
3
|
+
*
|
|
4
|
+
* 生成用 compact 模式(核心规则),审稿用 full 模式(全部规则),
|
|
5
|
+
* 消除 reviewSystemPrompt 内嵌规则与 renderAllAssets() 两套打架的问题。
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/** 通用写作资产规则(兼容 ProjectAssets 中的各类规则) */
|
|
9
|
+
export interface WritingRule {
|
|
10
|
+
name: string
|
|
11
|
+
description: string
|
|
12
|
+
type?: string
|
|
13
|
+
enabled?: boolean
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface ReviewRule {
|
|
17
|
+
id: string
|
|
18
|
+
/** 规则维度 */
|
|
19
|
+
dimension: 'character' | 'setting' | 'redline' | 'writing' | 'pacing' | 'logic' | 'anti-ai' | 'presentation' | 'compliance'
|
|
20
|
+
/** 严重度 */
|
|
21
|
+
severity: 'high' | 'medium' | 'low'
|
|
22
|
+
/** 规则类型:forbidden=禁止类(命中即问题),encourage=鼓励类(不命中不算错) */
|
|
23
|
+
type: 'forbidden' | 'encourage'
|
|
24
|
+
/** 规则描述 */
|
|
25
|
+
description: string
|
|
26
|
+
/** 是否启用 */
|
|
27
|
+
enabled: boolean
|
|
28
|
+
/** 作用域 */
|
|
29
|
+
scope: Array<'writing' | 'review' | 'polish' | 'all'>
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** 内置审稿维度(结构化评分用) */
|
|
33
|
+
export const REVIEW_DIMENSIONS = [
|
|
34
|
+
{ id: 'character', name: '人设一致性', weight: 0.2 },
|
|
35
|
+
{ id: 'setting', name: '设定一致性', weight: 0.15 },
|
|
36
|
+
{ id: 'redline', name: '红线检查', weight: 0.15 },
|
|
37
|
+
{ id: 'writing', name: '文笔质量', weight: 0.15 },
|
|
38
|
+
{ id: 'pacing', name: '节奏与爽点', weight: 0.1 },
|
|
39
|
+
{ id: 'logic', name: '逻辑漏洞', weight: 0.1 },
|
|
40
|
+
{ id: 'anti-ai', name: '反 AI 规则', weight: 0.05 },
|
|
41
|
+
{ id: 'presentation', name: '呈现方式', weight: 0.05 },
|
|
42
|
+
{ id: 'compliance', name: '内容合规', weight: 0.05 },
|
|
43
|
+
] as const
|
|
44
|
+
|
|
45
|
+
export type ReviewDimensionId = typeof REVIEW_DIMENSIONS[number]['id']
|
|
46
|
+
|
|
47
|
+
/** 维度结构化评分 */
|
|
48
|
+
export interface DimensionScore {
|
|
49
|
+
dimension: ReviewDimensionId
|
|
50
|
+
score: number // 0-100
|
|
51
|
+
note: string
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* 渲染审稿规则(compact 或 full 模式)
|
|
56
|
+
*
|
|
57
|
+
* compact: 只渲染禁止类 + high 严重度(用于生成时的约束)
|
|
58
|
+
* full: 渲染全部启用规则(用于审稿时的检查清单)
|
|
59
|
+
*/
|
|
60
|
+
export function renderReviewRules(
|
|
61
|
+
assets: WritingRule[] | undefined,
|
|
62
|
+
mode: 'compact' | 'full' = 'full',
|
|
63
|
+
): string {
|
|
64
|
+
const lines: string[] = []
|
|
65
|
+
|
|
66
|
+
// 内置核心规则(所有模式都注入)
|
|
67
|
+
const coreRules = [
|
|
68
|
+
{ dimension: 'character', desc: '角色行为符合角色卡设定(性格/目标/知情度/说话方式)' },
|
|
69
|
+
{ dimension: 'setting', desc: '金手指规则、战力体系、世界观与道藏一致' },
|
|
70
|
+
{ dimension: 'redline', desc: '不触犯本书写作红线' },
|
|
71
|
+
{ dimension: 'compliance', desc: '不触犯内容合规红线(最高优先级)' },
|
|
72
|
+
{ dimension: 'logic', desc: '无前后矛盾、时间线错误、对话失真' },
|
|
73
|
+
{ dimension: 'presentation', desc: '不纯内心推理铺陈;反派有行动力;重要配角有辨识度' },
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
if (mode === 'compact') {
|
|
77
|
+
lines.push('写作约束(核心规则):')
|
|
78
|
+
for (const r of coreRules) {
|
|
79
|
+
lines.push(`- ${r.desc}`)
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
lines.push('审稿维度(逐条审查):')
|
|
83
|
+
REVIEW_DIMENSIONS.forEach((d, i) => {
|
|
84
|
+
const core = coreRules.find(c => c.dimension === d.id)
|
|
85
|
+
lines.push(`${i + 1}. ${d.name}:${core?.desc ?? '按维度标准审查'}`)
|
|
86
|
+
})
|
|
87
|
+
lines.push('')
|
|
88
|
+
lines.push('反 AI 规则:逐条核对下方资产规则,命中即列为问题。')
|
|
89
|
+
lines.push('呈现方式:整章是否纯内心推理铺陈(无对话/无对抗);反派是否纯背景板;重要配角是否无名标签化——命中即列为问题。')
|
|
90
|
+
lines.push('内容合规(最高优先级):逐条核对合规红线,任何一条命中(含影射、暗示、详细描写)必须列为 high。')
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// 注入用户自定义资产规则
|
|
94
|
+
if (assets !== undefined && assets.length > 0) {
|
|
95
|
+
const forbidden = assets.filter(a => a.type === 'forbidden' || a.type === 'rule')
|
|
96
|
+
const encourage = assets.filter(a => a.type === 'encourage' || a.type === 'style')
|
|
97
|
+
if (forbidden.length > 0) {
|
|
98
|
+
lines.push('')
|
|
99
|
+
lines.push('禁止类规则(命中即问题):')
|
|
100
|
+
for (const a of forbidden) {
|
|
101
|
+
lines.push(`- ${a.name}:${a.description}`)
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (encourage.length > 0 && mode === 'full') {
|
|
105
|
+
lines.push('')
|
|
106
|
+
lines.push('鼓励类规则(不命中不算错,作为低优先级建议):')
|
|
107
|
+
for (const a of encourage) {
|
|
108
|
+
lines.push(`- ${a.name}:${a.description}`)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return lines.join('\n')
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* 从审稿 issues 中按维度统计
|
|
118
|
+
* 用于结构化评分和 UI 展示。
|
|
119
|
+
*/
|
|
120
|
+
export function groupIssuesByDimension(
|
|
121
|
+
issues: Array<{ severity: string; item: string; dimension?: string }>,
|
|
122
|
+
): Record<string, Array<{ severity: string; item: string }>> {
|
|
123
|
+
const result: Record<string, Array<{ severity: string; item: string }>> = {}
|
|
124
|
+
for (const issue of issues) {
|
|
125
|
+
const dim = issue.dimension ?? inferDimension(issue.item)
|
|
126
|
+
if (result[dim] === undefined) result[dim] = []
|
|
127
|
+
result[dim]!.push({ severity: issue.severity, item: issue.item })
|
|
128
|
+
}
|
|
129
|
+
return result
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** 根据问题描述推断维度(兼容旧报告,没有 dimension 字段时用) */
|
|
133
|
+
function inferDimension(item: string): ReviewDimensionId {
|
|
134
|
+
if (/人设|角色|性格|口吻|知情|OOC/.test(item)) return 'character'
|
|
135
|
+
if (/设定|世界观|战力|金手指|规则|道藏/.test(item)) return 'setting'
|
|
136
|
+
if (/红线|后宫|擦边|碾压|圣母/.test(item)) return 'redline'
|
|
137
|
+
if (/语病|翻译腔|套话|文笔|流水账|AI/.test(item)) return 'writing'
|
|
138
|
+
if (/节奏|拖沓|灌水|爽点|钩子|悬念/.test(item)) return 'pacing'
|
|
139
|
+
if (/矛盾|时间线|逻辑|对话失真/.test(item)) return 'logic'
|
|
140
|
+
if (/合规|敏感|色情|暴力|政治|未成年/.test(item)) return 'compliance'
|
|
141
|
+
if (/内心推理|背景板|标签化|瘦高个|灰衣人/.test(item)) return 'presentation'
|
|
142
|
+
return 'writing'
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* 计算维度加权总分
|
|
147
|
+
* 用于审稿报告的结构化评分。
|
|
148
|
+
*/
|
|
149
|
+
export function calculateWeightedScore(
|
|
150
|
+
dimensions: DimensionScore[],
|
|
151
|
+
): number {
|
|
152
|
+
let total = 0
|
|
153
|
+
let weightSum = 0
|
|
154
|
+
for (const d of dimensions) {
|
|
155
|
+
const def = REVIEW_DIMENSIONS.find(x => x.id === d.dimension)
|
|
156
|
+
const weight = def?.weight ?? 0.1
|
|
157
|
+
total += d.score * weight
|
|
158
|
+
weightSum += weight
|
|
159
|
+
}
|
|
160
|
+
return weightSum > 0 ? Math.round(total / weightSum) : 60
|
|
161
|
+
}
|