@lostgradient/weft 0.8.0 → 0.9.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 (103) hide show
  1. package/README.md +7 -3
  2. package/dist/cli/generated/operation-client.generated.d.ts +1 -0
  3. package/dist/cli-main.js +78 -78
  4. package/dist/core/context/durable-operations.js +1 -1
  5. package/dist/core/context/index.d.ts +1 -0
  6. package/dist/core/context/index.js +2 -0
  7. package/dist/core/context/operation-request.d.ts +2 -0
  8. package/dist/core/context/run-operation.js +3 -2
  9. package/dist/core/context/speculative-child.js +1 -0
  10. package/dist/core/context/types.d.ts +1 -0
  11. package/dist/core/engine/activity-heartbeat-tracking.d.ts +1 -1
  12. package/dist/core/engine/activity-heartbeat-tracking.js +5 -1
  13. package/dist/core/engine/anonymous-signal-sequence.js +0 -2
  14. package/dist/core/engine/bulk-operations.js +10 -29
  15. package/dist/core/engine/callback-creators-bundles.js +1 -1
  16. package/dist/core/engine/disposal.js +1 -0
  17. package/dist/core/engine/engine-internal-types.d.ts +1 -0
  18. package/dist/core/engine/index.js +13 -9
  19. package/dist/core/engine/inline-launch-queue.js +1 -1
  20. package/dist/core/engine/internals.d.ts +23 -1
  21. package/dist/core/engine/lifecycle/fork-helpers.js +1 -0
  22. package/dist/core/engine/lifecycle/resume.js +6 -0
  23. package/dist/core/engine/lifecycle/start-exec.d.ts +2 -2
  24. package/dist/core/engine/lifecycle/start-exec.js +6 -4
  25. package/dist/core/engine/lifecycle/start.js +1 -0
  26. package/dist/core/engine/lifecycle/transition.js +6 -0
  27. package/dist/core/engine/memo-durable-activity.js +1 -1
  28. package/dist/core/engine/operations-activity.d.ts +1 -1
  29. package/dist/core/engine/operations-activity.js +7 -5
  30. package/dist/core/engine/operations-time.d.ts +2 -2
  31. package/dist/core/engine/operations-time.js +40 -6
  32. package/dist/core/engine/schedules.js +3 -0
  33. package/dist/core/engine/termination/cleanup.js +15 -13
  34. package/dist/core/engine/termination/finalizer-activity.d.ts +1 -1
  35. package/dist/core/engine/termination/finalizer-activity.js +5 -1
  36. package/dist/core/engine/termination/finalizer.js +1 -1
  37. package/dist/core/engine/validation/schedule-options.d.ts +9 -0
  38. package/dist/core/engine/validation/schedule-options.js +59 -0
  39. package/dist/core/engine/validation/schedule.d.ts +3 -8
  40. package/dist/core/engine/validation/schedule.js +40 -56
  41. package/dist/core/engine/validation.js +1 -0
  42. package/dist/core/execution-strategy.d.ts +1 -0
  43. package/dist/core/inline-execution-strategy.context-options.d.ts +1 -0
  44. package/dist/core/inline-execution-strategy.context-options.js +3 -0
  45. package/dist/core/types/activity.d.ts +11 -0
  46. package/dist/core/types/checkpoint.d.ts +1 -0
  47. package/dist/core/types/schedules.d.ts +10 -0
  48. package/dist/core/types/state.d.ts +6 -0
  49. package/dist/core/types/workflow-context.d.ts +13 -0
  50. package/dist/core/worker-execution-strategy.d.ts +1 -0
  51. package/dist/core/worker-inbound-message.d.ts +1 -0
  52. package/dist/core/worker-inbound-message.js +3 -0
  53. package/dist/json-schema.js +2 -2
  54. package/dist/mcp/cli.js +32 -32
  55. package/dist/observability/index.js +2 -2
  56. package/dist/runtime/portable.d.ts +1 -1
  57. package/dist/server/handler.js +27 -27
  58. package/dist/server/index.d.ts +2 -0
  59. package/dist/server/index.js +30 -30
  60. package/dist/server/operations/create-schedule.d.ts +2 -0
  61. package/dist/server/operations/create-schedule.js +13 -2
  62. package/dist/server/rest-binding.d.ts +1 -1
  63. package/dist/server/runtime/task-dispatch.js +6 -0
  64. package/dist/server/runtime/task-polling.js +9 -1
  65. package/dist/server/runtime/task-reconciliation.js +2 -1
  66. package/dist/server/task-queue-types.d.ts +2 -0
  67. package/dist/server/task-state.d.ts +4 -0
  68. package/dist/service-worker/index.d.ts +15 -14
  69. package/dist/service-worker/index.js +28 -28
  70. package/dist/service-worker/scheduler.d.ts +41 -1
  71. package/dist/storage/auto.d.ts +36 -18
  72. package/dist/storage/auto.js +1 -1
  73. package/dist/storage/compressed-storage.js +1 -1
  74. package/dist/storage/indexeddb.d.ts +6 -1
  75. package/dist/storage/indexeddb.js +1 -1
  76. package/dist/storage/interface.js +1 -1
  77. package/dist/storage/lmdb.js +1 -1
  78. package/dist/storage/memory.js +1 -1
  79. package/dist/storage/neon.js +1 -1
  80. package/dist/storage/resolve.js +1 -1
  81. package/dist/storage/scoped-storage.js +1 -1
  82. package/dist/storage/testing.js +1 -1
  83. package/dist/storage/turso.js +1 -1
  84. package/dist/storage/typed-storage.js +1 -1
  85. package/dist/storage/web-extension.d.ts +1 -1
  86. package/dist/storage/web-extension.js +1 -1
  87. package/dist/testing/index.js +33 -33
  88. package/dist/version.d.ts +1 -1
  89. package/dist/version.js +1 -1
  90. package/dist/worker/execute-with-interceptors.d.ts +9 -3
  91. package/dist/worker/execute-with-interceptors.js +14 -2
  92. package/dist/worker/long-poll.d.ts +2 -1
  93. package/dist/worker/long-poll.js +1 -1
  94. package/dist/worker/protocol-messages.d.ts +2 -0
  95. package/dist/worker/protocol-schemas.d.ts +8 -0
  96. package/dist/worker/protocol-schemas.js +1 -0
  97. package/dist/worker/protocol.js +1 -1
  98. package/dist/worker/remote-activity-context.d.ts +2 -0
  99. package/dist/workers/activity-runner.d.ts +2 -0
  100. package/dist/workers/activity-runner.js +9 -1
  101. package/dist/workers/workflow-runner.d.ts +2 -1
  102. package/dist/workers/workflow-runner.js +1 -0
  103. package/package.json +1 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Weft
