@cloud411716/fancy-webnovel 2.2.0 → 3.0.3
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 +65 -0
- package/client.js +201 -15
- package/cordis.patch.yml +5 -1
- package/docs/douyin-plugin.md +118 -0
- package/docs/material-library/README.md +404 -0
- package/docs/material-library/import.js +437 -0
- package/docs/material-library/prompt.md +370 -0
- package/docs/material-library/queries.surql +94 -0
- package/docs/material-library/sample.jsonl +14 -0
- package/docs/material-library/schema.surql +46 -0
- package/docs/mcp-profile.example.yml +24 -0
- package/docs/story-graph-design.md +602 -0
- package/docs/story-graph-validation.md +81 -0
- package/docs/workspace-mcp.md +284 -0
- package/index.js +12 -7
- package/lib/atomic-write.js +109 -0
- package/lib/chapter-order.js +100 -0
- package/lib/confirmation.js +80 -0
- package/lib/db-init.js +123 -0
- package/lib/deployed-state.js +11 -11
- package/lib/direction-labels.js +265 -0
- package/lib/error-codes.js +31 -31
- package/lib/infra.js +29 -4
- package/lib/material-db.js +149 -0
- package/lib/path-guard.js +150 -0
- package/lib/projects.js +400 -0
- package/lib/scraper-utils.js +140 -0
- package/lib/surreal-server.js +338 -0
- package/lib/topic-decision.js +860 -0
- package/lib/topic-fields.js +251 -0
- package/lib/topic-schema.js +225 -0
- package/lib/workspace.js +501 -0
- package/package.json +31 -7
- package/plugins/fancy-analyze/analyze-definitions.md +519 -0
- package/plugins/fancy-analyze/index.js +1128 -77
- package/plugins/fancy-analyze/ingest-coverage.js +107 -0
- package/plugins/fancy-analyze/schema-analyze.md +355 -107
- package/plugins/fancy-analyze/scripts/append-summary-chapter.js +612 -0
- package/plugins/fancy-analyze/summary-progress.js +71 -7
- package/plugins/fancy-analyze/templates.js +437 -139
- package/plugins/fancy-bootstrap/index.js +276 -131
- package/plugins/fancy-bootstrap/scripts/init.js +59 -25
- package/plugins/fancy-bootstrap/templates.js +35 -18
- package/plugins/fancy-db/index.js +172 -0
- package/plugins/fancy-douyin/deploy.js +134 -0
- package/plugins/fancy-douyin/index.js +551 -0
- package/plugins/fancy-douyin/prompts/01-analysis-prompt.md +84 -0
- package/plugins/fancy-douyin/scripts/crawl-note.cjs +194 -0
- package/plugins/fancy-douyin/scripts/lib.cjs +197 -0
- package/plugins/fancy-douyin/scripts/scan-account.cjs +128 -0
- package/plugins/fancy-douyin/scripts/start-chrome.cjs +203 -0
- package/plugins/fancy-douyin/state.js +197 -0
- package/plugins/fancy-douyin/templates.js +127 -0
- package/plugins/fancy-export/exporter.js +805 -0
- package/plugins/fancy-export/index.js +63 -0
- package/plugins/fancy-import/import-driver.js +29 -6
- package/plugins/fancy-import/index.js +13 -5
- package/plugins/fancy-import/prompts/01-import-prompt.md +39 -14
- package/plugins/fancy-import/templates.js +17 -8
- package/plugins/fancy-material/exporter.js +153 -0
- package/plugins/fancy-material/genres.js +256 -0
- package/plugins/fancy-material/index.js +835 -0
- package/plugins/fancy-material/inventory.js +145 -0
- package/plugins/fancy-material/kinds.js +313 -0
- package/plugins/fancy-material/queue.js +55 -0
- package/plugins/fancy-material/scripts/query.js +254 -0
- package/plugins/fancy-material/templates.js +258 -0
- package/plugins/fancy-material/tool-deploy.js +138 -0
- package/plugins/fancy-material/validate.js +149 -0
- package/plugins/fancy-project/index.js +133 -0
- package/plugins/fancy-scan/existing-block.js +100 -0
- package/plugins/fancy-scan/index.js +410 -21
- package/plugins/fancy-scan/prompts/01-analysis-prompt.md +302 -0
- package/plugins/fancy-scan/scripts/append-block.js +725 -0
- package/plugins/fancy-scan/scripts/report-validate.js +824 -0
- package/plugins/fancy-scan/scripts/run-scan.js +169 -22
- package/plugins/fancy-scan/scripts/scrapers/fanqie-rank-scraper.js +145 -16
- package/plugins/fancy-scan/scripts/scrapers/jjwxc-rank-scraper.js +179 -49
- package/plugins/fancy-scan/scripts/scrapers/qimao-rank-scraper.js +38 -20
- package/plugins/fancy-scan/templates/blocks.js +155 -0
- package/plugins/fancy-scan/templates/platforms.js +372 -0
- package/plugins/fancy-scan/templates/report-schema.js +90 -0
- package/plugins/fancy-scan/templates.js +545 -146
- package/plugins/fancy-scan/tool-deploy.js +335 -0
- package/plugins/fancy-scan/wait-turn.js +46 -0
- package/plugins/fancy-story-builder/db/README.md +106 -0
- package/plugins/fancy-story-builder/db/client.js +228 -0
- package/plugins/fancy-story-builder/db/commands.js +145 -0
- package/plugins/fancy-story-builder/db/ids.js +39 -0
- package/plugins/fancy-story-builder/db/import.js +798 -0
- package/plugins/fancy-story-builder/db/project.js +299 -0
- package/plugins/fancy-story-builder/db/query.js +361 -0
- package/plugins/fancy-story-builder/db/schema.js +417 -0
- package/plugins/fancy-story-builder/db/stage-sync.js +238 -0
- package/plugins/fancy-story-builder/flesh-output.js +19 -6
- package/plugins/fancy-story-builder/index.js +4105 -396
- package/plugins/fancy-story-builder/patch-driver.js +390 -0
- package/plugins/fancy-story-builder/prompts/01-skeleton-prompt.md +29 -19
- package/plugins/fancy-story-builder/prompts/02-flesh-prompt.md +72 -10
- package/plugins/fancy-story-builder/prompts/03-rhythm-prompt.md +40 -5
- package/plugins/fancy-story-builder/prompts/04-writing-prompt.md +37 -0
- package/plugins/fancy-story-builder/purpose-template.md +42 -66
- package/plugins/fancy-story-builder/references/formulas-skeleton.json +229 -56
- package/plugins/fancy-story-builder/references/genre-profiles.json +3514 -0
- package/plugins/fancy-story-builder/references/glossary.md +15 -6
- package/plugins/fancy-story-builder/references/index.md +97 -6
- package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/00-index.md +1 -1
- package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/07-audit.md +25 -7
- package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/01-character.md +5 -1
- package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/03-relations.md +6 -2
- package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/05-audit.md +15 -5
- package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/00-index.md +1 -1
- package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/01-positioning.md +2 -1
- package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/03-entities.md +1 -1
- package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/06-audit.md +19 -1
- package/plugins/fancy-story-builder/schema-setting.json +1100 -0
- package/plugins/fancy-story-builder/schema-setting.md +201 -293
- package/plugins/fancy-story-builder/scripts/brief-validate.js +164 -0
- package/plugins/fancy-story-builder/scripts/content-quality.js +4 -1
- package/plugins/fancy-story-builder/scripts/flesh-validate.js +135 -12
- package/plugins/fancy-story-builder/scripts/graph-utils.js +146 -47
- package/plugins/fancy-story-builder/scripts/reference-log.js +110 -0
- package/plugins/fancy-story-builder/scripts/rhythm-validate.js +100 -4
- package/plugins/fancy-story-builder/scripts/schema-pages.js +2668 -0
- package/plugins/fancy-story-builder/scripts/semantic-lint.js +5 -1
- package/plugins/fancy-story-builder/scripts/skeleton-validate.js +158 -17
- package/plugins/fancy-story-builder/scripts/stage-batches.js +36 -2
- package/plugins/fancy-story-builder/scripts/stage-contract.js +12 -0
- package/plugins/fancy-story-builder/scripts/story-artifacts.js +933 -0
- package/plugins/fancy-story-builder/scripts/upstream-query.js +1 -1
- package/plugins/fancy-story-builder/scripts/v2/baseline.js +112 -0
- package/plugins/fancy-story-builder/scripts/v2/cast.js +517 -0
- package/plugins/fancy-story-builder/scripts/v2/context.js +434 -0
- package/plugins/fancy-story-builder/scripts/v2/contracts.js +493 -0
- package/plugins/fancy-story-builder/scripts/v2/core.js +419 -0
- package/plugins/fancy-story-builder/scripts/v2/engine.js +1068 -0
- package/plugins/fancy-story-builder/scripts/v2/export-markdown.js +794 -0
- package/plugins/fancy-story-builder/scripts/v2/genre.js +195 -0
- package/plugins/fancy-story-builder/scripts/v2/knowledge.js +321 -0
- package/plugins/fancy-story-builder/scripts/v2/macro.js +409 -0
- package/plugins/fancy-story-builder/scripts/v2/manifest.js +538 -0
- package/plugins/fancy-story-builder/scripts/v2/migrate.js +137 -0
- package/plugins/fancy-story-builder/scripts/v2/prompts.js +1335 -0
- package/plugins/fancy-story-builder/scripts/v2/rhythm.js +618 -0
- package/plugins/fancy-story-builder/scripts/v2/scale.js +843 -0
- package/plugins/fancy-story-builder/scripts/v2/snapshot.js +121 -0
- package/plugins/fancy-story-builder/scripts/v2/stages.js +273 -0
- package/plugins/fancy-story-builder/scripts/v2/writing.js +216 -0
- package/plugins/fancy-story-builder/storydb/README.md +271 -0
- package/plugins/fancy-story-builder/storydb/cli.js +458 -0
- package/plugins/fancy-story-builder/storydb/client.js +351 -0
- package/plugins/fancy-story-builder/storydb/compile.js +452 -0
- package/plugins/fancy-story-builder/storydb/context.js +288 -0
- package/plugins/fancy-story-builder/storydb/definitions.js +699 -0
- package/plugins/fancy-story-builder/storydb/driver.js +106 -0
- package/plugins/fancy-story-builder/storydb/dsh-tools.js +313 -0
- package/plugins/fancy-story-builder/storydb/export.js +175 -0
- package/plugins/fancy-story-builder/storydb/ids.js +31 -0
- package/plugins/fancy-story-builder/storydb/impact.js +170 -0
- package/plugins/fancy-story-builder/storydb/import.js +559 -0
- package/plugins/fancy-story-builder/storydb/mcp.js +99 -0
- package/plugins/fancy-story-builder/storydb/prompts.js +952 -0
- package/plugins/fancy-story-builder/storydb/stage-command.js +379 -0
- package/plugins/fancy-story-builder/storydb/stage.js +426 -0
- package/plugins/fancy-story-builder/storydb/store.js +891 -0
- package/plugins/fancy-story-builder/storydb/tools.js +592 -0
- package/plugins/fancy-story-builder/storydb/validation.js +183 -0
- package/plugins/fancy-story-builder/templates/v2/10-scale/scale-template.json +144 -0
- package/plugins/fancy-story-builder/templates/v2/20-macro/emotion-template.json +15 -0
- package/plugins/fancy-story-builder/templates/v2/20-macro/endings-template.json +16 -0
- package/plugins/fancy-story-builder/templates/v2/20-macro/lines-template.json +28 -0
- package/plugins/fancy-story-builder/templates/v2/20-macro/roles-template.json +10 -0
- package/plugins/fancy-story-builder/templates/v2/20-macro/story-template.json +19 -0
- package/plugins/fancy-story-builder/templates/v2/20-macro/volumes-template.json +24 -0
- package/plugins/fancy-story-builder/templates/v2/20-macro/world-template.json +24 -0
- package/plugins/fancy-story-builder/templates/v2/30-cast/characters-template.json +49 -0
- package/plugins/fancy-story-builder/templates/v2/30-cast/climaxes-template.json +14 -0
- package/plugins/fancy-story-builder/templates/v2/30-cast/conflicts-template.json +30 -0
- package/plugins/fancy-story-builder/templates/v2/30-cast/factions-template.json +18 -0
- package/plugins/fancy-story-builder/templates/v2/30-cast/foreshadows-template.json +29 -0
- package/plugins/fancy-story-builder/templates/v2/30-cast/information-template.json +29 -0
- package/plugins/fancy-story-builder/templates/v2/30-cast/items-template.json +13 -0
- package/plugins/fancy-story-builder/templates/v2/30-cast/locations-template.json +12 -0
- package/plugins/fancy-story-builder/templates/v2/30-cast/payoffs-template.json +16 -0
- package/plugins/fancy-story-builder/templates/v2/30-cast/relations-template.json +44 -0
- package/plugins/fancy-story-builder/templates/v2/40-rhythm/chapter-map-template.json +81 -0
- package/plugins/fancy-story-builder/templates/v2/40-rhythm/outline-template.json +162 -0
- package/plugins/fancy-story-builder/templates/v2/50-writing/ledger-template.json +46 -0
- package/plugins/fancy-story-builder/templates/v2/60-deslop/report-template.json +10 -0
- package/plugins/fancy-story-builder/templates//350/212/202/345/245/217//346/227/266/345/272/217/346/230/240/345/260/204/346/250/241/346/235/277.json +267 -44
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//344/270/226/347/225/214/350/247/202/350/247/204/345/210/231/346/250/241/346/235/277.json +121 -19
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/205/263/351/224/256/351/201/223/345/205/267/346/250/241/346/235/277.json +129 -21
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/205/266/344/273/226/345/256/236/344/275/223/346/250/241/346/235/277.json +62 -0
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/206/262/347/252/201/346/250/241/346/235/277.json +76 -17
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/211/247/346/203/205/346/250/241/346/235/277.json +56 -8
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/212/277/345/212/233/346/250/241/346/235/277.json +63 -13
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//345/234/260/347/202/271/346/250/241/346/235/277.json +34 -6
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//347/273/223/345/261/200/346/250/241/346/235/277.json +81 -18
- package/plugins/fancy-story-builder/templates//350/241/200/350/202/211//350/247/222/350/211/262/346/250/241/346/235/277.json +202 -42
- package/plugins/fancy-story-builder/templates//351/252/250/346/236/266//345/205/263/347/263/273/346/250/241/346/235/277.json +160 -27
- package/plugins/fancy-story-builder/templates//351/252/250/346/236/266//345/256/236/344/275/223/346/250/241/346/235/277.json +217 -41
- package/plugins/fancy-story-builder/templates//351/252/250/346/236/266//346/241/206/346/236/266/346/250/241/346/235/277.json +215 -41
- package/plugins/fancy-story-builder/templates.js +272 -74
- package/plugins/fancy-story-builder/wiki-references.js +429 -93
- package/plugins/fancy-story-builder/writing-driver.js +336 -9
- package/plugins/fancy-topic/index.js +414 -61
- package/plugins/fancy-topic/prompts/01-exploration-prompt.md +115 -0
- package/plugins/fancy-topic/scripts/save-suggestion.js +219 -0
- package/plugins/fancy-topic/scripts/select-topic.js +106 -63
- package/plugins/fancy-topic/templates.js +225 -122
- package/plugins/fancy-topic/tool-deploy.js +200 -0
- package/lib/safe-rm.js +0 -94
|
@@ -24,13 +24,14 @@
|
|
|
24
24
|
* 所以**头部要记章节清单**,而且它就是唯一事实源:
|
|
25
25
|
*
|
|
26
26
|
* ---
|
|
27
|
-
* 标题: 节奏韵律-总结
|
|
28
|
-
* 标签: [总结, 节奏韵律]
|
|
29
27
|
* 已总结章节:
|
|
30
28
|
* - 全球高武-节奏韵律-第1章
|
|
31
29
|
* - 全球高武-节奏韵律-第2章
|
|
32
30
|
* ---
|
|
33
31
|
*
|
|
32
|
+
* 头部**只有这一个键** —— 早先还写过「标题:」「标签:」,但整个插件里
|
|
33
|
+
* 没有任何代码读它们,是死字段(详见 append-summary-chapter.js)。
|
|
34
|
+
*
|
|
34
35
|
* 由此:
|
|
35
36
|
* · 待总结章节 = 源文件清单 − 头部已总结章节
|
|
36
37
|
* · 派活时**只给目录**,章节由模型自己去目录里比对(几千章时列名字会撑爆提示词)
|
|
@@ -59,6 +60,39 @@ export const SUMMARY_FRONTMATTER_KEY = '已总结章节';
|
|
|
59
60
|
/** llm_wiki 的摄入产物目录,不是技法目录。 */
|
|
60
61
|
export const EXCLUDED_WIKI_DIRS = ['来源', '来源摘要'];
|
|
61
62
|
|
|
63
|
+
/**
|
|
64
|
+
* 跨章节实体页目录:这些目录也要做 summary,但总结单位是“实体页”,
|
|
65
|
+
* 不是“章节”。提示词会读取每个实体页的 `## 可复用设计规则` 和
|
|
66
|
+
* `## 风险与反例`,提炼跨实体、跨章节的设计原则。
|
|
67
|
+
*/
|
|
68
|
+
export const ENTITY_SCOPED_DIRS = [
|
|
69
|
+
'人物关系设计',
|
|
70
|
+
'势力结构',
|
|
71
|
+
'世界观设计',
|
|
72
|
+
'冲突设计',
|
|
73
|
+
'主线支线结构',
|
|
74
|
+
'分卷节奏',
|
|
75
|
+
'伏笔布局',
|
|
76
|
+
'角色弧光设计',
|
|
77
|
+
];
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* 旧版按章结构页目录。它们与新版实体页**不是同一种东西**:
|
|
81
|
+
* · 伏笔回收(按章)→ 伏笔布局(按伏笔实体)
|
|
82
|
+
* · 世界观构建 / 世界观规则设计(按章)→ 世界观设计(按规则/体系实体)
|
|
83
|
+
* · 角色弧光(按章)→ 角色弧光设计(按角色实体)
|
|
84
|
+
*
|
|
85
|
+
* 不能自动迁移,也不能把它们当实体页检查 —— 否则每章一个页面会被误判成
|
|
86
|
+
* “同一个实体有多个页面”。这里只负责让它们不参与 summary 派发,并在
|
|
87
|
+
* status / summary-status 里提示重新 ingest。
|
|
88
|
+
*/
|
|
89
|
+
export const LEGACY_STRUCTURE_DIRS = [
|
|
90
|
+
'伏笔回收',
|
|
91
|
+
'世界观构建',
|
|
92
|
+
'世界观规则设计',
|
|
93
|
+
'角色弧光',
|
|
94
|
+
];
|
|
95
|
+
|
|
62
96
|
/** 进度状态。 */
|
|
63
97
|
export const SUMMARY_STATE = {
|
|
64
98
|
DONE: 'done',
|
|
@@ -140,7 +174,7 @@ export function parseSummarizedChapters(frontmatter) {
|
|
|
140
174
|
* 把「已总结章节」的名字对齐到源文件标识。
|
|
141
175
|
*
|
|
142
176
|
* 模型写章节名的格式很不统一(实测):
|
|
143
|
-
* -
|
|
177
|
+
* - `全球高武-场景转换-第3章` 精确
|
|
144
178
|
* - `[全球高武-世界观构建-第2章, 第3章]` 带方括号 + 简写
|
|
145
179
|
* - `第7章` 裸章号
|
|
146
180
|
*
|
|
@@ -219,7 +253,7 @@ export function alignChapterIds(names, sourceFiles) {
|
|
|
219
253
|
export function inferSummarizedChapters(text, knownIds) {
|
|
220
254
|
if (typeof text !== 'string' || text.length === 0) return { chapters: [], unmatched: [] };
|
|
221
255
|
const raw = [];
|
|
222
|
-
for (const match of text.matchAll(/^\s*-\s
|
|
256
|
+
for (const match of text.matchAll(/^\s*-\s*来源(?:章节|实体|页面)\s*[::]\s*(.+)$/gm)) {
|
|
223
257
|
// "来源章节:甲-第1章、甲-第2章" → 拆开
|
|
224
258
|
for (const part of String(match[1]).split(/[、,,;;]/)) {
|
|
225
259
|
const v = part.trim();
|
|
@@ -232,7 +266,7 @@ export function inferSummarizedChapters(text, knownIds) {
|
|
|
232
266
|
/**
|
|
233
267
|
* 取出章节标识里的章号。
|
|
234
268
|
*
|
|
235
|
-
*
|
|
269
|
+
* 章节标识长这样:`全球高武-场景转换-第10章`。
|
|
236
270
|
* 章号是稳定语义(技法名可能被打错字,章号不会),所以排序靠它。
|
|
237
271
|
*
|
|
238
272
|
* @param {string} id - 章节标识
|
|
@@ -286,6 +320,28 @@ export function listTechDirs(wikiRoot) {
|
|
|
286
320
|
return dirs.sort((a, b) => a.localeCompare(b, 'zh-Hans-CN'));
|
|
287
321
|
}
|
|
288
322
|
|
|
323
|
+
/**
|
|
324
|
+
* 返回需要做 summary 的目录:按章技法目录 + 跨章节实体目录。
|
|
325
|
+
* 旧版按章结构目录仍排除(它们等待迁移,不参与新 summary)。
|
|
326
|
+
*/
|
|
327
|
+
export function listSummaryDirs(wikiRoot) {
|
|
328
|
+
return listTechDirs(wikiRoot).filter(
|
|
329
|
+
(name) => !LEGACY_STRUCTURE_DIRS.includes(name));
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
function countEntityPages(wikiRoot, dirName) {
|
|
333
|
+
try {
|
|
334
|
+
const files = fs.readdirSync(path.join(wikiRoot, dirName), { withFileTypes: true });
|
|
335
|
+
return files.filter((file) =>
|
|
336
|
+
file.isFile() &&
|
|
337
|
+
file.name.endsWith('.md') &&
|
|
338
|
+
!file.name.endsWith('-总结.md')
|
|
339
|
+
).length;
|
|
340
|
+
} catch {
|
|
341
|
+
return 0;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
289
345
|
/**
|
|
290
346
|
* 读一个技法目录的进度。
|
|
291
347
|
*
|
|
@@ -323,6 +379,8 @@ export function readDirProgress(wikiRoot, dirName) {
|
|
|
323
379
|
|
|
324
380
|
const progress = {
|
|
325
381
|
name: dirName,
|
|
382
|
+
/** chapter = 按章技法;entity = 跨章节实体页。 */
|
|
383
|
+
scope: ENTITY_SCOPED_DIRS.includes(dirName) ? 'entity' : 'chapter',
|
|
326
384
|
summaryPath,
|
|
327
385
|
sourceFiles,
|
|
328
386
|
sourceCount: sourceFiles.length,
|
|
@@ -398,15 +456,21 @@ export function readDirProgress(wikiRoot, dirName) {
|
|
|
398
456
|
* 扫描全部技法目录的进度。
|
|
399
457
|
*
|
|
400
458
|
* @param {string} wikiRoot - 对标/wiki 的绝对路径
|
|
401
|
-
* @returns {{dirs: object[], done: object[], running: object[], pending: object[], noInput: object[], total: number}}
|
|
459
|
+
* @returns {{dirs: object[], legacyDirs: object[], done: object[], running: object[], pending: object[], noInput: object[], total: number}}
|
|
402
460
|
*/
|
|
403
461
|
export function scanSummaryProgress(wikiRoot) {
|
|
404
|
-
const
|
|
462
|
+
const allDirs = listTechDirs(wikiRoot);
|
|
463
|
+
const legacyDirs = allDirs
|
|
464
|
+
.filter((name) => LEGACY_STRUCTURE_DIRS.includes(name))
|
|
465
|
+
.map((name) => ({ name, pageCount: countEntityPages(wikiRoot, name) }));
|
|
466
|
+
const dirs = allDirs
|
|
467
|
+
.filter((name) => !LEGACY_STRUCTURE_DIRS.includes(name))
|
|
405
468
|
.map((name) => readDirProgress(wikiRoot, name))
|
|
406
469
|
.filter((p) => p !== null);
|
|
407
470
|
|
|
408
471
|
return {
|
|
409
472
|
dirs,
|
|
473
|
+
legacyDirs,
|
|
410
474
|
done: dirs.filter((p) => p.state === SUMMARY_STATE.DONE),
|
|
411
475
|
running: dirs.filter((p) => p.state === SUMMARY_STATE.RUNNING),
|
|
412
476
|
pending: dirs.filter((p) => p.state === SUMMARY_STATE.PENDING),
|