novelws 5.1.0 → 5.3.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.
- package/CHANGELOG.md +52 -0
- package/README.md +54 -3
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/dashboard.d.ts +3 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +42 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +18 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +23 -0
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/core/config.d.ts +4 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +5 -2
- package/dist/core/config.js.map +1 -1
- package/dist/server/datasource/db.d.ts +38 -0
- package/dist/server/datasource/db.d.ts.map +1 -0
- package/dist/server/datasource/db.js +323 -0
- package/dist/server/datasource/db.js.map +1 -0
- package/dist/server/datasource/fs.d.ts +30 -0
- package/dist/server/datasource/fs.d.ts.map +1 -0
- package/dist/server/datasource/fs.js +308 -0
- package/dist/server/datasource/fs.js.map +1 -0
- package/dist/server/datasource/index.d.ts +11 -0
- package/dist/server/datasource/index.d.ts.map +1 -0
- package/dist/server/datasource/index.js +33 -0
- package/dist/server/datasource/index.js.map +1 -0
- package/dist/server/index.d.ts +12 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +69 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/routes/characters.d.ts +4 -0
- package/dist/server/routes/characters.d.ts.map +1 -0
- package/dist/server/routes/characters.js +27 -0
- package/dist/server/routes/characters.js.map +1 -0
- package/dist/server/routes/plots.d.ts +4 -0
- package/dist/server/routes/plots.d.ts.map +1 -0
- package/dist/server/routes/plots.js +36 -0
- package/dist/server/routes/plots.js.map +1 -0
- package/dist/server/routes/protagonist.d.ts +4 -0
- package/dist/server/routes/protagonist.d.ts.map +1 -0
- package/dist/server/routes/protagonist.js +46 -0
- package/dist/server/routes/protagonist.js.map +1 -0
- package/dist/server/routes/relationships.d.ts +4 -0
- package/dist/server/routes/relationships.d.ts.map +1 -0
- package/dist/server/routes/relationships.js +27 -0
- package/dist/server/routes/relationships.js.map +1 -0
- package/dist/server/routes/stats.d.ts +4 -0
- package/dist/server/routes/stats.d.ts.map +1 -0
- package/dist/server/routes/stats.js +21 -0
- package/dist/server/routes/stats.js.map +1 -0
- package/dist/server/routes/stories.d.ts +4 -0
- package/dist/server/routes/stories.d.ts.map +1 -0
- package/dist/server/routes/stories.js +80 -0
- package/dist/server/routes/stories.js.map +1 -0
- package/dist/server/routes/timeline.d.ts +4 -0
- package/dist/server/routes/timeline.d.ts.map +1 -0
- package/dist/server/routes/timeline.js +17 -0
- package/dist/server/routes/timeline.js.map +1 -0
- package/dist/server/types.d.ts +199 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/utils/diagnostics.d.ts +2 -2
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js +46 -59
- package/dist/utils/diagnostics.js.map +1 -1
- package/package.json +13 -3
- package/templates/commands/analyze.md +20 -8
- package/templates/commands/expand.md +46 -20
- package/templates/commands/plan.md +3 -2
- package/templates/commands/specify.md +6 -2
- package/templates/commands/write.md +77 -24
- package/templates/dot-claude/CLAUDE.md +48 -8
- package/templates/resources/anti-ai.md +92 -13
- package/templates/resources/constitution.md +83 -140
- package/templates/resources/style-reference.md +30 -6
- package/templates/scripts/db_context.py +609 -0
- package/templates/scripts/db_init_protagonist.py +343 -0
- package/templates/scripts/db_sync.py +611 -0
- package/templates/scripts/db_volume_switch.py +278 -0
- package/templates/scripts/phase_a_init_db.py +428 -0
- package/templates/scripts/requirements.txt +1 -0
- package/templates/tracking/character-state.json +1 -3
- package/templates/tracking/plot-tracker.json +1 -5
- package/templates/tracking/relationships.json +1 -3
- package/templates/tracking/timeline.json +1 -3
- package/templates/volume-outline.md +31 -0
- package/templates/volume-summary.md +20 -0
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import { Client } from 'pg';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
export class DbDataSource {
|
|
4
|
+
config;
|
|
5
|
+
projectRoot;
|
|
6
|
+
client;
|
|
7
|
+
schema;
|
|
8
|
+
constructor(config, projectRoot) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.projectRoot = projectRoot;
|
|
11
|
+
this.schema = config.schema || 'novelws';
|
|
12
|
+
this.client = new Client({
|
|
13
|
+
host: config.host,
|
|
14
|
+
port: config.port,
|
|
15
|
+
database: config.dbname,
|
|
16
|
+
user: config.user,
|
|
17
|
+
password: config.password,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async connect() {
|
|
21
|
+
await this.client.connect();
|
|
22
|
+
await this.client.query(`SET search_path TO ${this.schema}, public`);
|
|
23
|
+
}
|
|
24
|
+
async disconnect() {
|
|
25
|
+
await this.client.end();
|
|
26
|
+
}
|
|
27
|
+
async query(sql, params) {
|
|
28
|
+
const result = await this.client.query(sql, params);
|
|
29
|
+
return result.rows;
|
|
30
|
+
}
|
|
31
|
+
async getStories() {
|
|
32
|
+
return [{ name: path.basename(this.projectRoot), path: this.projectRoot }];
|
|
33
|
+
}
|
|
34
|
+
async getOverview(_story) {
|
|
35
|
+
const [volCount] = await this.query('SELECT COUNT(*) as count FROM volumes');
|
|
36
|
+
const [chapStats] = await this.query('SELECT COUNT(*) as count, COALESCE(SUM(word_count), 0) as total_words FROM chapters');
|
|
37
|
+
const [current] = await this.query('SELECT vol_number FROM volumes ORDER BY vol_number DESC LIMIT 1');
|
|
38
|
+
return {
|
|
39
|
+
name: path.basename(this.projectRoot),
|
|
40
|
+
totalVolumes: parseInt(volCount?.count || '0', 10),
|
|
41
|
+
totalChapters: parseInt(chapStats?.count || '0', 10),
|
|
42
|
+
totalWords: parseInt(chapStats?.total_words || '0', 10),
|
|
43
|
+
currentVolume: current?.vol_number || 0,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
async getVolumes(_story) {
|
|
47
|
+
const rows = await this.query(`
|
|
48
|
+
SELECT v.vol_number, v.vol_title,
|
|
49
|
+
COUNT(c.global_chapter_number) as chapters,
|
|
50
|
+
COALESCE(SUM(c.word_count), 0) as words
|
|
51
|
+
FROM volumes v
|
|
52
|
+
LEFT JOIN chapters c ON c.vol_number = v.vol_number
|
|
53
|
+
GROUP BY v.vol_number, v.vol_title
|
|
54
|
+
ORDER BY v.vol_number
|
|
55
|
+
`);
|
|
56
|
+
return rows.map(r => ({
|
|
57
|
+
number: r.vol_number,
|
|
58
|
+
title: r.vol_title || `第 ${r.vol_number} 卷`,
|
|
59
|
+
chapters: parseInt(r.chapters, 10),
|
|
60
|
+
words: parseInt(r.words, 10),
|
|
61
|
+
progress: 0,
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
async getChapters(_story, vol) {
|
|
65
|
+
const where = vol ? 'WHERE c.vol_number = $1' : '';
|
|
66
|
+
const params = vol ? [vol] : [];
|
|
67
|
+
const rows = await this.query(`
|
|
68
|
+
SELECT c.global_chapter_number, c.vol_number, c.chapter_in_vol,
|
|
69
|
+
c.word_count, c.pov_character,
|
|
70
|
+
ARRAY_AGG(cp.character_name) FILTER (WHERE cp.character_name IS NOT NULL) as participants
|
|
71
|
+
FROM chapters c
|
|
72
|
+
LEFT JOIN chapter_participants cp ON cp.chapter_number = c.global_chapter_number
|
|
73
|
+
${where}
|
|
74
|
+
GROUP BY c.global_chapter_number, c.vol_number, c.chapter_in_vol, c.word_count, c.pov_character
|
|
75
|
+
ORDER BY c.global_chapter_number
|
|
76
|
+
`, params);
|
|
77
|
+
return rows.map(r => ({
|
|
78
|
+
globalNumber: r.global_chapter_number,
|
|
79
|
+
volumeNumber: r.vol_number,
|
|
80
|
+
chapterInVolume: r.chapter_in_vol,
|
|
81
|
+
title: `第 ${r.global_chapter_number} 章`,
|
|
82
|
+
words: r.word_count || 0,
|
|
83
|
+
pov: r.pov_character || '',
|
|
84
|
+
participants: r.participants || [],
|
|
85
|
+
hasSynopsis: true,
|
|
86
|
+
hasContent: (r.word_count || 0) > 0,
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
async getCharacters(_story, vol) {
|
|
90
|
+
let sql;
|
|
91
|
+
let params;
|
|
92
|
+
if (vol) {
|
|
93
|
+
sql = `
|
|
94
|
+
SELECT DISTINCT ch.name, ch.aliases, ch.identity_type,
|
|
95
|
+
ch.first_vol, ch.first_chap, ch.cultivation_level, ch.faction, ch.status
|
|
96
|
+
FROM characters ch
|
|
97
|
+
JOIN character_states cs ON cs.character_name = ch.name
|
|
98
|
+
WHERE cs.vol_number = $1
|
|
99
|
+
ORDER BY ch.name
|
|
100
|
+
`;
|
|
101
|
+
params = [vol];
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
sql = 'SELECT name, aliases, identity_type, first_vol, first_chap, cultivation_level, faction, status FROM characters ORDER BY name';
|
|
105
|
+
params = [];
|
|
106
|
+
}
|
|
107
|
+
const rows = await this.query(sql, params);
|
|
108
|
+
return rows.map(r => ({
|
|
109
|
+
name: r.name,
|
|
110
|
+
aliases: r.aliases ? r.aliases.split(',').map((a) => a.trim()) : [],
|
|
111
|
+
role: r.identity_type || '',
|
|
112
|
+
firstVolume: r.first_vol || 0,
|
|
113
|
+
firstChapter: r.first_chap || 0,
|
|
114
|
+
cultivation: r.cultivation_level || '',
|
|
115
|
+
faction: r.faction || '',
|
|
116
|
+
status: r.status || '活跃',
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
119
|
+
async getCharacterArc(_story, name) {
|
|
120
|
+
const rows = await this.query(`
|
|
121
|
+
SELECT vol_number, cultivation_level, location, state_summary, last_appearance_chap
|
|
122
|
+
FROM character_states
|
|
123
|
+
WHERE character_name = $1
|
|
124
|
+
ORDER BY vol_number
|
|
125
|
+
`, [name]);
|
|
126
|
+
return rows.map(r => ({
|
|
127
|
+
volume: r.vol_number,
|
|
128
|
+
cultivation: r.cultivation_level || '',
|
|
129
|
+
location: r.location || '',
|
|
130
|
+
summary: r.state_summary || '',
|
|
131
|
+
lastChapter: r.last_appearance_chap || 0,
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
async getRelationships(_story, _vol) {
|
|
135
|
+
const charRows = await this.query(`
|
|
136
|
+
SELECT ch.name, ch.faction, ch.identity_type,
|
|
137
|
+
COUNT(cp.chapter_number) as appearances
|
|
138
|
+
FROM characters ch
|
|
139
|
+
LEFT JOIN chapter_participants cp ON cp.character_name = ch.name
|
|
140
|
+
WHERE ch.status != '已故'
|
|
141
|
+
GROUP BY ch.name, ch.faction, ch.identity_type
|
|
142
|
+
`);
|
|
143
|
+
const relRows = await this.query(`
|
|
144
|
+
SELECT char_a, char_b, rel_type, current_status, last_updated_chap
|
|
145
|
+
FROM relationships
|
|
146
|
+
`);
|
|
147
|
+
return {
|
|
148
|
+
nodes: charRows.map(r => ({
|
|
149
|
+
id: r.name,
|
|
150
|
+
name: r.name,
|
|
151
|
+
faction: r.faction || '',
|
|
152
|
+
role: r.identity_type || '',
|
|
153
|
+
appearances: parseInt(r.appearances, 10) || 0,
|
|
154
|
+
})),
|
|
155
|
+
edges: relRows.map(r => ({
|
|
156
|
+
source: r.char_a,
|
|
157
|
+
target: r.char_b,
|
|
158
|
+
type: r.rel_type || '',
|
|
159
|
+
status: r.current_status || '',
|
|
160
|
+
lastChapter: r.last_updated_chap || 0,
|
|
161
|
+
})),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
async getRelationshipHistory(_story) {
|
|
165
|
+
const rows = await this.query(`
|
|
166
|
+
SELECT chapter_number, char_a, char_b, rel_type, old_status, new_status
|
|
167
|
+
FROM relationship_history
|
|
168
|
+
ORDER BY chapter_number
|
|
169
|
+
`);
|
|
170
|
+
return rows.map(r => ({
|
|
171
|
+
chapter: r.chapter_number,
|
|
172
|
+
source: r.char_a,
|
|
173
|
+
target: r.char_b,
|
|
174
|
+
type: r.rel_type || '',
|
|
175
|
+
oldStatus: r.old_status || '',
|
|
176
|
+
newStatus: r.new_status || '',
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
async getTimeline(_story, vol) {
|
|
180
|
+
const where = vol ? 'WHERE c.vol_number = $1' : '';
|
|
181
|
+
const params = vol ? [vol] : [];
|
|
182
|
+
const rows = await this.query(`
|
|
183
|
+
SELECT te.id, te.chapter_number, te.story_time, te.location, te.description, te.tags
|
|
184
|
+
FROM timeline_events te
|
|
185
|
+
JOIN chapters c ON c.global_chapter_number = te.chapter_number
|
|
186
|
+
${where}
|
|
187
|
+
ORDER BY te.chapter_number
|
|
188
|
+
`, params);
|
|
189
|
+
return rows.map(r => ({
|
|
190
|
+
id: r.id,
|
|
191
|
+
chapter: r.chapter_number,
|
|
192
|
+
storyTime: r.story_time || '',
|
|
193
|
+
location: r.location || '',
|
|
194
|
+
description: r.description || '',
|
|
195
|
+
tags: r.tags || [],
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
async getPlotThreads(_story) {
|
|
199
|
+
const rows = await this.query(`
|
|
200
|
+
SELECT thread_name, thread_type, status, description
|
|
201
|
+
FROM plot_threads
|
|
202
|
+
ORDER BY thread_name
|
|
203
|
+
`);
|
|
204
|
+
return rows.map(r => ({
|
|
205
|
+
name: r.thread_name,
|
|
206
|
+
type: r.thread_type || '',
|
|
207
|
+
status: r.status || 'active',
|
|
208
|
+
description: r.description || '',
|
|
209
|
+
keyEvents: [],
|
|
210
|
+
}));
|
|
211
|
+
}
|
|
212
|
+
async getForeshadowing(_story) {
|
|
213
|
+
const rows = await this.query(`
|
|
214
|
+
SELECT fs.fs_code, fs.description, fs.planted_chapter,
|
|
215
|
+
fs.hinted_chapters, fs.resolved_chapter, fs.status, fs.importance
|
|
216
|
+
FROM foreshadowing fs
|
|
217
|
+
ORDER BY fs.planted_chapter
|
|
218
|
+
`);
|
|
219
|
+
return rows.map(r => ({
|
|
220
|
+
code: r.fs_code,
|
|
221
|
+
description: r.description || '',
|
|
222
|
+
plantedChapter: r.planted_chapter || 0,
|
|
223
|
+
hintedChapters: r.hinted_chapters || [],
|
|
224
|
+
resolvedChapter: r.resolved_chapter || null,
|
|
225
|
+
status: r.status || 'planted',
|
|
226
|
+
importance: r.importance || 'normal',
|
|
227
|
+
}));
|
|
228
|
+
}
|
|
229
|
+
async getForeshadowingMatrix(_story) {
|
|
230
|
+
const fsRows = await this.query(`
|
|
231
|
+
SELECT fs_code, description, status, importance
|
|
232
|
+
FROM foreshadowing ORDER BY planted_chapter
|
|
233
|
+
`);
|
|
234
|
+
const cfRows = await this.query(`
|
|
235
|
+
SELECT fs_code, chapter_number, action_type
|
|
236
|
+
FROM chapter_foreshadowing ORDER BY chapter_number
|
|
237
|
+
`);
|
|
238
|
+
const [maxChap] = await this.query('SELECT MAX(global_chapter_number) as max_chap FROM chapters');
|
|
239
|
+
const totalChapters = maxChap?.max_chap || 0;
|
|
240
|
+
const chapters = Array.from({ length: totalChapters }, (_, i) => i + 1);
|
|
241
|
+
const cfMap = new Map();
|
|
242
|
+
for (const cf of cfRows) {
|
|
243
|
+
if (!cfMap.has(cf.fs_code))
|
|
244
|
+
cfMap.set(cf.fs_code, new Map());
|
|
245
|
+
cfMap.get(cf.fs_code).set(cf.chapter_number, cf.action_type);
|
|
246
|
+
}
|
|
247
|
+
const rows = fsRows.map(fs => ({
|
|
248
|
+
code: fs.fs_code,
|
|
249
|
+
description: fs.description,
|
|
250
|
+
cells: chapters.map(ch => ({
|
|
251
|
+
chapter: ch,
|
|
252
|
+
action: cfMap.get(fs.fs_code)?.get(ch) || null,
|
|
253
|
+
})),
|
|
254
|
+
}));
|
|
255
|
+
return { chapters, rows };
|
|
256
|
+
}
|
|
257
|
+
async getDashboardStats(_story) {
|
|
258
|
+
const overview = await this.getOverview(_story);
|
|
259
|
+
const [charCount] = await this.query('SELECT COUNT(*) as count FROM characters');
|
|
260
|
+
const [plotCount] = await this.query("SELECT COUNT(*) as count FROM plot_threads WHERE status = 'active'");
|
|
261
|
+
const [fsCount] = await this.query("SELECT COUNT(*) as count FROM foreshadowing WHERE status != 'resolved'");
|
|
262
|
+
const volumes = await this.getVolumes(_story);
|
|
263
|
+
return {
|
|
264
|
+
totalWords: overview.totalWords,
|
|
265
|
+
totalChapters: overview.totalChapters,
|
|
266
|
+
totalVolumes: overview.totalVolumes,
|
|
267
|
+
totalCharacters: parseInt(charCount?.count || '0', 10),
|
|
268
|
+
activePlotThreads: parseInt(plotCount?.count || '0', 10),
|
|
269
|
+
unresolvedForeshadowing: parseInt(fsCount?.count || '0', 10),
|
|
270
|
+
volumeStats: volumes.map(v => ({
|
|
271
|
+
volume: v.number, title: v.title, words: v.words, chapters: v.chapters, progress: v.progress,
|
|
272
|
+
})),
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
async getProtagonistOverview(_story) {
|
|
276
|
+
const [cult] = await this.query('SELECT level, progress_pct FROM cultivation_curve ORDER BY chapter_number DESC LIMIT 1');
|
|
277
|
+
const [skillCounts] = await this.query("SELECT COUNT(*) as total, COUNT(*) FILTER (WHERE status = 'active') as active FROM protagonist_skills");
|
|
278
|
+
const [itemCounts] = await this.query("SELECT COUNT(*) as total, COUNT(*) FILTER (WHERE status = 'held') as held FROM protagonist_inventory");
|
|
279
|
+
return {
|
|
280
|
+
currentLevel: cult?.level || '',
|
|
281
|
+
currentProgress: cult?.progress_pct || 0,
|
|
282
|
+
totalSkills: parseInt(skillCounts?.total || '0', 10),
|
|
283
|
+
activeSkills: parseInt(skillCounts?.active || '0', 10),
|
|
284
|
+
totalItems: parseInt(itemCounts?.total || '0', 10),
|
|
285
|
+
heldItems: parseInt(itemCounts?.held || '0', 10),
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
async getProtagonistSkills(_story) {
|
|
289
|
+
const rows = await this.query('SELECT skill_name, skill_category, skill_level, status, description, acquired_chapter, use_count FROM skill_overview ORDER BY acquired_chapter');
|
|
290
|
+
return rows.map(r => ({
|
|
291
|
+
name: r.skill_name,
|
|
292
|
+
category: r.skill_category,
|
|
293
|
+
level: r.skill_level || '',
|
|
294
|
+
description: r.description || '',
|
|
295
|
+
acquiredChapter: r.acquired_chapter || 0,
|
|
296
|
+
useCount: r.use_count || 0,
|
|
297
|
+
status: r.status || 'active',
|
|
298
|
+
}));
|
|
299
|
+
}
|
|
300
|
+
async getProtagonistInventory(_story) {
|
|
301
|
+
const rows = await this.query('SELECT item_name, item_type, quantity, quality, description, acquired_chapter, status FROM protagonist_inventory ORDER BY item_type, item_name');
|
|
302
|
+
return rows.map(r => ({
|
|
303
|
+
name: r.item_name,
|
|
304
|
+
type: r.item_type,
|
|
305
|
+
quantity: r.quantity || 0,
|
|
306
|
+
quality: r.quality || '',
|
|
307
|
+
description: r.description || '',
|
|
308
|
+
acquiredChapter: r.acquired_chapter || 0,
|
|
309
|
+
status: r.status || 'held',
|
|
310
|
+
}));
|
|
311
|
+
}
|
|
312
|
+
async getCultivationCurve(_story) {
|
|
313
|
+
const rows = await this.query('SELECT chapter_number, level, progress_pct, breakthrough_type, trigger FROM cultivation_curve ORDER BY chapter_number');
|
|
314
|
+
return rows.map(r => ({
|
|
315
|
+
chapter: r.chapter_number,
|
|
316
|
+
level: r.level,
|
|
317
|
+
progressPct: parseFloat(r.progress_pct) || 0,
|
|
318
|
+
breakthroughType: r.breakthrough_type || null,
|
|
319
|
+
detail: r.trigger || '',
|
|
320
|
+
}));
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/server/datasource/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { DataSource, Story, StoryOverview, Volume, Chapter, Character, CharacterState, RelationshipGraph, RelationshipEvent, TimelineEvent, PlotThread, Foreshadow, ForeshadowMatrix, DashboardStats, ProtagonistOverview, ProtagonistSkill, ProtagonistItem, CultivationNode } from '../types.js';
|
|
2
|
+
export declare class FsDataSource implements DataSource {
|
|
3
|
+
projectRoot: string;
|
|
4
|
+
constructor(projectRoot: string);
|
|
5
|
+
private storiesDir;
|
|
6
|
+
private storyDir;
|
|
7
|
+
private volumeDir;
|
|
8
|
+
getStories(): Promise<Story[]>;
|
|
9
|
+
getOverview(story: string): Promise<StoryOverview>;
|
|
10
|
+
getVolumes(story: string): Promise<Volume[]>;
|
|
11
|
+
getChapters(story: string, vol?: number): Promise<Chapter[]>;
|
|
12
|
+
private findLatestVolume;
|
|
13
|
+
private trackingDir;
|
|
14
|
+
private readTrackingJson;
|
|
15
|
+
private collectFromAllVolumes;
|
|
16
|
+
getCharacters(story: string, vol?: number): Promise<Character[]>;
|
|
17
|
+
getCharacterArc(story: string, name: string): Promise<CharacterState[]>;
|
|
18
|
+
getRelationships(story: string, vol?: number): Promise<RelationshipGraph>;
|
|
19
|
+
getRelationshipHistory(_story: string): Promise<RelationshipEvent[]>;
|
|
20
|
+
getTimeline(story: string, vol?: number): Promise<TimelineEvent[]>;
|
|
21
|
+
getPlotThreads(story: string): Promise<PlotThread[]>;
|
|
22
|
+
getForeshadowing(story: string): Promise<Foreshadow[]>;
|
|
23
|
+
getForeshadowingMatrix(_story: string): Promise<ForeshadowMatrix>;
|
|
24
|
+
getDashboardStats(story: string): Promise<DashboardStats>;
|
|
25
|
+
getProtagonistOverview(_story: string): Promise<ProtagonistOverview>;
|
|
26
|
+
getProtagonistSkills(_story: string): Promise<ProtagonistSkill[]>;
|
|
27
|
+
getProtagonistInventory(_story: string): Promise<ProtagonistItem[]>;
|
|
28
|
+
getCultivationCurve(_story: string): Promise<CultivationNode[]>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../src/server/datasource/fs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EACjD,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAC/D,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EACvE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EACxE,MAAM,aAAa,CAAC;AAErB,qBAAa,YAAa,YAAW,UAAU;IAC1B,WAAW,EAAE,MAAM;gBAAnB,WAAW,EAAE,MAAM;IAEtC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;IAIX,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAe9B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAclD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4C5C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YA4CpD,gBAAgB;IAK9B,OAAO,CAAC,WAAW;YAIL,gBAAgB;YAUhB,qBAAqB;IAqB7B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAwBhE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAmBvE,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA0BzE,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAIpE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAoBlE,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAmBpD,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAqBtD,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIjE,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAgBzD,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIpE,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIjE,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAInE,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAGtE"}
|