@waterwx/dsh-novel-forge 1.10.1 → 2.0.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.
Files changed (194) hide show
  1. package/README.md +287 -281
  2. package/lib/client.js +19572 -18127
  3. package/lib/index.js +12171 -6932
  4. package/lib/types/action-guard.d.ts +61 -0
  5. package/lib/types/ai-scan.d.ts +30 -0
  6. package/lib/types/assets.d.ts +20 -9
  7. package/lib/types/assistant.d.ts +29 -0
  8. package/lib/types/author-assets.d.ts +1 -3
  9. package/lib/types/bookshelf.d.ts +13 -3
  10. package/lib/types/client/api.d.ts +137 -21
  11. package/lib/types/client/chip-prefs.d.ts +36 -0
  12. package/lib/types/client/docx.d.ts +2 -2
  13. package/lib/types/client/index.d.ts +1 -1
  14. package/lib/types/client/llmLive.d.ts +31 -0
  15. package/lib/types/client/locales.d.ts +15 -70
  16. package/lib/types/client/mount.d.ts +0 -2
  17. package/lib/types/client/panel/AiTag.d.ts +1 -0
  18. package/lib/types/client/panel/AssistantTab.d.ts +4 -1
  19. package/lib/types/client/panel/AuthorHome.d.ts +13 -9
  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/IdeaInspirationView.d.ts +6 -0
  25. package/lib/types/client/panel/KnowledgeBaseView.d.ts +4 -0
  26. package/lib/types/client/panel/LiveFeedLog.d.ts +13 -0
  27. package/lib/types/client/panel/MarketRadarView.d.ts +5 -0
  28. package/lib/types/client/panel/ModelManager.d.ts +2 -2
  29. package/lib/types/client/panel/NovelPanel.d.ts +6 -1
  30. package/lib/types/client/panel/PageHeader.d.ts +18 -0
  31. package/lib/types/client/panel/PromptSlotsView.d.ts +11 -0
  32. package/lib/types/client/panel/SettingsView.d.ts +12 -7
  33. package/lib/types/client/panel/ShelfView.d.ts +10 -1
  34. package/lib/types/client/panel/SubPage.d.ts +27 -0
  35. package/lib/types/client/panel/TensionView.d.ts +18 -0
  36. package/lib/types/client/panel/TimelineView.d.ts +18 -0
  37. package/lib/types/client/panel/helpers.d.ts +5 -3
  38. package/lib/types/client/panel/market-radar-state.d.ts +56 -0
  39. package/lib/types/client/panel/toast.d.ts +2 -0
  40. package/lib/types/client/panel/views.d.ts +21 -35
  41. package/lib/types/client/run-status.d.ts +21 -0
  42. package/lib/types/client/sidebar-entry.d.ts +0 -2
  43. package/lib/types/docx-core.d.ts +16 -0
  44. package/lib/types/docx.d.ts +2 -3
  45. package/lib/types/engine.d.ts +83 -79
  46. package/lib/types/global-assets.d.ts +6 -0
  47. package/lib/types/home.d.ts +11 -0
  48. package/lib/types/index.d.ts +27 -13
  49. package/lib/types/llm-live.d.ts +70 -0
  50. package/lib/types/llm-retry.d.ts +38 -0
  51. package/lib/types/market-radar-scan.d.ts +18 -0
  52. package/lib/types/market-radar-sources.d.ts +31 -0
  53. package/lib/types/migrate-output.d.ts +25 -0
  54. package/lib/types/model-capability.d.ts +93 -0
  55. package/lib/types/novel-context.d.ts +80 -0
  56. package/lib/types/output-budget.d.ts +86 -0
  57. package/lib/types/prompt-slots.d.ts +57 -0
  58. package/lib/types/prompting.d.ts +10 -0
  59. package/lib/types/protocol.d.ts +829 -522
  60. package/lib/types/revision.d.ts +76 -0
  61. package/lib/types/routes.d.ts +9 -3
  62. package/lib/types/run.d.ts +23 -1
  63. package/lib/types/settings-persist.d.ts +59 -0
  64. package/lib/types/snapshots.d.ts +46 -0
  65. package/lib/types/stage-contract.d.ts +58 -0
  66. package/lib/types/tension.d.ts +53 -0
  67. package/lib/types/timeline.d.ts +37 -0
  68. package/package.json +50 -28
  69. package/src/action-guard.ts +127 -0
  70. package/src/ai-scan.ts +155 -0
  71. package/src/assets.ts +1801 -535
  72. package/src/assistant.ts +1098 -770
  73. package/src/author-assets.ts +131 -147
  74. package/src/bookshelf.ts +193 -167
  75. package/src/client/api.ts +767 -607
  76. package/src/client/chip-prefs.ts +121 -0
  77. package/src/client/docx.ts +32 -69
  78. package/src/client/index.ts +3 -1
  79. package/src/client/llmLive.ts +111 -0
  80. package/src/client/locales.ts +15 -274
  81. package/src/client/mount.tsx +4 -3
  82. package/src/client/panel/AdaptModeView.tsx +535 -520
  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 +205 -207
  87. package/src/client/panel/AuthorHome.tsx +309 -202
  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 -352
  91. package/src/client/panel/DirectorView.tsx +200 -0
  92. package/src/client/panel/GlobalAssetLibraryView.tsx +168 -172
  93. package/src/client/panel/IdeaInspirationView.tsx +76 -0
  94. package/src/client/panel/ImportModal.tsx +302 -302
  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 +415 -0
  98. package/src/client/panel/ModelManager.tsx +205 -205
  99. package/src/client/panel/NovelPanel.tsx +5559 -4655
  100. package/src/client/panel/PageHeader.tsx +37 -0
  101. package/src/client/panel/ProgressConsole.tsx +63 -64
  102. package/src/client/panel/PromptSlotsView.tsx +97 -0
  103. package/src/client/panel/ReaderView.tsx +306 -306
  104. package/src/client/panel/RunPanel.tsx +56 -24
  105. package/src/client/panel/SettingsView.tsx +175 -112
  106. package/src/client/panel/ShelfView.tsx +63 -39
  107. package/src/client/panel/SubPage.tsx +42 -0
  108. package/src/client/panel/TensionView.tsx +212 -0
  109. package/src/client/panel/TimelineView.tsx +208 -0
  110. package/src/client/panel/WorldTab.tsx +202 -202
  111. package/src/client/panel/helpers.ts +7 -5
  112. package/src/client/panel/market-radar-state.ts +79 -0
  113. package/src/client/panel/panel.module.css +5767 -4199
  114. package/src/client/panel/toast.ts +51 -0
  115. package/src/client/panel/views.tsx +316 -314
  116. package/src/client/run-status.ts +171 -0
  117. package/src/client/sidebar-entry.ts +3 -3
  118. package/src/docx-core.ts +53 -0
  119. package/src/docx.ts +44 -83
  120. package/src/engine.ts +1610 -1541
  121. package/src/global-assets.ts +58 -0
  122. package/src/home.ts +33 -0
  123. package/src/index.ts +184 -103
  124. package/src/llm-live.ts +245 -0
  125. package/src/llm-retry.ts +77 -0
  126. package/src/market-radar-scan.ts +35 -0
  127. package/src/market-radar-sources.ts +173 -0
  128. package/src/migrate-output.ts +76 -0
  129. package/src/model-capability.ts +215 -0
  130. package/src/novel-context.ts +286 -0
  131. package/src/output-budget.ts +147 -0
  132. package/src/prompt-slots.ts +125 -0
  133. package/src/prompting.ts +26 -0
  134. package/src/protocol.ts +2454 -2148
  135. package/src/revision.ts +283 -0
  136. package/src/routes.ts +3795 -3359
  137. package/src/run.ts +113 -17
  138. package/src/settings-persist.ts +114 -0
  139. package/src/snapshots.ts +174 -0
  140. package/src/stage-contract.ts +186 -0
  141. package/src/tension.ts +251 -0
  142. package/src/timeline.ts +159 -0
  143. package/assets/styles/arcane-thick-3d.webp +0 -0
  144. package/assets/styles/chinese-ink.webp +0 -0
  145. package/assets/styles/clay-stopmotion-3d.webp +0 -0
  146. package/assets/styles/dark-ghibli.webp +0 -0
  147. package/assets/styles/dark-gothic-3d.webp +0 -0
  148. package/assets/styles/film-photo.webp +0 -0
  149. package/assets/styles/guofeng-heavy.webp +0 -0
  150. package/assets/styles/horror-game-3d.webp +0 -0
  151. package/assets/styles/japan-cel-dark.webp +0 -0
  152. package/assets/styles/korean-webtoon.webp +0 -0
  153. package/assets/styles/low-cyberpunk-3d.webp +0 -0
  154. package/assets/styles/nextgen-cg.webp +0 -0
  155. package/assets/styles/noir-film.webp +0 -0
  156. package/assets/styles/openworld-survival.webp +0 -0
  157. package/assets/styles/paper-cut-3d.webp +0 -0
  158. package/assets/styles/pixar-adult-3d.webp +0 -0
  159. package/assets/styles/pop-marvel-2d.webp +0 -0
  160. package/assets/styles/shinkai-anime.webp +0 -0
  161. package/assets/styles/tactical-stealth.webp +0 -0
  162. package/assets/styles/vaporwave-3d.webp +0 -0
  163. package/assets/styles/vhs90.webp +0 -0
  164. package/lib/types/client/panel/BookshelfBar.d.ts +0 -11
  165. package/lib/types/client/panel/FlowGuide.d.ts +0 -21
  166. package/lib/types/client/panel/MangaRoleLibrary.d.ts +0 -18
  167. package/lib/types/client/panel/MangaWorkspace.d.ts +0 -15
  168. package/lib/types/client/panel/ModelPicker.d.ts +0 -11
  169. package/lib/types/client/panel/ProgressHomeView.d.ts +0 -5
  170. package/lib/types/client/panel/SceneLibrary.d.ts +0 -14
  171. package/lib/types/client/panel/StoryboardTab.d.ts +0 -19
  172. package/lib/types/client/panel/StyleCard.d.ts +0 -8
  173. package/lib/types/client/panel/StyleGallery.d.ts +0 -1
  174. package/lib/types/comic-presets.d.ts +0 -12
  175. package/lib/types/shot-language.d.ts +0 -46
  176. package/lib/types/story-beat-language.d.ts +0 -35
  177. package/lib/types/style-library.d.ts +0 -33
  178. package/skills/chapter-batch/SKILL.md +0 -81
  179. package/src/client/mount.tsx._new +0 -97
  180. package/src/client/mount.tsx._nf +0 -97
  181. package/src/client/mount.tsx._tmp +0 -97
  182. package/src/client/panel/BookshelfBar.tsx +0 -170
  183. package/src/client/panel/FlowGuide.tsx +0 -83
  184. package/src/client/panel/MangaRoleLibrary.tsx +0 -810
  185. package/src/client/panel/MangaWorkspace.tsx +0 -359
  186. package/src/client/panel/ProgressHomeView.tsx +0 -87
  187. package/src/client/panel/SceneLibrary.tsx +0 -396
  188. package/src/client/panel/StoryboardTab.tsx +0 -466
  189. package/src/client/panel/StyleCard.tsx +0 -90
  190. package/src/client/panel/StyleGallery.tsx +0 -58
  191. package/src/comic-presets.ts +0 -67
  192. package/src/shot-language.ts +0 -181
  193. package/src/story-beat-language.ts +0 -130
  194. package/src/style-library.ts +0 -78
