@mokronos/wfkit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -0
  3. package/dist/authoring.d.ts +7 -0
  4. package/dist/authoring.d.ts.map +1 -0
  5. package/dist/authoring.js +8 -0
  6. package/dist/authoring.js.map +1 -0
  7. package/dist/cli/integrations.d.ts +3 -0
  8. package/dist/cli/integrations.d.ts.map +1 -0
  9. package/dist/cli/integrations.js +40 -0
  10. package/dist/cli/integrations.js.map +1 -0
  11. package/dist/cli/main.d.ts +3 -0
  12. package/dist/cli/main.d.ts.map +1 -0
  13. package/dist/cli/main.js +591 -0
  14. package/dist/cli/main.js.map +1 -0
  15. package/dist/core.d.ts +198 -0
  16. package/dist/core.d.ts.map +1 -0
  17. package/dist/core.js +1061 -0
  18. package/dist/core.js.map +1 -0
  19. package/dist/errors.d.ts +3 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +13 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/events.d.ts +154 -0
  24. package/dist/events.d.ts.map +1 -0
  25. package/dist/events.js +24 -0
  26. package/dist/events.js.map +1 -0
  27. package/dist/index.d.ts +15 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +11 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/replay.d.ts +3 -0
  32. package/dist/replay.d.ts.map +1 -0
  33. package/dist/replay.js +28 -0
  34. package/dist/replay.js.map +1 -0
  35. package/dist/runtime.d.ts +70 -0
  36. package/dist/runtime.d.ts.map +1 -0
  37. package/dist/runtime.js +183 -0
  38. package/dist/runtime.js.map +1 -0
  39. package/dist/schema.d.ts +18 -0
  40. package/dist/schema.d.ts.map +1 -0
  41. package/dist/schema.js +19 -0
  42. package/dist/schema.js.map +1 -0
  43. package/dist/schemas.d.ts +1198 -0
  44. package/dist/schemas.d.ts.map +1 -0
  45. package/dist/schemas.js +383 -0
  46. package/dist/schemas.js.map +1 -0
  47. package/dist/sdk/artifact.d.ts +41 -0
  48. package/dist/sdk/artifact.d.ts.map +1 -0
  49. package/dist/sdk/artifact.js +94 -0
  50. package/dist/sdk/artifact.js.map +1 -0
  51. package/dist/sdk/graph.d.ts +15 -0
  52. package/dist/sdk/graph.d.ts.map +1 -0
  53. package/dist/sdk/graph.js +388 -0
  54. package/dist/sdk/graph.js.map +1 -0
  55. package/dist/sdk/index.d.ts +14 -0
  56. package/dist/sdk/index.d.ts.map +1 -0
  57. package/dist/sdk/index.js +8 -0
  58. package/dist/sdk/index.js.map +1 -0
  59. package/dist/sdk/integrations.d.ts +18 -0
  60. package/dist/sdk/integrations.d.ts.map +1 -0
  61. package/dist/sdk/integrations.js +20 -0
  62. package/dist/sdk/integrations.js.map +1 -0
  63. package/dist/sdk/json.d.ts +4 -0
  64. package/dist/sdk/json.d.ts.map +1 -0
  65. package/dist/sdk/json.js +31 -0
  66. package/dist/sdk/json.js.map +1 -0
  67. package/dist/sdk/loader.d.ts +10 -0
  68. package/dist/sdk/loader.d.ts.map +1 -0
  69. package/dist/sdk/loader.js +75 -0
  70. package/dist/sdk/loader.js.map +1 -0
  71. package/dist/sdk/sdk.d.ts +102 -0
  72. package/dist/sdk/sdk.d.ts.map +1 -0
  73. package/dist/sdk/sdk.js +669 -0
  74. package/dist/sdk/sdk.js.map +1 -0
  75. package/dist/sdk/sqlite.d.ts +8 -0
  76. package/dist/sdk/sqlite.d.ts.map +1 -0
  77. package/dist/sdk/sqlite.js +288 -0
  78. package/dist/sdk/sqlite.js.map +1 -0
  79. package/dist/signal.d.ts +17 -0
  80. package/dist/signal.d.ts.map +1 -0
  81. package/dist/signal.js +78 -0
  82. package/dist/signal.js.map +1 -0
  83. package/dist/testing/index.d.ts +35 -0
  84. package/dist/testing/index.d.ts.map +1 -0
  85. package/dist/testing/index.js +244 -0
  86. package/dist/testing/index.js.map +1 -0
  87. package/package.json +67 -0
  88. package/src/authoring.ts +32 -0
  89. package/src/cli/integrations.ts +75 -0
  90. package/src/cli/main.ts +793 -0
  91. package/src/core.ts +1515 -0
  92. package/src/errors.ts +19 -0
  93. package/src/events.ts +37 -0
  94. package/src/index.ts +109 -0
  95. package/src/replay.ts +29 -0
  96. package/src/runtime.ts +314 -0
  97. package/src/schema.ts +34 -0
  98. package/src/schemas.ts +473 -0
  99. package/src/sdk/artifact.ts +176 -0
  100. package/src/sdk/graph.ts +486 -0
  101. package/src/sdk/index.ts +64 -0
  102. package/src/sdk/integrations.ts +49 -0
  103. package/src/sdk/json.ts +40 -0
  104. package/src/sdk/loader.ts +99 -0
  105. package/src/sdk/sdk.ts +911 -0
  106. package/src/sdk/sqlite.ts +405 -0
  107. package/src/signal.ts +116 -0
  108. package/src/testing/index.ts +341 -0
