@xyne/workflow-sdk 1.0.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.
- package/README.md +36 -0
- package/dist/agents/agent-step.d.ts +152 -0
- package/dist/agents/agent-step.d.ts.map +1 -0
- package/dist/agents/agent-step.js +403 -0
- package/dist/agents/agent-step.js.map +1 -0
- package/dist/agents/base-runtime.d.ts +38 -0
- package/dist/agents/base-runtime.d.ts.map +1 -0
- package/dist/agents/base-runtime.js +21 -0
- package/dist/agents/base-runtime.js.map +1 -0
- package/dist/agents/index.d.ts +12 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +17 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/interceptor.d.ts +19 -0
- package/dist/agents/interceptor.d.ts.map +1 -0
- package/dist/agents/interceptor.js +21 -0
- package/dist/agents/interceptor.js.map +1 -0
- package/dist/agents/interceptors/approval-gate.d.ts +14 -0
- package/dist/agents/interceptors/approval-gate.d.ts.map +1 -0
- package/dist/agents/interceptors/approval-gate.js +19 -0
- package/dist/agents/interceptors/approval-gate.js.map +1 -0
- package/dist/agents/interceptors/tool-logger.d.ts +15 -0
- package/dist/agents/interceptors/tool-logger.d.ts.map +1 -0
- package/dist/agents/interceptors/tool-logger.js +23 -0
- package/dist/agents/interceptors/tool-logger.js.map +1 -0
- package/dist/agents/pi-mono-runtime.d.ts +88 -0
- package/dist/agents/pi-mono-runtime.d.ts.map +1 -0
- package/dist/agents/pi-mono-runtime.js +129 -0
- package/dist/agents/pi-mono-runtime.js.map +1 -0
- package/dist/agents/tool-registry.d.ts +25 -0
- package/dist/agents/tool-registry.d.ts.map +1 -0
- package/dist/agents/tool-registry.js +47 -0
- package/dist/agents/tool-registry.js.map +1 -0
- package/dist/agents/tool-types.d.ts +25 -0
- package/dist/agents/tool-types.d.ts.map +1 -0
- package/dist/agents/tool-types.js +9 -0
- package/dist/agents/tool-types.js.map +1 -0
- package/dist/agents/types.d.ts +91 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +12 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/builder/index.d.ts +30 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +32 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/client/index.d.ts +19 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +18 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/types.d.ts +128 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +10 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/workflow-client.d.ts +15 -0
- package/dist/client/workflow-client.d.ts.map +1 -0
- package/dist/client/workflow-client.js +293 -0
- package/dist/client/workflow-client.js.map +1 -0
- package/dist/common/attachment.d.ts +31 -0
- package/dist/common/attachment.d.ts.map +1 -0
- package/dist/common/attachment.js +21 -0
- package/dist/common/attachment.js.map +1 -0
- package/dist/common/executable-check.d.ts +42 -0
- package/dist/common/executable-check.d.ts.map +1 -0
- package/dist/common/executable-check.js +115 -0
- package/dist/common/executable-check.js.map +1 -0
- package/dist/common/index.d.ts +21 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +19 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/resume-payload.d.ts +34 -0
- package/dist/common/resume-payload.d.ts.map +1 -0
- package/dist/common/resume-payload.js +12 -0
- package/dist/common/resume-payload.js.map +1 -0
- package/dist/engine/available-context.d.ts +29 -0
- package/dist/engine/available-context.d.ts.map +1 -0
- package/dist/engine/available-context.js +66 -0
- package/dist/engine/available-context.js.map +1 -0
- package/dist/engine/condition-evaluator.d.ts +13 -0
- package/dist/engine/condition-evaluator.d.ts.map +1 -0
- package/dist/engine/condition-evaluator.js +92 -0
- package/dist/engine/condition-evaluator.js.map +1 -0
- package/dist/engine/config-validator.d.ts +25 -0
- package/dist/engine/config-validator.d.ts.map +1 -0
- package/dist/engine/config-validator.js +316 -0
- package/dist/engine/config-validator.js.map +1 -0
- package/dist/engine/pause-step.d.ts +20 -0
- package/dist/engine/pause-step.d.ts.map +1 -0
- package/dist/engine/pause-step.js +24 -0
- package/dist/engine/pause-step.js.map +1 -0
- package/dist/engine/service-registry.d.ts +49 -0
- package/dist/engine/service-registry.d.ts.map +1 -0
- package/dist/engine/service-registry.js +76 -0
- package/dist/engine/service-registry.js.map +1 -0
- package/dist/engine/variable-resolver.d.ts +29 -0
- package/dist/engine/variable-resolver.d.ts.map +1 -0
- package/dist/engine/variable-resolver.js +130 -0
- package/dist/engine/variable-resolver.js.map +1 -0
- package/dist/engine/workflow-executor.d.ts +96 -0
- package/dist/engine/workflow-executor.d.ts.map +1 -0
- package/dist/engine/workflow-executor.js +837 -0
- package/dist/engine/workflow-executor.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/persistence/in-memory-adapter.d.ts +138 -0
- package/dist/persistence/in-memory-adapter.d.ts.map +1 -0
- package/dist/persistence/in-memory-adapter.js +315 -0
- package/dist/persistence/in-memory-adapter.js.map +1 -0
- package/dist/persistence/types.d.ts +214 -0
- package/dist/persistence/types.d.ts.map +1 -0
- package/dist/persistence/types.js +8 -0
- package/dist/persistence/types.js.map +1 -0
- package/dist/router/types.d.ts +57 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +8 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router/workflow-router.d.ts +26 -0
- package/dist/router/workflow-router.d.ts.map +1 -0
- package/dist/router/workflow-router.js +611 -0
- package/dist/router/workflow-router.js.map +1 -0
- package/dist/runtime/execution-event-bus.d.ts +38 -0
- package/dist/runtime/execution-event-bus.d.ts.map +1 -0
- package/dist/runtime/execution-event-bus.js +87 -0
- package/dist/runtime/execution-event-bus.js.map +1 -0
- package/dist/runtime/types.d.ts +129 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +5 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/workflow-runtime.d.ts +256 -0
- package/dist/runtime/workflow-runtime.d.ts.map +1 -0
- package/dist/runtime/workflow-runtime.js +699 -0
- package/dist/runtime/workflow-runtime.js.map +1 -0
- package/dist/steps/base-step.d.ts +204 -0
- package/dist/steps/base-step.d.ts.map +1 -0
- package/dist/steps/base-step.js +69 -0
- package/dist/steps/base-step.js.map +1 -0
- package/dist/steps/builtin/code.step.d.ts +95 -0
- package/dist/steps/builtin/code.step.d.ts.map +1 -0
- package/dist/steps/builtin/code.step.js +122 -0
- package/dist/steps/builtin/code.step.js.map +1 -0
- package/dist/steps/builtin/conditional.step.d.ts +146 -0
- package/dist/steps/builtin/conditional.step.d.ts.map +1 -0
- package/dist/steps/builtin/conditional.step.js +71 -0
- package/dist/steps/builtin/conditional.step.js.map +1 -0
- package/dist/steps/builtin/dedup.step.d.ts +65 -0
- package/dist/steps/builtin/dedup.step.d.ts.map +1 -0
- package/dist/steps/builtin/dedup.step.js +61 -0
- package/dist/steps/builtin/dedup.step.js.map +1 -0
- package/dist/steps/builtin/http-request.step.d.ts +928 -0
- package/dist/steps/builtin/http-request.step.d.ts.map +1 -0
- package/dist/steps/builtin/http-request.step.js +570 -0
- package/dist/steps/builtin/http-request.step.js.map +1 -0
- package/dist/steps/builtin/loop.step.d.ts +100 -0
- package/dist/steps/builtin/loop.step.d.ts.map +1 -0
- package/dist/steps/builtin/loop.step.js +79 -0
- package/dist/steps/builtin/loop.step.js.map +1 -0
- package/dist/steps/builtin/parallel.step.d.ts +208 -0
- package/dist/steps/builtin/parallel.step.d.ts.map +1 -0
- package/dist/steps/builtin/parallel.step.js +249 -0
- package/dist/steps/builtin/parallel.step.js.map +1 -0
- package/dist/steps/builtin/switch.step.d.ts +200 -0
- package/dist/steps/builtin/switch.step.d.ts.map +1 -0
- package/dist/steps/builtin/switch.step.js +92 -0
- package/dist/steps/builtin/switch.step.js.map +1 -0
- package/dist/steps/builtin/transform.step.d.ts +247 -0
- package/dist/steps/builtin/transform.step.d.ts.map +1 -0
- package/dist/steps/builtin/transform.step.js +135 -0
- package/dist/steps/builtin/transform.step.js.map +1 -0
- package/dist/steps/builtin/wait.step.d.ts +921 -0
- package/dist/steps/builtin/wait.step.d.ts.map +1 -0
- package/dist/steps/builtin/wait.step.js +211 -0
- package/dist/steps/builtin/wait.step.js.map +1 -0
- package/dist/steps/step-registry.d.ts +64 -0
- package/dist/steps/step-registry.d.ts.map +1 -0
- package/dist/steps/step-registry.js +102 -0
- package/dist/steps/step-registry.js.map +1 -0
- package/dist/storage/in-memory-adapter.d.ts +25 -0
- package/dist/storage/in-memory-adapter.d.ts.map +1 -0
- package/dist/storage/in-memory-adapter.js +41 -0
- package/dist/storage/in-memory-adapter.js.map +1 -0
- package/dist/storage/types.d.ts +53 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +13 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/testing/index.d.ts +10 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +10 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-context.d.ts +13 -0
- package/dist/testing/mock-context.d.ts.map +1 -0
- package/dist/testing/mock-context.js +21 -0
- package/dist/testing/mock-context.js.map +1 -0
- package/dist/testing/mock-step-context.d.ts +47 -0
- package/dist/testing/mock-step-context.d.ts.map +1 -0
- package/dist/testing/mock-step-context.js +59 -0
- package/dist/testing/mock-step-context.js.map +1 -0
- package/dist/triggers/base-trigger.d.ts +58 -0
- package/dist/triggers/base-trigger.d.ts.map +1 -0
- package/dist/triggers/base-trigger.js +37 -0
- package/dist/triggers/base-trigger.js.map +1 -0
- package/dist/triggers/builtin/default-cron-trigger.d.ts +44 -0
- package/dist/triggers/builtin/default-cron-trigger.d.ts.map +1 -0
- package/dist/triggers/builtin/default-cron-trigger.js +31 -0
- package/dist/triggers/builtin/default-cron-trigger.js.map +1 -0
- package/dist/triggers/builtin/default-event-trigger.d.ts +32 -0
- package/dist/triggers/builtin/default-event-trigger.d.ts.map +1 -0
- package/dist/triggers/builtin/default-event-trigger.js +21 -0
- package/dist/triggers/builtin/default-event-trigger.js.map +1 -0
- package/dist/triggers/builtin/default-manual-trigger.d.ts +119 -0
- package/dist/triggers/builtin/default-manual-trigger.d.ts.map +1 -0
- package/dist/triggers/builtin/default-manual-trigger.js +64 -0
- package/dist/triggers/builtin/default-manual-trigger.js.map +1 -0
- package/dist/triggers/builtin/default-webhook-trigger.d.ts +72 -0
- package/dist/triggers/builtin/default-webhook-trigger.d.ts.map +1 -0
- package/dist/triggers/builtin/default-webhook-trigger.js +91 -0
- package/dist/triggers/builtin/default-webhook-trigger.js.map +1 -0
- package/dist/triggers/cron-trigger.d.ts +52 -0
- package/dist/triggers/cron-trigger.d.ts.map +1 -0
- package/dist/triggers/cron-trigger.js +15 -0
- package/dist/triggers/cron-trigger.js.map +1 -0
- package/dist/triggers/event-trigger.d.ts +14 -0
- package/dist/triggers/event-trigger.d.ts.map +1 -0
- package/dist/triggers/event-trigger.js +13 -0
- package/dist/triggers/event-trigger.js.map +1 -0
- package/dist/triggers/manual-trigger.d.ts +11 -0
- package/dist/triggers/manual-trigger.d.ts.map +1 -0
- package/dist/triggers/manual-trigger.js +10 -0
- package/dist/triggers/manual-trigger.js.map +1 -0
- package/dist/triggers/trigger-registry.d.ts +48 -0
- package/dist/triggers/trigger-registry.d.ts.map +1 -0
- package/dist/triggers/trigger-registry.js +81 -0
- package/dist/triggers/trigger-registry.js.map +1 -0
- package/dist/triggers/webhook-trigger.d.ts +54 -0
- package/dist/triggers/webhook-trigger.d.ts.map +1 -0
- package/dist/triggers/webhook-trigger.js +13 -0
- package/dist/triggers/webhook-trigger.js.map +1 -0
- package/dist/types/attachment.d.ts +23 -0
- package/dist/types/attachment.d.ts.map +1 -0
- package/dist/types/attachment.js +2 -0
- package/dist/types/attachment.js.map +1 -0
- package/dist/types/categories.d.ts +14 -0
- package/dist/types/categories.d.ts.map +1 -0
- package/dist/types/categories.js +10 -0
- package/dist/types/categories.js.map +1 -0
- package/dist/types/context.d.ts +61 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +2 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/known-types.d.ts +34 -0
- package/dist/types/known-types.d.ts.map +1 -0
- package/dist/types/known-types.js +49 -0
- package/dist/types/known-types.js.map +1 -0
- package/dist/types/operators.d.ts +20 -0
- package/dist/types/operators.d.ts.map +1 -0
- package/dist/types/operators.js +27 -0
- package/dist/types/operators.js.map +1 -0
- package/dist/types/pause-path.d.ts +23 -0
- package/dist/types/pause-path.d.ts.map +1 -0
- package/dist/types/pause-path.js +2 -0
- package/dist/types/pause-path.js.map +1 -0
- package/dist/types/pause-state.d.ts +100 -0
- package/dist/types/pause-state.d.ts.map +1 -0
- package/dist/types/pause-state.js +15 -0
- package/dist/types/pause-state.js.map +1 -0
- package/dist/types/resume-payload.d.ts +34 -0
- package/dist/types/resume-payload.d.ts.map +1 -0
- package/dist/types/resume-payload.js +12 -0
- package/dist/types/resume-payload.js.map +1 -0
- package/dist/types/status.d.ts +27 -0
- package/dist/types/status.d.ts.map +1 -0
- package/dist/types/status.js +41 -0
- package/dist/types/status.js.map +1 -0
- package/dist/types/step-events.d.ts +22 -0
- package/dist/types/step-events.d.ts.map +1 -0
- package/dist/types/step-events.js +8 -0
- package/dist/types/step-events.js.map +1 -0
- package/dist/types/step-types.d.ts +12 -0
- package/dist/types/step-types.d.ts.map +1 -0
- package/dist/types/step-types.js +2 -0
- package/dist/types/step-types.js.map +1 -0
- package/dist/types/trigger-types.d.ts +12 -0
- package/dist/types/trigger-types.d.ts.map +1 -0
- package/dist/types/trigger-types.js +2 -0
- package/dist/types/trigger-types.js.map +1 -0
- package/dist/types/validation.d.ts +19 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +11 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/types/workflow-config.d.ts +122 -0
- package/dist/types/workflow-config.d.ts.map +1 -0
- package/dist/types/workflow-config.js +71 -0
- package/dist/types/workflow-config.js.map +1 -0
- package/dist/util/executable-check.d.ts +42 -0
- package/dist/util/executable-check.d.ts.map +1 -0
- package/dist/util/executable-check.js +115 -0
- package/dist/util/executable-check.js.map +1 -0
- package/dist/util/schema-convert.d.ts +14 -0
- package/dist/util/schema-convert.d.ts.map +1 -0
- package/dist/util/schema-convert.js +16 -0
- package/dist/util/schema-convert.js.map +1 -0
- package/dist/util/variable-ref.d.ts +52 -0
- package/dist/util/variable-ref.d.ts.map +1 -0
- package/dist/util/variable-ref.js +89 -0
- package/dist/util/variable-ref.js.map +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe service registry.
|
|
3
|
+
*
|
|
4
|
+
* TServiceMap defines the contract between the host and the engine:
|
|
5
|
+
*
|
|
6
|
+
* ```typescript
|
|
7
|
+
* interface MyServices {
|
|
8
|
+
* conversationService: ConversationService;
|
|
9
|
+
* db: Database;
|
|
10
|
+
* }
|
|
11
|
+
*
|
|
12
|
+
* const reg = new ServiceRegistry<MyServices>();
|
|
13
|
+
* reg.register('conversationService', myConvService); // type-checked
|
|
14
|
+
* reg.get('conversationService'); // returns ConversationService
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* The default `Record<string, unknown>` allows untyped usage for generic engine
|
|
18
|
+
* code that doesn't need to know about specific services.
|
|
19
|
+
*/
|
|
20
|
+
export declare class ServiceRegistry<TServiceMap extends Record<string, unknown> = Record<string, unknown>> {
|
|
21
|
+
private readonly providers;
|
|
22
|
+
/**
|
|
23
|
+
* Register a service provider. Name and type are validated against TServiceMap
|
|
24
|
+
* at compile time.
|
|
25
|
+
*/
|
|
26
|
+
register<K extends keyof TServiceMap & string>(name: K, provider: TServiceMap[K]): void;
|
|
27
|
+
/**
|
|
28
|
+
* Replace an existing service. Useful for testing or hot-reload scenarios.
|
|
29
|
+
* Throws if the service was never registered — use register() first.
|
|
30
|
+
*/
|
|
31
|
+
replace<K extends keyof TServiceMap & string>(name: K, provider: TServiceMap[K]): void;
|
|
32
|
+
/**
|
|
33
|
+
* Retrieve a service by name. Return type is inferred from TServiceMap.
|
|
34
|
+
* Throws if the service is not registered.
|
|
35
|
+
*/
|
|
36
|
+
get<K extends keyof TServiceMap & string>(name: K): TServiceMap[K];
|
|
37
|
+
/** Check if a service is registered. */
|
|
38
|
+
has<K extends keyof TServiceMap & string>(name: K): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Validate that all required services are registered.
|
|
41
|
+
* Call this at startup to fail fast if a step's requiredServices are missing.
|
|
42
|
+
*/
|
|
43
|
+
assertRegistered(names: readonly string[]): void;
|
|
44
|
+
/** Number of registered services. */
|
|
45
|
+
get size(): number;
|
|
46
|
+
/** All registered service names. */
|
|
47
|
+
keys(): IterableIterator<string>;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=service-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-registry.d.ts","sourceRoot":"","sources":["../../src/engine/service-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,eAAe,CAC1B,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAErE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IAExD;;;OAGG;IACH,QAAQ,CAAC,CAAC,SAAS,MAAM,WAAW,GAAG,MAAM,EAC3C,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GACvB,IAAI;IASP;;;OAGG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,WAAW,GAAG,MAAM,EAC1C,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GACvB,IAAI;IASP;;;OAGG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,WAAW,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAUlE,wCAAwC;IACxC,GAAG,CAAC,CAAC,SAAS,MAAM,WAAW,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO;IAI3D;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAOhD,qCAAqC;IACrC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,oCAAoC;IACpC,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;CAGjC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe service registry.
|
|
3
|
+
*
|
|
4
|
+
* TServiceMap defines the contract between the host and the engine:
|
|
5
|
+
*
|
|
6
|
+
* ```typescript
|
|
7
|
+
* interface MyServices {
|
|
8
|
+
* conversationService: ConversationService;
|
|
9
|
+
* db: Database;
|
|
10
|
+
* }
|
|
11
|
+
*
|
|
12
|
+
* const reg = new ServiceRegistry<MyServices>();
|
|
13
|
+
* reg.register('conversationService', myConvService); // type-checked
|
|
14
|
+
* reg.get('conversationService'); // returns ConversationService
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* The default `Record<string, unknown>` allows untyped usage for generic engine
|
|
18
|
+
* code that doesn't need to know about specific services.
|
|
19
|
+
*/
|
|
20
|
+
export class ServiceRegistry {
|
|
21
|
+
providers = new Map();
|
|
22
|
+
/**
|
|
23
|
+
* Register a service provider. Name and type are validated against TServiceMap
|
|
24
|
+
* at compile time.
|
|
25
|
+
*/
|
|
26
|
+
register(name, provider) {
|
|
27
|
+
if (this.providers.has(name)) {
|
|
28
|
+
throw new Error(`Service "${name}" is already registered. Call replace() to overwrite.`);
|
|
29
|
+
}
|
|
30
|
+
this.providers.set(name, provider);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Replace an existing service. Useful for testing or hot-reload scenarios.
|
|
34
|
+
* Throws if the service was never registered — use register() first.
|
|
35
|
+
*/
|
|
36
|
+
replace(name, provider) {
|
|
37
|
+
if (!this.providers.has(name)) {
|
|
38
|
+
throw new Error(`Service "${name}" is not registered. Call register() first.`);
|
|
39
|
+
}
|
|
40
|
+
this.providers.set(name, provider);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Retrieve a service by name. Return type is inferred from TServiceMap.
|
|
44
|
+
* Throws if the service is not registered.
|
|
45
|
+
*/
|
|
46
|
+
get(name) {
|
|
47
|
+
const provider = this.providers.get(name);
|
|
48
|
+
if (provider === undefined) {
|
|
49
|
+
throw new Error(`Service "${name}" is not registered. Available: [${[...this.providers.keys()].join(', ')}]`);
|
|
50
|
+
}
|
|
51
|
+
return provider;
|
|
52
|
+
}
|
|
53
|
+
/** Check if a service is registered. */
|
|
54
|
+
has(name) {
|
|
55
|
+
return this.providers.has(name);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Validate that all required services are registered.
|
|
59
|
+
* Call this at startup to fail fast if a step's requiredServices are missing.
|
|
60
|
+
*/
|
|
61
|
+
assertRegistered(names) {
|
|
62
|
+
const missing = names.filter((n) => !this.providers.has(n));
|
|
63
|
+
if (missing.length > 0) {
|
|
64
|
+
throw new Error(`Missing required services: ${missing.join(', ')}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** Number of registered services. */
|
|
68
|
+
get size() {
|
|
69
|
+
return this.providers.size;
|
|
70
|
+
}
|
|
71
|
+
/** All registered service names. */
|
|
72
|
+
keys() {
|
|
73
|
+
return this.providers.keys();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=service-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-registry.js","sourceRoot":"","sources":["../../src/engine/service-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,eAAe;IAGT,SAAS,GAAG,IAAI,GAAG,EAAmB,CAAC;IAExD;;;OAGG;IACH,QAAQ,CACN,IAAO,EACP,QAAwB;QAExB,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,uDAAuD,CACxE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,OAAO,CACL,IAAO,EACP,QAAwB;QAExB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,6CAA6C,CAC9D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,GAAG,CAAuC,IAAO;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,oCAAoC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC7F,CAAC;QACJ,CAAC;QACD,OAAO,QAA0B,CAAC;IACpC,CAAC;IAED,wCAAwC;IACxC,GAAG,CAAuC,IAAO;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,KAAwB;QACvC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,oCAAoC;IACpC,IAAI;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { WorkflowContext } from '../types/context.js';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve a dotted path against a WorkflowContext.
|
|
5
|
+
*
|
|
6
|
+
* - `trigger.x.y` → context.trigger.x.y
|
|
7
|
+
* - `workflow.id` → context.workflow.id
|
|
8
|
+
* - `steps.stepId.output.field` → context.steps.stepId.output.field
|
|
9
|
+
* - `someStepId.output.field` → context.steps.someStepId.output.field (shorthand)
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolvePath(context: WorkflowContext, path: string): unknown;
|
|
12
|
+
/**
|
|
13
|
+
* Recursively resolve `{{...}}` variable references in a config value.
|
|
14
|
+
*
|
|
15
|
+
* - **Pure ref** (`"{{trigger.x}}"`) → preserves the resolved type (number, object, etc.)
|
|
16
|
+
* - **Template** (`"Hi {{trigger.name}}!"`) → interpolated string
|
|
17
|
+
* - **Nested objects/arrays** → recursed
|
|
18
|
+
* - **Non-string primitives** → returned as-is
|
|
19
|
+
*/
|
|
20
|
+
export declare class VariableResolver {
|
|
21
|
+
resolve(value: unknown, context: WorkflowContext): unknown;
|
|
22
|
+
resolveString(value: string, context: WorkflowContext): unknown;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Strip null values for keys that are optional (accept undefined) but don't accept null.
|
|
26
|
+
* This handles the case where a variable ref resolves to null for an optional field.
|
|
27
|
+
*/
|
|
28
|
+
export declare function stripNullForOptionalKeys(resolved: Record<string, unknown>, schema: z.ZodTypeAny): Record<string, unknown>;
|
|
29
|
+
//# sourceMappingURL=variable-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variable-resolver.d.ts","sourceRoot":"","sources":["../../src/engine/variable-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAS3D;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,MAAM,GACX,OAAO,CA4BT;AAcD;;;;;;;GAOG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO;IAiB1D,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO;CAsBhE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,EAAE,CAAC,CAAC,UAAU,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAazB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { tokenize, isPureRef, extractRefPath } from '../util/variable-ref.js';
|
|
3
|
+
const FORBIDDEN_KEYS = new Set([
|
|
4
|
+
'__proto__',
|
|
5
|
+
'constructor',
|
|
6
|
+
'prototype',
|
|
7
|
+
]);
|
|
8
|
+
/**
|
|
9
|
+
* Resolve a dotted path against a WorkflowContext.
|
|
10
|
+
*
|
|
11
|
+
* - `trigger.x.y` → context.trigger.x.y
|
|
12
|
+
* - `workflow.id` → context.workflow.id
|
|
13
|
+
* - `steps.stepId.output.field` → context.steps.stepId.output.field
|
|
14
|
+
* - `someStepId.output.field` → context.steps.someStepId.output.field (shorthand)
|
|
15
|
+
*/
|
|
16
|
+
export function resolvePath(context, path) {
|
|
17
|
+
const segments = path.split('.');
|
|
18
|
+
if (segments.length === 0)
|
|
19
|
+
return undefined;
|
|
20
|
+
if (segments.some((s) => FORBIDDEN_KEYS.has(s)))
|
|
21
|
+
return undefined;
|
|
22
|
+
const head = segments[0];
|
|
23
|
+
if (head === undefined)
|
|
24
|
+
return undefined;
|
|
25
|
+
let current;
|
|
26
|
+
let rest;
|
|
27
|
+
if (head === 'trigger' || head === 'workflow' || head === 'steps') {
|
|
28
|
+
current = context[head];
|
|
29
|
+
rest = segments.slice(1);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// Shorthand: bare step id → context.steps[id]
|
|
33
|
+
current = context.steps[head];
|
|
34
|
+
rest = segments.slice(1);
|
|
35
|
+
}
|
|
36
|
+
for (const segment of rest) {
|
|
37
|
+
if (current === null || current === undefined)
|
|
38
|
+
return undefined;
|
|
39
|
+
if (typeof current !== 'object')
|
|
40
|
+
return undefined;
|
|
41
|
+
if (!Object.prototype.hasOwnProperty.call(current, segment))
|
|
42
|
+
return undefined;
|
|
43
|
+
current = current[segment];
|
|
44
|
+
}
|
|
45
|
+
return current;
|
|
46
|
+
}
|
|
47
|
+
function stringifyForTemplate(value) {
|
|
48
|
+
if (value === undefined || value === null)
|
|
49
|
+
return '';
|
|
50
|
+
if (typeof value === 'object' && !(value instanceof Date)) {
|
|
51
|
+
try {
|
|
52
|
+
return JSON.stringify(value);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return String(value);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return typeof value === 'string' ? value : String(value);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Recursively resolve `{{...}}` variable references in a config value.
|
|
62
|
+
*
|
|
63
|
+
* - **Pure ref** (`"{{trigger.x}}"`) → preserves the resolved type (number, object, etc.)
|
|
64
|
+
* - **Template** (`"Hi {{trigger.name}}!"`) → interpolated string
|
|
65
|
+
* - **Nested objects/arrays** → recursed
|
|
66
|
+
* - **Non-string primitives** → returned as-is
|
|
67
|
+
*/
|
|
68
|
+
export class VariableResolver {
|
|
69
|
+
resolve(value, context) {
|
|
70
|
+
if (typeof value === 'string') {
|
|
71
|
+
return this.resolveString(value, context);
|
|
72
|
+
}
|
|
73
|
+
if (Array.isArray(value)) {
|
|
74
|
+
return value.map((item) => this.resolve(item, context));
|
|
75
|
+
}
|
|
76
|
+
if (value !== null && typeof value === 'object') {
|
|
77
|
+
const resolved = {};
|
|
78
|
+
for (const [k, v] of Object.entries(value)) {
|
|
79
|
+
resolved[k] = this.resolve(v, context);
|
|
80
|
+
}
|
|
81
|
+
return resolved;
|
|
82
|
+
}
|
|
83
|
+
return value;
|
|
84
|
+
}
|
|
85
|
+
resolveString(value, context) {
|
|
86
|
+
if (!value.includes('{{')) {
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
if (isPureRef(value)) {
|
|
90
|
+
const path = extractRefPath(value);
|
|
91
|
+
if (path === null)
|
|
92
|
+
return value;
|
|
93
|
+
return resolvePath(context, path);
|
|
94
|
+
}
|
|
95
|
+
const tokens = tokenize(value);
|
|
96
|
+
let result = '';
|
|
97
|
+
for (const token of tokens) {
|
|
98
|
+
if (token.kind === 'literal') {
|
|
99
|
+
result += token.text;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const resolved = resolvePath(context, token.path);
|
|
103
|
+
result += stringifyForTemplate(resolved);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Strip null values for keys that are optional (accept undefined) but don't accept null.
|
|
111
|
+
* This handles the case where a variable ref resolves to null for an optional field.
|
|
112
|
+
*/
|
|
113
|
+
export function stripNullForOptionalKeys(resolved, schema) {
|
|
114
|
+
if (!(schema instanceof z.ZodObject))
|
|
115
|
+
return resolved;
|
|
116
|
+
const shape = schema.shape;
|
|
117
|
+
const result = { ...resolved };
|
|
118
|
+
for (const key of Object.keys(result)) {
|
|
119
|
+
if (result[key] !== null)
|
|
120
|
+
continue;
|
|
121
|
+
const field = shape[key];
|
|
122
|
+
if (!field)
|
|
123
|
+
continue;
|
|
124
|
+
if (!field.safeParse(null).success && field.safeParse(undefined).success) {
|
|
125
|
+
delete result[key];
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=variable-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variable-resolver.js","sourceRoot":"","sources":["../../src/engine/variable-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { WorkflowContext } from '../types/context.js';
|
|
2
|
+
import type { ExecutionEventBus } from '../runtime/execution-event-bus.js';
|
|
3
|
+
import type { StepRegistry } from '../steps/step-registry.js';
|
|
4
|
+
import type { TriggerRegistry } from '../triggers/trigger-registry.js';
|
|
5
|
+
import type { ServiceRegistry } from './service-registry.js';
|
|
6
|
+
import { VariableResolver } from './variable-resolver.js';
|
|
7
|
+
import type { PersistenceAdapter } from '../persistence/types.js';
|
|
8
|
+
export interface ExecutorOptions {
|
|
9
|
+
variableResolver?: VariableResolver;
|
|
10
|
+
/** Event bus for real-time SSE streaming. If provided, the executor emits events at step state transitions. */
|
|
11
|
+
eventBus?: ExecutionEventBus;
|
|
12
|
+
/**
|
|
13
|
+
* Base URL the runtime is reachable at. Threaded into the step execution
|
|
14
|
+
* context as `ctx.runtime.baseUrl` so steps can build callback URLs
|
|
15
|
+
* (e.g. the wait step's webhook mode emits `${baseUrl}/wait/callback/<secret>`).
|
|
16
|
+
*/
|
|
17
|
+
baseUrl?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ExecutorLogger {
|
|
20
|
+
info(msg: string): void;
|
|
21
|
+
warn(msg: string): void;
|
|
22
|
+
error(msg: string): void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Core runtime engine for executing workflows.
|
|
26
|
+
*
|
|
27
|
+
* Orchestrates: step execution, variable resolution, pause/resume
|
|
28
|
+
* (including inside branches), error handling (onError: continue),
|
|
29
|
+
* retry, timeout, credential resolution, and state persistence.
|
|
30
|
+
*
|
|
31
|
+
* Host provides: PersistenceAdapter, StepRegistry, TriggerRegistry,
|
|
32
|
+
* ServiceRegistry, and an optional logger.
|
|
33
|
+
*/
|
|
34
|
+
export declare class WorkflowExecutor<TServices extends Record<string, unknown> = Record<string, unknown>> {
|
|
35
|
+
private readonly persistence;
|
|
36
|
+
private readonly stepRegistry;
|
|
37
|
+
private readonly triggerRegistry;
|
|
38
|
+
private readonly services;
|
|
39
|
+
private readonly resolver;
|
|
40
|
+
private readonly log;
|
|
41
|
+
private readonly eventBus?;
|
|
42
|
+
private readonly baseUrl;
|
|
43
|
+
constructor(persistence: PersistenceAdapter, stepRegistry: StepRegistry, triggerRegistry: TriggerRegistry, services: ServiceRegistry<TServices>, options?: ExecutorOptions & {
|
|
44
|
+
logger?: ExecutorLogger;
|
|
45
|
+
});
|
|
46
|
+
/** Emit an execution stream event (no-op if no eventBus). */
|
|
47
|
+
private emitEvent;
|
|
48
|
+
/**
|
|
49
|
+
* Run or resume an execution by ID.
|
|
50
|
+
*
|
|
51
|
+
* Loads the execution from persistence, determines if it's a fresh start
|
|
52
|
+
* or a resume, then walks through the steps.
|
|
53
|
+
*/
|
|
54
|
+
runExecution(executionId: string): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Start a fresh execution for a workflow.
|
|
57
|
+
*
|
|
58
|
+
* Creates the execution record + initial state, then runs it.
|
|
59
|
+
* Returns the execution ID.
|
|
60
|
+
*/
|
|
61
|
+
startExecution(workflowId: string, context: WorkflowContext): Promise<string>;
|
|
62
|
+
/**
|
|
63
|
+
* Create a new execution that reruns from `fromStepId`, using the source
|
|
64
|
+
* execution's cached outputs for all prior steps as the resolved context.
|
|
65
|
+
*
|
|
66
|
+
* The new execution starts at `fromStepIndex` (not 0). Steps before that
|
|
67
|
+
* are pre-populated in `context.steps` so variable resolution finds them.
|
|
68
|
+
* The step at `fromStepIndex` receives the source row's data as
|
|
69
|
+
* `ctx.priorState` (when `inheritStepState` is true, the default), enabling
|
|
70
|
+
* agents and other stateful steps to continue from where they left off.
|
|
71
|
+
*
|
|
72
|
+
* Returns the new execution ID. Caller is responsible for enqueueing it.
|
|
73
|
+
*/
|
|
74
|
+
rerunFromStep(sourceExecutionId: string, fromStepId: string, options?: {
|
|
75
|
+
configOverrides?: Record<string, unknown>;
|
|
76
|
+
inheritStepState?: boolean;
|
|
77
|
+
}): Promise<string>;
|
|
78
|
+
private runSteps;
|
|
79
|
+
private walkSteps;
|
|
80
|
+
private executeStepWithRetry;
|
|
81
|
+
private executeStep;
|
|
82
|
+
/**
|
|
83
|
+
* Walk steps inside a control-flow branch. Supports nested pause.
|
|
84
|
+
*
|
|
85
|
+
* Each sub-step is persisted as its own row (keyed by config `id`) and
|
|
86
|
+
* emits SSE events, mirroring the top-level `walkSteps` behavior.
|
|
87
|
+
*
|
|
88
|
+
* When a step pauses inside a branch, the PauseStep error is enriched
|
|
89
|
+
* with branch path information and re-thrown so the top-level walkSteps
|
|
90
|
+
* can persist the full PausePath.
|
|
91
|
+
*/
|
|
92
|
+
private walkBranchSteps;
|
|
93
|
+
private invokeResume;
|
|
94
|
+
private buildStepContext;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=workflow-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-executor.d.ts","sourceRoot":"","sources":["../../src/engine/workflow-executor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAU3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAI3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAQvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAA4B,MAAM,wBAAwB,CAAC;AAEpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAmBlE,MAAM,WAAW,eAAe;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,+GAA+G;IAC/G,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAUD;;;;;;;;;GASG;AACH,qBAAa,gBAAgB,CAC3B,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQjE,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAT3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAgC;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAGd,WAAW,EAAE,kBAAkB,EAC/B,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,eAAe,CAAC,SAAS,CAAC,EACrD,OAAO,CAAC,EAAE,eAAe,GAAG;QAAE,MAAM,CAAC,EAAE,cAAc,CAAA;KAAE;IAQzD,6DAA6D;IAC7D,OAAO,CAAC,SAAS;IAMjB;;;;;OAKG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmNtD;;;;;OAKG;IACG,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC;IAUlB;;;;;;;;;;;OAWG;IACG,aAAa,CACjB,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QACR,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,GACA,OAAO,CAAC,MAAM,CAAC;YAuGJ,QAAQ;YAgDR,SAAS;YAwMT,oBAAoB;YA+BpB,WAAW;IAuHzB;;;;;;;;;OASG;YACW,eAAe;YA8Hf,YAAY;YA8BZ,gBAAgB;CAgF/B"}
|