videobook-engine 2.0.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 (103) hide show
  1. package/README.md +214 -0
  2. package/dist/artifacts.d.ts +20 -0
  3. package/dist/artifacts.d.ts.map +1 -0
  4. package/dist/artifacts.js +312 -0
  5. package/dist/artifacts.js.map +1 -0
  6. package/dist/books.d.ts +7 -0
  7. package/dist/books.d.ts.map +1 -0
  8. package/dist/books.js +27 -0
  9. package/dist/books.js.map +1 -0
  10. package/dist/cas.d.ts +26 -0
  11. package/dist/cas.d.ts.map +1 -0
  12. package/dist/cas.js +139 -0
  13. package/dist/cas.js.map +1 -0
  14. package/dist/communications.d.ts +15 -0
  15. package/dist/communications.d.ts.map +1 -0
  16. package/dist/communications.js +139 -0
  17. package/dist/communications.js.map +1 -0
  18. package/dist/context.d.ts +42 -0
  19. package/dist/context.d.ts.map +1 -0
  20. package/dist/context.js +197 -0
  21. package/dist/context.js.map +1 -0
  22. package/dist/domain.d.ts +32 -0
  23. package/dist/domain.d.ts.map +1 -0
  24. package/dist/domain.js +399 -0
  25. package/dist/domain.js.map +1 -0
  26. package/dist/engine-types.d.ts +548 -0
  27. package/dist/engine-types.d.ts.map +1 -0
  28. package/dist/engine-types.js +10 -0
  29. package/dist/engine-types.js.map +1 -0
  30. package/dist/engine.d.ts +213 -0
  31. package/dist/engine.d.ts.map +1 -0
  32. package/dist/engine.js +130 -0
  33. package/dist/engine.js.map +1 -0
  34. package/dist/files.d.ts +28 -0
  35. package/dist/files.d.ts.map +1 -0
  36. package/dist/files.js +476 -0
  37. package/dist/files.js.map +1 -0
  38. package/dist/history-types.d.ts +74 -0
  39. package/dist/history-types.d.ts.map +1 -0
  40. package/dist/history-types.js +2 -0
  41. package/dist/history-types.js.map +1 -0
  42. package/dist/history.d.ts +20 -0
  43. package/dist/history.d.ts.map +1 -0
  44. package/dist/history.js +921 -0
  45. package/dist/history.js.map +1 -0
  46. package/dist/ids.d.ts +4 -0
  47. package/dist/ids.d.ts.map +1 -0
  48. package/dist/ids.js +14 -0
  49. package/dist/ids.js.map +1 -0
  50. package/dist/index.d.ts +16 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +12 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/job-queue.d.ts +51 -0
  55. package/dist/job-queue.d.ts.map +1 -0
  56. package/dist/job-queue.js +443 -0
  57. package/dist/job-queue.js.map +1 -0
  58. package/dist/media.d.ts +7 -0
  59. package/dist/media.d.ts.map +1 -0
  60. package/dist/media.js +60 -0
  61. package/dist/media.js.map +1 -0
  62. package/dist/metadata.d.ts +21 -0
  63. package/dist/metadata.d.ts.map +1 -0
  64. package/dist/metadata.js +222 -0
  65. package/dist/metadata.js.map +1 -0
  66. package/dist/notebook/types.d.ts +51 -0
  67. package/dist/notebook/types.d.ts.map +1 -0
  68. package/dist/notebook/types.js +2 -0
  69. package/dist/notebook/types.js.map +1 -0
  70. package/dist/resolver.d.ts +15 -0
  71. package/dist/resolver.d.ts.map +1 -0
  72. package/dist/resolver.js +81 -0
  73. package/dist/resolver.js.map +1 -0
  74. package/dist/runtime-services.d.ts +65 -0
  75. package/dist/runtime-services.d.ts.map +1 -0
  76. package/dist/runtime-services.js +584 -0
  77. package/dist/runtime-services.js.map +1 -0
  78. package/dist/schema.d.ts +7 -0
  79. package/dist/schema.d.ts.map +1 -0
  80. package/dist/schema.js +509 -0
  81. package/dist/schema.js.map +1 -0
  82. package/dist/similarity.d.ts +4 -0
  83. package/dist/similarity.d.ts.map +1 -0
  84. package/dist/similarity.js +1551 -0
  85. package/dist/similarity.js.map +1 -0
  86. package/dist/status.d.ts +9 -0
  87. package/dist/status.d.ts.map +1 -0
  88. package/dist/status.js +231 -0
  89. package/dist/status.js.map +1 -0
  90. package/dist/storage.d.ts +7 -0
  91. package/dist/storage.d.ts.map +1 -0
  92. package/dist/storage.js +129 -0
  93. package/dist/storage.js.map +1 -0
  94. package/dist/store.d.ts +55 -0
  95. package/dist/store.d.ts.map +1 -0
  96. package/dist/store.js +378 -0
  97. package/dist/store.js.map +1 -0
  98. package/dist/timeline.d.ts +9 -0
  99. package/dist/timeline.d.ts.map +1 -0
  100. package/dist/timeline.js +236 -0
  101. package/dist/timeline.js.map +1 -0
  102. package/docs/engine-layout.md +489 -0
  103. package/package.json +55 -0
