@claudexor/daemon 5.0.2 → 5.1.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 (156) hide show
  1. package/dist/client.d.ts +56 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/deferred-message-owner.d.ts +4 -0
  4. package/dist/deferred-message-owner.d.ts.map +1 -1
  5. package/dist/deferred-messages.d.ts +22 -1
  6. package/dist/deferred-messages.d.ts.map +1 -1
  7. package/dist/deferred-messages.js +50 -15
  8. package/dist/deferred-messages.js.map +1 -1
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/interactions.d.ts.map +1 -1
  14. package/dist/interactions.js +29 -7
  15. package/dist/interactions.js.map +1 -1
  16. package/dist/model-operation-execution.d.ts +10 -0
  17. package/dist/model-operation-execution.d.ts.map +1 -1
  18. package/dist/model-operation-execution.js +12 -5
  19. package/dist/model-operation-execution.js.map +1 -1
  20. package/dist/model-operations.d.ts +1 -0
  21. package/dist/model-operations.d.ts.map +1 -1
  22. package/dist/model-operations.js +20 -10
  23. package/dist/model-operations.js.map +1 -1
  24. package/dist/quota-registry-support.d.ts.map +1 -1
  25. package/dist/quota-registry-support.js +14 -9
  26. package/dist/quota-registry-support.js.map +1 -1
  27. package/dist/server.d.ts +2 -2
  28. package/dist/server.d.ts.map +1 -1
  29. package/dist/server.js.map +1 -1
  30. package/dist/store/blob-files.d.ts +2 -2
  31. package/dist/store/blob-files.d.ts.map +1 -1
  32. package/dist/store/blob-files.js +1 -0
  33. package/dist/store/blob-files.js.map +1 -1
  34. package/dist/store/command-prune.d.ts.map +1 -1
  35. package/dist/store/command-prune.js +4 -0
  36. package/dist/store/command-prune.js.map +1 -1
  37. package/dist/store/commands.d.ts +7 -2
  38. package/dist/store/commands.d.ts.map +1 -1
  39. package/dist/store/commands.js +38 -11
  40. package/dist/store/commands.js.map +1 -1
  41. package/dist/store/deferred-message-rows.d.ts +10 -0
  42. package/dist/store/deferred-message-rows.d.ts.map +1 -1
  43. package/dist/store/deferred-message-rows.js +28 -1
  44. package/dist/store/deferred-message-rows.js.map +1 -1
  45. package/dist/store/deferred-messages.d.ts +10 -3
  46. package/dist/store/deferred-messages.d.ts.map +1 -1
  47. package/dist/store/deferred-messages.js +45 -9
  48. package/dist/store/deferred-messages.js.map +1 -1
  49. package/dist/store/external-files.d.ts +17 -0
  50. package/dist/store/external-files.d.ts.map +1 -1
  51. package/dist/store/external-files.js +54 -0
  52. package/dist/store/external-files.js.map +1 -1
  53. package/dist/store/idempotency.d.ts +1 -1
  54. package/dist/store/idempotency.d.ts.map +1 -1
  55. package/dist/store/idempotency.js +2 -1
  56. package/dist/store/idempotency.js.map +1 -1
  57. package/dist/store/libuv-pool.d.ts +25 -0
  58. package/dist/store/libuv-pool.d.ts.map +1 -0
  59. package/dist/store/libuv-pool.js +96 -0
  60. package/dist/store/libuv-pool.js.map +1 -0
  61. package/dist/store/maintenance-worker.d.ts.map +1 -1
  62. package/dist/store/maintenance-worker.js +45 -0
  63. package/dist/store/maintenance-worker.js.map +1 -1
  64. package/dist/store/maintenance.d.ts +28 -2
  65. package/dist/store/maintenance.d.ts.map +1 -1
  66. package/dist/store/maintenance.js +36 -6
  67. package/dist/store/maintenance.js.map +1 -1
  68. package/dist/store/project-router.d.ts +107 -1
  69. package/dist/store/project-router.d.ts.map +1 -1
  70. package/dist/store/project-router.js +30 -0
  71. package/dist/store/project-router.js.map +1 -1
  72. package/dist/store/publish-blob.d.ts.map +1 -1
  73. package/dist/store/publish-blob.js +36 -14
  74. package/dist/store/publish-blob.js.map +1 -1
  75. package/dist/store/purge-files.d.ts +11 -2
  76. package/dist/store/purge-files.d.ts.map +1 -1
  77. package/dist/store/purge-files.js +34 -7
  78. package/dist/store/purge-files.js.map +1 -1
  79. package/dist/store/resource-release.d.ts +15 -0
  80. package/dist/store/resource-release.d.ts.map +1 -0
  81. package/dist/store/resource-release.js +56 -0
  82. package/dist/store/resource-release.js.map +1 -0
  83. package/dist/store/resource-rows.d.ts +2 -0
  84. package/dist/store/resource-rows.d.ts.map +1 -1
  85. package/dist/store/resource-rows.js.map +1 -1
  86. package/dist/store/resource-uses.d.ts +84 -0
  87. package/dist/store/resource-uses.d.ts.map +1 -0
  88. package/dist/store/resource-uses.js +129 -0
  89. package/dist/store/resource-uses.js.map +1 -0
  90. package/dist/store/resources.d.ts +16 -2
  91. package/dist/store/resources.d.ts.map +1 -1
  92. package/dist/store/resources.js +42 -3
  93. package/dist/store/resources.js.map +1 -1
  94. package/dist/store/retention-changes.d.ts +8 -2
  95. package/dist/store/retention-changes.d.ts.map +1 -1
  96. package/dist/store/retention-changes.js +24 -11
  97. package/dist/store/retention-changes.js.map +1 -1
  98. package/dist/store/retention-generations.d.ts +7 -2
  99. package/dist/store/retention-generations.d.ts.map +1 -1
  100. package/dist/store/retention-generations.js +71 -26
  101. package/dist/store/retention-generations.js.map +1 -1
  102. package/dist/store/retention-reference-reader.d.ts +26 -1
  103. package/dist/store/retention-reference-reader.d.ts.map +1 -1
  104. package/dist/store/retention-reference-reader.js +31 -7
  105. package/dist/store/retention-reference-reader.js.map +1 -1
  106. package/dist/store/retention-references.d.ts +5 -0
  107. package/dist/store/retention-references.d.ts.map +1 -1
  108. package/dist/store/retention-references.js +35 -6
  109. package/dist/store/retention-references.js.map +1 -1
  110. package/dist/store/schema.d.ts +2 -2
  111. package/dist/store/schema.d.ts.map +1 -1
  112. package/dist/store/schema.js +17 -2
  113. package/dist/store/schema.js.map +1 -1
  114. package/dist/store/sql-command-router.d.ts +10 -1
  115. package/dist/store/sql-command-router.d.ts.map +1 -1
  116. package/dist/store/sql-command-router.js +10 -1
  117. package/dist/store/sql-command-router.js.map +1 -1
  118. package/dist/store/sql-daemon-services.d.ts.map +1 -1
  119. package/dist/store/sql-daemon-services.js +9 -8
  120. package/dist/store/sql-daemon-services.js.map +1 -1
  121. package/dist/store/sql-validation.d.ts.map +1 -1
  122. package/dist/store/sql-validation.js +1 -0
  123. package/dist/store/sql-validation.js.map +1 -1
  124. package/dist/store/terminal-files.d.ts +6 -3
  125. package/dist/store/terminal-files.d.ts.map +1 -1
  126. package/dist/store/terminal-files.js +6 -38
  127. package/dist/store/terminal-files.js.map +1 -1
  128. package/dist/store/thread-closure.d.ts +62 -0
  129. package/dist/store/thread-closure.d.ts.map +1 -0
  130. package/dist/store/thread-closure.js +290 -0
  131. package/dist/store/thread-closure.js.map +1 -0
  132. package/dist/store/thread-retirement.d.ts +29 -0
  133. package/dist/store/thread-retirement.d.ts.map +1 -0
  134. package/dist/store/thread-retirement.js +123 -0
  135. package/dist/store/thread-retirement.js.map +1 -0
  136. package/dist/store/threads.d.ts.map +1 -1
  137. package/dist/store/threads.js +6 -1
  138. package/dist/store/threads.js.map +1 -1
  139. package/dist/store/upload-imports.d.ts.map +1 -1
  140. package/dist/store/upload-imports.js +16 -3
  141. package/dist/store/upload-imports.js.map +1 -1
  142. package/dist/store/uploads.d.ts +13 -2
  143. package/dist/store/uploads.d.ts.map +1 -1
  144. package/dist/store/uploads.js +76 -30
  145. package/dist/store/uploads.js.map +1 -1
  146. package/dist/store-contracts.d.ts +25 -2
  147. package/dist/store-contracts.d.ts.map +1 -1
  148. package/dist/terminal-authority.d.ts +1 -1
  149. package/dist/thread-lifecycle.d.ts +3 -1
  150. package/dist/thread-lifecycle.d.ts.map +1 -1
  151. package/dist/thread-lifecycle.js +2 -2
  152. package/dist/thread-lifecycle.js.map +1 -1
  153. package/dist/writer-lease.d.ts.map +1 -1
  154. package/dist/writer-lease.js +6 -3
  155. package/dist/writer-lease.js.map +1 -1
  156. package/package.json +5 -5
