@waterwx/dsh-novel-forge 1.10.1 → 2.0.1-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 +8 -3
- package/assets/styles/guoman-2d-gufeng.webp +0 -0
- package/assets/styles/guoman-3d-tianyuan.webp +0 -0
- package/assets/styles/guoman-3d-xuanhuan.webp +0 -0
- package/assets/styles/hyperreal-3d.webp +0 -0
- package/assets/styles/sandiao-qban.webp +0 -0
- package/assets/styles/urban-lightreal-3d.webp +0 -0
- package/lib/client.js +3456 -2133
- package/lib/index.js +1975 -438
- package/lib/types/ai-scan.d.ts +36 -0
- package/lib/types/assets.d.ts +1 -1
- package/lib/types/client/api.d.ts +8 -1
- package/lib/types/client/index.d.ts +1 -1
- package/lib/types/client/panel/AuthorHome.d.ts +4 -2
- package/lib/types/client/panel/FlowGuide.d.ts +6 -5
- package/lib/types/client/panel/MangaRoleLibrary.d.ts +3 -1
- package/lib/types/client/panel/MangaWorkspace.d.ts +2 -5
- package/lib/types/client/panel/PropLibrary.d.ts +8 -0
- package/lib/types/client/panel/SceneLibrary.d.ts +3 -1
- package/lib/types/client/panel/SettingsView.d.ts +4 -2
- package/lib/types/engine.d.ts +50 -21
- package/lib/types/index.d.ts +2 -2
- package/lib/types/manga-genre-rules.d.ts +22 -0
- package/lib/types/novel-context.d.ts +80 -0
- package/lib/types/prompt-utils.d.ts +35 -0
- package/lib/types/protocol.d.ts +104 -12
- package/lib/types/review-policy.d.ts +97 -0
- package/lib/types/style-library.d.ts +3 -3
- package/package.json +21 -24
- package/src/ai-scan.ts +179 -0
- package/src/assets.ts +353 -9
- package/src/client/api.ts +11 -1
- package/src/client/index.ts +1 -1
- package/src/client/mount.tsx +1 -1
- package/src/client/panel/AdaptModeView.tsx +2 -2
- package/src/client/panel/AssistantTab.tsx +1 -1
- package/src/client/panel/AuthorHome.tsx +5 -3
- package/src/client/panel/FlowGuide.tsx +15 -14
- package/src/client/panel/MangaRoleLibrary.tsx +1002 -810
- package/src/client/panel/MangaWorkspace.tsx +715 -359
- package/src/client/panel/ModelManager.tsx +1 -1
- package/src/client/panel/NovelPanel.tsx +4620 -4655
- package/src/client/panel/PropLibrary.tsx +175 -0
- package/src/client/panel/SceneLibrary.tsx +453 -396
- package/src/client/panel/SettingsView.tsx +24 -30
- package/src/client/panel/StoryboardTab.tsx +6 -0
- package/src/client/panel/panel.module.css +165 -4
- package/src/engine.ts +796 -286
- package/src/index.ts +9 -7
- package/src/manga-genre-rules.ts +87 -0
- package/src/novel-context.ts +287 -0
- package/src/prompt-utils.ts +73 -0
- package/src/protocol.ts +2233 -2148
- package/src/review-policy.ts +161 -0
- package/src/routes.ts +3419 -3359
- package/src/style-library.ts +32 -26
package/lib/types/protocol.d.ts
CHANGED
|
@@ -47,6 +47,10 @@ export declare const NOVEL_API: {
|
|
|
47
47
|
readonly manhuaPlans: "/api/dsh-novel-forge/manhua/plans";
|
|
48
48
|
/** 漫剧角色库:从分镜提名(规则+LLM两段式)/ 建卡 / 更新 / 删除 / 形象锚点 / 精修提示词。 */
|
|
49
49
|
readonly mangaRoles: "/api/dsh-novel-forge/manga/roles";
|
|
50
|
+
/** 漫剧道具库:从已写章节提炼常驻道具(跨镜头需一致)/ 保存清单。 */
|
|
51
|
+
readonly mangaProps: "/api/dsh-novel-forge/manga/props";
|
|
52
|
+
/** 导出「即梦素材包」落盘到资产库 manga-assets/素材包/。 */
|
|
53
|
+
readonly exportPackage: "/api/dsh-novel-forge/manga/export-package";
|
|
50
54
|
/** 分镜·编剧级:单章 → 剧情骨架(节拍链)。 */
|
|
51
55
|
readonly storyboardSkeleton: "/api/dsh-novel-forge/storyboard/skeleton";
|
|
52
56
|
/** 分镜·导演级:骨架 → 分镜表(镜头级)。 */
|
|
@@ -75,7 +79,7 @@ export declare const NOVEL_API: {
|
|
|
75
79
|
readonly charactersRefresh: "/api/dsh-novel-forge/characters/refresh";
|
|
76
80
|
/** 事实库回填:对历史已生成章节批量抽取事实(旧章节无事实记录时用)。 */
|
|
77
81
|
readonly factsBackfill: "/api/dsh-novel-forge/facts/backfill";
|
|
78
|
-
/**
|
|
82
|
+
/** 道藏局部修补(如世界观规则编辑)。 */
|
|
79
83
|
readonly biblePatch: "/api/dsh-novel-forge/bible/patch";
|
|
80
84
|
/** 小说简介:生成(AI)/补全(AI)/保存。 */
|
|
81
85
|
readonly blurb: "/api/dsh-novel-forge/blurb";
|
|
@@ -287,9 +291,9 @@ export interface StoryboardShot {
|
|
|
287
291
|
camera: CameraMoveId[];
|
|
288
292
|
/** 构图(可选,枚举 id)。 */
|
|
289
293
|
composition?: CompositionId;
|
|
290
|
-
/**
|
|
294
|
+
/** 时长(秒,即梦白名单:5/6/7/8/10)。 */
|
|
291
295
|
duration: number;
|
|
292
|
-
/** 画面内容:角色动作 + 表情 +
|
|
296
|
+
/** 画面内容:角色动作 + 表情 + 服装/标志物 + 主体位置。 */
|
|
293
297
|
visual: string;
|
|
294
298
|
/** 台词/旁白(无则空字符串)。 */
|
|
295
299
|
line: string;
|
|
@@ -305,6 +309,10 @@ export interface StoryboardShot {
|
|
|
305
309
|
characters?: string[];
|
|
306
310
|
/** 本镜头已绑定漫剧卡的 id(定妆图引用,供出图/生视频时按卡取参考图)。 */
|
|
307
311
|
mangaRoleIds?: string[];
|
|
312
|
+
/** 即梦自然语言运镜描述(如「镜头从中景缓慢推进到近景」),提示词层直接使用,无需再转换。 */
|
|
313
|
+
jimengCamera?: string;
|
|
314
|
+
/** 本镜参考图 id 列表(角色定妆图+场景图),即梦图生视频时逐条投喂。 */
|
|
315
|
+
referenceImageIds?: string[];
|
|
308
316
|
}
|
|
309
317
|
/** 分镜·导演级:单章分镜表。 */
|
|
310
318
|
export interface StoryboardTable {
|
|
@@ -339,6 +347,14 @@ export interface StoryboardPrompt {
|
|
|
339
347
|
text: string;
|
|
340
348
|
/** 本镜头绑定的漫剧卡 id(定妆图引用:出图/生视频时按卡取 imageUrl/立绘)。 */
|
|
341
349
|
mangaRoleIds?: string[];
|
|
350
|
+
/** Seedance 专用:运镜方式(推/拉/摇/移/跟/升降/固定,含具体起止)。 */
|
|
351
|
+
camera?: string;
|
|
352
|
+
/** Seedance 专用:运动幅度(轻微/中等/强烈)。 */
|
|
353
|
+
motion?: 'low' | 'medium' | 'high';
|
|
354
|
+
/** 负面提示词(即梦末尾追加:不要文字/水印/变形/多手/多指等)。 */
|
|
355
|
+
negativePrompt?: string;
|
|
356
|
+
/** 本镜头场景名(绑定场景底图参考)。 */
|
|
357
|
+
sceneName?: string;
|
|
342
358
|
}
|
|
343
359
|
/** 分镜持久化:单章的分镜产出(骨架 + 分镜表 + 视频提示词,可分别存在)。 */
|
|
344
360
|
export interface ChapterStoryboard {
|
|
@@ -372,6 +388,8 @@ export interface MangaPlan {
|
|
|
372
388
|
styleId: string;
|
|
373
389
|
/** 可选滤镜风格 id(style-library 中 stackable 风格)。 */
|
|
374
390
|
filterId?: string;
|
|
391
|
+
/** 可选题材(玄幻/武侠/二次元/都市/科幻...),注入对应题材生成规则。 */
|
|
392
|
+
genre?: string;
|
|
375
393
|
/** 是否激活(分镜/角色图生成时使用)。 */
|
|
376
394
|
active: boolean;
|
|
377
395
|
createdAt: string;
|
|
@@ -386,6 +404,8 @@ export interface MangaPlansRequest {
|
|
|
386
404
|
styleId?: string;
|
|
387
405
|
/** create:可选滤镜风格 id。 */
|
|
388
406
|
filterId?: string;
|
|
407
|
+
/** create:题材(注入对应题材规则)。 */
|
|
408
|
+
genre?: string;
|
|
389
409
|
/** remove/activate:方案 id。 */
|
|
390
410
|
id?: string;
|
|
391
411
|
}
|
|
@@ -413,6 +433,8 @@ export interface MangaRoleCard {
|
|
|
413
433
|
traits: string[];
|
|
414
434
|
/** 1-2 个辨识度外貌点。 */
|
|
415
435
|
appearance: string;
|
|
436
|
+
/** 角色定妆级别:protagonist主角(完整四件套) / supporting配角(仅立绘) / extra路人(不做定妆)。默认 protagonist。 */
|
|
437
|
+
tier?: 'protagonist' | 'supporting' | 'extra';
|
|
416
438
|
/** 3-5 个关键剧情节点。 */
|
|
417
439
|
keyScenes: string[];
|
|
418
440
|
/** 上场集数(分镜提名导入时记录)。 */
|
|
@@ -449,6 +471,8 @@ export interface MangaRoleCandidate {
|
|
|
449
471
|
matchedRoleName?: string;
|
|
450
472
|
/** not_in_library 时给出建议:backfill=正文有该称谓但小说库漏提炼(回小说库补);manga_new=漫剧新增角色(直接建卡)。 */
|
|
451
473
|
novelHint?: 'backfill' | 'manga_new';
|
|
474
|
+
/** 智能分级:protagonist=主角(必做定妆)、supporting=配角(建议做定妆)、extra=路人/功能性(默认不导入,折叠显示)。 */
|
|
475
|
+
tier?: 'protagonist' | 'supporting' | 'extra';
|
|
452
476
|
/** 采纳时预填的漫剧卡建议。 */
|
|
453
477
|
suggested: {
|
|
454
478
|
name: string;
|
|
@@ -463,7 +487,7 @@ export interface MangaRoleCandidate {
|
|
|
463
487
|
}
|
|
464
488
|
/** POST /manga/roles 请求:漫剧角色库操作。 */
|
|
465
489
|
export interface MangaRolesRequest {
|
|
466
|
-
op: 'nominate' | 'adopt' | 'update' | 'remove' | 'visual' | 'promptKit' | 'image' | 'removeImage' | 'imageGenerate' | 'mode';
|
|
490
|
+
op: 'nominate' | 'adopt' | 'update' | 'remove' | 'visual' | 'promptKit' | 'image' | 'removeImage' | 'imageGenerate' | 'mode' | 'autoGenerate' | 'openAssets';
|
|
467
491
|
/** op='mode':短剧精简模式开关。 */
|
|
468
492
|
shortDramaMode?: boolean;
|
|
469
493
|
/** op='nominate':从哪章分镜提名角色。 */
|
|
@@ -484,6 +508,18 @@ export interface MangaRolesRequest {
|
|
|
484
508
|
style?: string;
|
|
485
509
|
/** op='imageGenerate':生图模型库条目 id(缺省用启用条目)。 */
|
|
486
510
|
modelId?: string;
|
|
511
|
+
/** op='autoGenerate' 时返回一键生成结果。 */
|
|
512
|
+
autoGenerate?: {
|
|
513
|
+
chapterNo: number;
|
|
514
|
+
skeletonBeats: number;
|
|
515
|
+
shotCount: number;
|
|
516
|
+
promptCount: number;
|
|
517
|
+
importedRoles: number;
|
|
518
|
+
needMakeupRoles: number;
|
|
519
|
+
extraRoles: number;
|
|
520
|
+
pendingCandidates: number;
|
|
521
|
+
pendingRoleNames: string[];
|
|
522
|
+
};
|
|
487
523
|
}
|
|
488
524
|
/** POST /manga/roles 响应。 */
|
|
489
525
|
export interface MangaRolesResponse {
|
|
@@ -498,6 +534,18 @@ export interface MangaRolesResponse {
|
|
|
498
534
|
imageUrl?: string;
|
|
499
535
|
/** op='mode' 时的短剧精简模式状态。 */
|
|
500
536
|
shortDramaMode?: boolean;
|
|
537
|
+
/** op='autoGenerate' 时返回一键生成结果。 */
|
|
538
|
+
autoGenerate?: {
|
|
539
|
+
chapterNo: number;
|
|
540
|
+
skeletonBeats: number;
|
|
541
|
+
shotCount: number;
|
|
542
|
+
promptCount: number;
|
|
543
|
+
importedRoles: number;
|
|
544
|
+
needMakeupRoles: number;
|
|
545
|
+
extraRoles: number;
|
|
546
|
+
pendingCandidates: number;
|
|
547
|
+
pendingRoleNames: string[];
|
|
548
|
+
};
|
|
501
549
|
}
|
|
502
550
|
/** Chapter lifecycle states (the writing pipeline's state machine). */
|
|
503
551
|
export type ChapterStatus = 'pending' | 'generating' | 'written' | 'reviewing' | 'approved' | 'rejected' | 'error';
|
|
@@ -554,10 +602,14 @@ export interface AuthorReview {
|
|
|
554
602
|
/** 复盘时间。 */
|
|
555
603
|
reviewedAt: string;
|
|
556
604
|
}
|
|
605
|
+
/** 审稿维度(结构化定位问题类别;与 review-policy.ts 的 REVIEW_DIMENSIONS 对齐)。 */
|
|
606
|
+
export type ReviewDimension = 'character' | 'setting' | 'redline' | 'writing' | 'pacing' | 'logic' | 'anti-ai' | 'presentation' | 'compliance';
|
|
557
607
|
/** One review finding. */
|
|
558
608
|
export interface ReviewIssue {
|
|
559
609
|
/** Severity: high = must fix, medium = should fix, low = suggestion. */
|
|
560
610
|
severity: 'high' | 'medium' | 'low';
|
|
611
|
+
/** 问题维度(可选;缺省由前端按 item 推断)。 */
|
|
612
|
+
dimension?: ReviewDimension;
|
|
561
613
|
/** What the problem is. */
|
|
562
614
|
item: string;
|
|
563
615
|
/** Concrete suggestion for fixing it. */
|
|
@@ -871,6 +923,8 @@ export interface RoleRecord {
|
|
|
871
923
|
tags: string[];
|
|
872
924
|
/** 依据来源说明(哪几章哪些描写)。 */
|
|
873
925
|
source?: string;
|
|
926
|
+
/** 即梦/生图通用负面提示词(低质量/变形/多手/文字水印等)。 */
|
|
927
|
+
negativePrompt?: string;
|
|
874
928
|
};
|
|
875
929
|
/** 角色参考图(dataURL 或 URL)。用于漫画/漫剧出图时锁定角色一致性。 */
|
|
876
930
|
imageUrl?: string;
|
|
@@ -881,23 +935,23 @@ export interface RoleRecord {
|
|
|
881
935
|
/** LLM 精修的四类生图提示词包(前端拼装版之外的高质量版,promptKit 接口生成)。 */
|
|
882
936
|
promptKit?: {
|
|
883
937
|
/** 立绘:全身/半身正视图。 */
|
|
884
|
-
portrait
|
|
938
|
+
portrait?: {
|
|
885
939
|
zh: string;
|
|
886
940
|
en: string;
|
|
887
941
|
};
|
|
888
942
|
/** 四视图:正面/侧面/背面设定表。 */
|
|
889
|
-
sheet
|
|
943
|
+
sheet?: {
|
|
890
944
|
zh: string;
|
|
891
945
|
en: string;
|
|
892
946
|
};
|
|
893
947
|
/** 表情:同一脸部锚换情绪,每表情一段。 */
|
|
894
|
-
expressions
|
|
948
|
+
expressions?: {
|
|
895
949
|
name: string;
|
|
896
950
|
zh: string;
|
|
897
951
|
en: string;
|
|
898
952
|
}[];
|
|
899
953
|
/** 细节:标志物局部特写。 */
|
|
900
|
-
details
|
|
954
|
+
details?: {
|
|
901
955
|
zh: string;
|
|
902
956
|
en: string;
|
|
903
957
|
};
|
|
@@ -914,6 +968,23 @@ export interface RoleImage {
|
|
|
914
968
|
/** dataURL 或 URL。 */
|
|
915
969
|
dataUrl: string;
|
|
916
970
|
}
|
|
971
|
+
/** 道具卡:常驻道具(跨镜头需保持一致),含一行统一描述。 */
|
|
972
|
+
export interface Prop {
|
|
973
|
+
/** 道具名(如「外卖电动车」)。 */
|
|
974
|
+
name: string;
|
|
975
|
+
/** 外观/统一描述(注入提示词保持一致)。 */
|
|
976
|
+
desc: string;
|
|
977
|
+
}
|
|
978
|
+
/** POST /manga/props 请求。 */
|
|
979
|
+
export interface MangaPropsRequest {
|
|
980
|
+
op: 'extract' | 'save';
|
|
981
|
+
/** op=save 时的道具清单(整体替换)。 */
|
|
982
|
+
props?: Prop[];
|
|
983
|
+
}
|
|
984
|
+
/** POST /manga/props 响应。 */
|
|
985
|
+
export interface MangaPropsResponse {
|
|
986
|
+
props: Prop[];
|
|
987
|
+
}
|
|
917
988
|
/** 场景库条目:从正文提炼的「镜头场景」视觉锚点(漫剧分镜/生图用)。 */
|
|
918
989
|
export interface SceneCard {
|
|
919
990
|
/** 场景名(唯一键),如「旧茶渡·地下石殿」。 */
|
|
@@ -946,14 +1017,22 @@ export interface SceneCard {
|
|
|
946
1017
|
gallery?: RoleImage[];
|
|
947
1018
|
/** 生成时的漫剧方案基底风格 id(场景卡随方案风格措辞)。 */
|
|
948
1019
|
styleId?: string;
|
|
1020
|
+
/** 场景分级:core核心场景(反复出现,精修多图)/ secondary次要场景(1-2次,一张图)/ passing路过场景(不做图)。 */
|
|
1021
|
+
tier?: 'core' | 'secondary' | 'passing';
|
|
1022
|
+
/** 负面提示词(场景生图/生视频用,默认无人物无文字无水印)。 */
|
|
1023
|
+
negativePrompt?: string;
|
|
1024
|
+
/** 出场章节列表(用于自动分级统计)。 */
|
|
1025
|
+
appearsInChapters?: number[];
|
|
949
1026
|
}
|
|
950
1027
|
/** POST /scenes 请求:场景库提炼 / 采纳 / 更新 / 删除 / 图集。 */
|
|
951
1028
|
export interface ScenesRequest {
|
|
952
|
-
op: 'extract' | 'adopt' | 'update' | 'remove' | 'image' | 'removeImage';
|
|
1029
|
+
op: 'extract' | 'adopt' | 'update' | 'remove' | 'image' | 'removeImage' | 'imageGenerate';
|
|
953
1030
|
/** op='extract' 时的漫剧基底风格 id(场景卡按方案风格措辞)。 */
|
|
954
1031
|
styleId?: string;
|
|
955
1032
|
/** op='extract' 时的可选滤镜风格 id。 */
|
|
956
1033
|
filterId?: string;
|
|
1034
|
+
/** op='extract' 时按章提取;不传则全书提取(前4章)。 */
|
|
1035
|
+
chapterNo?: number;
|
|
957
1036
|
/** adopt / update 时传入的场景卡(adopt 可修改后采纳)。 */
|
|
958
1037
|
scene?: SceneCard;
|
|
959
1038
|
/** remove / image 时的场景名。 */
|
|
@@ -961,6 +1040,8 @@ export interface ScenesRequest {
|
|
|
961
1040
|
/** op='image' 时的图片 dataURL 与用途标签(全景/局部/氛围)。 */
|
|
962
1041
|
dataUrl?: string;
|
|
963
1042
|
label?: string;
|
|
1043
|
+
/** op='imageGenerate' 时的生图模型 id(缺省用启用模型)。 */
|
|
1044
|
+
modelId?: string;
|
|
964
1045
|
}
|
|
965
1046
|
/** POST /visual-rules 请求:视觉世界观规则提炼 / 保存。 */
|
|
966
1047
|
export interface VisualRulesRequest {
|
|
@@ -977,6 +1058,8 @@ export interface ScenesResponse {
|
|
|
977
1058
|
scenes: SceneCard[];
|
|
978
1059
|
/** op=extract 时的 AI 候选场景。 */
|
|
979
1060
|
candidates?: SceneCard[];
|
|
1061
|
+
/** op=imageGenerate 时返回的生成图 dataURL。 */
|
|
1062
|
+
dataUrl?: string;
|
|
980
1063
|
}
|
|
981
1064
|
/** POST /roles 请求:角色库增删改 + AI 提炼 + 参考图上传。 */
|
|
982
1065
|
export interface RolesRequest {
|
|
@@ -1044,7 +1127,7 @@ export interface RolesResponse {
|
|
|
1044
1127
|
/** op=image 时的角色参考图 dataURL。 */
|
|
1045
1128
|
imageUrl?: string;
|
|
1046
1129
|
}
|
|
1047
|
-
/** POST /bible/patch
|
|
1130
|
+
/** POST /bible/patch 请求:局部修补道藏。 */
|
|
1048
1131
|
export interface BiblePatchRequest {
|
|
1049
1132
|
worldRules?: string[];
|
|
1050
1133
|
redLines?: string[];
|
|
@@ -1164,6 +1247,8 @@ export interface ProjectState {
|
|
|
1164
1247
|
shortDramaMode?: boolean;
|
|
1165
1248
|
/** 场景库(作者维护 + AI 提炼的主表)。 */
|
|
1166
1249
|
scenes?: SceneCard[];
|
|
1250
|
+
/** 道具库:常驻道具(如外卖电动车/外卖箱),统一描述,注入提示词保持跨镜头一致。 */
|
|
1251
|
+
props?: Prop[];
|
|
1167
1252
|
/** 视觉世界观规则(生图/生视频必须遵守,从道藏提炼,注入所有提示词)。 */
|
|
1168
1253
|
visualRules?: string[];
|
|
1169
1254
|
/** 分镜工作台产出(骨架/分镜表,按章持久化,刷新/切换不丢)。 */
|
|
@@ -1480,6 +1565,7 @@ export type JobFrame = {
|
|
|
1480
1565
|
file: string;
|
|
1481
1566
|
chars: number;
|
|
1482
1567
|
title: string;
|
|
1568
|
+
warn?: string;
|
|
1483
1569
|
} | {
|
|
1484
1570
|
type: 'review';
|
|
1485
1571
|
no: number;
|
|
@@ -1680,6 +1766,12 @@ export interface AntiAiRule {
|
|
|
1680
1766
|
detectPatterns?: string[];
|
|
1681
1767
|
/** 是否内置全局规则(内置规则随插件发布,项目规则为用户自定义)。 */
|
|
1682
1768
|
builtin?: boolean;
|
|
1769
|
+
/** 规则类型:forbidden=禁止类(命中即问题)/ encourage=鼓励类(不命中不算错,只作建议)。缺省按名称「鼓励」前缀推断。 */
|
|
1770
|
+
severity?: 'forbidden' | 'encourage';
|
|
1771
|
+
/** 是否启用(缺省 true)。 */
|
|
1772
|
+
enabled?: boolean;
|
|
1773
|
+
/** 作用域(缺省 all)。 */
|
|
1774
|
+
scope?: Array<'writing' | 'review' | 'polish' | 'all'>;
|
|
1683
1775
|
}
|
|
1684
1776
|
/** 预置写法模板(来自 AI-Novel-Writing-Assistant 内置数据,一键绑定无需样本文本)。 */
|
|
1685
1777
|
export interface StyleTemplate {
|
|
@@ -2024,7 +2116,7 @@ export interface AdaptMaterializeResponse {
|
|
|
2024
2116
|
bookName: string;
|
|
2025
2117
|
/** 改编后总纲。 */
|
|
2026
2118
|
outline: string;
|
|
2027
|
-
/**
|
|
2119
|
+
/** 改编后道藏。 */
|
|
2028
2120
|
bible: StoryBible;
|
|
2029
2121
|
/** 改编后角色库。 */
|
|
2030
2122
|
roles: RoleRecord[];
|
|
@@ -2045,7 +2137,7 @@ export interface AdaptMaterializeSaveRequest {
|
|
|
2045
2137
|
outputDir?: string;
|
|
2046
2138
|
/** 改编后总纲。 */
|
|
2047
2139
|
outline: string;
|
|
2048
|
-
/**
|
|
2140
|
+
/** 改编后道藏。 */
|
|
2049
2141
|
bible: StoryBible;
|
|
2050
2142
|
/** 改编后角色库。 */
|
|
2051
2143
|
roles: RoleRecord[];
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 审稿规则注册表
|
|
3
|
+
*
|
|
4
|
+
* 生成用 compact 模式(核心规则),审稿用 full 模式(全部规则),
|
|
5
|
+
* 消除 reviewSystemPrompt 内嵌规则与 renderAllAssets() 两套打架的问题。
|
|
6
|
+
*/
|
|
7
|
+
/** 通用写作资产规则(兼容 ProjectAssets 中的各类规则) */
|
|
8
|
+
export interface WritingRule {
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
type?: string;
|
|
12
|
+
enabled?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface ReviewRule {
|
|
15
|
+
id: string;
|
|
16
|
+
/** 规则维度 */
|
|
17
|
+
dimension: 'character' | 'setting' | 'redline' | 'writing' | 'pacing' | 'logic' | 'anti-ai' | 'presentation' | 'compliance';
|
|
18
|
+
/** 严重度 */
|
|
19
|
+
severity: 'high' | 'medium' | 'low';
|
|
20
|
+
/** 规则类型:forbidden=禁止类(命中即问题),encourage=鼓励类(不命中不算错) */
|
|
21
|
+
type: 'forbidden' | 'encourage';
|
|
22
|
+
/** 规则描述 */
|
|
23
|
+
description: string;
|
|
24
|
+
/** 是否启用 */
|
|
25
|
+
enabled: boolean;
|
|
26
|
+
/** 作用域 */
|
|
27
|
+
scope: Array<'writing' | 'review' | 'polish' | 'all'>;
|
|
28
|
+
}
|
|
29
|
+
/** 内置审稿维度(结构化评分用) */
|
|
30
|
+
export declare const REVIEW_DIMENSIONS: readonly [{
|
|
31
|
+
readonly id: "character";
|
|
32
|
+
readonly name: "人设一致性";
|
|
33
|
+
readonly weight: 0.2;
|
|
34
|
+
}, {
|
|
35
|
+
readonly id: "setting";
|
|
36
|
+
readonly name: "设定一致性";
|
|
37
|
+
readonly weight: 0.15;
|
|
38
|
+
}, {
|
|
39
|
+
readonly id: "redline";
|
|
40
|
+
readonly name: "红线检查";
|
|
41
|
+
readonly weight: 0.15;
|
|
42
|
+
}, {
|
|
43
|
+
readonly id: "writing";
|
|
44
|
+
readonly name: "文笔质量";
|
|
45
|
+
readonly weight: 0.15;
|
|
46
|
+
}, {
|
|
47
|
+
readonly id: "pacing";
|
|
48
|
+
readonly name: "节奏与爽点";
|
|
49
|
+
readonly weight: 0.1;
|
|
50
|
+
}, {
|
|
51
|
+
readonly id: "logic";
|
|
52
|
+
readonly name: "逻辑漏洞";
|
|
53
|
+
readonly weight: 0.1;
|
|
54
|
+
}, {
|
|
55
|
+
readonly id: "anti-ai";
|
|
56
|
+
readonly name: "反 AI 规则";
|
|
57
|
+
readonly weight: 0.05;
|
|
58
|
+
}, {
|
|
59
|
+
readonly id: "presentation";
|
|
60
|
+
readonly name: "呈现方式";
|
|
61
|
+
readonly weight: 0.05;
|
|
62
|
+
}, {
|
|
63
|
+
readonly id: "compliance";
|
|
64
|
+
readonly name: "内容合规";
|
|
65
|
+
readonly weight: 0.05;
|
|
66
|
+
}];
|
|
67
|
+
export type ReviewDimensionId = typeof REVIEW_DIMENSIONS[number]['id'];
|
|
68
|
+
/** 维度结构化评分 */
|
|
69
|
+
export interface DimensionScore {
|
|
70
|
+
dimension: ReviewDimensionId;
|
|
71
|
+
score: number;
|
|
72
|
+
note: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 渲染审稿规则(compact 或 full 模式)
|
|
76
|
+
*
|
|
77
|
+
* compact: 只渲染禁止类 + high 严重度(用于生成时的约束)
|
|
78
|
+
* full: 渲染全部启用规则(用于审稿时的检查清单)
|
|
79
|
+
*/
|
|
80
|
+
export declare function renderReviewRules(assets: WritingRule[] | undefined, mode?: 'compact' | 'full'): string;
|
|
81
|
+
/**
|
|
82
|
+
* 从审稿 issues 中按维度统计
|
|
83
|
+
* 用于结构化评分和 UI 展示。
|
|
84
|
+
*/
|
|
85
|
+
export declare function groupIssuesByDimension(issues: Array<{
|
|
86
|
+
severity: string;
|
|
87
|
+
item: string;
|
|
88
|
+
dimension?: string;
|
|
89
|
+
}>): Record<string, Array<{
|
|
90
|
+
severity: string;
|
|
91
|
+
item: string;
|
|
92
|
+
}>>;
|
|
93
|
+
/**
|
|
94
|
+
* 计算维度加权总分
|
|
95
|
+
* 用于审稿报告的结构化评分。
|
|
96
|
+
*/
|
|
97
|
+
export declare function calculateWeightedScore(dimensions: DimensionScore[]): number;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 风格库(内置模板):漫剧方案的视觉基底 + 可叠加滤镜。
|
|
3
|
-
*
|
|
3
|
+
* 关键词针对即梦 Seedream 优化:画风定义 + 质感描述 + 光影色彩 + 即梦质量词(8K/五官清晰/真实材质)。
|
|
4
4
|
*/
|
|
5
|
-
export type StyleCategory = '3d' | 'game' | '2d' | '
|
|
5
|
+
export type StyleCategory = '3d' | 'game' | '2d' | 'craft' | 'film';
|
|
6
6
|
export interface ArtStyle {
|
|
7
7
|
id: string;
|
|
8
8
|
/** 风格名(用户可见)。 */
|
|
@@ -23,7 +23,7 @@ export declare const STYLE_CATEGORIES: ReadonlyArray<{
|
|
|
23
23
|
icon: string;
|
|
24
24
|
desc: string;
|
|
25
25
|
}>;
|
|
26
|
-
/**
|
|
26
|
+
/** 内置风格模板(基底 21 个 + 滤镜 3 个)。 */
|
|
27
27
|
export declare const STYLE_LIBRARY: ArtStyle[];
|
|
28
28
|
/** 按分类取风格。 */
|
|
29
29
|
export declare function stylesByCategory(category: StyleCategory): ArtStyle[];
|
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 chapters with LLM, generate chapter by chapter (3000-4000 chars each), and save every chapter as Markdown into your chosen output folder.",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "2.0.1-alpha",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": "^22.19.0 || >=24.0.0"
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
},
|
|
27
27
|
"client": {
|
|
28
28
|
"inject": [
|
|
29
|
-
"@deepseek-ai/dsh-client-runtime",
|
|
30
29
|
"@deepseek-ai/dsh-client-connection",
|
|
31
30
|
"@deepseek-ai/dsh-client-ui-settings"
|
|
32
31
|
],
|
|
@@ -39,33 +38,31 @@
|
|
|
39
38
|
"schemastery": "^3.18.0"
|
|
40
39
|
},
|
|
41
40
|
"peerDependencies": {
|
|
42
|
-
"@deepseek-ai/dsh-client-connection": "^0.1.
|
|
43
|
-
"@deepseek-ai/dsh-client-locale": "^0.1.
|
|
44
|
-
"@deepseek-ai/dsh-client-
|
|
45
|
-
"@deepseek-ai/dsh-client-ui-
|
|
46
|
-
"@deepseek-ai/dsh-
|
|
47
|
-
"@deepseek-ai/dsh-
|
|
48
|
-
"@deepseek-ai/dsh-
|
|
49
|
-
"@deepseek-ai/dsh-
|
|
50
|
-
"@deepseek-ai/dsh-
|
|
51
|
-
"@deepseek-ai/dsh-
|
|
52
|
-
"@deepseek-ai/dsh-tools": "^0.1.0-rc.5",
|
|
41
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.2-alpha.3",
|
|
42
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.2-alpha.3",
|
|
43
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.2-alpha.3",
|
|
44
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.2-alpha.3",
|
|
45
|
+
"@deepseek-ai/dsh-host-webserver": "^0.1.2-alpha.3",
|
|
46
|
+
"@deepseek-ai/dsh-llm": "^0.1.2-alpha.3",
|
|
47
|
+
"@deepseek-ai/dsh-settings": "^0.1.2-alpha.3",
|
|
48
|
+
"@deepseek-ai/dsh-skill": "^0.1.2-alpha.3",
|
|
49
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.2-alpha.3",
|
|
50
|
+
"@deepseek-ai/dsh-tools": "^0.1.2-alpha.3",
|
|
53
51
|
"react": "^18.2.0",
|
|
54
52
|
"react-dom": "^18.2.0"
|
|
55
53
|
},
|
|
56
54
|
"devDependencies": {
|
|
57
55
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
58
|
-
"@deepseek-ai/dsh-client-connection": "^0.1.
|
|
59
|
-
"@deepseek-ai/dsh-client-locale": "^0.1.
|
|
60
|
-
"@deepseek-ai/dsh-client-
|
|
61
|
-
"@deepseek-ai/dsh-client-ui-
|
|
62
|
-
"@deepseek-ai/dsh-
|
|
63
|
-
"@deepseek-ai/dsh-
|
|
64
|
-
"@deepseek-ai/dsh-
|
|
65
|
-
"@deepseek-ai/dsh-
|
|
66
|
-
"@deepseek-ai/dsh-
|
|
67
|
-
"@deepseek-ai/dsh-
|
|
68
|
-
"@deepseek-ai/dsh-tools": "^0.1.0-rc.5",
|
|
56
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.2-alpha.3",
|
|
57
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.2-alpha.3",
|
|
58
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.2-alpha.3",
|
|
59
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.2-alpha.3",
|
|
60
|
+
"@deepseek-ai/dsh-host-webserver": "^0.1.2-alpha.3",
|
|
61
|
+
"@deepseek-ai/dsh-llm": "^0.1.2-alpha.3",
|
|
62
|
+
"@deepseek-ai/dsh-settings": "^0.1.2-alpha.3",
|
|
63
|
+
"@deepseek-ai/dsh-skill": "^0.1.2-alpha.3",
|
|
64
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.2-alpha.3",
|
|
65
|
+
"@deepseek-ai/dsh-tools": "^0.1.2-alpha.3",
|
|
69
66
|
"@types/node": "^22.20.0",
|
|
70
67
|
"@types/react": "~18.3.1",
|
|
71
68
|
"@types/react-dom": "^18.3.5",
|