@lostgradient/weft 0.2.1 → 0.3.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 (188) hide show
  1. package/README.md +47 -22
  2. package/dist/cli/generated/operation-client.generated.d.ts +28 -1
  3. package/dist/cli/generated/operation-client.generated.js +2 -0
  4. package/dist/cli-main.js +79 -79
  5. package/dist/client/handle-delegation.d.ts +4 -0
  6. package/dist/client/handle-delegation.js +6 -0
  7. package/dist/client/http-client-requests.d.ts +2 -0
  8. package/dist/client/http-client-requests.js +3 -0
  9. package/dist/client/http-client.d.ts +4 -1
  10. package/dist/client/http-client.js +9 -1
  11. package/dist/client/interface.d.ts +57 -2
  12. package/dist/client/local.d.ts +4 -1
  13. package/dist/client/local.js +7 -0
  14. package/dist/client/start-body.d.ts +7 -1
  15. package/dist/client/start-body.js +13 -4
  16. package/dist/core/codec/extension-codec.js +4 -2
  17. package/dist/core/codec/index.d.ts +1 -0
  18. package/dist/core/codec/index.js +1 -0
  19. package/dist/core/codec/serializer-registry.d.ts +122 -0
  20. package/dist/core/codec/serializer-registry.js +51 -0
  21. package/dist/core/context/index.d.ts +9 -0
  22. package/dist/core/context/internals.d.ts +9 -0
  23. package/dist/core/context/internals.js +3 -0
  24. package/dist/core/context/run-operation.d.ts +16 -3
  25. package/dist/core/context/run-operation.js +16 -7
  26. package/dist/core/engine/bulk-operations.js +1 -1
  27. package/dist/core/engine/construction.d.ts +0 -1
  28. package/dist/core/engine/construction.js +10 -1
  29. package/dist/core/engine/disposal.js +12 -0
  30. package/dist/core/engine/engine-create-types.d.ts +0 -14
  31. package/dist/core/engine/engine-internal-types.d.ts +12 -0
  32. package/dist/core/engine/engine-leak-warnings.d.ts +6 -0
  33. package/dist/core/engine/engine-leak-warnings.js +4 -0
  34. package/dist/core/engine/engine-runtime-helpers.d.ts +17 -0
  35. package/dist/core/engine/engine-runtime-helpers.js +26 -5
  36. package/dist/core/engine/errors.d.ts +74 -0
  37. package/dist/core/engine/errors.js +25 -1
  38. package/dist/core/engine/handle-result.js +1 -1
  39. package/dist/core/engine/handles.d.ts +89 -40
  40. package/dist/core/engine/handles.js +25 -27
  41. package/dist/core/engine/index.d.ts +96 -4
  42. package/dist/core/engine/index.js +75 -4
  43. package/dist/core/engine/inline-launch-queue.d.ts +14 -0
  44. package/dist/core/engine/inline-launch-queue.js +32 -7
  45. package/dist/core/engine/internals.d.ts +18 -10
  46. package/dist/core/engine/lifecycle/fork-helpers.js +1 -7
  47. package/dist/core/engine/lifecycle/persist.js +5 -20
  48. package/dist/core/engine/lifecycle/resume.js +25 -4
  49. package/dist/core/engine/lifecycle/start-commit.d.ts +47 -0
  50. package/dist/core/engine/lifecycle/start-commit.js +27 -0
  51. package/dist/core/engine/lifecycle/start-exec.d.ts +30 -2
  52. package/dist/core/engine/lifecycle/start-exec.js +38 -0
  53. package/dist/core/engine/lifecycle/start-or-signal-resolution.d.ts +79 -0
  54. package/dist/core/engine/lifecycle/start-or-signal-resolution.js +60 -0
  55. package/dist/core/engine/lifecycle/start-or-signal.d.ts +45 -0
  56. package/dist/core/engine/lifecycle/start-or-signal.js +141 -0
  57. package/dist/core/engine/lifecycle/start.d.ts +3 -3
  58. package/dist/core/engine/lifecycle/start.js +31 -37
  59. package/dist/core/engine/lifecycle.d.ts +3 -2
  60. package/dist/core/engine/lifecycle.js +9 -2
  61. package/dist/core/engine/listing.js +1 -1
  62. package/dist/core/engine/persisted-data-version.d.ts +5 -9
  63. package/dist/core/engine/persisted-data-version.js +4 -5
  64. package/dist/core/engine/schedule-handle.d.ts +45 -0
  65. package/dist/core/engine/schedule-handle.js +26 -0
  66. package/dist/core/engine/schedules.d.ts +1 -1
  67. package/dist/core/engine/schedules.js +7 -3
  68. package/dist/core/engine/second-instance-detector.d.ts +96 -0
  69. package/dist/core/engine/second-instance-detector.js +108 -0
  70. package/dist/core/engine/signals.d.ts +22 -0
  71. package/dist/core/engine/signals.js +15 -0
  72. package/dist/core/engine/termination/cleanup.d.ts +25 -0
  73. package/dist/core/engine/termination/cleanup.js +19 -1
  74. package/dist/core/engine/termination/complete.js +4 -3
  75. package/dist/core/engine/termination/suspend.d.ts +68 -0
  76. package/dist/core/engine/termination/suspend.js +41 -0
  77. package/dist/core/engine/termination.d.ts +4 -2
  78. package/dist/core/engine/termination.js +2 -0
  79. package/dist/core/engine/validation.js +25 -1
  80. package/dist/core/engine/workflow-feed.d.ts +5 -3
  81. package/dist/core/events/event-map.d.ts +2 -1
  82. package/dist/core/events/workflow-events.d.ts +23 -0
  83. package/dist/core/events/workflow-events.js +9 -0
  84. package/dist/core/list-filter-validation.js +2 -1
  85. package/dist/core/start-workflow-validation.d.ts +22 -0
  86. package/dist/core/start-workflow-validation.js +11 -1
  87. package/dist/core/step-context.d.ts +10 -6
  88. package/dist/core/step-context.js +7 -15
  89. package/dist/core/types/activity.d.ts +6 -3
  90. package/dist/core/types/identity.d.ts +8 -1
  91. package/dist/core/types/launch-metadata.d.ts +33 -0
  92. package/dist/core/types/launch-metadata.js +0 -0
  93. package/dist/core/types/message-handles.d.ts +25 -0
  94. package/dist/core/types/options.d.ts +48 -54
  95. package/dist/core/types/reviews.d.ts +2 -1
  96. package/dist/core/types/services-resolution.d.ts +47 -0
  97. package/dist/core/types/services-resolution.js +0 -0
  98. package/dist/core/types/state.d.ts +11 -11
  99. package/dist/core/types/workflow-builder.d.ts +5 -4
  100. package/dist/core/types/workflow-function.d.ts +17 -0
  101. package/dist/core/types/workflow-snapshot.d.ts +29 -0
  102. package/dist/core/types/workflow-snapshot.js +0 -0
  103. package/dist/core/types.d.ts +3 -0
  104. package/dist/core/types.js +3 -0
  105. package/dist/core/weft-error.d.ts +1 -1
  106. package/dist/core/weft-error.js +3 -1
  107. package/dist/diagnostics/doctor.js +6 -3
  108. package/dist/diagnostics/format.js +2 -2
  109. package/dist/diagnostics/types.d.ts +1 -0
  110. package/dist/diagnostics/version-check.js +6 -4
  111. package/dist/index.d.ts +4 -4
  112. package/dist/index.js +10 -1
  113. package/dist/json-schema.js +1 -1
  114. package/dist/mcp/cli.js +35 -35
  115. package/dist/mcp/list-filter.js +2 -1
  116. package/dist/mcp/session.js +1 -0
  117. package/dist/observability/index.js +2 -2
  118. package/dist/server/handler.js +30 -30
  119. package/dist/server/index.js +33 -33
  120. package/dist/server/interactive-operations.js +1 -0
  121. package/dist/server/operations/resume-workflow.js +2 -2
  122. package/dist/server/operations/start-or-signal-workflow.d.ts +39 -0
  123. package/dist/server/operations/start-or-signal-workflow.js +140 -0
  124. package/dist/server/operations/start-workflow-options.d.ts +32 -0
  125. package/dist/server/operations/start-workflow-options.js +63 -0
  126. package/dist/server/operations/start-workflow.js +7 -69
  127. package/dist/server/operations/suspend-workflow.d.ts +13 -0
  128. package/dist/server/operations/suspend-workflow.js +36 -0
  129. package/dist/server/rest-binding.d.ts +18 -7
  130. package/dist/server/rest-bindings.js +12 -0
  131. package/dist/server/runtime/task-dispatch.js +5 -3
  132. package/dist/server/runtime/task-polling.d.ts +16 -2
  133. package/dist/server/runtime/task-polling.js +20 -5
  134. package/dist/server/runtime/websocket-worker.js +8 -0
  135. package/dist/server/serve-internals.d.ts +8 -0
  136. package/dist/server/serve-internals.js +4 -2
  137. package/dist/server/task-state.d.ts +8 -0
  138. package/dist/service-worker/index.js +28 -28
  139. package/dist/storage/capabilities.d.ts +10 -2
  140. package/dist/storage/capabilities.js +2 -2
  141. package/dist/storage/http.js +2 -2
  142. package/dist/storage/index.d.ts +6 -1
  143. package/dist/storage/indexeddb.js +1 -1
  144. package/dist/storage/interface.d.ts +26 -0
  145. package/dist/storage/interface.js +1 -1
  146. package/dist/storage/key-prefixes.d.ts +1 -1
  147. package/dist/storage/key-prefixes.js +2 -0
  148. package/dist/storage/lmdb.js +1 -1
  149. package/dist/storage/memory.js +1 -1
  150. package/dist/storage/neon-value-mapping.d.ts +47 -0
  151. package/dist/storage/neon-value-mapping.js +11 -0
  152. package/dist/storage/neon.d.ts +108 -0
  153. package/dist/storage/neon.js +10 -0
  154. package/dist/storage/node-sqlite-loader.d.ts +71 -0
  155. package/dist/storage/node-sqlite-loader.js +41 -0
  156. package/dist/storage/node-sqlite.d.ts +1 -19
  157. package/dist/storage/node-sqlite.js +38 -32
  158. package/dist/storage/postgres-key-value-queries.d.ts +79 -0
  159. package/dist/storage/postgres-key-value-queries.js +63 -0
  160. package/dist/storage/resolve.d.ts +2 -165
  161. package/dist/storage/resolve.js +1 -1
  162. package/dist/storage/scoped-storage.js +1 -1
  163. package/dist/storage/storage-configuration.d.ts +209 -0
  164. package/dist/storage/storage-configuration.js +0 -0
  165. package/dist/storage/text-value-store.d.ts +9 -9
  166. package/dist/storage/turso.js +2 -2
  167. package/dist/storage/typed-storage.js +1 -1
  168. package/dist/storage/web-extension.js +1 -1
  169. package/dist/testing/index.js +33 -33
  170. package/dist/version.d.ts +1 -1
  171. package/dist/version.js +1 -1
  172. package/dist/worker/index.js +9 -5
  173. package/dist/worker/long-poll.js +4 -0
  174. package/dist/worker/protocol-messages.d.ts +20 -0
  175. package/dist/worker/protocol-schemas.d.ts +32 -0
  176. package/dist/worker/protocol-schemas.js +8 -4
  177. package/dist/worker/protocol-task-result.d.ts +28 -0
  178. package/dist/worker/protocol-task-result.js +76 -0
  179. package/dist/worker/protocol.d.ts +4 -15
  180. package/dist/worker/protocol.js +1 -1
  181. package/dist/worker/registry/fair-share.d.ts +29 -0
  182. package/dist/worker/registry/fair-share.js +30 -0
  183. package/dist/worker/registry/routing.d.ts +18 -0
  184. package/dist/worker/registry/routing.js +14 -0
  185. package/dist/worker/registry/types.d.ts +7 -0
  186. package/dist/worker/registry.d.ts +16 -1
  187. package/dist/worker/registry.js +24 -36
  188. package/package.json +17 -4
