@controllerai/cli 0.2.8 → 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 +247 -26
- 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/dist/permissionTool.js +93 -0
- package/dist/permissionTool.js.map +1 -0
- 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 +19 -0
- package/skills/controllerai-data/references/data-rails.md +1 -1
- package/skills/controllerai-expressions/SKILL.md +8 -2
- 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 +16 -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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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { userError } from './errors.js';
|
|
2
|
+
const CANONICAL_PERMISSION_TOOL = /^mcp__controllerai(_pd_actions)?__tool_[1-9][0-9]*$/;
|
|
3
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
4
|
+
const eventPayloads = (event) => {
|
|
5
|
+
if (!isRecord(event.rawData))
|
|
6
|
+
return [];
|
|
7
|
+
const nested = isRecord(event.rawData.data) ? [event.rawData.data] : [];
|
|
8
|
+
return [...nested, event.rawData];
|
|
9
|
+
};
|
|
10
|
+
const permissionEventRequestId = (event) => {
|
|
11
|
+
if (event.eventType !== 'permission_request')
|
|
12
|
+
return undefined;
|
|
13
|
+
for (const payload of eventPayloads(event)) {
|
|
14
|
+
if (typeof payload.requestId === 'string')
|
|
15
|
+
return payload.requestId;
|
|
16
|
+
}
|
|
17
|
+
return undefined;
|
|
18
|
+
};
|
|
19
|
+
const permissionResolutionRequestId = (event) => {
|
|
20
|
+
if (event.eventType !== 'permission_response' && event.eventType !== 'permission_expired') {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
for (const payload of eventPayloads(event)) {
|
|
24
|
+
if (typeof payload.requestId === 'string')
|
|
25
|
+
return payload.requestId;
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
};
|
|
29
|
+
export const isCanonicalPermissionToolName = (value) => CANONICAL_PERMISSION_TOOL.test(value);
|
|
30
|
+
export const recordedPermissionToolName = (history, requestId) => {
|
|
31
|
+
const events = history.events ?? [];
|
|
32
|
+
for (let index = events.length - 1; index >= 0; index -= 1) {
|
|
33
|
+
const event = events[index];
|
|
34
|
+
if (event.eventType !== 'permission_request')
|
|
35
|
+
continue;
|
|
36
|
+
for (const payload of eventPayloads(event)) {
|
|
37
|
+
if (payload.requestId === requestId && typeof payload.toolName === 'string') {
|
|
38
|
+
return payload.toolName;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
};
|
|
44
|
+
export const outstandingPermissionRequestIds = (history) => {
|
|
45
|
+
const outstanding = new Set();
|
|
46
|
+
for (const event of history.events ?? []) {
|
|
47
|
+
const requestId = permissionEventRequestId(event);
|
|
48
|
+
if (requestId !== undefined) {
|
|
49
|
+
outstanding.add(requestId);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const resolvedRequestId = permissionResolutionRequestId(event);
|
|
53
|
+
if (resolvedRequestId !== undefined)
|
|
54
|
+
outstanding.delete(resolvedRequestId);
|
|
55
|
+
}
|
|
56
|
+
return [...outstanding];
|
|
57
|
+
};
|
|
58
|
+
const visibleIds = (ids) => ids.length ? ids.map(id => JSON.stringify(id)).join(', ') : '(none)';
|
|
59
|
+
export const resolvePermissionTool = (userTool, requestId, history = {}) => {
|
|
60
|
+
const normalizedRequestId = requestId.trim();
|
|
61
|
+
if (!normalizedRequestId) {
|
|
62
|
+
throw userError('--request must be a non-empty permission request id.', 'BAD_PERMISSION_ID');
|
|
63
|
+
}
|
|
64
|
+
if (userTool === undefined)
|
|
65
|
+
return { send: 'omitted' };
|
|
66
|
+
const normalizedUserTool = userTool.trim();
|
|
67
|
+
if (isCanonicalPermissionToolName(normalizedUserTool)) {
|
|
68
|
+
return { send: 'as-is', toolName: normalizedUserTool };
|
|
69
|
+
}
|
|
70
|
+
const recordedToolName = recordedPermissionToolName(history, normalizedRequestId);
|
|
71
|
+
if (recordedToolName !== undefined) {
|
|
72
|
+
return {
|
|
73
|
+
send: 'replaced',
|
|
74
|
+
toolName: recordedToolName,
|
|
75
|
+
warning: `Provided --tool ${JSON.stringify(normalizedUserTool)} was replaced with recorded SDK ` +
|
|
76
|
+
`name ${JSON.stringify(recordedToolName)} for request ${JSON.stringify(normalizedRequestId)}.`,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const rowMatch = (history.pendingHitlRequests ?? []).some(request => request.requestId === normalizedRequestId);
|
|
80
|
+
if (rowMatch) {
|
|
81
|
+
return {
|
|
82
|
+
send: 'omitted',
|
|
83
|
+
warning: `Provided --tool ${JSON.stringify(normalizedUserTool)} was ignored for request ` +
|
|
84
|
+
`${JSON.stringify(normalizedRequestId)}; the server will resolve the tool from its own ` +
|
|
85
|
+
`record.`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const pendingRowIds = (history.pendingHitlRequests ?? []).flatMap(request => typeof request.requestId === 'string' ? [request.requestId] : []);
|
|
89
|
+
throw userError(`Permission request ${JSON.stringify(normalizedRequestId)} was not found. Pending row ` +
|
|
90
|
+
`requestIds: ${visibleIds(pendingRowIds)}. Outstanding permission event requestIds: ` +
|
|
91
|
+
`${visibleIds(outstandingPermissionRequestIds(history))}.`, 'UNKNOWN_PERMISSION_REQUEST');
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=permissionTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissionTool.js","sourceRoot":"","sources":["../src/permissionTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAYvC,MAAM,yBAAyB,GAAG,qDAAqD,CAAA;AAEvF,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CACpE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAEtE,MAAM,aAAa,GAAG,CAAC,KAA4B,EAA6B,EAAE;IAChF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAA;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACvE,OAAO,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;AACnC,CAAC,CAAA;AAED,MAAM,wBAAwB,GAAG,CAAC,KAGjC,EAAsB,EAAE;IACvB,IAAI,KAAK,CAAC,SAAS,KAAK,oBAAoB;QAAE,OAAO,SAAS,CAAA;IAC9D,KAAK,MAAM,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC,SAAS,CAAA;IACrE,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,6BAA6B,GAAG,CAAC,KAGtC,EAAsB,EAAE;IACvB,IAAI,KAAK,CAAC,SAAS,KAAK,qBAAqB,IAAI,KAAK,CAAC,SAAS,KAAK,oBAAoB,EAAE,CAAC;QAC1F,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC,SAAS,CAAA;IACrE,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,KAAa,EAAW,EAAE,CACtE,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAEvC,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,OAA8B,EAC9B,SAAiB,EACG,EAAE;IACtB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAA;IACnC,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,IAAI,KAAK,CAAC,SAAS,KAAK,oBAAoB;YAAE,SAAQ;QACtD,KAAK,MAAM,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC5E,OAAO,OAAO,CAAC,QAAQ,CAAA;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,OAA8B,EAAY,EAAE;IAC1F,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;IACrC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAA;QACjD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAC1B,SAAQ;QACV,CAAC;QACD,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAA;QAC9D,IAAI,iBAAiB,KAAK,SAAS;YAAE,WAAW,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;IAC5E,CAAC;IACD,OAAO,CAAC,GAAG,WAAW,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,GAAa,EAAU,EAAE,CAC3C,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AAEtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,QAA4B,EAC5B,SAAiB,EACjB,UAAiC,EAAE,EACX,EAAE;IAC1B,MAAM,mBAAmB,GAAG,SAAS,CAAC,IAAI,EAAE,CAAA;IAC5C,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,MAAM,SAAS,CAAC,sDAAsD,EAAE,mBAAmB,CAAC,CAAA;IAC9F,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;IAEtD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAA;IAC1C,IAAI,6BAA6B,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACtD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IACxD,CAAC;IAED,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAA;IACjF,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,gBAAgB;YAC1B,OAAO,EACL,mBAAmB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,kCAAkC;gBACvF,QAAQ,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,IAAI,CAAC,SAAS,CACpE,mBAAmB,CACpB,GAAG;SACP,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,IAAI,CACvD,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,mBAAmB,CACrD,CAAA;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EACL,mBAAmB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,2BAA2B;gBAChF,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,kDAAkD;gBACxF,SAAS;SACZ,CAAA;IACH,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAC1E,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CACjE,CAAA;IACD,MAAM,SAAS,CACb,sBAAsB,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,8BAA8B;QACrF,eAAe,UAAU,CAAC,aAAa,CAAC,6CAA6C;QACrF,GAAG,UAAU,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC,GAAG,EAC5D,4BAA4B,CAC7B,CAAA;AACH,CAAC,CAAA"}
|