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
package/dist/fork.js ADDED
@@ -0,0 +1,609 @@
1
+ import { copyFile, mkdir, mkdtemp, rm } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import * as path from "node:path";
4
+ import { DatabaseSync } from "@dolthub/doltlite";
5
+ import { v7 as uuidv7 } from "uuid";
6
+ import { ObjectStore } from "./cas.js";
7
+ import { createEngine } from "./engine.js";
8
+ import { assertSameSchemaVersion, findSlugConflicts, reconcileSingletonFlags, verifyConstraintHealth, } from "./merge-policy.js";
9
+ import { SEMANTIC_TABLES } from "./schema.js";
10
+ import { canonicalJson, EngineFault } from "./store.js";
11
+ const DEFAULT_MERGE_AUTHOR = "Videobook <videobook@localhost>";
12
+ /**
13
+ * Bootstraps a fork: clones the upstream catalog into a new local engine
14
+ * root and opens it as a normal engine. The fork is a full citizen from
15
+ * there — it commits on its own main, backs up to its own catalog remote,
16
+ * and reads upstream objects lazily through its configured `ContentStore`.
17
+ * It never pulls; integration is the merge-back flow's job.
18
+ */
19
+ export async function bootstrapFork(options) {
20
+ if ((options.snapshotPath === undefined) ===
21
+ (options.upstreamUrl === undefined)) {
22
+ throw new EngineFault({
23
+ code: "INVALID_INPUT",
24
+ message: "Exactly one of snapshotPath or upstreamUrl is required",
25
+ });
26
+ }
27
+ const dataDir = path.resolve(options.dataDir);
28
+ const databasePath = path.join(dataDir, "videobook.db");
29
+ await mkdir(dataDir, { recursive: true });
30
+ if (options.snapshotPath !== undefined) {
31
+ await copyFile(options.snapshotPath, databasePath);
32
+ }
33
+ else {
34
+ const db = new DatabaseSync(databasePath);
35
+ try {
36
+ db.prepare("SELECT dolt_clone(?) AS result").get(options.upstreamUrl);
37
+ // ve-wsu: dolt_clone of a full engine catalog yields a database whose
38
+ // schema does not even parse (invalid rootpage on a secondary
39
+ // autoindex). Validate before handing the catalog to the engine.
40
+ db.prepare("SELECT COUNT(*) AS count FROM sqlite_master").get();
41
+ db.close();
42
+ }
43
+ catch (error) {
44
+ try {
45
+ db.close();
46
+ }
47
+ catch {
48
+ // The clone is already unusable; ignore close errors.
49
+ }
50
+ await rm(databasePath, { force: true });
51
+ throw new EngineFault({
52
+ code: "FEATURE_UNAVAILABLE",
53
+ message: "dolt_clone produced a corrupt catalog (upstream doltlite bug " +
54
+ "ve-wsu: multi-table working-set materialization drops index " +
55
+ "rootpages). Bootstrap from a snapshot of the upstream database " +
56
+ "with snapshotPath instead.",
57
+ details: {
58
+ cause: error instanceof Error ? error.message : String(error),
59
+ },
60
+ });
61
+ }
62
+ }
63
+ return createEngine({
64
+ dataDir,
65
+ workspaceDir: path.resolve(options.workspaceDir),
66
+ ...(options.remoteObjects ? { remoteObjects: options.remoteObjects } : {}),
67
+ ...(options.objectPrefix ? { objectPrefix: options.objectPrefix } : {}),
68
+ ...(options.catalogBackup ? { catalogBackup: options.catalogBackup } : {}),
69
+ ...(options.identity ? { identity: options.identity } : {}),
70
+ });
71
+ }
72
+ /**
73
+ * Integrates a fork back into upstream main.
74
+ *
75
+ * Runs entirely in a throwaway copy of the upstream catalog inside a temp
76
+ * directory: fetches the fork, merges under the engine merge policy
77
+ * (same-schema precondition, user-facing slug conflicts, constraint
78
+ * verification, deterministic singleton reconcile), uploads the fork's new
79
+ * objects to the upstream object store BEFORE the catalog ref moves — the
80
+ * same objects-before-push ordering as engine.storage.backup — lands one
81
+ * forward integration commit on main, and pushes it.
82
+ *
83
+ * The caller's open engines are never touched: the upstream database file
84
+ * is only read (copied), and the fork is only fetched from. Conflicts and
85
+ * violations surface as the typed MERGE_CONFLICT / MERGE_VIOLATION /
86
+ * SCHEMA_INCOMPATIBLE errors from src/merge-policy.ts.
87
+ */
88
+ export async function mergeBack(options) {
89
+ const workDir = options.workDir ??
90
+ (await mkdtemp(path.join(tmpdir(), "videobook-merge-back-")));
91
+ await mkdir(workDir, { recursive: true });
92
+ try {
93
+ const result = await mergeBackIn(workDir, options);
94
+ if (options.keepWorkDir)
95
+ result.workDir = workDir;
96
+ return result;
97
+ }
98
+ finally {
99
+ if (!options.keepWorkDir) {
100
+ await rm(workDir, { recursive: true, force: true });
101
+ }
102
+ }
103
+ }
104
+ async function mergeBackIn(workDir, options) {
105
+ const forkRemoteName = options.forkRemote.name ?? "fork";
106
+ const forkBranch = options.forkBranch ?? "main";
107
+ const theirsRef = `${forkRemoteName}/${forkBranch}`;
108
+ const localForkRef = `merge-back-${forkRemoteName}-${forkBranch}`;
109
+ await copyFile(options.upstreamDbPath, path.join(workDir, "videobook.db"));
110
+ const db = new DatabaseSync(path.join(workDir, "videobook.db"));
111
+ try {
112
+ const upstreamRemote = options.upstreamRemote ?? findRemote(db, "origin");
113
+ if (!upstreamRemote) {
114
+ throw new EngineFault({
115
+ code: "INVALID_INPUT",
116
+ message: "No upstream remote given and the catalog has no origin remote; " +
117
+ "pass upstreamRemote",
118
+ });
119
+ }
120
+ ensureRemote(db, upstreamRemote.name, upstreamRemote.url);
121
+ ensureRemote(db, forkRemoteName, options.forkRemote.url);
122
+ try {
123
+ db.prepare("SELECT dolt_fetch(?) AS result").get(forkRemoteName);
124
+ }
125
+ catch (error) {
126
+ throw new EngineFault({
127
+ code: "OFFLINE",
128
+ message: `Could not fetch fork remote ${forkRemoteName}: ` +
129
+ (error instanceof Error ? error.message : String(error)),
130
+ });
131
+ }
132
+ // Resolve commit hashes (doltHashOf returns content hashes, not commit
133
+ // hashes): main's head comes from the log, and the fetched
134
+ // remote-tracking ref gets a local branch pointer — a ref-only write
135
+ // that materializes no working set, so it is safe under ve-wsu.
136
+ const oursRevision = db.doltLog({ limit: 1 })[0]?.commit_hash ?? "";
137
+ if (db.doltBranches().some((branch) => branch.name === localForkRef)) {
138
+ db.prepare("SELECT dolt_branch('-D', ?) AS result").get(localForkRef);
139
+ }
140
+ db.doltBranch(localForkRef, theirsRef);
141
+ const theirsRevision = db.doltBranches().find((branch) => branch.name === localForkRef)?.hash ??
142
+ "";
143
+ if (!oursRevision || !theirsRevision) {
144
+ throw new EngineFault({
145
+ code: "STORAGE_ERROR",
146
+ message: `Could not resolve merge heads for main and ${theirsRef}`,
147
+ });
148
+ }
149
+ const baseRow = db
150
+ .prepare("SELECT dolt_merge_base(?, ?) AS hash")
151
+ .get("main", localForkRef);
152
+ const baseRevision = baseRow?.hash ?? null;
153
+ if (!baseRevision) {
154
+ throw new EngineFault({
155
+ code: "MERGE_CONFLICT",
156
+ message: `Merge-back of ${theirsRef} refused: no common ancestor with ` +
157
+ "upstream main (not a fork of this catalog?)",
158
+ details: { branch: theirsRef },
159
+ });
160
+ }
161
+ // The fork objects upstream lacks are uploaded before the catalog ref
162
+ // moves, whether or not a new integration commit is needed.
163
+ const newObjects = objectsAddedByFork(db, "HEAD", localForkRef);
164
+ let integrationCommit = oursRevision;
165
+ let reconciled = { transcripts: 0, sequences: 0 };
166
+ let alreadyIntegrated = baseRevision === theirsRevision || oursRevision === theirsRevision;
167
+ if (!alreadyIntegrated) {
168
+ const integration = integrate(db, localForkRef, theirsRef, {
169
+ baseRevision,
170
+ oursRevision,
171
+ theirsRevision,
172
+ forkRemote: `${forkRemoteName}:${options.forkRemote.url}`,
173
+ forkBranch,
174
+ author: options.author ?? DEFAULT_MERGE_AUTHOR,
175
+ });
176
+ if (integration === null) {
177
+ alreadyIntegrated = true;
178
+ }
179
+ else {
180
+ integrationCommit = integration.commit;
181
+ reconciled = integration.reconciled;
182
+ }
183
+ }
184
+ const uploadedObjects = await uploadForkObjects(db, newObjects, options);
185
+ try {
186
+ db.prepare("SELECT dolt_push(?, 'main') AS result").get(upstreamRemote.name);
187
+ }
188
+ catch (error) {
189
+ const message = error instanceof Error ? error.message : String(error);
190
+ if (/diverg|fast-forward|fetch first/i.test(message)) {
191
+ throw new EngineFault({
192
+ code: "DIVERGED",
193
+ message: "Upstream moved while the merge-back was in flight; re-run " +
194
+ `mergeBack against the moved upstream. (${message})`,
195
+ });
196
+ }
197
+ throw error;
198
+ }
199
+ return {
200
+ integrationCommit,
201
+ baseRevision,
202
+ oursRevision,
203
+ theirsRevision,
204
+ alreadyIntegrated,
205
+ uploadedObjects,
206
+ reconciledTranscripts: reconciled.transcripts,
207
+ reconciledSequences: reconciled.sequences,
208
+ };
209
+ }
210
+ finally {
211
+ db.close();
212
+ }
213
+ }
214
+ /**
215
+ * Merges `theirsRef` into main under the engine merge policy and Dolt-
216
+ * commits the result as one forward integration commit. The policy wrapper
217
+ * is identical to `mergeWithPolicy` (same-schema precondition, slug
218
+ * conflicts as user-facing MERGE_CONFLICT, constraint verification,
219
+ * deterministic singleton-flag reconcile); only the merge mechanism
220
+ * differs — a projection-level three-way merge instead of `dolt_merge`,
221
+ * which ve-wsu makes unusable on full engine catalogs (see the module
222
+ * comment). Returns null when the fork's net changes are already present
223
+ * on main, in which case nothing is written or committed.
224
+ */
225
+ function integrate(db, forkRef, displayRef, context) {
226
+ assertSameSchemaVersion(db, "HEAD", forkRef);
227
+ const slugConflicts = findSlugConflicts(db, "HEAD", forkRef);
228
+ if (slugConflicts.length > 0) {
229
+ throw new EngineFault({
230
+ code: "MERGE_CONFLICT",
231
+ message: `Merge-back of ${displayRef} conflicts on artifact slug(s): ` +
232
+ slugConflicts.map((conflict) => conflict.slug).join(", "),
233
+ details: { branch: displayRef, slugConflicts },
234
+ });
235
+ }
236
+ const merge = mergeRefs(db, "HEAD", forkRef, context.baseRevision);
237
+ if (!merge) {
238
+ // The fork's net changes are already present on main (for example a
239
+ // re-run after an earlier integration commit): nothing to commit.
240
+ return null;
241
+ }
242
+ const reconciled = reconcileSingletonFlags(db);
243
+ verifyConstraintHealth(db);
244
+ for (const table of SEMANTIC_TABLES) {
245
+ db.prepare("SELECT dolt_add(?) AS result").get(table);
246
+ }
247
+ const operationId = uuidv7();
248
+ // The write-set trailer names every resource the integration rewrote, so
249
+ // edit conflict detection (revisionConflicts in src/edits.ts) sees
250
+ // integrated changes exactly like locally committed ones. Oversized sets
251
+ // degrade the same way as engine commits: an omitted marker.
252
+ const writeSetJson = canonicalJson([...merge.writeSet].sort());
253
+ const writeSetTrailer = Buffer.byteLength(writeSetJson, "utf8") <= 32_000
254
+ ? `write-set: ${writeSetJson}`
255
+ : `write-set-omitted: ${Buffer.byteLength(writeSetJson, "utf8")}`;
256
+ const message = [
257
+ "merge_back",
258
+ "",
259
+ `op-id: ${operationId}`,
260
+ `base-revision: ${context.baseRevision}`,
261
+ `merged-revision: ${context.theirsRevision}`,
262
+ writeSetTrailer,
263
+ `details: ${canonicalJson({
264
+ forkRemote: context.forkRemote,
265
+ forkBranch: context.forkBranch,
266
+ oursRevision: context.oursRevision,
267
+ })}`,
268
+ ].join("\n");
269
+ const row = db
270
+ .prepare("SELECT dolt_commit('-m', ?, '--author', ?) AS hash")
271
+ .get(message, context.author);
272
+ if (!row?.hash) {
273
+ throw new EngineFault({
274
+ code: "STORAGE_ERROR",
275
+ message: "Dolt commit did not return a revision hash",
276
+ });
277
+ }
278
+ return { commit: row.hash, reconciled };
279
+ }
280
+ /**
281
+ * Projection-level three-way merge: rewrites the working set of every
282
+ * semantic table to the row-level three-way merge of `oursRef` and
283
+ * `theirsRef` against `baseRef`. Row semantics mirror Dolt's merge: a row
284
+ * changed on only one side takes that side's value, identical changes
285
+ * resolve to the same row, and incompatible changes (both sides changed a
286
+ * row differently, or one side modified a row the other deleted) are
287
+ * conflicts and abort before anything is written. Same-row-different-slug
288
+ * situations reachable here are already covered by findSlugConflicts; this
289
+ * layer is the backstop for every other table.
290
+ *
291
+ * The rewrite reuses the restore idiom (src/history.ts
292
+ * reloadSemanticTables): `SEMANTIC_TABLES` is ordered parent-before-child,
293
+ * so deleting in reverse and reinserting in forward order satisfies foreign
294
+ * keys, and columns come from `PRAGMA table_info`.
295
+ *
296
+ * Returns whether the merge changed anything relative to `oursRef`; when
297
+ * it did not, the working set is left untouched.
298
+ */
299
+ function mergeRefs(db, oursRef, theirsRef, baseRef) {
300
+ const shapes = SEMANTIC_TABLES.map((table) => tableShape(db, table));
301
+ const merged = [];
302
+ const conflicts = [];
303
+ const writeSet = new Set();
304
+ let changed = false;
305
+ for (const shape of shapes) {
306
+ const base = rowsByKey(db, shape, baseRef);
307
+ const ours = rowsByKey(db, shape, oursRef);
308
+ const theirs = rowsByKey(db, shape, theirsRef);
309
+ const result = new Map(ours);
310
+ const keys = new Set([...base.keys(), ...theirs.keys()]);
311
+ const applyRow = (key, row) => {
312
+ result.set(key, row);
313
+ changed = true;
314
+ resourcesFor(shape, row).forEach((resource) => writeSet.add(resource));
315
+ };
316
+ for (const key of keys) {
317
+ const b = base.get(key);
318
+ const o = ours.get(key);
319
+ const t = theirs.get(key);
320
+ if (t !== undefined && b === undefined) {
321
+ // Added on theirs.
322
+ if (o !== undefined && !rowsEqual(o, t)) {
323
+ const resolved = resolveObjectsRow(shape, o, t);
324
+ if (resolved) {
325
+ if (!rowsEqual(resolved, o))
326
+ applyRow(key, resolved);
327
+ }
328
+ else {
329
+ conflicts.push({
330
+ table: shape.table,
331
+ key: keyObject(shape, key),
332
+ reason: "row added with different content on both sides",
333
+ });
334
+ }
335
+ }
336
+ else if (o === undefined) {
337
+ applyRow(key, t);
338
+ }
339
+ }
340
+ else if (t === undefined && b !== undefined) {
341
+ // Deleted on theirs.
342
+ if (o !== undefined && !rowsEqual(o, b)) {
343
+ conflicts.push({
344
+ table: shape.table,
345
+ key: keyObject(shape, key),
346
+ reason: "row modified on ours but deleted on theirs",
347
+ });
348
+ }
349
+ else if (o !== undefined) {
350
+ result.delete(key);
351
+ changed = true;
352
+ resourcesFor(shape, o).forEach((resource) => writeSet.add(resource));
353
+ }
354
+ }
355
+ else if (t !== undefined && b !== undefined && !rowsEqual(t, b)) {
356
+ // Changed on theirs.
357
+ if (o === undefined) {
358
+ conflicts.push({
359
+ table: shape.table,
360
+ key: keyObject(shape, key),
361
+ reason: "row modified on theirs but deleted on ours",
362
+ });
363
+ }
364
+ else if (rowsEqual(o, b) || rowsEqual(o, t)) {
365
+ if (!rowsEqual(o, t))
366
+ applyRow(key, t);
367
+ }
368
+ else {
369
+ const resolved = resolveObjectsRow(shape, o, t);
370
+ if (resolved) {
371
+ if (!rowsEqual(resolved, o))
372
+ applyRow(key, resolved);
373
+ }
374
+ else {
375
+ conflicts.push({
376
+ table: shape.table,
377
+ key: keyObject(shape, key),
378
+ reason: "row modified differently on both sides",
379
+ });
380
+ }
381
+ }
382
+ }
383
+ }
384
+ merged.push({ shape, rows: [...result.values()] });
385
+ }
386
+ if (conflicts.length > 0) {
387
+ throw new EngineFault({
388
+ code: "MERGE_CONFLICT",
389
+ message: `Merge-back has row-level conflicts in ${conflicts.length} row(s) ` +
390
+ `across ${new Set(conflicts.map((c) => c.table)).size} table(s): ` +
391
+ conflicts
392
+ .slice(0, 5)
393
+ .map((c) => `${c.table}(${JSON.stringify(c.key)})`)
394
+ .join(", ") +
395
+ (conflicts.length > 5 ? ", …" : ""),
396
+ details: { conflicts },
397
+ });
398
+ }
399
+ if (!changed)
400
+ return null;
401
+ db.exec("PRAGMA foreign_keys = OFF");
402
+ try {
403
+ for (const { shape } of [...merged].reverse()) {
404
+ db.prepare(`DELETE FROM ${shape.table}`).run();
405
+ }
406
+ for (const { shape, rows } of merged) {
407
+ if (rows.length === 0)
408
+ continue;
409
+ const insert = db.prepare(`INSERT INTO ${shape.table}(${shape.columns.join(", ")})
410
+ VALUES (${shape.columns.map(() => "?").join(", ")})`);
411
+ for (const row of rows) {
412
+ insert.run(...shape.columns.map((column) => row[column] ?? null));
413
+ }
414
+ }
415
+ }
416
+ finally {
417
+ db.exec("PRAGMA foreign_keys = ON");
418
+ }
419
+ return { writeSet };
420
+ }
421
+ /**
422
+ * `objects` rows merge instead of conflicting when both sides agree on
423
+ * everything except `forgotten_at`: a forget on either side wins (deleted
424
+ * bytes must stay deleted on both lineages), and when both sides forgot
425
+ * independently the earlier wall-clock stamp is kept so the same takedown
426
+ * applied on fork and upstream cannot wedge integration. Returns null for
427
+ * any other table or any other difference.
428
+ */
429
+ function resolveObjectsRow(shape, ours, theirs) {
430
+ if (shape.table !== "objects")
431
+ return null;
432
+ const keys = new Set([...Object.keys(ours), ...Object.keys(theirs)]);
433
+ for (const key of keys) {
434
+ if (key === "forgotten_at")
435
+ continue;
436
+ if (comparable(ours[key]) !== comparable(theirs[key]))
437
+ return null;
438
+ }
439
+ const oursForgotten = ours["forgotten_at"];
440
+ const theirsForgotten = theirs["forgotten_at"];
441
+ const forgotten = oursForgotten != null && theirsForgotten != null
442
+ ? Math.min(oursForgotten, theirsForgotten)
443
+ : (oursForgotten ?? theirsForgotten ?? null);
444
+ return { ...ours, forgotten_at: forgotten };
445
+ }
446
+ /**
447
+ * Resource strings for the integration commit's write-set trailer, using
448
+ * the same vocabulary as engine write sets (src/edits.ts editWriteSet,
449
+ * storage/artifact operations) so overlap detection matches.
450
+ */
451
+ function resourcesFor(shape, row) {
452
+ const value = (column) => String(row[column] ?? "");
453
+ switch (shape.table) {
454
+ case "sequences":
455
+ return [`sequence:${value("sequence_id")}`];
456
+ case "sequence_tracks":
457
+ return [`sequence:${value("sequence_id")}`, `track:${value("track_id")}`];
458
+ case "sequence_clips":
459
+ return [`clip:${value("clip_id")}`, `track:${value("track_id")}`];
460
+ case "clip_links":
461
+ case "clip_transforms":
462
+ return [`clip:${value("clip_id")}`];
463
+ case "transitions":
464
+ return [`transition:${value("transition_id")}`];
465
+ case "caption_cues":
466
+ return [`track:${value("track_id")}`];
467
+ case "artifacts":
468
+ return [`artifact:${value("artifact_id")}`];
469
+ case "artifact_files":
470
+ case "artifact_streams":
471
+ case "artifact_metadata":
472
+ case "audio_waveforms":
473
+ return [`artifact:${value("artifact_id")}`];
474
+ case "objects":
475
+ return [`object:${value("object_hash")}`];
476
+ case "transcripts":
477
+ return [`transcript:${value("transcript_id")}`];
478
+ case "transcript_segments":
479
+ return [`transcript:${value("transcript_id")}`];
480
+ case "book":
481
+ case "book_metadata":
482
+ return ["book"];
483
+ case "notebooks":
484
+ case "cells":
485
+ case "edges":
486
+ case "runs":
487
+ case "cell_references":
488
+ case "pinned_search_results":
489
+ return [`notebook:${value("notebook_id")}`];
490
+ default:
491
+ return [
492
+ `${shape.table}:${shape.primaryKey.map((column) => value(column)).join(":")}`,
493
+ ];
494
+ }
495
+ }
496
+ function tableShape(db, table) {
497
+ const info = db
498
+ .prepare(`PRAGMA table_info(${table})`)
499
+ .all();
500
+ return {
501
+ table,
502
+ columns: info.map((column) => column.name),
503
+ primaryKey: info
504
+ .filter((column) => column.pk > 0)
505
+ .sort((left, right) => left.pk - right.pk)
506
+ .map((column) => column.name),
507
+ };
508
+ }
509
+ function rowsByKey(db, shape, ref) {
510
+ const rows = db
511
+ .prepare(`SELECT * FROM dolt_at_${shape.table}(?)`)
512
+ .all(ref);
513
+ return new Map(rows.map((row) => [rowKey(shape, row), row]));
514
+ }
515
+ function rowKey(shape, row) {
516
+ return canonicalJson(shape.primaryKey.map((column) => comparable(row[column])));
517
+ }
518
+ function keyObject(shape, key) {
519
+ const values = JSON.parse(key);
520
+ return Object.fromEntries(shape.primaryKey.map((column, index) => [column, values[index]]));
521
+ }
522
+ function comparable(value) {
523
+ if (value instanceof Uint8Array) {
524
+ return `blob:${Buffer.from(value).toString("hex")}`;
525
+ }
526
+ return value ?? null;
527
+ }
528
+ function rowsEqual(left, right) {
529
+ const keys = new Set([...Object.keys(left), ...Object.keys(right)]);
530
+ for (const key of keys) {
531
+ const a = comparable(left[key]);
532
+ const b = comparable(right[key]);
533
+ if (a !== b)
534
+ return false;
535
+ }
536
+ return true;
537
+ }
538
+ /** Live (non-forgotten) objects present at `theirsRef` but not at `oursRef`. */
539
+ function objectsAddedByFork(db, oursRef, theirsRef) {
540
+ const ours = new Set(db
541
+ .prepare("SELECT object_hash FROM dolt_at_objects(?)")
542
+ .all(oursRef).map((row) => row.object_hash));
543
+ const theirs = db
544
+ .prepare(`SELECT object_hash, size_bytes, forgotten_at
545
+ FROM dolt_at_objects(?) ORDER BY created_at, object_hash`)
546
+ .all(theirsRef);
547
+ return theirs.filter((row) => row.forgotten_at === null && !ours.has(row.object_hash));
548
+ }
549
+ /**
550
+ * Moves the fork's new objects into the upstream object store. Runs after
551
+ * the merge is verified but before the catalog ref is pushed, so the
552
+ * catalog never points at objects upstream cannot serve — the same
553
+ * objects-before-push ordering as engine.storage.backup.
554
+ */
555
+ async function uploadForkObjects(db, objects, options) {
556
+ if (objects.length === 0)
557
+ return [];
558
+ if (!options.upstreamObjects || !options.forkObjects) {
559
+ throw new EngineFault({
560
+ code: "INVALID_INPUT",
561
+ message: `Fork adds ${objects.length} object(s); upstreamObjects and ` +
562
+ "forkObjects are required to move them before the catalog moves",
563
+ details: { hashes: objects.map((row) => row.object_hash) },
564
+ });
565
+ }
566
+ const prefix = options.objectPrefix;
567
+ const downloadDir = await mkdtemp(path.join(tmpdir(), "videobook-merge-objects-"));
568
+ try {
569
+ const forkStore = new ObjectStore(path.join(downloadDir, "fork"), options.forkObjects, prefix);
570
+ const upstreamStore = new ObjectStore(path.join(downloadDir, "upstream"), options.upstreamObjects, prefix);
571
+ const uploaded = [];
572
+ for (const row of objects) {
573
+ // ensureLocalPath lazily fetches the bytes from the fork's
574
+ // public-read store; publish uploads and verifies the remote copy.
575
+ const localPath = await forkStore.ensureLocalPath(row.object_hash);
576
+ const staged = upstreamStore.pathFor(row.object_hash);
577
+ await mkdir(path.dirname(staged), { recursive: true });
578
+ await copyFile(localPath, staged);
579
+ await upstreamStore.publish(row.object_hash, row.size_bytes);
580
+ uploaded.push(row.object_hash);
581
+ }
582
+ return uploaded;
583
+ }
584
+ finally {
585
+ await rm(downloadDir, { recursive: true, force: true });
586
+ }
587
+ }
588
+ function findRemote(db, name) {
589
+ const rows = db
590
+ .prepare("SELECT * FROM dolt_remotes()")
591
+ .all();
592
+ const remote = rows.find((row) => row.name === name);
593
+ return remote ? { name: remote.name, url: remote.url } : null;
594
+ }
595
+ function ensureRemote(db, name, url) {
596
+ const existing = findRemote(db, name);
597
+ if (existing) {
598
+ if (existing.url !== url) {
599
+ throw new EngineFault({
600
+ code: "INVALID_INPUT",
601
+ message: `Remote ${name} already points to a different URL`,
602
+ details: { name, existing: existing.url, requested: url },
603
+ });
604
+ }
605
+ return;
606
+ }
607
+ db.prepare("SELECT dolt_remote('add', ?, ?) AS result").get(name, url);
608
+ }
609
+ //# sourceMappingURL=fork.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork.js","sourceRoot":"","sources":["../src/fork.ts"],"names":[],"mappings":"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"}
package/dist/history.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { GetHistoryActionsOptions, HistoryAction, HistoryActionPage, HistoryActionRevision, RecordActionInput } from "./history-types.js";
2
1
  import type { ActionLogEntry, EngineError, Result, Revision } from "./engine-types.js";
