@controllerai/cli 0.2.9 → 0.2.10
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/dist/api/client.js +20 -5
- package/dist/api/client.js.map +1 -1
- package/dist/argv.js +330 -29
- package/dist/argv.js.map +1 -1
- package/dist/commands/agent.js +208 -8
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/auth.js +21 -5
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/doctor.js +63 -4
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/exec.js +161 -49
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/expr.js +284 -53
- package/dist/commands/expr.js.map +1 -1
- package/dist/commands/flow.js +58 -14
- package/dist/commands/flow.js.map +1 -1
- package/dist/commands/node.js +746 -173
- package/dist/commands/node.js.map +1 -1
- package/dist/commands/organize.js +1 -1
- package/dist/commands/organize.js.map +1 -1
- package/dist/commands/run.js +165 -33
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/schema.js +8 -7
- package/dist/commands/schema.js.map +1 -1
- package/dist/commands/workflow.js +151 -24
- package/dist/commands/workflow.js.map +1 -1
- package/dist/config.js +152 -6
- package/dist/config.js.map +1 -1
- package/dist/context.js +66 -5
- package/dist/context.js.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/nodeProps.js +333 -10
- package/dist/nodeProps.js.map +1 -1
- package/dist/output.js +6 -1
- package/dist/output.js.map +1 -1
- package/package.json +1 -1
- package/skills/controllerai-agents/SKILL.md +27 -9
- package/skills/controllerai-agents/references/instructions-and-versioning.md +1 -1
- package/skills/controllerai-data/SKILL.md +17 -0
- package/skills/controllerai-data/references/data-rails.md +1 -1
- package/skills/controllerai-expressions/SKILL.md +7 -3
- package/skills/controllerai-flow-control/SKILL.md +2 -0
- package/skills/controllerai-node-config/SKILL.md +33 -6
- package/skills/controllerai-node-config/references/prop-and-readiness.md +34 -0
- package/skills/controllerai-runs/SKILL.md +14 -4
- package/skills/controllerai-runs/references/debugging.md +1 -1
- package/skills/controllerai-start/SKILL.md +1 -0
- package/skills/controllerai-workflows/SKILL.md +13 -8
- package/skills/controllerai-workflows/references/command-map.md +3 -2
- package/skills/manifest.json +58 -58
package/dist/nodeProps.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
2
|
+
import { userError } from './errors.js';
|
|
1
3
|
const NODE_PROP_WRITE_KEYS = new Set([
|
|
2
4
|
'value',
|
|
3
5
|
'valueLabel',
|
|
@@ -31,7 +33,121 @@ export const nodePropsFromPayload = (payload) => {
|
|
|
31
33
|
}
|
|
32
34
|
return [];
|
|
33
35
|
};
|
|
34
|
-
|
|
36
|
+
/** Optional metadata added by newer backends for all run-subflow node variants. */
|
|
37
|
+
export const subflowTargetFromPayload = (payload) => {
|
|
38
|
+
if (!payload || typeof payload !== 'object' || Array.isArray(payload))
|
|
39
|
+
return undefined;
|
|
40
|
+
const record = payload;
|
|
41
|
+
const target = record.subflowTarget;
|
|
42
|
+
if (!target ||
|
|
43
|
+
typeof target !== 'object' ||
|
|
44
|
+
Array.isArray(target) ||
|
|
45
|
+
(target.flowId !== null && typeof target.flowId !== 'string') ||
|
|
46
|
+
typeof target.exists !== 'boolean' ||
|
|
47
|
+
!Number.isSafeInteger(target.nodeCount) ||
|
|
48
|
+
Number(target.nodeCount) < 0 ||
|
|
49
|
+
(target.exists && target.flowId === null) ||
|
|
50
|
+
(!target.exists && target.nodeCount !== 0)) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
flowId: target.flowId,
|
|
55
|
+
exists: target.exists,
|
|
56
|
+
nodeCount: Number(target.nodeCount),
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
const textExpressionEntryIsConfigured = (value) => {
|
|
60
|
+
if (value === undefined || value === null || value === '')
|
|
61
|
+
return false;
|
|
62
|
+
if (Array.isArray(value))
|
|
63
|
+
return value.some(textExpressionEntryIsConfigured);
|
|
64
|
+
if (typeof value !== 'object')
|
|
65
|
+
return true;
|
|
66
|
+
const record = value;
|
|
67
|
+
if (record.type === 'empty')
|
|
68
|
+
return false;
|
|
69
|
+
if (record.type !== 'TextExpression')
|
|
70
|
+
return true;
|
|
71
|
+
return Array.isArray(record.entries) && record.entries.some(textExpressionEntryIsConfigured);
|
|
72
|
+
};
|
|
73
|
+
const storedPropValueIsConfigured = (value) => {
|
|
74
|
+
if (value === undefined || value === null || value === '')
|
|
75
|
+
return false;
|
|
76
|
+
if (Array.isArray(value)) {
|
|
77
|
+
const containsTextExpression = value.some(item => Boolean(item) &&
|
|
78
|
+
typeof item === 'object' &&
|
|
79
|
+
!Array.isArray(item) &&
|
|
80
|
+
item.type === 'TextExpression');
|
|
81
|
+
return containsTextExpression ? value.some(storedPropValueIsConfigured) : true;
|
|
82
|
+
}
|
|
83
|
+
if (!value || typeof value !== 'object')
|
|
84
|
+
return true;
|
|
85
|
+
const record = value;
|
|
86
|
+
if (record.type === 'empty')
|
|
87
|
+
return false;
|
|
88
|
+
if (record.type !== 'TextExpression')
|
|
89
|
+
return true;
|
|
90
|
+
return Array.isArray(record.entries) && record.entries.some(textExpressionEntryIsConfigured);
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Readiness follows the editor's active storage channel. Decompiled JS fields are
|
|
94
|
+
* read-only projections and cannot turn an empty stored value into configured data.
|
|
95
|
+
*/
|
|
96
|
+
export const hasConfiguredPropValue = (prop) => {
|
|
97
|
+
const value = prop.allowsExpressionMode === true && prop.hasDynamicExpression === true
|
|
98
|
+
? prop.expressionValue
|
|
99
|
+
: prop.value;
|
|
100
|
+
return !(prop.required === true &&
|
|
101
|
+
Array.isArray(value) &&
|
|
102
|
+
value.length === 0) && storedPropValueIsConfigured(value);
|
|
103
|
+
};
|
|
104
|
+
const hasConfiguredReloadSelectorValue = (prop) => {
|
|
105
|
+
const value = prop.allowsExpressionMode === true && prop.hasDynamicExpression === true
|
|
106
|
+
? prop.expressionValue
|
|
107
|
+
: prop.value;
|
|
108
|
+
return (!Array.isArray(value) || value.length > 0) && hasConfiguredPropValue(prop);
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Array props with expression mode store one whole-list expression in
|
|
112
|
+
* expressionValue. Array props without that channel write through value[]:
|
|
113
|
+
* SHORT_TEXT_ARRAY can replace the list with one scalar dynamic element, while
|
|
114
|
+
* every other array input type accepts static lists only.
|
|
115
|
+
*/
|
|
116
|
+
export const assertArrayExpressionWriteSupported = (nodeId, propName, prop, inferredType, writeChannel = 'routed') => {
|
|
117
|
+
const inputType = String(prop.inputType ?? '');
|
|
118
|
+
if (!inputType.endsWith('_ARRAY'))
|
|
119
|
+
return;
|
|
120
|
+
if (writeChannel === 'routed' && prop.allowsExpressionMode)
|
|
121
|
+
return;
|
|
122
|
+
if (writeChannel === 'expressionValue' && prop.allowsExpressionMode)
|
|
123
|
+
return;
|
|
124
|
+
const missingWholeExpressionChannel = writeChannel === 'expressionValue';
|
|
125
|
+
if (!missingWholeExpressionChannel &&
|
|
126
|
+
inputType === 'SHORT_TEXT_ARRAY' &&
|
|
127
|
+
!String(inferredType ?? '').startsWith('list.')) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const staticListGuidance = `For a static list, run \`cai node set ${nodeId} --prop ${propName} --value '["a","b"]'\`.`;
|
|
131
|
+
if (missingWholeExpressionChannel) {
|
|
132
|
+
throw userError(`Prop "${propName}" (${inputType}) does not expose an expressionValue whole-list ` +
|
|
133
|
+
`channel; nothing was written. ${staticListGuidance}`, 'ARRAY_EXPRESSION_UNSUPPORTED');
|
|
134
|
+
}
|
|
135
|
+
if (inputType === 'SHORT_TEXT_ARRAY' && !missingWholeExpressionChannel) {
|
|
136
|
+
throw userError(`Prop "${propName}" (${inputType}) cannot store a list-typed expression in its value[] ` +
|
|
137
|
+
`element channel; nothing was written. ${staticListGuidance} A scalar expression ` +
|
|
138
|
+
`replaces the entire prop with one dynamic element; use \`cai expr set ${nodeId} ` +
|
|
139
|
+
`--prop ${propName} --js <scalar-expression>\`. For multiple dynamic elements, ` +
|
|
140
|
+
'configure them individually in the builder; no indexed CLI authoring exists.', 'ARRAY_EXPRESSION_UNSUPPORTED');
|
|
141
|
+
}
|
|
142
|
+
throw userError(`Prop "${propName}" (${inputType}) does not support expression writes in its value[] ` +
|
|
143
|
+
`element channel; nothing was written. ${staticListGuidance}`, 'ARRAY_EXPRESSION_UNSUPPORTED');
|
|
144
|
+
};
|
|
145
|
+
export const arrayExpressionReplacementWarning = (propName, prop) => String(prop.inputType ?? '') === 'SHORT_TEXT_ARRAY' &&
|
|
146
|
+
!prop.allowsExpressionMode &&
|
|
147
|
+
Array.isArray(prop.value) &&
|
|
148
|
+
prop.value.length > 1
|
|
149
|
+
? `Writing a scalar expression here: this replaces ${prop.value.length} existing elements with one dynamic element.`
|
|
150
|
+
: undefined;
|
|
35
151
|
// This mirrors the backend's TEXT_FAMILY_PROP_INPUT_TYPES. Callers always send
|
|
36
152
|
// valueJs; the backend chooses the stored field and get_node_props decompiles it
|
|
37
153
|
// back into one of these two readback channels.
|
|
@@ -47,10 +163,127 @@ export const expressionReadbackChannel = (prop) => Boolean(prop.allowsExpression
|
|
|
47
163
|
!EXPRESSION_STORED_IN_VALUE.has(String(prop.inputType ?? ''))
|
|
48
164
|
? 'expressionValueJs'
|
|
49
165
|
: 'valueJs';
|
|
166
|
+
const printable = (value) => value === undefined ? '<missing>' : (JSON.stringify(value) ?? String(value));
|
|
167
|
+
export const expressionPersistenceMismatchMessage = (propName, verification) => {
|
|
168
|
+
const { expected, observed } = verification;
|
|
169
|
+
if (expected.rawChannel === 'value[0]') {
|
|
170
|
+
return (`The backend accepted the write but canonical readback for "${propName}" did not match. ` +
|
|
171
|
+
`Expected value.length === 1 and value[0] to equal validate_expression.expression ` +
|
|
172
|
+
`${printable(expected.expression)}; observed value=${printable(observed.arrayValue)} and ` +
|
|
173
|
+
`${expected.decompiledChannel}=${printable(observed.decompiledValue)}.`);
|
|
174
|
+
}
|
|
175
|
+
return (`The backend accepted the write but canonical readback for "${propName}" did not match. ` +
|
|
176
|
+
`Expected ${expected.rawChannel} to equal validate_expression.expression ` +
|
|
177
|
+
`${printable(expected.expression)}; observed ${expected.rawChannel}=${printable(observed.rawValue)} and ` +
|
|
178
|
+
`${expected.decompiledChannel}=${printable(observed.decompiledValue)}.`);
|
|
179
|
+
};
|
|
180
|
+
export const remoteOptionsCompiledLiteralNote = (prop, verification) => prop.remoteOptions &&
|
|
181
|
+
verification.verified &&
|
|
182
|
+
verification.kind === 'compiled literal' &&
|
|
183
|
+
['value', 'expressionValue', 'value[0]'].includes(verification.channel)
|
|
184
|
+
? `persisted and verified in ${verification.channel} as a compiled literal; no decompiled JS ` +
|
|
185
|
+
'channel; provider option membership/label was NOT validated by this expression write.'
|
|
186
|
+
: undefined;
|
|
187
|
+
const hasOwn = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
188
|
+
/**
|
|
189
|
+
* Prove that a compiled prop write persisted the exact AST returned by
|
|
190
|
+
* `validate_expression`. Decompiled JS is an optional read view: pure literals
|
|
191
|
+
* intentionally have none, while raw storage is always the source of truth.
|
|
192
|
+
*/
|
|
193
|
+
export const verifyExpressionPersistence = (prop, readback, expression) => {
|
|
194
|
+
const decompiledChannel = expressionReadbackChannel(prop);
|
|
195
|
+
const scalarRawChannel = decompiledChannel === 'valueJs' ? 'value' : 'expressionValue';
|
|
196
|
+
const isArrayProp = String(prop.inputType ?? '').endsWith('_ARRAY');
|
|
197
|
+
const isArrayElementWrite = isArrayProp && scalarRawChannel === 'value';
|
|
198
|
+
const rawChannel = isArrayElementWrite
|
|
199
|
+
? 'value[0]'
|
|
200
|
+
: scalarRawChannel;
|
|
201
|
+
if (isArrayElementWrite) {
|
|
202
|
+
const arrayValue = readback?.value;
|
|
203
|
+
const rawPresent = Array.isArray(arrayValue) && arrayValue.length > 0;
|
|
204
|
+
const rawValue = rawPresent ? arrayValue[0] : undefined;
|
|
205
|
+
const valueItem = readback?.valueItems?.find(item => item.index === 0);
|
|
206
|
+
const decompiledPresent = typeof valueItem?.valueJs === 'string';
|
|
207
|
+
const decompiledValue = decompiledPresent ? valueItem.valueJs : undefined;
|
|
208
|
+
const expected = { decompiledChannel, rawChannel, expression };
|
|
209
|
+
const observed = {
|
|
210
|
+
propFound: readback !== undefined,
|
|
211
|
+
decompiledChannel,
|
|
212
|
+
decompiledPresent,
|
|
213
|
+
decompiledValue,
|
|
214
|
+
rawChannel,
|
|
215
|
+
rawPresent,
|
|
216
|
+
rawValue,
|
|
217
|
+
arrayValue,
|
|
218
|
+
};
|
|
219
|
+
if (Array.isArray(arrayValue) &&
|
|
220
|
+
arrayValue.length === 1 &&
|
|
221
|
+
expression !== undefined &&
|
|
222
|
+
isDeepStrictEqual(arrayValue[0], expression)) {
|
|
223
|
+
return {
|
|
224
|
+
verified: true,
|
|
225
|
+
channel: 'value[0]',
|
|
226
|
+
kind: decompiledPresent ? 'decompiled JS' : 'compiled literal',
|
|
227
|
+
persistedValue: arrayValue[0],
|
|
228
|
+
expected,
|
|
229
|
+
observed,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
return { verified: false, expected, observed };
|
|
233
|
+
}
|
|
234
|
+
const decompiledPresent = readback !== undefined &&
|
|
235
|
+
hasOwn(readback, decompiledChannel) &&
|
|
236
|
+
readback[decompiledChannel] !== undefined;
|
|
237
|
+
const rawPresent = readback !== undefined &&
|
|
238
|
+
hasOwn(readback, scalarRawChannel) &&
|
|
239
|
+
readback[scalarRawChannel] !== undefined;
|
|
240
|
+
const rawValue = readback?.[scalarRawChannel];
|
|
241
|
+
const expected = { decompiledChannel, rawChannel, expression };
|
|
242
|
+
const observed = {
|
|
243
|
+
propFound: readback !== undefined,
|
|
244
|
+
decompiledChannel,
|
|
245
|
+
decompiledPresent,
|
|
246
|
+
decompiledValue: readback?.[decompiledChannel],
|
|
247
|
+
rawChannel,
|
|
248
|
+
rawPresent,
|
|
249
|
+
rawValue,
|
|
250
|
+
};
|
|
251
|
+
if (!rawPresent || !isDeepStrictEqual(rawValue, expression)) {
|
|
252
|
+
return { verified: false, expected, observed };
|
|
253
|
+
}
|
|
254
|
+
if (decompiledPresent) {
|
|
255
|
+
return {
|
|
256
|
+
verified: true,
|
|
257
|
+
channel: decompiledChannel,
|
|
258
|
+
kind: 'decompiled JS',
|
|
259
|
+
persistedValue: readback?.[decompiledChannel],
|
|
260
|
+
expected,
|
|
261
|
+
observed,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
verified: true,
|
|
266
|
+
channel: scalarRawChannel,
|
|
267
|
+
kind: 'compiled literal',
|
|
268
|
+
persistedValue: rawValue,
|
|
269
|
+
expected,
|
|
270
|
+
observed,
|
|
271
|
+
};
|
|
272
|
+
};
|
|
50
273
|
const shellQuote = (value) => `'${value.replace(/'/g, "'\\''")}'`;
|
|
51
274
|
const propName = (prop) => prop.name ?? prop.key;
|
|
52
275
|
const propNextCommand = (nodeId, prop, fallbackName) => {
|
|
53
276
|
const name = propName(prop ?? {}) ?? fallbackName;
|
|
277
|
+
if (prop?.optionsAvailability === 'blocked_upstream') {
|
|
278
|
+
const blockedBy = typeof prop.blockedBy === 'string' && prop.blockedBy.trim().length > 0
|
|
279
|
+
? prop.blockedBy.trim()
|
|
280
|
+
: '<blockedBy>';
|
|
281
|
+
return `cai node set ${nodeId} --prop ${blockedBy} --value <value>`;
|
|
282
|
+
}
|
|
283
|
+
if (prop?.optionsAvailability === 'dynamic_upstream') {
|
|
284
|
+
return (`cai node set ${nodeId} --prop ${name} --value <exact-id>; ` +
|
|
285
|
+
'options cannot be listed while an upstream prop is dynamic (or use --js for an expression)');
|
|
286
|
+
}
|
|
54
287
|
if (prop?.remoteOptions) {
|
|
55
288
|
return (`cai node options ${nodeId} --prop ${name} --query "<option label>"; then ` +
|
|
56
289
|
`cai node set ${nodeId} --prop ${name} --value <exact-returned-value> ` +
|
|
@@ -88,13 +321,16 @@ const propNextCommand = (nodeId, prop, fallbackName) => {
|
|
|
88
321
|
}
|
|
89
322
|
return `cai node set ${nodeId} --prop ${name} --value <value>`;
|
|
90
323
|
};
|
|
324
|
+
const invalidStaticOptionNextCommand = (nodeId, prop, fallbackName) => prop?.options?.some(option => option.value !== undefined || option.id !== undefined)
|
|
325
|
+
? propNextCommand(nodeId, prop, fallbackName)
|
|
326
|
+
: `cai node props ${nodeId} --json`;
|
|
91
327
|
/** Pure readiness projection used by `cai node status` and its tests. */
|
|
92
|
-
export const buildNodeReadiness = (nodeId, record, props) => {
|
|
328
|
+
export const buildNodeReadiness = (nodeId, record, props, subflowTarget) => {
|
|
93
329
|
const connectionId = record.connectionId ?? record.data?.connectionId ?? null;
|
|
94
330
|
const requireAuth = Boolean(record.requireAuth ?? record.data?.requireAuth);
|
|
95
331
|
const missingConnection = requireAuth && !connectionId;
|
|
96
332
|
const pendingReloadProps = props
|
|
97
|
-
.filter(prop => prop.reloadProps && prop.enabled !== false && !
|
|
333
|
+
.filter(prop => prop.reloadProps && prop.enabled !== false && !hasConfiguredReloadSelectorValue(prop))
|
|
98
334
|
.map(prop => prop.name ?? prop.key)
|
|
99
335
|
.filter((name) => Boolean(name));
|
|
100
336
|
const pendingReloadSet = new Set(pendingReloadProps);
|
|
@@ -105,6 +341,41 @@ export const buildNodeReadiness = (nodeId, record, props) => {
|
|
|
105
341
|
!pendingReloadSet.has(prop.name ?? prop.key ?? ''))
|
|
106
342
|
.map(prop => prop.name ?? prop.key)
|
|
107
343
|
.filter((name) => Boolean(name));
|
|
344
|
+
const disabledRequiredPropDetails = props.flatMap((prop, index) => {
|
|
345
|
+
const name = propName(prop);
|
|
346
|
+
if (!name ||
|
|
347
|
+
prop.required !== true ||
|
|
348
|
+
prop.enabled !== false ||
|
|
349
|
+
prop.source === 'propsCatalog') {
|
|
350
|
+
return [];
|
|
351
|
+
}
|
|
352
|
+
const declaredBlockedBy = typeof prop.blockedBy === 'string' && prop.blockedBy.trim().length > 0
|
|
353
|
+
? prop.blockedBy.trim()
|
|
354
|
+
: undefined;
|
|
355
|
+
const earlierProps = props.slice(0, index);
|
|
356
|
+
const explicitBlockedBy = declaredBlockedBy
|
|
357
|
+
? earlierProps.find(candidate => propName(candidate) === declaredBlockedBy)
|
|
358
|
+
: undefined;
|
|
359
|
+
const positionalBlockedBy = [...earlierProps]
|
|
360
|
+
.reverse()
|
|
361
|
+
.find(candidate => candidate.reloadProps === true && Boolean(propName(candidate)));
|
|
362
|
+
return [
|
|
363
|
+
{
|
|
364
|
+
name,
|
|
365
|
+
activatingSelector: propName(explicitBlockedBy ?? {}) ?? propName(positionalBlockedBy ?? {}),
|
|
366
|
+
},
|
|
367
|
+
];
|
|
368
|
+
});
|
|
369
|
+
const disabledRequiredProps = disabledRequiredPropDetails.map(({ name }) => name);
|
|
370
|
+
const actionableDisabledRequiredProp = disabledRequiredPropDetails.find(({ activatingSelector }) => activatingSelector !== undefined);
|
|
371
|
+
const dynamicSelectorNotes = props
|
|
372
|
+
.filter(prop => prop.reloadProps === true &&
|
|
373
|
+
prop.allowsExpressionMode === true &&
|
|
374
|
+
prop.hasDynamicExpression === true)
|
|
375
|
+
.map(prop => propName(prop))
|
|
376
|
+
.filter((name) => Boolean(name))
|
|
377
|
+
.map(name => `"${name}" holds a dynamic value; dependent props reflect the last concrete selection and were not re-resolved. ` +
|
|
378
|
+
`If a dependent prop is missing, set "${name}" to a concrete value once (or run: cai node reload ${nodeId}), then switch back.`);
|
|
108
379
|
const propsByName = new Map(props
|
|
109
380
|
.map(prop => [propName(prop), prop])
|
|
110
381
|
.filter((entry) => Boolean(entry[0])));
|
|
@@ -135,34 +406,86 @@ export const buildNodeReadiness = (nodeId, record, props) => {
|
|
|
135
406
|
: componentOutputType || outputPortTypes.length > 0
|
|
136
407
|
? 'unresolved'
|
|
137
408
|
: 'none';
|
|
409
|
+
const invalidStaticOptionProps = props
|
|
410
|
+
.filter(prop => {
|
|
411
|
+
if (prop.remoteOptions ||
|
|
412
|
+
!Array.isArray(prop.options) ||
|
|
413
|
+
prop.options.length === 0 ||
|
|
414
|
+
(prop.allowsExpressionMode === true && prop.hasDynamicExpression === true) ||
|
|
415
|
+
!hasConfiguredPropValue(prop)) {
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
const optionValues = prop.options.map(option => option.value ?? option.id);
|
|
419
|
+
const effectiveValue = prop.value;
|
|
420
|
+
const isMultiSelect = [
|
|
421
|
+
'MULTI_SELECT',
|
|
422
|
+
'MULTI_SELECT_DROPDOWN',
|
|
423
|
+
'STATIC_MULTI_SELECT_DROPDOWN',
|
|
424
|
+
].includes(String(prop.inputType ?? ''));
|
|
425
|
+
const selectedValues = isMultiSelect && Array.isArray(effectiveValue) ? effectiveValue : [effectiveValue];
|
|
426
|
+
return selectedValues.some(selected => !optionValues.some(option => isDeepStrictEqual(option, selected)));
|
|
427
|
+
})
|
|
428
|
+
.map(prop => prop.name ?? prop.key)
|
|
429
|
+
.filter((name) => Boolean(name));
|
|
430
|
+
const subflowTargetBlockers = subflowTarget?.exists === false
|
|
431
|
+
? ['subflow target flow not found']
|
|
432
|
+
: subflowTarget?.exists === true && subflowTarget.nodeCount === 0
|
|
433
|
+
? ['subflow target flow has no nodes']
|
|
434
|
+
: [];
|
|
435
|
+
const subflowTargetNext = subflowTarget?.exists === false
|
|
436
|
+
? `cai node set-flow ${nodeId} --flow <existing-flowId>`
|
|
437
|
+
: subflowTarget?.exists === true && subflowTarget.nodeCount === 0
|
|
438
|
+
? `cai node find "<action intent>"; then cai node add --flow ${subflowTarget.flowId ? shellQuote(subflowTarget.flowId) : '<flowId>'} --key <exact-nodeKey>`
|
|
439
|
+
: undefined;
|
|
138
440
|
const configurationBlockers = [
|
|
139
441
|
...(missingConnection ? ['connection'] : []),
|
|
140
442
|
...missingRequiredProps.map(name => `required prop: ${name}`),
|
|
443
|
+
...disabledRequiredPropDetails.map(({ name, activatingSelector }) => activatingSelector
|
|
444
|
+
? `required prop disabled: ${name} (blocked by ${activatingSelector})`
|
|
445
|
+
: `required prop disabled: ${name}`),
|
|
141
446
|
...pendingReloadProps.map(name => `reload selector: ${name}`),
|
|
447
|
+
...subflowTargetBlockers,
|
|
448
|
+
...invalidStaticOptionProps.map(name => `invalid option value: ${name}`),
|
|
142
449
|
];
|
|
143
450
|
const blockedBy = [
|
|
144
451
|
...configurationBlockers,
|
|
145
452
|
...(outputTypeStatus === 'unresolved' ? ['output type'] : []),
|
|
146
453
|
];
|
|
147
454
|
const readyForRun = configurationBlockers.length === 0;
|
|
455
|
+
const readinessState = disabledRequiredProps.length && !actionableDisabledRequiredProp
|
|
456
|
+
? 'indeterminate'
|
|
457
|
+
: readyForRun
|
|
458
|
+
? 'ready'
|
|
459
|
+
: 'blocked';
|
|
148
460
|
const readyForExpressions = readyForRun;
|
|
149
461
|
const readyForDownstreamExpressions = readyForRun && outputTypeStatus === 'concrete';
|
|
150
462
|
const next = missingConnection
|
|
151
463
|
? `cai connection list --node ${record.nodeSlug ?? record.data?.nodeSlug ?? '<nodeSlug>'}; then cai node set-connection ${nodeId} --connection <id> (if none exist, run cai connection connect ${record.nodeSlug ?? record.data?.nodeSlug ?? '<nodeSlug>'} and list again)`
|
|
152
|
-
:
|
|
153
|
-
?
|
|
154
|
-
:
|
|
155
|
-
? propNextCommand(nodeId, propsByName.get(
|
|
156
|
-
:
|
|
157
|
-
?
|
|
158
|
-
|
|
464
|
+
: subflowTargetNext
|
|
465
|
+
? subflowTargetNext
|
|
466
|
+
: missingRequiredProps.length
|
|
467
|
+
? propNextCommand(nodeId, propsByName.get(missingRequiredProps[0]), missingRequiredProps[0])
|
|
468
|
+
: disabledRequiredProps.length
|
|
469
|
+
? actionableDisabledRequiredProp?.activatingSelector
|
|
470
|
+
? `cai node set ${nodeId} --prop ${actionableDisabledRequiredProp.activatingSelector} --value <value>`
|
|
471
|
+
: `cai node props ${nodeId} --json`
|
|
472
|
+
: pendingReloadProps.length
|
|
473
|
+
? propNextCommand(nodeId, propsByName.get(pendingReloadProps[0]), pendingReloadProps[0])
|
|
474
|
+
: invalidStaticOptionProps.length
|
|
475
|
+
? invalidStaticOptionNextCommand(nodeId, propsByName.get(invalidStaticOptionProps[0]), invalidStaticOptionProps[0])
|
|
476
|
+
: outputTypeStatus === 'unresolved'
|
|
477
|
+
? `cai run node ${nodeId} --inputs <values.json>`
|
|
478
|
+
: `cai expr context ${nodeId} --prop <prop>`;
|
|
159
479
|
return {
|
|
160
480
|
nodeId,
|
|
161
481
|
requireAuth,
|
|
162
482
|
connectionId,
|
|
163
483
|
missingConnection,
|
|
164
484
|
missingRequiredProps,
|
|
485
|
+
disabledRequiredProps,
|
|
165
486
|
pendingReloadProps,
|
|
487
|
+
dynamicSelectorNotes,
|
|
488
|
+
readinessState,
|
|
166
489
|
outputTypeStatus,
|
|
167
490
|
outputTypes,
|
|
168
491
|
outputPortTypes,
|
package/dist/nodeProps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeProps.js","sourceRoot":"","sources":["../src/nodeProps.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nodeProps.js","sourceRoot":"","sources":["../src/nodeProps.ts"],"names":[],"mappings":"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"}
|
package/dist/output.js
CHANGED
|
@@ -2,8 +2,14 @@ import { SCRUBBED_HINT } from './errors.js';
|
|
|
2
2
|
let jsonMode = false;
|
|
3
3
|
let commandPath = 'cai';
|
|
4
4
|
const warnings = [];
|
|
5
|
+
let jsonEventsEmitted = false;
|
|
5
6
|
export const setJsonMode = (value) => {
|
|
6
7
|
jsonMode = value;
|
|
8
|
+
// A process normally executes one command, while tests and embedders may run
|
|
9
|
+
// several. Output annotations belong to one command and must never leak into
|
|
10
|
+
// the next envelope.
|
|
11
|
+
warnings.length = 0;
|
|
12
|
+
jsonEventsEmitted = false;
|
|
7
13
|
};
|
|
8
14
|
export const isJsonMode = () => jsonMode;
|
|
9
15
|
/**
|
|
@@ -13,7 +19,6 @@ export const isJsonMode = () => jsonMode;
|
|
|
13
19
|
* file — the live clean-room test showed exactly that failure. Consumers parse
|
|
14
20
|
* the LAST stdout line as the result; event lines always carry an `event` key.
|
|
15
21
|
*/
|
|
16
|
-
let jsonEventsEmitted = false;
|
|
17
22
|
export const emitJsonEvent = (event) => {
|
|
18
23
|
if (!jsonMode)
|
|
19
24
|
return;
|
package/dist/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,aAAa,EAAE,MAAM,aAAa,CAAA;AAcrD,IAAI,QAAQ,GAAG,KAAK,CAAA;AACpB,IAAI,WAAW,GAAG,KAAK,CAAA;AACvB,MAAM,QAAQ,GAAa,EAAE,CAAA;AAE7B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAQ,EAAE;IAClD,QAAQ,GAAG,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -45,6 +45,7 @@ cai run flow <flowId> --inputs values.json --json
|
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
Capture the successful workflow execution ID. Workflow inputs become tool parameters and outputs become its result.
|
|
48
|
+
Before attaching a workflow tool, require a nonempty output contract and verify that the completed run returns it; otherwise the agent receives an empty result.
|
|
48
49
|
|
|
49
50
|
## 3. Create and assemble the draft
|
|
50
51
|
|
|
@@ -68,11 +69,16 @@ cai agent add-workflow <agentId> \
|
|
|
68
69
|
--description "Use when ...; accepts ...; returns ..." \
|
|
69
70
|
--json
|
|
70
71
|
|
|
71
|
-
cai agent add-file <agentId> --file <path> --json
|
|
72
|
+
cai agent add-file <agentId> --file <path> --space knowledge --json
|
|
73
|
+
cai agent add-file <agentId> --file <path> --space shared --json
|
|
74
|
+
cai agent files <agentId> --space knowledge --json
|
|
75
|
+
cai agent files <agentId> --space shared --live --json
|
|
72
76
|
cai agent tools <agentId> --json
|
|
73
77
|
cai agent get <agentId> --json
|
|
74
78
|
```
|
|
75
79
|
|
|
80
|
+
Use `cai agent files <agentId> [--space <knowledge|shared>] [--live]` to read file inventories. Adding with `--space shared` updates the live runtime file space immediately without publishing; an active agent sees it on the next turn, while a disabled agent sees it after enablement.
|
|
81
|
+
|
|
76
82
|
Permission is part of agent design, not an afterthought. For every tool, settle the approval level WITH the user before attaching: present the tool list and ask which steps they want a human in the loop for ("should sending the email require your approval each time, or run automatically?"). The default is no approval. Add `--require-confirmation` for consequential writes, deletion, external communications, permission changes, purchases/spend, or an ambiguous destination; `cai agent update-tool` changes it later. Omitting the flag must be the user's informed autonomy decision, not an unnoticed default.
|
|
77
83
|
|
|
78
84
|
Keep the two modes straight:
|
|
@@ -89,9 +95,19 @@ Publishing the agent snapshots its display name, instructions, tool identities,
|
|
|
89
95
|
|
|
90
96
|
Publishing is a hard cutover: live conversations that are mid-turn are interrupted immediately (the person's in-flight answer never arrives), their unexecuted approval requests expire, and each conversation reopens on its own next message running the new version. Time publishes with that in mind and tell the user what a publish does to active conversations.
|
|
91
97
|
|
|
98
|
+
Runtime lifecycle changes do not require publishing:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
cai agent update <agentId> --disabled --json
|
|
102
|
+
cai agent update <agentId> --enabled --json
|
|
103
|
+
cai agent delete <agentId> --confirm --json
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Disable pauses runtime immediately; enable resumes it immediately. Delete is soft: it revokes live access, requests best-effort termination of active sessions and pending approvals, retains conversation history but makes it inaccessible, has no CLI restore, and does not guard dependent workflows, which can fail later.
|
|
107
|
+
|
|
92
108
|
## Runtime usage boundary
|
|
93
109
|
|
|
94
|
-
The user's
|
|
110
|
+
The user's coding-agent subscription covers builder reasoning, but hosted agent tests and conversations consume Controller AI runtime usage from the organization's pool, and connected providers may add charges or side effects. Say so before starting a hosted test or calling this route free.
|
|
95
111
|
|
|
96
112
|
## 4. Verify the draft as an agent
|
|
97
113
|
|
|
@@ -104,7 +120,7 @@ cai agent conversation history <conversationId> --json
|
|
|
104
120
|
|
|
105
121
|
Test requests that should and should not select each tool. Verify exact arguments, truthful use of results, errors, and knowledge behavior.
|
|
106
122
|
|
|
107
|
-
|
|
123
|
+
Also offer the user the agent's app page to try the draft hands-on before publishing (`create`/`publish`/`test` outputs include `appUrl` links when the app origin is known). Their impression outweighs your transcript reading.
|
|
108
124
|
|
|
109
125
|
- For a workflow tool, correlate a side-effectful call with its terminal workflow execution ID.
|
|
110
126
|
- For a direct integration action, inspect persisted conversation action events/run result and the intended external effect. Direct actions do not create workflow execution IDs.
|
|
@@ -112,11 +128,13 @@ The user can also test the draft themselves in the product — offer them the ag
|
|
|
112
128
|
For pending approval, inspect the exact request before choosing:
|
|
113
129
|
|
|
114
130
|
```bash
|
|
115
|
-
cai agent conversation approve <conversationId> --request <requestId> --
|
|
116
|
-
cai agent conversation deny <conversationId> --request <requestId> --
|
|
131
|
+
cai agent conversation approve <conversationId> --request <requestId> --json
|
|
132
|
+
cai agent conversation deny <conversationId> --request <requestId> --message "<reason>" --json
|
|
117
133
|
```
|
|
118
134
|
|
|
119
|
-
Do not approve merely to make a test continue.
|
|
135
|
+
The server resolves the tool from the permission request; do not pass a human-readable tool name. Do not approve merely to make a test continue.
|
|
136
|
+
|
|
137
|
+
After `cai agent remove-tool`, test both a request that must no longer use the removed capability and a representative retained capability.
|
|
120
138
|
|
|
121
139
|
## 5. Publish in dependency order
|
|
122
140
|
|
|
@@ -153,16 +171,16 @@ Draft evidence does not prove the live agent. Test is owner-only. Shared users a
|
|
|
153
171
|
|
|
154
172
|
## 6. Offer Slack and organization sharing
|
|
155
173
|
|
|
156
|
-
After a successful publish, offer the next steps
|
|
174
|
+
After a successful publish, offer the next steps unprompted:
|
|
157
175
|
|
|
158
|
-
- **Slack**:
|
|
176
|
+
- **Slack**: talking to the agent in Slack needs the Slack ↔ Controller AI connection plus per-agent Slack configuration (slug, channel), both set up in the product, not the CLI — point the user there and offer to walk them through it.
|
|
159
177
|
- **Sharing**: agents remain private unless the user explicitly asks for organization access:
|
|
160
178
|
|
|
161
179
|
```bash
|
|
162
180
|
cai agent visibility <agentId> --value organization --json
|
|
163
181
|
```
|
|
164
182
|
|
|
165
|
-
Organization members use the published version. Direct actions run through the
|
|
183
|
+
Organization members use the published version. Direct actions run through the owner's connected external account; usage comes from the organization's pool. Rebinding or revoking that live grant immediately affects published agents. Return to private visibility to revoke access.
|
|
166
184
|
|
|
167
185
|
## Final report
|
|
168
186
|
|
|
@@ -66,7 +66,7 @@ Do not republish the agent merely to make a followed workflow's new live release
|
|
|
66
66
|
|
|
67
67
|
| Layer | Evidence |
|
|
68
68
|
| --- | --- |
|
|
69
|
-
| Workflow tool | Completed development `cai run flow` execution |
|
|
69
|
+
| Workflow tool | Completed development `cai run flow` execution; an intentional `cai run flow <flowId> --target live --confirm-live` execution is stronger evidence of published behavior than a draft-agent proxy |
|
|
70
70
|
| Direct action | Persisted conversation action/run events, returned result, and intended external effect |
|
|
71
71
|
| Draft routing | Draft conversation chooses the correct tool and arguments |
|
|
72
72
|
| Published workflow | `workflow status` reports the intended live release and active state |
|