package/dist/files.js ADDED
@@ -0,0 +1,476 @@
1
+ import { readdir, rm, stat } from "node:fs/promises";
2
+ import * as path from "node:path";
3
+ import { ok } from "./engine-types.js";
4
+ import { resultOf } from "./context.js";
5
+ export function createFilesApi(context) {
6
+ return {
7
+ write: (artifact, filename, data) => writeFile(context, artifact, filename, data),
8
+ writeFromPath: (artifact, filename, sourcePath) => writeFromPath(context, artifact, filename, sourcePath),
9
+ read: (artifact, filename) => readFile(context, artifact, filename),
10
+ delete: (artifact, filename) => deleteFile(context, artifact, filename),
11
+ rename: (artifact, oldFilename, newFilename) => renameFile(context, artifact, oldFilename, newFilename),
12
+ copy: (artifact, filename, destinationArtifact, destinationFilename) => copyFile(context, artifact, filename, destinationArtifact, destinationFilename),
13
+ manifest: (artifact, options) => manifest(context, artifact, options),
14
+ listSubdir: (artifact, subdir) => listSubdir(context, artifact, subdir),
15
+ ingestWorkspace: (artifact, paths, operation = "ingest_workspace", details = {}) => ingestWorkspace(context, artifact, paths, operation, details),
16
+ readAtRevision: (artifactId, filename, revision) => readAtRevision(context, artifactId, filename, revision),
17
+ importObject: (sourcePath) => context.objects.import(sourcePath),
18
+ };
19
+ }
20
+ export function createWorkspacesApi(context) {
21
+ return {
22
+ resolveArtifact: (artifact) => resolveArtifactWorkspace(context, artifact),
23
+ materialize: (artifact) => resolveArtifactWorkspace(context, artifact),
24
+ evict: (artifact) => evictWorkspace(context, artifact),
25
+ };
26
+ }
27
+ async function writeFile(context, artifactReference, filename, data) {
28
+ return resultOf(async () => {
29
+ const artifact = context.artifactRow(artifactReference);
30
+ const relativePath = normalizeFilePath(filename);
31
+ const object = await context.objects.put(data);
32
+ const destination = path.join(context.ensureArtifactWorkspace(artifact.artifact_id), ...relativePath.split("/"));
33
+ await context.objects.materialize(object.hash, destination);
34
+ const mtimeMs = Date.now();
35
+ const mutation = await context.store.semantic({
36
+ operation: "write_file",
37
+ artifactId: artifact.artifact_id,
38
+ details: {
39
+ path: relativePath,
40
+ objectHash: object.hash,
41
+ size: object.size,
42
+ },
43
+ writeSet: [
44
+ `artifact:${artifact.artifact_id}`,
45
+ `file:${artifact.artifact_id}:${relativePath}`,
46
+ ],
47
+ }, ["objects", "artifact_files"], (_operationId, now) => {
48
+ linkObject(context, artifact.artifact_id, {
49
+ relativePath,
50
+ objectHash: object.hash,
51
+ size: object.size,
52
+ mtimeMs,
53
+ }, now);
54
+ markWorkspaceReady(context, artifact.artifact_id, now);
55
+ });
56
+ return ok(destination, mutation.revision);
57
+ });
58
+ }
59
+ async function writeFromPath(context, artifactReference, filename, sourcePath) {
60
+ return resultOf(async () => {
61
+ const artifact = context.artifactRow(artifactReference);
62
+ const relativePath = normalizeFilePath(filename);
63
+ const object = await context.objects.import(sourcePath);
64
+ const destination = path.join(context.ensureArtifactWorkspace(artifact.artifact_id), ...relativePath.split("/"));
65
+ await context.objects.materialize(object.hash, destination);
66
+ const mutation = await context.store.semantic({
67
+ operation: "write_file",
68
+ artifactId: artifact.artifact_id,
69
+ details: {
70
+ path: relativePath,
71
+ objectHash: object.hash,
72
+ size: object.size,
73
+ },
74
+ writeSet: [
75
+ `artifact:${artifact.artifact_id}`,
76
+ `file:${artifact.artifact_id}:${relativePath}`,
77
+ ],
78
+ }, ["objects", "artifact_files"], (_operationId, now) => {
79
+ linkObject(context, artifact.artifact_id, {
80
+ relativePath,
81
+ objectHash: object.hash,
82
+ size: object.size,
83
+ mtimeMs: now,
84
+ }, now);
85
+ markWorkspaceReady(context, artifact.artifact_id, now);
86
+ });
87
+ return ok(destination, mutation.revision);
88
+ });
89
+ }
90
+ async function readFile(context, artifactReference, filename) {
91
+ return resultOf(async () => {
92
+ const artifact = context.artifactRow(artifactReference);
93
+ const relativePath = normalizeFilePath(filename);
94
+ const row = requiredFile(context, artifact.artifact_id, relativePath);
95
+ const buffer = await context.objects.read(row.object_hash);
96
+ const destination = path.join(context.ensureArtifactWorkspace(artifact.artifact_id), ...relativePath.split("/"));
97
+ await context.objects.materialize(row.object_hash, destination);
98
+ touchWorkspace(context, artifact.artifact_id);
99
+ return buffer;
100
+ });
101
+ }
102
+ async function deleteFile(context, artifactReference, filename) {
103
+ return resultOf(async () => {
104
+ const artifact = context.artifactRow(artifactReference);
105
+ const relativePath = normalizeFilePath(filename);
106
+ requiredFile(context, artifact.artifact_id, relativePath);
107
+ const mutation = await context.store.semantic({
108
+ operation: "delete_file",
109
+ artifactId: artifact.artifact_id,
110
+ details: { path: relativePath },
111
+ writeSet: [`file:${artifact.artifact_id}:${relativePath}`],
112
+ }, ["artifact_files"], () => {
113
+ context.store.db
114
+ .prepare("DELETE FROM artifact_files WHERE artifact_id=? AND path=?")
115
+ .run(artifact.artifact_id, relativePath);
116
+ });
117
+ const destination = path.join(context.artifactPath(artifact.artifact_id), ...relativePath.split("/"));
118
+ await rm(destination, { force: true });
119
+ return ok(destination, mutation.revision);
120
+ });
121
+ }
122
+ async function renameFile(context, artifactReference, oldFilename, newFilename) {
123
+ return resultOf(async () => {
124
+ const artifact = context.artifactRow(artifactReference);
125
+ const oldRelative = normalizeFilePath(oldFilename);
126
+ const newRelative = normalizeFilePath(newFilename);
127
+ const row = requiredFile(context, artifact.artifact_id, oldRelative);
128
+ if (fileExists(context, artifact.artifact_id, newRelative)) {
129
+ throw new Error(`File already exists: ${newRelative}`);
130
+ }
131
+ const workspace = context.ensureArtifactWorkspace(artifact.artifact_id);
132
+ const oldPath = path.join(workspace, ...oldRelative.split("/"));
133
+ const newPath = path.join(workspace, ...newRelative.split("/"));
134
+ await context.objects.materialize(row.object_hash, newPath);
135
+ const mutation = await context.store.semantic({
136
+ operation: "rename_file",
137
+ artifactId: artifact.artifact_id,
138
+ details: { oldPath: oldRelative, newPath: newRelative },
139
+ writeSet: [
140
+ `file:${artifact.artifact_id}:${oldRelative}`,
141
+ `file:${artifact.artifact_id}:${newRelative}`,
142
+ ],
143
+ }, ["artifact_files"], (_operationId, now) => {
144
+ context.store.db
145
+ .prepare(`UPDATE artifact_files SET path=?, mtime_ms=?
146
+ WHERE artifact_id=? AND path=?`)
147
+ .run(newRelative, now, artifact.artifact_id, oldRelative);
148
+ });
149
+ await rm(oldPath, { force: true });
150
+ return ok({ oldPath, newPath }, mutation.revision);
151
+ });
152
+ }
153
+ async function copyFile(context, sourceReference, filename, destinationReference, destinationFilename) {
154
+ return resultOf(async () => {
155
+ const source = context.artifactRow(sourceReference);
156
+ const destination = context.artifactRow(destinationReference);
157
+ const sourcePath = normalizeFilePath(filename);
158
+ const destinationPath = normalizeFilePath(destinationFilename);
159
+ const row = requiredFile(context, source.artifact_id, sourcePath);
160
+ const absolute = path.join(context.ensureArtifactWorkspace(destination.artifact_id), ...destinationPath.split("/"));
161
+ await context.objects.materialize(row.object_hash, absolute);
162
+ const mutation = await context.store.semantic({
163
+ operation: "copy_file",
164
+ artifactId: destination.artifact_id,
165
+ details: {
166
+ sourceArtifactId: source.artifact_id,
167
+ sourcePath,
168
+ destinationPath,
169
+ },
170
+ writeSet: [`file:${destination.artifact_id}:${destinationPath}`],
171
+ }, ["artifact_files"], (_operationId, now) => {
172
+ context.store.db
173
+ .prepare(`INSERT INTO artifact_files(
174
+ artifact_id, path, object_hash, mtime_ms, created_at
175
+ ) VALUES (?, ?, ?, ?, ?)
176
+ ON CONFLICT(artifact_id, path) DO UPDATE SET
177
+ object_hash=excluded.object_hash,
178
+ mtime_ms=excluded.mtime_ms`)
179
+ .run(destination.artifact_id, destinationPath, row.object_hash, now, now);
180
+ markWorkspaceReady(context, destination.artifact_id, now);
181
+ });
182
+ return ok(absolute, mutation.revision);
183
+ });
184
+ }
185
+ async function manifest(context, artifactReference, options = {}) {
186
+ return resultOf(async () => {
187
+ const artifact = context.artifactRow(artifactReference);
188
+ await materializeArtifact(context, artifact.artifact_id);
189
+ const rows = filesForArtifact(context, artifact.artifact_id);
190
+ const filtered = options.includeDotfiles
191
+ ? rows
192
+ : rows.filter((row) => !row.path.split("/").some((segment) => segment.startsWith(".")));
193
+ const files = filtered.map(rowToManifestFile);
194
+ return {
195
+ artifactId: artifact.artifact_id,
196
+ slug: artifact.slug,
197
+ path: context.artifactPath(artifact.artifact_id),
198
+ fileCount: files.length,
199
+ files,
200
+ directories: directoriesFor(filtered),
201
+ };
202
+ });
203
+ }
204
+ function listSubdir(context, artifactReference, subdir) {
205
+ try {
206
+ const artifact = context.artifactRow(artifactReference);
207
+ const prefix = `${normalizeFilePath(subdir).replace(/\/+$/, "")}/`;
208
+ const rows = context.store.db
209
+ .prepare(`SELECT path FROM artifact_files
210
+ WHERE artifact_id=? AND path LIKE ? ORDER BY path`)
211
+ .all(artifact.artifact_id, `${prefix}%`);
212
+ return ok(rows
213
+ .map((row) => row.path.slice(prefix.length))
214
+ .filter((name) => name.length > 0 && !name.includes("/")));
215
+ }
216
+ catch (error) {
217
+ return {
218
+ ok: false,
219
+ error: {
220
+ code: "IO_ERROR",
221
+ message: error instanceof Error ? error.message : String(error),
222
+ },
223
+ };
224
+ }
225
+ }
226
+ async function ingestWorkspace(context, artifactReference, paths, operation, details) {
227
+ return resultOf(async () => {
228
+ const artifact = context.artifactRow(artifactReference);
229
+ const workspace = context.ensureArtifactWorkspace(artifact.artifact_id);
230
+ const requestedPaths = [...new Set(paths.map(normalizeFilePath))];
231
+ const uniquePaths = [];
232
+ for (const requestedPath of requestedPaths) {
233
+ const source = path.join(workspace, ...requestedPath.split("/"));
234
+ const sourceStat = await stat(source);
235
+ if (sourceStat.isFile()) {
236
+ uniquePaths.push(requestedPath);
237
+ }
238
+ else if (sourceStat.isDirectory()) {
239
+ uniquePaths.push(...(await workspaceFiles(source, requestedPath)));
240
+ }
241
+ else {
242
+ throw new Error(`Workspace path is neither a file nor directory: ${requestedPath}`);
243
+ }
244
+ }
245
+ const expandedPaths = [...new Set(uniquePaths)].sort();
246
+ const prepared = [];
247
+ for (const relativePath of expandedPaths) {
248
+ const source = path.join(workspace, ...relativePath.split("/"));
249
+ const sourceStat = await stat(source);
250
+ const object = await context.objects.import(source);
251
+ prepared.push({
252
+ relativePath,
253
+ objectHash: object.hash,
254
+ size: object.size,
255
+ mtimeMs: sourceStat.mtimeMs,
256
+ });
257
+ }
258
+ const mutation = await context.store.semantic({
259
+ operation,
260
+ artifactId: artifact.artifact_id,
261
+ details: { ...details, paths: expandedPaths },
262
+ writeSet: expandedPaths.map((item) => `file:${artifact.artifact_id}:${item}`),
263
+ }, ["objects", "artifact_files"], (_operationId, now) => {
264
+ for (const file of prepared)
265
+ linkObject(context, artifact.artifact_id, file, now);
266
+ markWorkspaceReady(context, artifact.artifact_id, now);
267
+ });
268
+ return ok(mutation.revision, mutation.revision);
269
+ });
270
+ }
271
+ async function workspaceFiles(directory, relativeDirectory) {
272
+ const entries = await readdir(directory, { withFileTypes: true });
273
+ const files = [];
274
+ for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
275
+ const relativePath = `${relativeDirectory}/${entry.name}`;
276
+ const absolutePath = path.join(directory, entry.name);
277
+ if (entry.isDirectory()) {
278
+ files.push(...(await workspaceFiles(absolutePath, relativePath)));
279
+ }
280
+ else if (entry.isFile()) {
281
+ files.push(relativePath);
282
+ }
283
+ else {
284
+ throw new Error(`Workspace path is not a regular file: ${relativePath}`);
285
+ }
286
+ }
287
+ return files;
288
+ }
289
+ async function readAtRevision(context, artifactId, filename, revision) {
290
+ return resultOf(async () => {
291
+ const relativePath = normalizeFilePath(filename);
292
+ const row = context.store.db
293
+ .prepare(`SELECT object_hash FROM dolt_at_artifact_files(?)
294
+ WHERE artifact_id=? AND path=?`)
295
+ .get(revision, artifactId, relativePath);
296
+ if (!row) {
297
+ throw new Error(`File ${relativePath} not found for artifact ${artifactId} at ${revision}`);
298
+ }
299
+ return context.objects.read(row.object_hash);
300
+ });
301
+ }
302
+ async function resolveArtifactWorkspace(context, artifactReference) {
303
+ return resultOf(async () => {
304
+ const artifact = context.artifactRow(artifactReference);
305
+ const workspace = await materializeArtifact(context, artifact.artifact_id);
306
+ touchWorkspace(context, artifact.artifact_id);
307
+ return workspace;
308
+ });
309
+ }
310
+ async function evictWorkspace(context, artifactReference) {
311
+ return resultOf(async () => {
312
+ const artifact = context.artifactRow(artifactReference);
313
+ await rm(context.artifactPath(artifact.artifact_id), {
314
+ recursive: true,
315
+ force: true,
316
+ });
317
+ context.store.runtime((now) => {
318
+ context.store.db
319
+ .prepare(`UPDATE runtime_workspace_entries
320
+ SET invalidated_at=?, hydrated_at=NULL, last_accessed_at=?
321
+ WHERE artifact_id=?`)
322
+ .run(now, now, artifact.artifact_id);
323
+ });
324
+ return true;
325
+ });
326
+ }
327
+ export async function materializeArtifact(context, artifactId) {
328
+ const artifact = context.artifactRowById(artifactId);
329
+ const workspace = context.ensureArtifactWorkspace(artifact.artifact_id);
330
+ for (const row of filesForArtifact(context, artifact.artifact_id)) {
331
+ await context.objects.materialize(row.object_hash, path.join(workspace, ...row.path.split("/")));
332
+ }
333
+ context.store.runtime((now) => {
334
+ context.store.db
335
+ .prepare(`INSERT INTO runtime_workspace_entries(
336
+ artifact_id, path, hydrated_at, invalidated_at, last_accessed_at
337
+ ) VALUES (?, ?, ?, NULL, ?)
338
+ ON CONFLICT(artifact_id) DO UPDATE SET
339
+ path=excluded.path,
340
+ hydrated_at=excluded.hydrated_at,
341
+ invalidated_at=NULL,
342
+ last_accessed_at=excluded.last_accessed_at`)
343
+ .run(artifact.artifact_id, workspace, now, now);
344
+ });
345
+ return workspace;
346
+ }
347
+ function linkObject(context, artifactId, file, now) {
348
+ context.store.db
349
+ .prepare(`INSERT INTO objects(object_hash, size_bytes, created_at)
350
+ VALUES (?, ?, ?)
351
+ ON CONFLICT(object_hash) DO NOTHING`)
352
+ .run(file.objectHash, file.size, now);
353
+ context.store.db
354
+ .prepare(`INSERT INTO artifact_files(
355
+ artifact_id, path, object_hash, mtime_ms, created_at
356
+ ) VALUES (?, ?, ?, ?, ?)
357
+ ON CONFLICT(artifact_id, path) DO UPDATE SET
358
+ object_hash=excluded.object_hash,
359
+ mtime_ms=excluded.mtime_ms`)
360
+ .run(artifactId, file.relativePath, file.objectHash, file.mtimeMs, now);
361
+ }
362
+ function markWorkspaceReady(context, artifactId, now) {
363
+ context.store.db
364
+ .prepare(`INSERT INTO runtime_workspace_entries(
365
+ artifact_id, path, hydrated_at, invalidated_at, last_accessed_at
366
+ ) VALUES (?, ?, ?, NULL, ?)
367
+ ON CONFLICT(artifact_id) DO UPDATE SET
368
+ hydrated_at=excluded.hydrated_at,
369
+ invalidated_at=NULL,
370
+ last_accessed_at=excluded.last_accessed_at`)
371
+ .run(artifactId, context.artifactPath(artifactId), now, now);
372
+ context.store.db
373
+ .prepare(`INSERT INTO runtime_artifact_views(
374
+ artifact_id, status, meta_json, updated_at
375
+ ) VALUES (?, 'ready', '{}', ?)
376
+ ON CONFLICT(artifact_id) DO UPDATE SET
377
+ status='ready', meta_json='{}', owner_id=NULL, owner_kind=NULL,
378
+ pid=NULL, deadline_at=NULL, updated_at=excluded.updated_at`)
379
+ .run(artifactId, now);
380
+ }
381
+ function touchWorkspace(context, artifactId) {
382
+ context.store.runtime((now) => {
383
+ context.store.db
384
+ .prepare("UPDATE runtime_workspace_entries SET last_accessed_at=? WHERE artifact_id=?")
385
+ .run(now, artifactId);
386
+ });
387
+ }
388
+ function requiredFile(context, artifactId, relativePath) {
389
+ const row = context.store.db
390
+ .prepare(`SELECT f.artifact_id, f.path, f.object_hash, o.size_bytes,
391
+ f.mtime_ms, f.created_at
392
+ FROM artifact_files f
393
+ JOIN objects o ON o.object_hash=f.object_hash
394
+ WHERE f.artifact_id=? AND f.path=?`)
395
+ .get(artifactId, relativePath);
396
+ if (!row)
397
+ throw new Error(`File not found: ${relativePath}`);
398
+ return row;
399
+ }
400
+ function fileExists(context, artifactId, relativePath) {
401
+ return Boolean(context.store.db
402
+ .prepare("SELECT 1 AS present FROM artifact_files WHERE artifact_id=? AND path=?")
403
+ .get(artifactId, relativePath));
404
+ }
405
+ function filesForArtifact(context, artifactId) {
406
+ return context.store.db
407
+ .prepare(`SELECT f.artifact_id, f.path, f.object_hash, o.size_bytes,
408
+ f.mtime_ms, f.created_at
409
+ FROM artifact_files f
410
+ JOIN objects o ON o.object_hash=f.object_hash
411
+ WHERE f.artifact_id=? ORDER BY f.path`)
412
+ .all(artifactId);
413
+ }
414
+ function rowToManifestFile(row) {
415
+ const mimeType = mimeTypeFor(row.path);
416
+ return {
417
+ name: row.path,
418
+ sizeBytes: row.size_bytes,
419
+ extension: path.extname(row.path) || null,
420
+ mtimeMs: row.mtime_ms,
421
+ ...(mimeType ? { mimeType } : {}),
422
+ objectHash: row.object_hash,
423
+ };
424
+ }
425
+ function directoriesFor(rows) {
426
+ const directories = {};
427
+ for (const row of rows) {
428
+ const slash = row.path.lastIndexOf("/");
429
+ if (slash < 0)
430
+ continue;
431
+ const directory = row.path.slice(0, slash);
432
+ const filename = row.path.slice(slash + 1);
433
+ (directories[directory] ??= []).push(filename);
434
+ }
435
+ return directories;
436
+ }
437
+ export function normalizeFilePath(input) {
438
+ const normalized = input.replaceAll("\\", "/").replace(/^\.\/+/, "");
439
+ if (normalized.length === 0 ||
440
+ normalized.includes("\0") ||
441
+ normalized.startsWith("/") ||
442
+ normalized.split("/").some((segment) => segment === ".." || !segment)) {
443
+ throw new Error(`Invalid artifact file path: ${input}`);
444
+ }
445
+ return normalized;
446
+ }
447
+ function mimeTypeFor(filename) {
448
+ switch (path.extname(filename).toLowerCase()) {
449
+ case ".mp4":
450
+ return "video/mp4";
451
+ case ".mov":
452
+ return "video/quicktime";
453
+ case ".webm":
454
+ return "video/webm";
455
+ case ".mp3":
456
+ return "audio/mpeg";
457
+ case ".wav":
458
+ return "audio/wav";
459
+ case ".png":
460
+ return "image/png";
461
+ case ".jpg":
462
+ case ".jpeg":
463
+ return "image/jpeg";
464
+ case ".webp":
465
+ return "image/webp";
466
+ case ".json":
467
+ return "application/json";
468
+ case ".md":
469
+ return "text/markdown";
470
+ case ".txt":
471
+ return "text/plain";
472
+ default:
473
+ return null;
474
+ }
475
+ }
476
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import type { Revision, RevisionFileChange } from "./engine-types.js";
2
+ import type { ArtifactKind } from "./engine-types.js";
3
+ export type HistoryActionPhase = "requested" | "started" | "completed" | "failed" | "cancelled" | "conflicted";
4
+ export type HistoryActionScope = "book" | "artifact" | "layout" | "external" | "system";
5
+ export type HistoryArtifactKind = ArtifactKind | "unknown";
6
+ export interface HistoryLayout {
7
+ stage: number;
8
+ column: number;
9
+ }
10
+ export interface HistoryActionEvent {
11
+ id: string;
12
+ revision: string;
13
+ phase: HistoryActionPhase;
14
+ date: string;
15
+ details: Record<string, unknown>;
16
+ files: string[];
17
+ fileChanges: RevisionFileChange[];
18
+ }
19
+ export interface HistoryArtifactRef {
20
+ id: string;
21
+ slug: string;
22
+ kind: HistoryArtifactKind;
23
+ }
24
+ export interface HistoryAction {
25
+ id: string;
26
+ operation: string;
27
+ title: string;
28
+ scope: HistoryActionScope;
29
+ actor: string;
30
+ lane: string;
31
+ date: string;
32
+ phase: HistoryActionPhase;
33
+ baseRevision?: string;
34
+ rebasedOver?: string;
35
+ parentActionIds: string[];
36
+ inputArtifacts: HistoryArtifactRef[];
37
+ outputArtifacts: HistoryArtifactRef[];
38
+ targetArtifactId?: string;
39
+ targetActionId?: string;
40
+ layout?: HistoryLayout;
41
+ details: Record<string, unknown>;
42
+ events: HistoryActionEvent[];
43
+ }
44
+ export interface HistoryActionPage {
45
+ headRevision: string;
46
+ actions: HistoryAction[];
47
+ nextCursor?: string;
48
+ }
49
+ export interface GetHistoryActionsOptions {
50
+ limit?: number;
51
+ cursor?: string;
52
+ }
53
+ export interface RecordActionInput {
54
+ actionId?: string;
55
+ operation: string;
56
+ phase?: HistoryActionPhase;
57
+ scope?: HistoryActionScope;
58
+ actor?: string;
59
+ lane?: string;
60
+ baseRevision?: string;
61
+ parentActionIds?: string[];
62
+ inputArtifactIds?: string[];
63
+ outputArtifactIds?: string[];
64
+ targetArtifactId?: string;
65
+ targetActionId?: string;
66
+ layout?: HistoryLayout;
67
+ writeSet?: string[];
68
+ details?: Record<string, unknown>;
69
+ }
70
+ export interface HistoryActionRevision {
71
+ action: HistoryAction;
72
+ revision: Revision;
73
+ }
74
+ //# sourceMappingURL=history-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-types.d.ts","sourceRoot":"","sources":["../src/history-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=history-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-types.js","sourceRoot":"","sources":["../src/history-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { GetHistoryActionsOptions, HistoryAction, HistoryActionPage, HistoryActionRevision, RecordActionInput } from "./history-types.js";
2
+ import type { ActionLogEntry, EngineError, Result, Revision } from "./engine-types.js";
3
+ import { EngineContext } from "./context.js";
4
+ export declare function createHistoryApi(context: EngineContext): {
5
+ revisions: (limit?: number) => Revision[];
6
+ artifact: (artifact: string, limit?: number) => Revision[];
7
+ resolveRevision: (revision: string) => Revision | null;
8
+ recordOperation: (operation: string, artifact?: string, details?: Record<string, unknown>) => Promise<Result<Revision, EngineError>>;
9
+ restoreArtifact: (artifactId: string, revision: string, slug?: string) => Promise<Result<Revision, EngineError>>;
10
+ restore: (revision: string) => Promise<Result<Revision, EngineError>>;
11
+ logAction: (action: string, payload: string | Record<string, unknown>) => Promise<Result<ActionLogEntry, EngineError>>;
12
+ actionLog: (options?: {
13
+ limit?: number;
14
+ action?: string;
15
+ }) => ActionLogEntry[];
16
+ actions: (options?: GetHistoryActionsOptions) => Result<HistoryActionPage, EngineError>;
17
+ action: (actionId: string) => Result<HistoryAction, EngineError>;
18
+ recordAction: (input: RecordActionInput) => Promise<Result<HistoryActionRevision, EngineError>>;
19
+ };
20
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +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"}