3
2
  import { EngineContext } from "./context.js";
4
3
  export declare function createHistoryApi(context: EngineContext): {
@@ -13,8 +12,5 @@ export declare function createHistoryApi(context: EngineContext): {
13
12
  limit?: number;
14
13
  action?: string;
15
14
  }) => ActionLogEntry[];
16
- actions: (options?: GetHistoryActionsOptions) => Result<HistoryActionPage, EngineError>;
17
- action: (actionId: string) => Result<HistoryAction, EngineError>;
18
- recordAction: (input: RecordActionInput) => Promise<Result<HistoryActionRevision, EngineError>>;
19
15
  };
20
16
  //# sourceMappingURL=history.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,wBAAwB,EACxB,aAAa,EAEb,iBAAiB,EAEjB,qBAAqB,EAIrB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,MAAM,EACN,QAAQ,EAET,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,aAAa,EAId,MAAM,cAAc,CAAC;AAwKtB,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa;mCAE1B,QAAQ,EAAE;yBAEd,MAAM,qBAAe,QAAQ,EAAE;gCAExB,MAAM,KAAG,QAAQ,GAAG,IAAI;iCAGvC,MAAM,aACN,MAAM,YACP,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;kCAG3B,MAAM,YACR,MAAM,SACT,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;wBAErB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;wBAGzD,MAAM,WACL,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACxC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;0BAGnC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAC5C,cAAc,EAAE;wBAEP,wBAAwB,KACjC,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC;uBACtB,MAAM,KAAG,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC;0BAGrD,iBAAiB,KACvB,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;EAGzD"}
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,MAAM,EACN,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,aAAa,EAA8B,MAAM,cAAc,CAAC;AAyCzE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa;mCAE1B,QAAQ,EAAE;yBACd,MAAM,qBAAe,QAAQ,EAAE;gCAExB,MAAM,KAAG,QAAQ,GAAG,IAAI;iCAGvC,MAAM,aACN,MAAM,YACP,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;kCAG3B,MAAM,YACR,MAAM,SACT,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;wBAErB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;wBAGzD,MAAM,WACL,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACxC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;0BAEzB;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,KAAG,cAAc,EAAE;EAEvB"}