@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.
Files changed (51) hide show
  1. package/dist/api/client.js +20 -5
  2. package/dist/api/client.js.map +1 -1
  3. package/dist/argv.js +330 -29
  4. package/dist/argv.js.map +1 -1
  5. package/dist/commands/agent.js +208 -8
  6. package/dist/commands/agent.js.map +1 -1
  7. package/dist/commands/auth.js +21 -5
  8. package/dist/commands/auth.js.map +1 -1
  9. package/dist/commands/doctor.js +63 -4
  10. package/dist/commands/doctor.js.map +1 -1
  11. package/dist/commands/exec.js +161 -49
  12. package/dist/commands/exec.js.map +1 -1
  13. package/dist/commands/expr.js +284 -53
  14. package/dist/commands/expr.js.map +1 -1
  15. package/dist/commands/flow.js +58 -14
  16. package/dist/commands/flow.js.map +1 -1
  17. package/dist/commands/node.js +746 -173
  18. package/dist/commands/node.js.map +1 -1
  19. package/dist/commands/organize.js +1 -1
  20. package/dist/commands/organize.js.map +1 -1
  21. package/dist/commands/run.js +165 -33
  22. package/dist/commands/run.js.map +1 -1
  23. package/dist/commands/schema.js +8 -7
  24. package/dist/commands/schema.js.map +1 -1
  25. package/dist/commands/workflow.js +151 -24
  26. package/dist/commands/workflow.js.map +1 -1
  27. package/dist/config.js +152 -6
  28. package/dist/config.js.map +1 -1
  29. package/dist/context.js +66 -5
  30. package/dist/context.js.map +1 -1
  31. package/dist/index.js +11 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/nodeProps.js +333 -10
  34. package/dist/nodeProps.js.map +1 -1
  35. package/dist/output.js +6 -1
  36. package/dist/output.js.map +1 -1
  37. package/package.json +1 -1
  38. package/skills/controllerai-agents/SKILL.md +27 -9
  39. package/skills/controllerai-agents/references/instructions-and-versioning.md +1 -1
  40. package/skills/controllerai-data/SKILL.md +17 -0
  41. package/skills/controllerai-data/references/data-rails.md +1 -1
  42. package/skills/controllerai-expressions/SKILL.md +7 -3
  43. package/skills/controllerai-flow-control/SKILL.md +2 -0
  44. package/skills/controllerai-node-config/SKILL.md +33 -6
  45. package/skills/controllerai-node-config/references/prop-and-readiness.md +34 -0
  46. package/skills/controllerai-runs/SKILL.md +14 -4
  47. package/skills/controllerai-runs/references/debugging.md +1 -1
  48. package/skills/controllerai-start/SKILL.md +1 -0
  49. package/skills/controllerai-workflows/SKILL.md +13 -8
  50. package/skills/controllerai-workflows/references/command-map.md +3 -2
  51. 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
- export const hasConfiguredPropValue = (prop) => ![prop.value, prop.valueJs, prop.expressionValue, prop.expressionValueJs].every(value => value === undefined || value === null || value === '');
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 && !hasConfiguredPropValue(prop))
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
- : missingRequiredProps.length
153
- ? propNextCommand(nodeId, propsByName.get(missingRequiredProps[0]), missingRequiredProps[0])
154
- : pendingReloadProps.length
155
- ? propNextCommand(nodeId, propsByName.get(pendingReloadProps[0]), pendingReloadProps[0])
156
- : outputTypeStatus === 'unresolved'
157
- ? `cai run node ${nodeId} --inputs <values.json>`
158
- : `cai expr context ${nodeId} --prop <prop>`;
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,
@@ -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;
@@ -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;AAClB,CAAC,CAAA;AACD,MAAM,CAAC,MAAM,UAAU,GAAG,GAAY,EAAE,CAAC,QAAQ,CAAA;AAEjD;;;;;;GAMG;AACH,IAAI,iBAAiB,GAAG,KAAK,CAAA;AAE7B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAA8B,EAAQ,EAAE;IACpE,IAAI,CAAC,QAAQ;QAAE,OAAM;IACrB,iBAAiB,GAAG,IAAI,CAAA;IACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AACpD,CAAC,CAAA;AACD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAQ,EAAE;IACpD,WAAW,GAAG,KAAK,CAAA;AACrB,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,OAAe,EAAQ,EAAE;IAC5C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,IAAI,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,IAAa,EAAE,KAAiB,EAAQ,EAAE;IAC7D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;QACvE,IAAI,QAAQ,CAAC,MAAM;YAAE,QAAQ,CAAC,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAA;QACtD,0EAA0E;QAC1E,qEAAqE;QACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACjE,CAAA;QACD,OAAM;IACR,CAAC;IACD,KAAK,EAAE,CAAA;AACT,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAe,EAAQ,EAAE;IACjD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAiB;YAC7B,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE;SACF,CAAA;QACD,IAAI,QAAQ,CAAC,MAAM;YAAE,QAAQ,CAAC,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAA;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACjE,CAAA;QACD,OAAM;IACR,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;IACjD,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,aAAa,IAAI,CAAC,CAAA;AAClE,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,CAAC,KAAc,EAAU,EAAE;IACtC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAA;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC3D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC,CAAA;AAED,mFAAmF;AACnF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,OAAiB,EAAE,IAAiB,EAAU,EAAE;IACpE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;IACvC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC/F,MAAM,IAAI,GAAG,CAAC,KAAe,EAAE,EAAE,CAC/B,KAAK;SACF,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAClC,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,EAAE,CAAA;IACd,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC5F,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAiB,EAAE,IAAiB,EAAQ,EAAE;IACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;AACnD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAA+B,EAAQ,EAAE;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACvD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAChE,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,GAAG,GAAG,EAAE,EAAU,EAAE;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;IACxB,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AAChE,CAAC,CAAA"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@controllerai/cli",
3
- "version": "0.2.9",
3
+ "version": "0.2.10",
4
4
  "description": "Build and operate Controller AI workflows and agents from any AI coding agent (beta)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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 local Codex, Claude, or other coding-agent subscription can cover builder reasoning. Hosted agent tests and conversations consume Controller AI runtime usage from the organization's shared pool. Connected providers may add charges or side effects. State this before starting a hosted test or describing this route as free.
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
- The user can also test the draft themselves in the product — offer them the agent's page in the app so they can try it hands-on before publishing (`cai agent create`/`publish`/`test` outputs include `appUrl` links to the agent and conversation pages when the app origin is known). Their impression of the conversation matters more than your transcript reading.
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> --tool <toolName> --json
116
- cai agent conversation deny <conversationId> --request <requestId> --tool <toolName> --message "<reason>" --json
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 rather than waiting to be asked:
174
+ After a successful publish, offer the next steps unprompted:
157
175
 
158
- - **Slack**: if the user wants to talk to the agent in Slack, that requires the Slack ↔ Controller AI connection plus per-agent Slack configuration (agent slug, channel) — both set up in the product, not the CLI. Point the user to the relevant product page and offer to walk them through it.
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 agent owner's connected external account, while Controller AI usage comes from the organization's shared pool. Rebinding, revoking, or detaching that live grant can immediately affect published agents. Return to private visibility to revoke organization access.
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 |