@@ -0,0 +1,56 @@
1
+ import { ControlResourceRelease, ControlResourceReleaseRequest } from "@claudexor/schema";
2
+ import { deleteUnownedInlineInTx } from "./blob-files.js";
3
+ import { runMutation } from "./mutation.js";
4
+ import { assertResourceId, purposeMismatch, putResourceInTx, readResourceRow, resourceError, resourceSha, } from "./resource-rows.js";
5
+ function receipt(storeId, row) {
6
+ return ControlResourceRelease.parse({
7
+ storeId,
8
+ resourceId: row.resource.resourceId,
9
+ sha256: row.resource.sha256,
10
+ state: "released",
11
+ releasedAt: row.releasedAt,
12
+ });
13
+ }
14
+ /**
15
+ * Release one MANAGED ordinary resource (#249): its caller relinquishes every
16
+ * future reference to the ID. Only the row's state changes, in one transaction;
17
+ * every accepted holder (`resource_use`) and every other live resource with the
18
+ * same digest keep the bytes, so the blob GC that follows frees nothing they
19
+ * need. Naturally idempotent: a repeat answers the first release unchanged.
20
+ * Refusals precede any effect. `sha` is set when this call released the row.
21
+ */
22
+ export function releaseManagedResource(store, id, raw) {
23
+ const request = ControlResourceReleaseRequest.parse(raw);
24
+ const storeId = store.storeId;
25
+ if (!storeId)
26
+ throw Object.assign(resourceError("durable store identity is unavailable", 503, "resource_release_unavailable"), { retryable: true });
27
+ if (request.expectedStoreId !== storeId)
28
+ throw resourceError("this release names another durable store", 409, "store_mismatch");
29
+ assertResourceId(id);
30
+ const row = readResourceRow(store, id);
31
+ if (!row)
32
+ throw resourceError(`no such resource: ${id}`, 404, "resource_not_found");
33
+ if (row.resource.purpose !== undefined)
34
+ throw purposeMismatch();
35
+ if (row.resource.sha256 !== request.sha256)
36
+ throw resourceError("the release names another digest than this resource", 409, "resource_digest_mismatch");
37
+ if (row.resource.lifetime !== "managed")
38
+ throw Object.assign(resourceError("this resource keeps indefinite reuse; only a managed import can be released", 409, "resource_lifetime_indefinite"), { retryable: false });
39
+ if (row.state === "released")
40
+ return { receipt: receipt(storeId, row), sha: null };
41
+ if (row.state !== "ready")
42
+ throw Object.assign(resourceError("resource publication is still in progress", 409, "resource_unavailable"), { retryable: true });
43
+ const sha = resourceSha(row.resource);
44
+ const released = runMutation(store, (tx) => {
45
+ const current = readResourceRow(tx, id);
46
+ if (current.state === "released")
47
+ return current;
48
+ const next = { ...current, state: "released", releasedAt: tx.now().toISOString() };
49
+ putResourceInTx(tx, next);
50
+ deleteUnownedInlineInTx(tx, sha);
51
+ tx.changes.blobChanged(sha);
52
+ return next;
53
+ });
54
+ return { receipt: receipt(storeId, released), sha };
55
+ }
56
+ //# sourceMappingURL=resource-release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-release.js","sourceRoot":"","sources":["../../src/store/resource-release.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,8 @@ export interface UploadRow {
25
25
  export interface UploadImportBinding {
26
26
  keyDigest: string;
27
27
  sha256: string;
28
+ /** The import's opt-in lifetime, stamped on the resource it publishes. */
29
+ lifetime?: "managed";
28
30
  }
