@controllerai/cli 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +180 -0
- package/dist/api/client.js +330 -0
- package/dist/api/client.js.map +1 -0
- package/dist/appLinks.js +99 -0
- package/dist/appLinks.js.map +1 -0
- package/dist/argv.js +124 -0
- package/dist/argv.js.map +1 -0
- package/dist/commands/agent.js +813 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/auth.js +327 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/branch.js +441 -0
- package/dist/commands/branch.js.map +1 -0
- package/dist/commands/connect.js +148 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/connection.js +148 -0
- package/dist/commands/connection.js.map +1 -0
- package/dist/commands/data.js +441 -0
- package/dist/commands/data.js.map +1 -0
- package/dist/commands/deps.js +63 -0
- package/dist/commands/deps.js.map +1 -0
- package/dist/commands/doctor.js +102 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/events.js +72 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/exec.js +306 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/expr.js +346 -0
- package/dist/commands/expr.js.map +1 -0
- package/dist/commands/flow.js +447 -0
- package/dist/commands/flow.js.map +1 -0
- package/dist/commands/integration.js +102 -0
- package/dist/commands/integration.js.map +1 -0
- package/dist/commands/node.js +885 -0
- package/dist/commands/node.js.map +1 -0
- package/dist/commands/organize.js +234 -0
- package/dist/commands/organize.js.map +1 -0
- package/dist/commands/run.js +437 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/schema.js +269 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/skills.js +1156 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/trigger.js +992 -0
- package/dist/commands/trigger.js.map +1 -0
- package/dist/commands/workflow.js +503 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/config.js +74 -0
- package/dist/config.js.map +1 -0
- package/dist/context.js +39 -0
- package/dist/context.js.map +1 -0
- package/dist/errors.js +59 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.js +125 -0
- package/dist/index.js.map +1 -0
- package/dist/jsSource.js +32 -0
- package/dist/jsSource.js.map +1 -0
- package/dist/nodeProps.js +177 -0
- package/dist/nodeProps.js.map +1 -0
- package/dist/output.js +85 -0
- package/dist/output.js.map +1 -0
- package/dist/version.js +7 -0
- package/dist/version.js.map +1 -0
- package/package.json +41 -0
- package/skills/controllerai-agents/SKILL.md +169 -0
- package/skills/controllerai-agents/agents/openai.yaml +4 -0
- package/skills/controllerai-agents/references/instructions-and-versioning.md +76 -0
- package/skills/controllerai-ai-nodes/SKILL.md +83 -0
- package/skills/controllerai-ai-nodes/agents/openai.yaml +4 -0
- package/skills/controllerai-ai-nodes/references/selection-and-testing.md +46 -0
- package/skills/controllerai-data/SKILL.md +121 -0
- package/skills/controllerai-data/agents/openai.yaml +4 -0
- package/skills/controllerai-data/references/data-rails.md +46 -0
- package/skills/controllerai-expressions/SKILL.md +115 -0
- package/skills/controllerai-expressions/agents/openai.yaml +4 -0
- package/skills/controllerai-expressions/references/dsl-and-recipes.md +120 -0
- package/skills/controllerai-flow-control/SKILL.md +132 -0
- package/skills/controllerai-flow-control/agents/openai.yaml +4 -0
- package/skills/controllerai-flow-control/references/patterns.md +61 -0
- package/skills/controllerai-integration-actions/SKILL.md +95 -0
- package/skills/controllerai-integration-actions/agents/openai.yaml +4 -0
- package/skills/controllerai-node-config/SKILL.md +138 -0
- package/skills/controllerai-node-config/agents/openai.yaml +4 -0
- package/skills/controllerai-node-config/references/prop-and-readiness.md +72 -0
- package/skills/controllerai-runs/SKILL.md +109 -0
- package/skills/controllerai-runs/agents/openai.yaml +4 -0
- package/skills/controllerai-runs/references/debugging.md +53 -0
- package/skills/controllerai-start/SKILL.md +44 -0
- package/skills/controllerai-start/agents/openai.yaml +4 -0
- package/skills/controllerai-triggers/SKILL.md +174 -0
- package/skills/controllerai-triggers/agents/openai.yaml +4 -0
- package/skills/controllerai-triggers/references/lifecycle.md +54 -0
- package/skills/controllerai-workflows/SKILL.md +86 -0
- package/skills/controllerai-workflows/agents/openai.yaml +4 -0
- package/skills/controllerai-workflows/references/command-map.md +64 -0
- package/skills/manifest.json +248 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import { requireContext } from '../context.js';
|
|
2
|
+
import { CaiError, userError } from '../errors.js';
|
|
3
|
+
import { resolveJsSource } from '../jsSource.js';
|
|
4
|
+
import { expressionReadbackChannel, nodePropsFromPayload } from '../nodeProps.js';
|
|
5
|
+
import { emit, emitError, isJsonMode, printKeyValues, printTable, warn } from '../output.js';
|
|
6
|
+
const bindingName = (js) => js.replace(/^(inputs|flow)\./, '');
|
|
7
|
+
export const validationFailed = (result) => result?.valid !== true || (result?.errors ?? []).length > 0;
|
|
8
|
+
export const validationMessage = (result) => (result?.errors ?? []).join('\n') || JSON.stringify(result ?? null);
|
|
9
|
+
const sourceNodeOf = (type) => {
|
|
10
|
+
const match = /^output\.node\.(.+?)(#data)?$/.exec(type ?? '');
|
|
11
|
+
return match ? match[1] : null;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Binding lookup on the backend is forgiving — four fallbacks — so a wrong
|
|
15
|
+
* guess binds to the WRONG input and still compiles clean. Every binding is
|
|
16
|
+
* therefore annotated with its de-duplicated JS name, the owning node and the
|
|
17
|
+
* opaque input id, and any shared display name is flagged loudly.
|
|
18
|
+
*
|
|
19
|
+
* `ctx.nodeInputs` is built by mapping `node.data.inputs` in order, so pairing
|
|
20
|
+
* the context bindings with the node record by index is exact, not heuristic.
|
|
21
|
+
*/
|
|
22
|
+
export const annotate = (bindings, records) => {
|
|
23
|
+
const displayCounts = new Map();
|
|
24
|
+
for (const b of bindings) {
|
|
25
|
+
const key = (b.displayName ?? '').toLowerCase();
|
|
26
|
+
if (key)
|
|
27
|
+
displayCounts.set(key, (displayCounts.get(key) ?? 0) + 1);
|
|
28
|
+
}
|
|
29
|
+
return bindings.map((b, index) => ({
|
|
30
|
+
...b,
|
|
31
|
+
jsName: bindingName(b.js),
|
|
32
|
+
inputId: records[index]?.id ?? null,
|
|
33
|
+
sourceNodeId: sourceNodeOf(b.type),
|
|
34
|
+
duplicateDisplayName: (displayCounts.get((b.displayName ?? '').toLowerCase()) ?? 0) > 1,
|
|
35
|
+
}));
|
|
36
|
+
};
|
|
37
|
+
/** Locate the flow containing `nodeId` and return its flow-input records. */
|
|
38
|
+
const findFlowInputs = async (api, workflowId, nodeId) => {
|
|
39
|
+
try {
|
|
40
|
+
const flows = await api.tool(workflowId, 'get_flows', {});
|
|
41
|
+
for (const summary of flows ?? []) {
|
|
42
|
+
if (!summary.flowInputCount)
|
|
43
|
+
continue;
|
|
44
|
+
const detail = await api.tool(workflowId, 'get_flow', { flowId: summary.id });
|
|
45
|
+
if ((detail?.nodes ?? []).some((n) => n.id === nodeId)) {
|
|
46
|
+
return detail?.flowInputs ?? [];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// annotation is best-effort; a missing id prints as "-" rather than failing
|
|
52
|
+
}
|
|
53
|
+
return [];
|
|
54
|
+
};
|
|
55
|
+
export const registerExpr = (program) => {
|
|
56
|
+
const expr = program.command('expr').description('The expression surface');
|
|
57
|
+
expr
|
|
58
|
+
.command('context')
|
|
59
|
+
.argument('<nodeId>')
|
|
60
|
+
.option('--prop <name>', 'the destination prop — adds its expected type and mode')
|
|
61
|
+
.option('--methods', 'include the full method catalog (large)', false)
|
|
62
|
+
.description('MANDATORY before writing any --js. Lists every in-scope binding.')
|
|
63
|
+
.action(async (nodeId, opts, command) => {
|
|
64
|
+
const { api, workflowId } = requireContext(command);
|
|
65
|
+
const [context, nodeRecord] = await Promise.all([
|
|
66
|
+
api.tool(workflowId, 'get_expression_context', {
|
|
67
|
+
nodeId,
|
|
68
|
+
...(opts.prop ? { propName: opts.prop } : {}),
|
|
69
|
+
}),
|
|
70
|
+
api.tool(workflowId, 'get_node', { nodeId }).catch(() => null),
|
|
71
|
+
]);
|
|
72
|
+
const nodeInputs = nodeRecord?.inputs ?? nodeRecord?.data?.inputs ?? [];
|
|
73
|
+
// get_node does not report the containing flow, so the flow-input records
|
|
74
|
+
// (needed for their opaque ids) are found by locating the owning canvas.
|
|
75
|
+
// Only worth the round trips when there are flow bindings to annotate.
|
|
76
|
+
const flowInputs = (context.flow ?? []).length
|
|
77
|
+
? await findFlowInputs(api, workflowId, nodeId)
|
|
78
|
+
: [];
|
|
79
|
+
const inputs = annotate(context.inputs ?? [], nodeInputs);
|
|
80
|
+
const flow = annotate(context.flow ?? [], flowInputs);
|
|
81
|
+
const duplicates = [...inputs, ...flow].filter(b => b.duplicateDisplayName);
|
|
82
|
+
for (const d of duplicates) {
|
|
83
|
+
warn(`AMBIGUOUS DISPLAY NAME "${d.displayName}" — bind with the exact JS name "${d.js}" ` +
|
|
84
|
+
`(input id ${d.inputId ?? 'unknown'}${d.sourceNodeId ? `, from node ${d.sourceNodeId}` : ''}). Backend lookup has four fallbacks: a wrong guess binds to the wrong input ` +
|
|
85
|
+
'and still compiles clean.');
|
|
86
|
+
}
|
|
87
|
+
const payload = {
|
|
88
|
+
nodeId,
|
|
89
|
+
inputs,
|
|
90
|
+
flow,
|
|
91
|
+
process: context.process ?? null,
|
|
92
|
+
item: context.item ?? null,
|
|
93
|
+
workflowData: context.workflowData ?? [],
|
|
94
|
+
constants: context.constants ?? [],
|
|
95
|
+
unwiredUpstreamOutputs: context.unwiredUpstreamOutputs ?? [],
|
|
96
|
+
schemas: context.schemas ?? {},
|
|
97
|
+
targetProp: context.targetProp ?? null,
|
|
98
|
+
targetPropError: context.targetPropError ?? null,
|
|
99
|
+
duplicateDisplayNames: duplicates.map(d => ({
|
|
100
|
+
displayName: d.displayName,
|
|
101
|
+
js: d.js,
|
|
102
|
+
jsName: d.jsName,
|
|
103
|
+
inputId: d.inputId,
|
|
104
|
+
sourceNodeId: d.sourceNodeId,
|
|
105
|
+
})),
|
|
106
|
+
...(opts.methods ? { methods: context.methods } : {}),
|
|
107
|
+
};
|
|
108
|
+
emit(payload, () => {
|
|
109
|
+
if (payload.targetProp) {
|
|
110
|
+
printKeyValues([
|
|
111
|
+
['target prop', payload.targetProp.key],
|
|
112
|
+
['expected type', payload.targetProp.expectedType],
|
|
113
|
+
['mode', payload.targetProp.mode],
|
|
114
|
+
]);
|
|
115
|
+
process.stdout.write('\n');
|
|
116
|
+
}
|
|
117
|
+
if (payload.targetPropError) {
|
|
118
|
+
process.stdout.write(`targetProp error: ${payload.targetPropError}\n\n`);
|
|
119
|
+
}
|
|
120
|
+
process.stdout.write('node inputs\n');
|
|
121
|
+
printTable(['js', 'displayName', 'resolvedType', 'inputId', 'fromNode', 'dup'], inputs.map(b => [
|
|
122
|
+
b.js,
|
|
123
|
+
b.displayName,
|
|
124
|
+
b.resolvedType ?? b.type,
|
|
125
|
+
b.inputId,
|
|
126
|
+
b.sourceNodeId,
|
|
127
|
+
b.duplicateDisplayName ? 'DUPLICATE' : '',
|
|
128
|
+
]));
|
|
129
|
+
process.stdout.write('\nflow inputs\n');
|
|
130
|
+
printTable(['js', 'displayName', 'type', 'inputId', 'dup'], flow.map(b => [
|
|
131
|
+
b.js,
|
|
132
|
+
b.displayName,
|
|
133
|
+
b.type,
|
|
134
|
+
b.inputId,
|
|
135
|
+
b.duplicateDisplayName ? 'DUPLICATE' : '',
|
|
136
|
+
]));
|
|
137
|
+
if (payload.item) {
|
|
138
|
+
process.stdout.write(`\nloop item\n ${payload.item.js} : ${payload.item.type}\n`);
|
|
139
|
+
}
|
|
140
|
+
if (payload.process) {
|
|
141
|
+
process.stdout.write(`\nprocess output\n ${payload.process.js} : ${payload.process.type}\n`);
|
|
142
|
+
}
|
|
143
|
+
process.stdout.write('\nworkflow data\n');
|
|
144
|
+
printTable(['js', 'type'], payload.workflowData.map(w => [w.js, w.type]));
|
|
145
|
+
process.stdout.write('\nconstants\n');
|
|
146
|
+
printTable(['js', 'type'], payload.constants.map(c => [c.js, c.type]));
|
|
147
|
+
if (payload.unwiredUpstreamOutputs.length) {
|
|
148
|
+
process.stdout.write('\nupstream outputs NOT wired in yet\n');
|
|
149
|
+
printTable(['sourceNodeId', 'sourceNode', 'output', 'dataType'], payload.unwiredUpstreamOutputs.map(u => [
|
|
150
|
+
u.sourceNodeId,
|
|
151
|
+
u.sourceNodeName,
|
|
152
|
+
u.outputDisplayName,
|
|
153
|
+
u.dataType,
|
|
154
|
+
]));
|
|
155
|
+
}
|
|
156
|
+
const fieldRows = inputs
|
|
157
|
+
.flatMap(b => (b.fields ?? []).map(f => [`${b.js}${f.js}`, f.display, f.type]))
|
|
158
|
+
.concat(flow.flatMap(b => (b.fields ?? []).map(f => [`${b.js}${f.js}`, f.display, f.type])));
|
|
159
|
+
if (fieldRows.length) {
|
|
160
|
+
process.stdout.write('\nnavigable fields\n');
|
|
161
|
+
printTable(['js', 'display', 'type'], fieldRows);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
expr
|
|
166
|
+
.command('validate')
|
|
167
|
+
.argument('<nodeId>')
|
|
168
|
+
.option('--js <src>', 'expression DSL source')
|
|
169
|
+
.option('--js-file <path|->', 'read expression DSL source from a UTF-8 file or stdin')
|
|
170
|
+
.option('--prop <name>', 'destination prop — validates against its real type and mode')
|
|
171
|
+
.option('--mode <text|expression|onlyWhen>', 'compile target when --prop is unknown')
|
|
172
|
+
.description('Compile an expression against the node’s real scope. Side-effect free.')
|
|
173
|
+
.action(async (nodeId, opts, command) => {
|
|
174
|
+
const js = resolveJsSource(opts);
|
|
175
|
+
const { api, workflowId } = requireContext(command);
|
|
176
|
+
if (opts.mode && !['text', 'expression', 'onlyWhen'].includes(opts.mode)) {
|
|
177
|
+
throw userError(`--mode must be text, expression or onlyWhen.`, 'BAD_MODE');
|
|
178
|
+
}
|
|
179
|
+
const result = await api.tool(workflowId, 'validate_expression', {
|
|
180
|
+
js,
|
|
181
|
+
nodeId,
|
|
182
|
+
...(opts.prop ? { propName: opts.prop } : {}),
|
|
183
|
+
...(opts.mode ? { mode: opts.mode } : {}),
|
|
184
|
+
});
|
|
185
|
+
const failed = validationFailed(result);
|
|
186
|
+
for (const w of result?.warnings ?? [])
|
|
187
|
+
warn(String(w));
|
|
188
|
+
if (failed && isJsonMode()) {
|
|
189
|
+
emitError(new CaiError(`Expression validation failed.\n\n${validationMessage(result)}`, {
|
|
190
|
+
code: 'EXPRESSION_INVALID',
|
|
191
|
+
detail: result,
|
|
192
|
+
}));
|
|
193
|
+
process.exitCode = 1;
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
emit(result, () => {
|
|
197
|
+
printKeyValues([
|
|
198
|
+
['valid', failed ? 'NO' : 'yes'],
|
|
199
|
+
['inferredType', result?.inferredType ?? '-'],
|
|
200
|
+
...(result?.errorCategory
|
|
201
|
+
? [['errorCategory', result.errorCategory]]
|
|
202
|
+
: []),
|
|
203
|
+
]);
|
|
204
|
+
if (failed) {
|
|
205
|
+
process.stdout.write('\nerrors\n');
|
|
206
|
+
for (const message of result?.errors ?? [])
|
|
207
|
+
process.stdout.write(` ${message}\n`);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
process.stdout.write(`\ncompiled\n${JSON.stringify(result?.expression, null, 2)}\n`);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
if (failed)
|
|
214
|
+
process.exitCode = 1;
|
|
215
|
+
});
|
|
216
|
+
expr
|
|
217
|
+
.command('set')
|
|
218
|
+
.argument('<nodeId>')
|
|
219
|
+
.requiredOption('--prop <name>', 'destination prop')
|
|
220
|
+
.option('--js <src>', 'expression DSL source')
|
|
221
|
+
.option('--js-file <path|->', 'read expression DSL source from a UTF-8 file or stdin')
|
|
222
|
+
.description('Context-check, compile, persist to the correct channel, and verify readback')
|
|
223
|
+
.action(async (nodeId, opts, command) => {
|
|
224
|
+
const js = resolveJsSource(opts);
|
|
225
|
+
const { api, workflowId } = requireContext(command);
|
|
226
|
+
const context = await api.tool(workflowId, 'get_expression_context', {
|
|
227
|
+
nodeId,
|
|
228
|
+
propName: opts.prop,
|
|
229
|
+
});
|
|
230
|
+
if (context?.targetPropError) {
|
|
231
|
+
throw userError(String(context.targetPropError), 'EXPRESSION_TARGET_UNAVAILABLE');
|
|
232
|
+
}
|
|
233
|
+
const propsData = await api.tool(workflowId, 'get_node_props', { nodeId });
|
|
234
|
+
const props = nodePropsFromPayload(propsData);
|
|
235
|
+
const prop = props.find(row => (row.name ?? row.key) === opts.prop);
|
|
236
|
+
if (!prop) {
|
|
237
|
+
throw userError(`Prop "${opts.prop}" is not available. Known: ${props
|
|
238
|
+
.map(row => row.name ?? row.key)
|
|
239
|
+
.filter(Boolean)
|
|
240
|
+
.join(', ')}`, 'PROP_NOT_FOUND');
|
|
241
|
+
}
|
|
242
|
+
if (prop.enabled === false || prop.source === 'propsCatalog') {
|
|
243
|
+
throw userError(`Prop "${opts.prop}" must be enabled before writing an expression: ` +
|
|
244
|
+
`\`cai node enable-prop ${nodeId} --prop ${opts.prop}\`.`, 'PROP_NOT_ENABLED');
|
|
245
|
+
}
|
|
246
|
+
const validation = await api.tool(workflowId, 'validate_expression', {
|
|
247
|
+
js,
|
|
248
|
+
nodeId,
|
|
249
|
+
propName: opts.prop,
|
|
250
|
+
});
|
|
251
|
+
if (validationFailed(validation)) {
|
|
252
|
+
throw userError(`Expression did not compile — nothing was written.\n\n${validationMessage(validation)}`, 'EXPRESSION_COMPILE_ERROR');
|
|
253
|
+
}
|
|
254
|
+
for (const message of validation.warnings ?? [])
|
|
255
|
+
warn(String(message));
|
|
256
|
+
const channel = expressionReadbackChannel(prop);
|
|
257
|
+
const result = await api.mutate(workflowId, () => api.tool(workflowId, 'update_node_prop', {
|
|
258
|
+
nodeId,
|
|
259
|
+
key: opts.prop,
|
|
260
|
+
// The backend owns the compile target and stored-channel routing.
|
|
261
|
+
// Always write valueJs, then verify its decompiled stored channel.
|
|
262
|
+
valueJs: js,
|
|
263
|
+
}));
|
|
264
|
+
const freshData = await api.tool(workflowId, 'get_node_props', { nodeId });
|
|
265
|
+
const freshProps = nodePropsFromPayload(freshData);
|
|
266
|
+
const readback = freshProps.find(row => (row.name ?? row.key) === opts.prop);
|
|
267
|
+
if (!readback?.[channel]) {
|
|
268
|
+
throw userError(`The backend accepted the write but ${opts.prop}.${channel} did not read back.`, 'READBACK_MISMATCH');
|
|
269
|
+
}
|
|
270
|
+
emit({
|
|
271
|
+
nodeId,
|
|
272
|
+
prop: opts.prop,
|
|
273
|
+
channel,
|
|
274
|
+
inferredType: validation.inferredType ?? null,
|
|
275
|
+
expectedType: context?.targetProp?.expectedType ?? null,
|
|
276
|
+
persistedJs: readback[channel],
|
|
277
|
+
result,
|
|
278
|
+
}, () => printKeyValues([
|
|
279
|
+
['nodeId', nodeId],
|
|
280
|
+
['prop', opts.prop],
|
|
281
|
+
['channel', channel],
|
|
282
|
+
['inferred type', validation.inferredType ?? '-'],
|
|
283
|
+
['expected type', context?.targetProp?.expectedType ?? '-'],
|
|
284
|
+
['verified', 'yes'],
|
|
285
|
+
]));
|
|
286
|
+
});
|
|
287
|
+
expr
|
|
288
|
+
.command('ops')
|
|
289
|
+
.option('--type <ctype>', 'restrict to one base type: text|number|date|list|boolean|file|custom')
|
|
290
|
+
.description('The method catalog: which operations exist per CType')
|
|
291
|
+
.action(async (opts, command) => {
|
|
292
|
+
const { api, workflowId } = requireContext(command);
|
|
293
|
+
// The catalog rides on the context view; any node in the workflow works.
|
|
294
|
+
const flows = await api.tool(workflowId, 'get_flows', {});
|
|
295
|
+
const withNodes = (flows ?? []).find(f => f.nodeCount > 0);
|
|
296
|
+
if (!withNodes) {
|
|
297
|
+
throw userError('The method catalog is served with a node’s expression context, and this workflow ' +
|
|
298
|
+
'has no nodes yet. Add one node, then re-run.', 'NO_NODES');
|
|
299
|
+
}
|
|
300
|
+
const flow = await api.tool(workflowId, 'get_flow', { flowId: withNodes.id });
|
|
301
|
+
const anyNodeId = (flow.nodes ?? [])[0]?.id;
|
|
302
|
+
const context = await api.tool(workflowId, 'get_expression_context', { nodeId: anyNodeId });
|
|
303
|
+
const methods = context.methods ?? {};
|
|
304
|
+
const filtered = opts.type ? { [opts.type]: methods[opts.type] ?? [] } : methods;
|
|
305
|
+
if (opts.type && !methods[opts.type]) {
|
|
306
|
+
throw userError(`Unknown type "${opts.type}". Known: ${Object.keys(methods).join(', ')}.`, 'UNKNOWN_CTYPE');
|
|
307
|
+
}
|
|
308
|
+
emit(filtered, () => {
|
|
309
|
+
for (const [type, ops] of Object.entries(filtered)) {
|
|
310
|
+
process.stdout.write(`\n${type}\n`);
|
|
311
|
+
for (const op of ops)
|
|
312
|
+
process.stdout.write(` ${op}\n`);
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
expr
|
|
317
|
+
.command('decompile')
|
|
318
|
+
.argument('<nodeId>')
|
|
319
|
+
.requiredOption('--prop <name>')
|
|
320
|
+
.description('Stored AST -> readable JS (reads valueJs from `node props`)')
|
|
321
|
+
.action(async (nodeId, opts, command) => {
|
|
322
|
+
const { api, workflowId } = requireContext(command);
|
|
323
|
+
const data = await api.tool(workflowId, 'get_node_props', { nodeId });
|
|
324
|
+
const props = nodePropsFromPayload(data);
|
|
325
|
+
const prop = props.find(p => (p.name ?? p.key) === opts.prop);
|
|
326
|
+
if (!prop) {
|
|
327
|
+
throw userError(`Prop "${opts.prop}" not found on ${nodeId}. Known: ${props
|
|
328
|
+
.map(p => p.name ?? p.key)
|
|
329
|
+
.join(', ')}`, 'PROP_NOT_FOUND');
|
|
330
|
+
}
|
|
331
|
+
const channel = prop.expressionValueJs !== undefined && prop.expressionValueJs !== null
|
|
332
|
+
? 'expressionValueJs'
|
|
333
|
+
: 'valueJs';
|
|
334
|
+
const js = prop[channel];
|
|
335
|
+
if (js === undefined || js === null) {
|
|
336
|
+
warn(`Prop "${opts.prop}" holds no expression — it is a static value.`);
|
|
337
|
+
}
|
|
338
|
+
emit({ nodeId, prop: opts.prop, channel, js: js ?? null, value: prop.value ?? null }, () => printKeyValues([
|
|
339
|
+
['prop', opts.prop],
|
|
340
|
+
['channel', channel],
|
|
341
|
+
['js', js ?? '(static value)'],
|
|
342
|
+
['value', JSON.stringify(prop.value ?? null)],
|
|
343
|
+
]));
|
|
344
|
+
});
|
|
345
|
+
};
|
|
346
|
+
//# sourceMappingURL=expr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expr.js","sourceRoot":"","sources":["../../src/commands/expr.ts"],"names":[],"mappings":"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"}
|