@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.
Files changed (169) hide show
  1. package/dist/agents/architect.d.ts +6 -1
  2. package/dist/agents/architect.d.ts.map +1 -1
  3. package/dist/agents/architect.js +362 -83
  4. package/dist/agents/architect.js.map +1 -1
  5. package/dist/agents/chapter-analyzer.d.ts +6 -0
  6. package/dist/agents/chapter-analyzer.d.ts.map +1 -1
  7. package/dist/agents/chapter-analyzer.js +220 -17
  8. package/dist/agents/chapter-analyzer.js.map +1 -1
  9. package/dist/agents/composer.d.ts +28 -0
  10. package/dist/agents/composer.d.ts.map +1 -0
  11. package/dist/agents/composer.js +154 -0
  12. package/dist/agents/composer.js.map +1 -0
  13. package/dist/agents/consolidator.d.ts.map +1 -1
  14. package/dist/agents/consolidator.js +17 -8
  15. package/dist/agents/consolidator.js.map +1 -1
  16. package/dist/agents/continuity.d.ts +10 -0
  17. package/dist/agents/continuity.d.ts.map +1 -1
  18. package/dist/agents/continuity.js +312 -133
  19. package/dist/agents/continuity.js.map +1 -1
  20. package/dist/agents/en-prompt-sections.d.ts.map +1 -1
  21. package/dist/agents/en-prompt-sections.js +1 -0
  22. package/dist/agents/en-prompt-sections.js.map +1 -1
  23. package/dist/agents/length-normalizer.d.ts +32 -0
  24. package/dist/agents/length-normalizer.d.ts.map +1 -0
  25. package/dist/agents/length-normalizer.js +156 -0
  26. package/dist/agents/length-normalizer.js.map +1 -0
  27. package/dist/agents/planner.d.ts +42 -0
  28. package/dist/agents/planner.d.ts.map +1 -0
  29. package/dist/agents/planner.js +382 -0
  30. package/dist/agents/planner.js.map +1 -0
  31. package/dist/agents/post-write-validator.d.ts +6 -1
  32. package/dist/agents/post-write-validator.d.ts.map +1 -1
  33. package/dist/agents/post-write-validator.js +88 -2
  34. package/dist/agents/post-write-validator.js.map +1 -1
  35. package/dist/agents/reviser.d.ts +10 -1
  36. package/dist/agents/reviser.d.ts.map +1 -1
  37. package/dist/agents/reviser.js +151 -36
  38. package/dist/agents/reviser.js.map +1 -1
  39. package/dist/agents/rules-reader.d.ts +1 -0
  40. package/dist/agents/rules-reader.d.ts.map +1 -1
  41. package/dist/agents/rules-reader.js +13 -0
  42. package/dist/agents/rules-reader.js.map +1 -1
  43. package/dist/agents/settler-delta-parser.d.ts +7 -0
  44. package/dist/agents/settler-delta-parser.d.ts.map +1 -0
  45. package/dist/agents/settler-delta-parser.js +35 -0
  46. package/dist/agents/settler-delta-parser.js.map +1 -0
  47. package/dist/agents/settler-prompts.d.ts +2 -0
  48. package/dist/agents/settler-prompts.d.ts.map +1 -1
  49. package/dist/agents/settler-prompts.js +77 -63
  50. package/dist/agents/settler-prompts.js.map +1 -1
  51. package/dist/agents/writer-parser.d.ts +3 -2
  52. package/dist/agents/writer-parser.d.ts.map +1 -1
  53. package/dist/agents/writer-parser.js +44 -13
  54. package/dist/agents/writer-parser.js.map +1 -1
  55. package/dist/agents/writer-prompts.d.ts +2 -1
  56. package/dist/agents/writer-prompts.d.ts.map +1 -1
  57. package/dist/agents/writer-prompts.js +65 -21
  58. package/dist/agents/writer-prompts.js.map +1 -1
  59. package/dist/agents/writer.d.ts +28 -1
  60. package/dist/agents/writer.d.ts.map +1 -1
  61. package/dist/agents/writer.js +426 -67
  62. package/dist/agents/writer.js.map +1 -1
  63. package/dist/index.d.ts +18 -3
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +17 -2
  66. package/dist/index.js.map +1 -1
  67. package/dist/llm/provider.d.ts +1 -0
  68. package/dist/llm/provider.d.ts.map +1 -1
  69. package/dist/llm/provider.js +19 -6
  70. package/dist/llm/provider.js.map +1 -1
  71. package/dist/models/chapter.d.ts +71 -0
  72. package/dist/models/chapter.d.ts.map +1 -1
  73. package/dist/models/chapter.js +3 -0
  74. package/dist/models/chapter.js.map +1 -1
  75. package/dist/models/input-governance.d.ts +351 -0
  76. package/dist/models/input-governance.d.ts.map +1 -0
  77. package/dist/models/input-governance.js +78 -0
  78. package/dist/models/input-governance.js.map +1 -0
  79. package/dist/models/length-governance.d.ts +93 -0
  80. package/dist/models/length-governance.d.ts.map +1 -0
  81. package/dist/models/length-governance.js +34 -0
  82. package/dist/models/length-governance.js.map +1 -0
  83. package/dist/models/project.d.ts +5 -0
  84. package/dist/models/project.d.ts.map +1 -1
  85. package/dist/models/project.js +2 -0
  86. package/dist/models/project.js.map +1 -1
  87. package/dist/models/runtime-state.d.ts +521 -0
  88. package/dist/models/runtime-state.d.ts.map +1 -0
  89. package/dist/models/runtime-state.js +78 -0
  90. package/dist/models/runtime-state.js.map +1 -0
  91. package/dist/pipeline/agent.d.ts +2 -1
  92. package/dist/pipeline/agent.d.ts.map +1 -1
  93. package/dist/pipeline/agent.js +90 -5
  94. package/dist/pipeline/agent.js.map +1 -1
  95. package/dist/pipeline/runner.d.ts +65 -1
  96. package/dist/pipeline/runner.d.ts.map +1 -1
  97. package/dist/pipeline/runner.js +1029 -73
  98. package/dist/pipeline/runner.js.map +1 -1
  99. package/dist/state/manager.d.ts +14 -0
  100. package/dist/state/manager.d.ts.map +1 -1
  101. package/dist/state/manager.js +114 -0
  102. package/dist/state/manager.js.map +1 -1
  103. package/dist/state/memory-db.d.ts +15 -0
  104. package/dist/state/memory-db.d.ts.map +1 -1
  105. package/dist/state/memory-db.js +119 -10
  106. package/dist/state/memory-db.js.map +1 -1
  107. package/dist/state/runtime-state-store.d.ts +23 -0
  108. package/dist/state/runtime-state-store.d.ts.map +1 -0
  109. package/dist/state/runtime-state-store.js +100 -0
  110. package/dist/state/runtime-state-store.js.map +1 -0
  111. package/dist/state/state-bootstrap.d.ts +19 -0
  112. package/dist/state/state-bootstrap.d.ts.map +1 -0
  113. package/dist/state/state-bootstrap.js +394 -0
  114. package/dist/state/state-bootstrap.js.map +1 -0
  115. package/dist/state/state-projections.d.ts +5 -0
  116. package/dist/state/state-projections.d.ts.map +1 -0
  117. package/dist/state/state-projections.js +164 -0
  118. package/dist/state/state-projections.js.map +1 -0
  119. package/dist/state/state-reducer.d.ts +12 -0
  120. package/dist/state/state-reducer.d.ts.map +1 -0
  121. package/dist/state/state-reducer.js +146 -0
  122. package/dist/state/state-reducer.js.map +1 -0
  123. package/dist/state/state-validator.d.ts +12 -0
  124. package/dist/state/state-validator.d.ts.map +1 -0
  125. package/dist/state/state-validator.js +56 -0
  126. package/dist/state/state-validator.js.map +1 -0
  127. package/dist/utils/chapter-splitter.d.ts +2 -0
  128. package/dist/utils/chapter-splitter.d.ts.map +1 -1
  129. package/dist/utils/chapter-splitter.js +22 -4
  130. package/dist/utils/chapter-splitter.js.map +1 -1
  131. package/dist/utils/config-loader.d.ts +3 -1
  132. package/dist/utils/config-loader.d.ts.map +1 -1
  133. package/dist/utils/config-loader.js +14 -3
  134. package/dist/utils/config-loader.js.map +1 -1
  135. package/dist/utils/context-filter.js +1 -1
  136. package/dist/utils/context-filter.js.map +1 -1
  137. package/dist/utils/governed-context.d.ts +7 -0
  138. package/dist/utils/governed-context.d.ts.map +1 -0
  139. package/dist/utils/governed-context.js +22 -0
  140. package/dist/utils/governed-context.js.map +1 -0
  141. package/dist/utils/governed-working-set.d.ts +18 -0
  142. package/dist/utils/governed-working-set.d.ts.map +1 -0
  143. package/dist/utils/governed-working-set.js +295 -0
  144. package/dist/utils/governed-working-set.js.map +1 -0
  145. package/dist/utils/hook-governance.d.ts +26 -0
  146. package/dist/utils/hook-governance.d.ts.map +1 -0
  147. package/dist/utils/hook-governance.js +128 -0
  148. package/dist/utils/hook-governance.js.map +1 -0
  149. package/dist/utils/hook-health.d.ts +14 -0
  150. package/dist/utils/hook-health.d.ts.map +1 -0
  151. package/dist/utils/hook-health.js +68 -0
  152. package/dist/utils/hook-health.js.map +1 -0
  153. package/dist/utils/length-metrics.d.ts +10 -0
  154. package/dist/utils/length-metrics.d.ts.map +1 -0
  155. package/dist/utils/length-metrics.js +85 -0
  156. package/dist/utils/length-metrics.js.map +1 -0
  157. package/dist/utils/long-span-fatigue.d.ts +28 -0
  158. package/dist/utils/long-span-fatigue.d.ts.map +1 -0
  159. package/dist/utils/long-span-fatigue.js +359 -0
  160. package/dist/utils/long-span-fatigue.js.map +1 -0
  161. package/dist/utils/memory-retrieval.d.ts +39 -0
  162. package/dist/utils/memory-retrieval.d.ts.map +1 -0
  163. package/dist/utils/memory-retrieval.js +574 -0
  164. package/dist/utils/memory-retrieval.js.map +1 -0
  165. package/dist/utils/spot-fix-patches.d.ts +14 -0
  166. package/dist/utils/spot-fix-patches.d.ts.map +1 -0
  167. package/dist/utils/spot-fix-patches.js +75 -0
  168. package/dist/utils/spot-fix-patches.js.map +1 -0
  169. package/package.json +1 -1
