videobook-engine 2.0.1 → 5.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 (171) hide show
  1. package/README.md +99 -68
  2. package/dist/artifacts.d.ts +4 -9
  3. package/dist/artifacts.d.ts.map +1 -1
  4. package/dist/artifacts.js +78 -138
  5. package/dist/artifacts.js.map +1 -1
  6. package/dist/books.d.ts +1 -1
  7. package/dist/books.d.ts.map +1 -1
  8. package/dist/books.js +18 -10
  9. package/dist/books.js.map +1 -1
  10. package/dist/cas.d.ts +27 -1
  11. package/dist/cas.d.ts.map +1 -1
  12. package/dist/cas.js +78 -6
  13. package/dist/cas.js.map +1 -1
  14. package/dist/catalog-metadata.d.ts +56 -0
  15. package/dist/catalog-metadata.d.ts.map +1 -0
  16. package/dist/catalog-metadata.js +42 -0
  17. package/dist/catalog-metadata.js.map +1 -0
  18. package/dist/communications.js +4 -2
  19. package/dist/communications.js.map +1 -1
  20. package/dist/context.d.ts +9 -6
  21. package/dist/context.d.ts.map +1 -1
  22. package/dist/context.js +42 -51
  23. package/dist/context.js.map +1 -1
  24. package/dist/domain.d.ts +39 -2
  25. package/dist/domain.d.ts.map +1 -1
  26. package/dist/domain.js +846 -64
  27. package/dist/domain.js.map +1 -1
  28. package/dist/edit-policy.d.ts +3 -0
  29. package/dist/edit-policy.d.ts.map +1 -0
  30. package/dist/edit-policy.js +6 -0
  31. package/dist/edit-policy.js.map +1 -0
  32. package/dist/edits.d.ts +10 -0
  33. package/dist/edits.d.ts.map +1 -0
  34. package/dist/edits.js +1392 -0
  35. package/dist/edits.js.map +1 -0
  36. package/dist/engine-types.d.ts +171 -86
  37. package/dist/engine-types.d.ts.map +1 -1
  38. package/dist/engine-types.js +32 -0
  39. package/dist/engine-types.js.map +1 -1
  40. package/dist/engine.d.ts +89 -26
  41. package/dist/engine.d.ts.map +1 -1
  42. package/dist/engine.js +27 -21
  43. package/dist/engine.js.map +1 -1
  44. package/dist/files.d.ts.map +1 -1
  45. package/dist/files.js +32 -28
  46. package/dist/files.js.map +1 -1
  47. package/dist/fork.d.ts +148 -0
  48. package/dist/fork.d.ts.map +1 -0
  49. package/dist/fork.js +602 -0
  50. package/dist/fork.js.map +1 -0
  51. package/dist/generations.d.ts +9 -0
  52. package/dist/generations.d.ts.map +1 -0
  53. package/dist/generations.js +175 -0
  54. package/dist/generations.js.map +1 -0
  55. package/dist/history.d.ts +2 -5
  56. package/dist/history.d.ts.map +1 -1
  57. package/dist/history.js +183 -640
  58. package/dist/history.js.map +1 -1
  59. package/dist/index.d.ts +21 -7
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +15 -5
  62. package/dist/index.js.map +1 -1
  63. package/dist/job-queue.d.ts +2 -0
  64. package/dist/job-queue.d.ts.map +1 -1
  65. package/dist/job-queue.js +29 -2
  66. package/dist/job-queue.js.map +1 -1
  67. package/dist/media.d.ts +3 -3
  68. package/dist/media.d.ts.map +1 -1
  69. package/dist/media.js +6 -5
  70. package/dist/media.js.map +1 -1
  71. package/dist/merge-policy.d.ts +83 -0
  72. package/dist/merge-policy.d.ts.map +1 -0
  73. package/dist/merge-policy.js +203 -0
  74. package/dist/merge-policy.js.map +1 -0
  75. package/dist/metadata.d.ts.map +1 -1
  76. package/dist/metadata.js +17 -23
  77. package/dist/metadata.js.map +1 -1
  78. package/dist/migration.d.ts +9 -0
  79. package/dist/migration.d.ts.map +1 -0
  80. package/dist/migration.js +564 -0
  81. package/dist/migration.js.map +1 -0
  82. package/dist/mvp-contract-fixtures.d.ts +244 -0
  83. package/dist/mvp-contract-fixtures.d.ts.map +1 -0
  84. package/dist/mvp-contract-fixtures.js +556 -0
  85. package/dist/mvp-contract-fixtures.js.map +1 -0
  86. package/dist/mvp-contracts.d.ts +761 -0
  87. package/dist/mvp-contracts.d.ts.map +1 -0
  88. package/dist/mvp-contracts.js +59 -0
  89. package/dist/mvp-contracts.js.map +1 -0
  90. package/dist/mvp-time.d.ts +54 -0
  91. package/dist/mvp-time.d.ts.map +1 -0
  92. package/dist/mvp-time.js +148 -0
  93. package/dist/mvp-time.js.map +1 -0
  94. package/dist/notebook/types.d.ts +85 -8
  95. package/dist/notebook/types.d.ts.map +1 -1
  96. package/dist/notebook-grid.d.ts +37 -0
  97. package/dist/notebook-grid.d.ts.map +1 -0
  98. package/dist/notebook-grid.js +160 -0
  99. package/dist/notebook-grid.js.map +1 -0
  100. package/dist/notebook-media-artifact.d.ts +23 -0
  101. package/dist/notebook-media-artifact.d.ts.map +1 -0
  102. package/dist/notebook-media-artifact.js +67 -0
  103. package/dist/notebook-media-artifact.js.map +1 -0
  104. package/dist/notebook-mentions.d.ts +20 -0
  105. package/dist/notebook-mentions.d.ts.map +1 -0
  106. package/dist/notebook-mentions.js +53 -0
  107. package/dist/notebook-mentions.js.map +1 -0
  108. package/dist/order-keys.d.ts +22 -0
  109. package/dist/order-keys.d.ts.map +1 -0
  110. package/dist/order-keys.js +262 -0
  111. package/dist/order-keys.js.map +1 -0
  112. package/dist/runtime-services.js +8 -11
  113. package/dist/runtime-services.js.map +1 -1
  114. package/dist/schema.d.ts +8 -5
  115. package/dist/schema.d.ts.map +1 -1
  116. package/dist/schema.js +624 -141
  117. package/dist/schema.js.map +1 -1
  118. package/dist/search-benchmark.d.ts +4 -0
  119. package/dist/search-benchmark.d.ts.map +1 -0
  120. package/dist/search-benchmark.js +144 -0
  121. package/dist/search-benchmark.js.map +1 -0
  122. package/dist/sequences.d.ts +20 -0
  123. package/dist/sequences.d.ts.map +1 -0
  124. package/dist/sequences.js +825 -0
  125. package/dist/sequences.js.map +1 -0
  126. package/dist/similarity.js +10 -10
  127. package/dist/similarity.js.map +1 -1
  128. package/dist/status.js +8 -10
  129. package/dist/status.js.map +1 -1
  130. package/dist/storage.d.ts +3 -1
  131. package/dist/storage.d.ts.map +1 -1
  132. package/dist/storage.js +388 -7
  133. package/dist/storage.js.map +1 -1
  134. package/dist/store.d.ts +64 -3
  135. package/dist/store.d.ts.map +1 -1
  136. package/dist/store.js +354 -68
  137. package/dist/store.js.map +1 -1
  138. package/dist/streams.d.ts +10 -0
  139. package/dist/streams.d.ts.map +1 -0
  140. package/dist/streams.js +183 -0
  141. package/dist/streams.js.map +1 -0
  142. package/dist/temporal-models.d.ts +48 -0
  143. package/dist/temporal-models.d.ts.map +1 -0
  144. package/dist/temporal-models.js +278 -0
  145. package/dist/temporal-models.js.map +1 -0
  146. package/dist/temporal-search.d.ts +29 -0
  147. package/dist/temporal-search.d.ts.map +1 -0
  148. package/dist/temporal-search.js +1551 -0
  149. package/dist/temporal-search.js.map +1 -0
  150. package/dist/transcripts.d.ts +16 -0
  151. package/dist/transcripts.d.ts.map +1 -0
  152. package/dist/transcripts.js +519 -0
  153. package/dist/transcripts.js.map +1 -0
  154. package/docs/engine-layout.md +345 -110
  155. package/docs/mvp-prd.md +918 -0
  156. package/fixtures/media/vancat.mp4 +0 -0
  157. package/fixtures/media/vancat_profile.jpg +0 -0
  158. package/fixtures/v5/contract-fixtures.json +1532 -0
  159. package/package.json +42 -5
  160. package/dist/history-types.d.ts +0 -74
  161. package/dist/history-types.d.ts.map +0 -1
  162. package/dist/history-types.js +0 -2
  163. package/dist/history-types.js.map +0 -1
  164. package/dist/resolver.d.ts +0 -15
  165. package/dist/resolver.d.ts.map +0 -1
  166. package/dist/resolver.js +0 -81
  167. package/dist/resolver.js.map +0 -1
  168. package/dist/timeline.d.ts +0 -9
  169. package/dist/timeline.d.ts.map +0 -1
  170. package/dist/timeline.js +0 -236
  171. package/dist/timeline.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"books.d.ts","sourceRoot":"","sources":["../src/books.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EACL,aAAa,EAGd,MAAM,cAAc,CAAC;AAEtB,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa;eAEvC,IAAI;mBACE,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;EAG7D"}
