@ingestron/core 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +6 -0
  3. package/README.md +56 -0
  4. package/SECURITY.md +44 -0
  5. package/THIRD_PARTY_NOTICES.md +693 -0
  6. package/dist/assets/schemas/ODCS-LICENSE +201 -0
  7. package/dist/assets/schemas/odcs-3.1.0.json +2929 -0
  8. package/dist/assets/schemas/provenance.json +16 -0
  9. package/dist/compiler-fingerprint.json +84 -0
  10. package/dist/core/authoring.d.ts +55 -0
  11. package/dist/core/authoring.js +315 -0
  12. package/dist/core/config.d.ts +34 -0
  13. package/dist/core/config.js +233 -0
  14. package/dist/core/connections.d.ts +19 -0
  15. package/dist/core/connections.js +203 -0
  16. package/dist/core/connector-package.d.ts +37 -0
  17. package/dist/core/connector-package.js +43 -0
  18. package/dist/core/contracts.d.ts +8 -0
  19. package/dist/core/contracts.js +45 -0
  20. package/dist/core/deliveries.d.ts +16 -0
  21. package/dist/core/deliveries.js +28 -0
  22. package/dist/core/delivery-exports.d.ts +20 -0
  23. package/dist/core/delivery-exports.js +119 -0
  24. package/dist/core/development.d.ts +50 -0
  25. package/dist/core/development.js +94 -0
  26. package/dist/core/ecosystem-authoring.d.ts +13 -0
  27. package/dist/core/ecosystem-authoring.js +82 -0
  28. package/dist/core/errors.d.ts +12 -0
  29. package/dist/core/errors.js +43 -0
  30. package/dist/core/execution.d.ts +28 -0
  31. package/dist/core/execution.js +297 -0
  32. package/dist/core/extension-packs.d.ts +8 -0
  33. package/dist/core/extension-packs.js +34 -0
  34. package/dist/core/fingerprint.d.ts +1 -0
  35. package/dist/core/fingerprint.js +16 -0
  36. package/dist/core/generate.d.ts +16 -0
  37. package/dist/core/generate.js +198 -0
  38. package/dist/core/installation.d.ts +3 -0
  39. package/dist/core/installation.js +14 -0
  40. package/dist/core/installed-plugins.d.ts +41 -0
  41. package/dist/core/installed-plugins.js +92 -0
  42. package/dist/core/model-pack-schema.d.ts +46 -0
  43. package/dist/core/model-pack-schema.js +81 -0
  44. package/dist/core/model-packs.d.ts +4 -0
  45. package/dist/core/model-packs.js +33 -0
  46. package/dist/core/operations.d.ts +346 -0
  47. package/dist/core/operations.js +760 -0
  48. package/dist/core/package-references.d.ts +36 -0
  49. package/dist/core/package-references.js +103 -0
  50. package/dist/core/packages.d.ts +340 -0
  51. package/dist/core/packages.js +579 -0
  52. package/dist/core/planner.d.ts +114 -0
  53. package/dist/core/planner.js +821 -0
  54. package/dist/core/project-build.d.ts +13 -0
  55. package/dist/core/project-build.js +266 -0
  56. package/dist/core/provider-commands.d.ts +83 -0
  57. package/dist/core/provider-commands.js +252 -0
  58. package/dist/core/provider-starter.d.ts +5 -0
  59. package/dist/core/provider-starter.js +155 -0
  60. package/dist/core/report-pack-schema.d.ts +13 -0
  61. package/dist/core/report-pack-schema.js +15 -0
  62. package/dist/core/schema.d.ts +257 -0
  63. package/dist/core/schema.js +126 -0
  64. package/dist/core/workflows.d.ts +91 -0
  65. package/dist/core/workflows.js +438 -0
  66. package/dist/plugins/authoring.d.ts +88 -0
  67. package/dist/plugins/authoring.js +34 -0
  68. package/dist/plugins/compatibility.d.ts +23 -0
  69. package/dist/plugins/compatibility.js +55 -0
  70. package/dist/plugins/generation.d.ts +5 -0
  71. package/dist/plugins/generation.js +105 -0
  72. package/dist/plugins/provider-renderer.d.ts +7 -0
  73. package/dist/plugins/provider-renderer.js +37 -0
  74. package/dist/plugins/provider-worker.d.ts +1 -0
  75. package/dist/plugins/provider-worker.js +74 -0
  76. package/dist/sdk/adapter.d.ts +15 -0
  77. package/dist/sdk/adapter.js +15 -0
  78. package/dist/sdk/index.d.ts +4 -0
  79. package/dist/sdk/index.js +3 -0
  80. package/dist/sdk/schemas.d.ts +34 -0
  81. package/dist/sdk/schemas.js +74 -0
  82. package/dist/version.d.ts +5 -0
  83. package/dist/version.js +7 -0
  84. package/package.json +72 -0
