@actalk/inkos-core 0.5.1 → 0.6.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/dist/agents/architect.d.ts +6 -1
- package/dist/agents/architect.d.ts.map +1 -1
- package/dist/agents/architect.js +362 -83
- package/dist/agents/architect.js.map +1 -1
- package/dist/agents/chapter-analyzer.d.ts +6 -0
- package/dist/agents/chapter-analyzer.d.ts.map +1 -1
- package/dist/agents/chapter-analyzer.js +220 -17
- package/dist/agents/chapter-analyzer.js.map +1 -1
- package/dist/agents/composer.d.ts +28 -0
- package/dist/agents/composer.d.ts.map +1 -0
- package/dist/agents/composer.js +154 -0
- package/dist/agents/composer.js.map +1 -0
- package/dist/agents/consolidator.d.ts.map +1 -1
- package/dist/agents/consolidator.js +17 -8
- package/dist/agents/consolidator.js.map +1 -1
- package/dist/agents/continuity.d.ts +10 -0
- package/dist/agents/continuity.d.ts.map +1 -1
- package/dist/agents/continuity.js +312 -133
- package/dist/agents/continuity.js.map +1 -1
- package/dist/agents/en-prompt-sections.d.ts.map +1 -1
- package/dist/agents/en-prompt-sections.js +1 -0
- package/dist/agents/en-prompt-sections.js.map +1 -1
- package/dist/agents/length-normalizer.d.ts +32 -0
- package/dist/agents/length-normalizer.d.ts.map +1 -0
- package/dist/agents/length-normalizer.js +156 -0
- package/dist/agents/length-normalizer.js.map +1 -0
- package/dist/agents/planner.d.ts +42 -0
- package/dist/agents/planner.d.ts.map +1 -0
- package/dist/agents/planner.js +382 -0
- package/dist/agents/planner.js.map +1 -0
- package/dist/agents/post-write-validator.d.ts +6 -1
- package/dist/agents/post-write-validator.d.ts.map +1 -1
- package/dist/agents/post-write-validator.js +88 -2
- package/dist/agents/post-write-validator.js.map +1 -1
- package/dist/agents/reviser.d.ts +10 -1
- package/dist/agents/reviser.d.ts.map +1 -1
- package/dist/agents/reviser.js +151 -36
- package/dist/agents/reviser.js.map +1 -1
- package/dist/agents/rules-reader.d.ts +1 -0
- package/dist/agents/rules-reader.d.ts.map +1 -1
- package/dist/agents/rules-reader.js +13 -0
- package/dist/agents/rules-reader.js.map +1 -1
- package/dist/agents/settler-delta-parser.d.ts +7 -0
- package/dist/agents/settler-delta-parser.d.ts.map +1 -0
- package/dist/agents/settler-delta-parser.js +35 -0
- package/dist/agents/settler-delta-parser.js.map +1 -0
- package/dist/agents/settler-prompts.d.ts +2 -0
- package/dist/agents/settler-prompts.d.ts.map +1 -1
- package/dist/agents/settler-prompts.js +77 -63
- package/dist/agents/settler-prompts.js.map +1 -1
- package/dist/agents/writer-parser.d.ts +3 -2
- package/dist/agents/writer-parser.d.ts.map +1 -1
- package/dist/agents/writer-parser.js +44 -13
- package/dist/agents/writer-parser.js.map +1 -1
- package/dist/agents/writer-prompts.d.ts +2 -1
- package/dist/agents/writer-prompts.d.ts.map +1 -1
- package/dist/agents/writer-prompts.js +65 -21
- package/dist/agents/writer-prompts.js.map +1 -1
- package/dist/agents/writer.d.ts +28 -1
- package/dist/agents/writer.d.ts.map +1 -1
- package/dist/agents/writer.js +426 -67
- package/dist/agents/writer.js.map +1 -1
- package/dist/index.d.ts +18 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -2
- package/dist/index.js.map +1 -1
- package/dist/llm/provider.d.ts +1 -0
- package/dist/llm/provider.d.ts.map +1 -1
- package/dist/llm/provider.js +19 -6
- package/dist/llm/provider.js.map +1 -1
- package/dist/models/chapter.d.ts +71 -0
- package/dist/models/chapter.d.ts.map +1 -1
- package/dist/models/chapter.js +3 -0
- package/dist/models/chapter.js.map +1 -1
- package/dist/models/input-governance.d.ts +351 -0
- package/dist/models/input-governance.d.ts.map +1 -0
- package/dist/models/input-governance.js +78 -0
- package/dist/models/input-governance.js.map +1 -0
- package/dist/models/length-governance.d.ts +93 -0
- package/dist/models/length-governance.d.ts.map +1 -0
- package/dist/models/length-governance.js +34 -0
- package/dist/models/length-governance.js.map +1 -0
- package/dist/models/project.d.ts +5 -0
- package/dist/models/project.d.ts.map +1 -1
- package/dist/models/project.js +2 -0
- package/dist/models/project.js.map +1 -1
- package/dist/models/runtime-state.d.ts +521 -0
- package/dist/models/runtime-state.d.ts.map +1 -0
- package/dist/models/runtime-state.js +78 -0
- package/dist/models/runtime-state.js.map +1 -0
- package/dist/pipeline/agent.d.ts +2 -1
- package/dist/pipeline/agent.d.ts.map +1 -1
- package/dist/pipeline/agent.js +90 -5
- package/dist/pipeline/agent.js.map +1 -1
- package/dist/pipeline/runner.d.ts +65 -1
- package/dist/pipeline/runner.d.ts.map +1 -1
- package/dist/pipeline/runner.js +1029 -73
- package/dist/pipeline/runner.js.map +1 -1
- package/dist/state/manager.d.ts +14 -0
- package/dist/state/manager.d.ts.map +1 -1
- package/dist/state/manager.js +114 -0
- package/dist/state/manager.js.map +1 -1
- package/dist/state/memory-db.d.ts +15 -0
- package/dist/state/memory-db.d.ts.map +1 -1
- package/dist/state/memory-db.js +119 -10
- package/dist/state/memory-db.js.map +1 -1
- package/dist/state/runtime-state-store.d.ts +23 -0
- package/dist/state/runtime-state-store.d.ts.map +1 -0
- package/dist/state/runtime-state-store.js +100 -0
- package/dist/state/runtime-state-store.js.map +1 -0
- package/dist/state/state-bootstrap.d.ts +19 -0
- package/dist/state/state-bootstrap.d.ts.map +1 -0
- package/dist/state/state-bootstrap.js +394 -0
- package/dist/state/state-bootstrap.js.map +1 -0
- package/dist/state/state-projections.d.ts +5 -0
- package/dist/state/state-projections.d.ts.map +1 -0
- package/dist/state/state-projections.js +164 -0
- package/dist/state/state-projections.js.map +1 -0
- package/dist/state/state-reducer.d.ts +12 -0
- package/dist/state/state-reducer.d.ts.map +1 -0
- package/dist/state/state-reducer.js +146 -0
- package/dist/state/state-reducer.js.map +1 -0
- package/dist/state/state-validator.d.ts +12 -0
- package/dist/state/state-validator.d.ts.map +1 -0
- package/dist/state/state-validator.js +56 -0
- package/dist/state/state-validator.js.map +1 -0
- package/dist/utils/chapter-splitter.d.ts +2 -0
- package/dist/utils/chapter-splitter.d.ts.map +1 -1
- package/dist/utils/chapter-splitter.js +22 -4
- package/dist/utils/chapter-splitter.js.map +1 -1
- package/dist/utils/config-loader.d.ts +3 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +14 -3
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/context-filter.js +1 -1
- package/dist/utils/context-filter.js.map +1 -1
- package/dist/utils/governed-context.d.ts +7 -0
- package/dist/utils/governed-context.d.ts.map +1 -0
- package/dist/utils/governed-context.js +22 -0
- package/dist/utils/governed-context.js.map +1 -0
- package/dist/utils/governed-working-set.d.ts +18 -0
- package/dist/utils/governed-working-set.d.ts.map +1 -0
- package/dist/utils/governed-working-set.js +295 -0
- package/dist/utils/governed-working-set.js.map +1 -0
- package/dist/utils/hook-governance.d.ts +26 -0
- package/dist/utils/hook-governance.d.ts.map +1 -0
- package/dist/utils/hook-governance.js +128 -0
- package/dist/utils/hook-governance.js.map +1 -0
- package/dist/utils/hook-health.d.ts +14 -0
- package/dist/utils/hook-health.d.ts.map +1 -0
- package/dist/utils/hook-health.js +68 -0
- package/dist/utils/hook-health.js.map +1 -0
- package/dist/utils/length-metrics.d.ts +10 -0
- package/dist/utils/length-metrics.d.ts.map +1 -0
- package/dist/utils/length-metrics.js +85 -0
- package/dist/utils/length-metrics.js.map +1 -0
- package/dist/utils/long-span-fatigue.d.ts +28 -0
- package/dist/utils/long-span-fatigue.d.ts.map +1 -0
- package/dist/utils/long-span-fatigue.js +359 -0
- package/dist/utils/long-span-fatigue.js.map +1 -0
- package/dist/utils/memory-retrieval.d.ts +39 -0
- package/dist/utils/memory-retrieval.d.ts.map +1 -0
- package/dist/utils/memory-retrieval.js +574 -0
- package/dist/utils/memory-retrieval.js.map +1 -0
- package/dist/utils/spot-fix-patches.d.ts +14 -0
- package/dist/utils/spot-fix-patches.d.ts.map +1 -0
- package/dist/utils/spot-fix-patches.js +75 -0
- package/dist/utils/spot-fix-patches.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const REFERENCE_TARGET = 2200;
|
|
2
|
+
const SOFT_RANGE_DELTA = 300;
|
|
3
|
+
const HARD_RANGE_DELTA = 600;
|
|
4
|
+
export function countChapterLength(content, countingMode) {
|
|
5
|
+
const normalized = stripMarkdownMetadata(content);
|
|
6
|
+
if (countingMode === "en_words") {
|
|
7
|
+
const words = normalized.match(/[A-Za-z0-9]+(?:'[A-Za-z0-9]+)?/g);
|
|
8
|
+
return words?.length ?? 0;
|
|
9
|
+
}
|
|
10
|
+
return normalized.replace(/\s+/g, "").length;
|
|
11
|
+
}
|
|
12
|
+
export function resolveLengthCountingMode(language = "zh") {
|
|
13
|
+
return language === "en" ? "en_words" : "zh_chars";
|
|
14
|
+
}
|
|
15
|
+
export function formatLengthCount(count, countingMode) {
|
|
16
|
+
return countingMode === "en_words" ? `${count} words` : `${count}字`;
|
|
17
|
+
}
|
|
18
|
+
export function buildLengthSpec(target, language = "zh") {
|
|
19
|
+
const softDelta = scaleRangeDelta(target, SOFT_RANGE_DELTA);
|
|
20
|
+
const hardDelta = Math.max(softDelta, scaleRangeDelta(target, HARD_RANGE_DELTA));
|
|
21
|
+
const softMin = Math.max(1, target - softDelta);
|
|
22
|
+
const softMax = target + softDelta;
|
|
23
|
+
const hardMin = Math.max(1, target - hardDelta);
|
|
24
|
+
const hardMax = target + hardDelta;
|
|
25
|
+
return {
|
|
26
|
+
target,
|
|
27
|
+
softMin,
|
|
28
|
+
softMax,
|
|
29
|
+
hardMin,
|
|
30
|
+
hardMax,
|
|
31
|
+
countingMode: resolveLengthCountingMode(language),
|
|
32
|
+
normalizeMode: "none",
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function scaleRangeDelta(target, referenceDelta) {
|
|
36
|
+
return Math.max(1, Math.floor((target * referenceDelta) / REFERENCE_TARGET));
|
|
37
|
+
}
|
|
38
|
+
export function isOutsideSoftRange(count, spec) {
|
|
39
|
+
return count < spec.softMin || count > spec.softMax;
|
|
40
|
+
}
|
|
41
|
+
export function isOutsideHardRange(count, spec) {
|
|
42
|
+
return count < spec.hardMin || count > spec.hardMax;
|
|
43
|
+
}
|
|
44
|
+
export function chooseNormalizeMode(count, spec) {
|
|
45
|
+
if (count < spec.softMin)
|
|
46
|
+
return "expand";
|
|
47
|
+
if (count > spec.softMax)
|
|
48
|
+
return "compress";
|
|
49
|
+
return "none";
|
|
50
|
+
}
|
|
51
|
+
function stripMarkdownMetadata(content) {
|
|
52
|
+
const lines = content.replace(/\r\n/g, "\n").replace(/^\uFEFF/, "").split("\n");
|
|
53
|
+
const proseLines = [];
|
|
54
|
+
let index = 0;
|
|
55
|
+
if (lines[index]?.trim() === "---") {
|
|
56
|
+
index += 1;
|
|
57
|
+
while (index < lines.length && lines[index]?.trim() !== "---") {
|
|
58
|
+
index += 1;
|
|
59
|
+
}
|
|
60
|
+
if (index < lines.length) {
|
|
61
|
+
index += 1;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
let inFence = false;
|
|
65
|
+
for (; index < lines.length; index += 1) {
|
|
66
|
+
const line = lines[index] ?? "";
|
|
67
|
+
const trimmed = line.trim();
|
|
68
|
+
if (/^(```|~~~)/.test(trimmed)) {
|
|
69
|
+
inFence = !inFence;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (inFence) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (/^#{1,6}\s+/.test(trimmed)) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (trimmed === "---" || trimmed === "...") {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
proseLines.push(line);
|
|
82
|
+
}
|
|
83
|
+
return proseLines.join("\n");
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=length-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"length-metrics.js","sourceRoot":"","sources":["../../src/utils/length-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface LongSpanFatigueIssue {
|
|
2
|
+
readonly severity: "warning";
|
|
3
|
+
readonly category: string;
|
|
4
|
+
readonly description: string;
|
|
5
|
+
readonly suggestion: string;
|
|
6
|
+
}
|
|
7
|
+
export interface AnalyzeLongSpanFatigueInput {
|
|
8
|
+
readonly bookDir: string;
|
|
9
|
+
readonly chapterNumber: number;
|
|
10
|
+
readonly chapterContent: string;
|
|
11
|
+
readonly chapterSummary?: string;
|
|
12
|
+
readonly language?: "zh" | "en";
|
|
13
|
+
}
|
|
14
|
+
export interface EnglishVarianceBrief {
|
|
15
|
+
readonly highFrequencyPhrases: ReadonlyArray<string>;
|
|
16
|
+
readonly repeatedOpeningPatterns: ReadonlyArray<string>;
|
|
17
|
+
readonly repeatedEndingShapes: ReadonlyArray<string>;
|
|
18
|
+
readonly sceneObligation: string;
|
|
19
|
+
readonly text: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function buildEnglishVarianceBrief(params: {
|
|
22
|
+
readonly bookDir: string;
|
|
23
|
+
readonly chapterNumber: number;
|
|
24
|
+
}): Promise<EnglishVarianceBrief | null>;
|
|
25
|
+
export declare function analyzeLongSpanFatigue(input: AnalyzeLongSpanFatigueInput): Promise<{
|
|
26
|
+
readonly issues: ReadonlyArray<LongSpanFatigueIssue>;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=long-span-fatigue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-span-fatigue.d.ts","sourceRoot":"","sources":["../../src/utils/long-span-fatigue.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrD,QAAQ,CAAC,uBAAuB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACxD,QAAQ,CAAC,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAaD,wBAAsB,yBAAyB,CAAC,MAAM,EAAE;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAiCvC;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAA;CAAE,CAAC,CAiCnE"}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { readFile, readdir } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
const SENTENCE_SIMILARITY_THRESHOLD = 0.72;
|
|
4
|
+
const CHINESE_PUNCTUATION = /[,。!?;:“”‘’()《》、\s\-—…·]/g;
|
|
5
|
+
const ENGLISH_PUNCTUATION = /[^a-z0-9]+/gi;
|
|
6
|
+
export async function buildEnglishVarianceBrief(params) {
|
|
7
|
+
const chapterBodies = await loadPreviousChapterBodies(params.bookDir, params.chapterNumber, 24);
|
|
8
|
+
if (chapterBodies.length < 2) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
const summaryRows = await loadSummaryRows(join(params.bookDir, "story", "chapter_summaries.md"));
|
|
12
|
+
const recentRows = summaryRows
|
|
13
|
+
.filter((row) => row.chapter < params.chapterNumber)
|
|
14
|
+
.sort((left, right) => left.chapter - right.chapter)
|
|
15
|
+
.slice(-3);
|
|
16
|
+
const highFrequencyPhrases = collectRepeatedEnglishPhrases(chapterBodies);
|
|
17
|
+
const repeatedOpeningPatterns = collectRepeatedBoundaryPatterns(chapterBodies, "opening");
|
|
18
|
+
const repeatedEndingShapes = collectRepeatedBoundaryPatterns(chapterBodies, "ending");
|
|
19
|
+
const sceneObligation = chooseSceneObligation(recentRows, repeatedOpeningPatterns, repeatedEndingShapes);
|
|
20
|
+
const lines = [
|
|
21
|
+
"## English Variance Brief",
|
|
22
|
+
"",
|
|
23
|
+
`- High-frequency phrases to avoid: ${formatEnglishList(highFrequencyPhrases)}`,
|
|
24
|
+
`- Repeated opening patterns to avoid: ${formatEnglishList(repeatedOpeningPatterns)}`,
|
|
25
|
+
`- Repeated ending patterns to avoid: ${formatEnglishList(repeatedEndingShapes)}`,
|
|
26
|
+
`- Scene obligation: ${sceneObligation}`,
|
|
27
|
+
];
|
|
28
|
+
return {
|
|
29
|
+
highFrequencyPhrases,
|
|
30
|
+
repeatedOpeningPatterns,
|
|
31
|
+
repeatedEndingShapes,
|
|
32
|
+
sceneObligation,
|
|
33
|
+
text: lines.join("\n"),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export async function analyzeLongSpanFatigue(input) {
|
|
37
|
+
const language = input.language ?? "zh";
|
|
38
|
+
const issues = [];
|
|
39
|
+
const summaryRows = await loadSummaryRows(join(input.bookDir, "story", "chapter_summaries.md"));
|
|
40
|
+
const mergedRows = mergeCurrentSummary(summaryRows, input.chapterSummary);
|
|
41
|
+
const recentRows = mergedRows
|
|
42
|
+
.filter((row) => row.chapter <= input.chapterNumber)
|
|
43
|
+
.sort((left, right) => left.chapter - right.chapter)
|
|
44
|
+
.slice(-3);
|
|
45
|
+
const chapterTypeIssue = buildChapterTypeIssue(recentRows, language);
|
|
46
|
+
if (chapterTypeIssue) {
|
|
47
|
+
issues.push(chapterTypeIssue);
|
|
48
|
+
}
|
|
49
|
+
const recentChapterBodies = await loadRecentChapterBodies(input.bookDir, input.chapterNumber, input.chapterContent);
|
|
50
|
+
const openingIssue = buildSentencePatternIssue(recentChapterBodies, "opening", language);
|
|
51
|
+
if (openingIssue) {
|
|
52
|
+
issues.push(openingIssue);
|
|
53
|
+
}
|
|
54
|
+
const endingIssue = buildSentencePatternIssue(recentChapterBodies, "ending", language);
|
|
55
|
+
if (endingIssue) {
|
|
56
|
+
issues.push(endingIssue);
|
|
57
|
+
}
|
|
58
|
+
return { issues };
|
|
59
|
+
}
|
|
60
|
+
async function loadSummaryRows(path) {
|
|
61
|
+
try {
|
|
62
|
+
const raw = await readFile(path, "utf-8");
|
|
63
|
+
return raw
|
|
64
|
+
.split("\n")
|
|
65
|
+
.map((line) => parseSummaryRow(line))
|
|
66
|
+
.filter((row) => row !== null);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function loadPreviousChapterBodies(bookDir, currentChapter, limit) {
|
|
73
|
+
const chaptersDir = join(bookDir, "chapters");
|
|
74
|
+
try {
|
|
75
|
+
const files = await readdir(chaptersDir);
|
|
76
|
+
const previousFiles = files
|
|
77
|
+
.map((file) => ({ file, chapter: Number.parseInt(file.slice(0, 4), 10) }))
|
|
78
|
+
.filter((entry) => Number.isFinite(entry.chapter) && entry.chapter < currentChapter && entry.file.endsWith(".md"))
|
|
79
|
+
.sort((left, right) => left.chapter - right.chapter)
|
|
80
|
+
.slice(-limit);
|
|
81
|
+
return Promise.all(previousFiles.map((entry) => readFile(join(chaptersDir, entry.file), "utf-8")));
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function mergeCurrentSummary(rows, currentSummary) {
|
|
88
|
+
const parsedCurrent = currentSummary ? parseSummaryRow(currentSummary) : null;
|
|
89
|
+
if (!parsedCurrent)
|
|
90
|
+
return [...rows];
|
|
91
|
+
const nextRows = rows.filter((row) => row.chapter !== parsedCurrent.chapter);
|
|
92
|
+
nextRows.push(parsedCurrent);
|
|
93
|
+
return nextRows;
|
|
94
|
+
}
|
|
95
|
+
function parseSummaryRow(line) {
|
|
96
|
+
const trimmed = line.trim();
|
|
97
|
+
if (!trimmed.startsWith("|") || trimmed.includes("章节 |") || trimmed.includes("Chapter |") || trimmed.includes("---")) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const cells = trimmed
|
|
101
|
+
.split("|")
|
|
102
|
+
.map((cell) => cell.trim())
|
|
103
|
+
.filter((cell) => cell.length > 0);
|
|
104
|
+
if (cells.length < 8) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const chapter = Number.parseInt(cells[0] ?? "", 10);
|
|
108
|
+
if (!Number.isFinite(chapter) || chapter <= 0) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
chapter,
|
|
113
|
+
title: cells[1] ?? "",
|
|
114
|
+
mood: cells[6] ?? "",
|
|
115
|
+
chapterType: cells[7] ?? "",
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function buildChapterTypeIssue(rows, language) {
|
|
119
|
+
if (rows.length < 3)
|
|
120
|
+
return null;
|
|
121
|
+
const types = rows
|
|
122
|
+
.map((row) => row.chapterType.trim())
|
|
123
|
+
.filter((value) => isMeaningfulValue(value));
|
|
124
|
+
if (types.length < 3)
|
|
125
|
+
return null;
|
|
126
|
+
const normalized = types.map((value) => value.toLowerCase());
|
|
127
|
+
if (!normalized.every((value) => value === normalized[0])) {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
if (language === "en") {
|
|
131
|
+
return {
|
|
132
|
+
severity: "warning",
|
|
133
|
+
category: "Pacing Monotony",
|
|
134
|
+
description: `The last 3 chapter types are identical: ${types.join(" -> ")}, which suggests macro pacing monotony.`,
|
|
135
|
+
suggestion: "Switch the next chapter's function instead of extending the same beat again. Rotate setup, payoff, reversal, and fallout more deliberately.",
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
severity: "warning",
|
|
140
|
+
category: "节奏单调",
|
|
141
|
+
description: `最近3章章节类型完全一致:${types.join(" -> ")},长篇节奏可能开始固化。`,
|
|
142
|
+
suggestion: "下一章应切换章节功能,不要连续重复同一种布局/推进节拍。",
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
async function loadRecentChapterBodies(bookDir, currentChapter, currentContent) {
|
|
146
|
+
const chaptersDir = join(bookDir, "chapters");
|
|
147
|
+
try {
|
|
148
|
+
const files = await readdir(chaptersDir);
|
|
149
|
+
const previousFiles = files
|
|
150
|
+
.map((file) => ({ file, chapter: Number.parseInt(file.slice(0, 4), 10) }))
|
|
151
|
+
.filter((entry) => Number.isFinite(entry.chapter) && entry.chapter < currentChapter && entry.file.endsWith(".md"))
|
|
152
|
+
.sort((left, right) => left.chapter - right.chapter)
|
|
153
|
+
.slice(-2);
|
|
154
|
+
if (previousFiles.length < 2) {
|
|
155
|
+
return [];
|
|
156
|
+
}
|
|
157
|
+
const previousBodies = await Promise.all(previousFiles.map((entry) => readFile(join(chaptersDir, entry.file), "utf-8")));
|
|
158
|
+
return [...previousBodies, currentContent];
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
return [];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function buildSentencePatternIssue(chapterBodies, boundary, language) {
|
|
165
|
+
if (chapterBodies.length < 3)
|
|
166
|
+
return null;
|
|
167
|
+
const sentences = chapterBodies.map((body) => extractBoundarySentence(body, boundary));
|
|
168
|
+
if (sentences.some((sentence) => sentence === null)) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
const normalized = sentences
|
|
172
|
+
.map((sentence) => normalizeSentence(sentence, language));
|
|
173
|
+
if (normalized.some((sentence) => sentence.length < 18)) {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
const similarities = [
|
|
177
|
+
diceCoefficient(normalized[0], normalized[1]),
|
|
178
|
+
diceCoefficient(normalized[1], normalized[2]),
|
|
179
|
+
];
|
|
180
|
+
if (Math.min(...similarities) < SENTENCE_SIMILARITY_THRESHOLD) {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
const sample = summarizeSentence(sentences[2], language);
|
|
184
|
+
const pairText = similarities.map((value) => value.toFixed(2)).join("/");
|
|
185
|
+
if (language === "en") {
|
|
186
|
+
const category = boundary === "opening" ? "Opening Pattern Repetition" : "Ending Pattern Repetition";
|
|
187
|
+
const position = boundary === "opening" ? "openings" : "endings";
|
|
188
|
+
return {
|
|
189
|
+
severity: "warning",
|
|
190
|
+
category,
|
|
191
|
+
description: `The last 3 chapter ${position} are highly similar (adjacent similarity ${pairText}), which risks a formulaic rhythm. Current ${boundary} signature: "${sample}".`,
|
|
192
|
+
suggestion: boundary === "opening"
|
|
193
|
+
? "Change the next chapter opening vector. Start from action, consequence, or surprise instead of repeating the same camera move."
|
|
194
|
+
: "Change the next chapter landing pattern. End on consequence, decision, or a new variable instead of repeating the same explanatory cadence.",
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
severity: "warning",
|
|
199
|
+
category: boundary === "opening" ? "开头同构" : "结尾同构",
|
|
200
|
+
description: `最近3章${boundary === "opening" ? "开头" : "结尾"}句式高度相似(相邻相似度${pairText}),容易形成模板化${boundary === "opening" ? "开篇" : "章尾"}。当前句式近似“${sample}”。`,
|
|
201
|
+
suggestion: boundary === "opening"
|
|
202
|
+
? "下一章换一个开篇入口,用动作、后果或异常信息切入,不要连续沿用同一种抬镜句。"
|
|
203
|
+
: "下一章换一个收束方式,用行动后果、角色决断或新变量落板,不要连续用解释性句子收尾。",
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function collectRepeatedEnglishPhrases(chapterBodies) {
|
|
207
|
+
const counts = new Map();
|
|
208
|
+
for (const body of chapterBodies) {
|
|
209
|
+
const tokens = body
|
|
210
|
+
.toLowerCase()
|
|
211
|
+
.replace(/[^a-z0-9\s]+/gi, " ")
|
|
212
|
+
.split(/\s+/)
|
|
213
|
+
.filter((token) => token.length >= 3)
|
|
214
|
+
.filter((token) => !ENGLISH_STOP_WORDS.has(token));
|
|
215
|
+
const seen = new Set();
|
|
216
|
+
for (let index = 0; index <= tokens.length - 3; index += 1) {
|
|
217
|
+
const phrase = `${tokens[index]} ${tokens[index + 1]} ${tokens[index + 2]}`;
|
|
218
|
+
seen.add(phrase);
|
|
219
|
+
}
|
|
220
|
+
for (const phrase of seen) {
|
|
221
|
+
counts.set(phrase, (counts.get(phrase) ?? 0) + 1);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return [...counts.entries()]
|
|
225
|
+
.filter(([, count]) => count >= 2)
|
|
226
|
+
.sort((left, right) => right[1] - left[1] || left[0].localeCompare(right[0]))
|
|
227
|
+
.slice(0, 3)
|
|
228
|
+
.map(([phrase]) => phrase);
|
|
229
|
+
}
|
|
230
|
+
function collectRepeatedBoundaryPatterns(chapterBodies, boundary) {
|
|
231
|
+
const counts = new Map();
|
|
232
|
+
for (const body of chapterBodies) {
|
|
233
|
+
const sentence = extractBoundarySentence(body, boundary);
|
|
234
|
+
if (!sentence)
|
|
235
|
+
continue;
|
|
236
|
+
const tokens = sentence
|
|
237
|
+
.toLowerCase()
|
|
238
|
+
.replace(/[^a-z0-9\s]+/gi, " ")
|
|
239
|
+
.split(/\s+/)
|
|
240
|
+
.filter(Boolean)
|
|
241
|
+
.slice(0, 4);
|
|
242
|
+
if (tokens.length < 2)
|
|
243
|
+
continue;
|
|
244
|
+
const pattern = tokens.join(" ");
|
|
245
|
+
counts.set(pattern, (counts.get(pattern) ?? 0) + 1);
|
|
246
|
+
}
|
|
247
|
+
return [...counts.entries()]
|
|
248
|
+
.filter(([, count]) => count >= 2)
|
|
249
|
+
.sort((left, right) => right[1] - left[1] || left[0].localeCompare(right[0]))
|
|
250
|
+
.slice(0, 3)
|
|
251
|
+
.map(([pattern]) => pattern);
|
|
252
|
+
}
|
|
253
|
+
function chooseSceneObligation(rows, repeatedOpenings, repeatedEndings) {
|
|
254
|
+
const recentTypes = rows
|
|
255
|
+
.map((row) => row.chapterType.trim().toLowerCase())
|
|
256
|
+
.filter((type) => type.length > 0);
|
|
257
|
+
if (recentTypes.length >= 3 && recentTypes.every((type) => type === recentTypes[0])) {
|
|
258
|
+
return "confrontation under pressure";
|
|
259
|
+
}
|
|
260
|
+
if (repeatedEndings.length > 0) {
|
|
261
|
+
return "discovery under pressure";
|
|
262
|
+
}
|
|
263
|
+
if (repeatedOpenings.length > 0) {
|
|
264
|
+
return "negotiation with withholding";
|
|
265
|
+
}
|
|
266
|
+
return "concealment with active pushback";
|
|
267
|
+
}
|
|
268
|
+
function extractBoundarySentence(content, boundary) {
|
|
269
|
+
const flattened = content
|
|
270
|
+
.split("\n")
|
|
271
|
+
.map((line) => line.trim())
|
|
272
|
+
.filter((line) => line.length > 0 && !line.startsWith("#"))
|
|
273
|
+
.join(" ");
|
|
274
|
+
const sentences = flattened
|
|
275
|
+
.split(/(?<=[。!?!?\.])\s+/)
|
|
276
|
+
.map((sentence) => sentence.trim())
|
|
277
|
+
.filter((sentence) => sentence.length > 0);
|
|
278
|
+
if (sentences.length === 0) {
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
return boundary === "opening" ? sentences[0] : sentences[sentences.length - 1];
|
|
282
|
+
}
|
|
283
|
+
function normalizeSentence(sentence, language) {
|
|
284
|
+
if (language === "en") {
|
|
285
|
+
return sentence
|
|
286
|
+
.toLowerCase()
|
|
287
|
+
.replace(ENGLISH_PUNCTUATION, "")
|
|
288
|
+
.trim();
|
|
289
|
+
}
|
|
290
|
+
return sentence
|
|
291
|
+
.replace(CHINESE_PUNCTUATION, "")
|
|
292
|
+
.toLowerCase();
|
|
293
|
+
}
|
|
294
|
+
function summarizeSentence(sentence, language) {
|
|
295
|
+
if (language === "en") {
|
|
296
|
+
const words = sentence
|
|
297
|
+
.toLowerCase()
|
|
298
|
+
.replace(/[^a-z0-9\s]+/gi, " ")
|
|
299
|
+
.split(/\s+/)
|
|
300
|
+
.filter(Boolean)
|
|
301
|
+
.slice(0, 6)
|
|
302
|
+
.join(" ");
|
|
303
|
+
return words.length > 0 ? words : sentence.slice(0, 32);
|
|
304
|
+
}
|
|
305
|
+
const collapsed = sentence.replace(CHINESE_PUNCTUATION, "");
|
|
306
|
+
return collapsed.slice(0, 12);
|
|
307
|
+
}
|
|
308
|
+
function formatEnglishList(values) {
|
|
309
|
+
return values.length > 0 ? values.join(", ") : "none";
|
|
310
|
+
}
|
|
311
|
+
function diceCoefficient(left, right) {
|
|
312
|
+
if (left === right)
|
|
313
|
+
return 1;
|
|
314
|
+
if (left.length < 2 || right.length < 2)
|
|
315
|
+
return 0;
|
|
316
|
+
const leftBigrams = buildBigrams(left);
|
|
317
|
+
const rightBigrams = buildBigrams(right);
|
|
318
|
+
let overlap = 0;
|
|
319
|
+
for (const [bigram, count] of leftBigrams) {
|
|
320
|
+
overlap += Math.min(count, rightBigrams.get(bigram) ?? 0);
|
|
321
|
+
}
|
|
322
|
+
const leftCount = [...leftBigrams.values()].reduce((sum, value) => sum + value, 0);
|
|
323
|
+
const rightCount = [...rightBigrams.values()].reduce((sum, value) => sum + value, 0);
|
|
324
|
+
return (2 * overlap) / (leftCount + rightCount);
|
|
325
|
+
}
|
|
326
|
+
function buildBigrams(value) {
|
|
327
|
+
const result = new Map();
|
|
328
|
+
for (let index = 0; index < value.length - 1; index++) {
|
|
329
|
+
const bigram = value.slice(index, index + 2);
|
|
330
|
+
result.set(bigram, (result.get(bigram) ?? 0) + 1);
|
|
331
|
+
}
|
|
332
|
+
return result;
|
|
333
|
+
}
|
|
334
|
+
function isMeaningfulValue(value) {
|
|
335
|
+
const normalized = value.trim().toLowerCase();
|
|
336
|
+
return normalized.length > 0 && normalized !== "none" && normalized !== "(none)" && normalized !== "无";
|
|
337
|
+
}
|
|
338
|
+
const ENGLISH_STOP_WORDS = new Set([
|
|
339
|
+
"the",
|
|
340
|
+
"and",
|
|
341
|
+
"but",
|
|
342
|
+
"with",
|
|
343
|
+
"from",
|
|
344
|
+
"into",
|
|
345
|
+
"that",
|
|
346
|
+
"this",
|
|
347
|
+
"there",
|
|
348
|
+
"again",
|
|
349
|
+
"while",
|
|
350
|
+
"after",
|
|
351
|
+
"before",
|
|
352
|
+
"were",
|
|
353
|
+
"was",
|
|
354
|
+
"had",
|
|
355
|
+
"has",
|
|
356
|
+
"have",
|
|
357
|
+
"kept",
|
|
358
|
+
]);
|
|
359
|
+
//# sourceMappingURL=long-span-fatigue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-span-fatigue.js","sourceRoot":"","sources":["../../src/utils/long-span-fatigue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { HookAgenda } from "../models/input-governance.js";
|
|
2
|
+
import { type Fact, type StoredHook, type StoredSummary } from "../state/memory-db.js";
|
|
3
|
+
export interface MemorySelection {
|
|
4
|
+
readonly summaries: ReadonlyArray<StoredSummary>;
|
|
5
|
+
readonly hooks: ReadonlyArray<StoredHook>;
|
|
6
|
+
readonly activeHooks: ReadonlyArray<StoredHook>;
|
|
7
|
+
readonly facts: ReadonlyArray<Fact>;
|
|
8
|
+
readonly volumeSummaries: ReadonlyArray<VolumeSummarySelection>;
|
|
9
|
+
readonly dbPath?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface VolumeSummarySelection {
|
|
12
|
+
readonly heading: string;
|
|
13
|
+
readonly content: string;
|
|
14
|
+
readonly anchor: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const DEFAULT_HOOK_LOOKAHEAD_CHAPTERS = 3;
|
|
17
|
+
export declare function retrieveMemorySelection(params: {
|
|
18
|
+
readonly bookDir: string;
|
|
19
|
+
readonly chapterNumber: number;
|
|
20
|
+
readonly goal: string;
|
|
21
|
+
readonly outlineNode?: string;
|
|
22
|
+
readonly mustKeep?: ReadonlyArray<string>;
|
|
23
|
+
}): Promise<MemorySelection>;
|
|
24
|
+
export declare function extractQueryTerms(goal: string, outlineNode: string | undefined, mustKeep: ReadonlyArray<string>): string[];
|
|
25
|
+
export declare function renderSummarySnapshot(summaries: ReadonlyArray<StoredSummary>, language?: "zh" | "en"): string;
|
|
26
|
+
export declare function renderHookSnapshot(hooks: ReadonlyArray<StoredHook>, language?: "zh" | "en"): string;
|
|
27
|
+
export declare function buildPlannerHookAgenda(params: {
|
|
28
|
+
readonly hooks: ReadonlyArray<StoredHook>;
|
|
29
|
+
readonly chapterNumber: number;
|
|
30
|
+
readonly maxMustAdvance?: number;
|
|
31
|
+
readonly maxEligibleResolve?: number;
|
|
32
|
+
readonly maxStaleDebt?: number;
|
|
33
|
+
}): HookAgenda;
|
|
34
|
+
export declare function parseChapterSummariesMarkdown(markdown: string): StoredSummary[];
|
|
35
|
+
export declare function parsePendingHooksMarkdown(markdown: string): StoredHook[];
|
|
36
|
+
export declare function parseCurrentStateFacts(markdown: string, fallbackChapter: number): Fact[];
|
|
37
|
+
export declare function isFuturePlannedHook(hook: StoredHook, chapterNumber: number, lookahead?: number): boolean;
|
|
38
|
+
export declare function isHookWithinChapterWindow(hook: StoredHook, chapterNumber: number, recentWindow?: number, lookahead?: number): boolean;
|
|
39
|
+
//# sourceMappingURL=memory-retrieval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-retrieval.d.ts","sourceRoot":"","sources":["../../src/utils/memory-retrieval.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAQhE,OAAO,EAAY,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAIjG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAChE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC3C,GAAG,OAAO,CAAC,eAAe,CAAC,CAmG3B;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAc1H;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,EACvC,QAAQ,GAAE,IAAI,GAAG,IAAW,GAC3B,MAAM,CA0BR;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAChC,QAAQ,GAAE,IAAI,GAAG,IAAW,GAC3B,MAAM,CAyBR;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC,GAAG,UAAU,CAqCb;AA4GD,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAc/E;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAiCxE;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,IAAI,EAAE,CA2CR;AAyOD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,UAAU,EAChB,aAAa,EAAE,MAAM,EACrB,SAAS,GAAE,MAAwC,GAClD,OAAO,CAET;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,UAAU,EAChB,aAAa,EAAE,MAAM,EACrB,YAAY,GAAE,MAAU,EACxB,SAAS,GAAE,MAAwC,GAClD,OAAO,CAoBT"}
|