@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
package/dist/state/memory-db.js
CHANGED
|
@@ -8,13 +8,23 @@
|
|
|
8
8
|
* Backward compatible: existing markdown truth files are still the primary
|
|
9
9
|
* persistence layer. MemoryDB is an acceleration index built alongside them.
|
|
10
10
|
*/
|
|
11
|
+
import { createRequire } from "node:module";
|
|
11
12
|
import { join } from "node:path";
|
|
13
|
+
const require = createRequire(import.meta.url);
|
|
14
|
+
const FACT_SELECT_COLUMNS = `
|
|
15
|
+
id,
|
|
16
|
+
subject,
|
|
17
|
+
predicate,
|
|
18
|
+
object,
|
|
19
|
+
valid_from_chapter AS validFromChapter,
|
|
20
|
+
valid_until_chapter AS validUntilChapter,
|
|
21
|
+
source_chapter AS sourceChapter
|
|
22
|
+
`;
|
|
12
23
|
export class MemoryDB {
|
|
13
24
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
25
|
db;
|
|
15
26
|
constructor(bookDir) {
|
|
16
|
-
//
|
|
17
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
27
|
+
// node:sqlite requires Node 22+; require() via createRequire for ESM compat
|
|
18
28
|
const { DatabaseSync } = require("node:sqlite");
|
|
19
29
|
const dbPath = join(bookDir, "story", "memory.db");
|
|
20
30
|
this.db = new DatabaseSync(dbPath);
|
|
@@ -45,9 +55,21 @@ export class MemoryDB {
|
|
|
45
55
|
chapter_type TEXT NOT NULL DEFAULT ''
|
|
46
56
|
);
|
|
47
57
|
|
|
58
|
+
CREATE TABLE IF NOT EXISTS hooks (
|
|
59
|
+
hook_id TEXT PRIMARY KEY,
|
|
60
|
+
start_chapter INTEGER NOT NULL DEFAULT 0,
|
|
61
|
+
type TEXT NOT NULL DEFAULT '',
|
|
62
|
+
status TEXT NOT NULL DEFAULT 'open',
|
|
63
|
+
last_advanced_chapter INTEGER NOT NULL DEFAULT 0,
|
|
64
|
+
expected_payoff TEXT NOT NULL DEFAULT '',
|
|
65
|
+
notes TEXT NOT NULL DEFAULT ''
|
|
66
|
+
);
|
|
67
|
+
|
|
48
68
|
CREATE INDEX IF NOT EXISTS idx_facts_subject ON facts(subject);
|
|
49
69
|
CREATE INDEX IF NOT EXISTS idx_facts_valid ON facts(valid_from_chapter, valid_until_chapter);
|
|
50
70
|
CREATE INDEX IF NOT EXISTS idx_facts_source ON facts(source_chapter);
|
|
71
|
+
CREATE INDEX IF NOT EXISTS idx_hooks_status ON hooks(status);
|
|
72
|
+
CREATE INDEX IF NOT EXISTS idx_hooks_last_advanced ON hooks(last_advanced_chapter);
|
|
51
73
|
`);
|
|
52
74
|
}
|
|
53
75
|
// ---------------------------------------------------------------------------
|
|
@@ -66,29 +88,51 @@ export class MemoryDB {
|
|
|
66
88
|
}
|
|
67
89
|
/** Get all currently valid facts (valid_until is null). */
|
|
68
90
|
getCurrentFacts() {
|
|
69
|
-
return this.db.prepare(
|
|
91
|
+
return this.db.prepare(`SELECT ${FACT_SELECT_COLUMNS}
|
|
92
|
+
FROM facts
|
|
93
|
+
WHERE valid_until_chapter IS NULL
|
|
94
|
+
ORDER BY subject, predicate`).all();
|
|
70
95
|
}
|
|
71
96
|
/** Get facts about a specific subject that are valid at a given chapter. */
|
|
72
97
|
getFactsAt(subject, chapter) {
|
|
73
|
-
return this.db.prepare(`SELECT
|
|
98
|
+
return this.db.prepare(`SELECT ${FACT_SELECT_COLUMNS}
|
|
99
|
+
FROM facts
|
|
74
100
|
WHERE subject = ? AND valid_from_chapter <= ?
|
|
75
101
|
AND (valid_until_chapter IS NULL OR valid_until_chapter > ?)
|
|
76
102
|
ORDER BY predicate`).all(subject, chapter, chapter);
|
|
77
103
|
}
|
|
78
104
|
/** Get all facts about a subject (including historical). */
|
|
79
105
|
getFactHistory(subject) {
|
|
80
|
-
return this.db.prepare(
|
|
106
|
+
return this.db.prepare(`SELECT ${FACT_SELECT_COLUMNS}
|
|
107
|
+
FROM facts
|
|
108
|
+
WHERE subject = ?
|
|
109
|
+
ORDER BY valid_from_chapter`).all(subject);
|
|
81
110
|
}
|
|
82
111
|
/** Search facts by predicate (e.g., all "location" facts). */
|
|
83
112
|
getFactsByPredicate(predicate) {
|
|
84
|
-
return this.db.prepare(
|
|
113
|
+
return this.db.prepare(`SELECT ${FACT_SELECT_COLUMNS}
|
|
114
|
+
FROM facts
|
|
115
|
+
WHERE predicate = ? AND valid_until_chapter IS NULL
|
|
116
|
+
ORDER BY subject`).all(predicate);
|
|
85
117
|
}
|
|
86
118
|
/** Get facts relevant to a set of character names. */
|
|
87
119
|
getFactsForCharacters(names) {
|
|
88
120
|
if (names.length === 0)
|
|
89
121
|
return [];
|
|
90
122
|
const placeholders = names.map(() => "?").join(",");
|
|
91
|
-
return this.db.prepare(`SELECT
|
|
123
|
+
return this.db.prepare(`SELECT ${FACT_SELECT_COLUMNS}
|
|
124
|
+
FROM facts
|
|
125
|
+
WHERE subject IN (${placeholders}) AND valid_until_chapter IS NULL
|
|
126
|
+
ORDER BY subject, predicate`).all(...names);
|
|
127
|
+
}
|
|
128
|
+
replaceCurrentFacts(facts) {
|
|
129
|
+
this.db.exec("DELETE FROM facts WHERE valid_until_chapter IS NULL");
|
|
130
|
+
for (const fact of facts) {
|
|
131
|
+
this.addFact(fact);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
resetFacts() {
|
|
135
|
+
this.db.exec("DELETE FROM facts");
|
|
92
136
|
}
|
|
93
137
|
// ---------------------------------------------------------------------------
|
|
94
138
|
// Chapter summaries
|
|
@@ -98,9 +142,26 @@ export class MemoryDB {
|
|
|
98
142
|
this.db.prepare(`INSERT OR REPLACE INTO chapter_summaries (chapter, title, characters, events, state_changes, hook_activity, mood, chapter_type)
|
|
99
143
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(summary.chapter, summary.title, summary.characters, summary.events, summary.stateChanges, summary.hookActivity, summary.mood, summary.chapterType);
|
|
100
144
|
}
|
|
145
|
+
replaceSummaries(summaries) {
|
|
146
|
+
this.db.exec("DELETE FROM chapter_summaries");
|
|
147
|
+
for (const summary of summaries) {
|
|
148
|
+
this.upsertSummary(summary);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
101
151
|
/** Get summaries for a range of chapters. */
|
|
102
152
|
getSummaries(fromChapter, toChapter) {
|
|
103
|
-
return this.db.prepare(
|
|
153
|
+
return this.db.prepare(`SELECT
|
|
154
|
+
chapter,
|
|
155
|
+
title,
|
|
156
|
+
characters,
|
|
157
|
+
events,
|
|
158
|
+
state_changes AS stateChanges,
|
|
159
|
+
hook_activity AS hookActivity,
|
|
160
|
+
mood,
|
|
161
|
+
chapter_type AS chapterType
|
|
162
|
+
FROM chapter_summaries
|
|
163
|
+
WHERE chapter >= ? AND chapter <= ?
|
|
164
|
+
ORDER BY chapter`).all(fromChapter, toChapter);
|
|
104
165
|
}
|
|
105
166
|
/** Get summaries matching any of the given character names. */
|
|
106
167
|
getSummariesByCharacters(names) {
|
|
@@ -108,7 +169,18 @@ export class MemoryDB {
|
|
|
108
169
|
return [];
|
|
109
170
|
const conditions = names.map(() => "characters LIKE ?").join(" OR ");
|
|
110
171
|
const params = names.map((n) => `%${n}%`);
|
|
111
|
-
return this.db.prepare(`SELECT
|
|
172
|
+
return this.db.prepare(`SELECT
|
|
173
|
+
chapter,
|
|
174
|
+
title,
|
|
175
|
+
characters,
|
|
176
|
+
events,
|
|
177
|
+
state_changes AS stateChanges,
|
|
178
|
+
hook_activity AS hookActivity,
|
|
179
|
+
mood,
|
|
180
|
+
chapter_type AS chapterType
|
|
181
|
+
FROM chapter_summaries
|
|
182
|
+
WHERE ${conditions}
|
|
183
|
+
ORDER BY chapter`).all(...params);
|
|
112
184
|
}
|
|
113
185
|
/** Get total chapter count. */
|
|
114
186
|
getChapterCount() {
|
|
@@ -117,7 +189,44 @@ export class MemoryDB {
|
|
|
117
189
|
}
|
|
118
190
|
/** Get the most recent N summaries. */
|
|
119
191
|
getRecentSummaries(count) {
|
|
120
|
-
return this.db.prepare(
|
|
192
|
+
return this.db.prepare(`SELECT
|
|
193
|
+
chapter,
|
|
194
|
+
title,
|
|
195
|
+
characters,
|
|
196
|
+
events,
|
|
197
|
+
state_changes AS stateChanges,
|
|
198
|
+
hook_activity AS hookActivity,
|
|
199
|
+
mood,
|
|
200
|
+
chapter_type AS chapterType
|
|
201
|
+
FROM chapter_summaries
|
|
202
|
+
ORDER BY chapter DESC
|
|
203
|
+
LIMIT ?`).all(count);
|
|
204
|
+
}
|
|
205
|
+
// ---------------------------------------------------------------------------
|
|
206
|
+
// Hooks
|
|
207
|
+
// ---------------------------------------------------------------------------
|
|
208
|
+
upsertHook(hook) {
|
|
209
|
+
this.db.prepare(`INSERT OR REPLACE INTO hooks (hook_id, start_chapter, type, status, last_advanced_chapter, expected_payoff, notes)
|
|
210
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`).run(hook.hookId, hook.startChapter, hook.type, hook.status, hook.lastAdvancedChapter, hook.expectedPayoff, hook.notes);
|
|
211
|
+
}
|
|
212
|
+
replaceHooks(hooks) {
|
|
213
|
+
this.db.exec("DELETE FROM hooks");
|
|
214
|
+
for (const hook of hooks) {
|
|
215
|
+
this.upsertHook(hook);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
getActiveHooks() {
|
|
219
|
+
return this.db.prepare(`SELECT
|
|
220
|
+
hook_id AS hookId,
|
|
221
|
+
start_chapter AS startChapter,
|
|
222
|
+
type,
|
|
223
|
+
status,
|
|
224
|
+
last_advanced_chapter AS lastAdvancedChapter,
|
|
225
|
+
expected_payoff AS expectedPayoff,
|
|
226
|
+
notes
|
|
227
|
+
FROM hooks
|
|
228
|
+
WHERE lower(status) NOT IN ('resolved', 'closed', '已回收', '已解决')
|
|
229
|
+
ORDER BY last_advanced_chapter DESC, start_chapter DESC, hook_id ASC`).all();
|
|
121
230
|
}
|
|
122
231
|
// ---------------------------------------------------------------------------
|
|
123
232
|
// Lifecycle
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-db.js","sourceRoot":"","sources":["../../src/state/memory-db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-db.js","sourceRoot":"","sources":["../../src/state/memory-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type RuntimeStateDelta } from "../models/runtime-state.js";
|
|
2
|
+
import type { Fact, StoredHook, StoredSummary } from "./memory-db.js";
|
|
3
|
+
import { type RuntimeStateSnapshot } from "./state-reducer.js";
|
|
4
|
+
export interface RuntimeStateArtifacts {
|
|
5
|
+
readonly snapshot: RuntimeStateSnapshot;
|
|
6
|
+
readonly currentStateMarkdown: string;
|
|
7
|
+
readonly hooksMarkdown: string;
|
|
8
|
+
readonly chapterSummariesMarkdown: string;
|
|
9
|
+
}
|
|
10
|
+
export interface NarrativeMemorySeed {
|
|
11
|
+
readonly summaries: ReadonlyArray<StoredSummary>;
|
|
12
|
+
readonly hooks: ReadonlyArray<StoredHook>;
|
|
13
|
+
}
|
|
14
|
+
export declare function loadRuntimeStateSnapshot(bookDir: string): Promise<RuntimeStateSnapshot>;
|
|
15
|
+
export declare function buildRuntimeStateArtifacts(params: {
|
|
16
|
+
readonly bookDir: string;
|
|
17
|
+
readonly delta: RuntimeStateDelta;
|
|
18
|
+
readonly language: "zh" | "en";
|
|
19
|
+
}): Promise<RuntimeStateArtifacts>;
|
|
20
|
+
export declare function saveRuntimeStateSnapshot(bookDir: string, snapshot: RuntimeStateSnapshot): Promise<void>;
|
|
21
|
+
export declare function loadNarrativeMemorySeed(bookDir: string): Promise<NarrativeMemorySeed>;
|
|
22
|
+
export declare function loadSnapshotCurrentStateFacts(bookDir: string, chapterNumber: number): Promise<ReadonlyArray<Fact>>;
|
|
23
|
+
//# sourceMappingURL=runtime-state-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-state-store.d.ts","sourceRoot":"","sources":["../../src/state/runtime-state-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGtE,OAAO,EAA0B,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGvF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAC3C;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2B7F;AAED,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;CAChC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAajC;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwB3F;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAY9B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { ChapterSummariesStateSchema, CurrentStateStateSchema, HooksStateSchema, StateManifestSchema, } from "../models/runtime-state.js";
|
|
4
|
+
import { bootstrapStructuredStateFromMarkdown, parseCurrentStateFacts } from "./state-bootstrap.js";
|
|
5
|
+
import { renderChapterSummariesProjection, renderCurrentStateProjection, renderHooksProjection } from "./state-projections.js";
|
|
6
|
+
import { applyRuntimeStateDelta } from "./state-reducer.js";
|
|
7
|
+
import { validateRuntimeState } from "./state-validator.js";
|
|
8
|
+
export async function loadRuntimeStateSnapshot(bookDir) {
|
|
9
|
+
await bootstrapStructuredStateFromMarkdown({ bookDir });
|
|
10
|
+
const stateDir = join(bookDir, "story", "state");
|
|
11
|
+
const [manifest, currentState, hooks, chapterSummaries] = await Promise.all([
|
|
12
|
+
readJson(join(stateDir, "manifest.json"), StateManifestSchema),
|
|
13
|
+
readJson(join(stateDir, "current_state.json"), CurrentStateStateSchema),
|
|
14
|
+
readJson(join(stateDir, "hooks.json"), HooksStateSchema),
|
|
15
|
+
readJson(join(stateDir, "chapter_summaries.json"), ChapterSummariesStateSchema),
|
|
16
|
+
]);
|
|
17
|
+
const snapshot = {
|
|
18
|
+
manifest,
|
|
19
|
+
currentState,
|
|
20
|
+
hooks,
|
|
21
|
+
chapterSummaries,
|
|
22
|
+
};
|
|
23
|
+
const issues = validateRuntimeState(snapshot);
|
|
24
|
+
if (issues.length > 0) {
|
|
25
|
+
const summary = issues
|
|
26
|
+
.map((issue) => `${issue.code}${issue.path ? `@${issue.path}` : ""}`)
|
|
27
|
+
.join(", ");
|
|
28
|
+
throw new Error(`Invalid persisted runtime state: ${summary}`);
|
|
29
|
+
}
|
|
30
|
+
return snapshot;
|
|
31
|
+
}
|
|
32
|
+
export async function buildRuntimeStateArtifacts(params) {
|
|
33
|
+
const snapshot = await loadRuntimeStateSnapshot(params.bookDir);
|
|
34
|
+
const next = applyRuntimeStateDelta({
|
|
35
|
+
snapshot,
|
|
36
|
+
delta: params.delta,
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
snapshot: next,
|
|
40
|
+
currentStateMarkdown: renderCurrentStateProjection(next.currentState, params.language),
|
|
41
|
+
hooksMarkdown: renderHooksProjection(next.hooks, params.language),
|
|
42
|
+
chapterSummariesMarkdown: renderChapterSummariesProjection(next.chapterSummaries, params.language),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export async function saveRuntimeStateSnapshot(bookDir, snapshot) {
|
|
46
|
+
const stateDir = join(bookDir, "story", "state");
|
|
47
|
+
await mkdir(stateDir, { recursive: true });
|
|
48
|
+
await Promise.all([
|
|
49
|
+
writeFile(join(stateDir, "manifest.json"), JSON.stringify(snapshot.manifest, null, 2), "utf-8"),
|
|
50
|
+
writeFile(join(stateDir, "current_state.json"), JSON.stringify(snapshot.currentState, null, 2), "utf-8"),
|
|
51
|
+
writeFile(join(stateDir, "hooks.json"), JSON.stringify(snapshot.hooks, null, 2), "utf-8"),
|
|
52
|
+
writeFile(join(stateDir, "chapter_summaries.json"), JSON.stringify(snapshot.chapterSummaries, null, 2), "utf-8"),
|
|
53
|
+
]);
|
|
54
|
+
}
|
|
55
|
+
export async function loadNarrativeMemorySeed(bookDir) {
|
|
56
|
+
const snapshot = await loadRuntimeStateSnapshot(bookDir);
|
|
57
|
+
return {
|
|
58
|
+
summaries: snapshot.chapterSummaries.rows.map((row) => ({
|
|
59
|
+
chapter: row.chapter,
|
|
60
|
+
title: row.title,
|
|
61
|
+
characters: row.characters,
|
|
62
|
+
events: row.events,
|
|
63
|
+
stateChanges: row.stateChanges,
|
|
64
|
+
hookActivity: row.hookActivity,
|
|
65
|
+
mood: row.mood,
|
|
66
|
+
chapterType: row.chapterType,
|
|
67
|
+
})),
|
|
68
|
+
hooks: snapshot.hooks.hooks.map((hook) => ({
|
|
69
|
+
hookId: hook.hookId,
|
|
70
|
+
startChapter: hook.startChapter,
|
|
71
|
+
type: hook.type,
|
|
72
|
+
status: hook.status,
|
|
73
|
+
lastAdvancedChapter: hook.lastAdvancedChapter,
|
|
74
|
+
expectedPayoff: hook.expectedPayoff,
|
|
75
|
+
notes: hook.notes,
|
|
76
|
+
})),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export async function loadSnapshotCurrentStateFacts(bookDir, chapterNumber) {
|
|
80
|
+
const snapshotDir = join(bookDir, "story", "snapshots", String(chapterNumber));
|
|
81
|
+
const structuredState = await readJsonOrNull(join(snapshotDir, "state", "current_state.json"), CurrentStateStateSchema);
|
|
82
|
+
if (structuredState) {
|
|
83
|
+
return structuredState.facts;
|
|
84
|
+
}
|
|
85
|
+
const markdown = await readFile(join(snapshotDir, "current_state.md"), "utf-8").catch(() => "");
|
|
86
|
+
return parseCurrentStateFacts(markdown, chapterNumber);
|
|
87
|
+
}
|
|
88
|
+
async function readJson(path, schema) {
|
|
89
|
+
const raw = await readFile(path, "utf-8");
|
|
90
|
+
return schema.parse(JSON.parse(raw));
|
|
91
|
+
}
|
|
92
|
+
async function readJsonOrNull(path, schema) {
|
|
93
|
+
try {
|
|
94
|
+
return await readJson(path, schema);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=runtime-state-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-state-store.js","sourceRoot":"","sources":["../../src/state/runtime-state-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type StateManifest } from "../models/runtime-state.js";
|
|
2
|
+
import type { Fact, StoredHook, StoredSummary } from "./memory-db.js";
|
|
3
|
+
export interface BootstrapStructuredStateResult {
|
|
4
|
+
readonly createdFiles: ReadonlyArray<string>;
|
|
5
|
+
readonly warnings: ReadonlyArray<string>;
|
|
6
|
+
readonly manifest: StateManifest;
|
|
7
|
+
}
|
|
8
|
+
export declare function bootstrapStructuredStateFromMarkdown(params: {
|
|
9
|
+
readonly bookDir: string;
|
|
10
|
+
readonly fallbackChapter?: number;
|
|
11
|
+
}): Promise<BootstrapStructuredStateResult>;
|
|
12
|
+
export declare function rewriteStructuredStateFromMarkdown(params: {
|
|
13
|
+
readonly bookDir: string;
|
|
14
|
+
readonly fallbackChapter?: number;
|
|
15
|
+
}): Promise<BootstrapStructuredStateResult>;
|
|
16
|
+
export declare function parseChapterSummariesMarkdown(markdown: string): StoredSummary[];
|
|
17
|
+
export declare function parsePendingHooksMarkdown(markdown: string): StoredHook[];
|
|
18
|
+
export declare function parseCurrentStateFacts(markdown: string, fallbackChapter: number): Fact[];
|
|
19
|
+
//# sourceMappingURL=state-bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-bootstrap.d.ts","sourceRoot":"","sources":["../../src/state/state-bootstrap.ts"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEtE,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED,wBAAsB,oCAAoC,CAAC,MAAM,EAAE;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAkE1C;AAED,wBAAsB,kCAAkC,CAAC,MAAM,EAAE;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC,GAAG,OAAO,CAAC,8BAA8B,CAAC,CA2D1C;AAED,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,CAER"}
|