@elastic.io/mcp 1.0.1-dev10 → 1.0.1-dev11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -19
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +3 -1
- package/dist/api/client.js.map +1 -1
- package/dist/api/verification.d.ts +6 -0
- package/dist/api/verification.d.ts.map +1 -0
- package/dist/api/verification.js +71 -0
- package/dist/api/verification.js.map +1 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +25 -6
- package/dist/setup.js.map +1 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +34 -2
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/flow-build.d.ts +18 -0
- package/dist/tools/flow-build.d.ts.map +1 -0
- package/dist/tools/flow-build.js +291 -0
- package/dist/tools/flow-build.js.map +1 -0
- package/dist/tools/flow-evidence.d.ts +62 -0
- package/dist/tools/flow-evidence.d.ts.map +1 -0
- package/dist/tools/flow-evidence.js +128 -0
- package/dist/tools/flow-evidence.js.map +1 -0
- package/dist/tools/flow-state-machine.d.ts +68 -0
- package/dist/tools/flow-state-machine.d.ts.map +1 -0
- package/dist/tools/flow-state-machine.js +292 -0
- package/dist/tools/flow-state-machine.js.map +1 -0
- package/dist/tools/handlers/auth.d.ts.map +1 -1
- package/dist/tools/handlers/auth.js +10 -144
- package/dist/tools/handlers/auth.js.map +1 -1
- package/dist/tools/handlers/component.d.ts.map +1 -1
- package/dist/tools/handlers/component.js +26 -6
- package/dist/tools/handlers/component.js.map +1 -1
- package/dist/tools/handlers/data-sample.d.ts.map +1 -1
- package/dist/tools/handlers/data-sample.js +36 -5
- package/dist/tools/handlers/data-sample.js.map +1 -1
- package/dist/tools/handlers/dynamic.d.ts.map +1 -1
- package/dist/tools/handlers/dynamic.js +42 -13
- package/dist/tools/handlers/dynamic.js.map +1 -1
- package/dist/tools/handlers/flow.d.ts.map +1 -1
- package/dist/tools/handlers/flow.js +144 -616
- package/dist/tools/handlers/flow.js.map +1 -1
- package/dist/tools/handlers/log.d.ts.map +1 -1
- package/dist/tools/handlers/log.js.map +1 -1
- package/dist/tools/handlers/raw.d.ts.map +1 -1
- package/dist/tools/handlers/raw.js +3 -0
- package/dist/tools/handlers/raw.js.map +1 -1
- package/dist/tools/handlers/search.d.ts.map +1 -1
- package/dist/tools/handlers/search.js +31 -0
- package/dist/tools/handlers/search.js.map +1 -1
- package/dist/tools/handlers/session.d.ts.map +1 -1
- package/dist/tools/handlers/session.js +7 -1
- package/dist/tools/handlers/session.js.map +1 -1
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +7 -2
- package/dist/tools/handlers.js.map +1 -1
- package/dist/tools/types.d.ts +6 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/validation.d.ts +16 -1
- package/dist/tools/validation.d.ts.map +1 -1
- package/dist/tools/validation.js +163 -141
- package/dist/tools/validation.js.map +1 -1
- package/package.json +4 -2
- package/resources/docs/flow-creation-stages.md +195 -0
- package/resources/docs/flow-state-machine-audit.md +162 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { deserializeJsonApi } from '../api/jsonapi.js';
|
|
2
|
+
import { checkDiscoveryState, checkMapperMetadataRetrieved, validateFlowGraph, healthCheckFlow } from './validation.js';
|
|
3
|
+
import { flowAttributes, configurationRevision, EDITABLE_ATTRIBUTES, snapshot, reconcileFlow, requireInactive, requireRevision, getFlowBuildStatus, getFlowState, schemaErrors, evaluateMapper, findDataProducingAncestor } from './flow-state-machine.js';
|
|
4
|
+
import { evidence, operation, preserveValidSamples, schemaFor, stepFingerprint, isPassthroughNode, selectedSample } from './flow-evidence.js';
|
|
5
|
+
const queues = new Map();
|
|
6
|
+
/** Serializes writes across MCP sessions using this process, without retaining client credentials. */
|
|
7
|
+
export async function withFlowLock(client, flowId, action) {
|
|
8
|
+
const key = `${client.defaults?.baseURL || 'default'}:${flowId}`;
|
|
9
|
+
const previous = queues.get(key) || Promise.resolve();
|
|
10
|
+
let release;
|
|
11
|
+
const gate = new Promise(resolve => { release = resolve; });
|
|
12
|
+
const tail = previous.then(() => gate);
|
|
13
|
+
queues.set(key, tail);
|
|
14
|
+
await previous;
|
|
15
|
+
try {
|
|
16
|
+
return await action();
|
|
17
|
+
}
|
|
18
|
+
finally {
|
|
19
|
+
release();
|
|
20
|
+
if (queues.get(key) === tail)
|
|
21
|
+
queues.delete(key);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export async function readFlow(client, flowId) {
|
|
25
|
+
const response = await client.get(`/flows/${flowId}`);
|
|
26
|
+
const flow = deserializeJsonApi(response.data);
|
|
27
|
+
let draft = null;
|
|
28
|
+
try {
|
|
29
|
+
draft = deserializeJsonApi((await client.get(`/flows/${flowId}/draft`)).data);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
if (error?.statusCode !== 404 && error?.response?.status !== 404)
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
return snapshot(flow, draft);
|
|
36
|
+
}
|
|
37
|
+
export async function inspectFlow(client, discovery, flowId) {
|
|
38
|
+
const current = await readFlow(client, flowId);
|
|
39
|
+
reconcileFlow(discovery, flowId, current);
|
|
40
|
+
discovery.inspectedFlows.add(flowId);
|
|
41
|
+
return current;
|
|
42
|
+
}
|
|
43
|
+
function submittedAttributes(body, flowId, draftId) {
|
|
44
|
+
const data = body?.data;
|
|
45
|
+
if (!data || !data.attributes || typeof data.attributes !== 'object')
|
|
46
|
+
throw new Error('Provide a JSON:API body with data.attributes.');
|
|
47
|
+
if (data.id && data.id !== flowId && data.id !== draftId)
|
|
48
|
+
throw new Error('Payload ID does not match the flow or its draft.');
|
|
49
|
+
const unknown = Object.keys(data.attributes).filter(k => !EDITABLE_ATTRIBUTES.includes(k));
|
|
50
|
+
if (unknown.length)
|
|
51
|
+
throw new Error(`Unsupported/read-only flow attributes: ${unknown.join(', ')}.`);
|
|
52
|
+
return flowAttributes(body);
|
|
53
|
+
}
|
|
54
|
+
function assertErrors(errors, prefix) {
|
|
55
|
+
if (errors.length)
|
|
56
|
+
throw new Error(`${prefix}:\n- ${errors.join('\n- ')}`);
|
|
57
|
+
}
|
|
58
|
+
async function assertUnchanged(client, flowId, current) {
|
|
59
|
+
const latest = await readFlow(client, flowId);
|
|
60
|
+
requireRevision(latest, current.revision);
|
|
61
|
+
requireInactive(latest);
|
|
62
|
+
if (latest.publishedRevision !== current.publishedRevision)
|
|
63
|
+
throw new Error('Published flow changed during validation. Inspect and retry.');
|
|
64
|
+
}
|
|
65
|
+
export async function saveDraft(client, discovery, args) {
|
|
66
|
+
const { flowId, body, expectedRevision } = args;
|
|
67
|
+
const current = await inspectFlow(client, discovery, flowId);
|
|
68
|
+
requireRevision(current, expectedRevision);
|
|
69
|
+
requireInactive(current);
|
|
70
|
+
const previous = current.draft || current.flow;
|
|
71
|
+
const candidate = { ...flowAttributes(previous), ...submittedAttributes(body, flowId, current.draft?.id) };
|
|
72
|
+
const graph = candidate.graph;
|
|
73
|
+
if (!graph)
|
|
74
|
+
throw new Error('A draft must contain a graph.');
|
|
75
|
+
if (!previous.graph?.nodes?.length && graph.edges?.some((e) => e.config?.mapper)) {
|
|
76
|
+
throw new Error('Save a skeleton without mappers first, then configure each edge.');
|
|
77
|
+
}
|
|
78
|
+
preserveValidSamples(previous.graph || { nodes: [], edges: [] }, graph);
|
|
79
|
+
assertErrors(validateFlowGraph({ graph }).errors, 'Flow Graph Validation Failed');
|
|
80
|
+
assertErrors(checkDiscoveryState({ graph }, discovery, previous), 'Playbook State Machine Check Failed');
|
|
81
|
+
assertErrors(checkMapperMetadataRetrieved({ graph }, discovery, current.workspaceId), 'Mapper Metadata Check Failed');
|
|
82
|
+
await assertUnchanged(client, flowId, current);
|
|
83
|
+
await client.put(`/flows/${flowId}/draft`, { data: { type: 'flow-draft', attributes: candidate } });
|
|
84
|
+
const saved = await inspectFlow(client, discovery, flowId);
|
|
85
|
+
if (!saved.draft || configurationRevision(saved.draft) !== configurationRevision(candidate)) {
|
|
86
|
+
throw new Error('Draft write could not be confirmed by read-back. Inspect the current flow before retrying.');
|
|
87
|
+
}
|
|
88
|
+
return { ...saved.draft, build: await getFlowBuildStatus(discovery, flowId) };
|
|
89
|
+
}
|
|
90
|
+
export async function publishDraft(client, discovery, args) {
|
|
91
|
+
const { flowId, body, expectedRevision } = args;
|
|
92
|
+
const current = await inspectFlow(client, discovery, flowId);
|
|
93
|
+
requireRevision(current, expectedRevision);
|
|
94
|
+
requireInactive(current);
|
|
95
|
+
if (!current.draft)
|
|
96
|
+
throw new Error('No draft exists to publish.');
|
|
97
|
+
const attrs = flowAttributes(current.draft);
|
|
98
|
+
// Backfill defaults the API adds on publish so the PATCH payload is complete.
|
|
99
|
+
if (!('variables' in attrs))
|
|
100
|
+
attrs.variables = current.flow.variables || {};
|
|
101
|
+
const proposed = { ...attrs, ...submittedAttributes(body, flowId, current.draft.id) };
|
|
102
|
+
if (configurationRevision(proposed) !== configurationRevision(attrs)) {
|
|
103
|
+
throw new Error('Publish payload differs from the saved draft. Save changes with update_flow_draft first.');
|
|
104
|
+
}
|
|
105
|
+
// Refresh live credential checks before assessing this exact revision.
|
|
106
|
+
const health = await healthCheckFlow({ ...attrs, workspace: current.flow.workspace }, client, discovery);
|
|
107
|
+
assertErrors(health.errors, 'Pre-publish health check failed');
|
|
108
|
+
const status = await getFlowBuildStatus(discovery, flowId);
|
|
109
|
+
assertErrors(status.blockers.map(b => b.message), 'Flow is not ready to publish');
|
|
110
|
+
await assertUnchanged(client, flowId, current);
|
|
111
|
+
await client.patch(`/flows/${flowId}`, { data: { id: flowId, type: 'flow', attributes: attrs } });
|
|
112
|
+
const published = await inspectFlow(client, discovery, flowId);
|
|
113
|
+
// Verify the published graph matches what we sent (the graph is what matters for flow behavior).
|
|
114
|
+
// Non-graph attributes (name, description, variables) may be normalized differently by the API.
|
|
115
|
+
const sentGraph = configurationRevision({ graph: attrs.graph }, false);
|
|
116
|
+
const pubGraph = configurationRevision({ graph: published.flow.graph }, false);
|
|
117
|
+
if (sentGraph !== pubGraph) {
|
|
118
|
+
throw new Error('Published flow graph does not match the validated draft. Inspect the flow before retrying.');
|
|
119
|
+
}
|
|
120
|
+
// No sample creation, debug execution, or draft mutation after publish.
|
|
121
|
+
return { ...published.flow, build: await getFlowBuildStatus(discovery, flowId) };
|
|
122
|
+
}
|
|
123
|
+
function relationId(value) { return value?.id || value?.data?.id || (typeof value === 'string' ? value : undefined); }
|
|
124
|
+
export function validateSample(discovery, flowId, current, stepId, sample) {
|
|
125
|
+
const graph = current.draft?.graph || current.flow.graph;
|
|
126
|
+
const node = graph?.nodes?.find((n) => n.id === stepId);
|
|
127
|
+
if (!node)
|
|
128
|
+
throw new Error(`Step ${stepId} does not exist.`);
|
|
129
|
+
const op = operation(node);
|
|
130
|
+
if (relationId(sample.component) !== op.componentId || relationId(sample.component_version) !== op.version
|
|
131
|
+
|| sample.method !== op.method || relationId(sample.workspace) !== current.workspaceId) {
|
|
132
|
+
throw new Error('Sample component, version, method or workspace does not match the flow step.');
|
|
133
|
+
}
|
|
134
|
+
if (!sample.id || sample.result?.body === undefined)
|
|
135
|
+
throw new Error('Sample has no ID or output body.');
|
|
136
|
+
assertErrors(schemaErrors(schemaFor(discovery, current.workspaceId, node)?.out, sample.result.body), 'Sample output does not match metadata');
|
|
137
|
+
evidence(discovery).samples.set(sample.id, { flowId, stepId, fingerprint: stepFingerprint(graph, stepId), body: sample.result.body });
|
|
138
|
+
}
|
|
139
|
+
function topologicalOrder(graph) {
|
|
140
|
+
const nodes = graph?.nodes || [];
|
|
141
|
+
const edges = graph?.edges || [];
|
|
142
|
+
const inDegree = new Map();
|
|
143
|
+
const adj = new Map();
|
|
144
|
+
for (const n of nodes) {
|
|
145
|
+
inDegree.set(n.id, 0);
|
|
146
|
+
adj.set(n.id, []);
|
|
147
|
+
}
|
|
148
|
+
for (const e of edges) {
|
|
149
|
+
adj.get(e.source)?.push(e.target);
|
|
150
|
+
inDegree.set(e.target, (inDegree.get(e.target) || 0) + 1);
|
|
151
|
+
}
|
|
152
|
+
const queue = [...inDegree.entries()].filter(([, d]) => d === 0).map(([id]) => id);
|
|
153
|
+
const order = [];
|
|
154
|
+
while (queue.length) {
|
|
155
|
+
const id = queue.shift();
|
|
156
|
+
order.push(id);
|
|
157
|
+
for (const next of adj.get(id) || []) {
|
|
158
|
+
const d = (inDegree.get(next) || 1) - 1;
|
|
159
|
+
inDegree.set(next, d);
|
|
160
|
+
if (d === 0)
|
|
161
|
+
queue.push(next);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return order;
|
|
165
|
+
}
|
|
166
|
+
async function buildStepInput(discovery, flowId, graph, workspaceId, stepId, freshSamples) {
|
|
167
|
+
const edges = graph?.edges || [];
|
|
168
|
+
const nodes = graph?.nodes || [];
|
|
169
|
+
const incomingEdge = edges.find((e) => e.target === stepId);
|
|
170
|
+
if (!incomingEdge)
|
|
171
|
+
return {};
|
|
172
|
+
const mapper = incomingEdge.config?.mapper;
|
|
173
|
+
if (!mapper)
|
|
174
|
+
return {};
|
|
175
|
+
const passthrough = {};
|
|
176
|
+
const refs = new Set([...JSON.stringify(mapper).matchAll(/\$getPassthrough\(\)\.([\w-]+)/g)].map(m => m[1]));
|
|
177
|
+
for (const id of refs) {
|
|
178
|
+
if (freshSamples.has(id)) {
|
|
179
|
+
passthrough[id] = { body: freshSamples.get(id) };
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
const source = nodes.find((n) => n.id === id);
|
|
183
|
+
if (!source)
|
|
184
|
+
continue;
|
|
185
|
+
if (isPassthroughNode(source)) {
|
|
186
|
+
const ancestor = findDataProducingAncestor(nodes, edges, source, discovery, flowId, graph);
|
|
187
|
+
if (ancestor?.sample) {
|
|
188
|
+
passthrough[id] = { body: ancestor.sample.body };
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
if (ancestor?.nodeId && freshSamples.has(ancestor.nodeId)) {
|
|
192
|
+
passthrough[id] = { body: freshSamples.get(ancestor.nodeId) };
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const sample = selectedSample(discovery, flowId, graph, source);
|
|
198
|
+
if (sample)
|
|
199
|
+
passthrough[id] = { body: sample.body };
|
|
200
|
+
}
|
|
201
|
+
return evaluateMapper(mapper, passthrough);
|
|
202
|
+
}
|
|
203
|
+
export async function resampleStaleSteps(client, discovery, flowId) {
|
|
204
|
+
const resampled = [];
|
|
205
|
+
const failed = [];
|
|
206
|
+
const freshSamples = new Map();
|
|
207
|
+
// Use already-reconciled state from saveDraft (no extra API call).
|
|
208
|
+
const status = await getFlowBuildStatus(discovery, flowId);
|
|
209
|
+
const staleStepIds = new Set(status.blockers.filter(b => b.code === 'SAMPLE_REQUIRED' && b.stepId).map(b => b.stepId));
|
|
210
|
+
if (staleStepIds.size === 0)
|
|
211
|
+
return { resampled, failed };
|
|
212
|
+
// Skip steps that have precondition blockers — they can't be debugged anyway.
|
|
213
|
+
const PRECONDITION_CODES = new Set(['CREDENTIALS_UNVERIFIED', 'CREDENTIALS_MISSING', 'METADATA_REQUIRED', 'METADATA_PENDING', 'DESCRIPTOR_REQUIRED']);
|
|
214
|
+
const blockersByStep = new Map();
|
|
215
|
+
for (const b of status.blockers) {
|
|
216
|
+
if (!b.stepId)
|
|
217
|
+
continue;
|
|
218
|
+
if (!blockersByStep.has(b.stepId))
|
|
219
|
+
blockersByStep.set(b.stepId, new Set());
|
|
220
|
+
blockersByStep.get(b.stepId).add(b.code);
|
|
221
|
+
}
|
|
222
|
+
const candidates = [...staleStepIds].filter(id => {
|
|
223
|
+
const codes = blockersByStep.get(id);
|
|
224
|
+
return !codes || ![...codes].some(c => PRECONDITION_CODES.has(c));
|
|
225
|
+
});
|
|
226
|
+
if (candidates.length === 0)
|
|
227
|
+
return { resampled, failed };
|
|
228
|
+
const state = getFlowState(discovery, flowId);
|
|
229
|
+
const graph = state?.draft?.graph || state?.flow?.graph;
|
|
230
|
+
if (!graph)
|
|
231
|
+
return { resampled, failed };
|
|
232
|
+
const candidateSet = new Set(candidates);
|
|
233
|
+
const staleInOrder = topologicalOrder(graph).filter(id => candidateSet.has(id));
|
|
234
|
+
for (const stepId of staleInOrder) {
|
|
235
|
+
try {
|
|
236
|
+
const snap = await inspectFlow(client, discovery, flowId);
|
|
237
|
+
const latestGraph = snap.draft?.graph;
|
|
238
|
+
if (!latestGraph)
|
|
239
|
+
break;
|
|
240
|
+
const node = latestGraph.nodes.find((n) => n.id === stepId);
|
|
241
|
+
if (!node || isPassthroughNode(node))
|
|
242
|
+
continue;
|
|
243
|
+
const op = operation(node);
|
|
244
|
+
const isRoot = !latestGraph.edges.some((e) => e.target === stepId);
|
|
245
|
+
const sampleData = isRoot ? {} : await buildStepInput(discovery, flowId, latestGraph, snap.workspaceId, stepId, freshSamples);
|
|
246
|
+
const debugNode = { id: stepId, command: node.command, fields: node.fields || {}, error: false };
|
|
247
|
+
if (node.credentials_id)
|
|
248
|
+
debugNode.credentials_id = node.credentials_id;
|
|
249
|
+
if (node.secret_id)
|
|
250
|
+
debugNode.secret_id = node.secret_id;
|
|
251
|
+
const response = await client.post('/flows/debug-sync', { data: {
|
|
252
|
+
type: 'flow', attributes: { name: `Resample ${node.command}`, type: 'debug', graph: { nodes: [debugNode], edges: [] }, variables: {} },
|
|
253
|
+
meta: { sampleData: { body: sampleData || {} } },
|
|
254
|
+
relationships: { workspace: { data: { id: snap.workspaceId, type: 'workspace' } } },
|
|
255
|
+
} });
|
|
256
|
+
const result = response.data?.data?.data || response.data?.data || response.data;
|
|
257
|
+
if (result?.error) {
|
|
258
|
+
failed.push({ stepId, error: JSON.stringify(result.error) });
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
if (result?.body === undefined) {
|
|
262
|
+
failed.push({ stepId, error: 'Debug returned no body' });
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
const sampleResponse = await client.post('/data-samples', { data: {
|
|
266
|
+
type: 'data-sample', attributes: { result: { body: result.body }, method: op.method },
|
|
267
|
+
relationships: { component: { data: { type: 'component', id: op.componentId } },
|
|
268
|
+
component_version: { data: { type: 'component-version', id: op.version } },
|
|
269
|
+
workspace: { data: { type: 'workspace', id: snap.workspaceId } } },
|
|
270
|
+
} });
|
|
271
|
+
const sample = deserializeJsonApi(sampleResponse.data);
|
|
272
|
+
if (!sample?.id) {
|
|
273
|
+
failed.push({ stepId, error: 'No sample ID returned' });
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
const draftGraph = structuredClone(snap.draft.graph);
|
|
277
|
+
draftGraph.nodes.find((n) => n.id === stepId).selected_data_samples = [sample.id];
|
|
278
|
+
await saveDraft(client, discovery, { flowId, expectedRevision: snap.revision,
|
|
279
|
+
body: { data: { type: 'flow-draft', attributes: { graph: draftGraph } } } });
|
|
280
|
+
const saved = await inspectFlow(client, discovery, flowId);
|
|
281
|
+
validateSample(discovery, flowId, saved, stepId, sample);
|
|
282
|
+
freshSamples.set(stepId, result.body);
|
|
283
|
+
resampled.push(stepId);
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
failed.push({ stepId, error: error.message });
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return { resampled, failed };
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=flow-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-build.js","sourceRoot":"","sources":["../../src/tools/flow-build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { DiscoveryState } from './types.js';
|
|
2
|
+
export type EvidenceStatus = 'UNKNOWN' | 'PENDING' | 'VERIFIED' | 'FAILED';
|
|
3
|
+
export interface Verification {
|
|
4
|
+
ok: boolean;
|
|
5
|
+
status: EvidenceStatus;
|
|
6
|
+
error?: string;
|
|
7
|
+
executionId?: string;
|
|
8
|
+
checkedAt?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface MetadataEvidence {
|
|
11
|
+
status: EvidenceStatus;
|
|
12
|
+
executionId?: string;
|
|
13
|
+
schema?: any;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface SampleEvidence {
|
|
17
|
+
flowId: string;
|
|
18
|
+
stepId: string;
|
|
19
|
+
fingerprint: string;
|
|
20
|
+
body: any;
|
|
21
|
+
}
|
|
22
|
+
interface Evidence {
|
|
23
|
+
descriptors: Map<string, any>;
|
|
24
|
+
metadata: Map<string, MetadataEvidence>;
|
|
25
|
+
executions: Map<string, {
|
|
26
|
+
kind: 'metadata';
|
|
27
|
+
key: string;
|
|
28
|
+
}>;
|
|
29
|
+
credentials: Map<string, Verification>;
|
|
30
|
+
samples: Map<string, SampleEvidence>;
|
|
31
|
+
}
|
|
32
|
+
export declare function evidence(state: DiscoveryState): Evidence;
|
|
33
|
+
export declare function fingerprint(value: any): string;
|
|
34
|
+
export declare function operation(node: any): {
|
|
35
|
+
componentId: string;
|
|
36
|
+
method: string;
|
|
37
|
+
version: string;
|
|
38
|
+
};
|
|
39
|
+
export declare function resolvedVersion(state: DiscoveryState, componentId: string, version?: string): string;
|
|
40
|
+
export declare function metadataKey(args: any): string;
|
|
41
|
+
export declare function nodeMetadataKey(workspaceId: string, node: any): string;
|
|
42
|
+
export declare function credentialKey(args: any): string;
|
|
43
|
+
export declare function nodeCredentialArgs(workspaceId: string, node: any): any;
|
|
44
|
+
export declare function descriptorFor(state: DiscoveryState, node: any): any;
|
|
45
|
+
/**
|
|
46
|
+
* Returns true for nodes that act as pure passthrough — they forward input
|
|
47
|
+
* without transforming data and the platform strips selected_data_samples
|
|
48
|
+
* from their API representation. Currently: router (service: "router").
|
|
49
|
+
*/
|
|
50
|
+
export declare function isPassthroughNode(node: any): boolean;
|
|
51
|
+
export declare function schemaFor(state: DiscoveryState, workspaceId: string, node: any): any;
|
|
52
|
+
/** Includes all upstream configuration so a changed ancestor invalidates dependent samples. */
|
|
53
|
+
export declare function stepFingerprint(graph: any, stepId: string): string;
|
|
54
|
+
export declare function selectedSample(state: DiscoveryState, flowId: string, graph: any, node: any): SampleEvidence | undefined;
|
|
55
|
+
export declare function preserveValidSamples(previous: any, next: any): void;
|
|
56
|
+
export declare function executionResult(raw: any): {
|
|
57
|
+
status: EvidenceStatus;
|
|
58
|
+
value?: any;
|
|
59
|
+
error?: string;
|
|
60
|
+
};
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=flow-evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-evidence.d.ts","sourceRoot":"","sources":["../../src/tools/flow-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { resolveCredentialId } from './helpers.js';
|
|
3
|
+
const sessions = new WeakMap();
|
|
4
|
+
export function evidence(state) {
|
|
5
|
+
let value = sessions.get(state);
|
|
6
|
+
if (!value) {
|
|
7
|
+
value = { descriptors: new Map(), metadata: new Map(), executions: new Map(), credentials: new Map(), samples: new Map() };
|
|
8
|
+
sessions.set(state, value);
|
|
9
|
+
}
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
export function fingerprint(value) {
|
|
13
|
+
const canonical = (item) => Array.isArray(item) ? item.map(canonical)
|
|
14
|
+
: item && typeof item === 'object'
|
|
15
|
+
? Object.fromEntries(Object.keys(item).sort().filter(k => item[k] !== undefined).map(k => [k, canonical(item[k])]))
|
|
16
|
+
: item;
|
|
17
|
+
return createHash('sha256').update(JSON.stringify(canonical(value))).digest('hex');
|
|
18
|
+
}
|
|
19
|
+
export function operation(node) {
|
|
20
|
+
const command = typeof node.command === 'string' ? node.command.match(/^[^:]+:([^@]+)@(.+)$/) : null;
|
|
21
|
+
return {
|
|
22
|
+
componentId: typeof node.component_id === 'string' ? node.component_id : node.component_id?.componentId || node.component_id?.id || '',
|
|
23
|
+
method: command?.[1] || node.command?.actionOrTrigger || '',
|
|
24
|
+
version: command?.[2] || node.command?.componentVersion || '',
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function resolvedVersion(state, componentId, version = 'latest') {
|
|
28
|
+
const resolved = version === 'latest' ? state.componentVersions.get(componentId) : version;
|
|
29
|
+
if (!resolved)
|
|
30
|
+
throw new Error(`Call get_component for ${componentId} to resolve a pinned component version first.`);
|
|
31
|
+
return resolved;
|
|
32
|
+
}
|
|
33
|
+
export function metadataKey(args) {
|
|
34
|
+
return fingerprint({ workspaceId: args.workspaceId, componentId: args.componentId, versionId: args.versionId,
|
|
35
|
+
method: args.actionOrTriggerName, credentialId: args.credentialId || '', secretId: args.secretId || '', fields: args.fields || {} });
|
|
36
|
+
}
|
|
37
|
+
export function nodeMetadataKey(workspaceId, node) {
|
|
38
|
+
const op = operation(node);
|
|
39
|
+
return metadataKey({ workspaceId, componentId: op.componentId, versionId: op.version, actionOrTriggerName: op.method,
|
|
40
|
+
credentialId: resolveCredentialId(node.credentials_id), secretId: resolveCredentialId(node.secret_id), fields: node.fields });
|
|
41
|
+
}
|
|
42
|
+
export function credentialKey(args) {
|
|
43
|
+
return fingerprint({ workspaceId: args.workspaceId, componentId: args.componentId, versionId: args.versionId,
|
|
44
|
+
credentialId: args.credentialId || '', secretId: args.secretId || '', fields: args.fields || {} });
|
|
45
|
+
}
|
|
46
|
+
export function nodeCredentialArgs(workspaceId, node) {
|
|
47
|
+
const op = operation(node);
|
|
48
|
+
return { workspaceId, componentId: op.componentId, versionId: op.version,
|
|
49
|
+
credentialId: resolveCredentialId(node.credentials_id) || undefined, secretId: resolveCredentialId(node.secret_id) || undefined };
|
|
50
|
+
}
|
|
51
|
+
export function descriptorFor(state, node) {
|
|
52
|
+
const op = operation(node);
|
|
53
|
+
return evidence(state).descriptors.get(`${op.componentId}@${op.version}`);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Returns true for nodes that act as pure passthrough — they forward input
|
|
57
|
+
* without transforming data and the platform strips selected_data_samples
|
|
58
|
+
* from their API representation. Currently: router (service: "router").
|
|
59
|
+
*/
|
|
60
|
+
export function isPassthroughNode(node) {
|
|
61
|
+
return node?.service === 'router';
|
|
62
|
+
}
|
|
63
|
+
export function schemaFor(state, workspaceId, node) {
|
|
64
|
+
const op = operation(node);
|
|
65
|
+
const descriptor = descriptorFor(state, node);
|
|
66
|
+
const def = descriptor?.actions?.[op.method] || descriptor?.triggers?.[op.method];
|
|
67
|
+
if (def?.dynamicMetadata) {
|
|
68
|
+
const entry = evidence(state).metadata.get(nodeMetadataKey(workspaceId, node));
|
|
69
|
+
return entry?.status === 'VERIFIED' ? entry.schema : undefined;
|
|
70
|
+
}
|
|
71
|
+
return def?.metadata;
|
|
72
|
+
}
|
|
73
|
+
/** Includes all upstream configuration so a changed ancestor invalidates dependent samples. */
|
|
74
|
+
export function stepFingerprint(graph, stepId) {
|
|
75
|
+
const ids = new Set();
|
|
76
|
+
const visit = (id) => {
|
|
77
|
+
if (ids.has(id))
|
|
78
|
+
return;
|
|
79
|
+
ids.add(id);
|
|
80
|
+
for (const edge of graph.edges || [])
|
|
81
|
+
if (edge.target === id)
|
|
82
|
+
visit(edge.source);
|
|
83
|
+
};
|
|
84
|
+
visit(stepId);
|
|
85
|
+
return fingerprint({
|
|
86
|
+
nodes: (graph.nodes || []).filter((n) => ids.has(n.id)).map((n) => ({
|
|
87
|
+
id: n.id, ...operation(n), fields: n.fields || {}, credentials: resolveCredentialId(n.credentials_id), secret: resolveCredentialId(n.secret_id),
|
|
88
|
+
})).sort((a, b) => a.id.localeCompare(b.id)),
|
|
89
|
+
edges: (graph.edges || []).filter((e) => ids.has(e.target)).map((e) => ({ source: e.source, target: e.target, config: e.config || {} }))
|
|
90
|
+
.sort((a, b) => `${a.source}:${a.target}`.localeCompare(`${b.source}:${b.target}`)),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
export function selectedSample(state, flowId, graph, node) {
|
|
94
|
+
const hash = stepFingerprint(graph, node.id);
|
|
95
|
+
return (node.selected_data_samples || []).map((id) => evidence(state).samples.get(id))
|
|
96
|
+
.find((sample) => sample?.flowId === flowId && sample.stepId === node.id && sample.fingerprint === hash);
|
|
97
|
+
}
|
|
98
|
+
export function preserveValidSamples(previous, next) {
|
|
99
|
+
for (const node of next.nodes || []) {
|
|
100
|
+
const old = previous?.nodes?.find((n) => n.id === node.id);
|
|
101
|
+
if (!old)
|
|
102
|
+
continue;
|
|
103
|
+
if (stepFingerprint(previous, node.id) === stepFingerprint(next, node.id)) {
|
|
104
|
+
if (node.selected_data_samples === undefined && old.selected_data_samples?.length)
|
|
105
|
+
node.selected_data_samples = [...old.selected_data_samples];
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
node.selected_data_samples = (node.selected_data_samples || []).filter((id) => !old.selected_data_samples?.includes(id));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export function executionResult(raw) {
|
|
113
|
+
const data = raw?.data?.attributes || raw?.data || raw;
|
|
114
|
+
const status = String(data?.status || '').toLowerCase();
|
|
115
|
+
if (/error|fail|cancel/.test(status) || data?.error)
|
|
116
|
+
return { status: 'FAILED', error: String(data?.error || data?.message || status) };
|
|
117
|
+
if (/pending|queued|running|processing|scheduled/.test(status))
|
|
118
|
+
return { status: 'PENDING' };
|
|
119
|
+
const result = data?.result;
|
|
120
|
+
const value = result?.data ?? result;
|
|
121
|
+
if (result?.error || value?.error || /error|fail/.test(String(result?.status || ''))) {
|
|
122
|
+
return { status: 'FAILED', error: JSON.stringify(value?.error || result?.error || result) };
|
|
123
|
+
}
|
|
124
|
+
if (value === undefined || value === null)
|
|
125
|
+
return { status: 'UNKNOWN', error: 'Execution returned no result.' };
|
|
126
|
+
return { status: 'VERIFIED', value };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=flow-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-evidence.js","sourceRoot":"","sources":["../../src/tools/flow-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { DiscoveryState } from './types.js';
|
|
2
|
+
export declare enum FlowPhase {
|
|
3
|
+
INIT = "INIT",
|
|
4
|
+
DRAFT = "DRAFT",
|
|
5
|
+
READY_TO_PUBLISH = "READY_TO_PUBLISH",
|
|
6
|
+
PUBLISHED = "PUBLISHED"
|
|
7
|
+
}
|
|
8
|
+
export interface FlowSnapshot {
|
|
9
|
+
flow: any;
|
|
10
|
+
draft: any | null;
|
|
11
|
+
workspaceId: string;
|
|
12
|
+
revision: string;
|
|
13
|
+
publishedRevision: string;
|
|
14
|
+
runtime: 'UNKNOWN' | 'INACTIVE' | 'ACTIVE' | 'STARTING' | 'STOPPING';
|
|
15
|
+
}
|
|
16
|
+
export interface FlowState extends FlowSnapshot {
|
|
17
|
+
verification: {
|
|
18
|
+
status: 'NOT_RUN' | 'PENDING' | 'PASSED' | 'FAILED' | 'NO_DATA';
|
|
19
|
+
executionId?: string;
|
|
20
|
+
revision?: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export interface NextAction {
|
|
24
|
+
tool: string;
|
|
25
|
+
arguments: Record<string, any>;
|
|
26
|
+
}
|
|
27
|
+
export interface BuildBlocker {
|
|
28
|
+
code: string;
|
|
29
|
+
message: string;
|
|
30
|
+
stepId?: string;
|
|
31
|
+
edgeId?: string;
|
|
32
|
+
nextAction?: NextAction;
|
|
33
|
+
}
|
|
34
|
+
export interface BuildStatus {
|
|
35
|
+
flowId: string;
|
|
36
|
+
phase: FlowPhase;
|
|
37
|
+
revision: string;
|
|
38
|
+
publishedRevision: string;
|
|
39
|
+
runtime: FlowSnapshot['runtime'];
|
|
40
|
+
verification: FlowState['verification'];
|
|
41
|
+
readyToPublish: boolean;
|
|
42
|
+
blockers: BuildBlocker[];
|
|
43
|
+
nextActions: NextAction[];
|
|
44
|
+
}
|
|
45
|
+
export declare function getFlowState(discovery: DiscoveryState, flowId: string): FlowState | undefined;
|
|
46
|
+
export declare const EDITABLE_ATTRIBUTES: readonly ["name", "description", "type", "cron", "graph", "variables", "nodes_config", "container_config"];
|
|
47
|
+
export declare function flowAttributes(value: any): any;
|
|
48
|
+
export declare function configurationRevision(value: any, includeSamples?: boolean): string;
|
|
49
|
+
export declare function snapshot(flow: any, draft: any | null): FlowSnapshot;
|
|
50
|
+
export declare function reconcileFlow(discovery: DiscoveryState, flowId: string, current: FlowSnapshot): FlowState;
|
|
51
|
+
export declare function requireRevision(current: FlowSnapshot, expected?: string): void;
|
|
52
|
+
export declare function requireInactive(current: FlowSnapshot): void;
|
|
53
|
+
export declare function schemaErrors(schema: any, value: any): string[];
|
|
54
|
+
export declare function evaluateMapper(mapper: any, passthrough: Record<string, any>): Promise<any>;
|
|
55
|
+
/**
|
|
56
|
+
* Walk upstream from a passthrough node until a data-producing node is found.
|
|
57
|
+
* Returns the ancestor's sample (if verified) or its node ID (for blocker attribution).
|
|
58
|
+
*/
|
|
59
|
+
export declare function findDataProducingAncestor(nodes: any[], edges: any[], startNode: any, discovery: DiscoveryState, flowId: string, graph: any, visited?: Set<string>): {
|
|
60
|
+
nodeId: string;
|
|
61
|
+
sample?: import('./flow-evidence.js').SampleEvidence;
|
|
62
|
+
} | undefined;
|
|
63
|
+
/** Pure assessment: no platform writes, execution, or state transitions. */
|
|
64
|
+
export declare function assessGraph(discovery: DiscoveryState, flowId: string, workspaceId: string, attrs: any): Promise<BuildBlocker[]>;
|
|
65
|
+
export declare function getFlowBuildStatus(discovery: DiscoveryState, flowId: string): Promise<BuildStatus>;
|
|
66
|
+
export declare function markRunRequested(discovery: DiscoveryState, flowId: string, executionId?: string): void;
|
|
67
|
+
export declare function getFlowStatesReport(discovery: DiscoveryState): any[];
|
|
68
|
+
//# sourceMappingURL=flow-state-machine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-state-machine.d.ts","sourceRoot":"","sources":["../../src/tools/flow-state-machine.ts"],"names":[],"mappings":"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"}
|