@@ -170,8 +170,16 @@ export declare function requireStorageCapability(storage: Storage, capability: G
170
170
  /**
171
171
  * Fail fast when a storage backend is not conservative enough for boot-time
172
172
  * durable recovery. This is intentionally stricter than the engine's per-feature
173
- * gates: it rejects ephemeral, remote, eventual, best-effort, non-atomic, and
174
- * non-CAS storage before an application starts in durable mode.
173
+ * gates: it rejects ephemeral, eventual, best-effort, non-atomic, and non-CAS
174
+ * storage before an application starts in durable mode.
175
+ *
176
+ * Persistence may be `local` (a same-process file-backed store) or `remote` (a
177
+ * durable service such as Neon Postgres). A `remote` backend is acceptable only
178
+ * because the other four axes are still required at their strongest:
179
+ * `linearizable` read-after-write, `snapshot` scans, atomic batches, and
180
+ * compare-and-swap. A remote store that cannot promise all four (an eventually
181
+ * consistent HTTP backend, say) is still rejected — by those axes, not by its
182
+ * persistence scope.
175
183
  *
176
184
  * @throws {Error} When the backend's capability row is not suitable for recovery.
177
185
  *
@@ -4,8 +4,8 @@ export function requireStorageCapability(storage, capability, featureName) {
4
4
  }
5
5
  export function assertDurableStorageForRecovery(storage) {
6
6
  const capabilities = storage.capabilities(), failures = [];
7
- if (capabilities.persistence !== "local")
8
- failures.push(`persistence must be "local" (got "${capabilities.persistence}")`);
7
+ if (capabilities.persistence !== "local" && capabilities.persistence !== "remote")
8
+ failures.push(`persistence must be "local" or "remote" (got "${capabilities.persistence}")`);
9
9
  if (capabilities.readAfterWrite !== "linearizable")
10
10
  failures.push(`readAfterWrite must be "linearizable" (got "${capabilities.readAfterWrite}")`);
11
11
  if (capabilities.scanConsistency !== "snapshot")
@@ -1,2 +1,2 @@
1
- var k=Object.defineProperty;var u=(J)=>J;function m(J,Y){this[J]=u.bind(null,Y)}var n=(J,Y)=>{for(var Z in Y)k(J,Z,{get:Y[Z],enumerable:!0,configurable:!0,set:m.bind(Y,Z)})};function U(J){let Y=[];for(let Z=0;Z<J.length;Z+=512)Y.push(String.fromCharCode(...J.subarray(Z,Z+512)));return btoa(Y.join(""))}function T(J){let Y=atob(J),Z=new Uint8Array(Y.length);for(let G=0;G<Y.length;G+=1)Z[G]=Y.charCodeAt(G);return Z}function N(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}async function M(J,Y){return await J.get(Y)!==null}async function*Q(J,Y,Z){for await(let[G]of J.scan(Y,Z))yield G}async function V(J,Y){let Z=0;for await(let G of Q(J,Y))Z++;return Z}async function E(J,Y){let Z=[];for await(let G of Q(J,Y))Z.push({type:"delete",key:G});if(Z.length===0)return 0;return await J.batch(Z),Z.length}async function H(J,Y,Z){let G=[];for await(let X of Q(J,Y,Z))G.push({type:"delete",key:X});if(G.length===0)return 0;return await J.batch(G),G.length}function q(J,Y,Z){if(!J.capabilities()[Y])throw Error(`Feature "${Z}" requires storage capability "${Y}", but this storage backend does not provide it.`)}var R="default";function O(J){return J.length>0?J.slice(0,-1)+String.fromCharCode(J.charCodeAt(J.length-1)+1):"ÿ"}function _J(J,Y={}){if(Y.gt!==void 0&&J<=Y.gt)return!1;if(Y.gte!==void 0&&J<Y.gte)return!1;if(Y.lt!==void 0&&J>=Y.lt)return!1;if(Y.lte!==void 0&&J>Y.lte)return!1;return!0}function FJ(J,Y){if(J===null||Y===null)return J===Y;if(J.byteLength!==Y.byteLength)return!1;for(let Z=0;Z<J.byteLength;Z++)if(J[Z]!==Y[Z])return!1;return!0}async function P(J,Y){if(J.has)return J.has(Y);return M(J,Y)}function h(J,Y,Z){if(J.keys)return J.keys(Y,Z);return Q(J,Y,Z)}async function v(J,Y){if(J.count)return J.count(Y);return V(J,Y)}async function C(J,Y){if(J.deletePrefix)return J.deletePrefix(Y);return E(J,Y)}async function K(J,Y,Z){if(q(J,"conditionalBatch","storageConditionalBatch"),!J.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return J.conditionalBatch(Y,Z)}function $(J){return encodeURIComponent(J)}function QJ(J){try{return decodeURIComponent(J)}catch{return null}}var _=(J)=>String(J).padStart(16,"0"),WJ={workflow:(J)=>`wf:${$(J)}`,checkpoint:(J)=>`wf:${$(J)}:ckpt`,checkpointHistory:(J,Y)=>`wf:${$(J)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(J)=>`wf:${$(J)}:timeline:`,timeline:(J,Y)=>`wf:${$(J)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(J)=>`schedule:${$(J)}`,scheduleTick:(J,Y)=>`schedule-due:${String(J).padStart(16,"0")}:${$(Y)}`,scheduleRun:(J)=>`schedule-run:${$(J)}`,operation:(J,Y,Z)=>`op:${J}:${_(Y)}:${Z}`,operationInflight:(J)=>`op:inflight:${J}`,operationQueued:(J)=>`op:queued:${J}`,operationResolved:(J)=>`op:resolved:${J}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(J,Y,Z)=>`audit:bulk:${_(J)}:${$(Y)}:${$(Z)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(J,Y)=>`op:resolved-by-time:${_(J)}:${$(Y)}`,asyncActivity:(J,Y)=>`async-act:v1:${$(J)}:${$(Y)}`,activityReconciliationPrefix:(J)=>`actrec:v1:${$(J)}:`,activityReconciliation:(J,Y,Z)=>`actrec:v1:${$(J)}:${$(Y)}:${Z}`,eventPrefix:(J)=>`ev:${$(J)}:`,event:(J,Y)=>`ev:${$(J)}:${String(Y).padStart(10,"0")}`,eventHead:(J)=>`ev:${$(J)}:head`,eventWatermark:(J)=>`ev:${$(J)}:watermark`,signal:(J,Y,Z)=>`sig:${$(J)}:${Y}:${$(Z)}`,signalSequence:(J)=>`sigseq:v1:${$(J)}`,signalAcceptedResponsePrefix:(J)=>`sigres:v1:${$(J)}:`,signalAcceptedResponse:(J,Y,Z)=>`sigres:v1:${$(J)}:${$(Y)}:${$(Z)}`,deadline:(J,Y)=>`wf-deadline:${_(J)}:${$(Y)}`,terminalCleanup:(J,Y)=>`wf-cleanup:${_(J)}:${$(Y)}`,delayedStart:(J,Y)=>`wf-delayed:${_(J)}:${$(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(J,Y)=>`wf-terminal:${_(J)}:${$(Y)}`,attribute:(J)=>`attr:${$(J)}`,attributeIndex:(J,Y,Z)=>`idx:${J}:${Y}:${$(Z)}`,tagIndex:(J,Y)=>`tag:${$(J)}:${$(Y)}`,updatePrefix:(J)=>`upd:${$(J)}:`,update:(J,Y)=>`upd:${$(J)}:${Y}`,updateResponse:(J)=>`upr:${J}`,updateIdempotency:(J,Y)=>`upk:${$(J)}:${Y}`,budget:(J,Y,Z)=>`budget:${J}:${Y}:${Z}`,review:(J,Y)=>`review:${$(J)}:${Y}`,workflowHeaders:(J)=>`wf-headers:${$(J)}`,terminalCleanupNeeded:(J)=>`wf-cleanup-needed:${$(J)}`,workflowHasServices:(J)=>`wf-has-services:${$(J)}`,offload:(J,Y)=>`offload:${$(J)}:${Y}`,archive:(J,Y)=>`archive:${$(J)}:${Y}`,stateExecution:(J,Y)=>`state:execution:${$(J)}:${$(Y)}`,stateWorkflow:(J,Y)=>`state:workflow-scope:${R}:${$(J)}:${$(Y)}`,streamChunkPrefix:(J,Y)=>`blob:${$(J)}:${Y}:chunk:`,streamChunk:(J,Y,Z)=>`blob:${$(J)}:${Y}:chunk:${String(Z).padStart(10,"0")}`,streamMetadata:(J,Y)=>`blob:${$(J)}:${Y}:meta`,budgetCharged:(J)=>`budget-charged:${J}`,toolEffect:(J,Y,Z)=>`tool-effect:${$(J)}:${Y}:${Z}`,workflowVisibilityStatus:(J,Y)=>`wf-idx-status:${$(J)}:${$(Y)}`,workflowVisibilityType:(J,Y)=>`wf-idx-type:${$(J)}:${$(Y)}`,workflowVisibilityCreated:(J,Y)=>`wf-idx-created:${_(J)}:${$(Y)}`,workflowVisibilityUpdated:(J,Y)=>`wf-idx-updated:${_(J)}:${$(Y)}`,workflowVisibilityDeadline:(J,Y)=>`wf-idx-deadline:${_(J)}:${$(Y)}`,workflowVisibilityManifest:(J)=>`wf-idx-manifest:${$(J)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function w(J){if(J===void 0)return;if(typeof J!=="number"||!Number.isInteger(J)||J<0)throw Error("deleteRange limit must be a finite non-negative integer");return J===0?0:J}function j(J){let Y={},Z=!1;for(let X of["gt","gte","lt","lte"]){let F=J[X];if(F===void 0)continue;if(typeof F!=="string")throw Error("deleteRange bounds must be strings");Y[X]=F,Z=!0}if(!Z)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let G=w(J.limit);if(G!==void 0)Y.limit=G;return Y}async function b(J,Y,Z){let G=j(Z);if(J.deleteRange)return J.deleteRange(Y,G);return H(J,Y,G)}function c(J,Y){let Z={key:J,open:!1};if(Y.gte!==void 0&&Y.gte>Z.key)Z.key=Y.gte,Z.open=!1;if(Y.gt!==void 0&&Y.gt>=Z.key)Z.key=Y.gt,Z.open=!0;return Z}function y(J,Y){let Z={key:O(J),open:!0};if(Y.lt!==void 0&&Y.lt<=Z.key)Z.key=Y.lt,Z.open=!0;if(Y.lte!==void 0&&Y.lte<Z.key)Z.key=Y.lte,Z.open=!1;return Z}function HJ(J,Y){let Z=c(J,Y),G=y(J,Y);if(Z.key>G.key||Z.key===G.key&&(Z.open||G.open))return null;return{lower:Z,upper:G}}function B(J){return J.replaceAll(/:+$/g,"")}function g(J,Y){let Z=B(J),G=B(Y);if(Z.length===0)return G;if(G.length===0)return Z;return`${Z}:${G}`}class A{#Y;#Z;constructor(J,Y){this.#Y=J,this.#Z=B(Y)}#J(J){if(this.#Z.length===0)return J;return J.length===0?`${this.#Z}:`:`${this.#Z}:${J}`}#$(J){if(this.#Z.length===0)return J;return J.slice(this.#Z.length+1)}#G(J={}){let Y={};if(J.limit!==void 0)Y.limit=J.limit;if(J.reverse!==void 0)Y.reverse=J.reverse;if(J.gt!==void 0)Y.gt=this.#J(J.gt);if(J.gte!==void 0)Y.gte=this.#J(J.gte);if(J.lt!==void 0)Y.lt=this.#J(J.lt);if(J.lte!==void 0)Y.lte=this.#J(J.lte);return Y}#_(J){let Y={};if(J.limit!==void 0)Y.limit=J.limit;if(J.gt!==void 0)Y.gt=this.#J(J.gt);if(J.gte!==void 0)Y.gte=this.#J(J.gte);if(J.lt!==void 0)Y.lt=this.#J(J.lt);if(J.lte!==void 0)Y.lte=this.#J(J.lte);return Y}capabilities(){return this.#Y.capabilities()}scoped(J){return new A(this.#Y,g(this.#Z,J))}async get(J){return this.#Y.get(this.#J(J))}async put(J,Y){await this.#Y.put(this.#J(J),Y)}async delete(J){await this.#Y.delete(this.#J(J))}async*scan(J,Y){for await(let[Z,G]of this.#Y.scan(this.#J(J),this.#G(Y)))yield[this.#$(Z),G]}async batch(J){await this.#Y.batch(J.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#J(Y.key),value:Y.value};return{type:"delete",key:this.#J(Y.key)}}))}async conditionalBatch(J,Y){return K(this.#Y,J.map((Z)=>({key:this.#J(Z.key),expectedValue:Z.expectedValue})),Y.map((Z)=>{if(Z.type==="put")return{type:"put",key:this.#J(Z.key),value:Z.value};return{type:"delete",key:this.#J(Z.key)}}))}async has(J){return P(this.#Y,this.#J(J))}async deletePrefix(J){return C(this.#Y,this.#J(J))}async deleteRange(J,Y){let Z=this.#_(j(Y));return b(this.#Y,this.#J(J),Z)}async*keys(J,Y){for await(let Z of h(this.#Y,this.#J(J),this.#G(Y)))yield this.#$(Z)}async count(J){return v(this.#Y,this.#J(J))}[Symbol.dispose](){this.#Y[Symbol.dispose]()}}function S(J,Y){return new A(J,Y)}var f=67108864;function I(J){if(J.type==="put")return{type:"put",key:J.key,value:U(J.value)};return{type:"delete",key:J.key}}function l(J){return{key:J.key,expectedValue:J.expectedValue===null?null:U(J.expectedValue)}}function d(J){if(!N(J)||typeof J.key!=="string"||typeof J.value!=="string")throw Error("HTTPStorage scan response contained an invalid NDJSON entry.");return{key:J.key,value:J.value}}function p(J){if(!N(J)||typeof J.applied!=="boolean")throw Error('HTTPStorage conditional batch response must include a boolean "applied" field.');return J.applied}function W(J,Y,Z){if(Z!==void 0)J.searchParams.set(Y,String(Z))}function s(J){if(J.trim().length===0)return null;let Y=d(JSON.parse(J));return[Y.key,T(Y.value)]}function a(J){if(J>f)throw Error("HTTPStorage scan response exceeded the maximum allowed size.")}async function*i(J){if(J.body===null)return;let Y=J.body.getReader(),Z=new TextDecoder,G="",X=0,F=!1;try{while(!0){let{done:L,value:D}=await Y.read();if(L){F=!0;break}X+=D.byteLength,a(X),G+=Z.decode(D,{stream:!0});let z=G.split(`
2
- `);G=z.pop()??"";for(let x of z)yield x}if(G+=Z.decode(),G.length>0)yield G}finally{try{if(!F)await Y.cancel()}catch{}Y.releaseLock()}}class r{#Y;#Z;#J;constructor(J){this.#Y=J.baseUrl instanceof URL?J.baseUrl:new URL(J.baseUrl),this.#Z={...J.headers},this.#J=J.remoteConditionalBatch??!1}capabilities(){return{persistence:"remote",readAfterWrite:"eventual",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:this.#J,boundedRangeDelete:!1}}#$(J){let Y=this.#Y.href.endsWith("/")?this.#Y.href:`${this.#Y.href}/`;return new URL(J.replace(/^\/+/,""),Y)}#G(J){return this.#$(`/v1/storage/${encodeURIComponent(J)}`)}#_(J,Y){let Z=this.#$("/v1/storage");return Z.searchParams.set("prefix",J),W(Z,"limit",Y.limit),W(Z,"reverse",Y.reverse),W(Z,"gt",Y.gt),W(Z,"gte",Y.gte),W(Z,"lt",Y.lt),W(Z,"lte",Y.lte),Z}async#X(J,Y={},Z=[]){let G=new Headers(this.#Z);for(let[F,L]of new Headers(Y.headers).entries())G.set(F,L);let X=await fetch(J,{...Y,headers:G});if(!X.ok&&!Z.includes(X.status))throw Error(`HTTPStorage request failed: ${Y.method??"GET"} ${J.pathname} returned ${String(X.status)}.`);return X}async get(J){let Y=await this.#X(this.#G(J),{method:"GET"},[404]);if(Y.status===404)return null;return new Uint8Array(await Y.arrayBuffer())}async put(J,Y){await this.#X(this.#G(J),{method:"PUT",headers:{"content-type":"application/octet-stream"},body:new Blob([Y])})}async delete(J){await this.#X(this.#G(J),{method:"DELETE"})}async*scan(J,Y={}){let Z=await this.#X(this.#_(J,Y),{method:"GET",headers:{accept:"application/x-ndjson"}});for await(let G of i(Z)){let X=s(G);if(X!==null)yield X}}async batch(J){await this.#X(this.#$("/v1/storage/-/batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({operations:J.map(I)})})}async conditionalBatch(J,Y){let Z=await this.#X(this.#$("/v1/storage/-/conditional-batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({conditions:J.map(l),operations:Y.map(I)})});return p(await Z.json())}has(J){return M(this,J)}async*keys(J,Y){yield*Q(this,J,Y)}count(J){return V(this,J)}deletePrefix(J){return E(this,J)}deleteRange(J,Y){return H(this,J,j(Y))}scoped(J){return S(this,J)}[Symbol.dispose](){}}export{r as HTTPStorage};
1
+ var k=Object.defineProperty;var u=(F)=>F;function m(F,J){this[F]=u.bind(null,J)}var n=(F,J)=>{for(var Q in J)k(F,Q,{get:J[Q],enumerable:!0,configurable:!0,set:m.bind(J,Q)})};function U(F){let J=[];for(let Q=0;Q<F.length;Q+=512)J.push(String.fromCharCode(...F.subarray(Q,Q+512)));return btoa(J.join(""))}function T(F){let J=atob(F),Q=new Uint8Array(J.length);for(let Z=0;Z<J.length;Z+=1)Q[Z]=J.charCodeAt(Z);return Q}function N(F){return typeof F==="object"&&F!==null&&!Array.isArray(F)}async function M(F,J){return await F.get(J)!==null}async function*X(F,J,Q){for await(let[Z]of F.scan(J,Q))yield Z}async function V(F,J){let Q=0;for await(let Z of X(F,J))Q++;return Q}async function E(F,J){let Q=[];for await(let Z of X(F,J))Q.push({type:"delete",key:Z});if(Q.length===0)return 0;return await F.batch(Q),Q.length}async function H(F,J,Q){let Z=[];for await(let $ of X(F,J,Q))Z.push({type:"delete",key:$});if(Z.length===0)return 0;return await F.batch(Z),Z.length}function q(F,J,Q){if(!F.capabilities()[J])throw Error(`Feature "${Q}" requires storage capability "${J}", but this storage backend does not provide it.`)}var R="default";function O(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"ÿ"}function GF(F,J={}){if(J.gt!==void 0&&F<=J.gt)return!1;if(J.gte!==void 0&&F<J.gte)return!1;if(J.lt!==void 0&&F>=J.lt)return!1;if(J.lte!==void 0&&F>J.lte)return!1;return!0}function WF(F,J){if(F===null||J===null)return F===J;if(F.byteLength!==J.byteLength)return!1;for(let Q=0;Q<F.byteLength;Q++)if(F[Q]!==J[Q])return!1;return!0}async function P(F,J){if(F.has)return F.has(J);return M(F,J)}function h(F,J,Q){if(F.keys)return F.keys(J,Q);return X(F,J,Q)}async function v(F,J){if(F.count)return F.count(J);return V(F,J)}async function C(F,J){if(F.deletePrefix)return F.deletePrefix(J);return E(F,J)}async function b(F,J,Q){if(q(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(J,Q)}function Y(F){return encodeURIComponent(F)}function XF(F){try{return decodeURIComponent(F)}catch{return null}}var G=(F)=>String(F).padStart(16,"0"),_F={workflow:(F)=>`wf:${Y(F)}`,checkpoint:(F)=>`wf:${Y(F)}:ckpt`,checkpointHistory:(F,J)=>`wf:${Y(F)}:ckpt:${String(J).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${Y(F)}:timeline:`,timeline:(F,J)=>`wf:${Y(F)}:timeline:${String(J).padStart(10,"0")}`,schedule:(F)=>`schedule:${Y(F)}`,scheduleTick:(F,J)=>`schedule-due:${String(F).padStart(16,"0")}:${Y(J)}`,scheduleRun:(F)=>`schedule-run:${Y(F)}`,operation:(F,J,Q)=>`op:${F}:${G(J)}:${Q}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,J,Q)=>`audit:bulk:${G(F)}:${Y(J)}:${Y(Q)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,J)=>`op:resolved-by-time:${G(F)}:${Y(J)}`,asyncActivity:(F,J)=>`async-act:v1:${Y(F)}:${Y(J)}`,activityReconciliationPrefix:(F)=>`actrec:v1:${Y(F)}:`,activityReconciliation:(F,J,Q)=>`actrec:v1:${Y(F)}:${Y(J)}:${Q}`,eventPrefix:(F)=>`ev:${Y(F)}:`,event:(F,J)=>`ev:${Y(F)}:${String(J).padStart(10,"0")}`,eventHead:(F)=>`ev:${Y(F)}:head`,eventWatermark:(F)=>`ev:${Y(F)}:watermark`,signal:(F,J,Q)=>`sig:${Y(F)}:${J}:${Y(Q)}`,signalSequence:(F)=>`sigseq:v1:${Y(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${Y(F)}:`,signalAcceptedResponse:(F,J,Q)=>`sigres:v1:${Y(F)}:${Y(J)}:${Y(Q)}`,deadline:(F,J)=>`wf-deadline:${G(F)}:${Y(J)}`,terminalCleanup:(F,J)=>`wf-cleanup:${G(F)}:${Y(J)}`,delayedStart:(F,J)=>`wf-delayed:${G(F)}:${Y(J)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,J)=>`wf-terminal:${G(F)}:${Y(J)}`,attribute:(F)=>`attr:${Y(F)}`,attributeIndex:(F,J,Q)=>`idx:${F}:${J}:${Y(Q)}`,tagIndex:(F,J)=>`tag:${Y(F)}:${Y(J)}`,updatePrefix:(F)=>`upd:${Y(F)}:`,update:(F,J)=>`upd:${Y(F)}:${J}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,J)=>`upk:${Y(F)}:${J}`,startIdempotency:(F)=>`start-idem:${Y(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${Y(F)}`,budget:(F,J,Q)=>`budget:${F}:${J}:${Q}`,review:(F,J)=>`review:${Y(F)}:${J}`,workflowHeaders:(F)=>`wf-headers:${Y(F)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${Y(F)}`,workflowHasServices:(F)=>`wf-has-services:${Y(F)}`,offload:(F,J)=>`offload:${Y(F)}:${J}`,archive:(F,J)=>`archive:${Y(F)}:${J}`,stateExecution:(F,J)=>`state:execution:${Y(F)}:${Y(J)}`,stateWorkflow:(F,J)=>`state:workflow-scope:${R}:${Y(F)}:${Y(J)}`,streamChunkPrefix:(F,J)=>`blob:${Y(F)}:${J}:chunk:`,streamChunk:(F,J,Q)=>`blob:${Y(F)}:${J}:chunk:${String(Q).padStart(10,"0")}`,streamMetadata:(F,J)=>`blob:${Y(F)}:${J}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,J,Q)=>`tool-effect:${Y(F)}:${J}:${Q}`,workflowVisibilityStatus:(F,J)=>`wf-idx-status:${Y(F)}:${Y(J)}`,workflowVisibilityType:(F,J)=>`wf-idx-type:${Y(F)}:${Y(J)}`,workflowVisibilityCreated:(F,J)=>`wf-idx-created:${G(F)}:${Y(J)}`,workflowVisibilityUpdated:(F,J)=>`wf-idx-updated:${G(F)}:${Y(J)}`,workflowVisibilityDeadline:(F,J)=>`wf-idx-deadline:${G(F)}:${Y(J)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${Y(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function w(F){if(F===void 0)return;if(typeof F!=="number"||!Number.isInteger(F)||F<0)throw Error("deleteRange limit must be a finite non-negative integer");return F===0?0:F}function j(F){let J={},Q=!1;for(let $ of["gt","gte","lt","lte"]){let W=F[$];if(W===void 0)continue;if(typeof W!=="string")throw Error("deleteRange bounds must be strings");J[$]=W,Q=!0}if(!Q)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=w(F.limit);if(Z!==void 0)J.limit=Z;return J}async function K(F,J,Q){let Z=j(Q);if(F.deleteRange)return F.deleteRange(J,Z);return H(F,J,Z)}function c(F,J){let Q={key:F,open:!1};if(J.gte!==void 0&&J.gte>Q.key)Q.key=J.gte,Q.open=!1;if(J.gt!==void 0&&J.gt>=Q.key)Q.key=J.gt,Q.open=!0;return Q}function y(F,J){let Q={key:O(F),open:!0};if(J.lt!==void 0&&J.lt<=Q.key)Q.key=J.lt,Q.open=!0;if(J.lte!==void 0&&J.lte<Q.key)Q.key=J.lte,Q.open=!1;return Q}function HF(F,J){let Q=c(F,J),Z=y(F,J);if(Q.key>Z.key||Q.key===Z.key&&(Q.open||Z.open))return null;return{lower:Q,upper:Z}}function B(F){return F.replaceAll(/:+$/g,"")}function g(F,J){let Q=B(F),Z=B(J);if(Q.length===0)return Z;if(Z.length===0)return Q;return`${Q}:${Z}`}class D{#J;#Q;constructor(F,J){this.#J=F,this.#Q=B(J)}#F(F){if(this.#Q.length===0)return F;return F.length===0?`${this.#Q}:`:`${this.#Q}:${F}`}#Y(F){if(this.#Q.length===0)return F;return F.slice(this.#Q.length+1)}#Z(F={}){let J={};if(F.limit!==void 0)J.limit=F.limit;if(F.reverse!==void 0)J.reverse=F.reverse;if(F.gt!==void 0)J.gt=this.#F(F.gt);if(F.gte!==void 0)J.gte=this.#F(F.gte);if(F.lt!==void 0)J.lt=this.#F(F.lt);if(F.lte!==void 0)J.lte=this.#F(F.lte);return J}#G(F){let J={};if(F.limit!==void 0)J.limit=F.limit;if(F.gt!==void 0)J.gt=this.#F(F.gt);if(F.gte!==void 0)J.gte=this.#F(F.gte);if(F.lt!==void 0)J.lt=this.#F(F.lt);if(F.lte!==void 0)J.lte=this.#F(F.lte);return J}capabilities(){return this.#J.capabilities()}scoped(F){return new D(this.#J,g(this.#Q,F))}async get(F){return this.#J.get(this.#F(F))}async put(F,J){await this.#J.put(this.#F(F),J)}async delete(F){await this.#J.delete(this.#F(F))}async*scan(F,J){for await(let[Q,Z]of this.#J.scan(this.#F(F),this.#Z(J)))yield[this.#Y(Q),Z]}async batch(F){await this.#J.batch(F.map((J)=>{if(J.type==="put")return{type:"put",key:this.#F(J.key),value:J.value};return{type:"delete",key:this.#F(J.key)}}))}async conditionalBatch(F,J){return b(this.#J,F.map((Q)=>({key:this.#F(Q.key),expectedValue:Q.expectedValue})),J.map((Q)=>{if(Q.type==="put")return{type:"put",key:this.#F(Q.key),value:Q.value};return{type:"delete",key:this.#F(Q.key)}}))}async has(F){return P(this.#J,this.#F(F))}async deletePrefix(F){return C(this.#J,this.#F(F))}async deleteRange(F,J){let Q=this.#G(j(J));return K(this.#J,this.#F(F),Q)}async*keys(F,J){for await(let Q of h(this.#J,this.#F(F),this.#Z(J)))yield this.#Y(Q)}async count(F){return v(this.#J,this.#F(F))}[Symbol.dispose](){this.#J[Symbol.dispose]()}}function S(F,J){return new D(F,J)}var f=67108864;function I(F){if(F.type==="put")return{type:"put",key:F.key,value:U(F.value)};return{type:"delete",key:F.key}}function l(F){return{key:F.key,expectedValue:F.expectedValue===null?null:U(F.expectedValue)}}function d(F){if(!N(F)||typeof F.key!=="string"||typeof F.value!=="string")throw Error("HTTPStorage scan response contained an invalid NDJSON entry.");return{key:F.key,value:F.value}}function p(F){if(!N(F)||typeof F.applied!=="boolean")throw Error('HTTPStorage conditional batch response must include a boolean "applied" field.');return F.applied}function _(F,J,Q){if(Q!==void 0)F.searchParams.set(J,String(Q))}function s(F){if(F.trim().length===0)return null;let J=d(JSON.parse(F));return[J.key,T(J.value)]}function a(F){if(F>f)throw Error("HTTPStorage scan response exceeded the maximum allowed size.")}async function*i(F){if(F.body===null)return;let J=F.body.getReader(),Q=new TextDecoder,Z="",$=0,W=!1;try{while(!0){let{done:L,value:A}=await J.read();if(L){W=!0;break}$+=A.byteLength,a($),Z+=Q.decode(A,{stream:!0});let z=Z.split(`
2
+ `);Z=z.pop()??"";for(let x of z)yield x}if(Z+=Q.decode(),Z.length>0)yield Z}finally{try{if(!W)await J.cancel()}catch{}J.releaseLock()}}class r{#J;#Q;#F;constructor(F){this.#J=F.baseUrl instanceof URL?F.baseUrl:new URL(F.baseUrl),this.#Q={...F.headers},this.#F=F.remoteConditionalBatch??!1}capabilities(){return{persistence:"remote",readAfterWrite:"eventual",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:this.#F,boundedRangeDelete:!1}}#Y(F){let J=this.#J.href.endsWith("/")?this.#J.href:`${this.#J.href}/`;return new URL(F.replace(/^\/+/,""),J)}#Z(F){return this.#Y(`/v1/storage/${encodeURIComponent(F)}`)}#G(F,J){let Q=this.#Y("/v1/storage");return Q.searchParams.set("prefix",F),_(Q,"limit",J.limit),_(Q,"reverse",J.reverse),_(Q,"gt",J.gt),_(Q,"gte",J.gte),_(Q,"lt",J.lt),_(Q,"lte",J.lte),Q}async#$(F,J={},Q=[]){let Z=new Headers(this.#Q);for(let[W,L]of new Headers(J.headers).entries())Z.set(W,L);let $=await fetch(F,{...J,headers:Z});if(!$.ok&&!Q.includes($.status))throw Error(`HTTPStorage request failed: ${J.method??"GET"} ${F.pathname} returned ${String($.status)}.`);return $}async get(F){let J=await this.#$(this.#Z(F),{method:"GET"},[404]);if(J.status===404)return null;return new Uint8Array(await J.arrayBuffer())}async put(F,J){await this.#$(this.#Z(F),{method:"PUT",headers:{"content-type":"application/octet-stream"},body:new Blob([J])})}async delete(F){await this.#$(this.#Z(F),{method:"DELETE"})}async*scan(F,J={}){let Q=await this.#$(this.#G(F,J),{method:"GET",headers:{accept:"application/x-ndjson"}});for await(let Z of i(Q)){let $=s(Z);if($!==null)yield $}}async batch(F){await this.#$(this.#Y("/v1/storage/-/batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({operations:F.map(I)})})}async conditionalBatch(F,J){let Q=await this.#$(this.#Y("/v1/storage/-/conditional-batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({conditions:F.map(l),operations:J.map(I)})});return p(await Q.json())}has(F){return M(this,F)}async*keys(F,J){yield*X(this,F,J)}count(F){return V(this,F)}deletePrefix(F){return E(this,F)}deleteRange(F,J){return H(this,F,j(J))}scoped(F){return S(this,F)}[Symbol.dispose](){}}export{r as HTTPStorage};
@@ -13,6 +13,7 @@
13
13
  * import { SQLiteStorage } from '@lostgradient/weft/storage/sqlite'; // Bun or Node SQLite
14
14
  * import { LMDBStorage } from '@lostgradient/weft/storage/lmdb'; // peer: lmdb
15
15
  * import { TursoStorage } from '@lostgradient/weft/storage/turso'; // peer: @libsql/client
16
+ * import { NeonStorage } from '@lostgradient/weft/storage/neon'; // peer: @neondatabase/serverless
16
17
  * import { IndexedDBStorage } from '@lostgradient/weft/storage/indexeddb'; // browser-only
17
18
  * import { WebExtensionStorage } from '@lostgradient/weft/storage/web-extension'; // extension-only
18
19
  * import { HTTPStorage } from '@lostgradient/weft/storage/http'; // remote storage
@@ -119,6 +120,10 @@ declare const exportedKeys: {
119
120
  readonly update: (workflowId: string, updateId: string) => string;
120
121
  readonly updateResponse: (updateId: string) => string;
121
122
  readonly updateIdempotency: (workflowId: string, key: string) => string;
123
+ readonly startIdempotency: (key: string) => string;
124
+ readonly startIdempotencySignalId: (key: string) => string;
125
+ readonly livenessPrefix: () => string;
126
+ readonly liveness: (instanceId: string) => string;
122
127
  readonly budget: (namespace: string, period: string, date: string) => string;
123
128
  readonly review: (workflowId: string, reviewId: string) => string;
124
129
  readonly workflowHeaders: (workflowId: string) => string;
@@ -270,7 +275,7 @@ declare const exportedTextValueStore: typeof textValueStore;
270
275
  * void isWeftKey;
271
276
  * ```
272
277
  */
273
- declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "ev:", "idx:", "offload:", "op:", "review:", "schedule:", "schedule-due:", "schedule-run:", "sig:", "sigres:", "sigseq:", "state:", "tag:", "tool-effect:", "upd:", "upk:", "upr:", "wf:", "wf-cleanup:", "wf-cleanup-needed:", "wf-deadline:", "wf-delayed:", "wf-has-services:", "wf-headers:", "wf-idx-", "wf-terminal:"];
278
+ declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "ev:", "idx:", "liveness:", "offload:", "op:", "review:", "schedule:", "schedule-due:", "schedule-run:", "sig:", "sigres:", "sigseq:", "start-idem:", "state:", "tag:", "tool-effect:", "upd:", "upk:", "upr:", "wf:", "wf-cleanup:", "wf-cleanup-needed:", "wf-deadline:", "wf-delayed:", "wf-has-services:", "wf-headers:", "wf-idx-", "wf-terminal:"];
274
279
  /**
275
280
  * Re-exported {@link withCodec}. See the original declaration for full docs.
276
281
  *
@@ -1 +1 @@
1
- var l=Object.defineProperty;var d=(Y)=>Y;function p(Y,J){this[Y]=d.bind(null,J)}var t=(Y,J)=>{for(var U in J)l(Y,U,{get:J[U],enumerable:!0,configurable:!0,set:p.bind(J,U)})};async function E(Y,J){return await Y.get(J)!==null}async function*T(Y,J,U){for await(let[Z]of Y.scan(J,U))yield Z}async function v(Y,J){let U=0;for await(let Z of T(Y,J))U++;return U}async function K(Y,J){let U=[];for await(let Z of T(Y,J))U.push({type:"delete",key:Z});if(U.length===0)return 0;return await Y.batch(U),U.length}async function C(Y,J,U){let Z=[];for await(let $ of T(Y,J,U))Z.push({type:"delete",key:$});if(Z.length===0)return 0;return await Y.batch(Z),Z.length}function q(Y,J,U){if(!Y.capabilities()[J])throw Error(`Feature "${U}" requires storage capability "${J}", but this storage backend does not provide it.`)}var b="default";function N(Y){return Y.length>0?Y.slice(0,-1)+String.fromCharCode(Y.charCodeAt(Y.length-1)+1):"ÿ"}function O(Y,J={}){if(J.gt!==void 0&&Y<=J.gt)return!1;if(J.gte!==void 0&&Y<J.gte)return!1;if(J.lt!==void 0&&Y>=J.lt)return!1;if(J.lte!==void 0&&Y>J.lte)return!1;return!0}function I(Y,J){if(Y===null||J===null)return Y===J;if(Y.byteLength!==J.byteLength)return!1;for(let U=0;U<Y.byteLength;U++)if(Y[U]!==J[U])return!1;return!0}async function S(Y,J){if(Y.has)return Y.has(J);return E(Y,J)}function x(Y,J,U){if(Y.keys)return Y.keys(J,U);return T(Y,J,U)}async function k(Y,J){if(Y.count)return Y.count(J);return v(Y,J)}async function w(Y,J){if(Y.deletePrefix)return Y.deletePrefix(J);return K(Y,J)}async function u(Y,J,U){if(q(Y,"conditionalBatch","storageConditionalBatch"),!Y.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return Y.conditionalBatch(J,U)}function X(Y){return encodeURIComponent(Y)}function GY(Y){try{return decodeURIComponent(Y)}catch{return null}}var _=(Y)=>String(Y).padStart(16,"0"),FY={workflow:(Y)=>`wf:${X(Y)}`,checkpoint:(Y)=>`wf:${X(Y)}:ckpt`,checkpointHistory:(Y,J)=>`wf:${X(Y)}:ckpt:${String(J).padStart(10,"0")}`,timelinePrefix:(Y)=>`wf:${X(Y)}:timeline:`,timeline:(Y,J)=>`wf:${X(Y)}:timeline:${String(J).padStart(10,"0")}`,schedule:(Y)=>`schedule:${X(Y)}`,scheduleTick:(Y,J)=>`schedule-due:${String(Y).padStart(16,"0")}:${X(J)}`,scheduleRun:(Y)=>`schedule-run:${X(Y)}`,operation:(Y,J,U)=>`op:${Y}:${_(J)}:${U}`,operationInflight:(Y)=>`op:inflight:${Y}`,operationQueued:(Y)=>`op:queued:${Y}`,operationResolved:(Y)=>`op:resolved:${Y}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(Y,J,U)=>`audit:bulk:${_(Y)}:${X(J)}:${X(U)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(Y,J)=>`op:resolved-by-time:${_(Y)}:${X(J)}`,asyncActivity:(Y,J)=>`async-act:v1:${X(Y)}:${X(J)}`,activityReconciliationPrefix:(Y)=>`actrec:v1:${X(Y)}:`,activityReconciliation:(Y,J,U)=>`actrec:v1:${X(Y)}:${X(J)}:${U}`,eventPrefix:(Y)=>`ev:${X(Y)}:`,event:(Y,J)=>`ev:${X(Y)}:${String(J).padStart(10,"0")}`,eventHead:(Y)=>`ev:${X(Y)}:head`,eventWatermark:(Y)=>`ev:${X(Y)}:watermark`,signal:(Y,J,U)=>`sig:${X(Y)}:${J}:${X(U)}`,signalSequence:(Y)=>`sigseq:v1:${X(Y)}`,signalAcceptedResponsePrefix:(Y)=>`sigres:v1:${X(Y)}:`,signalAcceptedResponse:(Y,J,U)=>`sigres:v1:${X(Y)}:${X(J)}:${X(U)}`,deadline:(Y,J)=>`wf-deadline:${_(Y)}:${X(J)}`,terminalCleanup:(Y,J)=>`wf-cleanup:${_(Y)}:${X(J)}`,delayedStart:(Y,J)=>`wf-delayed:${_(Y)}:${X(J)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(Y,J)=>`wf-terminal:${_(Y)}:${X(J)}`,attribute:(Y)=>`attr:${X(Y)}`,attributeIndex:(Y,J,U)=>`idx:${Y}:${J}:${X(U)}`,tagIndex:(Y,J)=>`tag:${X(Y)}:${X(J)}`,updatePrefix:(Y)=>`upd:${X(Y)}:`,update:(Y,J)=>`upd:${X(Y)}:${J}`,updateResponse:(Y)=>`upr:${Y}`,updateIdempotency:(Y,J)=>`upk:${X(Y)}:${J}`,budget:(Y,J,U)=>`budget:${Y}:${J}:${U}`,review:(Y,J)=>`review:${X(Y)}:${J}`,workflowHeaders:(Y)=>`wf-headers:${X(Y)}`,terminalCleanupNeeded:(Y)=>`wf-cleanup-needed:${X(Y)}`,workflowHasServices:(Y)=>`wf-has-services:${X(Y)}`,offload:(Y,J)=>`offload:${X(Y)}:${J}`,archive:(Y,J)=>`archive:${X(Y)}:${J}`,stateExecution:(Y,J)=>`state:execution:${X(Y)}:${X(J)}`,stateWorkflow:(Y,J)=>`state:workflow-scope:${b}:${X(Y)}:${X(J)}`,streamChunkPrefix:(Y,J)=>`blob:${X(Y)}:${J}:chunk:`,streamChunk:(Y,J,U)=>`blob:${X(Y)}:${J}:chunk:${String(U).padStart(10,"0")}`,streamMetadata:(Y,J)=>`blob:${X(Y)}:${J}:meta`,budgetCharged:(Y)=>`budget-charged:${Y}`,toolEffect:(Y,J,U)=>`tool-effect:${X(Y)}:${J}:${U}`,workflowVisibilityStatus:(Y,J)=>`wf-idx-status:${X(Y)}:${X(J)}`,workflowVisibilityType:(Y,J)=>`wf-idx-type:${X(Y)}:${X(J)}`,workflowVisibilityCreated:(Y,J)=>`wf-idx-created:${_(Y)}:${X(J)}`,workflowVisibilityUpdated:(Y,J)=>`wf-idx-updated:${_(Y)}:${X(J)}`,workflowVisibilityDeadline:(Y,J)=>`wf-idx-deadline:${_(Y)}:${X(J)}`,workflowVisibilityManifest:(Y)=>`wf-idx-manifest:${X(Y)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function s(Y){if(Y===void 0)return;if(typeof Y!=="number"||!Number.isInteger(Y)||Y<0)throw Error("deleteRange limit must be a finite non-negative integer");return Y===0?0:Y}function P(Y){let J={},U=!1;for(let $ of["gt","gte","lt","lte"]){let F=Y[$];if(F===void 0)continue;if(typeof F!=="string")throw Error("deleteRange bounds must be strings");J[$]=F,U=!0}if(!U)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=s(Y.limit);if(Z!==void 0)J.limit=Z;return J}async function y(Y,J,U){let Z=P(U);if(Y.deleteRange)return Y.deleteRange(J,Z);return C(Y,J,Z)}function a(Y,J){let U={key:Y,open:!1};if(J.gte!==void 0&&J.gte>U.key)U.key=J.gte,U.open=!1;if(J.gt!==void 0&&J.gt>=U.key)U.key=J.gt,U.open=!0;return U}function i(Y,J){let U={key:N(Y),open:!0};if(J.lt!==void 0&&J.lt<=U.key)U.key=J.lt,U.open=!0;if(J.lte!==void 0&&J.lte<U.key)U.key=J.lte,U.open=!1;return U}function m(Y,J){let U=a(Y,J),Z=i(Y,J);if(U.key>Z.key||U.key===Z.key&&(U.open||Z.open))return null;return{lower:U,upper:Z}}function R(Y){return Y.replaceAll(/:+$/g,"")}function n(Y,J){let U=R(Y),Z=R(J);if(U.length===0)return Z;if(Z.length===0)return U;return`${U}:${Z}`}class h{#J;#U;constructor(Y,J){this.#J=Y,this.#U=R(J)}#Y(Y){if(this.#U.length===0)return Y;return Y.length===0?`${this.#U}:`:`${this.#U}:${Y}`}#X(Y){if(this.#U.length===0)return Y;return Y.slice(this.#U.length+1)}#Z(Y={}){let J={};if(Y.limit!==void 0)J.limit=Y.limit;if(Y.reverse!==void 0)J.reverse=Y.reverse;if(Y.gt!==void 0)J.gt=this.#Y(Y.gt);if(Y.gte!==void 0)J.gte=this.#Y(Y.gte);if(Y.lt!==void 0)J.lt=this.#Y(Y.lt);if(Y.lte!==void 0)J.lte=this.#Y(Y.lte);return J}#$(Y){let J={};if(Y.limit!==void 0)J.limit=Y.limit;if(Y.gt!==void 0)J.gt=this.#Y(Y.gt);if(Y.gte!==void 0)J.gte=this.#Y(Y.gte);if(Y.lt!==void 0)J.lt=this.#Y(Y.lt);if(Y.lte!==void 0)J.lte=this.#Y(Y.lte);return J}capabilities(){return this.#J.capabilities()}scoped(Y){return new h(this.#J,n(this.#U,Y))}async get(Y){return this.#J.get(this.#Y(Y))}async put(Y,J){await this.#J.put(this.#Y(Y),J)}async delete(Y){await this.#J.delete(this.#Y(Y))}async*scan(Y,J){for await(let[U,Z]of this.#J.scan(this.#Y(Y),this.#Z(J)))yield[this.#X(U),Z]}async batch(Y){await this.#J.batch(Y.map((J)=>{if(J.type==="put")return{type:"put",key:this.#Y(J.key),value:J.value};return{type:"delete",key:this.#Y(J.key)}}))}async conditionalBatch(Y,J){return u(this.#J,Y.map((U)=>({key:this.#Y(U.key),expectedValue:U.expectedValue})),J.map((U)=>{if(U.type==="put")return{type:"put",key:this.#Y(U.key),value:U.value};return{type:"delete",key:this.#Y(U.key)}}))}async has(Y){return S(this.#J,this.#Y(Y))}async deletePrefix(Y){return w(this.#J,this.#Y(Y))}async deleteRange(Y,J){let U=this.#$(P(J));return y(this.#J,this.#Y(Y),U)}async*keys(Y,J){for await(let U of x(this.#J,this.#Y(Y),this.#Z(J)))yield this.#X(U)}async count(Y){return k(this.#J,this.#Y(Y))}[Symbol.dispose](){this.#J[Symbol.dispose]()}}function f(Y,J){return new h(Y,J)}var Q="kv";function A(Y){return new Promise((J,U)=>{Y.onsuccess=()=>J(Y.result),Y.onerror=()=>U(Y.error)})}function g(Y,J){let U=null,Z=null,$=null,F=(G,V)=>{let W=G??Error(V);if(Z){let B=Z;U=null,Z=null,B(W);return}$=W};return Y.onsuccess=()=>{if(!U)return;let G=U;U=null,Z=null,G(Y.result)},Y.onerror=()=>{F(Y.error,"IndexedDB cursor request failed.")},J.onerror=()=>{F(J.error,"IndexedDB transaction failed.")},J.onabort=()=>{F(J.error,"IndexedDB transaction aborted.")},()=>{return new Promise((G,V)=>{if($){let W=$;$=null,V(W);return}if(U=G,Z=V,Y.readyState==="done"){let W=U;U=null,Z=null,W?.(Y.result)}})}}class r{#J;#U=null;#Y;constructor(Y="weft"){this.#J=Y,this.#Y=this.#X()}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#X(){let Y=indexedDB.open(this.#J,1);return Y.onupgradeneeded=()=>{let J=Y.result;if(!J.objectStoreNames.contains(Q))J.createObjectStore(Q)},A(Y).then((J)=>{return this.#U=J,J})}async get(Y){let Z=(await this.#Y).transaction(Q,"readonly").objectStore(Q),$=await A(Z.get(Y));return $===void 0?null:new Uint8Array($)}async put(Y,J){let $=(await this.#Y).transaction(Q,"readwrite").objectStore(Q);await A($.put(J,Y))}async delete(Y){let Z=(await this.#Y).transaction(Q,"readwrite").objectStore(Q);await A(Z.delete(Y))}async has(Y){let Z=(await this.#Y).transaction(Q,"readonly").objectStore(Q);return await A(Z.count(Y))>0}async deletePrefix(Y){let J=await this.#Y,U=N(Y),Z=IDBKeyRange.bound(Y,U,!1,!0);return new Promise(($,F)=>{let G=J.transaction(Q,"readwrite"),V=G.objectStore(Q),W=0,B=V.count(Z);B.onsuccess=()=>{W=B.result,V.delete(Z)},G.oncomplete=()=>$(W),G.onerror=()=>F(G.error)})}async deleteRange(Y,J){let U=P(J),Z=m(Y,U);if(Z===null)return 0;let $=IDBKeyRange.bound(Z.lower.key,Z.upper.key,Z.lower.open,Z.upper.open),F=await this.#Y,{limit:G}=U;return new Promise((V,W)=>{let B=F.transaction(Q,"readwrite"),M=B.objectStore(Q),D=0;if(G===void 0){let H=M.count($);H.onsuccess=()=>{D=H.result,M.delete($)}}else{let H=M.openCursor($,"next");H.onsuccess=()=>{let z=H.result;if(z===null||D>=G)return;if(z.delete(),D++,D<G)z.continue()}}B.oncomplete=()=>V(D),B.onerror=()=>W(B.error)})}async*scan(Y,J={}){let{limit:U,reverse:Z}=J,$=await this.#Y,F=N(Y),G=IDBKeyRange.bound(Y,F,!1,!0),V=Z?"prev":"next",W=$.transaction(Q,"readonly"),M=W.objectStore(Q).openCursor(G,V),D=0,H=g(M,W),z=!1;try{let L=await H();while(L){if(U!==void 0&&D>=U)break;let j=L.key;if(O(j,J))yield[j,new Uint8Array(L.value)],D++;L.continue(),L=await H()}z=!0}finally{if(!z)try{W.abort()}catch{}}}async batch(Y){if(Y.length===0)return;let J=await this.#Y;return new Promise((U,Z)=>{let $=J.transaction(Q,"readwrite"),F=$.objectStore(Q);for(let G of Y)if(G.type==="put")F.put(G.value,G.key);else F.delete(G.key);$.oncomplete=()=>U(),$.onerror=()=>Z($.error)})}async conditionalBatch(Y,J){let U=await this.#Y;return new Promise((Z,$)=>{let F=U.transaction(Q,"readwrite"),G=F.objectStore(Q),V=!1,W=!1,B=(H,z)=>{if(V)return;V=!0,$(H??Error(z))};F.oncomplete=()=>{if(V)return;V=!0,Z(!0)},F.onerror=()=>{B(F.error,"IndexedDB conditionalBatch transaction failed.")},F.onabort=()=>{if(V)return;if(V=!0,W){Z(!1);return}$(F.error??Error("IndexedDB conditionalBatch transaction aborted."))};let M=()=>{for(let H of J)if(H.type==="put")G.put(H.value,H.key);else G.delete(H.key)},D=(H)=>{if(H>=Y.length){M();return}let z=Y[H],L=G.get(z.key);L.onsuccess=()=>{let j=L.result,c=j===void 0?null:new Uint8Array(j);if(!I(c,z.expectedValue)){W=!0,F.abort();return}D(H+1)},L.onerror=()=>{B(L.error,"IndexedDB conditionalBatch condition check failed.")}};D(0)})}async*keys(Y,J={}){let{limit:U,reverse:Z}=J,$=await this.#Y,F=N(Y),G=IDBKeyRange.bound(Y,F,!1,!0),V=Z?"prev":"next",W=$.transaction(Q,"readonly"),M=W.objectStore(Q).openKeyCursor(G,V),D=0,H=g(M,W),z=!1;try{let L=await H();while(L){if(U!==void 0&&D>=U)break;let j=L.key;if(O(j,J))yield j,D++;L.continue(),L=await H()}z=!0}finally{if(!z)try{W.abort()}catch{}}}async count(Y){let J=await this.#Y,U=N(Y),$=J.transaction(Q,"readonly").objectStore(Q);return A($.count(IDBKeyRange.bound(Y,U,!1,!0)))}scoped(Y){return f(this,Y)}[Symbol.dispose](){if(this.#U)this.#U.close(),this.#U=null}}export{r as IndexedDBStorage};
1
+ var l=Object.defineProperty;var d=(F)=>F;function p(F,Y){this[F]=d.bind(null,Y)}var t=(F,Y)=>{for(var J in Y)l(F,J,{get:Y[J],enumerable:!0,configurable:!0,set:p.bind(Y,J)})};async function E(F,Y){return await F.get(Y)!==null}async function*T(F,Y,J){for await(let[U]of F.scan(Y,J))yield U}async function v(F,Y){let J=0;for await(let U of T(F,Y))J++;return J}async function K(F,Y){let J=[];for await(let U of T(F,Y))J.push({type:"delete",key:U});if(J.length===0)return 0;return await F.batch(J),J.length}async function b(F,Y,J){let U=[];for await(let X of T(F,Y,J))U.push({type:"delete",key:X});if(U.length===0)return 0;return await F.batch(U),U.length}function q(F,Y,J){if(!F.capabilities()[Y])throw Error(`Feature "${J}" requires storage capability "${Y}", but this storage backend does not provide it.`)}var C="default";function N(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"ÿ"}function O(F,Y={}){if(Y.gt!==void 0&&F<=Y.gt)return!1;if(Y.gte!==void 0&&F<Y.gte)return!1;if(Y.lt!==void 0&&F>=Y.lt)return!1;if(Y.lte!==void 0&&F>Y.lte)return!1;return!0}function I(F,Y){if(F===null||Y===null)return F===Y;if(F.byteLength!==Y.byteLength)return!1;for(let J=0;J<F.byteLength;J++)if(F[J]!==Y[J])return!1;return!0}async function S(F,Y){if(F.has)return F.has(Y);return E(F,Y)}function x(F,Y,J){if(F.keys)return F.keys(Y,J);return T(F,Y,J)}async function k(F,Y){if(F.count)return F.count(Y);return v(F,Y)}async function w(F,Y){if(F.deletePrefix)return F.deletePrefix(Y);return K(F,Y)}async function u(F,Y,J){if(q(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(Y,J)}function Q(F){return encodeURIComponent(F)}function ZF(F){try{return decodeURIComponent(F)}catch{return null}}var _=(F)=>String(F).padStart(16,"0"),$F={workflow:(F)=>`wf:${Q(F)}`,checkpoint:(F)=>`wf:${Q(F)}:ckpt`,checkpointHistory:(F,Y)=>`wf:${Q(F)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${Q(F)}:timeline:`,timeline:(F,Y)=>`wf:${Q(F)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(F)=>`schedule:${Q(F)}`,scheduleTick:(F,Y)=>`schedule-due:${String(F).padStart(16,"0")}:${Q(Y)}`,scheduleRun:(F)=>`schedule-run:${Q(F)}`,operation:(F,Y,J)=>`op:${F}:${_(Y)}:${J}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,Y,J)=>`audit:bulk:${_(F)}:${Q(Y)}:${Q(J)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,Y)=>`op:resolved-by-time:${_(F)}:${Q(Y)}`,asyncActivity:(F,Y)=>`async-act:v1:${Q(F)}:${Q(Y)}`,activityReconciliationPrefix:(F)=>`actrec:v1:${Q(F)}:`,activityReconciliation:(F,Y,J)=>`actrec:v1:${Q(F)}:${Q(Y)}:${J}`,eventPrefix:(F)=>`ev:${Q(F)}:`,event:(F,Y)=>`ev:${Q(F)}:${String(Y).padStart(10,"0")}`,eventHead:(F)=>`ev:${Q(F)}:head`,eventWatermark:(F)=>`ev:${Q(F)}:watermark`,signal:(F,Y,J)=>`sig:${Q(F)}:${Y}:${Q(J)}`,signalSequence:(F)=>`sigseq:v1:${Q(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${Q(F)}:`,signalAcceptedResponse:(F,Y,J)=>`sigres:v1:${Q(F)}:${Q(Y)}:${Q(J)}`,deadline:(F,Y)=>`wf-deadline:${_(F)}:${Q(Y)}`,terminalCleanup:(F,Y)=>`wf-cleanup:${_(F)}:${Q(Y)}`,delayedStart:(F,Y)=>`wf-delayed:${_(F)}:${Q(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,Y)=>`wf-terminal:${_(F)}:${Q(Y)}`,attribute:(F)=>`attr:${Q(F)}`,attributeIndex:(F,Y,J)=>`idx:${F}:${Y}:${Q(J)}`,tagIndex:(F,Y)=>`tag:${Q(F)}:${Q(Y)}`,updatePrefix:(F)=>`upd:${Q(F)}:`,update:(F,Y)=>`upd:${Q(F)}:${Y}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,Y)=>`upk:${Q(F)}:${Y}`,startIdempotency:(F)=>`start-idem:${Q(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${Q(F)}`,budget:(F,Y,J)=>`budget:${F}:${Y}:${J}`,review:(F,Y)=>`review:${Q(F)}:${Y}`,workflowHeaders:(F)=>`wf-headers:${Q(F)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${Q(F)}`,workflowHasServices:(F)=>`wf-has-services:${Q(F)}`,offload:(F,Y)=>`offload:${Q(F)}:${Y}`,archive:(F,Y)=>`archive:${Q(F)}:${Y}`,stateExecution:(F,Y)=>`state:execution:${Q(F)}:${Q(Y)}`,stateWorkflow:(F,Y)=>`state:workflow-scope:${C}:${Q(F)}:${Q(Y)}`,streamChunkPrefix:(F,Y)=>`blob:${Q(F)}:${Y}:chunk:`,streamChunk:(F,Y,J)=>`blob:${Q(F)}:${Y}:chunk:${String(J).padStart(10,"0")}`,streamMetadata:(F,Y)=>`blob:${Q(F)}:${Y}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,Y,J)=>`tool-effect:${Q(F)}:${Y}:${J}`,workflowVisibilityStatus:(F,Y)=>`wf-idx-status:${Q(F)}:${Q(Y)}`,workflowVisibilityType:(F,Y)=>`wf-idx-type:${Q(F)}:${Q(Y)}`,workflowVisibilityCreated:(F,Y)=>`wf-idx-created:${_(F)}:${Q(Y)}`,workflowVisibilityUpdated:(F,Y)=>`wf-idx-updated:${_(F)}:${Q(Y)}`,workflowVisibilityDeadline:(F,Y)=>`wf-idx-deadline:${_(F)}:${Q(Y)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${Q(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function s(F){if(F===void 0)return;if(typeof F!=="number"||!Number.isInteger(F)||F<0)throw Error("deleteRange limit must be a finite non-negative integer");return F===0?0:F}function P(F){let Y={},J=!1;for(let X of["gt","gte","lt","lte"]){let $=F[X];if($===void 0)continue;if(typeof $!=="string")throw Error("deleteRange bounds must be strings");Y[X]=$,J=!0}if(!J)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let U=s(F.limit);if(U!==void 0)Y.limit=U;return Y}async function m(F,Y,J){let U=P(J);if(F.deleteRange)return F.deleteRange(Y,U);return b(F,Y,U)}function a(F,Y){let J={key:F,open:!1};if(Y.gte!==void 0&&Y.gte>J.key)J.key=Y.gte,J.open=!1;if(Y.gt!==void 0&&Y.gt>=J.key)J.key=Y.gt,J.open=!0;return J}function i(F,Y){let J={key:N(F),open:!0};if(Y.lt!==void 0&&Y.lt<=J.key)J.key=Y.lt,J.open=!0;if(Y.lte!==void 0&&Y.lte<J.key)J.key=Y.lte,J.open=!1;return J}function y(F,Y){let J=a(F,Y),U=i(F,Y);if(J.key>U.key||J.key===U.key&&(J.open||U.open))return null;return{lower:J,upper:U}}function h(F){return F.replaceAll(/:+$/g,"")}function n(F,Y){let J=h(F),U=h(Y);if(J.length===0)return U;if(U.length===0)return J;return`${J}:${U}`}class R{#Y;#J;constructor(F,Y){this.#Y=F,this.#J=h(Y)}#F(F){if(this.#J.length===0)return F;return F.length===0?`${this.#J}:`:`${this.#J}:${F}`}#Q(F){if(this.#J.length===0)return F;return F.slice(this.#J.length+1)}#U(F={}){let Y={};if(F.limit!==void 0)Y.limit=F.limit;if(F.reverse!==void 0)Y.reverse=F.reverse;if(F.gt!==void 0)Y.gt=this.#F(F.gt);if(F.gte!==void 0)Y.gte=this.#F(F.gte);if(F.lt!==void 0)Y.lt=this.#F(F.lt);if(F.lte!==void 0)Y.lte=this.#F(F.lte);return Y}#X(F){let Y={};if(F.limit!==void 0)Y.limit=F.limit;if(F.gt!==void 0)Y.gt=this.#F(F.gt);if(F.gte!==void 0)Y.gte=this.#F(F.gte);if(F.lt!==void 0)Y.lt=this.#F(F.lt);if(F.lte!==void 0)Y.lte=this.#F(F.lte);return Y}capabilities(){return this.#Y.capabilities()}scoped(F){return new R(this.#Y,n(this.#J,F))}async get(F){return this.#Y.get(this.#F(F))}async put(F,Y){await this.#Y.put(this.#F(F),Y)}async delete(F){await this.#Y.delete(this.#F(F))}async*scan(F,Y){for await(let[J,U]of this.#Y.scan(this.#F(F),this.#U(Y)))yield[this.#Q(J),U]}async batch(F){await this.#Y.batch(F.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#F(Y.key),value:Y.value};return{type:"delete",key:this.#F(Y.key)}}))}async conditionalBatch(F,Y){return u(this.#Y,F.map((J)=>({key:this.#F(J.key),expectedValue:J.expectedValue})),Y.map((J)=>{if(J.type==="put")return{type:"put",key:this.#F(J.key),value:J.value};return{type:"delete",key:this.#F(J.key)}}))}async has(F){return S(this.#Y,this.#F(F))}async deletePrefix(F){return w(this.#Y,this.#F(F))}async deleteRange(F,Y){let J=this.#X(P(Y));return m(this.#Y,this.#F(F),J)}async*keys(F,Y){for await(let J of x(this.#Y,this.#F(F),this.#U(Y)))yield this.#Q(J)}async count(F){return k(this.#Y,this.#F(F))}[Symbol.dispose](){this.#Y[Symbol.dispose]()}}function f(F,Y){return new R(F,Y)}var G="kv";function A(F){return new Promise((Y,J)=>{F.onsuccess=()=>Y(F.result),F.onerror=()=>J(F.error)})}function g(F,Y){let J=null,U=null,X=null,$=(Z,L)=>{let W=Z??Error(L);if(U){let B=U;J=null,U=null,B(W);return}X=W};return F.onsuccess=()=>{if(!J)return;let Z=J;J=null,U=null,Z(F.result)},F.onerror=()=>{$(F.error,"IndexedDB cursor request failed.")},Y.onerror=()=>{$(Y.error,"IndexedDB transaction failed.")},Y.onabort=()=>{$(Y.error,"IndexedDB transaction aborted.")},()=>{return new Promise((Z,L)=>{if(X){let W=X;X=null,L(W);return}if(J=Z,U=L,F.readyState==="done"){let W=J;J=null,U=null,W?.(F.result)}})}}class r{#Y;#J=null;#F;constructor(F="weft"){this.#Y=F,this.#F=this.#Q()}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#Q(){let F=indexedDB.open(this.#Y,1);return F.onupgradeneeded=()=>{let Y=F.result;if(!Y.objectStoreNames.contains(G))Y.createObjectStore(G)},A(F).then((Y)=>{return this.#J=Y,Y})}async get(F){let U=(await this.#F).transaction(G,"readonly").objectStore(G),X=await A(U.get(F));return X===void 0?null:new Uint8Array(X)}async put(F,Y){let X=(await this.#F).transaction(G,"readwrite").objectStore(G);await A(X.put(Y,F))}async delete(F){let U=(await this.#F).transaction(G,"readwrite").objectStore(G);await A(U.delete(F))}async has(F){let U=(await this.#F).transaction(G,"readonly").objectStore(G);return await A(U.count(F))>0}async deletePrefix(F){let Y=await this.#F,J=N(F),U=IDBKeyRange.bound(F,J,!1,!0);return new Promise((X,$)=>{let Z=Y.transaction(G,"readwrite"),L=Z.objectStore(G),W=0,B=L.count(U);B.onsuccess=()=>{W=B.result,L.delete(U)},Z.oncomplete=()=>X(W),Z.onerror=()=>$(Z.error)})}async deleteRange(F,Y){let J=P(Y),U=y(F,J);if(U===null)return 0;let X=IDBKeyRange.bound(U.lower.key,U.upper.key,U.lower.open,U.upper.open),$=await this.#F,{limit:Z}=J;return new Promise((L,W)=>{let B=$.transaction(G,"readwrite"),M=B.objectStore(G),D=0;if(Z===void 0){let H=M.count(X);H.onsuccess=()=>{D=H.result,M.delete(X)}}else{let H=M.openCursor(X,"next");H.onsuccess=()=>{let z=H.result;if(z===null||D>=Z)return;if(z.delete(),D++,D<Z)z.continue()}}B.oncomplete=()=>L(D),B.onerror=()=>W(B.error)})}async*scan(F,Y={}){let{limit:J,reverse:U}=Y,X=await this.#F,$=N(F),Z=IDBKeyRange.bound(F,$,!1,!0),L=U?"prev":"next",W=X.transaction(G,"readonly"),M=W.objectStore(G).openCursor(Z,L),D=0,H=g(M,W),z=!1;try{let V=await H();while(V){if(J!==void 0&&D>=J)break;let j=V.key;if(O(j,Y))yield[j,new Uint8Array(V.value)],D++;V.continue(),V=await H()}z=!0}finally{if(!z)try{W.abort()}catch{}}}async batch(F){if(F.length===0)return;let Y=await this.#F;return new Promise((J,U)=>{let X=Y.transaction(G,"readwrite"),$=X.objectStore(G);for(let Z of F)if(Z.type==="put")$.put(Z.value,Z.key);else $.delete(Z.key);X.oncomplete=()=>J(),X.onerror=()=>U(X.error)})}async conditionalBatch(F,Y){let J=await this.#F;return new Promise((U,X)=>{let $=J.transaction(G,"readwrite"),Z=$.objectStore(G),L=!1,W=!1,B=(H,z)=>{if(L)return;L=!0,X(H??Error(z))};$.oncomplete=()=>{if(L)return;L=!0,U(!0)},$.onerror=()=>{B($.error,"IndexedDB conditionalBatch transaction failed.")},$.onabort=()=>{if(L)return;if(L=!0,W){U(!1);return}X($.error??Error("IndexedDB conditionalBatch transaction aborted."))};let M=()=>{for(let H of Y)if(H.type==="put")Z.put(H.value,H.key);else Z.delete(H.key)},D=(H)=>{if(H>=F.length){M();return}let z=F[H],V=Z.get(z.key);V.onsuccess=()=>{let j=V.result,c=j===void 0?null:new Uint8Array(j);if(!I(c,z.expectedValue)){W=!0,$.abort();return}D(H+1)},V.onerror=()=>{B(V.error,"IndexedDB conditionalBatch condition check failed.")}};D(0)})}async*keys(F,Y={}){let{limit:J,reverse:U}=Y,X=await this.#F,$=N(F),Z=IDBKeyRange.bound(F,$,!1,!0),L=U?"prev":"next",W=X.transaction(G,"readonly"),M=W.objectStore(G).openKeyCursor(Z,L),D=0,H=g(M,W),z=!1;try{let V=await H();while(V){if(J!==void 0&&D>=J)break;let j=V.key;if(O(j,Y))yield j,D++;V.continue(),V=await H()}z=!0}finally{if(!z)try{W.abort()}catch{}}}async count(F){let Y=await this.#F,J=N(F),X=Y.transaction(G,"readonly").objectStore(G);return A(X.count(IDBKeyRange.bound(F,J,!1,!0)))}scoped(F){return f(this,F)}[Symbol.dispose](){if(this.#J)this.#J.close(),this.#J=null}}export{r as IndexedDBStorage};
@@ -321,6 +321,32 @@ export declare const KEYS: {
321
321
  readonly update: (workflowId: string, updateId: string) => string;
322
322
  readonly updateResponse: (updateId: string) => string;
323
323
  readonly updateIdempotency: (workflowId: string, key: string) => string;
324
+ /**
325
+ * Maps a start `idempotencyKey` to the workflow id created for it. Written
326
+ * atomically with the workflow record under a `conditionalBatch` gated on this
327
+ * key being absent, so concurrent same-key starts converge on one workflow.
328
+ * Unlike `updateIdempotency`, it is keyed by the idempotency key alone (no
329
+ * workflow id) because the workflow id is the value it resolves to. It is
330
+ * intentionally NOT swept on terminal cleanup: it must outlive the run so a
331
+ * post-completion `startOrSignal` sees a terminal workflow (and conflicts)
332
+ * rather than missing the mapping and creating a fresh run.
333
+ */
334
+ readonly startIdempotency: (key: string) => string;
335
+ /**
336
+ * The convergence signal id that `startOrSignal` derives from an idempotency
337
+ * key so independent same-key callers deliver ONE signal. Deliberately uses the
338
+ * RAW key (not `encodeStorageKeyComponent`): unlike `startIdempotency` this is a
339
+ * signal id, not a storage key, and `validateSignalId` is character-agnostic, so
340
+ * the raw key is always a valid id as long as it fits the byte cap (enforced as
341
+ * ≤117 bytes so `"start-idem:"` + key stays within the 128-byte signal-id
342
+ * ceiling). The two derivations are independent namespaces; both are individually
343
+ * correct, so the raw-vs-encoded difference is harmless.
344
+ */
345
+ readonly startIdempotencySignalId: (key: string) => string;
346
+ /** Scan prefix for engine liveness heartbeats (best-effort second-instance detection). */
347
+ readonly livenessPrefix: () => string;
348
+ /** Per-engine liveness heartbeat key. One key per engine instance under the shared store. */
349
+ readonly liveness: (instanceId: string) => string;
324
350
  readonly budget: (namespace: string, period: string, date: string) => string;
