videobook-engine 2.0.1 → 4.2.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 (148) hide show
  1. package/README.md +87 -41
  2. package/dist/artifact-names.d.ts +6 -0
  3. package/dist/artifact-names.d.ts.map +1 -0
  4. package/dist/artifact-names.js +56 -0
  5. package/dist/artifact-names.js.map +1 -0
  6. package/dist/artifacts.d.ts.map +1 -1
  7. package/dist/artifacts.js +57 -23
  8. package/dist/artifacts.js.map +1 -1
  9. package/dist/books.js +2 -1
  10. package/dist/books.js.map +1 -1
  11. package/dist/cas.d.ts +27 -1
  12. package/dist/cas.d.ts.map +1 -1
  13. package/dist/cas.js +78 -6
  14. package/dist/cas.js.map +1 -1
  15. package/dist/catalog-metadata.d.ts +56 -0
  16. package/dist/catalog-metadata.d.ts.map +1 -0
  17. package/dist/catalog-metadata.js +42 -0
  18. package/dist/catalog-metadata.js.map +1 -0
  19. package/dist/communications.js +4 -2
  20. package/dist/communications.js.map +1 -1
  21. package/dist/context.d.ts +6 -1
  22. package/dist/context.d.ts.map +1 -1
  23. package/dist/context.js +35 -6
  24. package/dist/context.js.map +1 -1
  25. package/dist/domain.d.ts +4 -0
  26. package/dist/domain.d.ts.map +1 -1
  27. package/dist/domain.js +870 -58
  28. package/dist/domain.js.map +1 -1
  29. package/dist/edit-policy.d.ts +3 -0
  30. package/dist/edit-policy.d.ts.map +1 -0
  31. package/dist/edit-policy.js +6 -0
  32. package/dist/edit-policy.js.map +1 -0
  33. package/dist/edits.d.ts +10 -0
  34. package/dist/edits.d.ts.map +1 -0
  35. package/dist/edits.js +1392 -0
  36. package/dist/edits.js.map +1 -0
  37. package/dist/engine-types.d.ts +110 -60
  38. package/dist/engine-types.d.ts.map +1 -1
  39. package/dist/engine-types.js +33 -0
  40. package/dist/engine-types.js.map +1 -1
  41. package/dist/engine.d.ts +69 -8
  42. package/dist/engine.d.ts.map +1 -1
  43. package/dist/engine.js +24 -18
  44. package/dist/engine.js.map +1 -1
  45. package/dist/files.d.ts.map +1 -1
  46. package/dist/files.js +31 -27
  47. package/dist/files.js.map +1 -1
  48. package/dist/fork.d.ts +147 -0
  49. package/dist/fork.d.ts.map +1 -0
  50. package/dist/fork.js +609 -0
  51. package/dist/fork.js.map +1 -0
  52. package/dist/history.d.ts +0 -4
  53. package/dist/history.d.ts.map +1 -1
  54. package/dist/history.js +166 -595
  55. package/dist/history.js.map +1 -1
  56. package/dist/index.d.ts +16 -4
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +12 -2
  59. package/dist/index.js.map +1 -1
  60. package/dist/job-queue.d.ts +2 -0
  61. package/dist/job-queue.d.ts.map +1 -1
  62. package/dist/job-queue.js +29 -2
  63. package/dist/job-queue.js.map +1 -1
  64. package/dist/media.d.ts.map +1 -1
  65. package/dist/media.js +1 -0
  66. package/dist/media.js.map +1 -1
  67. package/dist/merge-policy.d.ts +99 -0
  68. package/dist/merge-policy.d.ts.map +1 -0
  69. package/dist/merge-policy.js +310 -0
  70. package/dist/merge-policy.js.map +1 -0
  71. package/dist/metadata.d.ts.map +1 -1
  72. package/dist/metadata.js +15 -20
  73. package/dist/metadata.js.map +1 -1
  74. package/dist/migration.d.ts +9 -0
  75. package/dist/migration.d.ts.map +1 -0
  76. package/dist/migration.js +534 -0
  77. package/dist/migration.js.map +1 -0
  78. package/dist/mvp-contract-fixtures.d.ts +244 -0
  79. package/dist/mvp-contract-fixtures.d.ts.map +1 -0
  80. package/dist/mvp-contract-fixtures.js +556 -0
  81. package/dist/mvp-contract-fixtures.js.map +1 -0
  82. package/dist/mvp-contracts.d.ts +761 -0
  83. package/dist/mvp-contracts.d.ts.map +1 -0
  84. package/dist/mvp-contracts.js +59 -0
  85. package/dist/mvp-contracts.js.map +1 -0
  86. package/dist/mvp-time.d.ts +54 -0
  87. package/dist/mvp-time.d.ts.map +1 -0
  88. package/dist/mvp-time.js +148 -0
  89. package/dist/mvp-time.js.map +1 -0
  90. package/dist/notebook/types.d.ts +113 -8
  91. package/dist/notebook/types.d.ts.map +1 -1
  92. package/dist/order-keys.d.ts +22 -0
  93. package/dist/order-keys.d.ts.map +1 -0
  94. package/dist/order-keys.js +262 -0
  95. package/dist/order-keys.js.map +1 -0
  96. package/dist/runtime-services.js +4 -2
  97. package/dist/runtime-services.js.map +1 -1
  98. package/dist/schema.d.ts +24 -5
  99. package/dist/schema.d.ts.map +1 -1
  100. package/dist/schema.js +644 -132
  101. package/dist/schema.js.map +1 -1
  102. package/dist/search-benchmark.d.ts +4 -0
  103. package/dist/search-benchmark.d.ts.map +1 -0
  104. package/dist/search-benchmark.js +144 -0
  105. package/dist/search-benchmark.js.map +1 -0
  106. package/dist/sequences.d.ts +20 -0
  107. package/dist/sequences.d.ts.map +1 -0
  108. package/dist/sequences.js +825 -0
  109. package/dist/sequences.js.map +1 -0
  110. package/dist/similarity.js +1 -1
  111. package/dist/storage.d.ts +3 -1
  112. package/dist/storage.d.ts.map +1 -1
  113. package/dist/storage.js +388 -7
  114. package/dist/storage.js.map +1 -1
  115. package/dist/store.d.ts +63 -2
  116. package/dist/store.d.ts.map +1 -1
  117. package/dist/store.js +351 -65
  118. package/dist/store.js.map +1 -1
  119. package/dist/streams.d.ts +10 -0
  120. package/dist/streams.d.ts.map +1 -0
  121. package/dist/streams.js +183 -0
  122. package/dist/streams.js.map +1 -0
  123. package/dist/temporal-models.d.ts +48 -0
  124. package/dist/temporal-models.d.ts.map +1 -0
  125. package/dist/temporal-models.js +278 -0
  126. package/dist/temporal-models.js.map +1 -0
  127. package/dist/temporal-search.d.ts +29 -0
  128. package/dist/temporal-search.d.ts.map +1 -0
  129. package/dist/temporal-search.js +1507 -0
  130. package/dist/temporal-search.js.map +1 -0
  131. package/dist/transcripts.d.ts +16 -0
  132. package/dist/transcripts.d.ts.map +1 -0
  133. package/dist/transcripts.js +519 -0
  134. package/dist/transcripts.js.map +1 -0
  135. package/docs/engine-layout.md +346 -106
  136. package/docs/mvp-prd.md +918 -0
  137. package/fixtures/media/vancat.mp4 +0 -0
  138. package/fixtures/media/vancat_profile.jpg +0 -0
  139. package/fixtures/v5/contract-fixtures.json +1532 -0
  140. package/package.json +30 -5
  141. package/dist/history-types.d.ts +0 -74
  142. package/dist/history-types.d.ts.map +0 -1
  143. package/dist/history-types.js +0 -2
  144. package/dist/history-types.js.map +0 -1
  145. package/dist/timeline.d.ts +0 -9
  146. package/dist/timeline.d.ts.map +0 -1
  147. package/dist/timeline.js +0 -236
  148. package/dist/timeline.js.map +0 -1