2
2
 
3
- A Bun-native durable execution engine. Current release: `0.8.0`.
3
+ A Bun-native durable execution engine. Current release: `0.9.0`.
4
4
 
5
5
  Install the library from npm as `@lostgradient/weft`:
6
6
 
@@ -147,7 +147,7 @@ Because recovery never re-executes the workflow from the beginning, your workflo
147
147
 
148
148
  ### Durable Workflows
149
149
 
150
- Generator functions with automatic checkpointing at every `yield*` boundary. Activities, sleeps, signals, condition gates with `ctx.waitUntil()`, queries, updates, structured logs with `ctx.log`, parallel execution via `ctx.all()`, race semantics via `ctx.race()`, memoization via `ctx.memo()`, sagas via `ctx.saga()`, child workflows, and forks. Plain async helpers called from inline `ctx.memo()` callbacks can use `durableActivity()` for activity-level retry, heartbeat, reconciliation, and observability without converting the helper stack to generators. `ctx.all()` and `ctx.race()` can branch over activities, sleeps, and signal waits; use `ctx.race([ctx.waitForSignal(name), ctx.sleep(timeout)])` for signal timeouts instead of placing an unbounded signal wait directly in `ctx.all()`.
150
+ Generator functions with automatic checkpointing at every `yield*` boundary. Activities, sleeps, signals, condition gates with `ctx.waitUntil()`, queries, updates, structured logs with `ctx.log`, parallel execution via `ctx.all()`, race semantics via `ctx.race()`, memoization via `ctx.memo()`, sagas via `ctx.saga()`, child workflows, and forks. Plain async helpers called from inline `ctx.memo()` callbacks can use `durableActivity()` for activity-level retry, heartbeat, reconciliation, and observability without converting the helper stack to generators. `ctx.sleep()` uses replay-stable durable timer keys, so a workflow that crashes while parked on a sleep resumes the same timer instead of orphaning the old one. `ctx.all()` and `ctx.race()` can branch over activities, sleeps, and signal waits; use `ctx.race([ctx.waitForSignal(name), ctx.sleep(timeout)])` for signal timeouts instead of placing an unbounded signal wait directly in `ctx.all()`.
151
151
 
