@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.
Files changed (56) hide show
  1. package/README.md +8 -3
  2. package/assets/styles/guoman-2d-gufeng.webp +0 -0
  3. package/assets/styles/guoman-3d-tianyuan.webp +0 -0
  4. package/assets/styles/guoman-3d-xuanhuan.webp +0 -0
  5. package/assets/styles/hyperreal-3d.webp +0 -0
  6. package/assets/styles/sandiao-qban.webp +0 -0
  7. package/assets/styles/urban-lightreal-3d.webp +0 -0
  8. package/lib/client.js +3456 -2133
  9. package/lib/index.js +1975 -438
  10. package/lib/types/ai-scan.d.ts +36 -0
  11. package/lib/types/assets.d.ts +1 -1
  12. package/lib/types/client/api.d.ts +8 -1
  13. package/lib/types/client/index.d.ts +1 -1
  14. package/lib/types/client/panel/AuthorHome.d.ts +4 -2
  15. package/lib/types/client/panel/FlowGuide.d.ts +6 -5
  16. package/lib/types/client/panel/MangaRoleLibrary.d.ts +3 -1
  17. package/lib/types/client/panel/MangaWorkspace.d.ts +2 -5
  18. package/lib/types/client/panel/PropLibrary.d.ts +8 -0
  19. package/lib/types/client/panel/SceneLibrary.d.ts +3 -1
  20. package/lib/types/client/panel/SettingsView.d.ts +4 -2
  21. package/lib/types/engine.d.ts +50 -21
  22. package/lib/types/index.d.ts +2 -2
  23. package/lib/types/manga-genre-rules.d.ts +22 -0
  24. package/lib/types/novel-context.d.ts +80 -0
  25. package/lib/types/prompt-utils.d.ts +35 -0
  26. package/lib/types/protocol.d.ts +104 -12
  27. package/lib/types/review-policy.d.ts +97 -0
  28. package/lib/types/style-library.d.ts +3 -3
  29. package/package.json +21 -24
  30. package/src/ai-scan.ts +179 -0
  31. package/src/assets.ts +353 -9
  32. package/src/client/api.ts +11 -1
  33. package/src/client/index.ts +1 -1
  34. package/src/client/mount.tsx +1 -1
  35. package/src/client/panel/AdaptModeView.tsx +2 -2
  36. package/src/client/panel/AssistantTab.tsx +1 -1
  37. package/src/client/panel/AuthorHome.tsx +5 -3
  38. package/src/client/panel/FlowGuide.tsx +15 -14
  39. package/src/client/panel/MangaRoleLibrary.tsx +1002 -810
  40. package/src/client/panel/MangaWorkspace.tsx +715 -359
  41. package/src/client/panel/ModelManager.tsx +1 -1
  42. package/src/client/panel/NovelPanel.tsx +4620 -4655
  43. package/src/client/panel/PropLibrary.tsx +175 -0
  44. package/src/client/panel/SceneLibrary.tsx +453 -396
  45. package/src/client/panel/SettingsView.tsx +24 -30
  46. package/src/client/panel/StoryboardTab.tsx +6 -0
  47. package/src/client/panel/panel.module.css +165 -4
  48. package/src/engine.ts +796 -286
  49. package/src/index.ts +9 -7
  50. package/src/manga-genre-rules.ts +87 -0
  51. package/src/novel-context.ts +287 -0
  52. package/src/prompt-utils.ts +73 -0
  53. package/src/protocol.ts +2233 -2148
  54. package/src/review-policy.ts +161 -0
  55. package/src/routes.ts +3419 -3359
  56. package/src/style-library.ts +32 -26
@@ -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
- /** 时长(秒,1-12)。 */
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
- * 字段来自通用风格模板(豆包整理),keywords 即风格前缀词块,生成时直接套用。
3
+ * 关键词针对即梦 Seedream 优化:画风定义 + 质感描述 + 光影色彩 + 即梦质量词(8K/五官清晰/真实材质)。
4
4
  */
5
- export type StyleCategory = '3d' | 'game' | '2d' | 'film' | 'craft';
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
- /** 内置风格模板(18 个)。 */
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": "1.10.1",
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.0-rc.5",
43
- "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.5",
44
- "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.5",
45
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.5",
46
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.5",
47
- "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.5",
48
- "@deepseek-ai/dsh-llm": "^0.1.0-rc.5",
49
- "@deepseek-ai/dsh-settings": "^0.1.0-rc.5",
50
- "@deepseek-ai/dsh-skill": "^0.1.0-rc.5",
51
- "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.5",
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.0-rc.5",
59
- "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.5",
60
- "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.5",
61
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.5",
62
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.5",
63
- "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.5",
64
- "@deepseek-ai/dsh-llm": "^0.1.0-rc.5",
65
- "@deepseek-ai/dsh-settings": "^0.1.0-rc.5",
66
- "@deepseek-ai/dsh-skill": "^0.1.0-rc.5",
67
- "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.5",
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",