@codemation/core 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.
- package/CHANGELOG.md +22 -0
- package/README.md +2 -0
- package/dist/{EngineRuntimeRegistration.types-0sgV2XL2.d.ts → EngineRuntimeRegistration.types-Bjeo7Sfq.d.ts} +2 -2
- package/dist/{EngineWorkflowRunnerService-Dx7bJsJR.d.cts → EngineWorkflowRunnerService-Dd4yD31l.d.cts} +2 -2
- package/dist/{InMemoryRunDataFactory-qIYQEar7.d.cts → InMemoryRunDataFactory-OUzDmAHt.d.cts} +2 -2
- package/dist/{RunIntentService-BCvGdOSY.d.ts → RunIntentService-BAKikN8h.d.ts} +80 -12
- package/dist/{RunIntentService-CV8izV8t.d.cts → RunIntentService-Bkg4oYrM.d.cts} +74 -5
- package/dist/bootstrap/index.cjs +31 -31
- package/dist/bootstrap/index.d.cts +5 -3
- package/dist/bootstrap/index.d.ts +3 -3
- package/dist/bootstrap/index.js +2 -2
- package/dist/bootstrap-BD6CobHl.js +215 -0
- package/dist/bootstrap-BD6CobHl.js.map +1 -0
- package/dist/bootstrap-DwS5S7s9.cjs +240 -0
- package/dist/bootstrap-DwS5S7s9.cjs.map +1 -0
- package/dist/{index-CueSzHsf.d.ts → index-uCm9l0nw.d.ts} +64 -15
- package/dist/index.cjs +114 -32
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +68 -21
- package/dist/index.d.ts +3 -3
- package/dist/index.js +83 -2
- package/dist/index.js.map +1 -1
- package/dist/{RunIntentService-BFA48UpH.js → runtime-Cy-3FTI_.js} +1224 -94
- package/dist/runtime-Cy-3FTI_.js.map +1 -0
- package/dist/{RunIntentService-DcxXf_AM.cjs → runtime-ZJUpWmPH.cjs} +1251 -132
- package/dist/runtime-ZJUpWmPH.cjs.map +1 -0
- package/dist/testing.cjs +74 -29
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +55 -3
- package/dist/testing.d.ts +55 -3
- package/dist/testing.js +46 -3
- package/dist/testing.js.map +1 -1
- package/dist/workflowActivationPolicy-B8HzTk3o.js.map +1 -1
- package/dist/workflowActivationPolicy-BzyzXLa_.cjs.map +1 -1
- package/package.json +1 -1
- package/src/ai/AgentMessageConfigNormalizerFactory.ts +43 -0
- package/src/ai/AgentToolFactory.ts +2 -2
- package/src/ai/AiHost.ts +10 -9
- package/src/ai/NodeBackedToolConfig.ts +1 -1
- package/src/authoring/defineNode.types.ts +153 -10
- package/src/authoring/index.ts +3 -1
- package/src/contracts/runtimeTypes.ts +26 -0
- package/src/contracts/workflowTypes.ts +67 -5
- package/src/execution/ActivationEnqueueService.ts +8 -5
- package/src/execution/NodeActivationRequestInputPreparer.ts +89 -0
- package/src/execution/NodeExecutor.ts +38 -1
- package/src/execution/NodeInputContractError.ts +13 -0
- package/src/execution/index.ts +2 -0
- package/src/orchestration/RunContinuationService.ts +181 -50
- package/src/planning/RunQueuePlanner.ts +12 -1
- package/src/runtime/EngineFactory.ts +3 -0
- package/src/testing/ItemHarnessNode.ts +27 -0
- package/src/testing/ItemHarnessNodeConfig.ts +43 -0
- package/src/testing/RegistrarEngineTestKitFactory.ts +2 -0
- package/src/testing.ts +2 -0
- package/src/workflow/dsl/ChainCursorResolver.ts +1 -1
- package/src/workflow/dsl/workflowBuilderTypes.ts +8 -5
- package/dist/RunIntentService-BFA48UpH.js.map +0 -1
- package/dist/RunIntentService-DcxXf_AM.cjs.map +0 -1
- package/dist/bootstrap-D67Sf2BF.js +0 -1136
- package/dist/bootstrap-D67Sf2BF.js.map +0 -1
- package/dist/bootstrap-DoQHAEQJ.cjs +0 -1203
- package/dist/bootstrap-DoQHAEQJ.cjs.map +0 -1
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { A as NodeExecutor, P as DefaultAsyncSleeper, _ as EngineExecutionLimitsPolicy, c as EngineFactory, g as ENGINE_EXECUTION_LIMITS_DEFAULTS, i as RunIntentService, j as InProcessRetryRunnerFactory, k as NodeExecutorFactory, l as Engine, o as EngineWorkflowRunnerServiceFactory, ot as CoreTokens, r as RunIntentServiceFactory, t as WorkflowRepositoryWebhookTriggerMatcherFactory, tt as instanceCachingFactory, u as RunFinishedAtFactory, w as NodeInstanceFactoryFactory, y as InlineDrivingScheduler } from "./runtime-Cy-3FTI_.js";
|
|
2
|
+
|
|
3
|
+
//#region src/policies/executionLimits/EngineExecutionLimitsPolicyFactory.ts
|
|
4
|
+
/**
|
|
5
|
+
* Builds {@link EngineExecutionLimitsPolicy} by merging {@link ENGINE_EXECUTION_LIMITS_DEFAULTS} with optional `overrides` (e.g. host `runtime.engineExecutionLimits`).
|
|
6
|
+
*/
|
|
7
|
+
var EngineExecutionLimitsPolicyFactory = class {
|
|
8
|
+
create(overrides) {
|
|
9
|
+
return new EngineExecutionLimitsPolicy({
|
|
10
|
+
...ENGINE_EXECUTION_LIMITS_DEFAULTS,
|
|
11
|
+
...overrides
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region src/runStorage/RunSummaryMapper.ts
|
|
18
|
+
/** Maps persisted run state to API run summaries for listings. */
|
|
19
|
+
var RunSummaryMapper = class {
|
|
20
|
+
static fromPersistedState(state) {
|
|
21
|
+
return {
|
|
22
|
+
runId: state.runId,
|
|
23
|
+
workflowId: state.workflowId,
|
|
24
|
+
startedAt: state.startedAt,
|
|
25
|
+
status: state.status,
|
|
26
|
+
finishedAt: RunFinishedAtFactory.resolveIso(state),
|
|
27
|
+
parent: state.parent,
|
|
28
|
+
executionOptions: state.executionOptions
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
//#region src/runStorage/InMemoryWorkflowExecutionRepository.ts
|
|
35
|
+
var InMemoryWorkflowExecutionRepository = class {
|
|
36
|
+
runs = /* @__PURE__ */ new Map();
|
|
37
|
+
async createRun(args) {
|
|
38
|
+
this.runs.set(args.runId, {
|
|
39
|
+
runId: args.runId,
|
|
40
|
+
workflowId: args.workflowId,
|
|
41
|
+
startedAt: args.startedAt,
|
|
42
|
+
revision: 0,
|
|
43
|
+
parent: args.parent,
|
|
44
|
+
executionOptions: args.executionOptions,
|
|
45
|
+
control: args.control,
|
|
46
|
+
workflowSnapshot: args.workflowSnapshot,
|
|
47
|
+
mutableState: args.mutableState,
|
|
48
|
+
policySnapshot: args.policySnapshot,
|
|
49
|
+
engineCounters: args.engineCounters,
|
|
50
|
+
status: "running",
|
|
51
|
+
queue: [],
|
|
52
|
+
outputsByNode: {},
|
|
53
|
+
nodeSnapshotsByNodeId: {},
|
|
54
|
+
connectionInvocations: []
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
async load(runId) {
|
|
58
|
+
return this.runs.get(runId);
|
|
59
|
+
}
|
|
60
|
+
async loadSchedulingState(runId) {
|
|
61
|
+
const state = this.runs.get(runId);
|
|
62
|
+
if (!state) return;
|
|
63
|
+
return {
|
|
64
|
+
pending: state.pending ? { ...state.pending } : void 0,
|
|
65
|
+
queue: state.queue.map((entry) => ({ ...entry }))
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
async save(state) {
|
|
69
|
+
this.runs.set(state.runId, {
|
|
70
|
+
...state,
|
|
71
|
+
revision: (state.revision ?? 0) + 1
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async deleteRun(runId) {
|
|
75
|
+
this.runs.delete(runId);
|
|
76
|
+
}
|
|
77
|
+
async listRuns(args) {
|
|
78
|
+
const limit = args?.limit ?? 50;
|
|
79
|
+
return [...this.runs.values()].filter((s) => args?.workflowId ? s.workflowId === args.workflowId : true).sort((a, b) => b.startedAt.localeCompare(a.startedAt)).slice(0, limit).map((s) => RunSummaryMapper.fromPersistedState(s));
|
|
80
|
+
}
|
|
81
|
+
async listRunsOlderThan(args) {
|
|
82
|
+
const limit = args.limit ?? 100;
|
|
83
|
+
const out = [];
|
|
84
|
+
for (const s of this.runs.values()) {
|
|
85
|
+
if (s.status !== "completed" && s.status !== "failed") continue;
|
|
86
|
+
const finishedAt = RunFinishedAtFactory.resolveIso(s);
|
|
87
|
+
if (!finishedAt || finishedAt >= args.beforeIso) continue;
|
|
88
|
+
out.push({
|
|
89
|
+
runId: s.runId,
|
|
90
|
+
workflowId: s.workflowId,
|
|
91
|
+
startedAt: s.startedAt,
|
|
92
|
+
finishedAt
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
out.sort((a, b) => a.finishedAt.localeCompare(b.finishedAt));
|
|
96
|
+
return out.slice(0, limit);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
//#endregion
|
|
101
|
+
//#region src/scheduler/InlineDrivingSchedulerFactory.ts
|
|
102
|
+
var InlineDrivingSchedulerFactory = class {
|
|
103
|
+
create(nodeExecutor) {
|
|
104
|
+
return new InlineDrivingScheduler(nodeExecutor);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
//#endregion
|
|
109
|
+
//#region src/bootstrap/runtime/EngineRuntimeRegistrar.ts
|
|
110
|
+
/**
|
|
111
|
+
* Container-first entry: call on a host/test container **after** workflow, run, node, and credential
|
|
112
|
+
* ports are registered. The registrar owns the default inline scheduler, engine binding,
|
|
113
|
+
* and intent-surface wiring so hosts only override the seams they actually replace.
|
|
114
|
+
*/
|
|
115
|
+
var EngineRuntimeRegistrar = class {
|
|
116
|
+
register(container, options) {
|
|
117
|
+
this.registerSupportFactories(container);
|
|
118
|
+
this.registerExecutionLimitsPolicy(container, options);
|
|
119
|
+
this.ensureWorkflowNodeInstanceFactory(container);
|
|
120
|
+
this.ensureNodeExecutor(container);
|
|
121
|
+
this.registerDefaultActivationScheduler(container);
|
|
122
|
+
this.registerEngine(container, options);
|
|
123
|
+
this.registerIntentServices(container);
|
|
124
|
+
}
|
|
125
|
+
registerSupportFactories(container) {
|
|
126
|
+
container.register(EngineExecutionLimitsPolicyFactory, { useClass: EngineExecutionLimitsPolicyFactory });
|
|
127
|
+
container.register(NodeInstanceFactoryFactory, { useClass: NodeInstanceFactoryFactory });
|
|
128
|
+
container.register(DefaultAsyncSleeper, { useClass: DefaultAsyncSleeper });
|
|
129
|
+
container.register(InProcessRetryRunnerFactory, { useClass: InProcessRetryRunnerFactory });
|
|
130
|
+
container.register(NodeExecutorFactory, { useClass: NodeExecutorFactory });
|
|
131
|
+
container.register(InlineDrivingSchedulerFactory, { useClass: InlineDrivingSchedulerFactory });
|
|
132
|
+
container.register(RunIntentServiceFactory, { useClass: RunIntentServiceFactory });
|
|
133
|
+
container.register(EngineWorkflowRunnerServiceFactory, { useClass: EngineWorkflowRunnerServiceFactory });
|
|
134
|
+
container.register(WorkflowRepositoryWebhookTriggerMatcherFactory, { useClass: WorkflowRepositoryWebhookTriggerMatcherFactory });
|
|
135
|
+
}
|
|
136
|
+
registerExecutionLimitsPolicy(container, options) {
|
|
137
|
+
if (container.isRegistered(CoreTokens.EngineExecutionLimitsPolicy, true)) return;
|
|
138
|
+
container.register(CoreTokens.EngineExecutionLimitsPolicy, { useFactory: instanceCachingFactory((dependencyContainer) => {
|
|
139
|
+
const merged = options?.resolveEngineExecutionLimits?.() ?? options?.engineExecutionLimits;
|
|
140
|
+
return dependencyContainer.resolve(EngineExecutionLimitsPolicyFactory).create(merged);
|
|
141
|
+
}) });
|
|
142
|
+
}
|
|
143
|
+
ensureWorkflowNodeInstanceFactory(container) {
|
|
144
|
+
if (container.isRegistered(CoreTokens.WorkflowNodeInstanceFactory, true)) return;
|
|
145
|
+
container.register(CoreTokens.WorkflowNodeInstanceFactory, { useFactory: instanceCachingFactory((dependencyContainer) => {
|
|
146
|
+
return dependencyContainer.resolve(NodeInstanceFactoryFactory).create(dependencyContainer.resolve(CoreTokens.NodeResolver));
|
|
147
|
+
}) });
|
|
148
|
+
}
|
|
149
|
+
ensureNodeExecutor(container) {
|
|
150
|
+
if (container.isRegistered(NodeExecutor, true)) return;
|
|
151
|
+
container.register(NodeExecutor, { useFactory: instanceCachingFactory((dependencyContainer) => {
|
|
152
|
+
const retryRunner = dependencyContainer.resolve(InProcessRetryRunnerFactory).create(dependencyContainer.resolve(DefaultAsyncSleeper));
|
|
153
|
+
return dependencyContainer.resolve(NodeExecutorFactory).create(dependencyContainer.resolve(CoreTokens.WorkflowNodeInstanceFactory), retryRunner);
|
|
154
|
+
}) });
|
|
155
|
+
}
|
|
156
|
+
registerDefaultActivationScheduler(container) {
|
|
157
|
+
if (container.isRegistered(CoreTokens.NodeActivationScheduler, true)) return;
|
|
158
|
+
container.register(InlineDrivingScheduler, { useFactory: instanceCachingFactory((dependencyContainer) => {
|
|
159
|
+
return dependencyContainer.resolve(InlineDrivingSchedulerFactory).create(dependencyContainer.resolve(NodeExecutor));
|
|
160
|
+
}) });
|
|
161
|
+
container.register(CoreTokens.NodeActivationScheduler, { useFactory: instanceCachingFactory((dependencyContainer) => {
|
|
162
|
+
return dependencyContainer.resolve(InlineDrivingScheduler);
|
|
163
|
+
}) });
|
|
164
|
+
}
|
|
165
|
+
registerEngine(container, options) {
|
|
166
|
+
container.register(EngineFactory, { useClass: EngineFactory });
|
|
167
|
+
const matcherProvider = this.resolveMatcherProvider(options);
|
|
168
|
+
container.register(Engine, { useFactory: instanceCachingFactory((dependencyContainer) => {
|
|
169
|
+
const liveWorkflowRepository = dependencyContainer.resolve(CoreTokens.LiveWorkflowRepository);
|
|
170
|
+
const nodeResolver = dependencyContainer.resolve(CoreTokens.NodeResolver);
|
|
171
|
+
const tokenRegistryLike = dependencyContainer.resolve(CoreTokens.PersistedWorkflowTokenRegistry);
|
|
172
|
+
const workflowActivationPolicy = dependencyContainer.resolve(CoreTokens.WorkflowActivationPolicy);
|
|
173
|
+
const webhookTriggerMatcher = matcherProvider.createMatcher(dependencyContainer);
|
|
174
|
+
const workflowNodeInstanceFactory = dependencyContainer.resolve(CoreTokens.WorkflowNodeInstanceFactory);
|
|
175
|
+
const triggerRuntimeDiagnostics = options?.triggerRuntimeDiagnosticsProvider?.create(dependencyContainer);
|
|
176
|
+
return dependencyContainer.resolve(EngineFactory).create({
|
|
177
|
+
credentialSessions: dependencyContainer.resolve(CoreTokens.CredentialSessionService),
|
|
178
|
+
liveWorkflowRepository,
|
|
179
|
+
workflowRepository: dependencyContainer.resolve(CoreTokens.WorkflowRepository),
|
|
180
|
+
workflowActivationPolicy,
|
|
181
|
+
nodeResolver,
|
|
182
|
+
triggerSetupStateRepository: dependencyContainer.resolve(CoreTokens.TriggerSetupStateRepository),
|
|
183
|
+
webhookTriggerMatcher,
|
|
184
|
+
runIdFactory: dependencyContainer.resolve(CoreTokens.RunIdFactory),
|
|
185
|
+
activationIdFactory: dependencyContainer.resolve(CoreTokens.ActivationIdFactory),
|
|
186
|
+
workflowExecutionRepository: dependencyContainer.resolve(CoreTokens.WorkflowExecutionRepository),
|
|
187
|
+
activationScheduler: dependencyContainer.resolve(CoreTokens.NodeActivationScheduler),
|
|
188
|
+
runDataFactory: dependencyContainer.resolve(CoreTokens.RunDataFactory),
|
|
189
|
+
executionContextFactory: dependencyContainer.resolve(CoreTokens.ExecutionContextFactory),
|
|
190
|
+
nodeExecutor: dependencyContainer.resolve(NodeExecutor),
|
|
191
|
+
eventBus: dependencyContainer.resolve(CoreTokens.RunEventBus),
|
|
192
|
+
tokenRegistry: tokenRegistryLike,
|
|
193
|
+
workflowNodeInstanceFactory,
|
|
194
|
+
executionLimitsPolicy: dependencyContainer.resolve(CoreTokens.EngineExecutionLimitsPolicy),
|
|
195
|
+
triggerRuntimeDiagnostics
|
|
196
|
+
});
|
|
197
|
+
}) });
|
|
198
|
+
}
|
|
199
|
+
registerIntentServices(container) {
|
|
200
|
+
container.register(RunIntentService, { useFactory: instanceCachingFactory((dependencyContainer) => {
|
|
201
|
+
return dependencyContainer.resolve(RunIntentServiceFactory).create(dependencyContainer.resolve(Engine), dependencyContainer.resolve(CoreTokens.WorkflowRepository));
|
|
202
|
+
}) });
|
|
203
|
+
container.register(CoreTokens.WorkflowRunnerService, { useFactory: instanceCachingFactory((dependencyContainer) => {
|
|
204
|
+
return dependencyContainer.resolve(EngineWorkflowRunnerServiceFactory).create(dependencyContainer.resolve(Engine), dependencyContainer.resolve(CoreTokens.WorkflowRepository));
|
|
205
|
+
}) });
|
|
206
|
+
}
|
|
207
|
+
resolveMatcherProvider(options) {
|
|
208
|
+
if (options?.webhookTriggerMatcherProvider) return options.webhookTriggerMatcherProvider;
|
|
209
|
+
return { createMatcher: (container) => container.resolve(WorkflowRepositoryWebhookTriggerMatcherFactory).create(container.resolve(CoreTokens.WorkflowRepository), container.resolve(CoreTokens.WorkflowActivationPolicy), options?.webhookTriggerRoutingDiagnostics) };
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
//#endregion
|
|
214
|
+
export { EngineExecutionLimitsPolicyFactory as i, InMemoryWorkflowExecutionRepository as n, RunSummaryMapper as r, EngineRuntimeRegistrar as t };
|
|
215
|
+
//# sourceMappingURL=bootstrap-BD6CobHl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-BD6CobHl.js","names":["out: RunPruneCandidate[]"],"sources":["../src/policies/executionLimits/EngineExecutionLimitsPolicyFactory.ts","../src/runStorage/RunSummaryMapper.ts","../src/runStorage/InMemoryWorkflowExecutionRepository.ts","../src/scheduler/InlineDrivingSchedulerFactory.ts","../src/bootstrap/runtime/EngineRuntimeRegistrar.ts"],"sourcesContent":["import {\n EngineExecutionLimitsPolicy,\n ENGINE_EXECUTION_LIMITS_DEFAULTS,\n type EngineExecutionLimitsPolicyConfig,\n} from \"./EngineExecutionLimitsPolicy\";\n\n/**\n * Builds {@link EngineExecutionLimitsPolicy} by merging {@link ENGINE_EXECUTION_LIMITS_DEFAULTS} with optional `overrides` (e.g. host `runtime.engineExecutionLimits`).\n */\nexport class EngineExecutionLimitsPolicyFactory {\n create(overrides?: Partial<EngineExecutionLimitsPolicyConfig>): EngineExecutionLimitsPolicy {\n return new EngineExecutionLimitsPolicy({ ...ENGINE_EXECUTION_LIMITS_DEFAULTS, ...overrides });\n }\n}\n","import { RunFinishedAtFactory } from \"../contracts/runFinishedAtFactory\";\nimport type { PersistedRunState, RunSummary } from \"../types\";\n\n/** Maps persisted run state to API run summaries for listings. */\nexport class RunSummaryMapper {\n static fromPersistedState(state: PersistedRunState): RunSummary {\n return {\n runId: state.runId,\n workflowId: state.workflowId,\n startedAt: state.startedAt,\n status: state.status,\n finishedAt: RunFinishedAtFactory.resolveIso(state),\n parent: state.parent,\n executionOptions: state.executionOptions,\n };\n }\n}\n","import type {\n EngineRunCounters,\n NodeId,\n NodeOutputs,\n ParentExecutionRef,\n PersistedRunSchedulingState,\n PersistedRunState,\n RunId,\n RunSummary,\n WorkflowExecutionListingRepository,\n WorkflowExecutionPruneRepository,\n WorkflowExecutionRepository,\n RunPruneCandidate,\n WorkflowId,\n} from \"../types\";\nimport { RunFinishedAtFactory } from \"../contracts/runFinishedAtFactory\";\nimport { RunSummaryMapper } from \"./RunSummaryMapper\";\n\nexport class InMemoryWorkflowExecutionRepository\n implements WorkflowExecutionRepository, WorkflowExecutionListingRepository, WorkflowExecutionPruneRepository\n{\n private readonly runs = new Map<RunId, PersistedRunState>();\n\n async createRun(args: {\n runId: RunId;\n workflowId: WorkflowId;\n startedAt: string;\n parent?: ParentExecutionRef;\n executionOptions?: PersistedRunState[\"executionOptions\"];\n control?: PersistedRunState[\"control\"];\n workflowSnapshot?: PersistedRunState[\"workflowSnapshot\"];\n mutableState?: PersistedRunState[\"mutableState\"];\n policySnapshot?: PersistedRunState[\"policySnapshot\"];\n engineCounters?: EngineRunCounters;\n }): Promise<void> {\n this.runs.set(args.runId, {\n runId: args.runId,\n workflowId: args.workflowId,\n startedAt: args.startedAt,\n revision: 0,\n parent: args.parent,\n executionOptions: args.executionOptions,\n control: args.control,\n workflowSnapshot: args.workflowSnapshot,\n mutableState: args.mutableState,\n policySnapshot: args.policySnapshot,\n engineCounters: args.engineCounters,\n status: \"running\",\n queue: [],\n outputsByNode: {} as Record<NodeId, NodeOutputs>,\n nodeSnapshotsByNodeId: {},\n connectionInvocations: [],\n });\n }\n\n async load(runId: RunId): Promise<PersistedRunState | undefined> {\n return this.runs.get(runId);\n }\n\n async loadSchedulingState(runId: RunId): Promise<PersistedRunSchedulingState | undefined> {\n const state = this.runs.get(runId);\n if (!state) {\n return undefined;\n }\n return {\n pending: state.pending ? { ...state.pending } : undefined,\n queue: state.queue.map((entry) => ({ ...entry })),\n };\n }\n\n async save(state: PersistedRunState): Promise<void> {\n this.runs.set(state.runId, { ...state, revision: (state.revision ?? 0) + 1 });\n }\n\n async deleteRun(runId: RunId): Promise<void> {\n this.runs.delete(runId);\n }\n\n async listRuns(args?: Readonly<{ workflowId?: WorkflowId; limit?: number }>): Promise<ReadonlyArray<RunSummary>> {\n const limit = args?.limit ?? 50;\n const summaries = [...this.runs.values()]\n .filter((s) => (args?.workflowId ? s.workflowId === args.workflowId : true))\n .sort((a, b) => b.startedAt.localeCompare(a.startedAt))\n .slice(0, limit)\n .map((s) => RunSummaryMapper.fromPersistedState(s));\n return summaries;\n }\n\n async listRunsOlderThan(\n args: Readonly<{ beforeIso: string; limit?: number }>,\n ): Promise<ReadonlyArray<RunPruneCandidate>> {\n const limit = args.limit ?? 100;\n const out: RunPruneCandidate[] = [];\n for (const s of this.runs.values()) {\n if (s.status !== \"completed\" && s.status !== \"failed\") continue;\n const finishedAt = RunFinishedAtFactory.resolveIso(s);\n if (!finishedAt || finishedAt >= args.beforeIso) continue;\n out.push({\n runId: s.runId,\n workflowId: s.workflowId,\n startedAt: s.startedAt,\n finishedAt,\n });\n }\n out.sort((a, b) => a.finishedAt.localeCompare(b.finishedAt));\n return out.slice(0, limit);\n }\n}\n","import { NodeExecutor } from \"../execution/NodeExecutor\";\n\nimport { InlineDrivingScheduler } from \"./InlineDrivingScheduler\";\n\nexport class InlineDrivingSchedulerFactory {\n create(nodeExecutor: NodeExecutor): InlineDrivingScheduler {\n return new InlineDrivingScheduler(nodeExecutor);\n }\n}\n","import { instanceCachingFactory, type DependencyContainer } from \"../../di\";\nimport { CoreTokens } from \"../../di\";\nimport { EngineExecutionLimitsPolicyFactory } from \"../../policies/executionLimits/EngineExecutionLimitsPolicyFactory\";\nimport {\n DefaultAsyncSleeper,\n InProcessRetryRunnerFactory,\n NodeExecutor,\n NodeExecutorFactory,\n NodeInstanceFactoryFactory,\n} from \"../../execution\";\nimport {\n EngineFactory,\n EngineWorkflowRunnerServiceFactory,\n RunIntentServiceFactory,\n RunIntentService,\n WorkflowRepositoryWebhookTriggerMatcherFactory,\n} from \"../../runtime\";\nimport { InlineDrivingScheduler } from \"../../scheduler/InlineDrivingScheduler\";\nimport { InlineDrivingSchedulerFactory } from \"../../scheduler/InlineDrivingSchedulerFactory\";\nimport { Engine } from \"../../orchestration/Engine\";\nimport type { EngineRuntimeRegistrationOptions } from \"./EngineRuntimeRegistration.types\";\nimport type { WebhookTriggerMatcherProvider } from \"./EngineRuntimeRegistration.types\";\n\n/**\n * Container-first entry: call on a host/test container **after** workflow, run, node, and credential\n * ports are registered. The registrar owns the default inline scheduler, engine binding,\n * and intent-surface wiring so hosts only override the seams they actually replace.\n */\nexport class EngineRuntimeRegistrar {\n register(container: DependencyContainer, options?: EngineRuntimeRegistrationOptions): void {\n this.registerSupportFactories(container);\n this.registerExecutionLimitsPolicy(container, options);\n this.ensureWorkflowNodeInstanceFactory(container);\n this.ensureNodeExecutor(container);\n this.registerDefaultActivationScheduler(container);\n this.registerEngine(container, options);\n this.registerIntentServices(container);\n }\n\n private registerSupportFactories(container: DependencyContainer): void {\n container.register(EngineExecutionLimitsPolicyFactory, { useClass: EngineExecutionLimitsPolicyFactory });\n container.register(NodeInstanceFactoryFactory, { useClass: NodeInstanceFactoryFactory });\n container.register(DefaultAsyncSleeper, { useClass: DefaultAsyncSleeper });\n container.register(InProcessRetryRunnerFactory, { useClass: InProcessRetryRunnerFactory });\n container.register(NodeExecutorFactory, { useClass: NodeExecutorFactory });\n container.register(InlineDrivingSchedulerFactory, { useClass: InlineDrivingSchedulerFactory });\n container.register(RunIntentServiceFactory, { useClass: RunIntentServiceFactory });\n container.register(EngineWorkflowRunnerServiceFactory, {\n useClass: EngineWorkflowRunnerServiceFactory,\n });\n container.register(WorkflowRepositoryWebhookTriggerMatcherFactory, {\n useClass: WorkflowRepositoryWebhookTriggerMatcherFactory,\n });\n }\n\n private registerExecutionLimitsPolicy(\n container: DependencyContainer,\n options: EngineRuntimeRegistrationOptions | undefined,\n ): void {\n if (container.isRegistered(CoreTokens.EngineExecutionLimitsPolicy, true)) {\n return;\n }\n container.register(CoreTokens.EngineExecutionLimitsPolicy, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n const fromResolver = options?.resolveEngineExecutionLimits?.();\n const merged = fromResolver ?? options?.engineExecutionLimits;\n return dependencyContainer.resolve(EngineExecutionLimitsPolicyFactory).create(merged);\n }),\n });\n }\n\n private ensureWorkflowNodeInstanceFactory(container: DependencyContainer): void {\n if (container.isRegistered(CoreTokens.WorkflowNodeInstanceFactory, true)) {\n return;\n }\n container.register(CoreTokens.WorkflowNodeInstanceFactory, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n return dependencyContainer\n .resolve(NodeInstanceFactoryFactory)\n .create(dependencyContainer.resolve(CoreTokens.NodeResolver));\n }),\n });\n }\n\n private ensureNodeExecutor(container: DependencyContainer): void {\n if (container.isRegistered(NodeExecutor, true)) {\n return;\n }\n container.register(NodeExecutor, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n const retryRunner = dependencyContainer\n .resolve(InProcessRetryRunnerFactory)\n .create(dependencyContainer.resolve(DefaultAsyncSleeper));\n return dependencyContainer\n .resolve(NodeExecutorFactory)\n .create(dependencyContainer.resolve(CoreTokens.WorkflowNodeInstanceFactory), retryRunner);\n }),\n });\n }\n\n private registerDefaultActivationScheduler(container: DependencyContainer): void {\n if (container.isRegistered(CoreTokens.NodeActivationScheduler, true)) {\n return;\n }\n container.register(InlineDrivingScheduler, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n return dependencyContainer\n .resolve(InlineDrivingSchedulerFactory)\n .create(dependencyContainer.resolve(NodeExecutor));\n }),\n });\n container.register(CoreTokens.NodeActivationScheduler, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n return dependencyContainer.resolve(InlineDrivingScheduler);\n }),\n });\n }\n\n private registerEngine(container: DependencyContainer, options: EngineRuntimeRegistrationOptions | undefined): void {\n container.register(EngineFactory, { useClass: EngineFactory });\n const matcherProvider = this.resolveMatcherProvider(options);\n container.register(Engine, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n const liveWorkflowRepository = dependencyContainer.resolve(CoreTokens.LiveWorkflowRepository);\n const nodeResolver = dependencyContainer.resolve(CoreTokens.NodeResolver);\n const tokenRegistryLike = dependencyContainer.resolve(CoreTokens.PersistedWorkflowTokenRegistry);\n const workflowActivationPolicy = dependencyContainer.resolve(CoreTokens.WorkflowActivationPolicy);\n const webhookTriggerMatcher = matcherProvider.createMatcher(dependencyContainer);\n const workflowNodeInstanceFactory = dependencyContainer.resolve(CoreTokens.WorkflowNodeInstanceFactory);\n const triggerRuntimeDiagnostics = options?.triggerRuntimeDiagnosticsProvider?.create(dependencyContainer);\n return dependencyContainer.resolve(EngineFactory).create({\n credentialSessions: dependencyContainer.resolve(CoreTokens.CredentialSessionService),\n liveWorkflowRepository,\n workflowRepository: dependencyContainer.resolve(CoreTokens.WorkflowRepository),\n workflowActivationPolicy,\n nodeResolver,\n triggerSetupStateRepository: dependencyContainer.resolve(CoreTokens.TriggerSetupStateRepository),\n webhookTriggerMatcher,\n runIdFactory: dependencyContainer.resolve(CoreTokens.RunIdFactory),\n activationIdFactory: dependencyContainer.resolve(CoreTokens.ActivationIdFactory),\n workflowExecutionRepository: dependencyContainer.resolve(CoreTokens.WorkflowExecutionRepository),\n activationScheduler: dependencyContainer.resolve(CoreTokens.NodeActivationScheduler),\n runDataFactory: dependencyContainer.resolve(CoreTokens.RunDataFactory),\n executionContextFactory: dependencyContainer.resolve(CoreTokens.ExecutionContextFactory),\n nodeExecutor: dependencyContainer.resolve(NodeExecutor),\n eventBus: dependencyContainer.resolve(CoreTokens.RunEventBus),\n tokenRegistry: tokenRegistryLike,\n workflowNodeInstanceFactory,\n executionLimitsPolicy: dependencyContainer.resolve(CoreTokens.EngineExecutionLimitsPolicy),\n triggerRuntimeDiagnostics,\n });\n }),\n });\n }\n\n private registerIntentServices(container: DependencyContainer): void {\n container.register(RunIntentService, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n return dependencyContainer\n .resolve(RunIntentServiceFactory)\n .create(dependencyContainer.resolve(Engine), dependencyContainer.resolve(CoreTokens.WorkflowRepository));\n }),\n });\n container.register(CoreTokens.WorkflowRunnerService, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n return dependencyContainer\n .resolve(EngineWorkflowRunnerServiceFactory)\n .create(dependencyContainer.resolve(Engine), dependencyContainer.resolve(CoreTokens.WorkflowRepository));\n }),\n });\n }\n\n private resolveMatcherProvider(options: EngineRuntimeRegistrationOptions | undefined): WebhookTriggerMatcherProvider {\n if (options?.webhookTriggerMatcherProvider) {\n return options.webhookTriggerMatcherProvider;\n }\n return {\n createMatcher: (container) =>\n container\n .resolve(WorkflowRepositoryWebhookTriggerMatcherFactory)\n .create(\n container.resolve(CoreTokens.WorkflowRepository),\n container.resolve(CoreTokens.WorkflowActivationPolicy),\n options?.webhookTriggerRoutingDiagnostics,\n ),\n };\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
const require_runtime = require('./runtime-ZJUpWmPH.cjs');
|
|
2
|
+
let tsyringe = require("tsyringe");
|
|
3
|
+
tsyringe = require_runtime.__toESM(tsyringe);
|
|
4
|
+
|
|
5
|
+
//#region src/policies/executionLimits/EngineExecutionLimitsPolicyFactory.ts
|
|
6
|
+
/**
|
|
7
|
+
* Builds {@link EngineExecutionLimitsPolicy} by merging {@link ENGINE_EXECUTION_LIMITS_DEFAULTS} with optional `overrides` (e.g. host `runtime.engineExecutionLimits`).
|
|
8
|
+
*/
|
|
9
|
+
var EngineExecutionLimitsPolicyFactory = class {
|
|
10
|
+
create(overrides) {
|
|
11
|
+
return new require_runtime.EngineExecutionLimitsPolicy({
|
|
12
|
+
...require_runtime.ENGINE_EXECUTION_LIMITS_DEFAULTS,
|
|
13
|
+
...overrides
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/runStorage/RunSummaryMapper.ts
|
|
20
|
+
/** Maps persisted run state to API run summaries for listings. */
|
|
21
|
+
var RunSummaryMapper = class {
|
|
22
|
+
static fromPersistedState(state) {
|
|
23
|
+
return {
|
|
24
|
+
runId: state.runId,
|
|
25
|
+
workflowId: state.workflowId,
|
|
26
|
+
startedAt: state.startedAt,
|
|
27
|
+
status: state.status,
|
|
28
|
+
finishedAt: require_runtime.RunFinishedAtFactory.resolveIso(state),
|
|
29
|
+
parent: state.parent,
|
|
30
|
+
executionOptions: state.executionOptions
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region src/runStorage/InMemoryWorkflowExecutionRepository.ts
|
|
37
|
+
var InMemoryWorkflowExecutionRepository = class {
|
|
38
|
+
runs = /* @__PURE__ */ new Map();
|
|
39
|
+
async createRun(args) {
|
|
40
|
+
this.runs.set(args.runId, {
|
|
41
|
+
runId: args.runId,
|
|
42
|
+
workflowId: args.workflowId,
|
|
43
|
+
startedAt: args.startedAt,
|
|
44
|
+
revision: 0,
|
|
45
|
+
parent: args.parent,
|
|
46
|
+
executionOptions: args.executionOptions,
|
|
47
|
+
control: args.control,
|
|
48
|
+
workflowSnapshot: args.workflowSnapshot,
|
|
49
|
+
mutableState: args.mutableState,
|
|
50
|
+
policySnapshot: args.policySnapshot,
|
|
51
|
+
engineCounters: args.engineCounters,
|
|
52
|
+
status: "running",
|
|
53
|
+
queue: [],
|
|
54
|
+
outputsByNode: {},
|
|
55
|
+
nodeSnapshotsByNodeId: {},
|
|
56
|
+
connectionInvocations: []
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async load(runId) {
|
|
60
|
+
return this.runs.get(runId);
|
|
61
|
+
}
|
|
62
|
+
async loadSchedulingState(runId) {
|
|
63
|
+
const state = this.runs.get(runId);
|
|
64
|
+
if (!state) return;
|
|
65
|
+
return {
|
|
66
|
+
pending: state.pending ? { ...state.pending } : void 0,
|
|
67
|
+
queue: state.queue.map((entry) => ({ ...entry }))
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
async save(state) {
|
|
71
|
+
this.runs.set(state.runId, {
|
|
72
|
+
...state,
|
|
73
|
+
revision: (state.revision ?? 0) + 1
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
async deleteRun(runId) {
|
|
77
|
+
this.runs.delete(runId);
|
|
78
|
+
}
|
|
79
|
+
async listRuns(args) {
|
|
80
|
+
const limit = args?.limit ?? 50;
|
|
81
|
+
return [...this.runs.values()].filter((s) => args?.workflowId ? s.workflowId === args.workflowId : true).sort((a, b) => b.startedAt.localeCompare(a.startedAt)).slice(0, limit).map((s) => RunSummaryMapper.fromPersistedState(s));
|
|
82
|
+
}
|
|
83
|
+
async listRunsOlderThan(args) {
|
|
84
|
+
const limit = args.limit ?? 100;
|
|
85
|
+
const out = [];
|
|
86
|
+
for (const s of this.runs.values()) {
|
|
87
|
+
if (s.status !== "completed" && s.status !== "failed") continue;
|
|
88
|
+
const finishedAt = require_runtime.RunFinishedAtFactory.resolveIso(s);
|
|
89
|
+
if (!finishedAt || finishedAt >= args.beforeIso) continue;
|
|
90
|
+
out.push({
|
|
91
|
+
runId: s.runId,
|
|
92
|
+
workflowId: s.workflowId,
|
|
93
|
+
startedAt: s.startedAt,
|
|
94
|
+
finishedAt
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
out.sort((a, b) => a.finishedAt.localeCompare(b.finishedAt));
|
|
98
|
+
return out.slice(0, limit);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
//#endregion
|
|
103
|
+
//#region src/scheduler/InlineDrivingSchedulerFactory.ts
|
|
104
|
+
var InlineDrivingSchedulerFactory = class {
|
|
105
|
+
create(nodeExecutor) {
|
|
106
|
+
return new require_runtime.InlineDrivingScheduler(nodeExecutor);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
//#endregion
|
|
111
|
+
//#region src/bootstrap/runtime/EngineRuntimeRegistrar.ts
|
|
112
|
+
/**
|
|
113
|
+
* Container-first entry: call on a host/test container **after** workflow, run, node, and credential
|
|
114
|
+
* ports are registered. The registrar owns the default inline scheduler, engine binding,
|
|
115
|
+
* and intent-surface wiring so hosts only override the seams they actually replace.
|
|
116
|
+
*/
|
|
117
|
+
var EngineRuntimeRegistrar = class {
|
|
118
|
+
register(container, options) {
|
|
119
|
+
this.registerSupportFactories(container);
|
|
120
|
+
this.registerExecutionLimitsPolicy(container, options);
|
|
121
|
+
this.ensureWorkflowNodeInstanceFactory(container);
|
|
122
|
+
this.ensureNodeExecutor(container);
|
|
123
|
+
this.registerDefaultActivationScheduler(container);
|
|
124
|
+
this.registerEngine(container, options);
|
|
125
|
+
this.registerIntentServices(container);
|
|
126
|
+
}
|
|
127
|
+
registerSupportFactories(container) {
|
|
128
|
+
container.register(EngineExecutionLimitsPolicyFactory, { useClass: EngineExecutionLimitsPolicyFactory });
|
|
129
|
+
container.register(require_runtime.NodeInstanceFactoryFactory, { useClass: require_runtime.NodeInstanceFactoryFactory });
|
|
130
|
+
container.register(require_runtime.DefaultAsyncSleeper, { useClass: require_runtime.DefaultAsyncSleeper });
|
|
131
|
+
container.register(require_runtime.InProcessRetryRunnerFactory, { useClass: require_runtime.InProcessRetryRunnerFactory });
|
|
132
|
+
container.register(require_runtime.NodeExecutorFactory, { useClass: require_runtime.NodeExecutorFactory });
|
|
133
|
+
container.register(InlineDrivingSchedulerFactory, { useClass: InlineDrivingSchedulerFactory });
|
|
134
|
+
container.register(require_runtime.RunIntentServiceFactory, { useClass: require_runtime.RunIntentServiceFactory });
|
|
135
|
+
container.register(require_runtime.EngineWorkflowRunnerServiceFactory, { useClass: require_runtime.EngineWorkflowRunnerServiceFactory });
|
|
136
|
+
container.register(require_runtime.WorkflowRepositoryWebhookTriggerMatcherFactory, { useClass: require_runtime.WorkflowRepositoryWebhookTriggerMatcherFactory });
|
|
137
|
+
}
|
|
138
|
+
registerExecutionLimitsPolicy(container, options) {
|
|
139
|
+
if (container.isRegistered(require_runtime.CoreTokens.EngineExecutionLimitsPolicy, true)) return;
|
|
140
|
+
container.register(require_runtime.CoreTokens.EngineExecutionLimitsPolicy, { useFactory: (0, tsyringe.instanceCachingFactory)((dependencyContainer) => {
|
|
141
|
+
const merged = options?.resolveEngineExecutionLimits?.() ?? options?.engineExecutionLimits;
|
|
142
|
+
return dependencyContainer.resolve(EngineExecutionLimitsPolicyFactory).create(merged);
|
|
143
|
+
}) });
|
|
144
|
+
}
|
|
145
|
+
ensureWorkflowNodeInstanceFactory(container) {
|
|
146
|
+
if (container.isRegistered(require_runtime.CoreTokens.WorkflowNodeInstanceFactory, true)) return;
|
|
147
|
+
container.register(require_runtime.CoreTokens.WorkflowNodeInstanceFactory, { useFactory: (0, tsyringe.instanceCachingFactory)((dependencyContainer) => {
|
|
148
|
+
return dependencyContainer.resolve(require_runtime.NodeInstanceFactoryFactory).create(dependencyContainer.resolve(require_runtime.CoreTokens.NodeResolver));
|
|
149
|
+
}) });
|
|
150
|
+
}
|
|
151
|
+
ensureNodeExecutor(container) {
|
|
152
|
+
if (container.isRegistered(require_runtime.NodeExecutor, true)) return;
|
|
153
|
+
container.register(require_runtime.NodeExecutor, { useFactory: (0, tsyringe.instanceCachingFactory)((dependencyContainer) => {
|
|
154
|
+
const retryRunner = dependencyContainer.resolve(require_runtime.InProcessRetryRunnerFactory).create(dependencyContainer.resolve(require_runtime.DefaultAsyncSleeper));
|
|
155
|
+
return dependencyContainer.resolve(require_runtime.NodeExecutorFactory).create(dependencyContainer.resolve(require_runtime.CoreTokens.WorkflowNodeInstanceFactory), retryRunner);
|
|
156
|
+
}) });
|
|
157
|
+
}
|
|
158
|
+
registerDefaultActivationScheduler(container) {
|
|
159
|
+
if (container.isRegistered(require_runtime.CoreTokens.NodeActivationScheduler, true)) return;
|
|
160
|
+
container.register(require_runtime.InlineDrivingScheduler, { useFactory: (0, tsyringe.instanceCachingFactory)((dependencyContainer) => {
|
|
161
|
+
return dependencyContainer.resolve(InlineDrivingSchedulerFactory).create(dependencyContainer.resolve(require_runtime.NodeExecutor));
|
|
162
|
+
}) });
|
|
163
|
+
container.register(require_runtime.CoreTokens.NodeActivationScheduler, { useFactory: (0, tsyringe.instanceCachingFactory)((dependencyContainer) => {
|
|
164
|
+
return dependencyContainer.resolve(require_runtime.InlineDrivingScheduler);
|
|
165
|
+
}) });
|
|
166
|
+
}
|
|
167
|
+
registerEngine(container, options) {
|
|
168
|
+
container.register(require_runtime.EngineFactory, { useClass: require_runtime.EngineFactory });
|
|
169
|
+
const matcherProvider = this.resolveMatcherProvider(options);
|
|
170
|
+
container.register(require_runtime.Engine, { useFactory: (0, tsyringe.instanceCachingFactory)((dependencyContainer) => {
|
|
171
|
+
const liveWorkflowRepository = dependencyContainer.resolve(require_runtime.CoreTokens.LiveWorkflowRepository);
|
|
172
|
+
const nodeResolver = dependencyContainer.resolve(require_runtime.CoreTokens.NodeResolver);
|
|
173
|
+
const tokenRegistryLike = dependencyContainer.resolve(require_runtime.CoreTokens.PersistedWorkflowTokenRegistry);
|
|
174
|
+
const workflowActivationPolicy = dependencyContainer.resolve(require_runtime.CoreTokens.WorkflowActivationPolicy);
|
|
175
|
+
const webhookTriggerMatcher = matcherProvider.createMatcher(dependencyContainer);
|
|
176
|
+
const workflowNodeInstanceFactory = dependencyContainer.resolve(require_runtime.CoreTokens.WorkflowNodeInstanceFactory);
|
|
177
|
+
const triggerRuntimeDiagnostics = options?.triggerRuntimeDiagnosticsProvider?.create(dependencyContainer);
|
|
178
|
+
return dependencyContainer.resolve(require_runtime.EngineFactory).create({
|
|
179
|
+
credentialSessions: dependencyContainer.resolve(require_runtime.CoreTokens.CredentialSessionService),
|
|
180
|
+
liveWorkflowRepository,
|
|
181
|
+
workflowRepository: dependencyContainer.resolve(require_runtime.CoreTokens.WorkflowRepository),
|
|
182
|
+
workflowActivationPolicy,
|
|
183
|
+
nodeResolver,
|
|
184
|
+
triggerSetupStateRepository: dependencyContainer.resolve(require_runtime.CoreTokens.TriggerSetupStateRepository),
|
|
185
|
+
webhookTriggerMatcher,
|
|
186
|
+
runIdFactory: dependencyContainer.resolve(require_runtime.CoreTokens.RunIdFactory),
|
|
187
|
+
activationIdFactory: dependencyContainer.resolve(require_runtime.CoreTokens.ActivationIdFactory),
|
|
188
|
+
workflowExecutionRepository: dependencyContainer.resolve(require_runtime.CoreTokens.WorkflowExecutionRepository),
|
|
189
|
+
activationScheduler: dependencyContainer.resolve(require_runtime.CoreTokens.NodeActivationScheduler),
|
|
190
|
+
runDataFactory: dependencyContainer.resolve(require_runtime.CoreTokens.RunDataFactory),
|
|
191
|
+
executionContextFactory: dependencyContainer.resolve(require_runtime.CoreTokens.ExecutionContextFactory),
|
|
192
|
+
nodeExecutor: dependencyContainer.resolve(require_runtime.NodeExecutor),
|
|
193
|
+
eventBus: dependencyContainer.resolve(require_runtime.CoreTokens.RunEventBus),
|
|
194
|
+
tokenRegistry: tokenRegistryLike,
|
|
195
|
+
workflowNodeInstanceFactory,
|
|
196
|
+
executionLimitsPolicy: dependencyContainer.resolve(require_runtime.CoreTokens.EngineExecutionLimitsPolicy),
|
|
197
|
+
triggerRuntimeDiagnostics
|
|
198
|
+
});
|
|
199
|
+
}) });
|
|
200
|
+
}
|
|
201
|
+
registerIntentServices(container) {
|
|
202
|
+
container.register(require_runtime.RunIntentService, { useFactory: (0, tsyringe.instanceCachingFactory)((dependencyContainer) => {
|
|
203
|
+
return dependencyContainer.resolve(require_runtime.RunIntentServiceFactory).create(dependencyContainer.resolve(require_runtime.Engine), dependencyContainer.resolve(require_runtime.CoreTokens.WorkflowRepository));
|
|
204
|
+
}) });
|
|
205
|
+
container.register(require_runtime.CoreTokens.WorkflowRunnerService, { useFactory: (0, tsyringe.instanceCachingFactory)((dependencyContainer) => {
|
|
206
|
+
return dependencyContainer.resolve(require_runtime.EngineWorkflowRunnerServiceFactory).create(dependencyContainer.resolve(require_runtime.Engine), dependencyContainer.resolve(require_runtime.CoreTokens.WorkflowRepository));
|
|
207
|
+
}) });
|
|
208
|
+
}
|
|
209
|
+
resolveMatcherProvider(options) {
|
|
210
|
+
if (options?.webhookTriggerMatcherProvider) return options.webhookTriggerMatcherProvider;
|
|
211
|
+
return { createMatcher: (container) => container.resolve(require_runtime.WorkflowRepositoryWebhookTriggerMatcherFactory).create(container.resolve(require_runtime.CoreTokens.WorkflowRepository), container.resolve(require_runtime.CoreTokens.WorkflowActivationPolicy), options?.webhookTriggerRoutingDiagnostics) };
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
//#endregion
|
|
216
|
+
Object.defineProperty(exports, 'EngineExecutionLimitsPolicyFactory', {
|
|
217
|
+
enumerable: true,
|
|
218
|
+
get: function () {
|
|
219
|
+
return EngineExecutionLimitsPolicyFactory;
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
Object.defineProperty(exports, 'EngineRuntimeRegistrar', {
|
|
223
|
+
enumerable: true,
|
|
224
|
+
get: function () {
|
|
225
|
+
return EngineRuntimeRegistrar;
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
Object.defineProperty(exports, 'InMemoryWorkflowExecutionRepository', {
|
|
229
|
+
enumerable: true,
|
|
230
|
+
get: function () {
|
|
231
|
+
return InMemoryWorkflowExecutionRepository;
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
Object.defineProperty(exports, 'RunSummaryMapper', {
|
|
235
|
+
enumerable: true,
|
|
236
|
+
get: function () {
|
|
237
|
+
return RunSummaryMapper;
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
//# sourceMappingURL=bootstrap-DwS5S7s9.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-DwS5S7s9.cjs","names":["EngineExecutionLimitsPolicy","ENGINE_EXECUTION_LIMITS_DEFAULTS","RunFinishedAtFactory","out: RunPruneCandidate[]","RunFinishedAtFactory","InlineDrivingScheduler","NodeInstanceFactoryFactory","DefaultAsyncSleeper","InProcessRetryRunnerFactory","NodeExecutorFactory","RunIntentServiceFactory","EngineWorkflowRunnerServiceFactory","WorkflowRepositoryWebhookTriggerMatcherFactory","CoreTokens","NodeExecutor","InlineDrivingScheduler","EngineFactory","Engine","RunIntentService"],"sources":["../src/policies/executionLimits/EngineExecutionLimitsPolicyFactory.ts","../src/runStorage/RunSummaryMapper.ts","../src/runStorage/InMemoryWorkflowExecutionRepository.ts","../src/scheduler/InlineDrivingSchedulerFactory.ts","../src/bootstrap/runtime/EngineRuntimeRegistrar.ts"],"sourcesContent":["import {\n EngineExecutionLimitsPolicy,\n ENGINE_EXECUTION_LIMITS_DEFAULTS,\n type EngineExecutionLimitsPolicyConfig,\n} from \"./EngineExecutionLimitsPolicy\";\n\n/**\n * Builds {@link EngineExecutionLimitsPolicy} by merging {@link ENGINE_EXECUTION_LIMITS_DEFAULTS} with optional `overrides` (e.g. host `runtime.engineExecutionLimits`).\n */\nexport class EngineExecutionLimitsPolicyFactory {\n create(overrides?: Partial<EngineExecutionLimitsPolicyConfig>): EngineExecutionLimitsPolicy {\n return new EngineExecutionLimitsPolicy({ ...ENGINE_EXECUTION_LIMITS_DEFAULTS, ...overrides });\n }\n}\n","import { RunFinishedAtFactory } from \"../contracts/runFinishedAtFactory\";\nimport type { PersistedRunState, RunSummary } from \"../types\";\n\n/** Maps persisted run state to API run summaries for listings. */\nexport class RunSummaryMapper {\n static fromPersistedState(state: PersistedRunState): RunSummary {\n return {\n runId: state.runId,\n workflowId: state.workflowId,\n startedAt: state.startedAt,\n status: state.status,\n finishedAt: RunFinishedAtFactory.resolveIso(state),\n parent: state.parent,\n executionOptions: state.executionOptions,\n };\n }\n}\n","import type {\n EngineRunCounters,\n NodeId,\n NodeOutputs,\n ParentExecutionRef,\n PersistedRunSchedulingState,\n PersistedRunState,\n RunId,\n RunSummary,\n WorkflowExecutionListingRepository,\n WorkflowExecutionPruneRepository,\n WorkflowExecutionRepository,\n RunPruneCandidate,\n WorkflowId,\n} from \"../types\";\nimport { RunFinishedAtFactory } from \"../contracts/runFinishedAtFactory\";\nimport { RunSummaryMapper } from \"./RunSummaryMapper\";\n\nexport class InMemoryWorkflowExecutionRepository\n implements WorkflowExecutionRepository, WorkflowExecutionListingRepository, WorkflowExecutionPruneRepository\n{\n private readonly runs = new Map<RunId, PersistedRunState>();\n\n async createRun(args: {\n runId: RunId;\n workflowId: WorkflowId;\n startedAt: string;\n parent?: ParentExecutionRef;\n executionOptions?: PersistedRunState[\"executionOptions\"];\n control?: PersistedRunState[\"control\"];\n workflowSnapshot?: PersistedRunState[\"workflowSnapshot\"];\n mutableState?: PersistedRunState[\"mutableState\"];\n policySnapshot?: PersistedRunState[\"policySnapshot\"];\n engineCounters?: EngineRunCounters;\n }): Promise<void> {\n this.runs.set(args.runId, {\n runId: args.runId,\n workflowId: args.workflowId,\n startedAt: args.startedAt,\n revision: 0,\n parent: args.parent,\n executionOptions: args.executionOptions,\n control: args.control,\n workflowSnapshot: args.workflowSnapshot,\n mutableState: args.mutableState,\n policySnapshot: args.policySnapshot,\n engineCounters: args.engineCounters,\n status: \"running\",\n queue: [],\n outputsByNode: {} as Record<NodeId, NodeOutputs>,\n nodeSnapshotsByNodeId: {},\n connectionInvocations: [],\n });\n }\n\n async load(runId: RunId): Promise<PersistedRunState | undefined> {\n return this.runs.get(runId);\n }\n\n async loadSchedulingState(runId: RunId): Promise<PersistedRunSchedulingState | undefined> {\n const state = this.runs.get(runId);\n if (!state) {\n return undefined;\n }\n return {\n pending: state.pending ? { ...state.pending } : undefined,\n queue: state.queue.map((entry) => ({ ...entry })),\n };\n }\n\n async save(state: PersistedRunState): Promise<void> {\n this.runs.set(state.runId, { ...state, revision: (state.revision ?? 0) + 1 });\n }\n\n async deleteRun(runId: RunId): Promise<void> {\n this.runs.delete(runId);\n }\n\n async listRuns(args?: Readonly<{ workflowId?: WorkflowId; limit?: number }>): Promise<ReadonlyArray<RunSummary>> {\n const limit = args?.limit ?? 50;\n const summaries = [...this.runs.values()]\n .filter((s) => (args?.workflowId ? s.workflowId === args.workflowId : true))\n .sort((a, b) => b.startedAt.localeCompare(a.startedAt))\n .slice(0, limit)\n .map((s) => RunSummaryMapper.fromPersistedState(s));\n return summaries;\n }\n\n async listRunsOlderThan(\n args: Readonly<{ beforeIso: string; limit?: number }>,\n ): Promise<ReadonlyArray<RunPruneCandidate>> {\n const limit = args.limit ?? 100;\n const out: RunPruneCandidate[] = [];\n for (const s of this.runs.values()) {\n if (s.status !== \"completed\" && s.status !== \"failed\") continue;\n const finishedAt = RunFinishedAtFactory.resolveIso(s);\n if (!finishedAt || finishedAt >= args.beforeIso) continue;\n out.push({\n runId: s.runId,\n workflowId: s.workflowId,\n startedAt: s.startedAt,\n finishedAt,\n });\n }\n out.sort((a, b) => a.finishedAt.localeCompare(b.finishedAt));\n return out.slice(0, limit);\n }\n}\n","import { NodeExecutor } from \"../execution/NodeExecutor\";\n\nimport { InlineDrivingScheduler } from \"./InlineDrivingScheduler\";\n\nexport class InlineDrivingSchedulerFactory {\n create(nodeExecutor: NodeExecutor): InlineDrivingScheduler {\n return new InlineDrivingScheduler(nodeExecutor);\n }\n}\n","import { instanceCachingFactory, type DependencyContainer } from \"../../di\";\nimport { CoreTokens } from \"../../di\";\nimport { EngineExecutionLimitsPolicyFactory } from \"../../policies/executionLimits/EngineExecutionLimitsPolicyFactory\";\nimport {\n DefaultAsyncSleeper,\n InProcessRetryRunnerFactory,\n NodeExecutor,\n NodeExecutorFactory,\n NodeInstanceFactoryFactory,\n} from \"../../execution\";\nimport {\n EngineFactory,\n EngineWorkflowRunnerServiceFactory,\n RunIntentServiceFactory,\n RunIntentService,\n WorkflowRepositoryWebhookTriggerMatcherFactory,\n} from \"../../runtime\";\nimport { InlineDrivingScheduler } from \"../../scheduler/InlineDrivingScheduler\";\nimport { InlineDrivingSchedulerFactory } from \"../../scheduler/InlineDrivingSchedulerFactory\";\nimport { Engine } from \"../../orchestration/Engine\";\nimport type { EngineRuntimeRegistrationOptions } from \"./EngineRuntimeRegistration.types\";\nimport type { WebhookTriggerMatcherProvider } from \"./EngineRuntimeRegistration.types\";\n\n/**\n * Container-first entry: call on a host/test container **after** workflow, run, node, and credential\n * ports are registered. The registrar owns the default inline scheduler, engine binding,\n * and intent-surface wiring so hosts only override the seams they actually replace.\n */\nexport class EngineRuntimeRegistrar {\n register(container: DependencyContainer, options?: EngineRuntimeRegistrationOptions): void {\n this.registerSupportFactories(container);\n this.registerExecutionLimitsPolicy(container, options);\n this.ensureWorkflowNodeInstanceFactory(container);\n this.ensureNodeExecutor(container);\n this.registerDefaultActivationScheduler(container);\n this.registerEngine(container, options);\n this.registerIntentServices(container);\n }\n\n private registerSupportFactories(container: DependencyContainer): void {\n container.register(EngineExecutionLimitsPolicyFactory, { useClass: EngineExecutionLimitsPolicyFactory });\n container.register(NodeInstanceFactoryFactory, { useClass: NodeInstanceFactoryFactory });\n container.register(DefaultAsyncSleeper, { useClass: DefaultAsyncSleeper });\n container.register(InProcessRetryRunnerFactory, { useClass: InProcessRetryRunnerFactory });\n container.register(NodeExecutorFactory, { useClass: NodeExecutorFactory });\n container.register(InlineDrivingSchedulerFactory, { useClass: InlineDrivingSchedulerFactory });\n container.register(RunIntentServiceFactory, { useClass: RunIntentServiceFactory });\n container.register(EngineWorkflowRunnerServiceFactory, {\n useClass: EngineWorkflowRunnerServiceFactory,\n });\n container.register(WorkflowRepositoryWebhookTriggerMatcherFactory, {\n useClass: WorkflowRepositoryWebhookTriggerMatcherFactory,\n });\n }\n\n private registerExecutionLimitsPolicy(\n container: DependencyContainer,\n options: EngineRuntimeRegistrationOptions | undefined,\n ): void {\n if (container.isRegistered(CoreTokens.EngineExecutionLimitsPolicy, true)) {\n return;\n }\n container.register(CoreTokens.EngineExecutionLimitsPolicy, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n const fromResolver = options?.resolveEngineExecutionLimits?.();\n const merged = fromResolver ?? options?.engineExecutionLimits;\n return dependencyContainer.resolve(EngineExecutionLimitsPolicyFactory).create(merged);\n }),\n });\n }\n\n private ensureWorkflowNodeInstanceFactory(container: DependencyContainer): void {\n if (container.isRegistered(CoreTokens.WorkflowNodeInstanceFactory, true)) {\n return;\n }\n container.register(CoreTokens.WorkflowNodeInstanceFactory, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n return dependencyContainer\n .resolve(NodeInstanceFactoryFactory)\n .create(dependencyContainer.resolve(CoreTokens.NodeResolver));\n }),\n });\n }\n\n private ensureNodeExecutor(container: DependencyContainer): void {\n if (container.isRegistered(NodeExecutor, true)) {\n return;\n }\n container.register(NodeExecutor, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n const retryRunner = dependencyContainer\n .resolve(InProcessRetryRunnerFactory)\n .create(dependencyContainer.resolve(DefaultAsyncSleeper));\n return dependencyContainer\n .resolve(NodeExecutorFactory)\n .create(dependencyContainer.resolve(CoreTokens.WorkflowNodeInstanceFactory), retryRunner);\n }),\n });\n }\n\n private registerDefaultActivationScheduler(container: DependencyContainer): void {\n if (container.isRegistered(CoreTokens.NodeActivationScheduler, true)) {\n return;\n }\n container.register(InlineDrivingScheduler, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n return dependencyContainer\n .resolve(InlineDrivingSchedulerFactory)\n .create(dependencyContainer.resolve(NodeExecutor));\n }),\n });\n container.register(CoreTokens.NodeActivationScheduler, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n return dependencyContainer.resolve(InlineDrivingScheduler);\n }),\n });\n }\n\n private registerEngine(container: DependencyContainer, options: EngineRuntimeRegistrationOptions | undefined): void {\n container.register(EngineFactory, { useClass: EngineFactory });\n const matcherProvider = this.resolveMatcherProvider(options);\n container.register(Engine, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n const liveWorkflowRepository = dependencyContainer.resolve(CoreTokens.LiveWorkflowRepository);\n const nodeResolver = dependencyContainer.resolve(CoreTokens.NodeResolver);\n const tokenRegistryLike = dependencyContainer.resolve(CoreTokens.PersistedWorkflowTokenRegistry);\n const workflowActivationPolicy = dependencyContainer.resolve(CoreTokens.WorkflowActivationPolicy);\n const webhookTriggerMatcher = matcherProvider.createMatcher(dependencyContainer);\n const workflowNodeInstanceFactory = dependencyContainer.resolve(CoreTokens.WorkflowNodeInstanceFactory);\n const triggerRuntimeDiagnostics = options?.triggerRuntimeDiagnosticsProvider?.create(dependencyContainer);\n return dependencyContainer.resolve(EngineFactory).create({\n credentialSessions: dependencyContainer.resolve(CoreTokens.CredentialSessionService),\n liveWorkflowRepository,\n workflowRepository: dependencyContainer.resolve(CoreTokens.WorkflowRepository),\n workflowActivationPolicy,\n nodeResolver,\n triggerSetupStateRepository: dependencyContainer.resolve(CoreTokens.TriggerSetupStateRepository),\n webhookTriggerMatcher,\n runIdFactory: dependencyContainer.resolve(CoreTokens.RunIdFactory),\n activationIdFactory: dependencyContainer.resolve(CoreTokens.ActivationIdFactory),\n workflowExecutionRepository: dependencyContainer.resolve(CoreTokens.WorkflowExecutionRepository),\n activationScheduler: dependencyContainer.resolve(CoreTokens.NodeActivationScheduler),\n runDataFactory: dependencyContainer.resolve(CoreTokens.RunDataFactory),\n executionContextFactory: dependencyContainer.resolve(CoreTokens.ExecutionContextFactory),\n nodeExecutor: dependencyContainer.resolve(NodeExecutor),\n eventBus: dependencyContainer.resolve(CoreTokens.RunEventBus),\n tokenRegistry: tokenRegistryLike,\n workflowNodeInstanceFactory,\n executionLimitsPolicy: dependencyContainer.resolve(CoreTokens.EngineExecutionLimitsPolicy),\n triggerRuntimeDiagnostics,\n });\n }),\n });\n }\n\n private registerIntentServices(container: DependencyContainer): void {\n container.register(RunIntentService, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n return dependencyContainer\n .resolve(RunIntentServiceFactory)\n .create(dependencyContainer.resolve(Engine), dependencyContainer.resolve(CoreTokens.WorkflowRepository));\n }),\n });\n container.register(CoreTokens.WorkflowRunnerService, {\n useFactory: instanceCachingFactory((dependencyContainer) => {\n return dependencyContainer\n .resolve(EngineWorkflowRunnerServiceFactory)\n .create(dependencyContainer.resolve(Engine), dependencyContainer.resolve(CoreTokens.WorkflowRepository));\n }),\n });\n }\n\n private resolveMatcherProvider(options: EngineRuntimeRegistrationOptions | undefined): WebhookTriggerMatcherProvider {\n if (options?.webhookTriggerMatcherProvider) {\n return options.webhookTriggerMatcherProvider;\n }\n return {\n createMatcher: (container) =>\n container\n .resolve(WorkflowRepositoryWebhookTriggerMatcherFactory)\n .create(\n container.resolve(CoreTokens.WorkflowRepository),\n container.resolve(CoreTokens.WorkflowActivationPolicy),\n options?.webhookTriggerRoutingDiagnostics,\n ),\n };\n }\n}\n"],"mappings":"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"}
|