325
351
  readonly review: (workflowId: string, reviewId: string) => string;
326
352
  readonly workflowHeaders: (workflowId: string) => string;
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var $=Object.defineProperty;var j=(E)=>E;function L(E,_){this[E]=j.bind(null,_)}var H=(E,_)=>{for(var F in _)$(E,F,{get:_[F],enumerable:!0,configurable:!0,set:L.bind(_,F)})};var G=(E,_)=>()=>(E&&(_=E(E=0)),_);function U(E,_,F){if(!E.capabilities()[_])throw Error(`Feature "${F}" requires storage capability "${_}", but this storage backend does not provide it.`)}function z(E){let _=E.capabilities(),F=[];if(_.persistence!=="local")F.push(`persistence must be "local" (got "${_.persistence}")`);if(_.readAfterWrite!=="linearizable")F.push(`readAfterWrite must be "linearizable" (got "${_.readAfterWrite}")`);if(_.scanConsistency!=="snapshot")F.push(`scanConsistency must be "snapshot" (got "${_.scanConsistency}")`);if(!_.atomicBatch)F.push("atomicBatch must be true");if(!_.conditionalBatch)F.push("conditionalBatch must be true");if(F.length>0)throw Error(`Storage is not durable enough for recovery: ${F.join("; ")}.`)}var B="default";async function J(E,_){return await E.get(_)!==null}async function*X(E,_,F){for await(let[Y]of E.scan(_,F))yield Y}async function M(E,_){let F=0;for await(let Y of X(E,_))F++;return F}async function O(E,_){let F=[];for await(let Y of X(E,_))F.push({type:"delete",key:Y});if(F.length===0)return 0;return await E.batch(F),F.length}async function A(E,_,F){let Y=[];for await(let Z of X(E,_,F))Y.push({type:"delete",key:Z});if(Y.length===0)return 0;return await E.batch(Y),Y.length}var Q;var V=G(()=>{Q=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","idx:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-deadline:","wf-delayed:","wf-has-services:","wf-headers:","wf-idx-","wf-terminal:"]});function K(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function S(E,_={}){if(_.gt!==void 0&&E<=_.gt)return!1;if(_.gte!==void 0&&E<_.gte)return!1;if(_.lt!==void 0&&E>=_.lt)return!1;if(_.lte!==void 0&&E>_.lte)return!1;return!0}function C(E,_){if(E===null||_===null)return E===_;if(E.byteLength!==_.byteLength)return!1;for(let F=0;F<E.byteLength;F++)if(E[F]!==_[F])return!1;return!0}async function c(E,_){if(E.has)return E.has(_);return J(E,_)}function I(E,_,F){if(E.keys)return E.keys(_,F);return X(E,_,F)}async function y(E,_){if(E.count)return E.count(_);return M(E,_)}async function k(E,_){if(E.deletePrefix)return E.deletePrefix(_);return O(E,_)}async function m(E,_,F){if(U(E,"conditionalBatch","storageConditionalBatch"),!E.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return E.conditionalBatch(_,F)}function W(E){return encodeURIComponent(E)}function f(E){return decodeURIComponent(E)}function l(E){try{return decodeURIComponent(E)}catch{return null}}var P=(E)=>String(E).padStart(16,"0"),g;var D=G(()=>{V();g={workflow:(E)=>`wf:${W(E)}`,checkpoint:(E)=>`wf:${W(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${W(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${W(E)}:timeline:`,timeline:(E,_)=>`wf:${W(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${W(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${W(_)}`,scheduleRun:(E)=>`schedule-run:${W(E)}`,operation:(E,_,F)=>`op:${E}:${P(_)}:${F}`,operationInflight:(E)=>`op:inflight:${E}`,operationQueued:(E)=>`op:queued:${E}`,operationResolved:(E)=>`op:resolved:${E}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(E,_,F)=>`audit:bulk:${P(E)}:${W(_)}:${W(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${P(E)}:${W(_)}`,asyncActivity:(E,_)=>`async-act:v1:${W(E)}:${W(_)}`,activityReconciliationPrefix:(E)=>`actrec:v1:${W(E)}:`,activityReconciliation:(E,_,F)=>`actrec:v1:${W(E)}:${W(_)}:${F}`,eventPrefix:(E)=>`ev:${W(E)}:`,event:(E,_)=>`ev:${W(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${W(E)}:head`,eventWatermark:(E)=>`ev:${W(E)}:watermark`,signal:(E,_,F)=>`sig:${W(E)}:${_}:${W(F)}`,signalSequence:(E)=>`sigseq:v1:${W(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${W(E)}:`,signalAcceptedResponse:(E,_,F)=>`sigres:v1:${W(E)}:${W(_)}:${W(F)}`,deadline:(E,_)=>`wf-deadline:${P(E)}:${W(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${P(E)}:${W(_)}`,delayedStart:(E,_)=>`wf-delayed:${P(E)}:${W(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${P(E)}:${W(_)}`,attribute:(E)=>`attr:${W(E)}`,attributeIndex:(E,_,F)=>`idx:${E}:${_}:${W(F)}`,tagIndex:(E,_)=>`tag:${W(E)}:${W(_)}`,updatePrefix:(E)=>`upd:${W(E)}:`,update:(E,_)=>`upd:${W(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${W(E)}:${_}`,budget:(E,_,F)=>`budget:${E}:${_}:${F}`,review:(E,_)=>`review:${W(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${W(E)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${W(E)}`,workflowHasServices:(E)=>`wf-has-services:${W(E)}`,offload:(E,_)=>`offload:${W(E)}:${_}`,archive:(E,_)=>`archive:${W(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${W(E)}:${W(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${B}:${W(E)}:${W(_)}`,streamChunkPrefix:(E,_)=>`blob:${W(E)}:${_}:chunk:`,streamChunk:(E,_,F)=>`blob:${W(E)}:${_}:chunk:${String(F).padStart(10,"0")}`,streamMetadata:(E,_)=>`blob:${W(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,F)=>`tool-effect:${W(E)}:${_}:${F}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${W(E)}:${W(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${W(E)}:${W(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${P(E)}:${W(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${P(E)}:${W(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${P(E)}:${W(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${W(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});D();export{l as tryDecodeStorageKeyComponent,C as storageValuesEqual,I as storageKeys,c as storageHas,k as storageDeletePrefix,y as storageCount,m as storageConditionalBatch,K as resolvePrefixRangeEnd,U as requireStorageCapability,S as matchesScanOptions,W as encodeStorageKeyComponent,f as decodeStorageKeyComponent,z as assertDurableStorageForRecovery,Q as WEFT_RESERVED_KEY_PREFIXES,g as KEYS,B as DEFAULT_SCOPE};
2
+ var V=Object.defineProperty;var Z=(E)=>E;function $(E,_){this[E]=Z.bind(null,_)}var H=(E,_)=>{for(var W in _)V(E,W,{get:_[W],enumerable:!0,configurable:!0,set:$.bind(_,W)})};var B=(E,_)=>()=>(E&&(_=E(E=0)),_);function U(E,_,W){if(!E.capabilities()[_])throw Error(`Feature "${W}" requires storage capability "${_}", but this storage backend does not provide it.`)}function j(E){let _=E.capabilities(),W=[];if(_.persistence!=="local"&&_.persistence!=="remote")W.push(`persistence must be "local" or "remote" (got "${_.persistence}")`);if(_.readAfterWrite!=="linearizable")W.push(`readAfterWrite must be "linearizable" (got "${_.readAfterWrite}")`);if(_.scanConsistency!=="snapshot")W.push(`scanConsistency must be "snapshot" (got "${_.scanConsistency}")`);if(!_.atomicBatch)W.push("atomicBatch must be true");if(!_.conditionalBatch)W.push("conditionalBatch must be true");if(W.length>0)throw Error(`Storage is not durable enough for recovery: ${W.join("; ")}.`)}var L="default";async function G(E,_){return await E.get(_)!==null}async function*X(E,_,W){for await(let[P]of E.scan(_,W))yield P}async function J(E,_){let W=0;for await(let P of X(E,_))W++;return W}async function M(E,_){let W=[];for await(let P of X(E,_))W.push({type:"delete",key:P});if(W.length===0)return 0;return await E.batch(W),W.length}async function T(E,_,W){let P=[];for await(let Q of X(E,_,W))P.push({type:"delete",key:Q});if(P.length===0)return 0;return await E.batch(P),P.length}var D;var O=B(()=>{D=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","idx:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-deadline:","wf-delayed:","wf-has-services:","wf-headers:","wf-idx-","wf-terminal:"]});function K(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function S(E,_={}){if(_.gt!==void 0&&E<=_.gt)return!1;if(_.gte!==void 0&&E<_.gte)return!1;if(_.lt!==void 0&&E>=_.lt)return!1;if(_.lte!==void 0&&E>_.lte)return!1;return!0}function C(E,_){if(E===null||_===null)return E===_;if(E.byteLength!==_.byteLength)return!1;for(let W=0;W<E.byteLength;W++)if(E[W]!==_[W])return!1;return!0}async function c(E,_){if(E.has)return E.has(_);return G(E,_)}function I(E,_,W){if(E.keys)return E.keys(_,W);return X(E,_,W)}async function f(E,_){if(E.count)return E.count(_);return J(E,_)}async function m(E,_){if(E.deletePrefix)return E.deletePrefix(_);return M(E,_)}async function y(E,_,W){if(U(E,"conditionalBatch","storageConditionalBatch"),!E.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return E.conditionalBatch(_,W)}function F(E){return encodeURIComponent(E)}function k(E){return decodeURIComponent(E)}function l(E){try{return decodeURIComponent(E)}catch{return null}}var R=(E)=>String(E).padStart(16,"0"),g;var z=B(()=>{O();g={workflow:(E)=>`wf:${F(E)}`,checkpoint:(E)=>`wf:${F(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${F(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${F(E)}:timeline:`,timeline:(E,_)=>`wf:${F(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${F(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${F(_)}`,scheduleRun:(E)=>`schedule-run:${F(E)}`,operation:(E,_,W)=>`op:${E}:${R(_)}:${W}`,operationInflight:(E)=>`op:inflight:${E}`,operationQueued:(E)=>`op:queued:${E}`,operationResolved:(E)=>`op:resolved:${E}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(E,_,W)=>`audit:bulk:${R(E)}:${F(_)}:${F(W)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${R(E)}:${F(_)}`,asyncActivity:(E,_)=>`async-act:v1:${F(E)}:${F(_)}`,activityReconciliationPrefix:(E)=>`actrec:v1:${F(E)}:`,activityReconciliation:(E,_,W)=>`actrec:v1:${F(E)}:${F(_)}:${W}`,eventPrefix:(E)=>`ev:${F(E)}:`,event:(E,_)=>`ev:${F(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${F(E)}:head`,eventWatermark:(E)=>`ev:${F(E)}:watermark`,signal:(E,_,W)=>`sig:${F(E)}:${_}:${F(W)}`,signalSequence:(E)=>`sigseq:v1:${F(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${F(E)}:`,signalAcceptedResponse:(E,_,W)=>`sigres:v1:${F(E)}:${F(_)}:${F(W)}`,deadline:(E,_)=>`wf-deadline:${R(E)}:${F(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${R(E)}:${F(_)}`,delayedStart:(E,_)=>`wf-delayed:${R(E)}:${F(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${R(E)}:${F(_)}`,attribute:(E)=>`attr:${F(E)}`,attributeIndex:(E,_,W)=>`idx:${E}:${_}:${F(W)}`,tagIndex:(E,_)=>`tag:${F(E)}:${F(_)}`,updatePrefix:(E)=>`upd:${F(E)}:`,update:(E,_)=>`upd:${F(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${F(E)}:${_}`,startIdempotency:(E)=>`start-idem:${F(E)}`,startIdempotencySignalId:(E)=>`start-idem:${E}`,livenessPrefix:()=>"liveness:",liveness:(E)=>`liveness:${F(E)}`,budget:(E,_,W)=>`budget:${E}:${_}:${W}`,review:(E,_)=>`review:${F(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${F(E)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${F(E)}`,workflowHasServices:(E)=>`wf-has-services:${F(E)}`,offload:(E,_)=>`offload:${F(E)}:${_}`,archive:(E,_)=>`archive:${F(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${F(E)}:${F(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${L}:${F(E)}:${F(_)}`,streamChunkPrefix:(E,_)=>`blob:${F(E)}:${_}:chunk:`,streamChunk:(E,_,W)=>`blob:${F(E)}:${_}:chunk:${String(W).padStart(10,"0")}`,streamMetadata:(E,_)=>`blob:${F(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,W)=>`tool-effect:${F(E)}:${_}:${W}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${F(E)}:${F(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${F(E)}:${F(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${R(E)}:${F(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${R(E)}:${F(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${R(E)}:${F(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${F(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});z();export{l as tryDecodeStorageKeyComponent,C as storageValuesEqual,I as storageKeys,c as storageHas,m as storageDeletePrefix,f as storageCount,y as storageConditionalBatch,K as resolvePrefixRangeEnd,U as requireStorageCapability,S as matchesScanOptions,F as encodeStorageKeyComponent,k as decodeStorageKeyComponent,j as assertDurableStorageForRecovery,D as WEFT_RESERVED_KEY_PREFIXES,g as KEYS,L as DEFAULT_SCOPE};
@@ -16,4 +16,4 @@
16
16
  * console.log(isWeftKey); // true
17
17
  * ```
18
18
  */
19
- export declare const WEFT_RESERVED_KEY_PREFIXES: readonly ["actrec:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "ev:", "idx:", "offload:", "op:", "review:", "schedule:", "schedule-due:", "schedule-run:", "sig:", "sigres:", "sigseq:", "state:", "tag:", "tool-effect:", "upd:", "upk:", "upr:", "wf:", "wf-cleanup:", "wf-cleanup-needed:", "wf-deadline:", "wf-delayed:", "wf-has-services:", "wf-headers:", "wf-idx-", "wf-terminal:"];
19
+ export declare const WEFT_RESERVED_KEY_PREFIXES: readonly ["actrec:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "ev:", "idx:", "liveness:", "offload:", "op:", "review:", "schedule:", "schedule-due:", "schedule-run:", "sig:", "sigres:", "sigseq:", "start-idem:", "state:", "tag:", "tool-effect:", "upd:", "upk:", "upr:", "wf:", "wf-cleanup:", "wf-cleanup-needed:", "wf-deadline:", "wf-delayed:", "wf-has-services:", "wf-headers:", "wf-idx-", "wf-terminal:"];
@@ -9,6 +9,7 @@ export const WEFT_RESERVED_KEY_PREFIXES = [
9
9
  "budget-charged:",
10
10
  "ev:",
11
11
  "idx:",
12
+ "liveness:",
12
13
  "offload:",
13
14
  "op:",
14
15
  "review:",
@@ -18,6 +19,7 @@ export const WEFT_RESERVED_KEY_PREFIXES = [
18
19
  "sig:",
19
20
  "sigres:",
20
21
  "sigseq:",
22
+ "start-idem:",
21
23
  "state:",
22
24
  "tag:",
23
25
  "tool-effect:",
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var y=Object.defineProperty;var g=(E)=>E;function f(E,_){this[E]=g.bind(null,_)}var l=(E,_)=>{for(var W in _)y(E,W,{get:_[W],enumerable:!0,configurable:!0,set:f.bind(_,W)})};var j=(E,_)=>()=>(E&&(_=E(E=0)),_);function B(E,_,W){if(!E.capabilities()[_])throw Error(`Feature "${W}" requires storage capability "${_}", but this storage backend does not provide it.`)}function d(E){let _=E.capabilities(),W=[];if(_.persistence!=="local")W.push(`persistence must be "local" (got "${_.persistence}")`);if(_.readAfterWrite!=="linearizable")W.push(`readAfterWrite must be "linearizable" (got "${_.readAfterWrite}")`);if(_.scanConsistency!=="snapshot")W.push(`scanConsistency must be "snapshot" (got "${_.scanConsistency}")`);if(!_.atomicBatch)W.push("atomicBatch must be true");if(!_.conditionalBatch)W.push("conditionalBatch must be true");if(W.length>0)throw Error(`Storage is not durable enough for recovery: ${W.join("; ")}.`)}var L="default";async function A(E,_){return await E.get(_)!==null}async function*Q(E,_,W){for await(let[Y]of E.scan(_,W))yield Y}async function z(E,_){let W=0;for await(let Y of Q(E,_))W++;return W}async function P(E,_){let W=[];for await(let Y of Q(E,_))W.push({type:"delete",key:Y});if(W.length===0)return 0;return await E.batch(W),W.length}async function O(E,_,W){let Y=[];for await(let X of Q(E,_,W))Y.push({type:"delete",key:X});if(Y.length===0)return 0;return await E.batch(Y),Y.length}var p;var h=j(()=>{p=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","idx:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-deadline:","wf-delayed:","wf-has-services:","wf-headers:","wf-idx-","wf-terminal:"]});function V(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function N(E,_={}){if(_.gt!==void 0&&E<=_.gt)return!1;if(_.gte!==void 0&&E<_.gte)return!1;if(_.lt!==void 0&&E>=_.lt)return!1;if(_.lte!==void 0&&E>_.lte)return!1;return!0}function v(E,_){if(E===null||_===null)return E===_;if(E.byteLength!==_.byteLength)return!1;for(let W=0;W<E.byteLength;W++)if(E[W]!==_[W])return!1;return!0}async function C(E,_){if(E.has)return E.has(_);return A(E,_)}function K(E,_,W){if(E.keys)return E.keys(_,W);return Q(E,_,W)}async function b(E,_){if(E.count)return E.count(_);return z(E,_)}async function S(E,_){if(E.deletePrefix)return E.deletePrefix(_);return P(E,_)}async function u(E,_,W){if(B(E,"conditionalBatch","storageConditionalBatch"),!E.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return E.conditionalBatch(_,W)}function F(E){return encodeURIComponent(E)}function YE(E){return decodeURIComponent(E)}function XE(E){try{return decodeURIComponent(E)}catch{return null}}var J=(E)=>String(E).padStart(16,"0"),JE;var q=j(()=>{h();JE={workflow:(E)=>`wf:${F(E)}`,checkpoint:(E)=>`wf:${F(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${F(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${F(E)}:timeline:`,timeline:(E,_)=>`wf:${F(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${F(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${F(_)}`,scheduleRun:(E)=>`schedule-run:${F(E)}`,operation:(E,_,W)=>`op:${E}:${J(_)}:${W}`,operationInflight:(E)=>`op:inflight:${E}`,operationQueued:(E)=>`op:queued:${E}`,operationResolved:(E)=>`op:resolved:${E}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(E,_,W)=>`audit:bulk:${J(E)}:${F(_)}:${F(W)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${J(E)}:${F(_)}`,asyncActivity:(E,_)=>`async-act:v1:${F(E)}:${F(_)}`,activityReconciliationPrefix:(E)=>`actrec:v1:${F(E)}:`,activityReconciliation:(E,_,W)=>`actrec:v1:${F(E)}:${F(_)}:${W}`,eventPrefix:(E)=>`ev:${F(E)}:`,event:(E,_)=>`ev:${F(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${F(E)}:head`,eventWatermark:(E)=>`ev:${F(E)}:watermark`,signal:(E,_,W)=>`sig:${F(E)}:${_}:${F(W)}`,signalSequence:(E)=>`sigseq:v1:${F(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${F(E)}:`,signalAcceptedResponse:(E,_,W)=>`sigres:v1:${F(E)}:${F(_)}:${F(W)}`,deadline:(E,_)=>`wf-deadline:${J(E)}:${F(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${J(E)}:${F(_)}`,delayedStart:(E,_)=>`wf-delayed:${J(E)}:${F(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${J(E)}:${F(_)}`,attribute:(E)=>`attr:${F(E)}`,attributeIndex:(E,_,W)=>`idx:${E}:${_}:${F(W)}`,tagIndex:(E,_)=>`tag:${F(E)}:${F(_)}`,updatePrefix:(E)=>`upd:${F(E)}:`,update:(E,_)=>`upd:${F(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${F(E)}:${_}`,budget:(E,_,W)=>`budget:${E}:${_}:${W}`,review:(E,_)=>`review:${F(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${F(E)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${F(E)}`,workflowHasServices:(E)=>`wf-has-services:${F(E)}`,offload:(E,_)=>`offload:${F(E)}:${_}`,archive:(E,_)=>`archive:${F(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${F(E)}:${F(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${L}:${F(E)}:${F(_)}`,streamChunkPrefix:(E,_)=>`blob:${F(E)}:${_}:chunk:`,streamChunk:(E,_,W)=>`blob:${F(E)}:${_}:chunk:${String(W).padStart(10,"0")}`,streamMetadata:(E,_)=>`blob:${F(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,W)=>`tool-effect:${F(E)}:${_}:${W}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${F(E)}:${F(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${F(E)}:${F(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${J(E)}:${F(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${J(E)}:${F(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${J(E)}:${F(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${F(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function s(E){if(E===void 0)return;if(typeof E!=="number"||!Number.isInteger(E)||E<0)throw Error("deleteRange limit must be a finite non-negative integer");return E===0?0:E}function H(E){let _={},W=!1;for(let X of["gt","gte","lt","lte"]){let U=E[X];if(U===void 0)continue;if(typeof U!=="string")throw Error("deleteRange bounds must be strings");_[X]=U,W=!0}if(!W)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Y=s(E.limit);if(Y!==void 0)_.limit=Y;return _}async function I(E,_,W){let Y=H(W);if(E.deleteRange)return E.deleteRange(_,Y);return O(E,_,Y)}var D=()=>{};function R(E){return E.replaceAll(/:+$/g,"")}function a(E,_){let W=R(E),Y=R(_);if(W.length===0)return Y;if(Y.length===0)return W;return`${W}:${Y}`}function x(E,_){return new T(E,_)}var T;var c=j(()=>{D();q();T=class T{#E;#F;constructor(E,_){this.#E=E,this.#F=R(_)}#_(E){if(this.#F.length===0)return E;return E.length===0?`${this.#F}:`:`${this.#F}:${E}`}#W(E){if(this.#F.length===0)return E;return E.slice(this.#F.length+1)}#Y(E={}){let _={};if(E.limit!==void 0)_.limit=E.limit;if(E.reverse!==void 0)_.reverse=E.reverse;if(E.gt!==void 0)_.gt=this.#_(E.gt);if(E.gte!==void 0)_.gte=this.#_(E.gte);if(E.lt!==void 0)_.lt=this.#_(E.lt);if(E.lte!==void 0)_.lte=this.#_(E.lte);return _}#X(E){let _={};if(E.limit!==void 0)_.limit=E.limit;if(E.gt!==void 0)_.gt=this.#_(E.gt);if(E.gte!==void 0)_.gte=this.#_(E.gte);if(E.lt!==void 0)_.lt=this.#_(E.lt);if(E.lte!==void 0)_.lte=this.#_(E.lte);return _}capabilities(){return this.#E.capabilities()}scoped(E){return new T(this.#E,a(this.#F,E))}async get(E){return this.#E.get(this.#_(E))}async put(E,_){await this.#E.put(this.#_(E),_)}async delete(E){await this.#E.delete(this.#_(E))}async*scan(E,_){for await(let[W,Y]of this.#E.scan(this.#_(E),this.#Y(_)))yield[this.#W(W),Y]}async batch(E){await this.#E.batch(E.map((_)=>{if(_.type==="put")return{type:"put",key:this.#_(_.key),value:_.value};return{type:"delete",key:this.#_(_.key)}}))}async conditionalBatch(E,_){return u(this.#E,E.map((W)=>({key:this.#_(W.key),expectedValue:W.expectedValue})),_.map((W)=>{if(W.type==="put")return{type:"put",key:this.#_(W.key),value:W.value};return{type:"delete",key:this.#_(W.key)}}))}async has(E){return C(this.#E,this.#_(E))}async deletePrefix(E){return S(this.#E,this.#_(E))}async deleteRange(E,_){let W=this.#X(H(_));return I(this.#E,this.#_(E),W)}async*keys(E,_){for await(let W of K(this.#E,this.#_(E),this.#Y(_)))yield this.#W(W)}async count(E){return b(this.#E,this.#_(E))}[Symbol.dispose](){this.#E[Symbol.dispose]()}}});var i={};l(i,{LMDBStorage:()=>k});import*as w from"lmdb";var k;var r=j(()=>{D();q();c();k=class k{#E;#F=!1;#_=null;constructor(E){this.#E=w.open({path:E,encoding:"binary"})}#W(){if(this.#F)throw Error("LMDBStorage is closed")}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!1}}async get(E){this.#W();let _=this.#E.get(E);if(_===void 0)return null;return new Uint8Array(_)}async put(E,_){this.#W(),await this.#E.put(E,Buffer.from(_))}async delete(E){this.#W(),await this.#E.remove(E)}async has(E){return this.#W(),this.#E.doesExist(E)}async deletePrefix(E){this.#W();let _=[];for await(let W of this.keys(E))_.push(W);if(_.length===0)return 0;return await this.#E.batch(()=>{for(let W of _)this.#E.remove(W)}),_.length}async deleteRange(E,_){this.#W();let W=H(_),Y=[];for await(let X of this.keys(E,W))Y.push(X);if(Y.length===0)return 0;return await this.#E.batch(()=>{for(let X of Y)this.#E.remove(X)}),Y.length}async*scan(E,_={}){this.#W();let{limit:W,reverse:Y}=_,X=V(E),U=Y?this.#E.getRange({start:X,end:E,reverse:!0}):this.#E.getRange({start:E,end:X}),$=0,G=!1;for(let{key:Z,value:m}of U){if(!Z.startsWith(E)){if(Y&&!G)continue;break}if(G=!0,!N(Z,_))continue;if(W!==void 0&&$>=W)break;yield[Z,new Uint8Array(m)],$++}}async*keys(E,_={}){this.#W();let{limit:W,reverse:Y}=_,X=V(E),U=Y?this.#E.getKeys({start:X,end:E,reverse:!0}):this.#E.getKeys({start:E,end:X}),$=0,G=!1;for(let Z of U){if(!Z.startsWith(E)){if(Y&&!G)continue;break}if(G=!0,!N(Z,_))continue;if(W!==void 0&&$>=W)break;yield Z,$++}}async count(E){this.#W();let _=V(E);return this.#E.getKeysCount({start:E,end:_})}scoped(E){return this.#W(),x(this,E)}async batch(E){if(this.#W(),E.length===0)return;await this.#E.batch(()=>{for(let _ of E)if(_.type==="put")this.#E.put(_.key,Buffer.from(_.value));else this.#E.remove(_.key)})}async conditionalBatch(E,_){return this.#W(),this.#E.transactionSync(()=>{for(let Y of E){let X=this.#E.get(Y.key),U=X===void 0?null:new Uint8Array(X);if(!v(U,Y.expectedValue))return!1}for(let Y of _)if(Y.type==="put")this.#E.putSync(Y.key,Buffer.from(Y.value));else this.#E.removeSync(Y.key);return!0})}close(){return this.#F=!0,this.#_??=(async()=>{await Promise.resolve(),await this.#E.close()})(),this.#_}[Symbol.dispose](){this.close()}}});r();export{k as LMDBStorage};
2
+ var y=Object.defineProperty;var g=(E)=>E;function f(E,_){this[E]=g.bind(null,_)}var l=(E,_)=>{for(var F in _)y(E,F,{get:_[F],enumerable:!0,configurable:!0,set:f.bind(_,F)})};var G=(E,_)=>()=>(E&&(_=E(E=0)),_);function V(E,_,F){if(!E.capabilities()[_])throw Error(`Feature "${F}" requires storage capability "${_}", but this storage backend does not provide it.`)}function d(E){let _=E.capabilities(),F=[];if(_.persistence!=="local"&&_.persistence!=="remote")F.push(`persistence must be "local" or "remote" (got "${_.persistence}")`);if(_.readAfterWrite!=="linearizable")F.push(`readAfterWrite must be "linearizable" (got "${_.readAfterWrite}")`);if(_.scanConsistency!=="snapshot")F.push(`scanConsistency must be "snapshot" (got "${_.scanConsistency}")`);if(!_.atomicBatch)F.push("atomicBatch must be true");if(!_.conditionalBatch)F.push("conditionalBatch must be true");if(F.length>0)throw Error(`Storage is not durable enough for recovery: ${F.join("; ")}.`)}var B="default";async function A(E,_){return await E.get(_)!==null}async function*M(E,_,F){for await(let[Y]of E.scan(_,F))yield Y}async function z(E,_){let F=0;for await(let Y of M(E,_))F++;return F}async function P(E,_){let F=[];for await(let Y of M(E,_))F.push({type:"delete",key:Y});if(F.length===0)return 0;return await E.batch(F),F.length}async function O(E,_,F){let Y=[];for await(let X of M(E,_,F))Y.push({type:"delete",key:X});if(Y.length===0)return 0;return await E.batch(Y),Y.length}var s;var v=G(()=>{s=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","idx:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-deadline:","wf-delayed:","wf-has-services:","wf-headers:","wf-idx-","wf-terminal:"]});function L(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function q(E,_={}){if(_.gt!==void 0&&E<=_.gt)return!1;if(_.gte!==void 0&&E<_.gte)return!1;if(_.lt!==void 0&&E>=_.lt)return!1;if(_.lte!==void 0&&E>_.lte)return!1;return!0}function h(E,_){if(E===null||_===null)return E===_;if(E.byteLength!==_.byteLength)return!1;for(let F=0;F<E.byteLength;F++)if(E[F]!==_[F])return!1;return!0}async function b(E,_){if(E.has)return E.has(_);return A(E,_)}function C(E,_,F){if(E.keys)return E.keys(_,F);return M(E,_,F)}async function K(E,_){if(E.count)return E.count(_);return z(E,_)}async function S(E,_){if(E.deletePrefix)return E.deletePrefix(_);return P(E,_)}async function u(E,_,F){if(V(E,"conditionalBatch","storageConditionalBatch"),!E.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return E.conditionalBatch(_,F)}function W(E){return encodeURIComponent(E)}function YE(E){return decodeURIComponent(E)}function XE(E){try{return decodeURIComponent(E)}catch{return null}}var J=(E)=>String(E).padStart(16,"0"),JE;var N=G(()=>{v();JE={workflow:(E)=>`wf:${W(E)}`,checkpoint:(E)=>`wf:${W(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${W(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${W(E)}:timeline:`,timeline:(E,_)=>`wf:${W(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${W(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${W(_)}`,scheduleRun:(E)=>`schedule-run:${W(E)}`,operation:(E,_,F)=>`op:${E}:${J(_)}:${F}`,operationInflight:(E)=>`op:inflight:${E}`,operationQueued:(E)=>`op:queued:${E}`,operationResolved:(E)=>`op:resolved:${E}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(E,_,F)=>`audit:bulk:${J(E)}:${W(_)}:${W(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${J(E)}:${W(_)}`,asyncActivity:(E,_)=>`async-act:v1:${W(E)}:${W(_)}`,activityReconciliationPrefix:(E)=>`actrec:v1:${W(E)}:`,activityReconciliation:(E,_,F)=>`actrec:v1:${W(E)}:${W(_)}:${F}`,eventPrefix:(E)=>`ev:${W(E)}:`,event:(E,_)=>`ev:${W(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${W(E)}:head`,eventWatermark:(E)=>`ev:${W(E)}:watermark`,signal:(E,_,F)=>`sig:${W(E)}:${_}:${W(F)}`,signalSequence:(E)=>`sigseq:v1:${W(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${W(E)}:`,signalAcceptedResponse:(E,_,F)=>`sigres:v1:${W(E)}:${W(_)}:${W(F)}`,deadline:(E,_)=>`wf-deadline:${J(E)}:${W(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${J(E)}:${W(_)}`,delayedStart:(E,_)=>`wf-delayed:${J(E)}:${W(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${J(E)}:${W(_)}`,attribute:(E)=>`attr:${W(E)}`,attributeIndex:(E,_,F)=>`idx:${E}:${_}:${W(F)}`,tagIndex:(E,_)=>`tag:${W(E)}:${W(_)}`,updatePrefix:(E)=>`upd:${W(E)}:`,update:(E,_)=>`upd:${W(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${W(E)}:${_}`,startIdempotency:(E)=>`start-idem:${W(E)}`,startIdempotencySignalId:(E)=>`start-idem:${E}`,livenessPrefix:()=>"liveness:",liveness:(E)=>`liveness:${W(E)}`,budget:(E,_,F)=>`budget:${E}:${_}:${F}`,review:(E,_)=>`review:${W(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${W(E)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${W(E)}`,workflowHasServices:(E)=>`wf-has-services:${W(E)}`,offload:(E,_)=>`offload:${W(E)}:${_}`,archive:(E,_)=>`archive:${W(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${W(E)}:${W(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${B}:${W(E)}:${W(_)}`,streamChunkPrefix:(E,_)=>`blob:${W(E)}:${_}:chunk:`,streamChunk:(E,_,F)=>`blob:${W(E)}:${_}:chunk:${String(F).padStart(10,"0")}`,streamMetadata:(E,_)=>`blob:${W(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,F)=>`tool-effect:${W(E)}:${_}:${F}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${W(E)}:${W(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${W(E)}:${W(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${J(E)}:${W(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${J(E)}:${W(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${J(E)}:${W(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${W(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function p(E){if(E===void 0)return;if(typeof E!=="number"||!Number.isInteger(E)||E<0)throw Error("deleteRange limit must be a finite non-negative integer");return E===0?0:E}function H(E){let _={},F=!1;for(let X of["gt","gte","lt","lte"]){let Q=E[X];if(Q===void 0)continue;if(typeof Q!=="string")throw Error("deleteRange bounds must be strings");_[X]=Q,F=!0}if(!F)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Y=p(E.limit);if(Y!==void 0)_.limit=Y;return _}async function I(E,_,F){let Y=H(F);if(E.deleteRange)return E.deleteRange(_,Y);return O(E,_,Y)}var D=()=>{};function R(E){return E.replaceAll(/:+$/g,"")}function a(E,_){let F=R(E),Y=R(_);if(F.length===0)return Y;if(Y.length===0)return F;return`${F}:${Y}`}function x(E,_){return new T(E,_)}var T;var c=G(()=>{D();N();T=class T{#E;#W;constructor(E,_){this.#E=E,this.#W=R(_)}#_(E){if(this.#W.length===0)return E;return E.length===0?`${this.#W}:`:`${this.#W}:${E}`}#F(E){if(this.#W.length===0)return E;return E.slice(this.#W.length+1)}#Y(E={}){let _={};if(E.limit!==void 0)_.limit=E.limit;if(E.reverse!==void 0)_.reverse=E.reverse;if(E.gt!==void 0)_.gt=this.#_(E.gt);if(E.gte!==void 0)_.gte=this.#_(E.gte);if(E.lt!==void 0)_.lt=this.#_(E.lt);if(E.lte!==void 0)_.lte=this.#_(E.lte);return _}#X(E){let _={};if(E.limit!==void 0)_.limit=E.limit;if(E.gt!==void 0)_.gt=this.#_(E.gt);if(E.gte!==void 0)_.gte=this.#_(E.gte);if(E.lt!==void 0)_.lt=this.#_(E.lt);if(E.lte!==void 0)_.lte=this.#_(E.lte);return _}capabilities(){return this.#E.capabilities()}scoped(E){return new T(this.#E,a(this.#W,E))}async get(E){return this.#E.get(this.#_(E))}async put(E,_){await this.#E.put(this.#_(E),_)}async delete(E){await this.#E.delete(this.#_(E))}async*scan(E,_){for await(let[F,Y]of this.#E.scan(this.#_(E),this.#Y(_)))yield[this.#F(F),Y]}async batch(E){await this.#E.batch(E.map((_)=>{if(_.type==="put")return{type:"put",key:this.#_(_.key),value:_.value};return{type:"delete",key:this.#_(_.key)}}))}async conditionalBatch(E,_){return u(this.#E,E.map((F)=>({key:this.#_(F.key),expectedValue:F.expectedValue})),_.map((F)=>{if(F.type==="put")return{type:"put",key:this.#_(F.key),value:F.value};return{type:"delete",key:this.#_(F.key)}}))}async has(E){return b(this.#E,this.#_(E))}async deletePrefix(E){return S(this.#E,this.#_(E))}async deleteRange(E,_){let F=this.#X(H(_));return I(this.#E,this.#_(E),F)}async*keys(E,_){for await(let F of C(this.#E,this.#_(E),this.#Y(_)))yield this.#F(F)}async count(E){return K(this.#E,this.#_(E))}[Symbol.dispose](){this.#E[Symbol.dispose]()}}});var i={};l(i,{LMDBStorage:()=>m});import*as w from"lmdb";var m;var r=G(()=>{D();N();c();m=class m{#E;#W=!1;#_=null;constructor(E){this.#E=w.open({path:E,encoding:"binary"})}#F(){if(this.#W)throw Error("LMDBStorage is closed")}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!1}}async get(E){this.#F();let _=this.#E.get(E);if(_===void 0)return null;return new Uint8Array(_)}async put(E,_){this.#F(),await this.#E.put(E,Buffer.from(_))}async delete(E){this.#F(),await this.#E.remove(E)}async has(E){return this.#F(),this.#E.doesExist(E)}async deletePrefix(E){this.#F();let _=[];for await(let F of this.keys(E))_.push(F);if(_.length===0)return 0;return await this.#E.batch(()=>{for(let F of _)this.#E.remove(F)}),_.length}async deleteRange(E,_){this.#F();let F=H(_),Y=[];for await(let X of this.keys(E,F))Y.push(X);if(Y.length===0)return 0;return await this.#E.batch(()=>{for(let X of Y)this.#E.remove(X)}),Y.length}async*scan(E,_={}){this.#F();let{limit:F,reverse:Y}=_,X=L(E),Q=Y?this.#E.getRange({start:X,end:E,reverse:!0}):this.#E.getRange({start:E,end:X}),Z=0,$=!1;for(let{key:U,value:k}of Q){if(!U.startsWith(E)){if(Y&&!$)continue;break}if($=!0,!q(U,_))continue;if(F!==void 0&&Z>=F)break;yield[U,new Uint8Array(k)],Z++}}async*keys(E,_={}){this.#F();let{limit:F,reverse:Y}=_,X=L(E),Q=Y?this.#E.getKeys({start:X,end:E,reverse:!0}):this.#E.getKeys({start:E,end:X}),Z=0,$=!1;for(let U of Q){if(!U.startsWith(E)){if(Y&&!$)continue;break}if($=!0,!q(U,_))continue;if(F!==void 0&&Z>=F)break;yield U,Z++}}async count(E){this.#F();let _=L(E);return this.#E.getKeysCount({start:E,end:_})}scoped(E){return this.#F(),x(this,E)}async batch(E){if(this.#F(),E.length===0)return;await this.#E.batch(()=>{for(let _ of E)if(_.type==="put")this.#E.put(_.key,Buffer.from(_.value));else this.#E.remove(_.key)})}async conditionalBatch(E,_){return this.#F(),this.#E.transactionSync(()=>{for(let Y of E){let X=this.#E.get(Y.key),Q=X===void 0?null:new Uint8Array(X);if(!h(Q,Y.expectedValue))return!1}for(let Y of _)if(Y.type==="put")this.#E.putSync(Y.key,Buffer.from(Y.value));else this.#E.removeSync(Y.key);return!0})}close(){return this.#W=!0,this.#_??=(async()=>{await Promise.resolve(),await this.#E.close()})(),this.#_}[Symbol.dispose](){this.close()}}});r();export{m as LMDBStorage};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var c=Object.defineProperty;var k=(_)=>_;function y(_,E){this[_]=k.bind(null,E)}var g=(_,E)=>{for(var W in E)c(_,W,{get:E[W],enumerable:!0,configurable:!0,set:y.bind(E,W)})};var j=(_,E)=>()=>(_&&(E=_(_=0)),E);function L(_,E,W){if(!_.capabilities()[E])throw Error(`Feature "${W}" requires storage capability "${E}", but this storage backend does not provide it.`)}function f(_){let E=_.capabilities(),W=[];if(E.persistence!=="local")W.push(`persistence must be "local" (got "${E.persistence}")`);if(E.readAfterWrite!=="linearizable")W.push(`readAfterWrite must be "linearizable" (got "${E.readAfterWrite}")`);if(E.scanConsistency!=="snapshot")W.push(`scanConsistency must be "snapshot" (got "${E.scanConsistency}")`);if(!E.atomicBatch)W.push("atomicBatch must be true");if(!E.conditionalBatch)W.push("conditionalBatch must be true");if(W.length>0)throw Error(`Storage is not durable enough for recovery: ${W.join("; ")}.`)}var B="default";async function A(_,E){return await _.get(E)!==null}async function*Q(_,E,W){for await(let[Y]of _.scan(E,W))yield Y}async function z(_,E){let W=0;for await(let Y of Q(_,E))W++;return W}async function O(_,E){let W=[];for await(let Y of Q(_,E))W.push({type:"delete",key:Y});if(W.length===0)return 0;return await _.batch(W),W.length}async function P(_,E,W){let Y=[];for await(let J of Q(_,E,W))Y.push({type:"delete",key:J});if(Y.length===0)return 0;return await _.batch(Y),Y.length}var l;var h=j(()=>{l=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","idx:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-deadline:","wf-delayed:","wf-has-services:","wf-headers:","wf-idx-","wf-terminal:"]});function G(_){return _.length>0?_.slice(0,-1)+String.fromCharCode(_.charCodeAt(_.length-1)+1):"\xFF"}function H(_,E={}){if(E.gt!==void 0&&_<=E.gt)return!1;if(E.gte!==void 0&&_<E.gte)return!1;if(E.lt!==void 0&&_>=E.lt)return!1;if(E.lte!==void 0&&_>E.lte)return!1;return!0}function v(_,E){if(_===null||E===null)return _===E;if(_.byteLength!==E.byteLength)return!1;for(let W=0;W<_.byteLength;W++)if(_[W]!==E[W])return!1;return!0}async function b(_,E){if(_.has)return _.has(E);return A(_,E)}function C(_,E,W){if(_.keys)return _.keys(E,W);return Q(_,E,W)}async function K(_,E){if(_.count)return _.count(E);return z(_,E)}async function u(_,E){if(_.deletePrefix)return _.deletePrefix(E);return O(_,E)}async function S(_,E,W){if(L(_,"conditionalBatch","storageConditionalBatch"),!_.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return _.conditionalBatch(E,W)}function F(_){return encodeURIComponent(_)}function W_(_){return decodeURIComponent(_)}function F_(_){try{return decodeURIComponent(_)}catch{return null}}var U=(_)=>String(_).padStart(16,"0"),Y_;var N=j(()=>{h();Y_={workflow:(_)=>`wf:${F(_)}`,checkpoint:(_)=>`wf:${F(_)}:ckpt`,checkpointHistory:(_,E)=>`wf:${F(_)}:ckpt:${String(E).padStart(10,"0")}`,timelinePrefix:(_)=>`wf:${F(_)}:timeline:`,timeline:(_,E)=>`wf:${F(_)}:timeline:${String(E).padStart(10,"0")}`,schedule:(_)=>`schedule:${F(_)}`,scheduleTick:(_,E)=>`schedule-due:${String(_).padStart(16,"0")}:${F(E)}`,scheduleRun:(_)=>`schedule-run:${F(_)}`,operation:(_,E,W)=>`op:${_}:${U(E)}:${W}`,operationInflight:(_)=>`op:inflight:${_}`,operationQueued:(_)=>`op:queued:${_}`,operationResolved:(_)=>`op:resolved:${_}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(_,E,W)=>`audit:bulk:${U(_)}:${F(E)}:${F(W)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(_,E)=>`op:resolved-by-time:${U(_)}:${F(E)}`,asyncActivity:(_,E)=>`async-act:v1:${F(_)}:${F(E)}`,activityReconciliationPrefix:(_)=>`actrec:v1:${F(_)}:`,activityReconciliation:(_,E,W)=>`actrec:v1:${F(_)}:${F(E)}:${W}`,eventPrefix:(_)=>`ev:${F(_)}:`,event:(_,E)=>`ev:${F(_)}:${String(E).padStart(10,"0")}`,eventHead:(_)=>`ev:${F(_)}:head`,eventWatermark:(_)=>`ev:${F(_)}:watermark`,signal:(_,E,W)=>`sig:${F(_)}:${E}:${F(W)}`,signalSequence:(_)=>`sigseq:v1:${F(_)}`,signalAcceptedResponsePrefix:(_)=>`sigres:v1:${F(_)}:`,signalAcceptedResponse:(_,E,W)=>`sigres:v1:${F(_)}:${F(E)}:${F(W)}`,deadline:(_,E)=>`wf-deadline:${U(_)}:${F(E)}`,terminalCleanup:(_,E)=>`wf-cleanup:${U(_)}:${F(E)}`,delayedStart:(_,E)=>`wf-delayed:${U(_)}:${F(E)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(_,E)=>`wf-terminal:${U(_)}:${F(E)}`,attribute:(_)=>`attr:${F(_)}`,attributeIndex:(_,E,W)=>`idx:${_}:${E}:${F(W)}`,tagIndex:(_,E)=>`tag:${F(_)}:${F(E)}`,updatePrefix:(_)=>`upd:${F(_)}:`,update:(_,E)=>`upd:${F(_)}:${E}`,updateResponse:(_)=>`upr:${_}`,updateIdempotency:(_,E)=>`upk:${F(_)}:${E}`,budget:(_,E,W)=>`budget:${_}:${E}:${W}`,review:(_,E)=>`review:${F(_)}:${E}`,workflowHeaders:(_)=>`wf-headers:${F(_)}`,terminalCleanupNeeded:(_)=>`wf-cleanup-needed:${F(_)}`,workflowHasServices:(_)=>`wf-has-services:${F(_)}`,offload:(_,E)=>`offload:${F(_)}:${E}`,archive:(_,E)=>`archive:${F(_)}:${E}`,stateExecution:(_,E)=>`state:execution:${F(_)}:${F(E)}`,stateWorkflow:(_,E)=>`state:workflow-scope:${B}:${F(_)}:${F(E)}`,streamChunkPrefix:(_,E)=>`blob:${F(_)}:${E}:chunk:`,streamChunk:(_,E,W)=>`blob:${F(_)}:${E}:chunk:${String(W).padStart(10,"0")}`,streamMetadata:(_,E)=>`blob:${F(_)}:${E}:meta`,budgetCharged:(_)=>`budget-charged:${_}`,toolEffect:(_,E,W)=>`tool-effect:${F(_)}:${E}:${W}`,workflowVisibilityStatus:(_,E)=>`wf-idx-status:${F(_)}:${F(E)}`,workflowVisibilityType:(_,E)=>`wf-idx-type:${F(_)}:${F(E)}`,workflowVisibilityCreated:(_,E)=>`wf-idx-created:${U(_)}:${F(E)}`,workflowVisibilityUpdated:(_,E)=>`wf-idx-updated:${U(_)}:${F(E)}`,workflowVisibilityDeadline:(_,E)=>`wf-idx-deadline:${U(_)}:${F(E)}`,workflowVisibilityManifest:(_)=>`wf-idx-manifest:${F(_)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function d(_){if(_===void 0)return;if(typeof _!=="number"||!Number.isInteger(_)||_<0)throw Error("deleteRange limit must be a finite non-negative integer");return _===0?0:_}function V(_){let E={},W=!1;for(let J of["gt","gte","lt","lte"]){let X=_[J];if(X===void 0)continue;if(typeof X!=="string")throw Error("deleteRange bounds must be strings");E[J]=X,W=!0}if(!W)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Y=d(_.limit);if(Y!==void 0)E.limit=Y;return E}async function I(_,E,W){let Y=V(W);if(_.deleteRange)return _.deleteRange(E,Y);return P(_,E,Y)}var q=()=>{};function D(_){return _.replaceAll(/:+$/g,"")}function s(_,E){let W=D(_),Y=D(E);if(W.length===0)return Y;if(Y.length===0)return W;return`${W}:${Y}`}function x(_,E){return new R(_,E)}var R;var w=j(()=>{q();N();R=class R{#_;#W;constructor(_,E){this.#_=_,this.#W=D(E)}#E(_){if(this.#W.length===0)return _;return _.length===0?`${this.#W}:`:`${this.#W}:${_}`}#F(_){if(this.#W.length===0)return _;return _.slice(this.#W.length+1)}#Y(_={}){let E={};if(_.limit!==void 0)E.limit=_.limit;if(_.reverse!==void 0)E.reverse=_.reverse;if(_.gt!==void 0)E.gt=this.#E(_.gt);if(_.gte!==void 0)E.gte=this.#E(_.gte);if(_.lt!==void 0)E.lt=this.#E(_.lt);if(_.lte!==void 0)E.lte=this.#E(_.lte);return E}#X(_){let E={};if(_.limit!==void 0)E.limit=_.limit;if(_.gt!==void 0)E.gt=this.#E(_.gt);if(_.gte!==void 0)E.gte=this.#E(_.gte);if(_.lt!==void 0)E.lt=this.#E(_.lt);if(_.lte!==void 0)E.lte=this.#E(_.lte);return E}capabilities(){return this.#_.capabilities()}scoped(_){return new R(this.#_,s(this.#W,_))}async get(_){return this.#_.get(this.#E(_))}async put(_,E){await this.#_.put(this.#E(_),E)}async delete(_){await this.#_.delete(this.#E(_))}async*scan(_,E){for await(let[W,Y]of this.#_.scan(this.#E(_),this.#Y(E)))yield[this.#F(W),Y]}async batch(_){await this.#_.batch(_.map((E)=>{if(E.type==="put")return{type:"put",key:this.#E(E.key),value:E.value};return{type:"delete",key:this.#E(E.key)}}))}async conditionalBatch(_,E){return S(this.#_,_.map((W)=>({key:this.#E(W.key),expectedValue:W.expectedValue})),E.map((W)=>{if(W.type==="put")return{type:"put",key:this.#E(W.key),value:W.value};return{type:"delete",key:this.#E(W.key)}}))}async has(_){return b(this.#_,this.#E(_))}async deletePrefix(_){return u(this.#_,this.#E(_))}async deleteRange(_,E){let W=this.#X(V(E));return I(this.#_,this.#E(_),W)}async*keys(_,E){for await(let W of C(this.#_,this.#E(_),this.#Y(E)))yield this.#F(W)}async count(_){return K(this.#_,this.#E(_))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}});var p={};g(p,{MemoryStorage:()=>m});var m;var a=j(()=>{q();N();w();m=class m{#_;constructor(){this.#_=new Map}capabilities(){return{persistence:"ephemeral",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#W(_,E,W){return _>=E&&_<W}#E(_,E){let W=[];for(let Y of this.#_.keys())if(this.#W(Y,_,E))W.push(Y);return W.toSorted()}async get(_){return this.#_.get(_)??null}async put(_,E){this.#_.set(_,E)}async delete(_){this.#_.delete(_)}async*scan(_,E={}){let{limit:W,reverse:Y}=E,J=G(_),X=this.#E(_,J);if(X=X.filter(($)=>H($,E)),Y)X.reverse();let Z=0;for(let $ of X){if(W!==void 0&&Z>=W)break;let T=this.#_.get($);if(T!==void 0)yield[$,T],Z++}}async batch(_){this.#F(_)}#F(_){for(let E of _)if(E.type==="put")this.#_.set(E.key,E.value);else this.#_.delete(E.key)}async conditionalBatch(_,E){for(let W of _){let Y=this.#_.get(W.key)??null;if(!v(Y,W.expectedValue))return!1}return this.#F(E),!0}async has(_){return this.#_.has(_)}async deletePrefix(_){let E=G(_),W=this.#E(_,E);for(let Y of W)this.#_.delete(Y);return W.length}async deleteRange(_,E){let W=V(E),Y=G(_),J=this.#E(_,Y).filter((Z)=>H(Z,W)),X=W.limit===void 0?J:J.slice(0,W.limit);for(let Z of X)this.#_.delete(Z);return X.length}async*keys(_,E={}){let{limit:W,reverse:Y}=E,J=G(_),X=this.#E(_,J);if(X=X.filter(($)=>H($,E)),Y)X.reverse();let Z=0;for(let $ of X){if(W!==void 0&&Z>=W)break;yield $,Z++}}async count(_){let E=G(_);return this.#E(_,E).length}scoped(_){return x(this,_)}get size(){return this.#_.size}clear(){this.#_.clear()}snapshot(){let _=new Map;for(let[E,W]of this.#_)_.set(E,new Uint8Array(W));return _}[Symbol.dispose](){this.#_.clear()}}});a();export{m as MemoryStorage};
2
+ var c=Object.defineProperty;var k=(_)=>_;function g(_,E){this[_]=k.bind(null,E)}var f=(_,E)=>{for(var F in E)c(_,F,{get:E[F],enumerable:!0,configurable:!0,set:g.bind(E,F)})};var G=(_,E)=>()=>(_&&(E=_(_=0)),E);function L(_,E,F){if(!_.capabilities()[E])throw Error(`Feature "${F}" requires storage capability "${E}", but this storage backend does not provide it.`)}function y(_){let E=_.capabilities(),F=[];if(E.persistence!=="local"&&E.persistence!=="remote")F.push(`persistence must be "local" or "remote" (got "${E.persistence}")`);if(E.readAfterWrite!=="linearizable")F.push(`readAfterWrite must be "linearizable" (got "${E.readAfterWrite}")`);if(E.scanConsistency!=="snapshot")F.push(`scanConsistency must be "snapshot" (got "${E.scanConsistency}")`);if(!E.atomicBatch)F.push("atomicBatch must be true");if(!E.conditionalBatch)F.push("conditionalBatch must be true");if(F.length>0)throw Error(`Storage is not durable enough for recovery: ${F.join("; ")}.`)}var q="default";async function A(_,E){return await _.get(E)!==null}async function*M(_,E,F){for await(let[Y]of _.scan(E,F))yield Y}async function z(_,E){let F=0;for await(let Y of M(_,E))F++;return F}async function O(_,E){let F=[];for await(let Y of M(_,E))F.push({type:"delete",key:Y});if(F.length===0)return 0;return await _.batch(F),F.length}async function P(_,E,F){let Y=[];for await(let J of M(_,E,F))Y.push({type:"delete",key:J});if(Y.length===0)return 0;return await _.batch(Y),Y.length}var l;var v=G(()=>{l=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","idx:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-deadline:","wf-delayed:","wf-has-services:","wf-headers:","wf-idx-","wf-terminal:"]});function $(_){return _.length>0?_.slice(0,-1)+String.fromCharCode(_.charCodeAt(_.length-1)+1):"\xFF"}function H(_,E={}){if(E.gt!==void 0&&_<=E.gt)return!1;if(E.gte!==void 0&&_<E.gte)return!1;if(E.lt!==void 0&&_>=E.lt)return!1;if(E.lte!==void 0&&_>E.lte)return!1;return!0}function h(_,E){if(_===null||E===null)return _===E;if(_.byteLength!==E.byteLength)return!1;for(let F=0;F<_.byteLength;F++)if(_[F]!==E[F])return!1;return!0}async function b(_,E){if(_.has)return _.has(E);return A(_,E)}function C(_,E,F){if(_.keys)return _.keys(E,F);return M(_,E,F)}async function u(_,E){if(_.count)return _.count(E);return z(_,E)}async function K(_,E){if(_.deletePrefix)return _.deletePrefix(E);return O(_,E)}async function S(_,E,F){if(L(_,"conditionalBatch","storageConditionalBatch"),!_.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return _.conditionalBatch(E,F)}function W(_){return encodeURIComponent(_)}function F_(_){return decodeURIComponent(_)}function W_(_){try{return decodeURIComponent(_)}catch{return null}}var Q=(_)=>String(_).padStart(16,"0"),Y_;var B=G(()=>{v();Y_={workflow:(_)=>`wf:${W(_)}`,checkpoint:(_)=>`wf:${W(_)}:ckpt`,checkpointHistory:(_,E)=>`wf:${W(_)}:ckpt:${String(E).padStart(10,"0")}`,timelinePrefix:(_)=>`wf:${W(_)}:timeline:`,timeline:(_,E)=>`wf:${W(_)}:timeline:${String(E).padStart(10,"0")}`,schedule:(_)=>`schedule:${W(_)}`,scheduleTick:(_,E)=>`schedule-due:${String(_).padStart(16,"0")}:${W(E)}`,scheduleRun:(_)=>`schedule-run:${W(_)}`,operation:(_,E,F)=>`op:${_}:${Q(E)}:${F}`,operationInflight:(_)=>`op:inflight:${_}`,operationQueued:(_)=>`op:queued:${_}`,operationResolved:(_)=>`op:resolved:${_}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(_,E,F)=>`audit:bulk:${Q(_)}:${W(E)}:${W(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(_,E)=>`op:resolved-by-time:${Q(_)}:${W(E)}`,asyncActivity:(_,E)=>`async-act:v1:${W(_)}:${W(E)}`,activityReconciliationPrefix:(_)=>`actrec:v1:${W(_)}:`,activityReconciliation:(_,E,F)=>`actrec:v1:${W(_)}:${W(E)}:${F}`,eventPrefix:(_)=>`ev:${W(_)}:`,event:(_,E)=>`ev:${W(_)}:${String(E).padStart(10,"0")}`,eventHead:(_)=>`ev:${W(_)}:head`,eventWatermark:(_)=>`ev:${W(_)}:watermark`,signal:(_,E,F)=>`sig:${W(_)}:${E}:${W(F)}`,signalSequence:(_)=>`sigseq:v1:${W(_)}`,signalAcceptedResponsePrefix:(_)=>`sigres:v1:${W(_)}:`,signalAcceptedResponse:(_,E,F)=>`sigres:v1:${W(_)}:${W(E)}:${W(F)}`,deadline:(_,E)=>`wf-deadline:${Q(_)}:${W(E)}`,terminalCleanup:(_,E)=>`wf-cleanup:${Q(_)}:${W(E)}`,delayedStart:(_,E)=>`wf-delayed:${Q(_)}:${W(E)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(_,E)=>`wf-terminal:${Q(_)}:${W(E)}`,attribute:(_)=>`attr:${W(_)}`,attributeIndex:(_,E,F)=>`idx:${_}:${E}:${W(F)}`,tagIndex:(_,E)=>`tag:${W(_)}:${W(E)}`,updatePrefix:(_)=>`upd:${W(_)}:`,update:(_,E)=>`upd:${W(_)}:${E}`,updateResponse:(_)=>`upr:${_}`,updateIdempotency:(_,E)=>`upk:${W(_)}:${E}`,startIdempotency:(_)=>`start-idem:${W(_)}`,startIdempotencySignalId:(_)=>`start-idem:${_}`,livenessPrefix:()=>"liveness:",liveness:(_)=>`liveness:${W(_)}`,budget:(_,E,F)=>`budget:${_}:${E}:${F}`,review:(_,E)=>`review:${W(_)}:${E}`,workflowHeaders:(_)=>`wf-headers:${W(_)}`,terminalCleanupNeeded:(_)=>`wf-cleanup-needed:${W(_)}`,workflowHasServices:(_)=>`wf-has-services:${W(_)}`,offload:(_,E)=>`offload:${W(_)}:${E}`,archive:(_,E)=>`archive:${W(_)}:${E}`,stateExecution:(_,E)=>`state:execution:${W(_)}:${W(E)}`,stateWorkflow:(_,E)=>`state:workflow-scope:${q}:${W(_)}:${W(E)}`,streamChunkPrefix:(_,E)=>`blob:${W(_)}:${E}:chunk:`,streamChunk:(_,E,F)=>`blob:${W(_)}:${E}:chunk:${String(F).padStart(10,"0")}`,streamMetadata:(_,E)=>`blob:${W(_)}:${E}:meta`,budgetCharged:(_)=>`budget-charged:${_}`,toolEffect:(_,E,F)=>`tool-effect:${W(_)}:${E}:${F}`,workflowVisibilityStatus:(_,E)=>`wf-idx-status:${W(_)}:${W(E)}`,workflowVisibilityType:(_,E)=>`wf-idx-type:${W(_)}:${W(E)}`,workflowVisibilityCreated:(_,E)=>`wf-idx-created:${Q(_)}:${W(E)}`,workflowVisibilityUpdated:(_,E)=>`wf-idx-updated:${Q(_)}:${W(E)}`,workflowVisibilityDeadline:(_,E)=>`wf-idx-deadline:${Q(_)}:${W(E)}`,workflowVisibilityManifest:(_)=>`wf-idx-manifest:${W(_)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function d(_){if(_===void 0)return;if(typeof _!=="number"||!Number.isInteger(_)||_<0)throw Error("deleteRange limit must be a finite non-negative integer");return _===0?0:_}function V(_){let E={},F=!1;for(let J of["gt","gte","lt","lte"]){let X=_[J];if(X===void 0)continue;if(typeof X!=="string")throw Error("deleteRange bounds must be strings");E[J]=X,F=!0}if(!F)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Y=d(_.limit);if(Y!==void 0)E.limit=Y;return E}async function I(_,E,F){let Y=V(F);if(_.deleteRange)return _.deleteRange(E,Y);return P(_,E,Y)}var N=()=>{};function D(_){return _.replaceAll(/:+$/g,"")}function s(_,E){let F=D(_),Y=D(E);if(F.length===0)return Y;if(Y.length===0)return F;return`${F}:${Y}`}function x(_,E){return new R(_,E)}var R;var w=G(()=>{N();B();R=class R{#_;#F;constructor(_,E){this.#_=_,this.#F=D(E)}#E(_){if(this.#F.length===0)return _;return _.length===0?`${this.#F}:`:`${this.#F}:${_}`}#W(_){if(this.#F.length===0)return _;return _.slice(this.#F.length+1)}#Y(_={}){let E={};if(_.limit!==void 0)E.limit=_.limit;if(_.reverse!==void 0)E.reverse=_.reverse;if(_.gt!==void 0)E.gt=this.#E(_.gt);if(_.gte!==void 0)E.gte=this.#E(_.gte);if(_.lt!==void 0)E.lt=this.#E(_.lt);if(_.lte!==void 0)E.lte=this.#E(_.lte);return E}#X(_){let E={};if(_.limit!==void 0)E.limit=_.limit;if(_.gt!==void 0)E.gt=this.#E(_.gt);if(_.gte!==void 0)E.gte=this.#E(_.gte);if(_.lt!==void 0)E.lt=this.#E(_.lt);if(_.lte!==void 0)E.lte=this.#E(_.lte);return E}capabilities(){return this.#_.capabilities()}scoped(_){return new R(this.#_,s(this.#F,_))}async get(_){return this.#_.get(this.#E(_))}async put(_,E){await this.#_.put(this.#E(_),E)}async delete(_){await this.#_.delete(this.#E(_))}async*scan(_,E){for await(let[F,Y]of this.#_.scan(this.#E(_),this.#Y(E)))yield[this.#W(F),Y]}async batch(_){await this.#_.batch(_.map((E)=>{if(E.type==="put")return{type:"put",key:this.#E(E.key),value:E.value};return{type:"delete",key:this.#E(E.key)}}))}async conditionalBatch(_,E){return S(this.#_,_.map((F)=>({key:this.#E(F.key),expectedValue:F.expectedValue})),E.map((F)=>{if(F.type==="put")return{type:"put",key:this.#E(F.key),value:F.value};return{type:"delete",key:this.#E(F.key)}}))}async has(_){return b(this.#_,this.#E(_))}async deletePrefix(_){return K(this.#_,this.#E(_))}async deleteRange(_,E){let F=this.#X(V(E));return I(this.#_,this.#E(_),F)}async*keys(_,E){for await(let F of C(this.#_,this.#E(_),this.#Y(E)))yield this.#W(F)}async count(_){return u(this.#_,this.#E(_))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}});var p={};f(p,{MemoryStorage:()=>m});var m;var a=G(()=>{N();B();w();m=class m{#_;constructor(){this.#_=new Map}capabilities(){return{persistence:"ephemeral",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#F(_,E,F){return _>=E&&_<F}#E(_,E){let F=[];for(let Y of this.#_.keys())if(this.#F(Y,_,E))F.push(Y);return F.toSorted()}async get(_){return this.#_.get(_)??null}async put(_,E){this.#_.set(_,E)}async delete(_){this.#_.delete(_)}async*scan(_,E={}){let{limit:F,reverse:Y}=E,J=$(_),X=this.#E(_,J);if(X=X.filter((Z)=>H(Z,E)),Y)X.reverse();let U=0;for(let Z of X){if(F!==void 0&&U>=F)break;let T=this.#_.get(Z);if(T!==void 0)yield[Z,T],U++}}async batch(_){this.#W(_)}#W(_){for(let E of _)if(E.type==="put")this.#_.set(E.key,E.value);else this.#_.delete(E.key)}async conditionalBatch(_,E){for(let F of _){let Y=this.#_.get(F.key)??null;if(!h(Y,F.expectedValue))return!1}return this.#W(E),!0}async has(_){return this.#_.has(_)}async deletePrefix(_){let E=$(_),F=this.#E(_,E);for(let Y of F)this.#_.delete(Y);return F.length}async deleteRange(_,E){let F=V(E),Y=$(_),J=this.#E(_,Y).filter((U)=>H(U,F)),X=F.limit===void 0?J:J.slice(0,F.limit);for(let U of X)this.#_.delete(U);return X.length}async*keys(_,E={}){let{limit:F,reverse:Y}=E,J=$(_),X=this.#E(_,J);if(X=X.filter((Z)=>H(Z,E)),Y)X.reverse();let U=0;for(let Z of X){if(F!==void 0&&U>=F)break;yield Z,U++}}async count(_){let E=$(_);return this.#E(_,E).length}scoped(_){return x(this,_)}get size(){return this.#_.size}clear(){this.#_.clear()}snapshot(){let _=new Map;for(let[E,F]of this.#_)_.set(E,new Uint8Array(F));return _}[Symbol.dispose](){this.#_.clear()}}});a();export{m as MemoryStorage};
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Pure value-mapping helpers shared by the Neon adapter: the minimal query-result
3
+ * shape both the Neon serverless driver and the PGlite test backend satisfy, the
4
+ * driver-tolerant affected-row count, and the BYTEA encode/decode pair. Split out
5
+ * of `neon.ts` to keep that module focused on the `Storage` implementation; none
6
+ * of these is exported from the package — `neon.ts` imports them back.
7
+ *
8
+ * @module storage/neon-value-mapping
9
+ */
10
+ /**
11
+ * Minimal structural view of a node-postgres query result. The Neon serverless
12
+ * driver and PGlite both return an object with a `rows` array; nothing else is
13
+ * needed here, so the adapter depends only on this shape rather than the full
14
+ * driver types. Keeping the seam minimal is what lets the PGlite test backend
15
+ * stand in for the real `Pool` without pulling the optional dependency's types
16
+ * into the build.
17
+ *
18
+ * `rowCount` (node-postgres) and `affectedRows` (PGlite) are the driver-specific
19
+ * names for the number of rows a write affected; both are optional here and read
20
+ * defensively so delete counts never require materializing the deleted rows.
21
+ */
22
+ export type NeonQueryResult = {
23
+ rows: Array<Record<string, unknown>>;
24
+ rowCount?: number | null;
25
+ affectedRows?: number;
26
+ };
27
+ /**
28
+ * Read the number of rows a write statement affected, tolerating the
29
+ * driver-specific field name (`rowCount` on node-postgres/Neon, `affectedRows`
30
+ * on PGlite). Falls back to `rows.length` for statements that return rows.
31
+ */
32
+ export declare function affectedRowCount(result: NeonQueryResult): number;
33
+ /**
34
+ * Normalize a BYTEA value read back from Postgres into a `Uint8Array`. The Neon
35
+ * driver returns a Node `Buffer`, which may be a view onto a larger pooled
36
+ * `ArrayBuffer`; `new Uint8Array(buffer)` copies the bytes into a standalone
37
+ * array so the value cannot be corrupted by buffer reuse. PGlite already returns
38
+ * a `Uint8Array`, and copying it is harmless.
39
+ */
40
+ export declare function toStorageValue(raw: unknown): Uint8Array;
41
+ /**
42
+ * Bind a storage value for a BYTEA parameter. node-postgres serializes a Node
43
+ * `Buffer` as BYTEA; a bare `Uint8Array` can serialize incorrectly. `Buffer` is
44
+ * a `Uint8Array` subclass, so PGlite accepts the same bound value — keeping a
45
+ * single bind path means the PGlite test exercises exactly what Neon runs.
46
+ */
47
+ export declare function toBytea(value: Uint8Array): Buffer;
@@ -0,0 +1,11 @@
1
+ export function affectedRowCount(result) {
2
+ return result.rowCount ?? result.affectedRows ?? result.rows.length;
3
+ }
4
+ export function toStorageValue(raw) {
5
+ if (raw instanceof Uint8Array)
6
+ return new Uint8Array(raw);
7
+ return new Uint8Array(raw);
8
+ }
9
+ export function toBytea(value) {
10
+ return Buffer.from(value);
11
+ }