@@ -1,57 +1,36 @@
1
1
  /**
2
- * dsh-novel-forge — locale dictionaries (zh / en).
2
+ * dsh-novel-forge — 面板文案词典(简体中文单语)。
3
+ *
4
+ * 定位说明:小说工坊面板是**中文单语界面**——这里就是全部用户可见文案的唯一定义处,
5
+ * 键位即类型(`NovelKey`),新增文案请同时在此登记,不要散落到组件里硬编码。
6
+ * 文档层(README / docs / CHANGELOG)仍提供英文对照,那是给人读的,不是界面语言。
3
7
  */
4
- /** zh dictionary. */
8
+ /** 面板文案(简体中文)。 */
5
9
  export declare const zh: {
6
10
  readonly 'entry.label': "小说工坊";
7
11
  readonly 'entry.tooltip': "AI 编译小说工作台:总纲 → 道藏 → 卷计划 → 章节计划 → 逐章生成+审稿";
8
- readonly 'panel.title': "小说工坊";
9
12
  readonly 'common.close': "关闭";
10
13
  readonly 'common.loading': "加载中…";
11
- readonly 'common.save': "保存";
12
14
  readonly 'common.error': "错误";
13
- readonly 'common.success': "成功";
14
- readonly 'common.generating': "生成中…";
15
15
  readonly 'common.chars': "字";
16
16
  readonly 'tab.workflow': "工作台";
17
17
  readonly 'tab.overview': "总纲";
18
18
  readonly 'tab.plan': "章节";
19
- readonly 'tab.bible': "道藏";
20
- readonly 'tab.foreshadow': "暗线";
21
- readonly 'tab.assistant': "AI 助手";
19
+ readonly 'tab.assistant': "AI 编辑 Agent";
22
20
  readonly 'tab.settings': "设置";
23
- readonly 'workflow.title': "创作工作台";
24
- readonly 'workflow.step1': "① 加载总纲";
25
- readonly 'workflow.step2': "② 提炼道藏";
26
- readonly 'workflow.step3': "③ 规划卷";
27
- readonly 'workflow.step4': "④ 生成章节计划";
28
- readonly 'workflow.step5': "⑤ 逐章写作 + AI 审稿";
29
- readonly 'workflow.step6': "⑥ 润色 / 导出";
30
- readonly 'workflow.loadOutline': "读取总纲";
31
- readonly 'workflow.genBible': "提炼道藏";
32
21
  readonly 'workflow.genVolumes': "生成卷计划";
33
- readonly 'workflow.genPlan': "生成章节计划";
34
- readonly 'workflow.done': "已完成";
35
- readonly 'workflow.todo': "待办";
36
22
  readonly 'workflow.bibleDone': "道藏已生成({n} 条规则 / {c} 个人物 / {r} 条红线)";
37
23
  readonly 'workflow.volumesDone': "卷计划已生成({n} 卷)";
38
24
  readonly 'workflow.planDone': "章节计划已生成({n} 章)";
39
- readonly 'workflow.progress': "进度:总纲 ✓ · 道藏 {bible} · 卷 {volumes} · 计划 {plan} · 已完成 {done}/{total} 章";
40
- readonly 'overview.loadDocx': "从 docx 读取总纲";
41
- readonly 'overview.loadDocxDefault': "读取默认总纲";
42
25
  readonly 'overview.loadingOutline': "正在解析 docx…";
43
26
  readonly 'overview.outlineHint': "总纲文本(可编辑)";
44
27
  readonly 'overview.outlineChars': "总纲字数";
45
28
  readonly 'overview.saveOutline': "保存总纲";
46
29
  readonly 'overview.saved': "总纲已保存";
47
30
  readonly 'overview.bookName': "书名";
48
- readonly 'overview.loadCustom': "指定 docx 路径";
49
- readonly 'overview.loadCustomHint': "绝对路径,留空使用默认";
50
31
  readonly 'plan.generate': "生成章节计划";
51
32
  readonly 'plan.generateHint': "章节数量";
52
33
  readonly 'plan.count': "章";
53
- readonly 'plan.empty': "暂无章节计划,请先生成";
54
- readonly 'plan.chapter': "章";
55
34
  readonly 'plan.pending': "待生成";
56
35
  readonly 'plan.generating': "生成中";
57
36
  readonly 'plan.written': "待审稿";
@@ -63,23 +42,17 @@ export declare const zh: {
63
42
  readonly 'plan.rewrite': "修订";
64
43
  readonly 'plan.review': "审稿";
65
44
  readonly 'plan.polish': "去AI味";
66
- readonly 'plan.writeAll': "批量生成全部";
67
45
  readonly 'plan.writeAllPending': "批量生成剩余";
68
- readonly 'plan.generated': "已生成";
69
- readonly 'plan.progress': "进度";
70
46
  readonly 'plan.beats': "剧情要点";
71
47
  readonly 'plan.reviewReport': "审稿报告";
72
48
  readonly 'plan.reviewScore': "评分";
73
49
  readonly 'plan.reviewVerdict': "总评";
74
- readonly 'plan.reviewIssues': "问题清单";
75
50
  readonly 'plan.reviewPass': "通过";
76
51
  readonly 'plan.reviewFail': "未通过";
77
- readonly 'plan.approve': "手动通过";
78
52
  readonly 'plan.summary': "章节摘要";
79
53
  readonly 'plan.volumes': "卷";
80
- readonly 'plan.noVolume': "未分卷";
81
54
  readonly 'bible.title': "道藏";
82
- readonly 'bible.gen': "AI 提炼道藏";
55
+ readonly 'bible.gen': "提炼道藏";
83
56
  readonly 'bible.genre': "题材基调";
84
57
  readonly 'bible.worldRules': "世界规则";
85
58
  readonly 'bible.characters': "人物志";
@@ -87,9 +60,8 @@ export declare const zh: {
87
60
  readonly 'bible.style': "风格要求";
88
61
  readonly 'bible.none': "尚未生成道藏。生成后写作会严格遵守人设与金手指规则,审稿也会按红线检查。";
89
62
  readonly 'foreshadow.title': "暗线管理";
90
- readonly 'foreshadow.suggest': "AI 建议暗线";
63
+ readonly 'foreshadow.suggest': "建议暗线";
91
64
  readonly 'foreshadow.none': "暂无暗线";
92
- readonly 'foreshadow.status': "状态";
93
65
  readonly 'foreshadow.planned': "计划中";
94
66
  readonly 'foreshadow.planted': "已埋设";
95
67
  readonly 'foreshadow.progressing': "推进中";
@@ -99,7 +71,6 @@ export declare const zh: {
99
71
  readonly 'foreshadow.plantedAt': "埋设于";
100
72
  readonly 'foreshadow.setPlanted': "标记已埋设";
101
73
  readonly 'foreshadow.setResolved': "标记已回收";
102
- readonly 'tab.facts': "编年录";
103
74
  readonly 'tab.plotlines': "剧情线";
104
75
  readonly 'plotlines.hint': "主线/支线/人物线/悬念线的推进管理:章节生成时会注入未完结的线,要求每章至少推进一条;关联章节记录推进节点。";
105
76
  readonly 'plotlines.empty': "还没有剧情线——长篇小说建议先建主线与几条支线。";
@@ -121,23 +92,16 @@ export declare const zh: {
121
92
  readonly 'plotlines.cancel': "取消";
122
93
  readonly 'plotlines.edit': "编辑";
123
94
  readonly 'plotlines.remove': "删除";
124
- readonly 'plotlines.linkChapter': "关联本章";
125
95
  readonly 'plotlines.chapters': "已关联";
126
- readonly 'plotlines.workflowTitle': "剧情线进度";
127
- readonly 'plotlines.workflowEmpty': "未建剧情线(去「剧情线」页创建)";
128
- readonly 'sensitive.title': "敏感词检查";
129
- readonly 'sensitive.scanAll': "🔞 全书敏感词检查";
96
+ readonly 'sensitive.scanAll': " 全书敏感词检查";
130
97
  readonly 'sensitive.hint': "内置违禁词库硬匹配(政治/擦边/暴力/辱骂/广告/其他),发布前建议检查;只做提示,是否修改由你判断。";
131
- readonly 'sensitive.clean': "✅ 未命中任何违禁词(扫描 {n} 章)";
98
+ readonly 'sensitive.clean': " 未命中任何违禁词(扫描 {n} 章)";
132
99
  readonly 'sensitive.hits': "命中 {n} 处({chapters} 章受影响)";
133
100
  readonly 'sensitive.goFix': "去修订";
134
101
  readonly 'sensitive.fixPrefill': "请删除或替换正文中的违禁表达「{word}」(类别:{category}),用含蓄/间接的写法替代。";
135
102
  readonly 'facts.title': "编年录 / 时间线({n} 条)";
136
103
  readonly 'facts.hint': "每章生成后自动抽取「已确立事实」(人物状态/境界资源/关系变化/伏笔落地),最近 20 条注入后续章节生成,保证长期一致。";
137
104
  readonly 'facts.backfill': "回填历史章节事实";
138
- readonly 'facts.backfilled': "已从历史章节回填 {n} 条事实";
139
- readonly 'settings.title': "设置";
140
- readonly 'settings.outlinePath': "默认大纲路径";
141
105
  readonly 'settings.outputDir': "输出目录";
142
106
  readonly 'settings.provider': "模型提供商";
143
107
  readonly 'settings.model': "模型";
@@ -146,13 +110,7 @@ export declare const zh: {
146
110
  readonly 'settings.edit': "编辑";
147
111
  readonly 'settings.delete': "删除";
148
112
  readonly 'settings.modelCustomPlaceholder': "输入任意模型 id";
149
- readonly 'settings.savedModels': "我的模型";
150
- readonly 'settings.modelCards': "模型卡片(内置 + 已添加)";
151
- readonly 'settings.savedModelName': "名称";
152
- readonly 'settings.addModel': "添加模型";
153
- readonly 'settings.catalogRefresh': "刷新厂商";
154
113
  readonly 'settings.refreshModels': "刷新模型";
155
- readonly 'settings.savedModelsHint': "手动添加常用模型(provider + 模型 id),点击即可切换当前模型;厂商模式会写入 DSH 凭据并注册路由。";
156
114
  readonly 'settings.testConnection': "测试连通";
157
115
  readonly 'settings.testRunning': "测试中";
158
116
  readonly 'settings.testOk': "连通";
@@ -167,15 +125,9 @@ export declare const zh: {
167
125
  readonly 'settings.reasoning.low': "low · 低思考";
168
126
  readonly 'settings.reasoning.high': "high · 高思考";
169
127
  readonly 'settings.reasoning.max': "max · 最高思考(质检/推演)";
170
- readonly 'settings.theme': "主题";
171
- readonly 'settings.themeLiquid': "iOS 液态玻璃(绿)";
172
- readonly 'settings.themeNeumorph': "新拟物(双阴影)";
173
- readonly 'settings.themeHint': "存于浏览器本地,即时生效";
174
128
  readonly 'settings.chapterChars': "每章目标字数";
175
129
  readonly 'settings.maxTokens': "单章最大输出 tokens";
176
130
  readonly 'settings.reviewPassScore': "审稿通过分数(0-100)";
177
- readonly 'settings.editorFontSize': "编辑器字号(仅编辑页显示)";
178
- readonly 'settings.editorFontSizeHint': "存于浏览器本地,不影响其他设备";
179
131
  readonly 'settings.autoReview': "生成后自动审稿";
180
132
  readonly 'settings.autoAuthorReview': "生成后自动作者复盘";
181
133
  readonly 'settings.autoAuthorReviewHint': "复盘钩子兑现/结尾钩子/剧情线推进/连续性/节奏趋势,每章约 2000 token";
@@ -183,8 +135,8 @@ export declare const zh: {
183
135
  readonly 'settings.autoReviewAfterReviseHint': "按意见修订/润色产出草稿后自动附带一次 AI 审查,直接显示新稿评分与剩余问题(每章约 2-3k token,可关)";
184
136
  readonly 'settings.save': "保存设置";
185
137
  readonly 'settings.saved': "设置已保存";
138
+ readonly 'settings.savedUnpersisted': "设置已生效,但未能持久化(宿主未登记本插件的配置段),重启后会回到原值。";
186
139
  readonly 'settings.openFolder': "打开输出文件夹";
187
- readonly 'settings.export': "导出";
188
140
  readonly 'settings.exportTxt': "导出 TXT";
189
141
  readonly 'settings.exportMd': "导出 Markdown";
190
142
  readonly 'settings.exported': "已导出:{file}({chars} 字,{chapters} 章)";
@@ -194,19 +146,12 @@ export declare const zh: {
194
146
  readonly 'progress.error': "第 {no} 章失败:{message}";
195
147
  readonly 'progress.rewriting': "正在修订第 {no} 章…";
196
148
  readonly 'progress.polishing': "正在润色第 {no} 章…";
197
- readonly 'progress.empty': "生成/审稿进度将显示在这里";
198
- readonly 'assistant.hint': "和 AI 编辑讨论剧情、人设、暗线;达成一致后可让它直接修改总纲、道藏、章节内容。";
149
+ readonly 'assistant.hint': "和 AI 编辑 Agent 讨论剧情、人设、暗线;达成一致后可让它直接修改总纲、道藏、章节内容。";
199
150
  readonly 'assistant.placeholder': "例如:我想让第 2 章结尾加一个悬念——墟境里传来爷爷的声音…";
200
151
  readonly 'assistant.send': "发送";
201
- readonly 'assistant.toolStart': "⚙ 执行操作:{name}…";
202
- readonly 'assistant.toolDone': "✓ {name} 完成:{detail}";
203
- readonly 'assistant.toolError': "✗ {name} 失败:{detail}";
204
- readonly 'assistant.empty': "还没有对话。和 AI 编辑聊聊剧情吧。";
152
+ readonly 'assistant.empty': "还没有对话。和 AI 编辑 Agent 聊聊剧情吧。";
205
153
  readonly 'status.projectNone': "输出目录中还没有项目。请先加载大纲。";
206
154
  readonly 'status.files': "已生成文件";
207
- readonly 'api.error': "请求失败";
208
155
  };
209
- /** en dictionary (fallback). */
210
- export declare const en: Record<string, string>;
211
- /** Keys type for the zh dictionary. */
156
+ /** 面板文案键位(= zh 词典的键)。 */
212
157
  export type NovelKey = keyof typeof zh;
@@ -1,7 +1,5 @@
1
1
  import type { NovelApi } from './api.ts';
2
2
  import type { PanelController } from './panel/controller.ts';
3
- /** The injected panel container. */
4
- export declare const PANEL_VIEW_SELECTOR = "[data-dsh-novelforge-view]";
5
3
  /**
6
4
  * Mount the panel React tree into the center column and bind visibility to
7
5
  * the controller.
@@ -0,0 +1 @@
1
+ export declare function AiTag(): JSX.Element;
@@ -1,7 +1,10 @@
1
1
  import type { NovelApi } from '../api.ts';
2
+ import type { StageInfo } from '../../protocol.ts';
2
3
  /** Props. */
3
4
  export interface AssistantTabProps {
4
5
  api: NovelApi;
6
+ /** 宿主算出的创作阶段(/status.stage):让作者在同一屏看到「现在该做什么」。 */
7
+ stage?: StageInfo | null;
5
8
  }
6
9
  /** The assistant conversation tab. */
7
- export declare function AssistantTab({ api }: AssistantTabProps): import("react").JSX.Element;
10
+ export declare function AssistantTab({ api, stage }: AssistantTabProps): import("react").JSX.Element;
@@ -1,23 +1,27 @@
1
1
  import type { NovelApi } from '../api.ts';
2
2
  import type { BookshelfSnapshot } from '../../protocol.ts';
3
3
  import { type ProgressLine } from './ProgressConsole.tsx';
4
- export declare function AuthorHome({ api, shelf, onOpenBook, onReadBook, onAddBook, onImportBook, onOpenSettings, onTheme, onBackground, onOpacity, adaptEnabled, progress, busy, busyLabel, liveBar, onClearProgress }: {
4
+ export declare function AuthorHome({ api, shelf, onOpenBook, onReadBook, onAddBook, onImportBook, onBackground, progress, busy, busyLabel, liveBar, onClearProgress, onUseIdea, themeMode, themeDensity, onToggleMode, onChangeThemeMode, onChangeThemeDensity }: {
5
+ /** 当前显示模式(顶栏「墨纸 / 纸白」切换用)。 */
6
+ themeMode?: 'system' | 'light' | 'dark';
7
+ /** 当前界面密度。 */
8
+ themeDensity?: 'comfort' | 'compact' | 'spacious';
9
+ /** 切换墨纸 / 纸白(由 NovelPanel 落 localStorage)。 */
10
+ onToggleMode?: () => void;
11
+ /** 改变全局显示模式(联动整个面板)。 */
12
+ onChangeThemeMode: (m: 'system' | 'light' | 'dark') => void;
13
+ /** 改变全局界面密度(联动整个面板)。 */
14
+ onChangeThemeDensity: (d: 'comfort' | 'compact' | 'spacious') => void;
5
15
  api: NovelApi;
6
16
  shelf: BookshelfSnapshot;
7
17
  onOpenBook: (id: string) => void;
8
18
  onReadBook: (id: string) => void;
9
19
  onAddBook: () => void;
10
20
  onImportBook: () => void;
11
- /** 兼容旧入口:首页设置现为独立设置页,此回调保留但不再使用。 */
12
- onOpenSettings?: () => void;
13
- /** 主题/模式/密度变化回调(供面板根容器实时生效)。 */
14
- onTheme?: (theme: 'liquid' | 'neumorph' | 'macos' | 'clay', mode: 'system' | 'light' | 'dark', density: 'comfort' | 'compact' | 'spacious') => void;
21
+ /** 创意灵感 → 采纳某个灵感带入开书向导。 */
22
+ onUseIdea?: (idea: import('../../protocol.ts').IdeaInspirationResult['ideas'][number]) => void;
15
23
  /** 自定义背景变化回调。 */
16
24
  onBackground?: (bg: string | undefined, blur: number) => void;
17
- /** 玻璃透明度变化回调。 */
18
- onOpacity?: (n: number) => void;
19
- /** 是否启用改编模式(默认 false=隐藏入口)。 */
20
- adaptEnabled?: boolean;
21
25
  /** AI 进度实时状态(与书内共享同一份)。 */
22
26
  progress?: ProgressLine[];
23
27
  busy?: boolean;
@@ -0,0 +1,4 @@
1
+ import type { NovelApi } from '../api.ts';
2
+ export default function BookAnalysisView({ api }: {
3
+ api: NovelApi;
4
+ }): JSX.Element;
@@ -0,0 +1,12 @@
1
+ import type { ReactElement } from 'react';
2
+ export interface CmdAction {
3
+ icon: string;
4
+ label: string;
5
+ hint?: string;
6
+ run: () => void;
7
+ }
8
+ export declare function CmdPalette({ open, onClose, actions }: {
9
+ open: boolean;
10
+ onClose: () => void;
11
+ actions: CmdAction[];
12
+ }): ReactElement | null;
@@ -1,9 +1,13 @@
1
1
  import type { NovelApi } from '../api.ts';
2
2
  /** 开书向导页。 */
3
- export declare function CreateBookView({ api, onBack, onCreated, }: {
3
+ export declare function CreateBookView({ api, onBack, onCreated, initialIdea, initialName, }: {
4
4
  api: NovelApi;
5
5
  /** 返回书架。 */
6
6
  onBack: () => void;
7
7
  /** 开书成功:进入新书工作台。 */
8
8
  onCreated: (id: string) => void;
9
+ /** 从「创意灵感」带过来的起步想法(预填到「一句话想法」输入框)。 */
10
+ initialIdea?: string;
11
+ /** 从「创意灵感」带过来的初始书名。 */
12
+ initialName?: string;
9
13
  }): import("react").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import type { NovelApi } from '../api.ts';
2
+ import type { DirectorTodo } from '../../protocol.ts';
3
+ export default function DirectorView({ api, todos, onTodosChange }: {
4
+ api: NovelApi;
5
+ todos: DirectorTodo[];
6
+ onTodosChange?: (todos: DirectorTodo[]) => void;
7
+ }): JSX.Element;
@@ -0,0 +1,6 @@
1
+ import type { NovelApi } from '../api.ts';
2
+ import type { IdeaInspirationResult } from '../../protocol.ts';
3
+ export default function IdeaInspirationView({ api, onUseIdea }: {
4
+ api: NovelApi;
5
+ onUseIdea?: (idea: IdeaInspirationResult['ideas'][number]) => void;
6
+ }): JSX.Element;
@@ -0,0 +1,4 @@
1
+ import type { NovelApi } from '../api.ts';
2
+ export default function KnowledgeBaseView({ api }: {
3
+ api: NovelApi;
4
+ }): JSX.Element;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 「实时调用 / LIVE」—— 内嵌到 AI 进度窗的下半区(详情层),不再独立浮窗。
3
+ * 连接 /llm-live/stream,按 LLM 调用分组展示模型实时输出。
4
+ *
5
+ * 除实时输出外,这里还承担两件与「花了多少」有关的事:
6
+ * 1) 每次调用显示 token 用量(输入↑ / 输出↓ / 思考)与耗时、首字耗时;
7
+ * 2) 「查看 Prompt」按 sessionId 拉取这次调用**实际发送**的 system / user。
8
+ * 顶部另有一条「本次运行」累计条(进程内,重启归零)。
9
+ *
10
+ * 状态色全部走 panel.module.css 的 .lfPill / .lfDot(主题令牌 + --nf-streaming),
11
+ * 不再内联硬编码色;布局性 inline style 保留(均为令牌引用或动态值)。
12
+ */
13
+ export default function LiveFeedLog(): JSX.Element;
@@ -0,0 +1,5 @@
1
+ import type { NovelApi } from '../api.ts';
2
+ export default function MarketRadarView({ api, bookId }: {
3
+ api: NovelApi;
4
+ bookId?: string;
5
+ }): JSX.Element;
@@ -1,7 +1,7 @@
1
1
  import type { NovelApi } from '../api.ts';
2
2
  import type { SavedModel } from '../../protocol.ts';
3
- /** 目录不可用时回退的内置预设(历史行为)。 */
4
- export declare const FALLBACK_MODEL_PRESETS: readonly ["deepseek-v4-flash", "deepseek-v4-pro", "deepseek-chat", "deepseek-reasoner"];
3
+ /** 目录不可用时回退的内置预设(对齐当前模型目录)。 */
4
+ export declare const FALLBACK_MODEL_PRESETS: readonly ["deepseek-flash", "deepseek-v4-pro", "deepseek-chat", "deepseek-reasoner"];
5
5
  export interface ModelManagerProps {
6
6
  api: NovelApi;
7
7
  provider: string;
@@ -1,7 +1,12 @@
1
1
  import type { NovelApi } from '../api.ts';
2
2
  import type { PanelController } from './controller.ts';
3
+ /**
4
+ * 面板宽度低于此值时自动折叠左侧导航。
5
+ * 依据:.panelNav 占 216px,内容区留到 ~680px 才不至于把正文挤成竖排。
6
+ * 宿主中列宽度 ≠ 视口宽度(用户可拖拽侧边栏),所以必须用实测宽度而非媒体查询。
7
+ */
3
8
  /** The panel's tab identifiers. */
4
- export type NovelTab = 'workflow' | 'overview' | 'blurb' | 'plan' | 'bible' | 'world' | 'foreshadow' | 'assistant' | 'settings' | 'characters' | 'roles' | 'facts' | 'plotlines' | 'reviews' | 'progress' | 'breakdown' | 'assetsGenre' | 'assetsProgression' | 'assetsTemplates' | 'assetsRules' | 'assetsStyle' | 'run' | 'manhua' | 'book' | 'assets';
9
+ export type NovelTab = 'workflow' | 'overview' | 'blurb' | 'plan' | 'bible' | 'world' | 'foreshadow' | 'assistant' | 'settings' | 'characters' | 'roles' | 'facts' | 'plotlines' | 'reviews' | 'progress' | 'breakdown' | 'director' | 'knowledge' | 'assetsGenre' | 'assetsProgression' | 'assetsTemplates' | 'assetsRules' | 'assetsStyle' | 'run' | 'book' | 'assets';
5
10
  /** Panel shell props. */
6
11
  export interface NovelPanelProps {
7
12
  /** The panel state owner (open/close/toggle). */
@@ -0,0 +1,18 @@
1
+ /** 墨案统一页头:eyebrow(11 大写窄) + 衬线大标题 + 一句说明 + 主/次动作。
2
+ * 每个视图只用一个 PageHeader,消灭"各自为政"的页面标题。
3
+ * 图标用 lucide 16 (单色),标题旁禁止 emoji;标题用衬线 Display(书卷感)。 */
4
+ import type { ReactNode } from 'react';
5
+ export declare function PageHeader({ eyebrow, title, icon, sub, actions, right }: {
6
+ /** 页眉小标(大写窄,可选,如 "BOOKSHELF")。 */
7
+ eyebrow?: string;
8
+ /** 页面大标题(衬线 Display)。 */
9
+ title: string;
10
+ /** lucide 图标(单色,16px),可选。 */
11
+ icon?: ReactNode;
12
+ /** 一句话辅助说明(meta)。 */
13
+ sub?: string;
14
+ /** 右侧主/次按钮组。 */
15
+ actions?: ReactNode;
16
+ /** 标题右上(如 AI 微签)。 */
17
+ right?: ReactNode;
18
+ }): JSX.Element;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 提示词槽位:给作者留几个**安全可改**的位置来微调本书表达偏好。
3
+ *
4
+ * 边界写在界面上:槽位只**追加偏好**,不能覆盖道藏、写作红线、九条内容合规红线、
5
+ * 反 AI 规则与阶段契约 —— 这些由宿主锁定。清空即恢复默认。
6
+ */
7
+ import type { NovelApi } from '../api.ts';
8
+ export interface PromptSlotsViewProps {
9
+ api: NovelApi;
10
+ }
11
+ export default function PromptSlotsView({ api }: PromptSlotsViewProps): JSX.Element;
@@ -1,14 +1,19 @@
1
1
  import type { NovelApi } from '../api.ts';
2
- type SettingsTab = 'model' | 'writing' | 'image' | 'files' | 'appearance';
3
- type ThemeMode = 'system' | 'light' | 'dark';
4
- type ThemeName = 'liquid' | 'neumorph' | 'macos' | 'clay';
5
- type ThemeDensity = 'comfort' | 'compact' | 'spacious';
6
- export declare function SettingsView({ api, onTheme, onSettingsTab, onEditorFontSize, onBackground, onOpacity }: {
2
+ type SettingsTab = 'model' | 'files' | 'appearance';
3
+ export declare function SettingsView({ api, variant, onSettingsTab, onEditorFontSize, onBackground, themeMode, themeDensity, onChangeThemeMode, onChangeThemeDensity }: {
7
4
  api: NovelApi;
8
- onTheme?: (theme: ThemeName, mode: ThemeMode, density: ThemeDensity) => void;
5
+ /** page = 全屏 SubPage(保留给旧入口);drawer = 右滑抽屉内容(无壳)。 */
6
+ variant?: 'page' | 'drawer';
9
7
  onSettingsTab?: (tab: SettingsTab) => void;
10
8
  onEditorFontSize?: (n: number) => void;
11
9
  onBackground?: (bg: string | undefined, blur: number) => void;
12
- onOpacity?: (n: number) => void;
10
+ /** 全局显示模式(联动整个面板,NovelPanel 落 localStorage)。 */
11
+ themeMode: 'system' | 'light' | 'dark';
12
+ /** 全局界面密度。 */
13
+ themeDensity: 'comfort' | 'compact' | 'spacious';
14
+ /** 改变全局显示模式。 */
15
+ onChangeThemeMode: (m: 'system' | 'light' | 'dark') => void;
16
+ /** 改变全局界面密度。 */
17
+ onChangeThemeDensity: (d: 'comfort' | 'compact' | 'spacious') => void;
13
18
  }): import("react").JSX.Element;
14
19
  export {};
@@ -1,9 +1,16 @@
1
+ /**
2
+ * 书架首页视图:书卡网格(封面/书名/简介/进度)+ 搜索筛选 + 开书入口。
3
+ * 进入小说工坊默认展示;点击书卡进入该书工作台,+ 进入开书向导页。
4
+ */
5
+ import { type ReactNode } from 'react';
1
6
  import type { NovelApi } from '../api.ts';
2
7
  import type { BookshelfSnapshot } from '../../protocol.ts';
3
8
  /** 书架首页。 */
4
- export declare function ShelfView({ api, shelf, onOpenBook, onReadBook, onAddBook, onImportBook, }: {
9
+ export declare function ShelfView({ api, shelf, onOpenBook, onReadBook, onAddBook, onImportBook, onOpenAdapt, toolbarExtra, }: {
5
10
  api: NovelApi;
6
11
  shelf: BookshelfSnapshot;
12
+ /** 书架工具行右端插槽:组入口按钮由 AuthorHome 下放(创作 / 灵感策划 / 资产)。 */
13
+ toolbarExtra?: ReactNode;
7
14
  /** 点击书卡:激活该书并进入工作台。 */
8
15
  onOpenBook: (id: string) => void;
9
16
  /** 点击「阅读」:激活该书并进入沉浸式阅读页。 */
@@ -12,4 +19,6 @@ export declare function ShelfView({ api, shelf, onOpenBook, onReadBook, onAddBoo
12
19
  onAddBook: () => void;
13
20
  /** 点击「导入」:打开导入弹窗(已有项目目录 / txt/md 全本)。 */
14
21
  onImportBook: () => void;
22
+ /** 点击「改编模式」:进入改编六步向导(入口收在书架页头,与导入并排)。 */
23
+ onOpenAdapt?: () => void;
15
24
  }): import("react").JSX.Element;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * 统一子页骨架(1:1 对齐 demo-subpages.html 的 .subpage / .subpage-head / .subpage-body)。
3
+ *
4
+ * 所有作者级与书内子页都应套这层壳:
5
+ * - head:返回钮(可选)+ 大标题 + meta + 右侧操作区
6
+ * - body:页面内容(内部按 demo 用 .card / .box / .grid / .row 等块)
7
+ * 业务逻辑继续留在各自的 View 组件里,这里只负责「壳」。
8
+ */
9
+ import type { ReactNode } from 'react';
10
+ export declare function SubPage(props: {
11
+ /** 页面大标题(衬线 display 档)。 */
12
+ title: string;
13
+ /** 标题右侧的说明行(如「4 本书 · 当前书《X》」)。 */
14
+ meta?: ReactNode;
15
+ /** 返回钮:作者级返回书架,书内返回总编台。 */
16
+ back?: {
17
+ label: string;
18
+ onClick: () => void;
19
+ };
20
+ /** 页头右侧操作区(主 CTA 放最右)。 */
21
+ actions?: ReactNode;
22
+ /** 主题系统局部模式(透传到根 div 的 data-nf-mode,供设置页等预览明暗)。 */
23
+ dataNfMode?: 'light' | 'dark';
24
+ /** 主题系统局部密度(透传到根 div 的 data-nf-density)。 */
25
+ dataNfDensity?: 'comfort' | 'compact' | 'spacious';
26
+ children: ReactNode;
27
+ }): JSX.Element;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * 张力曲线:把「每章该有多紧」画出来并可逐章调整。
3
+ *
4
+ * 图上是三条线:
5
+ * 参考(虚线,形状预设) / 目标(实线,作者或规划设定) / 实际(散点,审稿打分)。
6
+ * 下方列出规则核对发现的曲线级问题(连续同值、高位不回落、长期低位、实际偏离目标)。
7
+ *
8
+ * 张力只影响写作提示词里的"松紧"指引,不改变任何校验规则。
9
+ */
10
+ import type { NovelApi } from '../api.ts';
11
+ export interface TensionViewProps {
12
+ api: NovelApi;
13
+ /** 一键按建议修订(合并审稿/张力/时间线后改这一章;由父级统一发起)。 */
14
+ onRevise?: (chapterNo: number) => void;
15
+ /** 外部忙碌态(修订进行中时禁用按钮)。 */
16
+ busy?: boolean;
17
+ }
18
+ export default function TensionView({ api, onRevise, busy: outerBusy }: TensionViewProps): JSX.Element;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * 故事时间线:把逐章抽取的「时间点 / 地点 / 在场角色 / 事件」按章节顺序排开,
3
+ * 带规则初筛 + AI 复核的矛盾清单,并支持就地修正(手改后标记为 manual)。
4
+ *
5
+ * 与「编年录」的分工:编年录记事实状态,这里记**顺序**——专门抓时间倒流、
6
+ * 地点瞬移、跨度不合理这类长篇最容易崩的地方。
7
+ */
8
+ import type { NovelApi } from '../api.ts';
9
+ export interface TimelineViewProps {
10
+ api: NovelApi;
11
+ /** 章节号列表(用于「抽取本章」下拉)。 */
12
+ chapters: number[];
13
+ /** 一键按建议修订(合并审稿/时间线/张力后改这一章;由父级统一发起)。 */
14
+ onRevise?: (chapterNo: number) => void;
15
+ /** 外部忙碌态(修订进行中时禁用按钮)。 */
16
+ busy?: boolean;
17
+ }
18
+ export default function TimelineView({ api, chapters, onRevise, busy: outerBusy }: TimelineViewProps): JSX.Element;
@@ -1,7 +1,9 @@
1
1
  /**
2
- * Tiny translation helper for the panel: reads the zh dict with the en dict
3
- * as fallback (the family plugins use a full locale registry; the panel keeps
4
- * a dependency-free helper so the client bundle stays self-contained).
2
+ * Tiny translation helper for the panel.
3
+ *
4
+ * 面板是中文单语界面:文案只在 `locales.ts` 定义一次,这里按类型化键位取值
5
+ * (键位不匹配会在编译期报错),保持客户端 bundle 自包含、不引入运行时语言服务。
6
+ * 需要多语言时再接入 DSH 的 locale 服务,届时只需替换本函数实现。
5
7
  */
6
8
  import { type NovelKey } from '../locales.ts';
7
9
  /** Translate one key with optional {placeholder} substitution. */
@@ -0,0 +1,56 @@
1
+ /**
2
+ * 热门题材雷达的界面状态规则。
3
+ *
4
+ * 职责边界:本文件只回答「界面上此刻能不能点」,不持有任何数据。抽成纯函数的
5
+ * 理由是它可以离线测——组件渲染不好测,判定逻辑好测。
6
+ *
7
+ * 下面先用**独立表述的验收条件**写清楚要什么,再由两个函数实现;这样即使日后
8
+ * 需求变化,改动方向也是照着条件走,而不是照着某个外部实现的形状走。
9
+ *
10
+ * R1 扫榜或分析进行中,不得改动作品勾选(否则分析输入与界面不一致);
11
+ * R2 未勾选任何作品时不能开始分析;
12
+ * R3 已经有报告之后,仍允许改选作品并**再次**分析 —— 不得退化成"只能查看";
13
+ * R4 信号勾选只在确实换了一份报告时复位;同一份报告的重渲染不得冲掉作者手选。
14
+ */
15
+ /** 雷达三个入口此刻的可用性,以及分析按钮该显示哪种文案。 */
16
+ export interface RadarControls {
17
+ /** 扫榜按钮是否可点。 */
18
+ canScan: boolean;
19
+ /** 作品勾选(含全选 / 清空)是否可改。 */
20
+ canSelectCandidates: boolean;
21
+ /** 分析按钮是否可点。 */
22
+ canAnalyze: boolean;
23
+ /**
24
+ * 分析按钮的文案标识:
25
+ * - `wait`:还在扫榜,先等榜单;
26
+ * - `pick`:还没勾选作品;
27
+ * - `first`:首次分析;
28
+ * - `again`:已有报告,这次是再出一份。
29
+ */
30
+ analyzeLabel: 'wait' | 'pick' | 'first' | 'again';
31
+ }
32
+ /**
33
+ * 实现 R1-R3:判定三个入口的可用性。
34
+ * @param state - 当前界面状态。
35
+ * @returns 各入口可用性与分析按钮文案标识。
36
+ */
37
+ export declare function radarControls(state: {
38
+ /** 正在抓榜单。 */
39
+ scanning: boolean;
40
+ /** 正在做 AI 分析。 */
41
+ analyzing: boolean;
42
+ /** 已勾选的作品数。 */
43
+ pickedCount: number;
44
+ /** 界面上是否已有可查看的报告。 */
45
+ hasReport: boolean;
46
+ }): RadarControls;
47
+ /**
48
+ * 实现 R4:本次报告是否**不是**勾选当前所依据的那一份。
49
+ *
50
+ * 传入的是上一次已经据以复位过的报告标识:相同 → 不动作者勾选;不同 → 勾选所依据
51
+ * 的信号集合已经变了,需要按新报告重新给出推荐勾选。
52
+ * @param selectionBasis - 勾选当前依据的报告标识(空串表示尚未复位过)。
53
+ * @param incoming - 本次拿到的报告标识(空串表示旧版产物没有该标识)。
54
+ * @returns 需要按新报告重置勾选时为 true。
55
+ */
56
+ export declare function isDifferentReport(selectionBasis: string, incoming: string): boolean;
@@ -0,0 +1,2 @@
1
+ /** 弹一条 toast。kind: 'done'(翡翠勾)/ 'error'(红叉)/ 'info'(中性)。 */
2
+ export declare function showToast(text: string, kind?: 'done' | 'error' | 'info'): void;