veryfront 0.1.628 → 0.1.630
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/esm/cli/commands/worker/command-help.d.ts.map +1 -1
- package/esm/cli/commands/worker/command-help.js +0 -5
- package/esm/cli/commands/worker/command.d.ts.map +1 -1
- package/esm/cli/commands/worker/command.js +0 -6
- package/esm/cli/commands/worker/handler.js +1 -1
- package/esm/deno.d.ts +9 -0
- package/esm/deno.js +16 -7
- package/esm/src/agent/composition/composition.d.ts +0 -1
- package/esm/src/agent/composition/composition.d.ts.map +1 -1
- package/esm/src/agent/composition/composition.js +15 -1
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +9 -1
- package/esm/src/platform/adapters/veryfront-api-client/operations.d.ts +2 -2
- package/esm/src/platform/adapters/veryfront-api-client/operations.d.ts.map +1 -1
- package/esm/src/platform/adapters/veryfront-api-client/operations.js +2 -2
- package/esm/src/platform/adapters/veryfront-api-client/schemas/api.schema.d.ts +1 -1
- package/esm/src/platform/adapters/veryfront-api-client/schemas/api.schema.js +1 -1
- package/esm/src/server/dev-server/file-watch-setup.d.ts +15 -0
- package/esm/src/server/dev-server/file-watch-setup.d.ts.map +1 -1
- package/esm/src/server/dev-server/file-watch-setup.js +61 -4
- package/esm/src/server/handlers/request/project-run-execute.handler.d.ts +74 -0
- package/esm/src/server/handlers/request/project-run-execute.handler.d.ts.map +1 -0
- package/esm/src/server/handlers/request/project-run-execute.handler.js +460 -0
- package/esm/src/server/runtime-handler/index.d.ts +1 -1
- package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/index.js +3 -0
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/esm/src/workflow/worker/executors/index.d.ts +0 -2
- package/esm/src/workflow/worker/executors/index.d.ts.map +1 -1
- package/esm/src/workflow/worker/executors/index.js +0 -2
- package/esm/src/workflow/worker/executors/types.d.ts +7 -17
- package/esm/src/workflow/worker/executors/types.d.ts.map +1 -1
- package/esm/src/workflow/worker/executors/types.js +0 -1
- package/esm/src/workflow/worker/index.d.ts +3 -9
- package/esm/src/workflow/worker/index.d.ts.map +1 -1
- package/esm/src/workflow/worker/index.js +3 -9
- package/esm/src/workflow/worker/run-manager.d.ts +1 -16
- package/esm/src/workflow/worker/run-manager.d.ts.map +1 -1
- package/esm/src/workflow/worker/run-manager.js +2 -19
- package/package.json +1 -1
- package/esm/src/workflow/worker/executors/k8s.d.ts +0 -157
- package/esm/src/workflow/worker/executors/k8s.d.ts.map +0 -1
- package/esm/src/workflow/worker/executors/k8s.js +0 -198
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
import * as dntShim from "../../../../_dnt.shims.js";
|
|
2
|
+
import { CONTROL_PLANE_RUNS_PATH_PREFIX } from "../../../channels/control-plane.js";
|
|
3
|
+
import { getEnvironmentConfig } from "../../../config/index.js";
|
|
4
|
+
import { ControlPlaneRequestError, verifyControlPlaneRequest, } from "../../../internal-agents/control-plane-auth.js";
|
|
5
|
+
import { INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES, InternalAgentRequestBodyTooLargeError, readInternalAgentRequestBody, } from "../../../internal-agents/request-body.js";
|
|
6
|
+
import { getHostEnv } from "../../../platform/compat/process.js";
|
|
7
|
+
import { findTaskById } from "../../../task/discovery.js";
|
|
8
|
+
import { runTask } from "../../../task/runner.js";
|
|
9
|
+
import { findWorkflowById } from "../../../workflow/discovery/index.js";
|
|
10
|
+
import { createWorkflowClient, RedisBackend } from "../../../workflow/index.js";
|
|
11
|
+
import { BaseHandler } from "../response/base.js";
|
|
12
|
+
import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
|
|
13
|
+
const EXECUTE_PATH_REGEX = /^\/api\/control-plane\/runs\/([^/]+)\/execute$/;
|
|
14
|
+
const DEFAULT_WORKFLOW_STATUS_POLL_INTERVAL_MS = 100;
|
|
15
|
+
const DEFAULT_WORKFLOW_STATUS_TIMEOUT_MS = 15 * 60 * 1_000;
|
|
16
|
+
const WORKFLOW_PERSISTENCE_REQUIRED_ERROR = "Workflow paused but runtime workflow persistence is not configured";
|
|
17
|
+
function isRecord(value) {
|
|
18
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
19
|
+
}
|
|
20
|
+
function parseRecord(value) {
|
|
21
|
+
if (value === undefined)
|
|
22
|
+
return undefined;
|
|
23
|
+
if (!isRecord(value))
|
|
24
|
+
throw new Error("Expected object");
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
function parseExecuteRequest(value, pathRunId) {
|
|
28
|
+
if (!isRecord(value))
|
|
29
|
+
throw new Error("Expected object");
|
|
30
|
+
const runId = value.runId;
|
|
31
|
+
const kind = value.kind;
|
|
32
|
+
const target = value.target;
|
|
33
|
+
const projectId = value.projectId;
|
|
34
|
+
if (typeof runId !== "string" || !runId)
|
|
35
|
+
throw new Error("Invalid runId");
|
|
36
|
+
if (runId !== pathRunId)
|
|
37
|
+
throw new Error("Run id does not match request path");
|
|
38
|
+
if (kind !== "task" && kind !== "workflow")
|
|
39
|
+
throw new Error("Invalid run kind");
|
|
40
|
+
if (typeof target !== "string" || !target)
|
|
41
|
+
throw new Error("Invalid target");
|
|
42
|
+
if (typeof projectId !== "string" || !projectId)
|
|
43
|
+
throw new Error("Invalid projectId");
|
|
44
|
+
if (kind === "task" && !target.startsWith("task:"))
|
|
45
|
+
throw new Error("Invalid task target");
|
|
46
|
+
if (kind === "workflow" && !target.startsWith("workflow:")) {
|
|
47
|
+
throw new Error("Invalid workflow target");
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
runId,
|
|
51
|
+
kind,
|
|
52
|
+
target,
|
|
53
|
+
projectId,
|
|
54
|
+
config: parseRecord(value.config),
|
|
55
|
+
input: parseRecord(value.input),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function getRunId(pathname) {
|
|
59
|
+
return EXECUTE_PATH_REGEX.exec(pathname)?.[1] ?? null;
|
|
60
|
+
}
|
|
61
|
+
function stripTargetPrefix(target, prefix) {
|
|
62
|
+
return target.slice(prefix.length);
|
|
63
|
+
}
|
|
64
|
+
function errorMessage(error) {
|
|
65
|
+
return error instanceof Error ? error.message : String(error);
|
|
66
|
+
}
|
|
67
|
+
function createExecutionFailure(error, durationMs) {
|
|
68
|
+
return {
|
|
69
|
+
success: false,
|
|
70
|
+
error: errorMessage(error),
|
|
71
|
+
logs: null,
|
|
72
|
+
duration_ms: durationMs,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
async function createRuntimeWorkflowClient(config) {
|
|
76
|
+
const redisUrl = getHostEnv("REDIS_URL")?.trim();
|
|
77
|
+
if (!redisUrl) {
|
|
78
|
+
return Object.assign(createWorkflowClient(config), {
|
|
79
|
+
statePersistence: "ephemeral",
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
const backend = new RedisBackend({ url: redisUrl, debug: config?.debug });
|
|
83
|
+
if (backend.initialize) {
|
|
84
|
+
await backend.initialize();
|
|
85
|
+
}
|
|
86
|
+
return Object.assign(createWorkflowClient({ backend, debug: config?.debug }), {
|
|
87
|
+
statePersistence: "durable",
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async function executeTaskRun(request, ctx, deps) {
|
|
91
|
+
const taskId = stripTargetPrefix(request.target, "task:");
|
|
92
|
+
if (taskId === "knowledge-ingest") {
|
|
93
|
+
throw new Error("Knowledge ingest must be executed through the knowledge ingest executor");
|
|
94
|
+
}
|
|
95
|
+
const task = await deps.findTaskById(taskId, {
|
|
96
|
+
projectDir: ctx.projectDir,
|
|
97
|
+
adapter: ctx.adapter,
|
|
98
|
+
config: ctx.config,
|
|
99
|
+
debug: ctx.debug,
|
|
100
|
+
});
|
|
101
|
+
if (!task) {
|
|
102
|
+
return {
|
|
103
|
+
success: false,
|
|
104
|
+
error: `Task not found: ${taskId}`,
|
|
105
|
+
logs: null,
|
|
106
|
+
duration_ms: 0,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const result = await deps.runTask({
|
|
110
|
+
task,
|
|
111
|
+
config: request.config ?? {},
|
|
112
|
+
projectId: request.projectId,
|
|
113
|
+
debug: ctx.debug,
|
|
114
|
+
});
|
|
115
|
+
return {
|
|
116
|
+
success: result.success,
|
|
117
|
+
result: result.result,
|
|
118
|
+
error: result.error,
|
|
119
|
+
duration_ms: result.durationMs,
|
|
120
|
+
logs: null,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
async function waitForWorkflowResult(client, runId, deps) {
|
|
124
|
+
const deadline = deps.now() + DEFAULT_WORKFLOW_STATUS_TIMEOUT_MS;
|
|
125
|
+
while (true) {
|
|
126
|
+
const run = await client.getRun(runId);
|
|
127
|
+
if (!run)
|
|
128
|
+
throw new Error(`Workflow run not found: ${runId}`);
|
|
129
|
+
if (run.status === "completed" ||
|
|
130
|
+
run.status === "failed" ||
|
|
131
|
+
run.status === "cancelled" ||
|
|
132
|
+
run.status === "waiting") {
|
|
133
|
+
return run;
|
|
134
|
+
}
|
|
135
|
+
if (deps.now() >= deadline) {
|
|
136
|
+
throw new Error(`Workflow run timed out: ${runId}`);
|
|
137
|
+
}
|
|
138
|
+
await deps.sleep(DEFAULT_WORKFLOW_STATUS_POLL_INTERVAL_MS);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async function executeWorkflowRun(request, ctx, deps) {
|
|
142
|
+
const startedAt = deps.now();
|
|
143
|
+
const workflowId = stripTargetPrefix(request.target, "workflow:");
|
|
144
|
+
const workflow = await deps.findWorkflowById(workflowId, {
|
|
145
|
+
projectDir: ctx.projectDir,
|
|
146
|
+
adapter: ctx.adapter,
|
|
147
|
+
config: ctx.config,
|
|
148
|
+
debug: ctx.debug,
|
|
149
|
+
});
|
|
150
|
+
if (!workflow) {
|
|
151
|
+
return {
|
|
152
|
+
success: false,
|
|
153
|
+
error: `Workflow not found: ${workflowId}`,
|
|
154
|
+
logs: null,
|
|
155
|
+
duration_ms: 0,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
const client = await deps.createWorkflowClient({ debug: ctx.debug });
|
|
159
|
+
try {
|
|
160
|
+
client.register(workflow.definition);
|
|
161
|
+
const handle = await client.start(workflow.id, request.input ?? {}, { runId: request.runId });
|
|
162
|
+
const run = await waitForWorkflowResult(client, handle.runId, deps);
|
|
163
|
+
const durationMs = Math.max(0, deps.now() - startedAt);
|
|
164
|
+
if (run.status === "waiting") {
|
|
165
|
+
if (client.statePersistence !== "durable") {
|
|
166
|
+
return {
|
|
167
|
+
success: false,
|
|
168
|
+
error: WORKFLOW_PERSISTENCE_REQUIRED_ERROR,
|
|
169
|
+
logs: null,
|
|
170
|
+
duration_ms: durationMs,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
success: true,
|
|
175
|
+
result: run.output,
|
|
176
|
+
logs: null,
|
|
177
|
+
duration_ms: durationMs,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
if (run.status === "completed") {
|
|
181
|
+
return {
|
|
182
|
+
success: true,
|
|
183
|
+
result: run.output,
|
|
184
|
+
logs: null,
|
|
185
|
+
duration_ms: durationMs,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
success: false,
|
|
190
|
+
result: run.output,
|
|
191
|
+
error: run.error?.message ?? `Workflow ended with status: ${run.status}`,
|
|
192
|
+
logs: null,
|
|
193
|
+
duration_ms: durationMs,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
await client.destroy();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function createRuntimeApiClient(req, ctx) {
|
|
201
|
+
const apiUrl = getEnvironmentConfig().apiBaseUrl;
|
|
202
|
+
const token = req.headers.get("x-token") ?? ctx.proxyToken ?? ctx.requestContext?.token ?? "";
|
|
203
|
+
if (!token) {
|
|
204
|
+
throw new Error("Missing project runtime API token");
|
|
205
|
+
}
|
|
206
|
+
async function requestJson(method, path, body, params) {
|
|
207
|
+
const url = new URL(`${apiUrl}${path}`);
|
|
208
|
+
for (const [key, value] of Object.entries(params ?? {})) {
|
|
209
|
+
url.searchParams.set(key, value);
|
|
210
|
+
}
|
|
211
|
+
const response = await fetch(url.toString(), {
|
|
212
|
+
method,
|
|
213
|
+
headers: {
|
|
214
|
+
Authorization: `Bearer ${token}`,
|
|
215
|
+
Accept: "application/json",
|
|
216
|
+
"Content-Type": "application/json",
|
|
217
|
+
},
|
|
218
|
+
body: body === undefined ? undefined : JSON.stringify(body),
|
|
219
|
+
});
|
|
220
|
+
if (!response.ok) {
|
|
221
|
+
throw new Error(`Veryfront API request failed: ${response.status} ${response.statusText}`);
|
|
222
|
+
}
|
|
223
|
+
if (response.status === 204)
|
|
224
|
+
return undefined;
|
|
225
|
+
return response.json();
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
get(path, params) {
|
|
229
|
+
return requestJson("GET", path, undefined, params);
|
|
230
|
+
},
|
|
231
|
+
post(path, body) {
|
|
232
|
+
return requestJson("POST", path, body);
|
|
233
|
+
},
|
|
234
|
+
put(path, body) {
|
|
235
|
+
return requestJson("PUT", path, body);
|
|
236
|
+
},
|
|
237
|
+
patch(path, body) {
|
|
238
|
+
return requestJson("PATCH", path, body);
|
|
239
|
+
},
|
|
240
|
+
delete(path) {
|
|
241
|
+
return requestJson("DELETE", path);
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
function getStringArrayConfig(config, keys) {
|
|
246
|
+
for (const key of keys) {
|
|
247
|
+
const value = config[key];
|
|
248
|
+
if (Array.isArray(value)) {
|
|
249
|
+
return value.filter((item) => typeof item === "string" && item.length > 0);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return [];
|
|
253
|
+
}
|
|
254
|
+
function getStringConfig(config, keys) {
|
|
255
|
+
for (const key of keys) {
|
|
256
|
+
const value = config[key];
|
|
257
|
+
if (typeof value === "string" && value.length > 0)
|
|
258
|
+
return value;
|
|
259
|
+
}
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
async function resolveUploadIdsToPaths(client, projectReference, uploadIds) {
|
|
263
|
+
const paths = [];
|
|
264
|
+
for (const uploadId of uploadIds) {
|
|
265
|
+
const upload = await client.get(`/projects/${encodeURIComponent(projectReference)}/uploads/${encodeURIComponent(uploadId)}`);
|
|
266
|
+
if (!upload.path) {
|
|
267
|
+
throw new Error(`Upload not found: ${uploadId}`);
|
|
268
|
+
}
|
|
269
|
+
paths.push(upload.path);
|
|
270
|
+
}
|
|
271
|
+
return paths;
|
|
272
|
+
}
|
|
273
|
+
function createKnowledgeEventLogger(lines) {
|
|
274
|
+
const append = (level, message, metadata) => {
|
|
275
|
+
lines.push(JSON.stringify({ level, message, ...(metadata ?? {}) }));
|
|
276
|
+
};
|
|
277
|
+
const logger = {
|
|
278
|
+
info: (message, metadata) => append("info", message, metadata),
|
|
279
|
+
warn: (message, metadata) => append("warn", message, metadata),
|
|
280
|
+
error: (message, metadata) => append("error", message, metadata),
|
|
281
|
+
debug: (message, metadata) => append("debug", message, metadata),
|
|
282
|
+
async time(_label, fn) {
|
|
283
|
+
return fn();
|
|
284
|
+
},
|
|
285
|
+
child: () => logger,
|
|
286
|
+
component: () => logger,
|
|
287
|
+
};
|
|
288
|
+
return logger;
|
|
289
|
+
}
|
|
290
|
+
async function executeKnowledgeIngestRun(input) {
|
|
291
|
+
const startedAt = Date.now();
|
|
292
|
+
const config = input.request.config ?? {};
|
|
293
|
+
const client = createRuntimeApiClient(input.req, input.ctx);
|
|
294
|
+
const projectReference = input.ctx.projectSlug ?? input.request.projectId;
|
|
295
|
+
const outputDir = await dntShim.Deno.makeTempDir({ prefix: "veryfront-knowledge-run-" });
|
|
296
|
+
const logLines = [];
|
|
297
|
+
try {
|
|
298
|
+
const { buildKnowledgeIngestRunResult, } = await import("../../../../cli/commands/knowledge/result.js");
|
|
299
|
+
const { collectKnowledgeSources, ingestResolvedSources, resolveKnowledgeDownloadOutputDir, runKnowledgeParser, } = await import("../../../../cli/commands/knowledge/command.js");
|
|
300
|
+
const { downloadUploadToFile } = await import("../../../../cli/commands/uploads/command.js");
|
|
301
|
+
const { putRemoteFileFromLocal } = await import("../../../../cli/commands/files/command.js");
|
|
302
|
+
const uploadIds = getStringArrayConfig(config, ["upload_ids", "uploadIds"]);
|
|
303
|
+
const paths = getStringArrayConfig(config, ["paths", "upload_paths", "uploadPaths"]);
|
|
304
|
+
const uploadPaths = [
|
|
305
|
+
...paths,
|
|
306
|
+
...await resolveUploadIdsToPaths(client, projectReference, uploadIds),
|
|
307
|
+
];
|
|
308
|
+
const pathPrefix = getStringConfig(config, [
|
|
309
|
+
"path_prefix",
|
|
310
|
+
"upload_prefix",
|
|
311
|
+
"pathPrefix",
|
|
312
|
+
"uploadPrefix",
|
|
313
|
+
]);
|
|
314
|
+
const knowledgePath = getStringConfig(config, ["knowledge_path", "knowledgePath"]) ??
|
|
315
|
+
"knowledge";
|
|
316
|
+
const description = getStringConfig(config, ["description"]);
|
|
317
|
+
const recursive = config.recursive === undefined ? true : Boolean(config.recursive);
|
|
318
|
+
if (uploadPaths.length > 0 && pathPrefix) {
|
|
319
|
+
throw new Error("Use upload paths or upload prefix, not both.");
|
|
320
|
+
}
|
|
321
|
+
const options = {
|
|
322
|
+
projectSlug: projectReference,
|
|
323
|
+
projectDir: input.ctx.projectDir,
|
|
324
|
+
sources: uploadPaths,
|
|
325
|
+
path: pathPrefix,
|
|
326
|
+
all: pathPrefix !== undefined,
|
|
327
|
+
recursive,
|
|
328
|
+
outputDir,
|
|
329
|
+
knowledgePath,
|
|
330
|
+
description,
|
|
331
|
+
slug: getStringConfig(config, ["slug"]),
|
|
332
|
+
json: true,
|
|
333
|
+
quiet: true,
|
|
334
|
+
};
|
|
335
|
+
const downloadOutputDir = resolveKnowledgeDownloadOutputDir(outputDir);
|
|
336
|
+
const sourceMode = pathPrefix ? "path_prefix" : "explicit_sources";
|
|
337
|
+
const collection = await collectKnowledgeSources(options, {
|
|
338
|
+
client,
|
|
339
|
+
projectSlug: projectReference,
|
|
340
|
+
downloadUploads: (uploadTargets) => Promise.all(uploadTargets.map((uploadPath) => downloadUploadToFile(client, projectReference, uploadPath, downloadOutputDir))),
|
|
341
|
+
});
|
|
342
|
+
const requestedCount = collection.sources.length + collection.skipped.length;
|
|
343
|
+
if (requestedCount === 0) {
|
|
344
|
+
throw new Error("No supported knowledge sources were found.");
|
|
345
|
+
}
|
|
346
|
+
const results = await ingestResolvedSources(collection.sources, options, {
|
|
347
|
+
client,
|
|
348
|
+
projectSlug: projectReference,
|
|
349
|
+
outputDir,
|
|
350
|
+
runParser: runKnowledgeParser,
|
|
351
|
+
eventLogger: createKnowledgeEventLogger(logLines),
|
|
352
|
+
uploadKnowledgeFile: (remotePath, localPath) => putRemoteFileFromLocal(client, projectReference, remotePath, localPath),
|
|
353
|
+
});
|
|
354
|
+
const result = buildKnowledgeIngestRunResult({
|
|
355
|
+
requestedCount,
|
|
356
|
+
sourceMode,
|
|
357
|
+
knowledgePath,
|
|
358
|
+
ingested: results.ingested,
|
|
359
|
+
skipped: collection.skipped,
|
|
360
|
+
failed: results.failed,
|
|
361
|
+
});
|
|
362
|
+
const failedCount = result.summary.failed_count;
|
|
363
|
+
const ingestedCount = result.summary.ingested_count;
|
|
364
|
+
return {
|
|
365
|
+
success: failedCount === 0 && ingestedCount > 0,
|
|
366
|
+
result,
|
|
367
|
+
error: failedCount > 0
|
|
368
|
+
? `${failedCount} knowledge source${failedCount === 1 ? "" : "s"} failed`
|
|
369
|
+
: ingestedCount === 0
|
|
370
|
+
? "No knowledge sources were ingested"
|
|
371
|
+
: null,
|
|
372
|
+
logs: logLines.length > 0 ? logLines.join("\n") : null,
|
|
373
|
+
duration_ms: Date.now() - startedAt,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
catch (error) {
|
|
377
|
+
return {
|
|
378
|
+
success: false,
|
|
379
|
+
error: errorMessage(error),
|
|
380
|
+
logs: logLines.length > 0 ? logLines.join("\n") : null,
|
|
381
|
+
duration_ms: Date.now() - startedAt,
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
finally {
|
|
385
|
+
await dntShim.Deno.remove(outputDir, { recursive: true }).catch(() => undefined);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
const defaultDeps = {
|
|
389
|
+
findTaskById,
|
|
390
|
+
runTask,
|
|
391
|
+
findWorkflowById,
|
|
392
|
+
createWorkflowClient: createRuntimeWorkflowClient,
|
|
393
|
+
executeKnowledgeIngest: executeKnowledgeIngestRun,
|
|
394
|
+
sleep: (ms) => new Promise((resolve) => dntShim.setTimeout(resolve, ms)),
|
|
395
|
+
now: () => Date.now(),
|
|
396
|
+
};
|
|
397
|
+
export class ProjectRunExecuteHandler extends BaseHandler {
|
|
398
|
+
deps;
|
|
399
|
+
metadata = {
|
|
400
|
+
name: "ProjectRunExecuteHandler",
|
|
401
|
+
priority: PRIORITY_MEDIUM_API,
|
|
402
|
+
patterns: [
|
|
403
|
+
{ pattern: CONTROL_PLANE_RUNS_PATH_PREFIX, prefix: true, method: "POST" },
|
|
404
|
+
],
|
|
405
|
+
};
|
|
406
|
+
constructor(deps = defaultDeps) {
|
|
407
|
+
super();
|
|
408
|
+
this.deps = deps;
|
|
409
|
+
}
|
|
410
|
+
async handle(req, ctx) {
|
|
411
|
+
if (!this.shouldHandle(req, ctx)) {
|
|
412
|
+
return this.continue();
|
|
413
|
+
}
|
|
414
|
+
const runId = getRunId(new URL(req.url).pathname);
|
|
415
|
+
if (!runId) {
|
|
416
|
+
return this.continue();
|
|
417
|
+
}
|
|
418
|
+
return this.withProxyContext(ctx, async () => {
|
|
419
|
+
const builder = this.createResponseBuilder(ctx)
|
|
420
|
+
.withCORS(req, ctx.securityConfig?.cors)
|
|
421
|
+
.withSecurity(ctx.securityConfig ?? undefined, req);
|
|
422
|
+
try {
|
|
423
|
+
const rawBody = await readInternalAgentRequestBody(req, INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES);
|
|
424
|
+
const request = parseExecuteRequest(JSON.parse(rawBody), runId);
|
|
425
|
+
const claims = await verifyControlPlaneRequest(req, ctx, rawBody, {
|
|
426
|
+
expectedSubject: runId,
|
|
427
|
+
expectedSurface: "studio",
|
|
428
|
+
});
|
|
429
|
+
if (request.projectId !== claims.project_id ||
|
|
430
|
+
(ctx.projectId !== undefined && request.projectId !== ctx.projectId)) {
|
|
431
|
+
return this.respond(builder.json({ error: "Invalid control-plane signature" }, 401));
|
|
432
|
+
}
|
|
433
|
+
const startedAt = this.deps.now();
|
|
434
|
+
try {
|
|
435
|
+
const response = request.kind === "task" && request.target === "task:knowledge-ingest"
|
|
436
|
+
? await this.deps.executeKnowledgeIngest({ request, ctx, req })
|
|
437
|
+
: request.kind === "task"
|
|
438
|
+
? await executeTaskRun(request, ctx, this.deps)
|
|
439
|
+
: await executeWorkflowRun(request, ctx, this.deps);
|
|
440
|
+
return this.respond(builder.json(response, 200));
|
|
441
|
+
}
|
|
442
|
+
catch (error) {
|
|
443
|
+
return this.respond(builder.json(createExecutionFailure(error, Math.max(0, this.deps.now() - startedAt)), 200));
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
catch (error) {
|
|
447
|
+
if (error instanceof InternalAgentRequestBodyTooLargeError) {
|
|
448
|
+
return this.respond(builder.json({ error: error.message }, error.status));
|
|
449
|
+
}
|
|
450
|
+
if (error instanceof ControlPlaneRequestError) {
|
|
451
|
+
return this.respond(builder.json({ error: error.message }, error.status));
|
|
452
|
+
}
|
|
453
|
+
if (error instanceof SyntaxError || error instanceof Error) {
|
|
454
|
+
return this.respond(builder.json({ error: "Invalid project run execute request" }, 400));
|
|
455
|
+
}
|
|
456
|
+
return this.respond(builder.json({ error: "Invalid project run execute request" }, 400));
|
|
457
|
+
}
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
}
|
|
@@ -13,7 +13,7 @@ import type { Handler } from "../../types/index.js";
|
|
|
13
13
|
import { ApiHandlerWrapper } from "../handlers/request/api/index.js";
|
|
14
14
|
export { parseProxyEnvironment, type ProxyEnvironment } from "./proxy-environment.js";
|
|
15
15
|
/** Handler names in registration order. */
|
|
16
|
-
export declare const HANDLER_NAMES: readonly ["AuthHandler", "CsrfHandler", "HMRHandler", "CorsHandler", "HealthHandler", "MetricsHandler", "MemoryDebugHandler", "ClientLogHandler", "DevEndpointsHandler", "StylesCSSHandler", "DebugContextHandler", "OpenAPIHandler", "OpenAPIDocsHandler", "InternalAgentsListHandler", "AgentStreamHandler", "AgentRunResumeHandler", "AgentRunCancelHandler", "ChannelInvokeHandler", "DevDashboardHandler", "ProjectsHandler", "StudioBridgeModulesHandler", "ProdHydrationModuleHandler", "CSSHandler", "DevFileHandler", "SnippetHandler", "StaticHandler", "LibModulesHandler", "RSCHandler", "ModuleHandler", "ApiHandlerWrapper", "MarkdownPreviewHandler", "SSRHandler", "NotFoundHandler"];
|
|
16
|
+
export declare const HANDLER_NAMES: readonly ["AuthHandler", "CsrfHandler", "HMRHandler", "CorsHandler", "HealthHandler", "MetricsHandler", "MemoryDebugHandler", "ClientLogHandler", "DevEndpointsHandler", "StylesCSSHandler", "DebugContextHandler", "OpenAPIHandler", "OpenAPIDocsHandler", "InternalAgentsListHandler", "AgentStreamHandler", "AgentRunResumeHandler", "AgentRunCancelHandler", "ProjectRunExecuteHandler", "ChannelInvokeHandler", "DevDashboardHandler", "ProjectsHandler", "StudioBridgeModulesHandler", "ProdHydrationModuleHandler", "CSSHandler", "DevFileHandler", "SnippetHandler", "StaticHandler", "LibModulesHandler", "RSCHandler", "ModuleHandler", "ApiHandlerWrapper", "MarkdownPreviewHandler", "SSRHandler", "NotFoundHandler"];
|
|
17
17
|
/** Union of all registered handler names. */
|
|
18
18
|
export type HandlerName = (typeof HANDLER_NAMES)[number];
|
|
19
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAgCpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAgCpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAiErE,OAAO,EAAE,qBAAqB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAMtF,2CAA2C;AAC3C,eAAO,MAAM,aAAa,msBAmChB,CAAC;AAEX,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA2CD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,IAAI,GAAE,mBAAwB,GAC7B;IAAE,QAAQ,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,iBAAiB,CAAA;CAAE,CAuB5D;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,oFAAoF;IACpF,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uGAAuG;IACvG,kBAAkB,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;CAC/C;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,IAAI,GAAE,qBAAsC,GAC3C,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAibnE;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -48,6 +48,7 @@ import { InternalAgentsListHandler } from "../handlers/request/internal-agents-l
|
|
|
48
48
|
import { AgentStreamHandler } from "../handlers/request/agent-stream.handler.js";
|
|
49
49
|
import { AgentRunResumeHandler } from "../handlers/request/agent-run-resume.handler.js";
|
|
50
50
|
import { AgentRunCancelHandler } from "../handlers/request/agent-run-cancel.handler.js";
|
|
51
|
+
import { ProjectRunExecuteHandler } from "../handlers/request/project-run-execute.handler.js";
|
|
51
52
|
import { ChannelInvokeHandler } from "../handlers/request/channel-invoke.handler.js";
|
|
52
53
|
import { DevDashboardHandler } from "../handlers/dev/dashboard/index.js";
|
|
53
54
|
import { ProjectsHandler } from "../handlers/dev/projects/index.js";
|
|
@@ -89,6 +90,7 @@ export const HANDLER_NAMES = [
|
|
|
89
90
|
"AgentStreamHandler",
|
|
90
91
|
"AgentRunResumeHandler",
|
|
91
92
|
"AgentRunCancelHandler",
|
|
93
|
+
"ProjectRunExecuteHandler",
|
|
92
94
|
"ChannelInvokeHandler",
|
|
93
95
|
"DevDashboardHandler",
|
|
94
96
|
"ProjectsHandler",
|
|
@@ -125,6 +127,7 @@ const handlerFactories = {
|
|
|
125
127
|
AgentStreamHandler: () => new AgentStreamHandler(),
|
|
126
128
|
AgentRunResumeHandler: () => new AgentRunResumeHandler(),
|
|
127
129
|
AgentRunCancelHandler: () => new AgentRunCancelHandler(),
|
|
130
|
+
ProjectRunExecuteHandler: () => new ProjectRunExecuteHandler(),
|
|
128
131
|
ChannelInvokeHandler: () => new ChannelInvokeHandler(),
|
|
129
132
|
DevDashboardHandler: () => new DevDashboardHandler(),
|
|
130
133
|
ProjectsHandler: () => new ProjectsHandler(),
|
|
@@ -6,8 +6,6 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export type { RunExecutionConfig, RunExecutionInfo, RunExecutionStatus, RunExecutor, } from "./types.js";
|
|
8
8
|
export { isRunExecutor } from "./types.js";
|
|
9
|
-
export { K8sRunExecutor } from "./k8s.js";
|
|
10
|
-
export type { K8sClient, K8sRunExecutionSpec, K8sRunExecutionStatusResponse, K8sRunExecutorConfig, } from "./k8s.js";
|
|
11
9
|
export { ProcessRunExecutor } from "./process.js";
|
|
12
10
|
export type { ProcessRunExecutorConfig } from "./process.js";
|
|
13
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/workflow/worker/executors/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/workflow/worker/executors/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Abstraction layer for executing workflow runs in isolated environments.
|
|
5
5
|
* Implementations can target different runtimes:
|
|
6
|
-
* - Kubernetes Jobs
|
|
7
6
|
* - Docker containers
|
|
8
7
|
* - Local processes
|
|
9
8
|
* - Cloud Run / Lambda / Fargate
|
|
@@ -57,22 +56,6 @@ export interface RunExecutionInfo {
|
|
|
57
56
|
* Abstracts the runtime environment for executing workflow runs.
|
|
58
57
|
* Each implementation handles the specifics of its target platform.
|
|
59
58
|
*
|
|
60
|
-
* @example K8s
|
|
61
|
-
* ```typescript
|
|
62
|
-
* const executor = new K8sRunExecutor({
|
|
63
|
-
* namespace: "workflows",
|
|
64
|
-
* image: "my-app:latest",
|
|
65
|
-
* });
|
|
66
|
-
* ```
|
|
67
|
-
*
|
|
68
|
-
* @example Docker
|
|
69
|
-
* ```typescript
|
|
70
|
-
* const executor = new DockerRunExecutor({
|
|
71
|
-
* image: "my-app:latest",
|
|
72
|
-
* network: "workflow-network",
|
|
73
|
-
* });
|
|
74
|
-
* ```
|
|
75
|
-
*
|
|
76
59
|
* @example Local Process
|
|
77
60
|
* ```typescript
|
|
78
61
|
* const executor = new ProcessRunExecutor({
|
|
@@ -80,6 +63,13 @@ export interface RunExecutionInfo {
|
|
|
80
63
|
* args: ["run", "run-entrypoint.ts"],
|
|
81
64
|
* });
|
|
82
65
|
* ```
|
|
66
|
+
*
|
|
67
|
+
* @example Custom runtime target
|
|
68
|
+
* ```typescript
|
|
69
|
+
* const executor = new RuntimeTargetExecutor({
|
|
70
|
+
* invokeUrl: "https://project.example.com/api/control-plane/runs",
|
|
71
|
+
* });
|
|
72
|
+
* ```
|
|
83
73
|
*/
|
|
84
74
|
export interface RunExecutor {
|
|
85
75
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/src/workflow/worker/executors/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/src/workflow/worker/executors/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IAEpB,8BAA8B;IAC9B,GAAG,EAAE,WAAW,CAAC;IAEjB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAElB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAEhB,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE5B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5F;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IAEpB,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IAEd,qBAAqB;IACrB,MAAM,EAAE,kBAAkB,CAAC;IAE3B,iCAAiC;IACjC,SAAS,EAAE,IAAI,CAAC;IAEhB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,IAAI,CAAC;IAEjB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,IAAI,CAAC;IAEnB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhE;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAE7E;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAElE;;;OAGG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;;OAGG;IACH,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B;;;OAGG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,WAAW,CAS9D"}
|
|
@@ -3,22 +3,16 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Provides distributed workflow execution support.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* Two execution profiles are available:
|
|
7
7
|
*
|
|
8
8
|
* 1. **WorkflowWorker** - In-process polling worker
|
|
9
9
|
* - Polls for stalled workflows and resumes them
|
|
10
10
|
* - Good for trusted code or single-tenant deployments
|
|
11
11
|
* - Simple setup, lower overhead
|
|
12
12
|
*
|
|
13
|
-
* 2. **WorkflowRunManager +
|
|
14
|
-
* - Each workflow runs in an ephemeral container
|
|
15
|
-
* - Complete tenant isolation (no shared state)
|
|
16
|
-
* - Required for multi-tenant untrusted code execution
|
|
17
|
-
*
|
|
18
|
-
* 3. **WorkflowRunManager + ProcessRunExecutor** - Local process execution
|
|
13
|
+
* 2. **WorkflowRunManager + ProcessRunExecutor** - Local process execution
|
|
19
14
|
* - Spawns child processes for each workflow
|
|
20
15
|
* - Good for local development without K8s/Docker
|
|
21
|
-
* - Mirrors production behavior
|
|
22
16
|
*
|
|
23
17
|
* A workflow run can be backed by a run executor without introducing another
|
|
24
18
|
* user-visible execution type.
|
|
@@ -26,7 +20,7 @@
|
|
|
26
20
|
import "../../../_dnt.polyfills.js";
|
|
27
21
|
export { createWorkflowWorker, type WorkerStats, type WorkerStatus, WorkflowWorker, type WorkflowWorkerConfig, } from "./workflow-worker.js";
|
|
28
22
|
export { createWorkflowRunManager, type ManagerStats, type ManagerStatus, WorkflowRunManager, type WorkflowRunManagerConfig, } from "./run-manager.js";
|
|
29
|
-
export { isRunExecutor,
|
|
23
|
+
export { isRunExecutor, ProcessRunExecutor, type ProcessRunExecutorConfig, type RunExecutionConfig, type RunExecutionInfo, type RunExecutionStatus, type RunExecutor, } from "./executors/index.js";
|
|
30
24
|
export { createWorkflowRunEntrypoint, type CreateWorkflowRunEntrypointOptions, EXIT_CODES, runWorkflowRun, type WorkflowRunEntrypointConfig, } from "./run-entrypoint.js";
|
|
31
25
|
export { createDynamicWorkflowRunEntrypoint, type CreateDynamicWorkflowRunEntrypointOptions, DYNAMIC_EXIT_CODES, type DynamicWorkflowRunEntrypointConfig, runDynamicWorkflowRun, } from "./dynamic-run-entrypoint.js";
|
|
32
26
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,4BAA4B,CAAC;AAEpC,OAAO,EACL,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,cAAc,EACd,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,wBAAwB,EACxB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,kBAAkB,EAClB,KAAK,wBAAwB,GAC9B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,WAAW,GACjB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EACL,2BAA2B,EAC3B,KAAK,kCAAkC,EACvC,UAAU,EACV,cAAc,EACd,KAAK,2BAA2B,GACjC,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EACL,kCAAkC,EAClC,KAAK,yCAAyC,EAC9C,kBAAkB,EAClB,KAAK,kCAAkC,EACvC,qBAAqB,GACtB,MAAM,6BAA6B,CAAC"}
|