@actalk/inkos-core 1.4.1 → 1.5.0-canary.47.1

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 (262) hide show
  1. package/dist/agent/agent-session.d.ts +15 -0
  2. package/dist/agent/agent-session.d.ts.map +1 -1
  3. package/dist/agent/agent-session.js +256 -26
  4. package/dist/agent/agent-session.js.map +1 -1
  5. package/dist/agent/agent-system-prompt.d.ts +8 -1
  6. package/dist/agent/agent-system-prompt.d.ts.map +1 -1
  7. package/dist/agent/agent-system-prompt.js +382 -176
  8. package/dist/agent/agent-system-prompt.js.map +1 -1
  9. package/dist/agent/agent-tools.d.ts +156 -19
  10. package/dist/agent/agent-tools.d.ts.map +1 -1
  11. package/dist/agent/agent-tools.js +980 -46
  12. package/dist/agent/agent-tools.js.map +1 -1
  13. package/dist/agent/context-transform.d.ts +4 -1
  14. package/dist/agent/context-transform.d.ts.map +1 -1
  15. package/dist/agent/context-transform.js +104 -9
  16. package/dist/agent/context-transform.js.map +1 -1
  17. package/dist/agent/index.d.ts +1 -1
  18. package/dist/agent/index.d.ts.map +1 -1
  19. package/dist/agent/index.js +1 -1
  20. package/dist/agent/index.js.map +1 -1
  21. package/dist/agents/architect.d.ts +11 -1
  22. package/dist/agents/architect.d.ts.map +1 -1
  23. package/dist/agents/architect.js +242 -114
  24. package/dist/agents/architect.js.map +1 -1
  25. package/dist/agents/chapter-analyzer.js +1 -1
  26. package/dist/agents/chapter-analyzer.js.map +1 -1
  27. package/dist/agents/composer.d.ts +36 -0
  28. package/dist/agents/composer.d.ts.map +1 -1
  29. package/dist/agents/composer.js +503 -20
  30. package/dist/agents/composer.js.map +1 -1
  31. package/dist/agents/continuity.d.ts +3 -0
  32. package/dist/agents/continuity.d.ts.map +1 -1
  33. package/dist/agents/continuity.js +28 -14
  34. package/dist/agents/continuity.js.map +1 -1
  35. package/dist/agents/en-prompt-sections.d.ts.map +1 -1
  36. package/dist/agents/en-prompt-sections.js +15 -1
  37. package/dist/agents/en-prompt-sections.js.map +1 -1
  38. package/dist/agents/fanfic-canon-importer.d.ts +1 -0
  39. package/dist/agents/fanfic-canon-importer.d.ts.map +1 -1
  40. package/dist/agents/fanfic-canon-importer.js +53 -6
  41. package/dist/agents/fanfic-canon-importer.js.map +1 -1
  42. package/dist/agents/foundation-reviewer.d.ts +1 -0
  43. package/dist/agents/foundation-reviewer.d.ts.map +1 -1
  44. package/dist/agents/foundation-reviewer.js +17 -12
  45. package/dist/agents/foundation-reviewer.js.map +1 -1
  46. package/dist/agents/length-normalizer.d.ts +1 -0
  47. package/dist/agents/length-normalizer.d.ts.map +1 -1
  48. package/dist/agents/length-normalizer.js +16 -3
  49. package/dist/agents/length-normalizer.js.map +1 -1
  50. package/dist/agents/planner-prompts.d.ts +7 -7
  51. package/dist/agents/planner-prompts.d.ts.map +1 -1
  52. package/dist/agents/planner-prompts.js +29 -29
  53. package/dist/agents/planner-prompts.js.map +1 -1
  54. package/dist/agents/planner.d.ts +6 -5
  55. package/dist/agents/planner.d.ts.map +1 -1
  56. package/dist/agents/planner.js +90 -6
  57. package/dist/agents/planner.js.map +1 -1
  58. package/dist/agents/post-write-validator.d.ts.map +1 -1
  59. package/dist/agents/post-write-validator.js +49 -0
  60. package/dist/agents/post-write-validator.js.map +1 -1
  61. package/dist/agents/reviser.js +10 -0
  62. package/dist/agents/reviser.js.map +1 -1
  63. package/dist/agents/rules-reader.d.ts +6 -14
  64. package/dist/agents/rules-reader.d.ts.map +1 -1
  65. package/dist/agents/rules-reader.js +15 -28
  66. package/dist/agents/rules-reader.js.map +1 -1
  67. package/dist/agents/short-fiction.d.ts +4 -0
  68. package/dist/agents/short-fiction.d.ts.map +1 -1
  69. package/dist/agents/short-fiction.js +51 -8
  70. package/dist/agents/short-fiction.js.map +1 -1
  71. package/dist/agents/state-validator.d.ts +0 -2
  72. package/dist/agents/state-validator.d.ts.map +1 -1
  73. package/dist/agents/state-validator.js +4 -16
  74. package/dist/agents/state-validator.js.map +1 -1
  75. package/dist/agents/style-analyzer.d.ts +1 -1
  76. package/dist/agents/style-analyzer.d.ts.map +1 -1
  77. package/dist/agents/style-analyzer.js +34 -17
  78. package/dist/agents/style-analyzer.js.map +1 -1
  79. package/dist/agents/writer-prompts.d.ts.map +1 -1
  80. package/dist/agents/writer-prompts.js +160 -12
  81. package/dist/agents/writer-prompts.js.map +1 -1
  82. package/dist/agents/writer.d.ts.map +1 -1
  83. package/dist/agents/writer.js +31 -9
  84. package/dist/agents/writer.js.map +1 -1
  85. package/dist/index.d.ts +18 -7
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +17 -7
  88. package/dist/index.js.map +1 -1
  89. package/dist/interaction/action-envelope.d.ts +261 -0
  90. package/dist/interaction/action-envelope.d.ts.map +1 -0
  91. package/dist/interaction/action-envelope.js +102 -0
  92. package/dist/interaction/action-envelope.js.map +1 -0
  93. package/dist/interaction/book-session-store.d.ts +6 -2
  94. package/dist/interaction/book-session-store.d.ts.map +1 -1
  95. package/dist/interaction/book-session-store.js +21 -3
  96. package/dist/interaction/book-session-store.js.map +1 -1
  97. package/dist/interaction/edit-controller.d.ts +5 -0
  98. package/dist/interaction/edit-controller.d.ts.map +1 -1
  99. package/dist/interaction/edit-controller.js +123 -26
  100. package/dist/interaction/edit-controller.js.map +1 -1
  101. package/dist/interaction/events.d.ts +4 -4
  102. package/dist/interaction/intents.d.ts +9 -6
  103. package/dist/interaction/intents.d.ts.map +1 -1
  104. package/dist/interaction/intents.js +2 -1
  105. package/dist/interaction/intents.js.map +1 -1
  106. package/dist/interaction/project-control.d.ts +3 -43
  107. package/dist/interaction/project-control.d.ts.map +1 -1
  108. package/dist/interaction/project-control.js +1 -53
  109. package/dist/interaction/project-control.js.map +1 -1
  110. package/dist/interaction/project-tools.d.ts +1 -1
  111. package/dist/interaction/project-tools.d.ts.map +1 -1
  112. package/dist/interaction/project-tools.js +41 -185
  113. package/dist/interaction/project-tools.js.map +1 -1
  114. package/dist/interaction/runtime.d.ts +1 -1
  115. package/dist/interaction/runtime.d.ts.map +1 -1
  116. package/dist/interaction/runtime.js +49 -75
  117. package/dist/interaction/runtime.js.map +1 -1
  118. package/dist/interaction/session-transcript-legacy.d.ts.map +1 -1
  119. package/dist/interaction/session-transcript-legacy.js +2 -0
  120. package/dist/interaction/session-transcript-legacy.js.map +1 -1
  121. package/dist/interaction/session-transcript-restore.d.ts +4 -3
  122. package/dist/interaction/session-transcript-restore.d.ts.map +1 -1
  123. package/dist/interaction/session-transcript-restore.js +234 -34
  124. package/dist/interaction/session-transcript-restore.js.map +1 -1
  125. package/dist/interaction/session-transcript-schema.d.ts +45 -12
  126. package/dist/interaction/session-transcript-schema.d.ts.map +1 -1
  127. package/dist/interaction/session-transcript-schema.js +6 -0
  128. package/dist/interaction/session-transcript-schema.js.map +1 -1
  129. package/dist/interaction/session-transcript.d.ts +8 -1
  130. package/dist/interaction/session-transcript.d.ts.map +1 -1
  131. package/dist/interaction/session-transcript.js +13 -1
  132. package/dist/interaction/session-transcript.js.map +1 -1
  133. package/dist/interaction/session.d.ts +78 -66
  134. package/dist/interaction/session.d.ts.map +1 -1
  135. package/dist/interaction/session.js +10 -2
  136. package/dist/interaction/session.js.map +1 -1
  137. package/dist/llm/provider.d.ts +32 -34
  138. package/dist/llm/provider.d.ts.map +1 -1
  139. package/dist/llm/provider.js +144 -127
  140. package/dist/llm/provider.js.map +1 -1
  141. package/dist/models/book-rules.d.ts +6 -4
  142. package/dist/models/book-rules.d.ts.map +1 -1
  143. package/dist/models/book-rules.js +187 -8
  144. package/dist/models/book-rules.js.map +1 -1
  145. package/dist/models/context-compression.d.ts +13 -0
  146. package/dist/models/context-compression.d.ts.map +1 -0
  147. package/dist/models/context-compression.js +2 -0
  148. package/dist/models/context-compression.js.map +1 -0
  149. package/dist/models/input-governance.d.ts +53 -12
  150. package/dist/models/input-governance.d.ts.map +1 -1
  151. package/dist/models/input-governance.js +16 -0
  152. package/dist/models/input-governance.js.map +1 -1
  153. package/dist/models/play.d.ts +530 -0
  154. package/dist/models/play.d.ts.map +1 -0
  155. package/dist/models/play.js +318 -0
  156. package/dist/models/play.js.map +1 -0
  157. package/dist/models/project.d.ts +8 -0
  158. package/dist/models/project.d.ts.map +1 -1
  159. package/dist/models/project.js +1 -0
  160. package/dist/models/project.js.map +1 -1
  161. package/dist/pipeline/chapter-review-cycle.d.ts.map +1 -1
  162. package/dist/pipeline/chapter-review-cycle.js +29 -3
  163. package/dist/pipeline/chapter-review-cycle.js.map +1 -1
  164. package/dist/pipeline/persisted-governed-plan.d.ts.map +1 -1
  165. package/dist/pipeline/persisted-governed-plan.js +98 -49
  166. package/dist/pipeline/persisted-governed-plan.js.map +1 -1
  167. package/dist/pipeline/runner.d.ts +31 -0
  168. package/dist/pipeline/runner.d.ts.map +1 -1
  169. package/dist/pipeline/runner.js +212 -68
  170. package/dist/pipeline/runner.js.map +1 -1
  171. package/dist/pipeline/short-fiction-runner.d.ts +14 -0
  172. package/dist/pipeline/short-fiction-runner.d.ts.map +1 -1
  173. package/dist/pipeline/short-fiction-runner.js +242 -94
  174. package/dist/pipeline/short-fiction-runner.js.map +1 -1
  175. package/dist/play/play-agents.d.ts +71 -0
  176. package/dist/play/play-agents.d.ts.map +1 -0
  177. package/dist/play/play-agents.js +511 -0
  178. package/dist/play/play-agents.js.map +1 -0
  179. package/dist/play/play-db-factory.d.ts +9 -0
  180. package/dist/play/play-db-factory.d.ts.map +1 -0
  181. package/dist/play/play-db-factory.js +18 -0
  182. package/dist/play/play-db-factory.js.map +1 -0
  183. package/dist/play/play-db.d.ts +22 -0
  184. package/dist/play/play-db.d.ts.map +1 -0
  185. package/dist/play/play-db.js +248 -0
  186. package/dist/play/play-db.js.map +1 -0
  187. package/dist/play/play-file-db.d.ts +32 -0
  188. package/dist/play/play-file-db.d.ts.map +1 -0
  189. package/dist/play/play-file-db.js +156 -0
  190. package/dist/play/play-file-db.js.map +1 -0
  191. package/dist/play/play-image.d.ts +58 -0
  192. package/dist/play/play-image.d.ts.map +1 -0
  193. package/dist/play/play-image.js +142 -0
  194. package/dist/play/play-image.js.map +1 -0
  195. package/dist/play/play-reducer.d.ts +31 -0
  196. package/dist/play/play-reducer.d.ts.map +1 -0
  197. package/dist/play/play-reducer.js +261 -0
  198. package/dist/play/play-reducer.js.map +1 -0
  199. package/dist/play/play-runner.d.ts +102 -0
  200. package/dist/play/play-runner.d.ts.map +1 -0
  201. package/dist/play/play-runner.js +465 -0
  202. package/dist/play/play-runner.js.map +1 -0
  203. package/dist/play/play-store.d.ts +112 -0
  204. package/dist/play/play-store.d.ts.map +1 -0
  205. package/dist/play/play-store.js +311 -0
  206. package/dist/play/play-store.js.map +1 -0
  207. package/dist/prompts/short-fiction.d.ts +5 -0
  208. package/dist/prompts/short-fiction.d.ts.map +1 -1
  209. package/dist/prompts/short-fiction.js +46 -22
  210. package/dist/prompts/short-fiction.js.map +1 -1
  211. package/dist/state/state-bootstrap.d.ts.map +1 -1
  212. package/dist/state/state-bootstrap.js +12 -25
  213. package/dist/state/state-bootstrap.js.map +1 -1
  214. package/dist/state/state-reducer.js +31 -22
  215. package/dist/state/state-reducer.js.map +1 -1
  216. package/dist/utils/book-eval.d.ts +35 -0
  217. package/dist/utils/book-eval.d.ts.map +1 -0
  218. package/dist/utils/book-eval.js +116 -0
  219. package/dist/utils/book-eval.js.map +1 -0
  220. package/dist/utils/chapter-memo-parser.d.ts +10 -7
  221. package/dist/utils/chapter-memo-parser.d.ts.map +1 -1
  222. package/dist/utils/chapter-memo-parser.js +86 -43
  223. package/dist/utils/chapter-memo-parser.js.map +1 -1
  224. package/dist/utils/context-assembly.d.ts +2 -0
  225. package/dist/utils/context-assembly.d.ts.map +1 -1
  226. package/dist/utils/context-assembly.js +38 -1
  227. package/dist/utils/context-assembly.js.map +1 -1
  228. package/dist/utils/hook-health.d.ts.map +1 -1
  229. package/dist/utils/hook-health.js +5 -2
  230. package/dist/utils/hook-health.js.map +1 -1
  231. package/dist/utils/hook-ledger-validator.d.ts +1 -1
  232. package/dist/utils/hook-ledger-validator.d.ts.map +1 -1
  233. package/dist/utils/hook-ledger-validator.js +5 -5
  234. package/dist/utils/hook-ledger-validator.js.map +1 -1
  235. package/dist/utils/hook-lifecycle.d.ts +1 -0
  236. package/dist/utils/hook-lifecycle.d.ts.map +1 -1
  237. package/dist/utils/hook-lifecycle.js +10 -3
  238. package/dist/utils/hook-lifecycle.js.map +1 -1
  239. package/dist/utils/language.d.ts +10 -0
  240. package/dist/utils/language.d.ts.map +1 -0
  241. package/dist/utils/language.js +18 -0
  242. package/dist/utils/language.js.map +1 -0
  243. package/dist/utils/length-metrics.d.ts +3 -0
  244. package/dist/utils/length-metrics.d.ts.map +1 -1
  245. package/dist/utils/length-metrics.js +8 -0
  246. package/dist/utils/length-metrics.js.map +1 -1
  247. package/dist/utils/memory-retrieval.d.ts.map +1 -1
  248. package/dist/utils/memory-retrieval.js +19 -15
  249. package/dist/utils/memory-retrieval.js.map +1 -1
  250. package/dist/utils/outline-paths.d.ts +12 -0
  251. package/dist/utils/outline-paths.d.ts.map +1 -1
  252. package/dist/utils/outline-paths.js +68 -0
  253. package/dist/utils/outline-paths.js.map +1 -1
  254. package/package.json +1 -1
  255. package/dist/interaction/nl-router.d.ts +0 -8
  256. package/dist/interaction/nl-router.d.ts.map +0 -1
  257. package/dist/interaction/nl-router.js +0 -218
  258. package/dist/interaction/nl-router.js.map +0 -1
  259. package/dist/pipeline/agent.d.ts +0 -15
  260. package/dist/pipeline/agent.d.ts.map +0 -1
  261. package/dist/pipeline/agent.js +0 -597
  262. package/dist/pipeline/agent.js.map +0 -1
