@musnows/scriverse 0.9.4 → 0.9.6

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 (45) hide show
  1. package/dist/ai-protocol.js +6 -0
  2. package/dist/ai-protocol.js.map +1 -1
  3. package/dist/ai-skills.js +134 -0
  4. package/dist/ai-skills.js.map +1 -0
  5. package/dist/ai-write-plans.js +2279 -0
  6. package/dist/ai-write-plans.js.map +1 -0
  7. package/dist/ai.js +2781 -154
  8. package/dist/ai.js.map +1 -1
  9. package/dist/app.js +328 -17
  10. package/dist/app.js.map +1 -1
  11. package/dist/chapter-annotation-anchor.js +327 -0
  12. package/dist/chapter-annotation-anchor.js.map +1 -0
  13. package/dist/chapter-title-numbering.js +56 -0
  14. package/dist/chapter-title-numbering.js.map +1 -0
  15. package/dist/database.js +478 -3
  16. package/dist/database.js.map +1 -1
  17. package/dist/public/ai-context-meter.js +3 -3
  18. package/dist/public/ai-interactive.js +483 -0
  19. package/dist/public/app.js +1991 -268
  20. package/dist/public/chapter-editor-behavior.js +40 -0
  21. package/dist/public/chapter-line-id-tracker.d.ts +25 -0
  22. package/dist/public/chapter-line-id-tracker.js +151 -0
  23. package/dist/public/index.html +79 -19
  24. package/dist/public/model-config.d.ts +1 -0
  25. package/dist/public/model-config.js +9 -4
  26. package/dist/public/styles.css +337 -57
  27. package/dist/public/theme-init.js +25 -1
  28. package/dist/remote-mcp.js +496 -0
  29. package/dist/remote-mcp.js.map +1 -0
  30. package/dist/roleplay-memory.js +53 -0
  31. package/dist/roleplay-memory.js.map +1 -0
  32. package/dist/security.js +4 -0
  33. package/dist/security.js.map +1 -1
  34. package/dist/semantic-search.js +225 -0
  35. package/dist/semantic-search.js.map +1 -0
  36. package/dist/skills/continue-writing/SKILL.md +23 -0
  37. package/dist/skills/polish-writing/SKILL.md +23 -0
  38. package/dist/store.js +695 -51
  39. package/dist/store.js.map +1 -1
  40. package/dist/ui-module-preload.js +27 -0
  41. package/dist/ui-module-preload.js.map +1 -0
  42. package/dist/user-auth.js +33 -1
  43. package/dist/user-auth.js.map +1 -1
  44. package/dist/version.js +1 -1
  45. package/package.json +6 -1