152
152
  Every workflow context exposes `ctx.workflowId` and `ctx.workflowType`. `workflowType` is the registered name from `workflow({ name })`, so shared workflow code can log, tag, or branch on the current workflow type without closing over definition-site state.
153
153
 
@@ -342,6 +342,8 @@ A small `Storage` interface over string keys and `Uint8Array` values: five requi
342
342
 
343
343
  Bring your own backend by implementing the interface—five methods is enough.
344
344
 
345
+ For demos and local-first prototypes, `resolveDefaultStorage()` from `@lostgradient/weft/storage/auto` picks a durable default for the current runtime: SQLite under Bun or Node, `WebExtensionStorage` in extension contexts, and `IndexedDBStorage` in browsers and Service Workers. It deliberately throws instead of falling back to `MemoryStorage`, so a "default" engine does not silently lose checkpoints after a restart. Use `resolveStorage({ type: 'auto' })` only when an ephemeral fallback is acceptable.
346
+
345
347
  Production recovery needs one engine process per durable store. Use a local durable adapter (`SQLiteStorage` or `LMDBStorage`) when the service owns its disk, or `NeonStorage` when the deployment wants managed Postgres durability and point-in-time restore. In either case, validate the store at boot with `assertDurableStorageForRecovery()` and enforce the singleton topology in infrastructure; the [singleton service deployment guide](documentation/guides/singleton-service-deployment.md) covers the checklist and the optional warn-only second-instance detector.
346
348
 
347
349
  For long-running workflows, `history.retentionWindow` can compact old event-log records behind the latest checkpoint while preserving verification through a durable watermark. `history.maxEvents` remains a lifetime circuit breaker even after compaction. Use `payloadSize.maxBytes` when operators need an admission-time cap on workflow inputs, signal payloads, and activity results before those values reach storage.
@@ -386,7 +388,9 @@ await worker.connect();
386
388
 
387
389
  ### Browser Support
388
390
 
389
- The core engine runs inside a Web Worker, with a Service Worker acting as the durable persistence layer over `IndexedDB`. Browser-compatible workflow logic ships across server and browser without modification—useful for offline-first apps that need durable client-side workflows. Activities, storage adapters, and other environment-bound pieces still need browser-safe implementations: use `IndexedDBStorage` or `WebExtensionStorage` instead of SQLite storage, swap server-only activities for `fetch`-based equivalents, and so on. See the [Service Worker guide](documentation/guides/service-worker.md) for the browser runtime wiring.
391
+ The core engine runs inside a Web Worker, with a Service Worker acting as the durable persistence layer over `IndexedDB`. Browser-compatible workflow logic ships across server and browser without modification—useful for offline-first apps that need durable client-side workflows. Activities, storage adapters, and other environment-bound pieces still need browser-safe implementations: use `IndexedDBStorage`, `WebExtensionStorage`, or `resolveDefaultStorage()` instead of SQLite storage, swap server-only activities for `fetch`-based equivalents, and so on.
392
+
393
+ Service Worker deployments can import `ServiceWorkerScheduler` from `@lostgradient/weft/service-worker` and wire timer wakeups through `onTimerFired: (entry) => engine.fireTimer(entry)`. See the [Service Worker guide](documentation/guides/service-worker.md) for the browser runtime wiring and Periodic Background Sync fallback pattern.
390
394
 
391
395
  ### Observability
392
396
 
@@ -124,6 +124,7 @@ export type CatalogOperationTypes = {
124
124
  readonly input: {
125
125
  readonly backfill?: unknown;
126
126
  readonly cronExpression?: unknown;
127
+ readonly description?: unknown;
127
128
  readonly every?: unknown;
128
129
  readonly id?: unknown;
129
130
  readonly input?: unknown;