1
+ {"version":3,"file":"books.d.ts","sourceRoot":"","sources":["../src/books.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAY,MAAM,cAAc,CAAC;AAGvD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa;eAEvC,IAAI;mBACE,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;EAG7D"}
package/dist/books.js CHANGED
@@ -1,25 +1,33 @@
1
1
  import { ok } from "./engine-types.js";
2
- import { normalizeBookSlug, resultOf, } from "./context.js";
2
+ import { resultOf } from "./context.js";
3
+ import { EngineFault } from "./store.js";
3
4
  export function createBookApi(context) {
4
5
  return {
5
6
  get: () => context.book(),
6
- rename: (slug) => renameBook(context, slug),
7
+ rename: (name) => renameBook(context, name),
7
8
  };
8
9
  }
9
- async function renameBook(context, requestedSlug) {
10
+ async function renameBook(context, requestedName) {
10
11
  return resultOf(async () => {
11
12
  const current = context.bookRow();
12
- const slug = normalizeBookSlug(requestedSlug);
13
- if (current.slug === slug)
13
+ const name = requestedName.trim();
14
+ if (!name) {
15
+ throw new EngineFault({
16
+ code: "INVALID_INPUT",
17
+ message: "Book name must be non-empty",
18
+ });
19
+ }
20
+ if (current.name === name)
14
21
  return context.book(current);
15
22
  const mutation = await context.store.semantic({
16
23
  operation: "rename_book",
17
- details: { oldSlug: current.slug, newSlug: slug },
18
- writeSet: ["book", `book-slug:${current.slug}`, `book-slug:${slug}`],
19
- }, ["book"], () => {
24
+ tables: ["book"],
25
+ details: { oldName: current.name, newName: name },
26
+ writeSet: ["book"],
27
+ }, () => {
20
28
  context.store.db
21
- .prepare("UPDATE book SET slug=? WHERE book_id=?")
22
- .run(slug, current.book_id);
29
+ .prepare("UPDATE book SET name=? WHERE book_id=?")
30
+ .run(name, current.book_id);
23
31
  });
24
32
  return ok(context.book(), mutation.revision);
25
33
  });
package/dist/books.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"books.js","sourceRoot":"","sources":["../src/books.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAEL,iBAAiB,EACjB,QAAQ,GACT,MAAM,cAAc,CAAC;AAEtB,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,OAAO;QACL,GAAG,EAAE,GAAS,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE;QAC/B,MAAM,EAAE,CAAC,IAAY,EAAsC,EAAE,CAC3D,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,OAAsB,EACtB,aAAqB;IAErB,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAC3C;YACE,SAAS,EAAE,aAAa;YACxB,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YACjD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,IAAI,EAAE,CAAC;SACrE,EACD,CAAC,MAAM,CAAC,EACR,GAAG,EAAE;YACH,OAAO,CAAC,KAAK,CAAC,EAAE;iBACb,OAAO,CAAC,wCAAwC,CAAC;iBACjD,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC,CACF,CAAC;QACF,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"books.js","sourceRoot":"","sources":["../src/books.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAiB,QAAQ,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,OAAO;QACL,GAAG,EAAE,GAAS,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE;QAC/B,MAAM,EAAE,CAAC,IAAY,EAAsC,EAAE,CAC3D,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,OAAsB,EACtB,aAAqB;IAErB,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,WAAW,CAAC;gBACpB,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,6BAA6B;aACvC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAC3C;YACE,SAAS,EAAE,aAAa;YACxB,MAAM,EAAE,CAAC,MAAM,CAAC;YAChB,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YACjD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB,EACD,GAAG,EAAE;YACH,OAAO,CAAC,KAAK,CAAC,EAAE;iBACb,OAAO,CAAC,wCAAwC,CAAC;iBACjD,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC,CACF,CAAC;QACF,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/cas.d.ts CHANGED
@@ -4,11 +4,21 @@ export interface StoredObject {
4
4
  size: number;
5
5
  path: string;
6
6
  }
7
+ /**
8
+ * Local content-addressed store with an optional remote ContentStore.
9
+ *
10
+ * Objects are content-immutable (a hash always names the same bytes) but no
11
+ * longer undeletable: `deleteLocal` and `unpublish` support the forgettable
12
+ * data policy. Deleting an object that versioned rows still reference turns
13
+ * those rows into tombstones — the `objects` table keeps hash + size and
14
+ * reads surface OBJECT_UNAVAILABLE through `ensureLocal`.
15
+ */
7
16
  export declare class ObjectStore {
8
17
  private readonly remote?;
18
+ private readonly isForgotten?;
9
19
  readonly root: string;
10
20
  readonly prefix: string;
11
- constructor(root: string, remote?: ContentStore | undefined, prefix?: string);
21
+ constructor(root: string, remote?: ContentStore | undefined, prefix?: string, isForgotten?: ((hash: string) => boolean) | undefined);
12
22
  put(data: Buffer | string): Promise<StoredObject>;
13
23
  import(sourcePath: string): Promise<StoredObject>;
14
24
  read(hash: string): Promise<Buffer>;
@@ -20,6 +30,22 @@ export declare class ObjectStore {
20
30
  materialize(hash: string, destinationPath: string): Promise<void>;
21
31
  publish(hash: string, expectedSize: number): Promise<void>;
22
32
  pathFor(hash: string): string;
33
+ /**
34
+ * Removes the local copy of an object. Returns whether a local file was
35
+ * actually removed; deleting an object that is not stored locally is not
36
+ * an error.
37
+ */
38
+ deleteLocal(hash: string): Promise<boolean>;
39
+ /**
40
+ * Unpublishes an object from the remote content store. Returns whether a
41
+ * remote object was deleted. Without a configured remote this is a no-op.
42
+ */
43
+ unpublish(hash: string): Promise<boolean>;
44
+ /**
45
+ * Lists every object hash stored locally, including stray files that have
46
+ * no `objects` row (for example leftovers from an interrupted import).
47
+ */
48
+ listLocal(): Promise<string[]>;
23
49
  keyFor(hash: string): string;
24
50
  private ensureLocal;
25
51
  }
package/dist/cas.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cas.d.ts","sourceRoot":"","sources":["../src/cas.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,WAAW;IAMpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAL1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAGtB,IAAI,EAAE,MAAM,EACK,MAAM,CAAC,EAAE,YAAY,YAAA,EACtC,MAAM,SAAoC;IAMtC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAmBjD,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBjD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKzC;;;OAGG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBhE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAK7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;YAKd,WAAW;CAkB1B"}
1
+ {"version":3,"file":"cas.d.ts","sourceRoot":"","sources":["../src/cas.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,qBAAa,WAAW;IAMpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAExB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAP/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAGtB,IAAI,EAAE,MAAM,EACK,MAAM,CAAC,EAAE,YAAY,YAAA,EACtC,MAAM,SAAoC,EACzB,WAAW,CAAC,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,aAAA;IAMpD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAmBjD,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBjD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKzC;;;OAGG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBhE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAK7B;;;;OAIG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWjD;;;OAGG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/C;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAmBpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;YAKd,WAAW;CAwB1B"}
package/dist/cas.js CHANGED
@@ -1,14 +1,25 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { createReadStream } from "node:fs";
3
- import { constants, copyFile, mkdir, readFile, rename, rm, stat, writeFile, } from "node:fs/promises";
3
+ import { constants, copyFile, mkdir, readdir, readFile, rename, rm, stat, writeFile, } from "node:fs/promises";
4
4
  import * as path from "node:path";
5
5
  import { v7 as uuidv7 } from "uuid";
6
+ /**
7
+ * Local content-addressed store with an optional remote ContentStore.
8
+ *
9
+ * Objects are content-immutable (a hash always names the same bytes) but no
10
+ * longer undeletable: `deleteLocal` and `unpublish` support the forgettable
11
+ * data policy. Deleting an object that versioned rows still reference turns
12
+ * those rows into tombstones — the `objects` table keeps hash + size and
13
+ * reads surface OBJECT_UNAVAILABLE through `ensureLocal`.
14
+ */
6
15
  export class ObjectStore {
7
16
  remote;
17
+ isForgotten;
8
18
  root;
9
19
  prefix;
10
- constructor(root, remote, prefix = "superlzy-media/videobook/sha256") {
20
+ constructor(root, remote, prefix = "superlzy-media/videobook/sha256", isForgotten) {
11
21
  this.remote = remote;
22
+ this.isForgotten = isForgotten;
12
23
  this.root = root;
13
24
  this.prefix = prefix.replace(/^\/+|\/+$/g, "");
14
25
  }
@@ -75,16 +86,14 @@ export class ObjectStore {
75
86
  if (!current.exists) {
76
87
  await this.remote.uploadFile(key, this.pathFor(hash));
77
88
  }
78
- else if (current.size !== undefined &&
79
- current.size !== expectedSize) {
89
+ else if (current.size !== undefined && current.size !== expectedSize) {
80
90
  throw new Error(`Remote object size mismatch: ${hash}`);
81
91
  }
82
92
  const verified = await this.remote.head(key);
83
93
  if (!verified.exists) {
84
94
  throw new Error(`Remote object verification failed: ${hash}`);
85
95
  }
86
- if (verified.size !== undefined &&
87
- verified.size !== expectedSize) {
96
+ if (verified.size !== undefined && verified.size !== expectedSize) {
88
97
  throw new Error(`Remote object size mismatch: ${hash}`);
89
98
  }
90
99
  }
@@ -92,11 +101,74 @@ export class ObjectStore {
92
101
  validateHash(hash);
93
102
  return path.join(this.root, hash.slice(0, 2), hash);
94
103
  }
104
+ /**
105
+ * Removes the local copy of an object. Returns whether a local file was
106
+ * actually removed; deleting an object that is not stored locally is not
107
+ * an error.
108
+ */
109
+ async deleteLocal(hash) {
110
+ const destination = this.pathFor(hash);
111
+ try {
112
+ await rm(destination);
113
+ return true;
114
+ }
115
+ catch (error) {
116
+ if (error.code === "ENOENT")
117
+ return false;
118
+ throw error;
119
+ }
120
+ }
121
+ /**
122
+ * Unpublishes an object from the remote content store. Returns whether a
123
+ * remote object was deleted. Without a configured remote this is a no-op.
124
+ */
125
+ async unpublish(hash) {
126
+ if (!this.remote)
127
+ return false;
128
+ const key = this.keyFor(hash);
129
+ const current = await this.remote.head(key);
130
+ if (!current.exists)
131
+ return false;
132
+ await this.remote.delete(key);
133
+ return true;
134
+ }
135
+ /**
136
+ * Lists every object hash stored locally, including stray files that have
137
+ * no `objects` row (for example leftovers from an interrupted import).
138
+ */
139
+ async listLocal() {
140
+ const hashes = [];
141
+ let fanout;
142
+ try {
143
+ fanout = await readdir(this.root);
144
+ }
145
+ catch (error) {
146
+ if (error.code === "ENOENT")
147
+ return [];
148
+ throw error;
149
+ }
150
+ for (const directory of fanout.sort()) {
151
+ if (!/^[a-f0-9]{2}$/.test(directory))
152
+ continue;
153
+ const entries = await readdir(path.join(this.root, directory));
154
+ for (const entry of entries.sort()) {
155
+ if (/^[a-f0-9]{64}$/.test(entry))
156
+ hashes.push(entry);
157
+ }
158
+ }
159
+ return hashes;
160
+ }
95
161
  keyFor(hash) {
96
162
  validateHash(hash);
97
163
  return `${this.prefix}/${hash.slice(0, 2)}/${hash}`;
98
164
  }
99
165
  async ensureLocal(hash) {
166
+ // A forgotten object must stay forgotten: refuse the read before even
167
+ // looking at local bytes, so neither a lingering local file nor a
168
+ // configured remote can resurrect deleted content.
169
+ if (this.isForgotten?.(hash)) {
170
+ throw new Error(`Object unavailable: ${hash}`);
171
+ }
100
172
  const destination = this.pathFor(hash);
101
173
  try {
102
174
  await stat(destination);
package/dist/cas.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cas.js","sourceRoot":"","sources":["../src/cas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cas.js","sourceRoot":"","sources":["../src/cas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { NotebookCell } from "./notebook/types.js";
2
+ export declare const SCHEMA_VERSION = 22;
3
+ export declare const CELLS_TABLE_SCHEMA: readonly [{
4
+ readonly column: "notebook_id";
5
+ readonly type: "TEXT";
6
+ }, {
7
+ readonly column: "cell_id";
8
+ readonly type: "TEXT";
9
+ }, {
10
+ readonly column: "type";
11
+ readonly type: "TEXT";
12
+ }, {
13
+ readonly column: "label";
14
+ readonly type: "TEXT";
15
+ }, {
16
+ readonly column: "grid_row";
17
+ readonly type: "INTEGER";
18
+ }, {
19
+ readonly column: "grid_column";
20
+ readonly type: "INTEGER";
21
+ }, {
22
+ readonly column: "output_entity_id";
23
+ readonly type: "TEXT";
24
+ }, {
25
+ readonly column: "prompt";
26
+ readonly type: "TEXT";
27
+ }, {
28
+ readonly column: "provider";
29
+ readonly type: "TEXT";
30
+ }, {
31
+ readonly column: "model";
32
+ readonly type: "TEXT";
33
+ }, {
34
+ readonly column: "operation";
35
+ readonly type: "TEXT";
36
+ }, {
37
+ readonly column: "tool";
38
+ readonly type: "TEXT";
39
+ }, {
40
+ readonly column: "inputs_json";
41
+ readonly type: "TEXT";
42
+ }, {
43
+ readonly column: "output_artifact_id";
44
+ readonly type: "TEXT";
45
+ }];
46
+ export type CellTableColumn = (typeof CELLS_TABLE_SCHEMA)[number]["column"];
47
+ export type CellTableColumnType = (typeof CELLS_TABLE_SCHEMA)[number]["type"];
48
+ export declare const CELLS_TABLE_COLUMNS: readonly CellTableColumn[];
49
+ export type CellTableValue = number | string | null;
50
+ export interface CellTableRow {
51
+ column: CellTableColumn;
52
+ type: CellTableColumnType;
53
+ value: CellTableValue;
54
+ }
55
+ export declare function notebookCellTableRows(notebookId: string, cell: NotebookCell): CellTableRow[];
56
+ //# sourceMappingURL=catalog-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-metadata.d.ts","sourceRoot":"","sources":["../src/catalog-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAerB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5E,MAAM,MAAM,mBAAmB,GAC7B,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9C,eAAO,MAAM,mBAAmB,EAAE,SAAS,eAAe,EACV,CAAC;AACjD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,YAAY,GACjB,YAAY,EAAE,CAsBhB"}
@@ -0,0 +1,42 @@
1
+ export const SCHEMA_VERSION = 22;
2
+ export const CELLS_TABLE_SCHEMA = [
3
+ { column: "notebook_id", type: "TEXT" },
4
+ { column: "cell_id", type: "TEXT" },
5
+ { column: "type", type: "TEXT" },
6
+ { column: "label", type: "TEXT" },
7
+ { column: "grid_row", type: "INTEGER" },
8
+ { column: "grid_column", type: "INTEGER" },
9
+ { column: "output_entity_id", type: "TEXT" },
10
+ { column: "prompt", type: "TEXT" },
11
+ { column: "provider", type: "TEXT" },
12
+ { column: "model", type: "TEXT" },
13
+ { column: "operation", type: "TEXT" },
14
+ { column: "tool", type: "TEXT" },
15
+ { column: "inputs_json", type: "TEXT" },
16
+ { column: "output_artifact_id", type: "TEXT" },
17
+ ];
18
+ export const CELLS_TABLE_COLUMNS = CELLS_TABLE_SCHEMA.map(({ column }) => column);
19
+ export function notebookCellTableRows(notebookId, cell) {
20
+ const values = {
21
+ notebook_id: notebookId,
22
+ cell_id: cell.id,
23
+ type: cell.type,
24
+ label: cell.label ?? null,
25
+ grid_row: cell.slot.row,
26
+ grid_column: cell.slot.column,
27
+ output_entity_id: cell.outputEntityId ?? null,
28
+ prompt: cell.prompt ?? null,
29
+ provider: cell.provider ?? null,
30
+ model: cell.model ?? null,
31
+ operation: cell.operation ?? null,
32
+ tool: cell.tool ?? null,
33
+ inputs_json: JSON.stringify(cell.inputs ?? {}),
34
+ output_artifact_id: cell.outputArtifactId ?? null,
35
+ };
36
+ return CELLS_TABLE_SCHEMA.map(({ column, type }) => ({
37
+ column,
38
+ type,
39
+ value: values[column],
40
+ }));
41
+ }
42
+ //# sourceMappingURL=catalog-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-metadata.js","sourceRoot":"","sources":["../src/catalog-metadata.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE;IACvC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;IACnC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAChC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IACjC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;IACvC,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;IAC1C,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5C,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAClC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE;IACpC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IACjC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE;IACrC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAChC,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE;IACvC,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,EAAE;CACtC,CAAC;AAKX,MAAM,CAAC,MAAM,mBAAmB,GAC9B,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;AASjD,MAAM,UAAU,qBAAqB,CACnC,UAAkB,EAClB,IAAkB;IAElB,MAAM,MAAM,GAA4C;QACtD,WAAW,EAAE,UAAU;QACvB,OAAO,EAAE,IAAI,CAAC,EAAE;QAChB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;QACzB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;QACvB,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;QAC7B,gBAAgB,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;QAC7C,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;QAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;QACjC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;QACvB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAC9C,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI;KAClD,CAAC;IACF,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM;QACN,IAAI;QACJ,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;KACtB,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -25,9 +25,10 @@ async function recordPrompt(context, input) {
25
25
  const promptId = newUuidV7();
26
26
  const mutation = await context.store.semantic({
27
27
  operation: "record_prompt",
28
+ tables: ["prompt_entries"],
28
29
  details: { surface },
29
30
  writeSet: [`prompt:${promptId}`],
30
- }, ["prompt_entries"], (_operationId, now) => {
31
+ }, (_operationId, now) => {
31
32
  context.store.db
32
33
  .prepare(`INSERT INTO prompt_entries(
33
34
  prompt_id, surface, prompt, context_json, created_at
@@ -73,9 +74,10 @@ async function appendMessage(context, input) {
73
74
  const messageId = newUuidV7();
74
75
  const mutation = await context.store.semantic({
75
76
  operation: "append_message",
77
+ tables: ["messages"],
76
78
  details: { messageId, role },
77
79
  writeSet: [`message:${messageId}`],
78
- }, ["messages"], (_operationId, now) => {
80
+ }, (_operationId, now) => {
79
81
  context.store.db
80
82
  .prepare(`INSERT INTO messages(message_id, role, body_json, created_at)
81
83
  VALUES (?, ?, ?, ?)`)
@@ -1 +1 @@
1
- {"version":3,"file":"communications.js","sourceRoot":"","sources":["../src/communications.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"communications.js","sourceRoot":"","sources":["../src/communications.ts"],"names":[],"mappings":"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"}
package/dist/context.d.ts CHANGED
@@ -3,12 +3,12 @@ import { ObjectStore } from "./cas.js";
3
3
  import { DoltStore } from "./store.js";
4
4
  interface BookRow {
5
5
  book_id: string;
6
- slug: string;
6
+ name: string;
7
7
  created_at: number;
8
8
  }
9
9
  export interface ArtifactRow {
10
10
  artifact_id: string;
11
- slug: string;
11
+ label: string | null;
12
12
  kind: ArtifactKind;
13
13
  created_at: number;
14
14
  }
@@ -17,7 +17,6 @@ export interface FileRow {
17
17
  path: string;
18
18
  object_hash: string;
19
19
  size_bytes: number;
20
- mtime_ms: number;
21
20
  created_at: number;
22
21
  }
23
22
  export declare class EngineContext {
@@ -25,17 +24,21 @@ export declare class EngineContext {
25
24
  readonly objects: ObjectStore;
26
25
  readonly config: EngineConfig;
27
26
  constructor(config: EngineConfig);
27
+ /**
28
+ * Whether the object row carries a forget tombstone. Forgotten bytes must
29
+ * never be resurrected — not even from a configured remote store — so
30
+ * ObjectStore consults this before any read or lazy download.
31
+ */
32
+ isForgottenObject(hash: string): boolean;
28
33
  bookRow(): BookRow;
29
34
  book(row?: BookRow): Book;
30
- artifactRow(reference: string): ArtifactRow;
35
+ artifactRow(artifactId: string): ArtifactRow;
31
36
  artifactRowById(artifactId: string): ArtifactRow;
32
37
  artifact(row: ArtifactRow): Artifact;
33
38
  artifactPath(artifactId: string): string;
34
39
  ensureArtifactWorkspace(artifactId: string): string;
35
40
  close(): void;
36
41
  }
37
- export declare function normalizeBookSlug(input: string): string;
38
- export declare function isValidBookSlug(input: string): boolean;
39
42
  export declare function resultOf<T>(work: () => Promise<Result<T, EngineError> | T>): Promise<Result<T, EngineError>>;
40
43
  export declare function syncResultOf<T>(work: () => T): Result<T, EngineError>;
41
44
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,MAAM,EACP,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AAEpD,UAAU,OAAO;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;gBAElB,MAAM,EAAE,YAAY;IA0DhC,OAAO,IAAI,OAAO;IAalB,IAAI,CAAC,GAAG,UAAiB,GAAG,IAAI;IAQhC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW;IAqB3C,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAiBhD,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,QAAQ;IAUpC,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAIxC,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAMnD,KAAK,IAAI,IAAI;CAGd;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUvD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMtD;AAuCD,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,GAC9C,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAcjC;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAMrE"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,MAAM,EACP,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AAEpD,UAAU,OAAO;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;gBAElB,MAAM,EAAE,YAAY;IAyDhC;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IASxC,OAAO,IAAI,OAAO;IAalB,IAAI,CAAC,GAAG,UAAiB,GAAG,IAAI;IAQhC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAI5C,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAiBhD,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,QAAQ;IAUpC,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAIxC,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAMnD,KAAK,IAAI,IAAI;CAGd;AAmDD,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,GAC9C,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAUjC;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAMrE"}
package/dist/context.js CHANGED
@@ -32,31 +32,44 @@ export class EngineContext {
32
32
  const databasePath = path.join(storage.dataDir, "videobook.db");
33
33
  const initialBook = !existsSync(databasePath)
34
34
  ? (() => {
35
- if (!config.initialBookSlug) {
35
+ const name = config.initialBookName?.trim();
36
+ if (!name) {
36
37
  throw new EngineFault({
37
38
  code: "INVALID_INPUT",
38
- message: "initialBookSlug is required when creating a new engine root",
39
+ message: "initialBookName is required when creating a new engine root",
39
40
  });
40
41
  }
41
- return {
42
- bookId: uuidv7(),
43
- slug: normalizeBookSlug(config.initialBookSlug),
44
- };
42
+ return { bookId: uuidv7(), name };
45
43
  })()
46
44
  : undefined;
45
+ if (config.identity)
46
+ assertValidIdentity(config.identity);
47
47
  this.store = new DoltStore({
48
48
  dataDir: this.config.dataDir,
49
49
  workspaceDir: this.config.workspaceDir,
50
50
  initialBook,
51
- ...(config.catalogBackup
52
- ? { catalogBackup: config.catalogBackup }
51
+ semanticCommitBoundary: config.semanticCommitBoundary,
52
+ ...(config.identity
53
+ ? { author: `${config.identity.name} <${config.identity.email}>` }
53
54
  : {}),
55
+ ...(config.catalogBackup ? { catalogBackup: config.catalogBackup } : {}),
54
56
  });
55
- this.objects = new ObjectStore(this.store.objectsDir, config.remoteObjects, config.objectPrefix);
57
+ this.objects = new ObjectStore(this.store.objectsDir, config.remoteObjects, config.objectPrefix, (hash) => this.isForgottenObject(hash));
58
+ }
59
+ /**
60
+ * Whether the object row carries a forget tombstone. Forgotten bytes must
61
+ * never be resurrected — not even from a configured remote store — so
62
+ * ObjectStore consults this before any read or lazy download.
63
+ */
64
+ isForgottenObject(hash) {
65
+ const row = this.store.db
66
+ .prepare("SELECT 1 AS present FROM objects WHERE object_hash=? AND forgotten_at IS NOT NULL")
67
+ .get(hash);
68
+ return row !== undefined;
56
69
  }
57
70
  bookRow() {
58
71
  const row = this.store.db
59
- .prepare("SELECT book_id, slug, created_at FROM book")
72
+ .prepare("SELECT book_id, name, created_at FROM book")
60
73
  .get();
61
74
  if (!row) {
62
75
  throw new EngineFault({
@@ -69,29 +82,16 @@ export class EngineContext {
69
82
  book(row = this.bookRow()) {
70
83
  return {
71
84
  bookId: row.book_id,
72
- slug: row.slug,
85
+ name: row.name,
73
86
  createdAt: row.created_at,
74
87
  };
75
88
  }
76
- artifactRow(reference) {
77
- const row = this.store.db
78
- .prepare(`SELECT artifact_id, slug, kind, created_at
79
- FROM artifacts
80
- WHERE artifact_id = ? OR slug = ?
81
- ORDER BY CASE WHEN artifact_id = ? THEN 0 ELSE 1 END
82
- LIMIT 1`)
83
- .get(reference, reference, reference);
84
- if (!row) {
85
- throw new EngineFault({
86
- code: "NOT_FOUND",
87
- message: `Artifact not found: ${reference}`,
88
- });
89
- }
90
- return row;
89
+ artifactRow(artifactId) {
90
+ return this.artifactRowById(artifactId);
91
91
  }
92
92
  artifactRowById(artifactId) {
93
93
  const row = this.store.db
94
- .prepare(`SELECT artifact_id, slug, kind, created_at
94
+ .prepare(`SELECT artifact_id, label, kind, created_at
95
95
  FROM artifacts
96
96
  WHERE artifact_id = ?`)
97
97
  .get(artifactId);
@@ -106,7 +106,7 @@ export class EngineContext {
106
106
  artifact(row) {
107
107
  return {
108
108
  artifactId: row.artifact_id,
109
- slug: row.slug,
109
+ ...(row.label === null ? {} : { label: row.label }),
110
110
  kind: row.kind,
111
111
  createdAt: row.created_at,
112
112
  path: this.artifactPath(row.artifact_id),
@@ -124,33 +124,26 @@ export class EngineContext {
124
124
  this.store.close();
125
125
  }
126
126
  }
127
- export function normalizeBookSlug(input) {
128
- const slug = input
129
- .trim()
130
- .toLowerCase()
131
- .replace(/[^a-z0-9]+/g, "-")
132
- .replace(/^-+|-+$/g, "");
133
- if (!slug || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(slug)) {
134
- throw new Error(`Invalid book slug: ${input}`);
135
- }
136
- return slug;
137
- }
138
- export function isValidBookSlug(input) {
139
- try {
140
- return normalizeBookSlug(input) === input;
127
+ function assertValidIdentity(identity) {
128
+ const name = identity.name.trim();
129
+ const email = identity.email.trim();
130
+ if (!name || /[<>\u0000-\u001f\u007f]/u.test(name)) {
131
+ throw new EngineFault({
132
+ code: "INVALID_INPUT",
133
+ message: "identity.name must be non-empty and free of angle brackets and control characters",
134
+ });
141
135
  }
142
- catch {
143
- return false;
136
+ if (!/^[^\s<>@]+@[^\s<>@]+$/.test(email)) {
137
+ throw new EngineFault({
138
+ code: "INVALID_INPUT",
139
+ message: "identity.email must be a plausible address (name@host)",
140
+ });
144
141
  }
145
142
  }
146
143
  function toError(error) {
147
144
  if (error instanceof EngineFault)
148
145
  return error.error;
149
146
  const message = error instanceof Error ? error.message : String(error);
150
- if (message.includes("artifacts_active_slug") ||
151
- /UNIQUE constraint failed: artifacts\.slug/i.test(message)) {
152
- return { code: "SLUG_CONFLICT", message };
153
- }
154
147
  if (/UNIQUE constraint failed/i.test(message)) {
155
148
  return { code: "ALREADY_EXISTS", message };
156
149
  }
@@ -175,9 +168,7 @@ function toError(error) {
175
168
  export async function resultOf(work) {
176
169
  try {
177
170
  const value = await work();
178
- if (typeof value === "object" &&
179
- value !== null &&
180
- "ok" in value) {
171
+ if (typeof value === "object" && value !== null && "ok" in value) {
181
172
  return value;
182
173
  }
183
174
  return { ok: true, value: value };