@@ -0,0 +1,519 @@
1
+ import { ok } from "./engine-types.js";
2
+ import { resultOf, syncResultOf } from "./context.js";
3
+ import { assertUuidV7, newUuidV7 } from "./ids.js";
4
+ import { normalizeSourceRange, rationalEquals, sourceRangeEndTick, } from "./mvp-time.js";
5
+ import { canonicalJson, EngineFault } from "./store.js";
6
+ export function createTranscriptsApi(context) {
7
+ return {
8
+ import: (input) => importTranscript(context, input),
9
+ get: (transcriptId) => resultOf(() => requiredTranscript(context, transcriptId)),
10
+ getAtRevision: (transcriptId, revision) => resultOf(() => requiredTranscript(context, transcriptId, revision)),
11
+ list: (artifact) => resultOf(() => listTranscripts(context, artifact)),
12
+ revise: (input) => reviseTranscript(context, input),
13
+ delete: (transcriptId) => deleteTranscript(context, transcriptId),
14
+ selectionRange: (transcriptId, startWordId, endWordId) => syncResultOf(() => transcriptSelectionRange(context, transcriptId, startWordId, endWordId)),
15
+ };
16
+ }
17
+ async function reviseTranscript(context, input) {
18
+ return resultOf(async () => {
19
+ const source = requiredTranscriptRow(context, input.sourceTranscriptId);
20
+ const provider = input.provider ?? source.provider ?? undefined;
21
+ const model = input.model ?? source.model ?? undefined;
22
+ return importTranscript(context, {
23
+ ...(input.transcriptId ? { transcriptId: input.transcriptId } : {}),
24
+ artifactId: source.artifact_id,
25
+ streamId: source.stream_id,
26
+ objectHash: source.object_hash,
27
+ language: input.language ?? source.language,
28
+ ...(provider ? { provider } : {}),
29
+ ...(model ? { model } : {}),
30
+ state: "current",
31
+ segments: input.segments,
32
+ });
33
+ });
34
+ }
35
+ function transcriptSelectionRange(context, transcriptId, startWordId, endWordId) {
36
+ // Selection ranges are structural: they are computed from versioned IDs
37
+ // and ticks only, so they keep working after the text payload is forgotten.
38
+ const row = requiredTranscriptRow(context, transcriptId);
39
+ const stream = requiredStreamRow(context, row.stream_id);
40
+ const segments = structuralSegments(context, row.transcript_id);
41
+ const words = segments.flatMap((segment) => segment.words);
42
+ const startIndex = words.findIndex((word) => word.wordId === startWordId);
43
+ const endIndex = words.findIndex((word) => word.wordId === endWordId);
44
+ if (startIndex < 0 || endIndex < startIndex) {
45
+ throw new EngineFault({
46
+ code: "INVALID_RANGE",
47
+ message: "Transcript selection must identify ordered words",
48
+ });
49
+ }
50
+ const start = words[startIndex];
51
+ const end = words[endIndex];
52
+ if (segments.length === 0) {
53
+ throw new EngineFault({
54
+ code: "INVALID_RANGE",
55
+ message: "Transcript selection has no source range",
56
+ });
57
+ }
58
+ return normalizeSourceRange({
59
+ streamId: row.stream_id,
60
+ objectHash: row.object_hash,
61
+ startTick: start.startTick,
62
+ durationTicks: end.startTick + end.durationTicks - start.startTick,
63
+ timeBase: {
64
+ numerator: stream.time_base_numerator,
65
+ denominator: stream.time_base_denominator,
66
+ },
67
+ });
68
+ }
69
+ async function importTranscript(context, input) {
70
+ return resultOf(async () => {
71
+ const artifact = context.artifactRow(input.artifactId);
72
+ const transcriptId = input.transcriptId ?? newUuidV7();
73
+ assertUuidV7(transcriptId, "Transcript ID");
74
+ assertUuidV7(input.streamId, "Transcript stream ID");
75
+ const stream = requiredStreamRow(context, input.streamId);
76
+ if (stream.artifact_id !== artifact.artifact_id ||
77
+ stream.object_hash !== input.objectHash) {
78
+ throw new EngineFault({
79
+ code: "INVALID_INPUT",
80
+ message: "Transcript artifact, stream, and object hash must identify one source",
81
+ });
82
+ }
83
+ const language = requiredText(input.language, "Transcript language");
84
+ const segments = normalizeSegments(input.segments, stream);
85
+ const state = input.state ?? "current";
86
+ const payload = transcriptPayload(segments);
87
+ const payloadObject = await context.objects.put(payload);
88
+ const mutation = await context.store.semantic({
89
+ operation: "import_transcript",
90
+ tables: [
91
+ "objects",
92
+ "transcripts",
93
+ "transcript_segments",
94
+ "transcript_words",
95
+ ],
96
+ artifactId: artifact.artifact_id,
97
+ details: {
98
+ transcriptId,
99
+ streamId: input.streamId,
100
+ objectHash: input.objectHash,
101
+ payloadHash: payloadObject.hash,
102
+ language,
103
+ state,
104
+ segmentCount: segments.length,
105
+ wordCount: segments.reduce((count, segment) => count + segment.words.length, 0),
106
+ },
107
+ writeSet: [
108
+ `artifact:${artifact.artifact_id}`,
109
+ `stream:${input.streamId}`,
110
+ `transcript:${transcriptId}`,
111
+ ],
112
+ }, (_operationId, now) => {
113
+ context.store.db
114
+ .prepare(`INSERT INTO objects(object_hash, size_bytes, created_at)
115
+ VALUES (?, ?, ?)
116
+ ON CONFLICT(object_hash) DO UPDATE SET forgotten_at=NULL`)
117
+ .run(payloadObject.hash, payloadObject.size, now);
118
+ if (state === "current") {
119
+ context.store.db
120
+ .prepare(`UPDATE transcripts SET state='derived'
121
+ WHERE artifact_id=? AND stream_id=? AND object_hash=?
122
+ AND state='current'`)
123
+ .run(artifact.artifact_id, input.streamId, input.objectHash);
124
+ }
125
+ context.store.db
126
+ .prepare(`INSERT INTO transcripts(
127
+ transcript_id, artifact_id, stream_id, object_hash,
128
+ payload_hash, language, provider, model, state, created_at
129
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
130
+ .run(transcriptId, artifact.artifact_id, input.streamId, input.objectHash, payloadObject.hash, language, input.provider ?? null, input.model ?? null, state, now);
131
+ insertSegments(context, transcriptId, segments);
132
+ });
133
+ return ok(await requiredTranscript(context, transcriptId, mutation.revision), mutation.revision);
134
+ });
135
+ }
136
+ async function deleteTranscript(context, transcriptId) {
137
+ return resultOf(async () => {
138
+ assertUuidV7(transcriptId, "Transcript ID");
139
+ const row = requiredTranscriptRow(context, transcriptId);
140
+ // Caption cues pin a transcript for editorial selections; they must be
141
+ // removed (or the transcript left in place) before it can be forgotten.
142
+ const cues = context.store.db
143
+ .prepare(`SELECT cue_id FROM caption_cues
144
+ WHERE transcript_id=? ORDER BY cue_id`)
145
+ .all(row.transcript_id);
146
+ if (cues.length > 0) {
147
+ throw new EngineFault({
148
+ code: "IN_USE",
149
+ message: `Transcript ${transcriptId} is referenced by ` +
150
+ `${cues.length} caption cue(s)`,
151
+ details: { cueIds: cues.map((cue) => cue.cue_id) },
152
+ });
153
+ }
154
+ const mutation = await context.store.semantic({
155
+ operation: "delete_transcript",
156
+ tables: ["transcripts", "transcript_segments", "transcript_words"],
157
+ artifactId: row.artifact_id,
158
+ details: {
159
+ transcriptId: row.transcript_id,
160
+ streamId: row.stream_id,
161
+ objectHash: row.object_hash,
162
+ payloadHash: row.payload_hash,
163
+ },
164
+ writeSet: [`transcript:${row.transcript_id}`],
165
+ }, () => {
166
+ // Segments and words cascade. The payload object is deliberately
167
+ // left behind: it becomes collectable by storage.gc() once no HEAD
168
+ // row references its hash.
169
+ context.store.db
170
+ .prepare("DELETE FROM transcripts WHERE transcript_id=?")
171
+ .run(row.transcript_id);
172
+ });
173
+ return ok({ transcriptId: row.transcript_id }, mutation.revision);
174
+ });
175
+ }
176
+ async function requiredTranscript(context, transcriptId, revision) {
177
+ const row = requiredTranscriptRow(context, transcriptId, revision);
178
+ return transcriptFromRow(context, row, revision);
179
+ }
180
+ function requiredTranscriptRow(context, transcriptId, revision) {
181
+ assertUuidV7(transcriptId, "Transcript ID");
182
+ const transcriptSource = revision ? "dolt_at_transcripts(?)" : "transcripts";
183
+ const row = context.store.db
184
+ .prepare(`${TRANSCRIPT_SELECT} FROM ${transcriptSource} WHERE transcript_id=?`)
185
+ .get(...(revision ? [revision, transcriptId] : [transcriptId]));
186
+ if (!row) {
187
+ throw new EngineFault({
188
+ code: "NOT_FOUND",
189
+ message: revision
190
+ ? `Transcript not found at revision: ${transcriptId}`
191
+ : `Transcript not found: ${transcriptId}`,
192
+ });
193
+ }
194
+ return row;
195
+ }
196
+ async function listTranscripts(context, artifact) {
197
+ const artifactId = artifact
198
+ ? context.artifactRow(artifact).artifact_id
199
+ : undefined;
200
+ const rows = artifactId
201
+ ? context.store.db
202
+ .prepare(`${TRANSCRIPT_SELECT} FROM transcripts
203
+ WHERE artifact_id=?
204
+ ORDER BY created_at, transcript_id`)
205
+ .all(artifactId)
206
+ : context.store.db
207
+ .prepare(`${TRANSCRIPT_SELECT} FROM transcripts
208
+ ORDER BY artifact_id, created_at, transcript_id`)
209
+ .all();
210
+ const transcripts = [];
211
+ for (const row of rows) {
212
+ // A single forgotten payload must not make every other transcript
213
+ // unlistable: the listing degrades that row to structure-only
214
+ // (payloadAvailable=false, empty text) instead of failing wholesale.
215
+ transcripts.push(await transcriptFromRow(context, row, undefined, {
216
+ tolerateMissingPayload: true,
217
+ }));
218
+ }
219
+ return transcripts;
220
+ }
221
+ async function transcriptFromRow(context, row, revision, options) {
222
+ // A forgotten payload surfaces through the shared OBJECT_UNAVAILABLE
223
+ // mapping ("Object unavailable: <hash>"); the row itself stays readable
224
+ // as a tombstone of hash + size via the objects table.
225
+ let payload = null;
226
+ try {
227
+ payload = await readTranscriptPayload(context, row.payload_hash);
228
+ }
229
+ catch (error) {
230
+ const message = error instanceof Error ? error.message : String(error);
231
+ if (!options?.tolerateMissingPayload ||
232
+ !/object unavailable/i.test(message)) {
233
+ throw error;
234
+ }
235
+ }
236
+ const textBySegment = new Map();
237
+ const textByWord = new Map();
238
+ for (const segment of payload?.segments ?? []) {
239
+ textBySegment.set(segment.segmentId, segment);
240
+ for (const word of segment.words)
241
+ textByWord.set(word.wordId, word);
242
+ }
243
+ const segments = structuralSegments(context, row.transcript_id, revision);
244
+ const stream = requiredStreamRow(context, row.stream_id, revision);
245
+ const payloadAvailable = payload !== null;
246
+ return {
247
+ transcriptId: row.transcript_id,
248
+ artifactId: row.artifact_id,
249
+ streamId: row.stream_id,
250
+ objectHash: row.object_hash,
251
+ payloadHash: row.payload_hash,
252
+ payloadAvailable,
253
+ language: row.language,
254
+ ...(row.provider ? { provider: row.provider } : {}),
255
+ ...(row.model ? { model: row.model } : {}),
256
+ revision: revision ?? context.store.head,
257
+ segments: segments.map((segment) => segmentFromStructure(segment, row, stream, payloadAvailable
258
+ ? requiredPayloadText(textBySegment, segment.segmentId, "segment")
259
+ : { text: "" }, textByWord, payloadAvailable)),
260
+ createdAt: row.created_at,
261
+ };
262
+ }
263
+ function requiredPayloadText(texts, id, label) {
264
+ const entry = texts.get(id);
265
+ if (!entry) {
266
+ throw new EngineFault({
267
+ code: "STORAGE_ERROR",
268
+ message: `Transcript payload has no text for ${label} ${id}`,
269
+ });
270
+ }
271
+ return entry;
272
+ }
273
+ async function readTranscriptPayload(context, payloadHash) {
274
+ const buffer = await context.objects.read(payloadHash);
275
+ let payload;
276
+ try {
277
+ payload = JSON.parse(buffer.toString("utf8"));
278
+ }
279
+ catch {
280
+ throw new EngineFault({
281
+ code: "STORAGE_ERROR",
282
+ message: `Transcript payload is not valid JSON: ${payloadHash}`,
283
+ });
284
+ }
285
+ if (payload.version !== 1 || !Array.isArray(payload.segments)) {
286
+ throw new EngineFault({
287
+ code: "STORAGE_ERROR",
288
+ message: `Transcript payload has an unsupported shape: ${payloadHash}`,
289
+ });
290
+ }
291
+ return payload;
292
+ }
293
+ function transcriptPayload(segments) {
294
+ const payload = { version: 1, segments };
295
+ return canonicalJson(payload);
296
+ }
297
+ function structuralSegments(context, transcriptId, revision) {
298
+ const segmentSource = revision
299
+ ? "dolt_at_transcript_segments(?)"
300
+ : "transcript_segments";
301
+ const wordSource = revision
302
+ ? "dolt_at_transcript_words(?)"
303
+ : "transcript_words";
304
+ const params = revision ? [revision, transcriptId] : [transcriptId];
305
+ const segments = context.store.db
306
+ .prepare(`${SEGMENT_SELECT} FROM ${segmentSource}
307
+ WHERE transcript_id=? ORDER BY ordinal, segment_id`)
308
+ .all(...params);
309
+ const wordParams = revision
310
+ ? [revision, revision, transcriptId]
311
+ : [transcriptId];
312
+ const words = context.store.db
313
+ .prepare(`${WORD_SELECT} FROM ${wordSource}
314
+ WHERE segment_id IN (
315
+ SELECT segment_id FROM ${segmentSource}
316
+ WHERE transcript_id=?
317
+ )
318
+ ORDER BY segment_id, ordinal, word_id`)
319
+ .all(...wordParams);
320
+ const wordsBySegment = new Map();
321
+ for (const word of words) {
322
+ const values = wordsBySegment.get(word.segment_id) ?? [];
323
+ values.push({
324
+ wordId: word.word_id,
325
+ ordinal: word.ordinal,
326
+ startTick: word.start_tick,
327
+ durationTicks: word.duration_ticks,
328
+ confidence: word.confidence,
329
+ corrected: word.corrected === 1,
330
+ });
331
+ wordsBySegment.set(word.segment_id, values);
332
+ }
333
+ return segments.map((segment) => ({
334
+ segmentId: segment.segment_id,
335
+ ordinal: segment.ordinal,
336
+ startTick: segment.start_tick,
337
+ durationTicks: segment.duration_ticks,
338
+ speaker: segment.speaker,
339
+ confidence: segment.confidence,
340
+ kind: segment.kind,
341
+ words: wordsBySegment.get(segment.segment_id) ?? [],
342
+ }));
343
+ }
344
+ function normalizeSegments(segments, stream) {
345
+ let previousEnd = 0;
346
+ return segments.map((segment, index) => {
347
+ if (segment.ordinal !== index) {
348
+ throw new Error("Transcript segment ordinals must be contiguous");
349
+ }
350
+ const range = normalizeSourceRange(segment.range);
351
+ if (range.streamId !== stream.stream_id ||
352
+ range.objectHash !== stream.object_hash ||
353
+ !rationalEquals(range.timeBase, {
354
+ numerator: stream.time_base_numerator,
355
+ denominator: stream.time_base_denominator,
356
+ })) {
357
+ throw new EngineFault({
358
+ code: "INVALID_RANGE",
359
+ message: "Transcript segment range does not match its source stream",
360
+ });
361
+ }
362
+ const end = sourceRangeEndTick(range);
363
+ if (range.startTick < previousEnd || end > stream.duration_ticks) {
364
+ throw new EngineFault({
365
+ code: "INVALID_RANGE",
366
+ message: "Transcript segments must be ordered and bounded by the source",
367
+ });
368
+ }
369
+ previousEnd = end;
370
+ return {
371
+ segmentId: callerOrNewId(segment.segmentId, "Transcript segment ID"),
372
+ ordinal: index,
373
+ startTick: range.startTick,
374
+ durationTicks: range.durationTicks,
375
+ ...(segment.speaker ? { speaker: segment.speaker } : {}),
376
+ text: requiredText(segment.text, "Transcript segment text"),
377
+ ...(segment.confidence === undefined
378
+ ? {}
379
+ : { confidence: confidence(segment.confidence) }),
380
+ kind: segment.kind,
381
+ words: normalizeWords(segment.words, segment, range),
382
+ };
383
+ });
384
+ }
385
+ function normalizeWords(words, segment, range) {
386
+ let previousEnd = range.startTick;
387
+ const rangeEnd = sourceRangeEndTick(range);
388
+ return words.map((word, index) => {
389
+ if (word.ordinal !== index) {
390
+ throw new Error("Transcript word ordinals must be contiguous");
391
+ }
392
+ safeIntegerAtLeast(word.startTick, range.startTick, "Transcript word start");
393
+ safeIntegerAtLeast(word.durationTicks, 1, "Transcript word duration");
394
+ const end = word.startTick + word.durationTicks;
395
+ if (!Number.isSafeInteger(end) ||
396
+ word.startTick < previousEnd ||
397
+ end > rangeEnd) {
398
+ throw new EngineFault({
399
+ code: "INVALID_RANGE",
400
+ message: `Transcript words must be ordered within segment ${segment.ordinal}`,
401
+ });
402
+ }
403
+ previousEnd = end;
404
+ return {
405
+ wordId: callerOrNewId(word.wordId, "Transcript word ID"),
406
+ ordinal: index,
407
+ startTick: word.startTick,
408
+ durationTicks: word.durationTicks,
409
+ text: requiredText(word.text, "Transcript word text"),
410
+ ...(word.confidence === undefined
411
+ ? {}
412
+ : { confidence: confidence(word.confidence) }),
413
+ corrected: word.corrected,
414
+ };
415
+ });
416
+ }
417
+ function insertSegments(context, transcriptId, segments) {
418
+ // Only structure is versioned; segment and word text lives in the CAS
419
+ // payload object named by transcripts.payload_hash.
420
+ const insertSegment = context.store.db.prepare(`INSERT INTO transcript_segments(
421
+ segment_id, transcript_id, ordinal, start_tick, duration_ticks,
422
+ speaker, confidence, kind
423
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`);
424
+ const insertWord = context.store.db.prepare(`INSERT INTO transcript_words(
425
+ word_id, segment_id, ordinal, start_tick, duration_ticks,
426
+ confidence, corrected
427
+ ) VALUES (?, ?, ?, ?, ?, ?, ?)`);
428
+ for (const segment of segments) {
429
+ insertSegment.run(segment.segmentId, transcriptId, segment.ordinal, segment.startTick, segment.durationTicks, segment.speaker ?? null, segment.confidence ?? null, segment.kind);
430
+ for (const word of segment.words) {
431
+ insertWord.run(word.wordId, segment.segmentId, word.ordinal, word.startTick, word.durationTicks, word.confidence ?? null, word.corrected ? 1 : 0);
432
+ }
433
+ }
434
+ }
435
+ function requiredStreamRow(context, streamIdValue, revision) {
436
+ const source = revision ? "dolt_at_artifact_streams(?)" : "artifact_streams";
437
+ const row = context.store.db
438
+ .prepare(`SELECT stream_id, artifact_id, object_hash,
439
+ time_base_numerator, time_base_denominator, duration_ticks
440
+ FROM ${source} WHERE stream_id=?`)
441
+ .get(...(revision ? [revision, streamIdValue] : [streamIdValue]));
442
+ if (!row) {
443
+ throw new EngineFault({
444
+ code: "NOT_FOUND",
445
+ message: `Transcript stream not found: ${streamIdValue}`,
446
+ });
447
+ }
448
+ return row;
449
+ }
450
+ function segmentFromStructure(structure, row, stream, payloadSegment, textByWord, payloadAvailable = true) {
451
+ return {
452
+ segmentId: structure.segmentId,
453
+ ordinal: structure.ordinal,
454
+ range: {
455
+ streamId: row.stream_id,
456
+ objectHash: row.object_hash,
457
+ startTick: structure.startTick,
458
+ durationTicks: structure.durationTicks,
459
+ timeBase: {
460
+ numerator: stream.time_base_numerator,
461
+ denominator: stream.time_base_denominator,
462
+ },
463
+ },
464
+ ...(structure.speaker ? { speaker: structure.speaker } : {}),
465
+ text: payloadSegment.text,
466
+ ...(structure.confidence === null
467
+ ? {}
468
+ : { confidence: structure.confidence }),
469
+ kind: structure.kind,
470
+ words: structure.words.map((word) => wordFromStructure(word, payloadAvailable
471
+ ? requiredPayloadText(textByWord, word.wordId, "word")
472
+ : { text: "" })),
473
+ };
474
+ }
475
+ function wordFromStructure(structure, payloadWord) {
476
+ return {
477
+ wordId: structure.wordId,
478
+ ordinal: structure.ordinal,
479
+ startTick: structure.startTick,
480
+ durationTicks: structure.durationTicks,
481
+ text: payloadWord.text,
482
+ ...(structure.confidence === null
483
+ ? {}
484
+ : { confidence: structure.confidence }),
485
+ corrected: structure.corrected,
486
+ };
487
+ }
488
+ function callerOrNewId(id, label) {
489
+ const value = id ?? newUuidV7();
490
+ assertUuidV7(value, label);
491
+ return value;
492
+ }
493
+ function requiredText(value, label) {
494
+ const normalized = value.trim();
495
+ if (!normalized)
496
+ throw new Error(`${label} is required`);
497
+ return normalized;
498
+ }
499
+ function confidence(value) {
500
+ if (!Number.isFinite(value) || value < 0 || value > 1) {
501
+ throw new Error("Transcript confidence must be between 0 and 1");
502
+ }
503
+ return value;
504
+ }
505
+ function safeIntegerAtLeast(value, minimum, label) {
506
+ if (!Number.isSafeInteger(value) || value < minimum) {
507
+ throw new Error(`${label} must be a safe integer of at least ${minimum}`);
508
+ }
509
+ }
510
+ const TRANSCRIPT_SELECT = `
511
+ SELECT transcript_id, artifact_id, stream_id, object_hash,
512
+ payload_hash, language, provider, model, created_at`;
513
+ const SEGMENT_SELECT = `
514
+ SELECT segment_id, ordinal, start_tick, duration_ticks,
515
+ speaker, confidence, kind`;
516
+ const WORD_SELECT = `
517
+ SELECT word_id, segment_id, ordinal, start_tick, duration_ticks,
518
+ confidence, corrected`;
519
+ //# sourceMappingURL=transcripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcripts.js","sourceRoot":"","sources":["../src/transcripts.ts"],"names":[],"mappings":"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"}