29
31
  type SqlReader = Pick<SqlWriteContext, "prepare">;
30
32
  export declare function readResourceRow(sql: SqlReader, id: string): ResourceRow | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"resource-rows.d.ts","sourceRoot":"","sources":["../../src/store/resource-rows.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAEzE,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AAC5E,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AACD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;CACzB;AACD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,0BAA0B,CAAC;IACpC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;IACtE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,4FAA4F;IAC5F,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AACD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;AAClD,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAgBnF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CA4B/E;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAuB5E;AAED,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAiBxE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAM,EAAE,IAAI,SAAmB,GAAG,KAAK,CAE3F;AACD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAGjD;AACD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG,MAAM,CAI7E;AACD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,eAAe,GAAG,eAAe,CAMrE;AACD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,EAAE,eAAe,GAAG,IAAI,CAQpF;AACD,wBAAgB,eAAe,IAAI,KAAK,CAMvC;AACD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAWrF"}
1
+ {"version":3,"file":"resource-rows.d.ts","sourceRoot":"","sources":["../../src/store/resource-rows.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAEzE,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AAC5E,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AACD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;CACzB;AACD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,0BAA0B,CAAC;IACpC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;IACtE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,4FAA4F;IAC5F,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AACD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,KAAK,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;AAClD,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAgBnF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CA4B/E;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAuB5E;AAED,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAiBxE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAM,EAAE,IAAI,SAAmB,GAAG,KAAK,CAE3F;AACD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAGjD;AACD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG,MAAM,CAI7E;AACD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,eAAe,GAAG,eAAe,CAMrE;AACD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,EAAE,eAAe,GAAG,IAAI,CAQpF;AACD,wBAAgB,eAAe,IAAI,KAAK,CAMvC;AACD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAWrF"}
@@ -1 +1 @@
1
- {"version":3,"file":"resource-rows.js","sourceRoot":"","sources":["../../src/store/resource-rows.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource-rows.js","sourceRoot":"","sources":["../../src/store/resource-rows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import type { ControlResource } from "@claudexor/schema";
2
+ import type { BlobFiles } from "./blob-files.js";
3
+ import { type MutationContext, type SqlWriteContext } from "./mutation.js";
4
+ import { type ResourceRow } from "./resource-rows.js";
5
+ import type { EngineStore } from "./store.js";
6
+ /**
7
+ * Accepted owners holding a MANAGED ordinary resource (#249). A managed ID's
8
+ * caller may release it; from then on no new reference is admitted, while every
9
+ * owner that accepted the ID before keeps its bytes. One row per (resource,
10
+ * owner), written in that owner's own acceptance transaction and dropped when
11
+ * the owner is retired by its existing lifecycle (command retention, draft
12
+ * replace/clear/dispatch, thread purge). Default and legacy resources have no
13
+ * rows: their `ready` row already holds the bytes indefinitely.
14
+ */
15
+ export type ResourceUseOwner = "command" | "turn" | "deferred_message";
16
+ export interface ResourceUseHolder {
17
+ owner: ResourceUseOwner;
18
+ id: string;
19
+ }
20
+ type SqlReader = Pick<SqlWriteContext, "prepare">;
21
+ /** Resource ids named by request refs (`resourceId`) or resolved attachments (`resource_id`). */
22
+ export declare function referencedResourceIds(list: unknown): string[];
23
+ export declare function isManagedOrdinary(resource: ControlResource): boolean;
24
+ /** The typed refusal of a NEW reference to a released ID: never success, never a re-upload. */
25
+ export declare function releasedResourceError(resourceId: string, releasedAt: string | null): Error;
26
+ export declare function holdsResourceUse(sql: SqlReader, holder: ResourceUseHolder, resourceId: string): boolean;
27
+ /** A released managed row whose reader is not one of its accepted holders. */
28
+ export declare function refusedReleasedUse(sql: SqlReader, row: ResourceRow, holders: readonly ResourceUseHolder[]): boolean;
29
+ /**
30
+ * Inside the owner's acceptance transaction: hold every managed resource it
31
+ * names. A released one is admitted only when `holder` itself or `from` (the
32
+ * accepted owner this one derives from, a dispatching draft) already holds it;
33
+ * otherwise this is a new reference and the transaction refuses. Missing or
34
+ * unpublished resources are left to the existing resolver's refusals.
35
+ */
36
+ export declare function claimResourceUsesInTx(sql: SqlWriteContext, holder: ResourceUseHolder, ids: readonly string[], from?: ResourceUseHolder): void;
37
+ /** Retire one owner's holds except `keep`; returns their digests for the caller's file GC. */
38
+ export declare function dropResourceUsesInTx(sql: SqlWriteContext, holder: ResourceUseHolder, keep?: readonly string[]): string[];
39
+ /** Digests a commit released: their files go by the same post-commit collection as
40
+ * other released bodies, never left for the startup sweep. */
41
+ export declare function collectAfterCommit(tx: MutationContext, owner: {
42
+ store: EngineStore;
43
+ blobs: BlobFiles;
44
+ }, digests: readonly string[]): void;
45
+ /**
46
+ * Every thread write's holds, run after its rows by the one reducer all thread
47
+ * writers share (`applyInTx`: a turn, relink, retirement or a project removal
48
+ * that purges its trash): each written turn of a live thread holds its resolved
49
+ * attachments (a rewrite of an existing turn finds its own hold), and a purged
50
+ * thread's turns end theirs; a later rewrite of such a turn never holds again.
51
+ */
52
+ export declare function syncThreadResourceUsesInTx(tx: MutationContext, mutation: {
53
+ threads?: ReadonlyArray<{
54
+ id: string;
55
+ state: string;
56
+ }>;
57
+ turns?: ReadonlyArray<{
58
+ id: string;
59
+ thread_id: string;
60
+ attachments?: unknown;
61
+ }>;
62
+ }, owner: {
63
+ store: EngineStore;
64
+ blobs: BlobFiles;
65
+ }): void;
66
+ /**
67
+ * What a thread turn's command references: the turn's stored attachments (its
68
+ * params carry none). Only the turn's FIRST dispatch inherits the accepted turn's
69
+ * hold (`from`): the turn has no durable dispatch fact (`dispatched_at`, written
70
+ * with its first accepted product command and kept when command retention prunes
71
+ * that command) and no run. A refusal recorded before any command (a preflight or
72
+ * enqueue failure, or a stop before the first enqueue) leaves the turn undispatched,
73
+ * so its same-key repeat still dispatches it. Any later dispatch (Turn Retry, or a
74
+ * repeat after an accepted one) is a new reference, refused once released.
75
+ */
76
+ export declare function turnDispatchUses(sql: SqlReader, turnId: string | null): {
77
+ ids: string[];
78
+ from?: ResourceUseHolder;
79
+ };
80
+ /** In the acceptance transaction of a turn's product command: its first one is the
81
+ * turn's durable dispatch fact; a later one keeps the first instant. */
82
+ export declare function markTurnDispatchedInTx(sql: SqlWriteContext, turnId: string, at: string): void;
83
+ export {};
84
+ //# sourceMappingURL=resource-uses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-uses.d.ts","sourceRoot":"","sources":["../../src/store/resource-uses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAsB,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAA+C,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,kBAAkB,CAAC;AACvE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;CACZ;AACD,KAAK,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;AAElD,iGAAiG;AACjG,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAQ7D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAEpE;AAED,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAe1F;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAIT;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,SAAS,iBAAiB,EAAE,GACpC,OAAO,CAMT;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,IAAI,CAAC,EAAE,iBAAiB,GACvB,IAAI,CAYN;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,iBAAiB,EACzB,IAAI,GAAE,SAAS,MAAM,EAAO,GAC3B,MAAM,EAAE,CAUV;AAED;8DAC8D;AAC9D,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,eAAe,EACnB,KAAK,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,EAC/C,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,IAAI,CAIN;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,eAAe,EACnB,QAAQ,EAAE;IACR,OAAO,CAAC,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,KAAK,CAAC,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACjF,EACD,KAAK,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAC9C,IAAI,CAcN;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,iBAAiB,CAAA;CAAE,CAQ7C;AAED;wEACwE;AACxE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAK7F"}
@@ -0,0 +1,129 @@
1
+ import { collectReleasedBodies } from "./event-store.js";
2
+ import { requireTransaction } from "./mutation.js";
3
+ import { readResourceRow, resourceError, resourceSha } from "./resource-rows.js";
4
+ import { decodeBody } from "./thread-rows.js";
5
+ /** Resource ids named by request refs (`resourceId`) or resolved attachments (`resource_id`). */
6
+ export function referencedResourceIds(list) {
7
+ if (!Array.isArray(list))
8
+ return [];
9
+ const ids = new Set();
10
+ for (const item of list) {
11
+ const id = item?.["resourceId"] ?? item?.["resource_id"];
12
+ if (typeof id === "string")
13
+ ids.add(id);
14
+ }
15
+ return [...ids];
16
+ }
17
+ export function isManagedOrdinary(resource) {
18
+ return resource.lifetime === "managed" && resource.purpose === undefined;
19
+ }
20
+ /** The typed refusal of a NEW reference to a released ID: never success, never a re-upload. */
21
+ export function releasedResourceError(resourceId, releasedAt) {
22
+ return Object.assign(resourceError(`resource ${resourceId} was released by its caller and admits no new reference`, 410, "resource_released"), {
23
+ retryable: false,
24
+ context: { resourceId, releasedAt },
25
+ requiredActions: [
26
+ "Import the document again under a new import key to attach it to new work.",
27
+ ],
28
+ });
29
+ }
30
+ export function holdsResourceUse(sql, holder, resourceId) {
31
+ return !!sql
32
+ .prepare("SELECT 1 FROM resource_use WHERE resource_id=? AND owner=? AND owner_id=?")
33
+ .get(resourceId, holder.owner, holder.id);
34
+ }
35
+ /** A released managed row whose reader is not one of its accepted holders. */
36
+ export function refusedReleasedUse(sql, row, holders) {
37
+ return (row.state === "released" &&
38
+ isManagedOrdinary(row.resource) &&
39
+ !holders.some((holder) => holdsResourceUse(sql, holder, row.resource.resourceId)));
40
+ }
41
+ /**
42
+ * Inside the owner's acceptance transaction: hold every managed resource it
43
+ * names. A released one is admitted only when `holder` itself or `from` (the
44
+ * accepted owner this one derives from, a dispatching draft) already holds it;
45
+ * otherwise this is a new reference and the transaction refuses. Missing or
46
+ * unpublished resources are left to the existing resolver's refusals.
47
+ */
48
+ export function claimResourceUsesInTx(sql, holder, ids, from) {
49
+ requireTransaction(sql);
50
+ const insert = sql.prepare("INSERT OR IGNORE INTO resource_use(resource_id,owner,owner_id,sha256) VALUES(?,?,?,?)");
51
+ for (const id of ids) {
52
+ const row = readResourceRow(sql, id);
53
+ if (!row || !isManagedOrdinary(row.resource) || row.state === "publishing")
54
+ continue;
55
+ if (refusedReleasedUse(sql, row, from ? [holder, from] : [holder]))
56
+ throw releasedResourceError(id, row.releasedAt);
57
+ insert.run(id, holder.owner, holder.id, resourceSha(row.resource));
58
+ }
59
+ }
60
+ /** Retire one owner's holds except `keep`; returns their digests for the caller's file GC. */
61
+ export function dropResourceUsesInTx(sql, holder, keep = []) {
62
+ requireTransaction(sql);
63
+ return sql
64
+ .prepare(`DELETE FROM resource_use WHERE owner=? AND owner_id=?
65
+ AND resource_id NOT IN (SELECT value FROM json_each(?)) RETURNING sha256`)
66
+ .all(holder.owner, holder.id, JSON.stringify(keep)).map((row) => row.sha256);
67
+ }
68
+ /** Digests a commit released: their files go by the same post-commit collection as
69
+ * other released bodies, never left for the startup sweep. */
70
+ export function collectAfterCommit(tx, owner, digests) {
71
+ if (digests.length === 0)
72
+ return;
73
+ tx.changes.blobChanged(...digests);
74
+ tx.changes.afterCommit(() => collectReleasedBodies(owner.store, owner.blobs, digests));
75
+ }
76
+ /**
77
+ * Every thread write's holds, run after its rows by the one reducer all thread
78
+ * writers share (`applyInTx`: a turn, relink, retirement or a project removal
79
+ * that purges its trash): each written turn of a live thread holds its resolved
80
+ * attachments (a rewrite of an existing turn finds its own hold), and a purged
81
+ * thread's turns end theirs; a later rewrite of such a turn never holds again.
82
+ */
83
+ export function syncThreadResourceUsesInTx(tx, mutation, owner) {
84
+ const state = tx.prepare("SELECT state FROM thread WHERE id=?");
85
+ for (const turn of mutation.turns ?? []) {
86
+ if (state.get(turn.thread_id)?.state === "purged")
87
+ continue;
88
+ claimResourceUsesInTx(tx, { owner: "turn", id: turn.id }, referencedResourceIds(turn.attachments));
89
+ }
90
+ const released = (mutation.threads ?? []).flatMap((thread) => thread.state === "purged" ? dropThreadResourceUsesInTx(tx, thread.id) : []);
91
+ collectAfterCommit(tx, owner, released);
92
+ }
93
+ /**
94
+ * What a thread turn's command references: the turn's stored attachments (its
95
+ * params carry none). Only the turn's FIRST dispatch inherits the accepted turn's
96
+ * hold (`from`): the turn has no durable dispatch fact (`dispatched_at`, written
97
+ * with its first accepted product command and kept when command retention prunes
98
+ * that command) and no run. A refusal recorded before any command (a preflight or
99
+ * enqueue failure, or a stop before the first enqueue) leaves the turn undispatched,
100
+ * so its same-key repeat still dispatches it. Any later dispatch (Turn Retry, or a
101
+ * repeat after an accepted one) is a new reference, refused once released.
102
+ */
103
+ export function turnDispatchUses(sql, turnId) {
104
+ if (turnId === null)
105
+ return { ids: [] };
106
+ const row = sql.prepare("SELECT run_id,dispatched_at,body FROM turn WHERE id=?").get(turnId);
107
+ if (!row)
108
+ return { ids: [] };
109
+ const ids = referencedResourceIds(decodeBody(row).attachments);
110
+ const dispatched = row.run_id !== null || row.dispatched_at !== null;
111
+ return dispatched ? { ids } : { ids, from: { owner: "turn", id: turnId } };
112
+ }
113
+ /** In the acceptance transaction of a turn's product command: its first one is the
114
+ * turn's durable dispatch fact; a later one keeps the first instant. */
115
+ export function markTurnDispatchedInTx(sql, turnId, at) {
116
+ requireTransaction(sql);
117
+ sql
118
+ .prepare("UPDATE turn SET dispatched_at=? WHERE id=? AND dispatched_at IS NULL")
119
+ .run(at, turnId);
120
+ }
121
+ /** Thread purge ends the history its turns hold. */
122
+ function dropThreadResourceUsesInTx(sql, threadId) {
123
+ requireTransaction(sql);
124
+ return sql
125
+ .prepare(`DELETE FROM resource_use WHERE owner='turn'
126
+ AND owner_id IN (SELECT id FROM turn WHERE thread_id=?) RETURNING sha256`)
127
+ .all(threadId).map((row) => row.sha256);
128
+ }
129
+ //# sourceMappingURL=resource-uses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-uses.js","sourceRoot":"","sources":["../../src/store/resource-uses.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import type { ResourceStorePort } from "../store-contracts.js";
3
3
  import { BlobFiles } from "./blob-files.js";
4
4
  import { Obligations, type ObligationRow } from "./obligations.js";
5
5
  import type { EngineStore } from "./store.js";
6
+ import { type ResourceUseHolder } from "./resource-uses.js";
6
7
  /** Resource metadata and replay live in the one engine DB; only immutable bytes are files. */
7
8
  export declare class SqlResourceStore implements ResourceStorePort {
8
9
  private readonly store;
@@ -40,6 +41,7 @@ export declare class SqlResourceStore implements ResourceStorePort {
40
41
  finalize(id: string, expectedSha256: string | undefined, key: string): {
41
42
  resourceId: string;
42
43
  purpose?: "model" | undefined;
44
+ lifetime?: "managed" | undefined;
43
45
  kind: "file" | "image";
44
46
  mime: string;
45
47
  name: string;
@@ -50,7 +52,7 @@ export declare class SqlResourceStore implements ResourceStorePort {
50
52
  };
51
53
  importUpload(raw: unknown, key: string): {
52
54
  storeId: string;
53
- state: "cancelled" | "open" | "ready" | "uploading";
55
+ state: "cancelled" | "open" | "ready" | "released" | "uploading";
54
56
  uploadId: string;
55
57
  content: {
56
58
  sizeBytes: number;
@@ -60,6 +62,7 @@ export declare class SqlResourceStore implements ResourceStorePort {
60
62
  resource?: {
61
63
  resourceId: string;
62
64
  purpose?: "model" | undefined;
65
+ lifetime?: "managed" | undefined;
63
66
  kind: "file" | "image";
64
67
  mime: string;
65
68
  name: string;
@@ -68,11 +71,22 @@ export declare class SqlResourceStore implements ResourceStorePort {
68
71
  createdAt: string;
69
72
  deduplicated: boolean;
70
73
  } | undefined;
74
+ releasedAt?: string | undefined;
71
75
  };
72
- resolve(refs: ResourceAttachmentRef[] | undefined): Attachment[];
76
+ /** `heldBy`: the accepted owner reading its own refs (a released ID it holds still resolves). */
77
+ resolve(refs: ResourceAttachmentRef[] | undefined, heldBy?: ResourceUseHolder): Attachment[];
73
78
  readModel(raw: ModelPayloadRef): Buffer;
79
+ readModelAsync(raw: ModelPayloadRef): Promise<Buffer>;
74
80
  publishModel(bytes: Uint8Array): ModelPayloadRef;
75
81
  releaseModel(raw: ModelPayloadRef): void;
82
+ /** Caller relinquishes future reuse of a managed ordinary ID; accepted holders keep its bytes. */
83
+ releaseResource(id: string, raw: unknown): {
84
+ storeId: string;
85
+ resourceId: string;
86
+ sha256: string;
87
+ state: "released";
88
+ releasedAt: string;
89
+ };
76
90
  /** Expiry has an observed custody timestamp; callers must not infer it from file mtime. */
77
91
  expireModel(raw: ModelPayloadRef, expiredAt: string): void;
78
92
  listModelResources(): Array<ModelPayloadRef & {
@@ -1 +1 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/store/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,eAAe,EACf,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAsC,MAAM,iBAAiB,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAcnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,8FAA8F;AAC9F,qBAAa,gBAAiB,YAAW,iBAAiB;IAOtD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAEtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IATtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IAEpD,YACmB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,SAAS,EACjC,WAAW,EAAE,WAAW,EACP,GAAG,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAmB,EAO5D;IACD,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM;;;;;MAE/B;IACD,MAAM,CAAC,EAAE,EAAE,MAAM;;;;;MAEhB;IACD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC;;;;;OAElD;IACD,MAAM,CAAC,EAAE,EAAE,MAAM;;;;;MAEhB;IACD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM;;;;;;;;;;MAEnE;IACD,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;MAErC;IAED,OAAO,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,SAAS,GAAG,UAAU,EAAE,CAgB/D;IAED,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAKtC;IACD,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,eAAe,CAgB/C;IACD,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAEvC;IAED,2FAA2F;IAC3F,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAEzD;IAED,kBAAkB,IAAI,KAAK,CAAC,eAAe,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CASnE;IACD,mBAAmB,IAAI,MAAM,CAE5B;IACD,oBAAoB,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAEzD;IAED,uGAAuG;IACjG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAElC;IAED,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,KAAK;CAad"}
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/store/resources.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EAEV,eAAe,EACf,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAsC,MAAM,iBAAiB,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAcnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,8FAA8F;AAC9F,qBAAa,gBAAiB,YAAW,iBAAiB;IAOtD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAEtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IATtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IAEpD,YACmB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,SAAS,EACjC,WAAW,EAAE,WAAW,EACP,GAAG,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAmB,EAO5D;IACD,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM;;;;;MAE/B;IACD,MAAM,CAAC,EAAE,EAAE,MAAM;;;;;MAEhB;IACD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC;;;;;OAElD;IACD,MAAM,CAAC,EAAE,EAAE,MAAM;;;;;MAEhB;IACD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM;;;;;;;;;;;MAEnE;IACD,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;MAErC;IAED,iGAAiG;IACjG,OAAO,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,UAAU,EAAE,CAgB3F;IAED,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAKtC;IACK,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAK1D;IACD,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,eAAe,CAgB/C;IACD,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAEvC;IACD,kGAAkG;IAClG,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO;;;;;;MAIvC;IAED,2FAA2F;IAC3F,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAEzD;IAED,kBAAkB,IAAI,KAAK,CAAC,eAAe,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CASnE;IACD,mBAAmB,IAAI,MAAM,CAE5B;IACD,oBAAoB,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAEzD;IAED,uGAAuG;IACjG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAElC;IAED,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,KAAK;CAad"}
@@ -1,3 +1,4 @@
1
+ import { readFile } from "node:fs/promises";
1
2
  import { Attachment, ControlResource, ModelPayloadRef, } from "@claudexor/schema";
2
3
  import { deleteUnownedInlineInTx, sha256Hex } from "./blob-files.js";
3
4
  import { runMutation } from "./mutation.js";
@@ -5,6 +6,8 @@ import { PublishBlob } from "./publish-blob.js";
5
6
  import { assertModelRef, assertResourceId, payloadRef, putResourceInTx, readResourceRow, readUploadRow, resourceError, resourceSha, purposeMismatch, verifiedResourceBytes, } from "./resource-rows.js";
6
7
  import { SqlUploadImports } from "./upload-imports.js";
7
8
  import { SqlUploads } from "./uploads.js";
9
+ import { releaseManagedResource } from "./resource-release.js";
10
+ import { holdsResourceUse, isManagedOrdinary, releasedResourceError, } from "./resource-uses.js";
8
11
  /** Resource metadata and replay live in the one engine DB; only immutable bytes are files. */
9
12
  export class SqlResourceStore {
10
13
  store;
@@ -40,9 +43,10 @@ export class SqlResourceStore {
40
43
  importUpload(raw, key) {
41
44
  return this.imports.import(raw, key);
42
45
  }
43
- resolve(refs) {
46
+ /** `heldBy`: the accepted owner reading its own refs (a released ID it holds still resolves). */
47
+ resolve(refs, heldBy) {
44
48
  return (refs ?? []).map(({ resourceId }) => {
45
- const resource = this.metadata(resourceId);
49
+ const resource = this.metadata(resourceId, heldBy);
46
50
  if (resource.purpose === "model")
47
51
  throw purposeMismatch();
48
52
  const path = this.blobs.filePath(resourceSha(resource));
@@ -64,6 +68,12 @@ export class SqlResourceStore {
64
68
  assertModelRef(resource, ref);
65
69
  return verifiedResourceBytes(resource, this.blobs.filePath(resourceSha(resource)));
66
70
  }
71
+ async readModelAsync(raw) {
72
+ const ref = ModelPayloadRef.parse(raw);
73
+ const resource = this.metadata(ref.resourceId);
74
+ assertModelRef(resource, ref);
75
+ return readVerifiedResourceFile(resource, this.blobs.filePath(resourceSha(resource)));
76
+ }
67
77
  publishModel(bytes) {
68
78
  const status = this.uploads.create({
69
79
  purpose: "model",
@@ -85,6 +95,13 @@ export class SqlResourceStore {
85
95
  releaseModel(raw) {
86
96
  this.release(raw, "released");
87
97
  }
98
+ /** Caller relinquishes future reuse of a managed ordinary ID; accepted holders keep its bytes. */
99
+ releaseResource(id, raw) {
100
+ const { receipt, sha } = releaseManagedResource(this.store, id, raw);
101
+ if (sha)
102
+ this.defer(this.blobs.gc(sha));
103
+ return receipt;
104
+ }
88
105
  /** Expiry has an observed custody timestamp; callers must not infer it from file mtime. */
89
106
  expireModel(raw, expiredAt) {
90
107
  this.release(raw, "expired", expiredAt);
@@ -128,9 +145,15 @@ export class SqlResourceStore {
128
145
  });
129
146
  this.defer(this.blobs.gc(sha));
130
147
  }
131
- metadata(id) {
148
+ metadata(id, heldBy) {
132
149
  assertResourceId(id);
133
150
  const row = readResourceRow(this.store, id);
151
+ // A released managed ID resolves only for an accepted owner that holds it (its bytes are kept).
152
+ if (row?.state === "released" && isManagedOrdinary(row.resource)) {
153
+ if (!heldBy || !holdsResourceUse(this.store, heldBy, id))
154
+ throw releasedResourceError(id, row.releasedAt);
155
+ return row.resource;
156
+ }
134
157
  if (!row || row.state === "released" || row.state === "expired")
135
158
  throw resourceError(`no such resource: ${id}`, 404, "resource_not_found");
136
159
  if (row.state === "publishing")
@@ -146,4 +169,20 @@ export class SqlResourceStore {
146
169
  this.cleanup.add(pending);
147
170
  }
148
171
  }
172
+ /** Same checks as `verifiedResourceBytes`, on the libuv pool. */
173
+ async function readVerifiedResourceFile(resource, path) {
174
+ let bytes;
175
+ try {
176
+ bytes = await readFile(path);
177
+ }
178
+ catch (error) {
179
+ const code = error && typeof error === "object" ? error.code : undefined;
180
+ if (code === "ENOENT")
181
+ throw resourceError("resource blob is unavailable", 409, "resource_unavailable");
182
+ throw error;
183
+ }
184
+ if (bytes.length !== resource.sizeBytes || sha256Hex(bytes) !== resourceSha(resource))
185
+ throw resourceError("resource blob no longer matches finalized bytes", 409, "resource_digest_mismatch");
186
+ return bytes;
187
+ }
149
188
  //# sourceMappingURL=resources.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/store/resources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/store/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,UAAU,EACV,eAAe,EACf,eAAe,GAEhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAa,uBAAuB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,eAAe,EACf,aAAa,EACb,aAAa,EACb,WAAW,EACX,eAAe,EACf,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,GAEtB,MAAM,oBAAoB,CAAC;AAE5B,8FAA8F;AAC9F,MAAM,OAAO,gBAAgB;IAOR,KAAK;IACL,KAAK;IAEL,GAAG;IATL,OAAO,CAAa;IACpB,SAAS,CAAc;IACvB,OAAO,CAAmB;IAC1B,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IAEpD,YACmB,KAAkB,EAClB,KAAgB,EACjC,WAAwB,EACP,GAAG,GAA2B,OAAO,CAAC,IAAI;qBAH1C,KAAK;qBACL,KAAK;mBAEL,GAAG;QAEpB,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CACjF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CACjB,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,CAAC,GAAY,EAAE,GAAW;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,CAAC,EAAU;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,KAAK,CAAC,EAAU,EAAE,MAAiC;QACjD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,CAAC,EAAU;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,QAAQ,CAAC,EAAU,EAAE,cAAkC,EAAE,GAAW;QAClE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IACD,YAAY,CAAC,GAAY,EAAE,GAAW;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,iGAAiG;IACjG,OAAO,CAAC,IAAyC,EAAE,MAA0B;QAC3E,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO;gBAAE,MAAM,eAAe,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxD,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACtC,OAAO,UAAU,CAAC,KAAK,CAAC;gBACtB,WAAW,EAAE,QAAQ,CAAC,UAAU;gBAChC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,QAAQ,CAAC,SAAS;gBAC9B,IAAI;aACL,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,GAAoB;QAC5B,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,KAAK,CAAC,cAAc,CAAC,GAAoB;QACvC,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IACD,YAAY,CAAC,KAAiB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACjC,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,mBAAmB;YACzB,SAAS,EAAE,KAAK,CAAC,UAAU;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,YAAY;gBAC3D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,YAAY,CAAC,GAAoB;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAChC,CAAC;IACD,kGAAkG;IAClG,eAAe,CAAC,EAAU,EAAE,GAAY;QACtC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACrE,IAAI,GAAG;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,2FAA2F;IAC3F,WAAW,CAAC,GAAoB,EAAE,SAAiB;QACjD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,kBAAkB;QAChB,OACE,IAAI,CAAC,KAAK;aACP,OAAO,CAAC,+EAA+E,CAAC;aACxF,GAAG,EACP,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3F,OAAO,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC;IACD,mBAAmB;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;IACD,oBAAoB,CAAC,IAA8B;QACjD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,uGAAuG;IACvG,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI;YAAE,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAEO,OAAO,CAAC,GAAoB,EAAE,KAA6B,EAAE,SAAkB;QACrF,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO;QACxE,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE;YAC7B,eAAe,CAAC,EAAE,EAAE;gBAClB,GAAG,GAAG;gBACN,KAAK;gBACL,UAAU,EAAE,SAAS,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;gBAC/C,SAAS,EAAE,SAAS,IAAI,GAAG,CAAC,SAAS;aACtC,CAAC,CAAC;YACH,uBAAuB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACjC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;IACO,QAAQ,CAAC,EAAU,EAAE,MAA0B;QACrD,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5C,gGAAgG;QAChG,IAAI,GAAG,EAAE,KAAK,KAAK,UAAU,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;gBACtD,MAAM,qBAAqB,CAAC,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;YAClD,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;YAC7D,MAAM,aAAa,CAAC,qBAAqB,EAAE,EAAE,EAAE,GAAG,EAAE,oBAAoB,CAAC,CAAC;QAC5E,IAAI,GAAG,CAAC,KAAK,KAAK,YAAY;YAC5B,MAAM,aAAa,CAAC,8BAA8B,EAAE,GAAG,EAAE,sBAAsB,CAAC,CAAC;QACnF,OAAO,GAAG,CAAC,QAAQ,CAAC;IACtB,CAAC;IACO,KAAK,CAAC,IAAsB;QAClC,MAAM,OAAO,GAAG,IAAI;aACjB,IAAI,CACH,GAAG,EAAE,CAAC,SAAS,EACf,CAAC,KAAc,EAAE,EAAE;YACjB,IAAI,CAAC,GAAG,CACN,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC9F,CAAC;QACJ,CAAC,CACF;aACA,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;CACF;AAED,iEAAiE;AACjE,KAAK,UAAU,wBAAwB,CAAC,QAAyB,EAAE,IAAY;IAC7E,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GACR,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,IAAI,IAAI,KAAK,QAAQ;YACnB,MAAM,aAAa,CAAC,8BAA8B,EAAE,GAAG,EAAE,sBAAsB,CAAC,CAAC;QACnF,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,QAAQ,CAAC;QACnF,MAAM,aAAa,CACjB,iDAAiD,EACjD,GAAG,EACH,0BAA0B,CAC3B,CAAC;IACJ,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -14,11 +14,17 @@ type Table = keyof typeof columns;
14
14
  type Change = {
15
15
  table: Table;
16
16
  id: string;
17
- operation: string;
17
+ roots: Set<string>;
18
18
  };
19
19
  /** Subscribe BEFORE the cooperative read. Drain changed row identities only;
20
- * quota/event traffic and unrelated metadata never restart the full inventory. */
20
+ * quota/event traffic and unrelated metadata never restart the full inventory.
21
+ * Project and partition changes reach the reader like every other owner row: it
22
+ * defers the affected namespaces or, only when rows were never inventoried,
23
+ * holds the whole pass (`hold`). A change that cannot be read holds it too. */
21
24
  export declare function retentionChanges(store: EngineStore): {
25
+ /** Why the whole pass holds, once a change named a reason. */
26
+ hold(reason: string): void;
27
+ held: () => string | null;
22
28
  refresh(read: (change: Change) => void, signal?: AbortSignal): Promise<void>;
23
29
  current(read: (change: Change) => void): boolean;
24
30
  close(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"retention-changes.d.ts","sourceRoot":"","sources":["../../src/store/retention-changes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,QAAA,MAAM,OAAO;aACX,MAAM,YAAG,IAAI,EAAE,OAAO,EAAE,MAAM;aAC9B,IAAI,YAAG,IAAI,EAAE,WAAW,EAAE,MAAM;aAChC,OAAO,YAAG,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM;aACjD,OAAO,YACL,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,SAAS,EACT,OAAO,EACP,aAAa,EACb,eAAe,EACf,YAAY;aAEd,WAAW,YAAG,IAAI,EAAE,QAAQ,EAAE,OAAO;aACrC,gBAAgB,YAAG,IAAI,EAAE,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,OAAO;aACjF,OAAO,YAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa;aACtD,SAAS,YAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY;aAChD,IAAI,YAAG,QAAQ,EAAE,MAAM,EAAE,QAAQ;CACzB,CAAC;AACX,KAAK,KAAK,GAAG,MAAM,OAAO,OAAO,CAAC;AAClC,KAAK,MAAM,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAwC9D;kFACkF;AAClF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW;IAoBzC,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,WAAW,WAAW;IASlE,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;IAQtC,KAAK;EAMR"}
1
+ {"version":3,"file":"retention-changes.d.ts","sourceRoot":"","sources":["../../src/store/retention-changes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,QAAA,MAAM,OAAO;aACX,MAAM,YAAG,IAAI,EAAE,OAAO,EAAE,MAAM;aAC9B,IAAI,YAAG,IAAI,EAAE,WAAW,EAAE,MAAM;aAChC,OAAO,YAAG,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM;aACjD,OAAO,YACL,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,SAAS,EACT,OAAO,EACP,aAAa,EACb,eAAe,EACf,YAAY;aAEd,WAAW,YAAG,IAAI,EAAE,QAAQ,EAAE,OAAO;aACrC,gBAAgB,YAAG,IAAI,EAAE,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,OAAO;aACjF,OAAO,YAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa;aACtD,SAAS,YAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY;aAChD,IAAI,YAAG,QAAQ,EAAE,MAAM,EAAE,QAAQ;CACzB,CAAC;AACX,KAAK,KAAK,GAAG,MAAM,OAAO,OAAO,CAAC;AAClC,KAAK,MAAM,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AA4C/D;;;;+EAI+E;AAC/E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW;IAqB/C,8DAA8D;IAC9D,IAAI,SAAS,MAAM;IAGnB,IAAI;IACE,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,WAAW,WAAW;IASlE,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;IAQtC,KAAK;EAMR"}