@@ -0,0 +1,183 @@
1
+ import { mkdirSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { NodeRuntime } from "@effect/platform-node";
4
+ import { SqliteClient } from "@effect/sql-sqlite-bun";
5
+ import { Effect, Exit, Layer, ManagedRuntime, Schema } from "effect";
6
+ import { ClusterWorkflowEngine, SingleRunner } from "effect/unstable/cluster";
7
+ import { SqlClient } from "effect/unstable/sql";
8
+ import { DurableDeferred, WorkflowEngine } from "effect/unstable/workflow";
9
+ import { currentSecretResolver, removeExecutionSecretResolver, setExecutionSecretResolver } from "./core.js";
10
+ import { currentWorkflowEventSink, emitWorkflowEvent, removeExecutionEventSink, setExecutionEventSink } from "./events.js";
11
+ export class WorkflowVersionConflictError extends Error {
12
+ _tag = "WorkflowVersionConflictError";
13
+ constructor(options) {
14
+ super(`Workflow ${options.name}@v${options.version} is already registered with different source; register a new version instead`);
15
+ this.name = "WorkflowVersionConflictError";
16
+ }
17
+ }
18
+ const defaultEngineDatabasePath = () => path.join(process.cwd(), ".wf", "engine.sqlite");
19
+ // All durable-execution plumbing lives here so authored workflows never touch
20
+ // the cluster engine, the runner, or the backing store.
21
+ export const makeEngineLayer = (options = {}) => {
22
+ const databasePath = path.resolve(options.databasePath ?? defaultEngineDatabasePath());
23
+ const sqliteBusyTimeoutMs = Math.max(0, Math.trunc(options.sqliteBusyTimeoutMs ?? 5000));
24
+ // The cluster default is 10 seconds, which delays every durable timer
25
+ // (signal timeout, long sleep) by up to that long on a single-node engine.
26
+ const timerPollIntervalMs = Math.max(10, Math.trunc(options.timerPollIntervalMs ?? 250));
27
+ mkdirSync(path.dirname(databasePath), { recursive: true });
28
+ const sqliteLayer = SqliteClient.layer({ filename: databasePath });
29
+ const configuredSqliteLayer = Layer.effectDiscard(Effect.gen(function* () {
30
+ const sql = yield* SqlClient.SqlClient;
31
+ yield* sql.unsafe(`PRAGMA busy_timeout = ${sqliteBusyTimeoutMs}`);
32
+ })).pipe(Layer.provideMerge(sqliteLayer));
33
+ return ClusterWorkflowEngine.layer.pipe(Layer.provideMerge(SingleRunner.layer({
34
+ shardingConfig: { entityMessagePollInterval: timerPollIntervalMs }
35
+ })), Layer.provide(configuredSqliteLayer));
36
+ };
37
+ export const engineLayer = makeEngineLayer();
38
+ export const createWorkflowRuntime = (options) => {
39
+ const workflows = new Map();
40
+ const databasePath = options.databasePath;
41
+ const env = () => {
42
+ const workflowLayers = Array.from(workflows.values()).map((workflow) => workflow.layer);
43
+ const base = options.backend === "sqlite"
44
+ ? makeEngineLayer({
45
+ ...(databasePath === undefined ? {} : { databasePath }),
46
+ ...(options.sqliteBusyTimeoutMs === undefined ? {} : { sqliteBusyTimeoutMs: options.sqliteBusyTimeoutMs }),
47
+ ...(options.timerPollIntervalMs === undefined ? {} : { timerPollIntervalMs: options.timerPollIntervalMs })
48
+ })
49
+ : WorkflowEngine.layerMemory;
50
+ return workflowLayers.reduce((layer, workflowLayer) => Layer.provideMerge(workflowLayer, layer), base);
51
+ };
52
+ // ONE engine per runtime. Building a fresh cluster node per call (execute,
53
+ // signal, ...) puts several SingleRunner nodes on the same store, and they
54
+ // fight over shard ownership — message processing becomes arbitrarily late.
55
+ // Rebuilt only when the registered workflow set changes.
56
+ let managed;
57
+ const getManagedRuntime = () => {
58
+ const signature = Array.from(workflows.keys()).sort().join(",");
59
+ if (managed === undefined || managed.signature !== signature) {
60
+ if (managed !== undefined) {
61
+ void managed.runtime.dispose();
62
+ }
63
+ managed = { signature, runtime: ManagedRuntime.make(env()) };
64
+ }
65
+ return managed.runtime;
66
+ };
67
+ const runEffect = (effect, onEvent) => getManagedRuntime().runPromise(effect.pipe(Effect.provideService(currentWorkflowEventSink, onEvent), Effect.provideService(currentSecretResolver, options.secrets)));
68
+ return {
69
+ backend: options.backend,
70
+ ...(databasePath === undefined ? {} : { databasePath }),
71
+ ...(options.secrets === undefined ? {} : { secrets: options.secrets }),
72
+ register(registered) {
73
+ for (const workflow of registered) {
74
+ const key = `${workflow.name}@${workflow.version}`;
75
+ const existing = workflows.get(key);
76
+ if (existing !== undefined && existing.sourceHash !== workflow.sourceHash) {
77
+ throw new WorkflowVersionConflictError({
78
+ name: workflow.name,
79
+ version: workflow.version
80
+ });
81
+ }
82
+ workflows.set(key, workflow);
83
+ }
84
+ },
85
+ getWorkflow(name, version) {
86
+ return workflows.get(`${name}@${version}`);
87
+ },
88
+ getLatestWorkflow(name) {
89
+ return Array.from(workflows.values())
90
+ .filter((workflow) => workflow.name === name)
91
+ .sort((left, right) => right.version - left.version)[0];
92
+ },
93
+ listWorkflows(name) {
94
+ return Array.from(workflows.values())
95
+ .filter((workflow) => name === undefined || workflow.name === name)
96
+ .sort((left, right) => left.name.localeCompare(right.name) || left.version - right.version);
97
+ },
98
+ execute({ workflow, payload, executionId, onEvent }) {
99
+ const workflowName = String(workflow.workflow._tag ?? workflow.engineName);
100
+ if (onEvent !== undefined) {
101
+ setExecutionEventSink(executionId, onEvent);
102
+ }
103
+ if (options.secrets !== undefined) {
104
+ setExecutionSecretResolver(executionId, options.secrets);
105
+ }
106
+ const effect = Effect.gen(function* () {
107
+ const engine = yield* WorkflowEngine.WorkflowEngine;
108
+ yield* emitWorkflowEvent({ type: "workflow.started", workflowName, payload });
109
+ const result = yield* engine.execute(workflow.workflow, {
110
+ executionId,
111
+ payload: payload
112
+ }).pipe(Effect.tap((result) => emitWorkflowEvent({ type: "workflow.completed", workflowName, result })), Effect.tapError((error) => emitWorkflowEvent({ type: "workflow.failed", workflowName, error })));
113
+ return result;
114
+ });
115
+ return runEffect(effect, onEvent).finally(() => {
116
+ removeExecutionEventSink(executionId);
117
+ removeExecutionSecretResolver(executionId);
118
+ });
119
+ },
120
+ deliverSignal({ workflow, executionId, deferredName, payload, onEvent }) {
121
+ if (onEvent !== undefined) {
122
+ setExecutionEventSink(executionId, onEvent);
123
+ }
124
+ // The resumed replay may execute steps in THIS process (see the resume
125
+ // note below), so it needs the secret resolver just like execute().
126
+ if (options.secrets !== undefined) {
127
+ setExecutionSecretResolver(executionId, options.secrets);
128
+ }
129
+ const effect = Effect.gen(function* () {
130
+ const engine = yield* WorkflowEngine.WorkflowEngine;
131
+ const deferred = DurableDeferred.make(deferredName, { success: Schema.Unknown });
132
+ yield* engine.deferredDone(deferred, {
133
+ workflowName: workflow.workflow._tag,
134
+ executionId,
135
+ deferredName,
136
+ exit: Exit.succeed(payload)
137
+ });
138
+ // deferredDone only resumes a run whose Suspended reply is already
139
+ // persisted. A delivery racing the suspension write would otherwise
140
+ // sit unnoticed until another wake-up, so nudge resume a few times
141
+ // (resume is a no-op unless the run is recorded as suspended).
142
+ for (let attempt = 0; attempt < 5; attempt++) {
143
+ yield* Effect.sleep("100 millis");
144
+ yield* engine.resume(workflow.workflow, executionId);
145
+ }
146
+ });
147
+ // The resumed replay may run inside THIS call's engine environment, so
148
+ // it needs the same event sink as the original execute to record
149
+ // history (compensations, cancellation, signal receipt).
150
+ return runEffect(effect, onEvent);
151
+ },
152
+ interrupt({ workflow, executionId }) {
153
+ const effect = Effect.gen(function* () {
154
+ const engine = yield* WorkflowEngine.WorkflowEngine;
155
+ yield* engine.interrupt(workflow.workflow, executionId);
156
+ });
157
+ return runEffect(effect);
158
+ },
159
+ resume({ workflow, executionId }) {
160
+ const effect = Effect.gen(function* () {
161
+ const engine = yield* WorkflowEngine.WorkflowEngine;
162
+ yield* engine.resume(workflow.workflow, executionId);
163
+ });
164
+ return runEffect(effect);
165
+ }
166
+ };
167
+ };
168
+ export const makeWorkflowEffect = (wf, payload, options = {}) => {
169
+ const env = wf.layer.pipe(Layer.provideMerge(makeEngineLayer(options.engineDatabasePath === undefined ? {} : { databasePath: options.engineDatabasePath })));
170
+ const workflowName = String(wf.workflow._tag ?? wf.engineName ?? "Workflow");
171
+ const execution = Effect.gen(function* () {
172
+ yield* emitWorkflowEvent({ type: "workflow.started", workflowName, payload });
173
+ const result = yield* wf.workflow.execute(payload).pipe(Effect.tap((result) => emitWorkflowEvent({ type: "workflow.completed", workflowName, result })), Effect.tapError((error) => emitWorkflowEvent({ type: "workflow.failed", workflowName, error })));
174
+ return result;
175
+ });
176
+ return execution.pipe(Effect.provide(env), Effect.provideService(currentWorkflowEventSink, options.onEvent));
177
+ };
178
+ export const executeWorkflow = (wf, payload, options = {}) => Effect.runPromise(makeWorkflowEffect(wf, payload, options));
179
+ // Execute a workflow to completion as a standalone program.
180
+ export const run = (wf, payload) => {
181
+ return makeWorkflowEffect(wf, payload).pipe(NodeRuntime.runMain);
182
+ };
183
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Schema } from "effect";
2
+ interface SchemaVocabulary {
3
+ readonly string: typeof Schema.String;
4
+ readonly number: typeof Schema.Number;
5
+ readonly boolean: typeof Schema.Boolean;
6
+ readonly void: typeof Schema.Void;
7
+ readonly date: typeof Schema.Date;
8
+ readonly struct: typeof Schema.Struct;
9
+ readonly array: <S extends Schema.Constraint>(schema: S) => Schema.$Array<S>;
10
+ readonly literal: typeof Schema.Literal;
11
+ readonly taggedStruct: typeof Schema.TaggedStruct;
12
+ readonly optional: <S extends Schema.Constraint>(schema: S) => Schema.optional<S>;
13
+ readonly union: typeof Schema.Union;
14
+ readonly unknown: typeof Schema.Unknown;
15
+ }
16
+ export declare const t: SchemaVocabulary;
17
+ export {};
18
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,UAAU,gBAAgB;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,MAAM,CAAC,OAAO,CAAA;IACvC,QAAQ,CAAC,IAAI,EAAE,OAAO,MAAM,CAAC,IAAI,CAAA;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,MAAM,CAAC,IAAI,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,CAAA;IACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC5E,QAAQ,CAAC,OAAO,EAAE,OAAO,MAAM,CAAC,OAAO,CAAA;IACvC,QAAQ,CAAC,YAAY,EAAE,OAAO,MAAM,CAAC,YAAY,CAAA;IACjD,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IACjF,QAAQ,CAAC,KAAK,EAAE,OAAO,MAAM,CAAC,KAAK,CAAA;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,MAAM,CAAC,OAAO,CAAA;CACxC;AAKD,eAAO,MAAM,CAAC,EAAE,gBAaN,CAAA"}
package/dist/schema.js ADDED
@@ -0,0 +1,19 @@
1
+ import { Schema } from "effect";
2
+ // `t` is the LLM-facing schema vocabulary. We re-export a small, lowercase
3
+ // subset of Effect's `Schema` so authored workflows never import `effect`
4
+ // directly. Add primitives here as workflows need them — keep it small.
5
+ export const t = {
6
+ string: Schema.String,
7
+ number: Schema.Number,
8
+ boolean: Schema.Boolean,
9
+ void: Schema.Void,
10
+ date: Schema.Date,
11
+ struct: Schema.Struct,
12
+ array: Schema.Array,
13
+ literal: Schema.Literal,
14
+ taggedStruct: Schema.TaggedStruct,
15
+ optional: Schema.optional,
16
+ union: Schema.Union,
17
+ unknown: Schema.Unknown
18
+ };
19
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAiB/B,2EAA2E;AAC3E,0EAA0E;AAC1E,wEAAwE;AACxE,MAAM,CAAC,MAAM,CAAC,GAAqB;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC,KAAK;IACnB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,YAAY,EAAE,MAAM,CAAC,YAAY;IACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;IACzB,KAAK,EAAE,MAAM,CAAC,KAAK;IACnB,OAAO,EAAE,MAAM,CAAC,OAAO;CACf,CAAA"}