@@ -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
- // Dynamic import to avoid crashing on Node 20 (node:sqlite requires Node 22+)
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("SELECT * FROM facts WHERE valid_until_chapter IS NULL ORDER BY subject, predicate").all();
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 * FROM facts
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("SELECT * FROM facts WHERE subject = ? ORDER BY valid_from_chapter").all(subject);
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("SELECT * FROM facts WHERE predicate = ? AND valid_until_chapter IS NULL ORDER BY subject").all(predicate);
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 * FROM facts WHERE subject IN (${placeholders}) AND valid_until_chapter IS NULL ORDER BY subject, predicate`).all(...names);
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("SELECT * FROM chapter_summaries WHERE chapter >= ? AND chapter <= ? ORDER BY chapter").all(fromChapter, toChapter);
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 * FROM chapter_summaries WHERE ${conditions} ORDER BY chapter`).all(...params);
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("SELECT * FROM chapter_summaries ORDER BY chapter DESC LIMIT ?").all(count);
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":"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"}
1
+ {"version":3,"file":"memory-db.js","sourceRoot":"","sources":["../../src/state/memory-db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,mBAAmB,GAAG;;;;;;;;CAQ3B,CAAC;AAiCF,MAAM,OAAO,QAAQ;IACnB,8DAA8D;IACtD,EAAE,CAAM;IAEhB,YAAY,OAAe;QACzB,4EAA4E;QAC5E,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACnD,IAAI,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsCZ,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,mBAAmB;IACnB,8EAA8E;IAE9E,sBAAsB;IACtB,OAAO,CAAC,IAAsB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B;iCAC2B,CAC5B,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EACzC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE,IAAI,CAAC,aAAa,CAC1E,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAED,2CAA2C;IAC3C,cAAc,CAAC,EAAU,EAAE,YAAoB;QAC7C,IAAI,CAAC,EAAE,CAAC,OAAO,CACb,uDAAuD,CACxD,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,2DAA2D;IAC3D,eAAe;QACb,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,UAAU,mBAAmB;;;mCAGA,CAC9B,CAAC,GAAG,EAAuB,CAAC;IAC/B,CAAC;IAED,4EAA4E;IAC5E,UAAU,CAAC,OAAe,EAAE,OAAe;QACzC,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,UAAU,mBAAmB;;;;0BAIT,CACrB,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAsB,CAAC;IACxD,CAAC;IAED,4DAA4D;IAC5D,cAAc,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,UAAU,mBAAmB;;;mCAGA,CAC9B,CAAC,GAAG,CAAC,OAAO,CAAsB,CAAC;IACtC,CAAC;IAED,8DAA8D;IAC9D,mBAAmB,CAAC,SAAiB;QACnC,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,UAAU,mBAAmB;;;wBAGX,CACnB,CAAC,GAAG,CAAC,SAAS,CAAsB,CAAC;IACxC,CAAC;IAED,sDAAsD;IACtD,qBAAqB,CAAC,KAA4B;QAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,UAAU,mBAAmB;;2BAER,YAAY;mCACJ,CAC9B,CAAC,GAAG,CAAC,GAAG,KAAK,CAAsB,CAAC;IACvC,CAAC;IAED,mBAAmB,CAAC,KAAsC;QACxD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACpE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,UAAU;QACR,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACpC,CAAC;IAED,8EAA8E;IAC9E,oBAAoB;IACpB,8EAA8E;IAE9E,gCAAgC;IAChC,aAAa,CAAC,OAAsB;QAClC,IAAI,CAAC,EAAE,CAAC,OAAO,CACb;uCACiC,CAClC,CAAC,GAAG,CACH,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,EAClE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAC9E,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,SAAuC;QACtD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC9C,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,YAAY,CAAC,WAAmB,EAAE,SAAiB;QACjD,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB;;;;;;;;;;;wBAWkB,CACnB,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAA+B,CAAC;IAC9D,CAAC;IAED,+DAA+D;IAC/D,wBAAwB,CAAC,KAA4B;QACnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB;;;;;;;;;;eAUS,UAAU;wBACD,CACnB,CAAC,GAAG,CAAC,GAAG,MAAM,CAA+B,CAAC;IACjD,CAAC;IAED,+BAA+B;IAC/B,eAAe;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,EAAkC,CAAC;QACrH,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,uCAAuC;IACvC,kBAAkB,CAAC,KAAa;QAC9B,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB;;;;;;;;;;;eAWS,CACV,CAAC,GAAG,CAAC,KAAK,CAA4C,CAAC;IAC1D,CAAC;IAED,8EAA8E;IAC9E,QAAQ;IACR,8EAA8E;IAE9E,UAAU,CAAC,IAAgB;QACzB,IAAI,CAAC,EAAE,CAAC,OAAO,CACb;oCAC8B,CAC/B,CAAC,GAAG,CACH,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,KAAK,CACX,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,KAAgC;QAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB;;;;;;;;;;4EAUsE,CACvE,CAAC,GAAG,EAA0C,CAAC;IAClD,CAAC;IAED,8EAA8E;IAC9E,YAAY;IACZ,8EAA8E;IAE9E,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
@@ -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"}