@@ -0,0 +1,119 @@
1
+ import { canonical, check, digest } from "./errors.js";
2
+ /** Partition compilation only. This never schedules jobs or asserts data exists. */
3
+ export function deliveryExports(plan) {
4
+ const groups = new Map();
5
+ const owner = new Map();
6
+ for (const node of plan.nodes) {
7
+ check(plan.selection.projectBuild || node.runtime?.capabilities?.delivery, "CAPABILITY", `Provider configuration ${node.runtime?.configuration} must opt in to delivery exports`);
8
+ check(node.runtime?.configuration, "PROVIDER", "Native node needs a provider configuration");
9
+ const id = plan.selection.projectBuild
10
+ ? node.runtime.configuration
11
+ : `${node.exportGroup ?? node.flow}/${node.runtime.configuration}`;
12
+ if (!groups.has(id))
13
+ groups.set(id, []);
14
+ groups.get(id).push(node);
15
+ owner.set(node.id, id);
16
+ }
17
+ const claims = new Map();
18
+ for (const [group, nodes] of groups)
19
+ for (const node of nodes)
20
+ for (const resource of node.resources ?? []) {
21
+ const identity = canonical([
22
+ node.platform,
23
+ resource.scope,
24
+ resource.kind,
25
+ resource.name,
26
+ ]);
27
+ check(!claims.has(identity) || claims.get(identity) === group, "OWNER", `Native ${resource.kind} ${resource.name} is claimed by exports ${claims.get(identity)} and ${group}; use one export group`);
28
+ claims.set(identity, group);
29
+ }
30
+ const exports = [...groups].map(([id, nodes]) => {
31
+ const ids = new Set(nodes.map((n) => n.id));
32
+ const imports = [];
33
+ for (const node of nodes)
34
+ for (const dependency of node.needs) {
35
+ if (ids.has(dependency))
36
+ continue;
37
+ const flow = plan.flows.find((f) => f.id === node.flow);
38
+ const requirements = Object.values(flow.requires).filter((r) => plan.datasets[r.dataset]?.producer === dependency);
39
+ check(requirements.length, "HANDOVER", `Export ${id} requires an explicit handover for ${dependency}`);
40
+ for (const required of requirements) {
41
+ check(required.handover, "HANDOVER", `Export ${id} requires an explicit handover for ${dependency}`);
42
+ const dataset = plan.datasets[required.dataset];
43
+ if (!imports.some((i) => i.dataset === required.dataset))
44
+ imports.push({
45
+ dataset: required.dataset,
46
+ producer: owner.get(dependency),
47
+ kind: required.handover,
48
+ location: dataset.location,
49
+ contract: dataset.contract,
50
+ });
51
+ }
52
+ }
53
+ imports.sort((a, b) => a.dataset < b.dataset ? -1 : a.dataset > b.dataset ? 1 : 0);
54
+ const refs = new Set(nodes
55
+ .flatMap((n) => [
56
+ n.runtime?.rendererRef,
57
+ n.runtime?.lifecycleRef,
58
+ n.runtime?.outputSchemasRef,
59
+ n.generation?.runtimeRef,
60
+ n.generation?.codeRef,
61
+ ])
62
+ .filter(Boolean));
63
+ const bindings = new Set(nodes.flatMap((n) => [n.binding, n.source?.binding]).filter(Boolean));
64
+ for (const input of imports)
65
+ bindings.add(input.location.binding);
66
+ for (const dataset of Object.values(plan.datasets))
67
+ if (ids.has(dataset.producer) &&
68
+ typeof dataset.location?.binding === "string")
69
+ bindings.add(dataset.location.binding);
70
+ const { digest: _digest, ...body } = plan;
71
+ const partBody = {
72
+ ...body,
73
+ selection: {},
74
+ nodes: nodes.map((n) => ({
75
+ ...n,
76
+ needs: n.needs.filter((d) => ids.has(d)),
77
+ })),
78
+ flows: plan.flows.filter((f) => nodes.some((n) => n.flow === f.id)),
79
+ datasets: Object.fromEntries(Object.entries(plan.datasets).filter(([key, d]) => ids.has(d.producer) || imports.some((i) => i.dataset === key))),
80
+ bindings: Object.fromEntries(Object.entries(plan.bindings).filter(([key]) => bindings.has(key))),
81
+ activitySources: Object.fromEntries(Object.entries(plan.activitySources).filter(([key]) => refs.has(key))),
82
+ names: {
83
+ nodes: Object.fromEntries(Object.entries(plan.names.nodes).filter(([key]) => ids.has(key))),
84
+ jobs: Object.fromEntries(Object.entries(plan.names.jobs).filter(([key]) => nodes.some((n) => n.flow === key))),
85
+ },
86
+ recovery: plan.recovery.filter((r) => nodes.some((n) => n.flow === r.flow)),
87
+ delivery: { exportId: id, imports },
88
+ };
89
+ const part = { ...partBody, digest: digest(canonical(partBody)) };
90
+ return {
91
+ id,
92
+ directory: `exports/${id}`,
93
+ needs: [...new Set(imports.map((i) => i.producer))].sort(),
94
+ imports,
95
+ resources: [
96
+ ...new Map(nodes.flatMap((n) => n.resources ?? []).map((r) => [canonical(r), r])).values(),
97
+ ],
98
+ plan: part,
99
+ };
100
+ });
101
+ const ordered = [], active = new Set(), done = new Set();
102
+ const visit = (id) => {
103
+ check(!active.has(id), "CYCLE", `Delivery export dependency cycle at ${id}`);
104
+ if (done.has(id))
105
+ return;
106
+ const entry = exports.find((e) => e.id === id);
107
+ check(entry, "HANDOVER", `Missing delivery export ${id}`);
108
+ active.add(id);
109
+ entry.needs.forEach(visit);
110
+ active.delete(id);
111
+ done.add(id);
112
+ ordered.push(entry);
113
+ };
114
+ exports
115
+ .map((e) => e.id)
116
+ .sort()
117
+ .forEach(visit);
118
+ return ordered;
119
+ }
@@ -0,0 +1,50 @@
1
+ export declare function activityInspect(root: string, path: string): {
2
+ manifest: {
3
+ apiVersion: "ingestron.activity/v1";
4
+ id: string;
5
+ version: string;
6
+ description: string;
7
+ platform: string;
8
+ input: "committed" | "files" | "relation" | "source";
9
+ output: "committed" | "files" | "relation";
10
+ effect: "commit" | "control" | "read" | "stage";
11
+ capabilities: string[];
12
+ optionsSchema: Record<string, unknown>;
13
+ generator?: {
14
+ kind: "native-notebook" | "native-pipeline" | "native-project";
15
+ artifactKind?: string | undefined;
16
+ execution?: string | undefined;
17
+ persistence?: "capture" | "durable" | "ephemeral" | undefined;
18
+ runtime?: string | undefined;
19
+ code?: string | undefined;
20
+ scope: "collection" | "table";
21
+ modes: ("collection" | "table")[];
22
+ groupBy: string[];
23
+ dependencyOptions: Record<string, string>;
24
+ entrypoint: string;
25
+ } | undefined;
26
+ requirements?: {
27
+ execution: string;
28
+ features: string[];
29
+ sourceKinds?: string[] | undefined;
30
+ evidence: "offline";
31
+ } | undefined;
32
+ templates: {
33
+ source: string;
34
+ output: string;
35
+ format: "json" | "python" | "sql" | "text" | "yaml";
36
+ }[];
37
+ dependencies: Record<string, string>;
38
+ };
39
+ generationSource: string | undefined;
40
+ templates: {
41
+ source: string;
42
+ output: string;
43
+ format: "json" | "python" | "sql" | "text" | "yaml";
44
+ content: string;
45
+ }[];
46
+ sourceDigests: Record<string, string>;
47
+ evidence: string;
48
+ };
49
+ export declare function contractDraft(root: string, path: string, id: string, out: string): import("./authoring.js").Proposal;
50
+ export declare function exportProviderArtifacts(root: string, path: string, directory: string): import("./authoring.js").Proposal;
@@ -0,0 +1,94 @@
1
+ import { Configuration } from "./config.js";
2
+ import { externalActivitySchema, packageYaml } from "./packages.js";
3
+ import { contractColumns, validateContract } from "./contracts.js";
4
+ import { preview } from "./authoring.js";
5
+ import { check, isMap } from "./errors.js";
6
+ import { existsSync } from "node:fs";
7
+ import { resolve } from "node:path";
8
+ import { fence } from "./packages.js";
9
+ import { stringify } from "yaml";
10
+ export function activityInspect(root, path) {
11
+ const reader = new Configuration(root), file = reader.path(path);
12
+ const manifest = externalActivitySchema.parse(packageYaml(file));
13
+ reader.text(file);
14
+ const generationSource = manifest.generator?.code
15
+ ? reader.text(manifest.generator.code, file)
16
+ : undefined;
17
+ const templates = manifest.templates.map((t) => ({
18
+ ...t,
19
+ content: reader.text(t.source, file),
20
+ }));
21
+ return {
22
+ manifest,
23
+ generationSource,
24
+ templates,
25
+ sourceDigests: reader.files,
26
+ evidence: "Manifest and source inventory only; no activity code executed. Composition is checked by the owning provider.",
27
+ };
28
+ }
29
+ export function contractDraft(root, path, id, out) {
30
+ const reader = new Configuration(root), metadata = reader.load(path);
31
+ check(Array.isArray(metadata.columns) && metadata.columns.length, "METADATA", "Imported metadata needs a non-empty columns array");
32
+ const types = {
33
+ string: "string",
34
+ integer: "integer",
35
+ number: "number",
36
+ boolean: "boolean",
37
+ date: "date",
38
+ timestamp: "timestamp",
39
+ };
40
+ const contract = {
41
+ apiVersion: "v3.1.0",
42
+ kind: "DataContract",
43
+ id,
44
+ name: id,
45
+ version: "1.0.0",
46
+ status: "draft",
47
+ schema: [
48
+ {
49
+ name: id,
50
+ physicalName: metadata.table ?? id,
51
+ logicalType: "object",
52
+ physicalType: "table",
53
+ properties: metadata.columns.map((c) => {
54
+ check(types[c.logicalType], "METADATA", `Review logicalType for ${c.name}`);
55
+ return {
56
+ name: c.name,
57
+ logicalType: c.logicalType,
58
+ ...(c.physicalType ? { physicalType: c.physicalType } : {}),
59
+ required: c.required ?? false,
60
+ ...(c.primaryKey ? { primaryKey: true } : {}),
61
+ };
62
+ }),
63
+ },
64
+ ],
65
+ };
66
+ contractColumns(contract);
67
+ return preview(root, { [out]: stringify(contract) });
68
+ }
69
+ export function exportProviderArtifacts(root, path, directory) {
70
+ const reader = new Configuration(root), envelope = JSON.parse(reader.text(path));
71
+ check(envelope.apiVersion === "ingestron.provider-command-result/v1" &&
72
+ envelope.execution === "offline-json", "PROVIDER", "Expected a saved offline provider command result");
73
+ const proposal = envelope.result;
74
+ check(proposal?.apiVersion === "ingestron.artifact-proposal/v1" &&
75
+ isMap(proposal.artifacts), "PROVIDER", "Provider did not return exportable artifacts");
76
+ const entries = Object.entries(proposal.artifacts);
77
+ check(entries.length > 0 && entries.length <= 200, "LIMIT", "Export requires 1–200 artifacts");
78
+ const files = {};
79
+ for (const [name, value] of entries) {
80
+ check(/^(?:[A-Za-z0-9_-][A-Za-z0-9_.-]*\/)*[A-Za-z0-9_-][A-Za-z0-9_.-]*\.(json|yaml|yml|sql|py|mjs|txt|md|pbip|pbir|pbism|bim|svg)$/.test(name) &&
81
+ typeof value === "string" &&
82
+ value.length <= 2000000, "PROVIDER", "Invalid artifact name or content");
83
+ const target = directory + "/" + name;
84
+ fence(root, target);
85
+ check(!existsSync(resolve(root, target)), "OWNER", `Existing artifact ${target}; choose a new export directory`);
86
+ if (/\.(json|pbip|pbir|pbism|bim)$/.test(name)) {
87
+ const doc = JSON.parse(value);
88
+ if (name.endsWith(".odcs.json"))
89
+ validateContract(doc);
90
+ }
91
+ files[target] = value;
92
+ }
93
+ return preview(root, files);
94
+ }
@@ -0,0 +1,13 @@
1
+ export declare function configurePack(root: string, args: {
2
+ reference: string;
3
+ name: string;
4
+ provider?: string;
5
+ }): import("./authoring.js").Proposal;
6
+ export declare function configureFlow(root: string, args: {
7
+ id: string;
8
+ group?: string;
9
+ input?: string;
10
+ dataset?: string;
11
+ handover?: "files" | "relation";
12
+ table?: string;
13
+ }): import("./authoring.js").Proposal;
@@ -0,0 +1,82 @@
1
+ import { validateModelPack } from "./model-pack-schema.js";
2
+ import { parseDocument } from "yaml";
3
+ import { Configuration } from "./config.js";
4
+ import { preview } from "./authoring.js";
5
+ import { check } from "./errors.js";
6
+ import { projectSchema } from "./schema.js";
7
+ import { extensionPackSchema, packageYaml, resolvePackage, providerPackageSchema, } from "./packages.js";
8
+ import { extensionActivities } from "./extension-packs.js";
9
+ import { checkProviderCompatibility } from "../plugins/compatibility.js";
10
+ export function configurePack(root, args) {
11
+ const reader = new Configuration(root), doc = parseDocument(reader.text("project.yaml"));
12
+ const source = resolvePackage(root, args.reference);
13
+ const manifest = packageYaml(source.file);
14
+ if (manifest.apiVersion === "ingestron.extension-pack/v2") {
15
+ validateModelPack(manifest);
16
+ check(!args.provider, "MODEL_PACK", "Model packs are independent of provider configurations; omit provider");
17
+ const project = projectSchema.parse(reader.load());
18
+ check(!project.modelPacks[args.name], "MODEL_PACK", "Model pack alias already exists");
19
+ const split = args.reference.lastIndexOf("@");
20
+ check(split > 0, "MODEL_PACK", "Select an exact installed model pack");
21
+ doc.setIn(["modelPacks", args.name], {
22
+ source: args.reference.slice(0, split),
23
+ version: args.reference.slice(split + 1).replace(/^v(?=\d)/, ""),
24
+ });
25
+ return preview(root, { "project.yaml": doc.toString() });
26
+ }
27
+ check(manifest.apiVersion !== "ingestron.extension-pack/v3", "REPORT_PACK", "Report packs are selected by exact reference in report build input, not attached as activities");
28
+ extensionPackSchema.parse(manifest);
29
+ check(args.provider, "PACK", "Activity preset packs require a provider configuration");
30
+ const project = projectSchema.parse(reader.load());
31
+ const configuration = project.providers.configurations[args.provider];
32
+ check(configuration, "PROVIDER", "Unknown provider configuration");
33
+ check(!project.providers.packs[args.name], "PACK", "Pack name already exists");
34
+ const pkg = project.providers.packages[configuration.package];
35
+ const file = pkg.source.startsWith(".")
36
+ ? reader.path(pkg.source)
37
+ : resolvePackage(root, `${pkg.source}@${pkg.version}`).file;
38
+ const provider = providerPackageSchema.parse(packageYaml(file));
39
+ checkProviderCompatibility(provider);
40
+ const split = args.reference.lastIndexOf("@");
41
+ check(split > 0, "PACK", "Use an exact installed pack reference");
42
+ const selection = {
43
+ source: args.reference.slice(0, split),
44
+ version: args.reference.slice(split + 1).replace(/^v(?=\d)/, ""),
45
+ };
46
+ project.providers.packs[args.name] = selection;
47
+ extensionActivities(reader, project, [args.name], provider);
48
+ doc.setIn(["providers", "packs", args.name], selection);
49
+ doc.setIn(["providers", "configurations", args.provider, "packs"], [...configuration.packs, args.name]);
50
+ return preview(root, { "project.yaml": doc.toString() });
51
+ }
52
+ export function configureFlow(root, args) {
53
+ const reader = new Configuration(root), project = parseDocument(reader.text("project.yaml"));
54
+ const entries = project.toJS().flows ?? [];
55
+ for (let i = 0; i < entries.length; i++) {
56
+ const entry = entries[i], file = entry.$resolve ? reader.path(entry.$resolve) : "project.yaml";
57
+ const doc = entry.$resolve ? parseDocument(reader.text(file)) : project;
58
+ const prefix = entry.$resolve ? [] : ["flows", i];
59
+ if (doc.getIn([...prefix, "id"]) !== args.id)
60
+ continue;
61
+ if (args.group)
62
+ doc.setIn([...prefix, "export"], args.group);
63
+ else {
64
+ check(args.input && args.dataset && args.handover, "HANDOVER", "Supply input, dataset and handover");
65
+ check(!doc.hasIn([...prefix, "requires", args.input]), "HANDOVER", "Input already exists");
66
+ doc.setIn([...prefix, "requires", args.input], {
67
+ dataset: args.dataset,
68
+ select: { mode: "same-run" },
69
+ handover: args.handover,
70
+ });
71
+ if (args.table) {
72
+ check(args.handover === "files" &&
73
+ doc.hasIn([...prefix, "tables", args.table]), "HANDOVER", "Select an existing ingestion table for a file input");
74
+ doc.setIn([...prefix, "tables", args.table, "source"], {
75
+ from: `requires.${args.input}`,
76
+ });
77
+ }
78
+ }
79
+ return preview(root, { [file]: doc.toString() });
80
+ }
81
+ throw new Error(`Unknown flow ${args.id}`);
82
+ }
@@ -0,0 +1,12 @@
1
+ export declare class Problem extends Error {
2
+ code: string;
3
+ file?: string | undefined;
4
+ pointer?: string | undefined;
5
+ hint?: string | undefined;
6
+ constructor(code: string, message: string, file?: string | undefined, pointer?: string | undefined, hint?: string | undefined);
7
+ }
8
+ export declare function check(condition: unknown, code: string, message: string, file?: string): asserts condition;
9
+ export declare const digest: (value: string | Buffer) => string;
10
+ export declare const canonical: (value: any) => string;
11
+ export declare const isMap: (v: unknown) => v is Record<string, any>;
12
+ export declare function merge(a: any, b: any): any;
@@ -0,0 +1,43 @@
1
+ import { createHash } from "node:crypto";
2
+ export class Problem extends Error {
3
+ code;
4
+ file;
5
+ pointer;
6
+ hint;
7
+ constructor(code, message, file, pointer, hint) {
8
+ super(message);
9
+ this.code = code;
10
+ this.file = file;
11
+ this.pointer = pointer;
12
+ this.hint = hint;
13
+ this.name = "Problem";
14
+ }
15
+ }
16
+ export function check(condition, code, message, file) {
17
+ if (!condition)
18
+ throw new Problem(code, message, file);
19
+ }
20
+ export const digest = (value) => createHash("sha256").update(value).digest("hex");
21
+ export const canonical = (value) => JSON.stringify(sort(value));
22
+ function sort(value) {
23
+ return Array.isArray(value)
24
+ ? value.map(sort)
25
+ : value && typeof value === "object"
26
+ ? Object.fromEntries(Object.keys(value)
27
+ .sort()
28
+ .map((k) => [k, sort(value[k])]))
29
+ : value;
30
+ }
31
+ export const isMap = (v) => !!v && typeof v === "object" && !Array.isArray(v);
32
+ export function merge(a, b) {
33
+ if (!isMap(a) || !isMap(b))
34
+ return structuredClone(b);
35
+ const result = structuredClone(a);
36
+ for (const [key, value] of Object.entries(b)) {
37
+ check(!["__proto__", "prototype", "constructor"].includes(key), "KEY", "Unsafe mapping key");
38
+ result[key] = Object.hasOwn(result, key)
39
+ ? merge(result[key], value)
40
+ : structuredClone(value);
41
+ }
42
+ return result;
43
+ }
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ import type { Context } from "./operations.js";
3
+ export declare const executionSchemas: {
4
+ runtime_prepare: z.ZodObject<{
5
+ from: z.ZodOptional<z.ZodString>;
6
+ provider: z.ZodOptional<z.ZodString>;
7
+ flow: z.ZodOptional<z.ZodString>;
8
+ python: z.ZodOptional<z.ZodString>;
9
+ }, z.core.$strict>;
10
+ run: z.ZodObject<{
11
+ from: z.ZodOptional<z.ZodString>;
12
+ provider: z.ZodOptional<z.ZodString>;
13
+ flow: z.ZodOptional<z.ZodString>;
14
+ action: z.ZodDefault<z.ZodEnum<{
15
+ approve: "approve";
16
+ discover: "discover";
17
+ review: "review";
18
+ run: "run";
19
+ }>>;
20
+ runId: z.ZodOptional<z.ZodString>;
21
+ retry: z.ZodOptional<z.ZodString>;
22
+ envFile: z.ZodOptional<z.ZodString>;
23
+ }, z.core.$strict>;
24
+ run_status: z.ZodObject<{
25
+ id: z.ZodString;
26
+ }, z.core.$strict>;
27
+ };
28
+ export declare function performExecution(context: Context, operation: keyof typeof executionSchemas, args: any): Promise<any>;