@elizaos/plugin-workflow 2.0.0-beta.1 → 2.0.3-beta.5
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/LICENSE +21 -0
- package/README.md +28 -26
- package/dist/actions/eval-code.d.ts +12 -0
- package/dist/actions/eval-code.d.ts.map +1 -0
- package/dist/actions/eval-code.js +59 -0
- package/dist/actions/eval-code.js.map +1 -0
- package/dist/actions/index.d.ts +1 -0
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +1 -0
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/workflow.d.ts +7 -0
- package/dist/actions/workflow.d.ts.map +1 -1
- package/dist/actions/workflow.js +462 -10
- package/dist/actions/workflow.js.map +1 -1
- package/dist/db/schema.d.ts +196 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +23 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -64
- package/dist/index.js.map +1 -1
- package/dist/lib/automations-builder.d.ts.map +1 -1
- package/dist/lib/automations-builder.js +10 -35
- package/dist/lib/automations-builder.js.map +1 -1
- package/dist/lib/automations-types.d.ts +2 -2
- package/dist/lib/automations-types.d.ts.map +1 -1
- package/dist/lib/automations-types.js.map +1 -1
- package/dist/lib/index.d.ts +0 -2
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +1 -2
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/workflow-clarification.d.ts +2 -2
- package/dist/lib/workflow-clarification.d.ts.map +1 -1
- package/dist/lib/workflow-clarification.js +15 -11
- package/dist/lib/workflow-clarification.js.map +1 -1
- package/dist/plugin-routes.d.ts.map +1 -1
- package/dist/plugin-routes.js +6 -0
- package/dist/plugin-routes.js.map +1 -1
- package/dist/providers/activeWorkflows.js +2 -2
- package/dist/providers/activeWorkflows.js.map +1 -1
- package/dist/providers/workflowStatus.js +1 -1
- package/dist/providers/workflowStatus.js.map +1 -1
- package/dist/routes/workflow-routes.d.ts.map +1 -1
- package/dist/routes/workflow-routes.js +68 -2
- package/dist/routes/workflow-routes.js.map +1 -1
- package/dist/routes/workflows.d.ts.map +1 -1
- package/dist/routes/workflows.js +5 -1
- package/dist/routes/workflows.js.map +1 -1
- package/dist/services/embedded-workflow-service.d.ts +74 -17
- package/dist/services/embedded-workflow-service.d.ts.map +1 -1
- package/dist/services/embedded-workflow-service.js +343 -149
- package/dist/services/embedded-workflow-service.js.map +1 -1
- package/dist/services/smithers-runtime.d.ts +47 -0
- package/dist/services/smithers-runtime.d.ts.map +1 -0
- package/dist/services/smithers-runtime.js +444 -0
- package/dist/services/smithers-runtime.js.map +1 -0
- package/dist/services/workflow-credential-store.js +1 -1
- package/dist/services/workflow-credential-store.js.map +1 -1
- package/dist/services/workflow-dispatch.d.ts +31 -1
- package/dist/services/workflow-dispatch.d.ts.map +1 -1
- package/dist/services/workflow-dispatch.js +75 -10
- package/dist/services/workflow-dispatch.js.map +1 -1
- package/dist/services/workflow-service.d.ts +27 -1
- package/dist/services/workflow-service.d.ts.map +1 -1
- package/dist/services/workflow-service.js +133 -11
- package/dist/services/workflow-service.js.map +1 -1
- package/dist/trigger-routes.d.ts +2 -18
- package/dist/trigger-routes.d.ts.map +1 -1
- package/dist/trigger-routes.js +11 -39
- package/dist/trigger-routes.js.map +1 -1
- package/dist/types/index.d.ts +82 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/workflow-contracts.d.ts +118 -0
- package/dist/types/workflow-contracts.d.ts.map +1 -0
- package/dist/types/workflow-contracts.js +2 -0
- package/dist/types/workflow-contracts.js.map +1 -0
- package/dist/utils/catalog.js +2 -2
- package/dist/utils/catalog.js.map +1 -1
- package/dist/utils/clarification.d.ts +1 -1
- package/dist/utils/clarification.d.ts.map +1 -1
- package/dist/utils/clarification.js +15 -4
- package/dist/utils/clarification.js.map +1 -1
- package/dist/utils/context.js +1 -1
- package/dist/utils/context.js.map +1 -1
- package/dist/utils/evaluation-samples.d.ts +6 -0
- package/dist/utils/evaluation-samples.d.ts.map +1 -0
- package/dist/utils/evaluation-samples.js +216 -0
- package/dist/utils/evaluation-samples.js.map +1 -0
- package/dist/utils/execution-diagnostics.d.ts +26 -0
- package/dist/utils/execution-diagnostics.d.ts.map +1 -0
- package/dist/utils/execution-diagnostics.js +159 -0
- package/dist/utils/execution-diagnostics.js.map +1 -0
- package/dist/utils/generation.d.ts.map +1 -1
- package/dist/utils/generation.js +134 -19
- package/dist/utils/generation.js.map +1 -1
- package/dist/utils/host-capabilities.d.ts.map +1 -1
- package/dist/utils/host-capabilities.js +20 -5
- package/dist/utils/host-capabilities.js.map +1 -1
- package/dist/utils/inferSyntheticOutputSchema.js +3 -3
- package/dist/utils/inferSyntheticOutputSchema.js.map +1 -1
- package/dist/utils/outputSchema.js +1 -1
- package/dist/utils/outputSchema.js.map +1 -1
- package/dist/utils/validateAndRepair.js +10 -10
- package/dist/utils/validateAndRepair.js.map +1 -1
- package/dist/utils/workflow-prompts/draftIntent.d.ts +1 -1
- package/dist/utils/workflow-prompts/draftIntent.d.ts.map +1 -1
- package/dist/utils/workflow-prompts/draftIntent.js +1 -1
- package/dist/utils/workflow-prompts/keywordExtraction.d.ts +1 -1
- package/dist/utils/workflow-prompts/keywordExtraction.d.ts.map +1 -1
- package/dist/utils/workflow-prompts/keywordExtraction.js +1 -1
- package/dist/utils/workflow-prompts/workflowGeneration.d.ts +1 -1
- package/dist/utils/workflow-prompts/workflowGeneration.d.ts.map +1 -1
- package/dist/utils/workflow-prompts/workflowGeneration.js +4 -4
- package/dist/utils/workflow-prompts/workflowMatching.d.ts +1 -1
- package/dist/utils/workflow-prompts/workflowMatching.d.ts.map +1 -1
- package/dist/utils/workflow-prompts/workflowMatching.js +1 -1
- package/dist/utils/workflow.d.ts +1 -0
- package/dist/utils/workflow.d.ts.map +1 -1
- package/dist/utils/workflow.js +44 -8
- package/dist/utils/workflow.js.map +1 -1
- package/package.json +27 -8
- package/registry-entry.json +25 -0
- package/src/actions/eval-code.ts +81 -0
- package/src/actions/index.ts +1 -0
- package/src/actions/workflow.ts +518 -10
- package/src/db/schema.ts +31 -0
- package/src/index.ts +9 -82
- package/src/lib/automations-builder.ts +11 -35
- package/src/lib/automations-types.ts +1 -2
- package/src/lib/index.ts +0 -8
- package/src/lib/workflow-clarification.ts +18 -13
- package/src/plugin-routes.ts +6 -0
- package/src/providers/activeWorkflows.ts +2 -2
- package/src/providers/workflowStatus.ts +1 -1
- package/src/routes/workflow-routes.ts +100 -2
- package/src/routes/workflows.ts +5 -1
- package/src/services/embedded-workflow-service.ts +447 -172
- package/src/services/smithers-runtime.ts +526 -0
- package/src/services/workflow-credential-store.ts +1 -1
- package/src/services/workflow-dispatch.ts +116 -13
- package/src/services/workflow-service.ts +186 -10
- package/src/trigger-routes.ts +12 -70
- package/src/types/index.ts +94 -2
- package/src/types/workflow-contracts.ts +166 -0
- package/src/utils/catalog.ts +2 -2
- package/src/utils/clarification.ts +19 -5
- package/src/utils/context.ts +1 -1
- package/src/utils/evaluation-samples.ts +239 -0
- package/src/utils/execution-diagnostics.ts +192 -0
- package/src/utils/generation.ts +224 -32
- package/src/utils/host-capabilities.ts +21 -5
- package/src/utils/inferSyntheticOutputSchema.ts +3 -3
- package/src/utils/outputSchema.ts +1 -1
- package/src/utils/validateAndRepair.ts +10 -10
- package/src/utils/workflow-prompts/draftIntent.ts +1 -1
- package/src/utils/workflow-prompts/keywordExtraction.ts +1 -1
- package/src/utils/workflow-prompts/workflowGeneration.ts +4 -4
- package/src/utils/workflow-prompts/workflowMatching.ts +1 -1
- package/src/utils/workflow.ts +56 -8
- package/dist/lib/legacy-task-migration.d.ts +0 -20
- package/dist/lib/legacy-task-migration.d.ts.map +0 -1
- package/dist/lib/legacy-task-migration.js +0 -110
- package/dist/lib/legacy-task-migration.js.map +0 -1
- package/dist/lib/legacy-text-trigger-migration.d.ts +0 -18
- package/dist/lib/legacy-text-trigger-migration.d.ts.map +0 -1
- package/dist/lib/legacy-text-trigger-migration.js +0 -131
- package/dist/lib/legacy-text-trigger-migration.js.map +0 -1
- package/src/lib/legacy-task-migration.ts +0 -143
- package/src/lib/legacy-text-trigger-migration.ts +0 -178
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
const DEFAULT_LIMIT = 10;
|
|
2
|
+
const MAX_LIMIT = 50;
|
|
3
|
+
const MAX_PREVIEW_LENGTH = 240;
|
|
4
|
+
const MAX_SAMPLE_VALUE_DEPTH = 4;
|
|
5
|
+
const MAX_SAMPLE_OBJECT_KEYS = 20;
|
|
6
|
+
const MAX_SAMPLE_ARRAY_ITEMS = 10;
|
|
7
|
+
function isRecord(value) {
|
|
8
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
9
|
+
}
|
|
10
|
+
function readString(value) {
|
|
11
|
+
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
12
|
+
}
|
|
13
|
+
function readNumber(value) {
|
|
14
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
15
|
+
}
|
|
16
|
+
function clampLimit(limit) {
|
|
17
|
+
if (typeof limit !== 'number' || !Number.isFinite(limit))
|
|
18
|
+
return DEFAULT_LIMIT;
|
|
19
|
+
return Math.min(Math.max(1, Math.floor(limit)), MAX_LIMIT);
|
|
20
|
+
}
|
|
21
|
+
function truncate(value, maxLength = MAX_PREVIEW_LENGTH) {
|
|
22
|
+
return value.length > maxLength ? `${value.slice(0, maxLength - 3)}...` : value;
|
|
23
|
+
}
|
|
24
|
+
function compactValue(value, depth = 0) {
|
|
25
|
+
if (value === null ||
|
|
26
|
+
typeof value === 'boolean' ||
|
|
27
|
+
typeof value === 'number' ||
|
|
28
|
+
typeof value === 'undefined') {
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
if (typeof value === 'string') {
|
|
32
|
+
return truncate(value, MAX_PREVIEW_LENGTH);
|
|
33
|
+
}
|
|
34
|
+
if (depth >= MAX_SAMPLE_VALUE_DEPTH) {
|
|
35
|
+
return '[truncated]';
|
|
36
|
+
}
|
|
37
|
+
if (Array.isArray(value)) {
|
|
38
|
+
return value.slice(0, MAX_SAMPLE_ARRAY_ITEMS).map((item) => compactValue(item, depth + 1));
|
|
39
|
+
}
|
|
40
|
+
if (!isRecord(value)) {
|
|
41
|
+
return String(value);
|
|
42
|
+
}
|
|
43
|
+
return Object.fromEntries(Object.entries(value)
|
|
44
|
+
.slice(0, MAX_SAMPLE_OBJECT_KEYS)
|
|
45
|
+
.map(([key, item]) => [key, compactValue(item, depth + 1)]));
|
|
46
|
+
}
|
|
47
|
+
function compactRecord(value) {
|
|
48
|
+
if (!isRecord(value))
|
|
49
|
+
return undefined;
|
|
50
|
+
const compacted = compactValue(value);
|
|
51
|
+
return isRecord(compacted) ? compacted : undefined;
|
|
52
|
+
}
|
|
53
|
+
function countMainItems(data) {
|
|
54
|
+
if (!isRecord(data) || !Array.isArray(data.main))
|
|
55
|
+
return 0;
|
|
56
|
+
return data.main.reduce((total, output) => {
|
|
57
|
+
if (!Array.isArray(output))
|
|
58
|
+
return total;
|
|
59
|
+
return total + output.length;
|
|
60
|
+
}, 0);
|
|
61
|
+
}
|
|
62
|
+
function previewMainData(data) {
|
|
63
|
+
if (!isRecord(data) || !Array.isArray(data.main))
|
|
64
|
+
return undefined;
|
|
65
|
+
for (const output of data.main) {
|
|
66
|
+
if (!Array.isArray(output))
|
|
67
|
+
continue;
|
|
68
|
+
const first = output.find(isRecord);
|
|
69
|
+
if (!first)
|
|
70
|
+
continue;
|
|
71
|
+
const json = isRecord(first.json) ? first.json : first;
|
|
72
|
+
try {
|
|
73
|
+
return truncate(JSON.stringify(compactValue(json)));
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return 'Output could not be previewed';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
function readRunError(run) {
|
|
82
|
+
if (!isRecord(run))
|
|
83
|
+
return undefined;
|
|
84
|
+
const error = run.error;
|
|
85
|
+
if (isRecord(error)) {
|
|
86
|
+
return readString(error.message) ?? readString(error.description);
|
|
87
|
+
}
|
|
88
|
+
return readString(error);
|
|
89
|
+
}
|
|
90
|
+
function readExecutionError(execution) {
|
|
91
|
+
const error = execution.data?.resultData?.error;
|
|
92
|
+
if (error?.message)
|
|
93
|
+
return error.message;
|
|
94
|
+
for (const node of collectNodeSamples(execution)) {
|
|
95
|
+
if (node.error)
|
|
96
|
+
return node.error;
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
function collectNodeSamples(execution) {
|
|
101
|
+
const runData = execution.data?.resultData?.runData;
|
|
102
|
+
if (!runData)
|
|
103
|
+
return [];
|
|
104
|
+
return Object.entries(runData).flatMap(([name, runs]) => {
|
|
105
|
+
if (!Array.isArray(runs))
|
|
106
|
+
return [];
|
|
107
|
+
return runs.map((run) => {
|
|
108
|
+
const record = isRecord(run) ? run : {};
|
|
109
|
+
const error = readRunError(record);
|
|
110
|
+
const preview = previewMainData(record.data);
|
|
111
|
+
return {
|
|
112
|
+
name,
|
|
113
|
+
status: error ? 'error' : execution.status === 'success' ? 'success' : 'unknown',
|
|
114
|
+
itemCount: countMainItems(record.data),
|
|
115
|
+
...(readNumber(record.executionTime) !== undefined
|
|
116
|
+
? { executionTimeMs: readNumber(record.executionTime) }
|
|
117
|
+
: {}),
|
|
118
|
+
...(error ? { error } : {}),
|
|
119
|
+
...(preview ? { preview } : {}),
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function slugify(value) {
|
|
125
|
+
return value
|
|
126
|
+
.toLowerCase()
|
|
127
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
128
|
+
.replace(/^-+|-+$/g, '')
|
|
129
|
+
.slice(0, 48);
|
|
130
|
+
}
|
|
131
|
+
function buildSample(workflow, execution) {
|
|
132
|
+
const passed = execution.status === 'success';
|
|
133
|
+
const workflowId = workflow.id;
|
|
134
|
+
const triggerData = compactRecord(execution.customData?.triggerData);
|
|
135
|
+
const error = readExecutionError(execution);
|
|
136
|
+
const nodes = collectNodeSamples(execution);
|
|
137
|
+
const scoreReason = passed
|
|
138
|
+
? 'Execution completed successfully.'
|
|
139
|
+
: error
|
|
140
|
+
? `Execution failed: ${error}`
|
|
141
|
+
: `Execution finished with status ${execution.status}.`;
|
|
142
|
+
return {
|
|
143
|
+
id: `${workflowId}:${execution.id}`,
|
|
144
|
+
workflowId,
|
|
145
|
+
workflowName: workflow.name,
|
|
146
|
+
workflowVersionId: workflow.versionId,
|
|
147
|
+
executionId: execution.id,
|
|
148
|
+
createdAt: execution.stoppedAt ?? execution.startedAt,
|
|
149
|
+
input: {
|
|
150
|
+
mode: execution.mode,
|
|
151
|
+
...(triggerData ? { triggerData } : {}),
|
|
152
|
+
},
|
|
153
|
+
expected: {
|
|
154
|
+
status: execution.status,
|
|
155
|
+
passed,
|
|
156
|
+
...(execution.data?.resultData?.lastNodeExecuted
|
|
157
|
+
? { lastNodeExecuted: execution.data.resultData.lastNodeExecuted }
|
|
158
|
+
: {}),
|
|
159
|
+
...(execution.data?.resultData?.engine ? { engine: execution.data.resultData.engine } : {}),
|
|
160
|
+
...(error ? { error } : {}),
|
|
161
|
+
nodes,
|
|
162
|
+
},
|
|
163
|
+
score: {
|
|
164
|
+
pass: passed,
|
|
165
|
+
value: passed ? 1 : 0,
|
|
166
|
+
reason: scoreReason,
|
|
167
|
+
},
|
|
168
|
+
tags: [
|
|
169
|
+
'smithers',
|
|
170
|
+
'workflow-eval',
|
|
171
|
+
`workflow:${workflowId}`,
|
|
172
|
+
`status:${execution.status}`,
|
|
173
|
+
`mode:${execution.mode}`,
|
|
174
|
+
],
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
export function buildWorkflowEvaluationSuite(workflow, executions, options) {
|
|
178
|
+
const limit = clampLimit(options?.limit);
|
|
179
|
+
const samples = executions.slice(0, limit).map((execution) => buildSample(workflow, execution));
|
|
180
|
+
const safeName = slugify(workflow.name) || slugify(workflow.id) || 'workflow';
|
|
181
|
+
const suiteName = safeName;
|
|
182
|
+
const caseFile = `evals/${suiteName}.jsonl`;
|
|
183
|
+
const recommendedEvalCommand = `bunx smithers-orchestrator eval <workflow.tsx> --cases ${caseFile} --suite ${suiteName}`;
|
|
184
|
+
const recommendedOptimizeCommand = 'bunx smithers-orchestrator optimize';
|
|
185
|
+
const recommendedObservabilityCommand = 'bunx smithers-orchestrator observability --detach';
|
|
186
|
+
const recommendedMetricsCommand = 'bunx smithers-orchestrator up <workflow.tsx> --serve --metrics';
|
|
187
|
+
const jsonl = samples.map((sample) => JSON.stringify(sample)).join('\n');
|
|
188
|
+
return {
|
|
189
|
+
workflowId: workflow.id,
|
|
190
|
+
workflowName: workflow.name,
|
|
191
|
+
workflowVersionId: workflow.versionId,
|
|
192
|
+
generatedAt: options?.generatedAt ?? new Date().toISOString(),
|
|
193
|
+
sampleCount: samples.length,
|
|
194
|
+
samples,
|
|
195
|
+
jsonl,
|
|
196
|
+
optimizer: {
|
|
197
|
+
engine: 'smithers-gepa',
|
|
198
|
+
target: 'workflow-generation',
|
|
199
|
+
suiteName,
|
|
200
|
+
caseFile,
|
|
201
|
+
recommendedCommand: recommendedEvalCommand,
|
|
202
|
+
recommendedEvalCommand,
|
|
203
|
+
recommendedOptimizeCommand,
|
|
204
|
+
recommendedObservabilityCommand,
|
|
205
|
+
recommendedMetricsCommand,
|
|
206
|
+
notes: [
|
|
207
|
+
`Copy jsonl to ${caseFile} before running eval.`,
|
|
208
|
+
'Run GEPA optimization after the eval suite is configured; Smithers writes an optimized prompt artifact only when score improves.',
|
|
209
|
+
'Use the observability and metrics commands when inspecting long-running or flaky workflows.',
|
|
210
|
+
'Successful executions are positive examples; failed executions remain useful regression cases.',
|
|
211
|
+
'Samples are generated from persisted workflow executions and compact large payloads.',
|
|
212
|
+
],
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=evaluation-samples.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluation-samples.js","sourceRoot":"","sources":["../../src/utils/evaluation-samples.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { WorkflowExecution } from '../types/index';
|
|
2
|
+
export type WorkflowExecutionTone = 'success' | 'danger' | 'warning' | 'muted';
|
|
3
|
+
export interface WorkflowExecutionRunRow {
|
|
4
|
+
nodeName: string;
|
|
5
|
+
status: 'success' | 'error' | 'unknown';
|
|
6
|
+
startTime?: number;
|
|
7
|
+
executionTimeMs?: number;
|
|
8
|
+
itemCount: number;
|
|
9
|
+
preview: string;
|
|
10
|
+
error?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface WorkflowExecutionSummary {
|
|
13
|
+
statusLabel: string;
|
|
14
|
+
tone: WorkflowExecutionTone;
|
|
15
|
+
durationLabel: string;
|
|
16
|
+
nodeCount: number;
|
|
17
|
+
lastNode?: string;
|
|
18
|
+
error?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function getWorkflowExecutionRunRows(execution: WorkflowExecution): WorkflowExecutionRunRow[];
|
|
21
|
+
export declare function getWorkflowExecutionError(execution: WorkflowExecution): string | undefined;
|
|
22
|
+
export declare function formatWorkflowExecutionDuration(startedAt?: string, stoppedAt?: string | null): string;
|
|
23
|
+
export declare function summarizeWorkflowExecution(execution: WorkflowExecution): WorkflowExecutionSummary;
|
|
24
|
+
export declare function formatWorkflowEngineMetrics(execution: WorkflowExecution): string | null;
|
|
25
|
+
export declare function buildWorkflowExecutionDiagnostics(execution: WorkflowExecution): string;
|
|
26
|
+
//# sourceMappingURL=execution-diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-diagnostics.d.ts","sourceRoot":"","sources":["../../src/utils/execution-diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgDD,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,iBAAiB,GAC3B,uBAAuB,EAAE,CAqB3B;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAO1F;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,MAAM,CASR;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,iBAAiB,GAAG,wBAAwB,CA8BjG;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAMvF;AAED,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,iBAAiB,GAAG,MAAM,CAkCtF"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
function isRecord(value) {
|
|
2
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
3
|
+
}
|
|
4
|
+
function readNumber(value) {
|
|
5
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
6
|
+
}
|
|
7
|
+
function readString(value) {
|
|
8
|
+
return typeof value === 'string' && value.trim() ? value : undefined;
|
|
9
|
+
}
|
|
10
|
+
function countMainItems(data) {
|
|
11
|
+
if (!isRecord(data) || !Array.isArray(data.main))
|
|
12
|
+
return 0;
|
|
13
|
+
return data.main.reduce((total, output) => {
|
|
14
|
+
if (!Array.isArray(output))
|
|
15
|
+
return total;
|
|
16
|
+
return total + output.length;
|
|
17
|
+
}, 0);
|
|
18
|
+
}
|
|
19
|
+
function previewMainData(data) {
|
|
20
|
+
if (!isRecord(data) || !Array.isArray(data.main))
|
|
21
|
+
return 'No output';
|
|
22
|
+
for (const output of data.main) {
|
|
23
|
+
if (!Array.isArray(output))
|
|
24
|
+
continue;
|
|
25
|
+
const first = output.find(isRecord);
|
|
26
|
+
if (!first)
|
|
27
|
+
continue;
|
|
28
|
+
const json = isRecord(first.json) ? first.json : first;
|
|
29
|
+
try {
|
|
30
|
+
const preview = JSON.stringify(json);
|
|
31
|
+
return preview.length > 160 ? `${preview.slice(0, 157)}...` : preview;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return 'Output could not be previewed';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return 'No output';
|
|
38
|
+
}
|
|
39
|
+
function getRunError(run) {
|
|
40
|
+
if (!isRecord(run))
|
|
41
|
+
return undefined;
|
|
42
|
+
const error = run.error;
|
|
43
|
+
if (isRecord(error)) {
|
|
44
|
+
return readString(error.message) ?? readString(error.description);
|
|
45
|
+
}
|
|
46
|
+
return readString(error);
|
|
47
|
+
}
|
|
48
|
+
export function getWorkflowExecutionRunRows(execution) {
|
|
49
|
+
const runData = execution.data?.resultData?.runData;
|
|
50
|
+
if (!runData)
|
|
51
|
+
return [];
|
|
52
|
+
return Object.entries(runData).flatMap(([nodeName, runs]) => {
|
|
53
|
+
if (!Array.isArray(runs))
|
|
54
|
+
return [];
|
|
55
|
+
return runs.map((run) => {
|
|
56
|
+
const record = isRecord(run) ? run : {};
|
|
57
|
+
const error = getRunError(record);
|
|
58
|
+
const data = record.data;
|
|
59
|
+
return {
|
|
60
|
+
nodeName,
|
|
61
|
+
status: error ? 'error' : execution.status === 'success' ? 'success' : 'unknown',
|
|
62
|
+
startTime: readNumber(record.startTime),
|
|
63
|
+
executionTimeMs: readNumber(record.executionTime),
|
|
64
|
+
itemCount: countMainItems(data),
|
|
65
|
+
preview: previewMainData(data),
|
|
66
|
+
error,
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
export function getWorkflowExecutionError(execution) {
|
|
72
|
+
const error = execution.data?.resultData?.error;
|
|
73
|
+
if (error?.message)
|
|
74
|
+
return error.message;
|
|
75
|
+
for (const row of getWorkflowExecutionRunRows(execution)) {
|
|
76
|
+
if (row.error)
|
|
77
|
+
return row.error;
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
export function formatWorkflowExecutionDuration(startedAt, stoppedAt) {
|
|
82
|
+
if (!startedAt)
|
|
83
|
+
return 'Unknown';
|
|
84
|
+
const startMs = Date.parse(startedAt);
|
|
85
|
+
const stopMs = stoppedAt ? Date.parse(stoppedAt) : Date.now();
|
|
86
|
+
if (!Number.isFinite(startMs) || !Number.isFinite(stopMs))
|
|
87
|
+
return 'Unknown';
|
|
88
|
+
const durationMs = Math.max(0, stopMs - startMs);
|
|
89
|
+
if (durationMs < 1000)
|
|
90
|
+
return `${durationMs} ms`;
|
|
91
|
+
if (durationMs < 60_000)
|
|
92
|
+
return `${(durationMs / 1000).toFixed(1)} s`;
|
|
93
|
+
return `${Math.round(durationMs / 60_000)} min`;
|
|
94
|
+
}
|
|
95
|
+
export function summarizeWorkflowExecution(execution) {
|
|
96
|
+
const rows = getWorkflowExecutionRunRows(execution);
|
|
97
|
+
const status = execution.status;
|
|
98
|
+
const tone = status === 'success'
|
|
99
|
+
? 'success'
|
|
100
|
+
: status === 'error' || status === 'crashed' || status === 'canceled'
|
|
101
|
+
? 'danger'
|
|
102
|
+
: status === 'running' || status === 'waiting'
|
|
103
|
+
? 'warning'
|
|
104
|
+
: 'muted';
|
|
105
|
+
const statusLabel = status === 'success'
|
|
106
|
+
? 'Succeeded'
|
|
107
|
+
: status === 'error'
|
|
108
|
+
? 'Failed'
|
|
109
|
+
: status === 'running'
|
|
110
|
+
? 'Running'
|
|
111
|
+
: status === 'waiting'
|
|
112
|
+
? 'Waiting'
|
|
113
|
+
: status.charAt(0).toUpperCase() + status.slice(1);
|
|
114
|
+
return {
|
|
115
|
+
statusLabel,
|
|
116
|
+
tone,
|
|
117
|
+
durationLabel: formatWorkflowExecutionDuration(execution.startedAt, execution.stoppedAt),
|
|
118
|
+
nodeCount: rows.length,
|
|
119
|
+
lastNode: execution.data?.resultData?.lastNodeExecuted,
|
|
120
|
+
error: getWorkflowExecutionError(execution),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
export function formatWorkflowEngineMetrics(execution) {
|
|
124
|
+
const engine = execution.data?.resultData?.engine;
|
|
125
|
+
if (!engine)
|
|
126
|
+
return null;
|
|
127
|
+
const skipped = engine.skipped > 0 ? ` / ${engine.skipped} skipped` : '';
|
|
128
|
+
const retries = engine.retries > 0 ? ` / ${engine.retries} retries` : '';
|
|
129
|
+
return `${engine.nodes} nodes / ${engine.levels} levels / ${engine.maxConcurrency} max parallel${skipped}${retries}`;
|
|
130
|
+
}
|
|
131
|
+
export function buildWorkflowExecutionDiagnostics(execution) {
|
|
132
|
+
const summary = summarizeWorkflowExecution(execution);
|
|
133
|
+
const rows = getWorkflowExecutionRunRows(execution);
|
|
134
|
+
const engineMetrics = formatWorkflowEngineMetrics(execution);
|
|
135
|
+
const lines = [
|
|
136
|
+
`Workflow execution ${execution.id}`,
|
|
137
|
+
`Status: ${summary.statusLabel}`,
|
|
138
|
+
`Workflow: ${execution.workflowId}`,
|
|
139
|
+
`Mode: ${execution.mode}`,
|
|
140
|
+
`Started: ${execution.startedAt}`,
|
|
141
|
+
`Stopped: ${execution.stoppedAt ?? 'still running'}`,
|
|
142
|
+
`Duration: ${summary.durationLabel}`,
|
|
143
|
+
summary.lastNode ? `Last node: ${summary.lastNode}` : null,
|
|
144
|
+
engineMetrics ? `Engine: ${engineMetrics}` : null,
|
|
145
|
+
summary.error ? `Error: ${summary.error}` : null,
|
|
146
|
+
].filter((line) => Boolean(line));
|
|
147
|
+
if (rows.length === 0) {
|
|
148
|
+
lines.push('Nodes: none recorded');
|
|
149
|
+
return lines.join('\n');
|
|
150
|
+
}
|
|
151
|
+
lines.push('Nodes:');
|
|
152
|
+
for (const row of rows) {
|
|
153
|
+
const elapsed = typeof row.executionTimeMs === 'number' ? `${row.executionTimeMs} ms` : 'unknown';
|
|
154
|
+
const result = row.error ? `error=${row.error}` : `preview=${row.preview}`;
|
|
155
|
+
lines.push(`- ${row.nodeName}: ${row.status}; ${row.itemCount} item${row.itemCount === 1 ? '' : 's'}; ${elapsed}; ${result}`);
|
|
156
|
+
}
|
|
157
|
+
return lines.join('\n');
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=execution-diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-diagnostics.js","sourceRoot":"","sources":["../../src/utils/execution-diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../../src/utils/generation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,eAAe,CAAC;AAOtE,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAEjB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AASxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../../src/utils/generation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,eAAe,CAAC;AAOtE,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAEjB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AASxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAoNxD,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAC5B,OAAO,CAAC,MAAM,EAAE,CAAC,CAwCnB;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,kBAAkB,EAAE,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CAuE9B;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,iBAAiB,CAAC,CA8C5B;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC,EACF,aAAa,EAAE,cAAc,EAAE,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CA6D7B;AA4MD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,cAAc,EAAE,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CA2B7B;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,gBAAgB,EAAE,kBAAkB,EACpC,mBAAmB,EAAE,MAAM,EAC3B,aAAa,EAAE,cAAc,EAAE,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CAmC7B;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,kBAAkB,GAAG,cAAc,EAAE,CAsB7F;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,aAAa,EACtB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAkCD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,gBAAgB,EAAE,EAChC,cAAc,EAAE,gBAAgB,EAAE,GACjC,OAAO,CAAC,iBAAiB,CAAC,CAuC5B;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,EAAE,mBAAmB,EAAE,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAkE7B;AAqDD,4EAA4E;AAC5E,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,kBAAkB,EAC5B,UAAU,EAAE,qBAAqB,EAAE,GAClC,OAAO,CAAC,kBAAkB,CAAC,CAoI7B"}
|