@@ -0,0 +1,248 @@
1
+ import { mkdirSync } from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import { join } from "node:path";
4
+ import { PlayEdgeSchema, PlayEntitySchema, PlayEventSchema, PlayStateSlotSchema, } from "../models/play.js";
5
+ const require = createRequire(import.meta.url);
6
+ const ENTITY_SELECT_COLUMNS = `
7
+ entities.id,
8
+ entities.type,
9
+ entities.label,
10
+ entities.summary,
11
+ entities.status,
12
+ entities.created_event AS createdEventId,
13
+ entities.updated_event AS updatedEventId
14
+ `;
15
+ const EDGE_SELECT_COLUMNS = `
16
+ id,
17
+ from_id AS fromId,
18
+ type,
19
+ to_id AS toId,
20
+ value_json AS valueJson,
21
+ valid_from_event AS validFromEventId,
22
+ valid_until_event AS validUntilEventId,
23
+ source_event_id AS sourceEventId,
24
+ visibility_json AS visibilityJson,
25
+ strength,
26
+ confidence
27
+ `;
28
+ const STATE_SLOT_SELECT_COLUMNS = `
29
+ id,
30
+ owner_entity_id AS ownerEntityId,
31
+ kind,
32
+ label,
33
+ value_json AS valueJson,
34
+ updated_event AS updatedEventId
35
+ `;
36
+ const EVENT_SELECT_COLUMNS = `
37
+ id,
38
+ turn,
39
+ action_kind AS actionKind,
40
+ raw_input AS rawInput,
41
+ outcome_summary AS outcomeSummary,
42
+ created_at AS createdAt
43
+ `;
44
+ export class PlayDB {
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
+ db;
47
+ constructor(runDir) {
48
+ mkdirSync(runDir, { recursive: true });
49
+ const { DatabaseSync } = require("node:sqlite");
50
+ this.db = new DatabaseSync(join(runDir, "play.db"));
51
+ this.db.exec("PRAGMA journal_mode = WAL");
52
+ this.migrate();
53
+ }
54
+ migrate() {
55
+ this.db.exec(`
56
+ CREATE TABLE IF NOT EXISTS entities (
57
+ id TEXT PRIMARY KEY,
58
+ type TEXT NOT NULL,
59
+ label TEXT NOT NULL,
60
+ summary TEXT NOT NULL DEFAULT '',
61
+ status TEXT NOT NULL DEFAULT '',
62
+ created_event TEXT,
63
+ updated_event TEXT
64
+ );
65
+
66
+ CREATE TABLE IF NOT EXISTS edges (
67
+ id TEXT PRIMARY KEY,
68
+ from_id TEXT NOT NULL,
69
+ type TEXT NOT NULL,
70
+ to_id TEXT NOT NULL,
71
+ value_json TEXT NOT NULL DEFAULT '{}',
72
+ valid_from_event TEXT NOT NULL,
73
+ valid_until_event TEXT,
74
+ source_event_id TEXT NOT NULL,
75
+ visibility_json TEXT NOT NULL DEFAULT '{}',
76
+ strength REAL,
77
+ confidence REAL
78
+ );
79
+
80
+ CREATE TABLE IF NOT EXISTS state_slots (
81
+ id TEXT PRIMARY KEY,
82
+ owner_entity_id TEXT,
83
+ kind TEXT NOT NULL,
84
+ label TEXT NOT NULL,
85
+ value_json TEXT NOT NULL,
86
+ updated_event TEXT NOT NULL
87
+ );
88
+
89
+ CREATE TABLE IF NOT EXISTS events (
90
+ id TEXT PRIMARY KEY,
91
+ turn INTEGER NOT NULL,
92
+ action_kind TEXT NOT NULL,
93
+ raw_input TEXT NOT NULL,
94
+ outcome_summary TEXT NOT NULL DEFAULT '',
95
+ created_at TEXT NOT NULL
96
+ );
97
+
98
+ CREATE INDEX IF NOT EXISTS idx_play_edges_from ON edges(from_id, valid_until_event);
99
+ CREATE INDEX IF NOT EXISTS idx_play_edges_to ON edges(to_id, type, valid_until_event);
100
+ CREATE INDEX IF NOT EXISTS idx_play_state_owner ON state_slots(owner_entity_id);
101
+ CREATE INDEX IF NOT EXISTS idx_play_events_turn ON events(turn);
102
+ `);
103
+ }
104
+ upsertEntity(entity) {
105
+ const parsed = PlayEntitySchema.parse(entity);
106
+ this.db.prepare(`INSERT OR REPLACE INTO entities (id, type, label, summary, status, created_event, updated_event)
107
+ VALUES (?, ?, ?, ?, ?, ?, ?)`).run(parsed.id, parsed.type, parsed.label, parsed.summary, parsed.status, parsed.createdEventId ?? null, parsed.updatedEventId ?? null);
108
+ }
109
+ getEntity(id) {
110
+ const row = this.db.prepare(`SELECT ${ENTITY_SELECT_COLUMNS} FROM entities WHERE id = ?`).get(id);
111
+ return row ? rowToEntity(row) : null;
112
+ }
113
+ upsertEdge(edge) {
114
+ const parsed = PlayEdgeSchema.parse(edge);
115
+ this.db.prepare(`INSERT OR REPLACE INTO edges (
116
+ id, from_id, type, to_id, value_json, valid_from_event, valid_until_event,
117
+ source_event_id, visibility_json, strength, confidence
118
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(parsed.id, parsed.fromId, parsed.type, parsed.toId, JSON.stringify(parsed.value), parsed.validFromEventId, parsed.validUntilEventId, parsed.sourceEventId, JSON.stringify(parsed.visibility), parsed.strength ?? null, parsed.confidence ?? null);
119
+ }
120
+ expireEdge(edgeId, validUntilEventId) {
121
+ this.db.prepare("UPDATE edges SET valid_until_event = ? WHERE id = ?").run(validUntilEventId, edgeId);
122
+ }
123
+ getCurrentEdgesForEntity(entityId) {
124
+ const rows = this.db.prepare(`SELECT ${EDGE_SELECT_COLUMNS}
125
+ FROM edges
126
+ WHERE (from_id = ? OR to_id = ?) AND valid_until_event IS NULL
127
+ ORDER BY type, id`).all(entityId, entityId);
128
+ return rows.map(rowToEdge);
129
+ }
130
+ getEvidenceForClaim(claimId) {
131
+ const rows = this.db.prepare(`SELECT ${ENTITY_SELECT_COLUMNS}
132
+ FROM entities
133
+ INNER JOIN edges ON entities.id = edges.from_id
134
+ WHERE edges.to_id = ?
135
+ AND edges.type = 'supports'
136
+ AND edges.valid_until_event IS NULL
137
+ AND entities.type IN ('evidence', 'clue')
138
+ ORDER BY COALESCE(edges.strength, 0) DESC, entities.id ASC`).all(claimId);
139
+ return rows.map(rowToEntity);
140
+ }
141
+ upsertStateSlot(slot) {
142
+ const parsed = PlayStateSlotSchema.parse(slot);
143
+ this.db.prepare(`INSERT OR REPLACE INTO state_slots (id, owner_entity_id, kind, label, value_json, updated_event)
144
+ VALUES (?, ?, ?, ?, ?, ?)`).run(parsed.id, parsed.ownerEntityId ?? null, parsed.kind, parsed.label, JSON.stringify(parsed.value), parsed.updatedEventId);
145
+ }
146
+ getStateSlotsForEntity(entityId) {
147
+ const rows = this.db.prepare(`SELECT ${STATE_SLOT_SELECT_COLUMNS}
148
+ FROM state_slots
149
+ WHERE owner_entity_id = ?
150
+ ORDER BY kind, label, id`).all(entityId);
151
+ return rows.map(rowToStateSlot);
152
+ }
153
+ recordEvent(event) {
154
+ const parsed = PlayEventSchema.parse(event);
155
+ this.db.prepare(`INSERT OR REPLACE INTO events (id, turn, action_kind, raw_input, outcome_summary, created_at)
156
+ VALUES (?, ?, ?, ?, ?, ?)`).run(parsed.id, parsed.turn, parsed.actionKind, parsed.rawInput, parsed.outcomeSummary, parsed.createdAt);
157
+ }
158
+ getEvent(id) {
159
+ const row = this.db.prepare(`SELECT ${EVENT_SELECT_COLUMNS} FROM events WHERE id = ?`).get(id);
160
+ return row ? PlayEventSchema.parse(row) : null;
161
+ }
162
+ snapshot() {
163
+ const entities = this.db.prepare(`SELECT ${ENTITY_SELECT_COLUMNS} FROM entities ORDER BY id`).all();
164
+ const edges = this.db.prepare(`SELECT ${EDGE_SELECT_COLUMNS} FROM edges ORDER BY id`).all();
165
+ const stateSlots = this.db.prepare(`SELECT ${STATE_SLOT_SELECT_COLUMNS} FROM state_slots ORDER BY id`).all();
166
+ const events = this.db.prepare(`SELECT ${EVENT_SELECT_COLUMNS} FROM events ORDER BY turn, id`).all();
167
+ return {
168
+ entities: entities.map(rowToEntity),
169
+ edges: edges.map(rowToEdge),
170
+ stateSlots: stateSlots.map(rowToStateSlot),
171
+ events: events.map((row) => PlayEventSchema.parse(row)),
172
+ };
173
+ }
174
+ replaceWithSnapshot(snapshot) {
175
+ this.transaction(() => {
176
+ this.db.prepare("DELETE FROM state_slots").run();
177
+ this.db.prepare("DELETE FROM edges").run();
178
+ this.db.prepare("DELETE FROM entities").run();
179
+ this.db.prepare("DELETE FROM events").run();
180
+ for (const event of snapshot.events)
181
+ this.recordEvent(event);
182
+ for (const entity of snapshot.entities)
183
+ this.upsertEntity(entity);
184
+ for (const edge of snapshot.edges)
185
+ this.upsertEdge(edge);
186
+ for (const slot of snapshot.stateSlots)
187
+ this.upsertStateSlot(slot);
188
+ });
189
+ }
190
+ transaction(fn) {
191
+ this.db.exec("BEGIN IMMEDIATE");
192
+ try {
193
+ const result = fn();
194
+ this.db.exec("COMMIT");
195
+ return result;
196
+ }
197
+ catch (error) {
198
+ this.db.exec("ROLLBACK");
199
+ throw error;
200
+ }
201
+ }
202
+ close() {
203
+ this.db.close();
204
+ }
205
+ }
206
+ function rowToEntity(row) {
207
+ return PlayEntitySchema.parse({
208
+ id: row.id,
209
+ type: row.type,
210
+ label: row.label,
211
+ summary: row.summary,
212
+ status: row.status,
213
+ ...(row.createdEventId ? { createdEventId: row.createdEventId } : {}),
214
+ ...(row.updatedEventId ? { updatedEventId: row.updatedEventId } : {}),
215
+ });
216
+ }
217
+ function rowToEdge(row) {
218
+ return PlayEdgeSchema.parse({
219
+ id: row.id,
220
+ fromId: row.fromId,
221
+ type: row.type,
222
+ toId: row.toId,
223
+ value: parseJsonObject(row.valueJson),
224
+ validFromEventId: row.validFromEventId,
225
+ validUntilEventId: row.validUntilEventId,
226
+ sourceEventId: row.sourceEventId,
227
+ visibility: parseJsonObject(row.visibilityJson),
228
+ ...(row.strength === null ? {} : { strength: row.strength }),
229
+ ...(row.confidence === null ? {} : { confidence: row.confidence }),
230
+ });
231
+ }
232
+ function rowToStateSlot(row) {
233
+ return PlayStateSlotSchema.parse({
234
+ id: row.id,
235
+ ownerEntityId: row.ownerEntityId,
236
+ kind: row.kind,
237
+ label: row.label,
238
+ value: JSON.parse(row.valueJson),
239
+ updatedEventId: row.updatedEventId,
240
+ });
241
+ }
242
+ function parseJsonObject(value) {
243
+ const parsed = JSON.parse(value);
244
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed)
245
+ ? parsed
246
+ : {};
247
+ }
248
+ //# sourceMappingURL=play-db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"play-db.js","sourceRoot":"","sources":["../../src/play/play-db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { type PlayEdge, type PlayEdgeInput, type PlayEntity, type PlayEntityInput, type PlayEvent, type PlayEventInput, type PlayStateSlot, type PlayStateSlotInput } from "../models/play.js";
2
+ import type { PlayReducerDB } from "./play-reducer.js";
3
+ export interface PlayGraphSnapshot {
4
+ readonly entities: PlayEntity[];
5
+ readonly edges: PlayEdge[];
6
+ readonly stateSlots: PlayStateSlot[];
7
+ readonly events: PlayEvent[];
8
+ }
9
+ export declare class PlayFileDB implements PlayReducerDB {
10
+ private readonly filePath;
11
+ private data;
12
+ private transactionBackup;
13
+ constructor(runDir: string);
14
+ upsertEntity(entity: PlayEntityInput): void;
15
+ getEntity(id: string): PlayEntity | null;
16
+ upsertEdge(edge: PlayEdgeInput): void;
17
+ expireEdge(edgeId: string, validUntilEventId: string): void;
18
+ getCurrentEdgesForEntity(entityId: string): PlayEdge[];
19
+ getEvidenceForClaim(claimId: string): PlayEntity[];
20
+ upsertStateSlot(slot: PlayStateSlotInput): void;
21
+ getStateSlotsForEntity(entityId: string): PlayStateSlot[];
22
+ recordEvent(event: PlayEventInput): void;
23
+ getEvent(id: string): PlayEvent | null;
24
+ snapshot(): PlayGraphSnapshot;
25
+ replaceWithSnapshot(snapshot: PlayGraphSnapshot): void;
26
+ transaction<T>(fn: () => T): T;
27
+ close(): void;
28
+ private load;
29
+ private persistIfNeeded;
30
+ private persist;
31
+ }
32
+ //# sourceMappingURL=play-file-db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"play-file-db.d.ts","sourceRoot":"","sources":["../../src/play/play-file-db.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AASvD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;CAC9B;AAED,qBAAa,UAAW,YAAW,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,iBAAiB,CAA+B;gBAE5C,MAAM,EAAE,MAAM;IAM1B,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAM3C,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIxC,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAMrC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAQ3D,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;IAMtD,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAQlD,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAM/C,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAMzD,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAMxC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAItC,QAAQ,IAAI,iBAAiB;IAS7B,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAiBtD,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAmB9B,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,IAAI;IAeZ,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,OAAO;CAGhB"}
@@ -0,0 +1,156 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { PlayEdgeSchema, PlayEntitySchema, PlayEventSchema, PlayStateSlotSchema, } from "../models/play.js";
4
+ export class PlayFileDB {
5
+ filePath;
6
+ data;
7
+ transactionBackup = null;
8
+ constructor(runDir) {
9
+ mkdirSync(runDir, { recursive: true });
10
+ this.filePath = join(runDir, "play-graph.json");
11
+ this.data = this.load();
12
+ }
13
+ upsertEntity(entity) {
14
+ const parsed = PlayEntitySchema.parse(entity);
15
+ this.data.entities[parsed.id] = parsed;
16
+ this.persistIfNeeded();
17
+ }
18
+ getEntity(id) {
19
+ return this.data.entities[id] ?? null;
20
+ }
21
+ upsertEdge(edge) {
22
+ const parsed = PlayEdgeSchema.parse(edge);
23
+ this.data.edges[parsed.id] = parsed;
24
+ this.persistIfNeeded();
25
+ }
26
+ expireEdge(edgeId, validUntilEventId) {
27
+ const edge = this.data.edges[edgeId];
28
+ if (edge) {
29
+ this.data.edges[edgeId] = { ...edge, validUntilEventId };
30
+ this.persistIfNeeded();
31
+ }
32
+ }
33
+ getCurrentEdgesForEntity(entityId) {
34
+ return Object.values(this.data.edges)
35
+ .filter((edge) => edge.validUntilEventId === null && (edge.fromId === entityId || edge.toId === entityId))
36
+ .sort((a, b) => `${a.type}:${a.id}`.localeCompare(`${b.type}:${b.id}`));
37
+ }
38
+ getEvidenceForClaim(claimId) {
39
+ return Object.values(this.data.edges)
40
+ .filter((edge) => edge.validUntilEventId === null && edge.type === "supports" && edge.toId === claimId)
41
+ .map((edge) => this.data.entities[edge.fromId])
42
+ .filter((entity) => !!entity && (entity.type === "evidence" || entity.type === "clue"))
43
+ .sort((a, b) => a.id.localeCompare(b.id));
44
+ }
45
+ upsertStateSlot(slot) {
46
+ const parsed = PlayStateSlotSchema.parse(slot);
47
+ this.data.stateSlots[parsed.id] = parsed;
48
+ this.persistIfNeeded();
49
+ }
50
+ getStateSlotsForEntity(entityId) {
51
+ return Object.values(this.data.stateSlots)
52
+ .filter((slot) => slot.ownerEntityId === entityId)
53
+ .sort((a, b) => `${a.kind}:${a.label}:${a.id}`.localeCompare(`${b.kind}:${b.label}:${b.id}`));
54
+ }
55
+ recordEvent(event) {
56
+ const parsed = PlayEventSchema.parse(event);
57
+ this.data.events[parsed.id] = parsed;
58
+ this.persistIfNeeded();
59
+ }
60
+ getEvent(id) {
61
+ return this.data.events[id] ?? null;
62
+ }
63
+ snapshot() {
64
+ return {
65
+ entities: Object.values(this.data.entities).sort((a, b) => a.id.localeCompare(b.id)),
66
+ edges: Object.values(this.data.edges).sort((a, b) => a.id.localeCompare(b.id)),
67
+ stateSlots: Object.values(this.data.stateSlots).sort((a, b) => a.id.localeCompare(b.id)),
68
+ events: Object.values(this.data.events).sort((a, b) => a.turn - b.turn || a.id.localeCompare(b.id)),
69
+ };
70
+ }
71
+ replaceWithSnapshot(snapshot) {
72
+ const replace = () => {
73
+ this.data = {
74
+ entities: Object.fromEntries(snapshot.entities.map((entity) => [entity.id, PlayEntitySchema.parse(entity)])),
75
+ edges: Object.fromEntries(snapshot.edges.map((edge) => [edge.id, PlayEdgeSchema.parse(edge)])),
76
+ stateSlots: Object.fromEntries(snapshot.stateSlots.map((slot) => [slot.id, PlayStateSlotSchema.parse(slot)])),
77
+ events: Object.fromEntries(snapshot.events.map((event) => [event.id, PlayEventSchema.parse(event)])),
78
+ };
79
+ };
80
+ if (this.transactionBackup) {
81
+ replace();
82
+ return;
83
+ }
84
+ replace();
85
+ this.persist();
86
+ }
87
+ transaction(fn) {
88
+ if (this.transactionBackup) {
89
+ return fn();
90
+ }
91
+ this.transactionBackup = cloneData(this.data);
92
+ try {
93
+ const result = fn();
94
+ this.transactionBackup = null;
95
+ this.persist();
96
+ return result;
97
+ }
98
+ catch (error) {
99
+ const backup = this.transactionBackup;
100
+ if (backup)
101
+ this.data = backup;
102
+ this.transactionBackup = null;
103
+ this.persist();
104
+ throw error;
105
+ }
106
+ }
107
+ close() {
108
+ this.persist();
109
+ }
110
+ load() {
111
+ if (!existsSync(this.filePath))
112
+ return emptyData();
113
+ try {
114
+ const parsed = JSON.parse(readFileSync(this.filePath, "utf-8"));
115
+ return {
116
+ entities: parseRecord(parsed.entities, PlayEntitySchema),
117
+ edges: parseRecord(parsed.edges, PlayEdgeSchema),
118
+ stateSlots: parseRecord(parsed.stateSlots, PlayStateSlotSchema),
119
+ events: parseRecord(parsed.events, PlayEventSchema),
120
+ };
121
+ }
122
+ catch {
123
+ return emptyData();
124
+ }
125
+ }
126
+ persistIfNeeded() {
127
+ if (!this.transactionBackup)
128
+ this.persist();
129
+ }
130
+ persist() {
131
+ writeFileSync(this.filePath, `${JSON.stringify(this.data, null, 2)}\n`, "utf-8");
132
+ }
133
+ }
134
+ function emptyData() {
135
+ return {
136
+ entities: {},
137
+ edges: {},
138
+ stateSlots: {},
139
+ events: {},
140
+ };
141
+ }
142
+ function cloneData(data) {
143
+ return JSON.parse(JSON.stringify(data));
144
+ }
145
+ function parseRecord(value, schema) {
146
+ if (!value || typeof value !== "object" || Array.isArray(value))
147
+ return {};
148
+ const result = {};
149
+ for (const [key, item] of Object.entries(value)) {
150
+ const parsed = schema.safeParse(item);
151
+ if (parsed.success)
152
+ result[key] = parsed.data;
153
+ }
154
+ return result;
155
+ }
156
+ //# sourceMappingURL=play-file-db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"play-file-db.js","sourceRoot":"","sources":["../../src/play/play-file-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GASpB,MAAM,mBAAmB,CAAC;AAiB3B,MAAM,OAAO,UAAU;IACJ,QAAQ,CAAS;IAC1B,IAAI,CAAiB;IACrB,iBAAiB,GAA0B,IAAI,CAAC;IAExD,YAAY,MAAc;QACxB,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,YAAY,CAAC,MAAuB;QAClC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QACvC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,IAAmB;QAC5B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QACpC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,UAAU,CAAC,MAAc,EAAE,iBAAyB;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,iBAAiB,EAAE,CAAC;YACzD,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,wBAAwB,CAAC,QAAgB;QACvC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;aAClC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;aACzG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,mBAAmB,CAAC,OAAe;QACjC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;aAClC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;aACtG,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC9C,MAAM,CAAC,CAAC,MAAM,EAAwB,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;aAC5G,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,eAAe,CAAC,IAAwB;QACtC,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QACzC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,sBAAsB,CAAC,QAAgB;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;aACvC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC;aACjD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,WAAW,CAAC,KAAqB;QAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QACrC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,QAAQ;QACN,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpF,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9E,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACpG,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,QAA2B;QAC7C,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC,IAAI,GAAG;gBACV,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC5G,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC9F,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7G,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACrG,CAAC;QACJ,CAAC,CAAC;QACF,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,OAAO,EAAE,CAAC;QACV,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,WAAW,CAAI,EAAW;QACxB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;YACpB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACtC,IAAI,MAAM;gBAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;YAC/B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAA4B,CAAC;YAC3F,OAAO;gBACL,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;gBACxD,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC;gBAChD,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,mBAAmB,CAAC;gBAC/D,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;aACpD,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;IAEO,OAAO;QACb,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnF,CAAC;CACF;AAED,SAAS,SAAS;IAChB,OAAO;QACL,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,EAAE;QACd,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAoB;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAmB,CAAC;AAC5D,CAAC;AAED,SAAS,WAAW,CAClB,KAAc,EACd,MAAsF;IAEtF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3E,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,OAAO;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,58 @@
1
+ export interface PlayImageWorldContext {
2
+ readonly premise?: string;
3
+ readonly worldContract?: string;
4
+ readonly visualContract?: string;
5
+ }
6
+ type PlayImageWorldInput = string | PlayImageWorldContext | undefined;
7
+ /**
8
+ * Build a style-consistent image prompt for a world entity. The world premise
9
+ * anchors era / setting / art style so every illustration in one run looks like
10
+ * it belongs to the same world.
11
+ */
12
+ export declare function buildPlayEntityImagePrompt(entity: {
13
+ readonly type: string;
14
+ readonly label: string;
15
+ readonly summary?: string;
16
+ }, worldPremise?: PlayImageWorldInput): string;
17
+ /** Build a wide illustration prompt for the current moment from its scene prose. */
18
+ export declare function buildPlaySceneImagePrompt(sceneText: string, worldPremise?: PlayImageWorldInput): string;
19
+ export type PlayImageStatus = "ready" | "failed";
20
+ export interface PlayImageEntry {
21
+ readonly status: PlayImageStatus;
22
+ readonly file?: string;
23
+ readonly error?: string;
24
+ }
25
+ export type PlayImageManifest = Record<string, PlayImageEntry>;
26
+ export declare function readPlayImageManifest(runDir: string): Promise<PlayImageManifest>;
27
+ export declare function writePlayImageManifest(runDir: string, manifest: PlayImageManifest): Promise<void>;
28
+ /** Immutably set one manifest entry and persist it. Returns the new manifest. */
29
+ export declare function setPlayImageEntry(runDir: string, key: string, entry: PlayImageEntry): Promise<PlayImageManifest>;
30
+ /**
31
+ * Per-run auto-illustration toggles. Default all-off: nothing is generated
32
+ * until the user opts in (and the cover API is configured).
33
+ */
34
+ export interface PlayImageSettings {
35
+ readonly actors: boolean;
36
+ readonly moments: boolean;
37
+ readonly inventory: boolean;
38
+ }
39
+ export declare const DEFAULT_PLAY_IMAGE_SETTINGS: PlayImageSettings;
40
+ export declare function readPlayImageSettings(runDir: string): Promise<PlayImageSettings>;
41
+ export declare function writePlayImageSettings(runDir: string, settings: PlayImageSettings): Promise<void>;
42
+ /** Filesystem-safe leaf name derived from an entity id / scene key. */
43
+ export declare function playImageFileName(key: string, extension: "png" | "jpg"): string;
44
+ /**
45
+ * Generate one image for a Play key (entity id or scene key), write it under
46
+ * run/images/, and record the result in the manifest. Never throws on a
47
+ * generation failure — it records {status:"failed"} so the caller/UI can
48
+ * surface it and retry. Throws only if cover generation is not configured.
49
+ */
50
+ export declare function generatePlayImage(input: {
51
+ readonly root: string;
52
+ readonly runDir: string;
53
+ readonly key: string;
54
+ readonly prompt: string;
55
+ readonly size?: string;
56
+ }): Promise<PlayImageEntry>;
57
+ export {};
58
+ //# sourceMappingURL=play-image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"play-image.d.ts","sourceRoot":"","sources":["../../src/play/play-image.ts"],"names":[],"mappings":"AAkCA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,KAAK,mBAAmB,GAAG,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAC;AAkBtE;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EACpF,YAAY,CAAC,EAAE,mBAAmB,GACjC,MAAM,CAUR;AAED,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAOvG;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAM/D,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQtF;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvG;AAED,iFAAiF;AACjF,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAK5B;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,eAAO,MAAM,2BAA2B,EAAE,iBAIzC,CAAC;AAMF,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAWtF;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvG;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAG/E;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,cAAc,CAAC,CAwB1B"}