@@ -0,0 +1,327 @@
1
+ import { createHash } from "node:crypto";
2
+ export const MAX_CHAPTER_LINE_IDS = 100_000;
3
+ function chapterLines(content) {
4
+ return content.replace(/\r\n?/gu, "\n").split("\n");
5
+ }
6
+ function lineHash(line) {
7
+ return createHash("sha256").update(line, "utf8").digest("hex");
8
+ }
9
+ export function chapterAnnotationLineHashes(content) {
10
+ return chapterLines(content).map((line) => lineHash(line));
11
+ }
12
+ export function parseChapterAnnotationLineHashes(value, fallbackContent) {
13
+ let parsed = value;
14
+ if (typeof value === "string") {
15
+ try {
16
+ parsed = JSON.parse(value);
17
+ }
18
+ catch {
19
+ parsed = null;
20
+ }
21
+ }
22
+ if (Array.isArray(parsed)
23
+ && parsed.length > 0
24
+ && parsed.every((hash) => typeof hash === "string" && /^[a-f0-9]{64}$/u.test(hash)))
25
+ return [...parsed];
26
+ return chapterAnnotationLineHashes(fallbackContent);
27
+ }
28
+ function linePositions(lines) {
29
+ const positions = new Map();
30
+ lines.forEach((line, index) => {
31
+ const matching = positions.get(line);
32
+ if (matching)
33
+ matching.push(index);
34
+ else
35
+ positions.set(line, [index]);
36
+ });
37
+ return positions;
38
+ }
39
+ function exactSequenceStarts(values, positions, sequence) {
40
+ const candidates = positions.get(sequence[0] ?? "") ?? [];
41
+ return candidates.filter((start) => (start + sequence.length <= values.length
42
+ && sequence.every((value, offset) => values[start + offset] === value)));
43
+ }
44
+ function sameHashes(left, right) {
45
+ return left.length === right.length && left.every((hash, index) => hash === right[index]);
46
+ }
47
+ function sameLineIds(left, right) {
48
+ return left.length === right.length && left.every((lineId, index) => lineId === right[index]);
49
+ }
50
+ function closestStart(candidates, target) {
51
+ let closest = null;
52
+ let closestDistance = Number.POSITIVE_INFINITY;
53
+ for (const candidate of candidates) {
54
+ const distance = Math.abs(candidate - target);
55
+ if (distance < closestDistance) {
56
+ closest = candidate;
57
+ closestDistance = distance;
58
+ }
59
+ }
60
+ return closest;
61
+ }
62
+ function longestIncreasingPairs(candidates) {
63
+ if (candidates.length === 0)
64
+ return [];
65
+ const tailCandidateIndexes = [];
66
+ const previousCandidateIndexes = new Int32Array(candidates.length);
67
+ previousCandidateIndexes.fill(-1);
68
+ candidates.forEach((candidate, candidateIndex) => {
69
+ let low = 0;
70
+ let high = tailCandidateIndexes.length;
71
+ while (low < high) {
72
+ const middle = Math.floor((low + high) / 2);
73
+ if (candidates[tailCandidateIndexes[middle]].afterIndex < candidate.afterIndex)
74
+ low = middle + 1;
75
+ else
76
+ high = middle;
77
+ }
78
+ if (low > 0)
79
+ previousCandidateIndexes[candidateIndex] = tailCandidateIndexes[low - 1];
80
+ tailCandidateIndexes[low] = candidateIndex;
81
+ });
82
+ const result = [];
83
+ let candidateIndex = tailCandidateIndexes.at(-1) ?? -1;
84
+ while (candidateIndex >= 0) {
85
+ result.push(candidates[candidateIndex]);
86
+ candidateIndex = previousCandidateIndexes[candidateIndex];
87
+ }
88
+ return result.reverse();
89
+ }
90
+ function matchingLinePairs(beforeLines, afterLines) {
91
+ let prefixLength = 0;
92
+ while (prefixLength < beforeLines.length
93
+ && prefixLength < afterLines.length
94
+ && beforeLines[prefixLength] === afterLines[prefixLength])
95
+ prefixLength += 1;
96
+ let suffixLength = 0;
97
+ while (suffixLength < beforeLines.length - prefixLength
98
+ && suffixLength < afterLines.length - prefixLength
99
+ && beforeLines[beforeLines.length - suffixLength - 1] === afterLines[afterLines.length - suffixLength - 1])
100
+ suffixLength += 1;
101
+ const pairs = Array.from({ length: prefixLength }, (_, index) => ({
102
+ beforeIndex: index,
103
+ afterIndex: index
104
+ }));
105
+ const beforeMiddleStart = prefixLength;
106
+ const beforeMiddleEnd = beforeLines.length - suffixLength;
107
+ const afterMiddleStart = prefixLength;
108
+ const afterMiddleEnd = afterLines.length - suffixLength;
109
+ const beforePositions = linePositions(beforeLines.slice(beforeMiddleStart, beforeMiddleEnd));
110
+ const afterPositions = linePositions(afterLines.slice(afterMiddleStart, afterMiddleEnd));
111
+ const uniqueCandidates = [];
112
+ for (const [line, positions] of beforePositions) {
113
+ const matching = afterPositions.get(line);
114
+ if (positions.length !== 1 || matching?.length !== 1)
115
+ continue;
116
+ uniqueCandidates.push({
117
+ beforeIndex: beforeMiddleStart + positions[0],
118
+ afterIndex: afterMiddleStart + matching[0]
119
+ });
120
+ }
121
+ uniqueCandidates.sort((left, right) => left.beforeIndex - right.beforeIndex);
122
+ pairs.push(...longestIncreasingPairs(uniqueCandidates));
123
+ for (let offset = suffixLength; offset > 0; offset -= 1) {
124
+ pairs.push({
125
+ beforeIndex: beforeLines.length - offset,
126
+ afterIndex: afterLines.length - offset
127
+ });
128
+ }
129
+ return pairs;
130
+ }
131
+ function lineIndexMapper(beforeLines, afterLines) {
132
+ const pairs = matchingLinePairs(beforeLines, afterLines);
133
+ return (requestedBeforeIndex) => {
134
+ const beforeIndex = Math.max(0, Math.min(beforeLines.length - 1, requestedBeforeIndex));
135
+ let low = 0;
136
+ let high = pairs.length;
137
+ while (low < high) {
138
+ const middle = Math.floor((low + high) / 2);
139
+ if (pairs[middle].beforeIndex < beforeIndex)
140
+ low = middle + 1;
141
+ else
142
+ high = middle;
143
+ }
144
+ const next = pairs[low];
145
+ if (next?.beforeIndex === beforeIndex)
146
+ return next.afterIndex;
147
+ const previous = low > 0 ? pairs[low - 1] : undefined;
148
+ let mapped;
149
+ if (previous && next) {
150
+ const beforeDistance = next.beforeIndex - previous.beforeIndex;
151
+ const afterDistance = next.afterIndex - previous.afterIndex;
152
+ mapped = previous.afterIndex + Math.round((beforeIndex - previous.beforeIndex) * afterDistance / beforeDistance);
153
+ mapped = Math.max(previous.afterIndex + 1, Math.min(next.afterIndex - 1, mapped));
154
+ }
155
+ else if (previous) {
156
+ mapped = previous.afterIndex + beforeIndex - previous.beforeIndex;
157
+ }
158
+ else if (next) {
159
+ mapped = next.afterIndex - (next.beforeIndex - beforeIndex);
160
+ }
161
+ else {
162
+ mapped = beforeLines.length <= 1
163
+ ? 0
164
+ : Math.round(beforeIndex * (afterLines.length - 1) / (beforeLines.length - 1));
165
+ }
166
+ return Math.max(0, Math.min(afterLines.length - 1, mapped));
167
+ };
168
+ }
169
+ export function parseChapterLineIds(value, content) {
170
+ let parsed = value;
171
+ if (typeof value === "string") {
172
+ try {
173
+ parsed = JSON.parse(value);
174
+ }
175
+ catch {
176
+ parsed = null;
177
+ }
178
+ }
179
+ const expectedLength = chapterLines(content).length;
180
+ if (expectedLength > MAX_CHAPTER_LINE_IDS)
181
+ return [];
182
+ if (!Array.isArray(parsed)
183
+ || parsed.length !== expectedLength
184
+ || !parsed.every((lineId) => typeof lineId === "string" && lineId.length > 0)
185
+ || new Set(parsed).size !== parsed.length)
186
+ return [];
187
+ return [...parsed];
188
+ }
189
+ export function parseChapterAnnotationLineIds(value) {
190
+ let parsed = value;
191
+ if (typeof value === "string") {
192
+ try {
193
+ parsed = JSON.parse(value);
194
+ }
195
+ catch {
196
+ parsed = null;
197
+ }
198
+ }
199
+ if (!Array.isArray(parsed)
200
+ || parsed.length === 0
201
+ || !parsed.every((lineId) => typeof lineId === "string" && lineId.length > 0)
202
+ || new Set(parsed).size !== parsed.length)
203
+ return [];
204
+ return [...parsed];
205
+ }
206
+ export function createChapterLineIds(content, createId) {
207
+ const lines = chapterLines(content);
208
+ return lines.length <= MAX_CHAPTER_LINE_IDS ? lines.map(() => createId()) : [];
209
+ }
210
+ function normalizeRequestedLineIds(beforeLineIds, afterLineCount, requestedLineIds) {
211
+ if (requestedLineIds.length !== afterLineCount)
212
+ return null;
213
+ const beforeIndexes = new Map(beforeLineIds.map((lineId, index) => [lineId, index]));
214
+ const seen = new Set();
215
+ let lastBeforeIndex = -1;
216
+ for (const lineId of requestedLineIds) {
217
+ if (lineId === null)
218
+ continue;
219
+ const beforeIndex = beforeIndexes.get(lineId);
220
+ if (beforeIndex === undefined || seen.has(lineId) || beforeIndex <= lastBeforeIndex)
221
+ return null;
222
+ seen.add(lineId);
223
+ lastBeforeIndex = beforeIndex;
224
+ }
225
+ return [...requestedLineIds];
226
+ }
227
+ export function reconcileChapterLineIds(beforeContent, afterContent, beforeLineIds, requestedLineIds, createId) {
228
+ const beforeLines = chapterLines(beforeContent);
229
+ const afterLines = chapterLines(afterContent);
230
+ if (beforeLines.length > MAX_CHAPTER_LINE_IDS || afterLines.length > MAX_CHAPTER_LINE_IDS)
231
+ return [];
232
+ if (beforeLineIds.length !== beforeLines.length || new Set(beforeLineIds).size !== beforeLineIds.length)
233
+ return null;
234
+ if (requestedLineIds !== undefined) {
235
+ const normalized = normalizeRequestedLineIds(beforeLineIds, afterLines.length, requestedLineIds);
236
+ return normalized?.map((lineId) => lineId ?? createId()) ?? null;
237
+ }
238
+ const result = Array.from({ length: afterLines.length }, () => null);
239
+ const assignedBeforeIndexes = new Set();
240
+ for (const pair of matchingLinePairs(beforeLines, afterLines)) {
241
+ result[pair.afterIndex] = beforeLineIds[pair.beforeIndex] ?? null;
242
+ assignedBeforeIndexes.add(pair.beforeIndex);
243
+ }
244
+ const mapLineIndex = lineIndexMapper(beforeLines, afterLines);
245
+ beforeLineIds.forEach((lineId, beforeIndex) => {
246
+ if (assignedBeforeIndexes.has(beforeIndex))
247
+ return;
248
+ const afterIndex = mapLineIndex(beforeIndex);
249
+ if (result[afterIndex] === null)
250
+ result[afterIndex] = lineId;
251
+ });
252
+ return result.map((lineId) => lineId ?? createId());
253
+ }
254
+ function annotationIdentityRange(afterLineIds, annotationLineIds) {
255
+ if (annotationLineIds.length === 0)
256
+ return null;
257
+ const positions = new Map(afterLineIds.map((lineId, index) => [lineId, index]));
258
+ const matched = annotationLineIds.map((lineId) => positions.get(lineId));
259
+ if (matched.some((index) => index === undefined))
260
+ return null;
261
+ const indexes = matched;
262
+ if (indexes.some((index, offset) => offset > 0 && index <= indexes[offset - 1]))
263
+ return null;
264
+ return { start: indexes[0], end: indexes.at(-1) };
265
+ }
266
+ export function reanchorChapterAnnotations(beforeContent, afterContent, annotations, afterLineIds = []) {
267
+ const beforeLines = chapterLines(beforeContent);
268
+ const afterLines = chapterLines(afterContent);
269
+ const beforePositions = linePositions(beforeLines);
270
+ const afterPositions = linePositions(afterLines);
271
+ const afterLineHashes = afterLines.map((line) => lineHash(line));
272
+ const afterHashPositions = linePositions(afterLineHashes);
273
+ const mapLineIndex = lineIndexMapper(beforeLines, afterLines);
274
+ return annotations.map((annotation) => {
275
+ const storedStart = Math.max(0, Math.min(beforeLines.length - 1, annotation.startLine - 1));
276
+ const storedEnd = Math.max(storedStart, Math.min(beforeLines.length - 1, annotation.endLine - 1));
277
+ const quoteLines = chapterLines(annotation.quote);
278
+ const recoveredStart = closestStart(exactSequenceStarts(beforeLines, beforePositions, quoteLines), storedStart);
279
+ const beforeStart = recoveredStart ?? storedStart;
280
+ const beforeEnd = recoveredStart === null
281
+ ? storedEnd
282
+ : Math.min(beforeLines.length - 1, recoveredStart + quoteLines.length - 1);
283
+ const mappedStart = mapLineIndex(beforeStart);
284
+ const mappedEnd = Math.max(mappedStart, mapLineIndex(beforeEnd));
285
+ const hashMatches = exactSequenceStarts(afterLineHashes, afterHashPositions, annotation.lineHashes);
286
+ const exactAfterStart = closestStart(exactSequenceStarts(afterLines, afterPositions, quoteLines), mappedStart);
287
+ const identityRange = annotationIdentityRange(afterLineIds, annotation.lineIds);
288
+ const identityHashes = identityRange
289
+ ? afterLineHashes.slice(identityRange.start, identityRange.end + 1)
290
+ : [];
291
+ const identityHashMatches = identityRange
292
+ ? sameHashes(identityHashes, annotation.lineHashes)
293
+ : false;
294
+ const canUseHashWithoutIdentity = annotation.lineIds.length === 0 && hashMatches.length === 1;
295
+ const anchorStrategy = identityRange
296
+ ? identityHashMatches ? "hash" : "line-id"
297
+ : canUseHashWithoutIdentity ? "hash" : "fallback";
298
+ const nextStart = identityRange?.start
299
+ ?? (canUseHashWithoutIdentity ? hashMatches[0] : exactAfterStart ?? mappedStart);
300
+ const nextEnd = identityRange?.end
301
+ ?? (canUseHashWithoutIdentity
302
+ ? Math.min(afterLines.length - 1, nextStart + annotation.lineHashes.length - 1)
303
+ : exactAfterStart === null
304
+ ? mappedEnd
305
+ : Math.min(afterLines.length - 1, exactAfterStart + quoteLines.length - 1));
306
+ const startLine = nextStart + 1;
307
+ const endLine = nextEnd + 1;
308
+ const quote = afterLines.slice(nextStart, nextEnd + 1).join("\n");
309
+ const lineHashes = afterLineHashes.slice(nextStart, nextEnd + 1);
310
+ const lineIds = afterLineIds.slice(nextStart, nextEnd + 1);
311
+ return {
312
+ ...annotation,
313
+ startLine,
314
+ endLine,
315
+ quote,
316
+ lineHashes,
317
+ lineIds,
318
+ anchorStrategy,
319
+ changed: startLine !== annotation.startLine
320
+ || endLine !== annotation.endLine
321
+ || quote !== annotation.quote
322
+ || !sameHashes(lineHashes, annotation.lineHashes)
323
+ || !sameLineIds(lineIds, annotation.lineIds)
324
+ };
325
+ });
326
+ }
327
+ //# sourceMappingURL=chapter-annotation-anchor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chapter-annotation-anchor.js","sourceRoot":"","sources":["../src/chapter-annotation-anchor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ const chapterNumberTemplateToken = "{n}";
2
+ const existingChapterNumberPattern = /^(?:第\s*[〇零一二三四五六七八九十百千万两0-90-9]+\s*章(?:\s*[上中下])?|chap(?:ter)?\.?\s*[0-90-9]+|[0-90-9]+\s*[..、])\s*(?:[-—–::..、]\s*)?/iu;
3
+ const chineseDigits = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
4
+ const chineseGroupUnits = ["", "十", "百", "千"];
5
+ function formatChineseGroup(value) {
6
+ const digits = String(value).padStart(4, "0");
7
+ let result = "";
8
+ let needsZero = false;
9
+ for (const [index, character] of [...digits].entries()) {
10
+ const digit = Number(character);
11
+ const position = digits.length - index - 1;
12
+ if (digit === 0) {
13
+ if (result && [...digits.slice(index + 1)].some((remaining) => remaining !== "0"))
14
+ needsZero = true;
15
+ continue;
16
+ }
17
+ if (needsZero)
18
+ result += chineseDigits[0];
19
+ result += `${chineseDigits[digit] ?? ""}${chineseGroupUnits[position] ?? ""}`;
20
+ needsZero = false;
21
+ }
22
+ return result;
23
+ }
24
+ export function isChapterNumberTemplate(value) {
25
+ const template = value.trim();
26
+ if (!template || template.length > 50 || /[\u0000-\u001f\u007f]/u.test(value))
27
+ return false;
28
+ return template.split(chapterNumberTemplateToken).length === 2;
29
+ }
30
+ export function formatChapterNumber(value, style) {
31
+ if (!Number.isSafeInteger(value) || value < 1 || value > 999_999) {
32
+ throw new RangeError("Chapter number must be an integer between 1 and 999999");
33
+ }
34
+ if (style === "arabic")
35
+ return String(value);
36
+ const highGroup = Math.floor(value / 10_000);
37
+ const lowGroup = value % 10_000;
38
+ let result = highGroup ? `${formatChineseGroup(highGroup)}万` : "";
39
+ if (lowGroup) {
40
+ if (highGroup && lowGroup < 1_000)
41
+ result += chineseDigits[0];
42
+ result += formatChineseGroup(lowGroup);
43
+ }
44
+ return result.replace(/^一十/u, "十");
45
+ }
46
+ export function chapterTitleWithoutNumber(title) {
47
+ return title.trim().replace(existingChapterNumberPattern, "").trim();
48
+ }
49
+ export function renumberChapterTitle(title, sequence, template, style) {
50
+ if (!isChapterNumberTemplate(template))
51
+ throw new Error("Invalid chapter number template");
52
+ const numberPrefix = template.trim().replace(chapterNumberTemplateToken, formatChapterNumber(sequence, style));
53
+ const suffix = chapterTitleWithoutNumber(title);
54
+ return suffix ? `${numberPrefix} ${suffix}` : numberPrefix;
55
+ }
56
+ //# sourceMappingURL=chapter-title-numbering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chapter-title-numbering.js","sourceRoot":"","sources":["../src/chapter-title-numbering.ts"],"names":[],"mappings":"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"}