@controllerai/cli 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +180 -0
  2. package/dist/api/client.js +330 -0
  3. package/dist/api/client.js.map +1 -0
  4. package/dist/appLinks.js +99 -0
  5. package/dist/appLinks.js.map +1 -0
  6. package/dist/argv.js +124 -0
  7. package/dist/argv.js.map +1 -0
  8. package/dist/commands/agent.js +813 -0
  9. package/dist/commands/agent.js.map +1 -0
  10. package/dist/commands/auth.js +327 -0
  11. package/dist/commands/auth.js.map +1 -0
  12. package/dist/commands/branch.js +441 -0
  13. package/dist/commands/branch.js.map +1 -0
  14. package/dist/commands/connect.js +148 -0
  15. package/dist/commands/connect.js.map +1 -0
  16. package/dist/commands/connection.js +148 -0
  17. package/dist/commands/connection.js.map +1 -0
  18. package/dist/commands/data.js +441 -0
  19. package/dist/commands/data.js.map +1 -0
  20. package/dist/commands/deps.js +63 -0
  21. package/dist/commands/deps.js.map +1 -0
  22. package/dist/commands/doctor.js +102 -0
  23. package/dist/commands/doctor.js.map +1 -0
  24. package/dist/commands/events.js +72 -0
  25. package/dist/commands/events.js.map +1 -0
  26. package/dist/commands/exec.js +306 -0
  27. package/dist/commands/exec.js.map +1 -0
  28. package/dist/commands/expr.js +346 -0
  29. package/dist/commands/expr.js.map +1 -0
  30. package/dist/commands/flow.js +447 -0
  31. package/dist/commands/flow.js.map +1 -0
  32. package/dist/commands/integration.js +102 -0
  33. package/dist/commands/integration.js.map +1 -0
  34. package/dist/commands/node.js +885 -0
  35. package/dist/commands/node.js.map +1 -0
  36. package/dist/commands/organize.js +234 -0
  37. package/dist/commands/organize.js.map +1 -0
  38. package/dist/commands/run.js +437 -0
  39. package/dist/commands/run.js.map +1 -0
  40. package/dist/commands/schema.js +269 -0
  41. package/dist/commands/schema.js.map +1 -0
  42. package/dist/commands/skills.js +1156 -0
  43. package/dist/commands/skills.js.map +1 -0
  44. package/dist/commands/trigger.js +992 -0
  45. package/dist/commands/trigger.js.map +1 -0
  46. package/dist/commands/workflow.js +503 -0
  47. package/dist/commands/workflow.js.map +1 -0
  48. package/dist/config.js +74 -0
  49. package/dist/config.js.map +1 -0
  50. package/dist/context.js +39 -0
  51. package/dist/context.js.map +1 -0
  52. package/dist/errors.js +59 -0
  53. package/dist/errors.js.map +1 -0
  54. package/dist/index.js +125 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/jsSource.js +32 -0
  57. package/dist/jsSource.js.map +1 -0
  58. package/dist/nodeProps.js +177 -0
  59. package/dist/nodeProps.js.map +1 -0
  60. package/dist/output.js +85 -0
  61. package/dist/output.js.map +1 -0
  62. package/dist/version.js +7 -0
  63. package/dist/version.js.map +1 -0
  64. package/package.json +41 -0
  65. package/skills/controllerai-agents/SKILL.md +169 -0
  66. package/skills/controllerai-agents/agents/openai.yaml +4 -0
  67. package/skills/controllerai-agents/references/instructions-and-versioning.md +76 -0
  68. package/skills/controllerai-ai-nodes/SKILL.md +83 -0
  69. package/skills/controllerai-ai-nodes/agents/openai.yaml +4 -0
  70. package/skills/controllerai-ai-nodes/references/selection-and-testing.md +46 -0
  71. package/skills/controllerai-data/SKILL.md +121 -0
  72. package/skills/controllerai-data/agents/openai.yaml +4 -0
  73. package/skills/controllerai-data/references/data-rails.md +46 -0
  74. package/skills/controllerai-expressions/SKILL.md +115 -0
  75. package/skills/controllerai-expressions/agents/openai.yaml +4 -0
  76. package/skills/controllerai-expressions/references/dsl-and-recipes.md +120 -0
  77. package/skills/controllerai-flow-control/SKILL.md +132 -0
  78. package/skills/controllerai-flow-control/agents/openai.yaml +4 -0
  79. package/skills/controllerai-flow-control/references/patterns.md +61 -0
  80. package/skills/controllerai-integration-actions/SKILL.md +95 -0
  81. package/skills/controllerai-integration-actions/agents/openai.yaml +4 -0
  82. package/skills/controllerai-node-config/SKILL.md +138 -0
  83. package/skills/controllerai-node-config/agents/openai.yaml +4 -0
  84. package/skills/controllerai-node-config/references/prop-and-readiness.md +72 -0
  85. package/skills/controllerai-runs/SKILL.md +109 -0
  86. package/skills/controllerai-runs/agents/openai.yaml +4 -0
  87. package/skills/controllerai-runs/references/debugging.md +53 -0
  88. package/skills/controllerai-start/SKILL.md +44 -0
  89. package/skills/controllerai-start/agents/openai.yaml +4 -0
  90. package/skills/controllerai-triggers/SKILL.md +174 -0
  91. package/skills/controllerai-triggers/agents/openai.yaml +4 -0
  92. package/skills/controllerai-triggers/references/lifecycle.md +54 -0
  93. package/skills/controllerai-workflows/SKILL.md +86 -0
  94. package/skills/controllerai-workflows/agents/openai.yaml +4 -0
  95. package/skills/controllerai-workflows/references/command-map.md +64 -0
  96. package/skills/manifest.json +248 -0
@@ -0,0 +1,269 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { requireContext } from '../context.js';
3
+ import { userError } from '../errors.js';
4
+ import { emit, printKeyValues, printTable, warn } from '../output.js';
5
+ /** Integration/system schemas: `custom.__send_http_request` and friends. */
6
+ export const isSystemSchema = (name) => name.startsWith('custom.__');
7
+ /**
8
+ * Pinned against the live route: a field entry is
9
+ * `{ id, display, type }` and **`id` is caller-supplied and stored verbatim**.
10
+ * (The engine's own derived schemas use an `<name>_<type>` id convention, but
11
+ * nothing enforces it on user schemas — `email` stays `email`.)
12
+ *
13
+ * CLI spelling: `--field <id>:<type>[:<display>]`. `display` defaults to `id`.
14
+ */
15
+ export const parseFieldSpec = (spec) => {
16
+ const parts = spec.split(':');
17
+ if (parts.length < 2 || parts.length > 3 || parts.some(p => p.trim() === '')) {
18
+ throw userError(`--field "${spec}" is malformed. Use <id>:<type>[:<display>], e.g. ` +
19
+ '`--field email:text` or `--field email:text:"Email address"`.', 'BAD_FIELD_SPEC');
20
+ }
21
+ const [id, type, display] = parts.map(p => p.trim());
22
+ return { id, type, display: display ?? id };
23
+ };
24
+ export const parseFieldSpecs = (specs) => {
25
+ const fields = specs.map(parseFieldSpec);
26
+ const seen = new Set();
27
+ for (const field of fields) {
28
+ if (seen.has(field.id)) {
29
+ throw userError(`--field id "${field.id}" is repeated.`, 'DUPLICATE_FIELD_ID');
30
+ }
31
+ seen.add(field.id);
32
+ }
33
+ return fields;
34
+ };
35
+ /** Read `{display, fields}` (or a `{name: {display, fields}}` map) from a file. */
36
+ export const readSchemaJson = (path) => {
37
+ const raw = path === '-' ? readFileSync(0, 'utf8') : readFileSync(path, 'utf8');
38
+ try {
39
+ return JSON.parse(raw);
40
+ }
41
+ catch (error) {
42
+ throw userError(`--from-json ${path} is not valid JSON: ${error instanceof Error ? error.message : error}`, 'BAD_SCHEMA_JSON');
43
+ }
44
+ };
45
+ /** The backend requires the `custom.` prefix; fail before the round trip. */
46
+ export const assertSchemaName = (name) => {
47
+ if (!name.startsWith('custom.')) {
48
+ throw userError(`Schema name "${name}" must start with "custom." (e.g. "custom.${name}").`, 'BAD_SCHEMA_NAME');
49
+ }
50
+ };
51
+ export const buildDefinition = (name, opts) => {
52
+ if (opts.fromJson) {
53
+ const parsed = readSchemaJson(opts.fromJson);
54
+ const definition = parsed?.fields ? parsed : parsed?.[name];
55
+ if (!definition?.fields || !Array.isArray(definition.fields)) {
56
+ throw userError(`--from-json must contain {display, fields:[{id,display,type}]} — either directly, or ` +
57
+ `keyed by "${name}".`, 'BAD_SCHEMA_JSON_SHAPE');
58
+ }
59
+ for (const field of definition.fields) {
60
+ if (!field?.id || !field?.type) {
61
+ throw userError(`Every field needs an "id" and a "type": ${JSON.stringify(field)}`, 'BAD_SCHEMA_FIELD');
62
+ }
63
+ if (!field.display)
64
+ field.display = field.id;
65
+ }
66
+ return {
67
+ display: definition.display ?? opts.display ?? name.replace(/^custom\./, ''),
68
+ fields: definition.fields,
69
+ };
70
+ }
71
+ if (!opts.field?.length) {
72
+ throw userError('Pass at least one --field <id>:<type>[:<display>], or --from-json <file|->.', 'MISSING_FIELDS');
73
+ }
74
+ return {
75
+ display: opts.display ?? name.replace(/^custom\./, ''),
76
+ fields: parseFieldSpecs(opts.field),
77
+ };
78
+ };
79
+ const fieldRows = (definition) => (definition.fields ?? []).map(f => [f.id, f.display, f.type]);
80
+ /**
81
+ * The body of `cai schema create`. Exported because `cai data collection create`
82
+ * is documented sugar over exactly this call — there is no create-collection
83
+ * route, collections are synced from `custom.*` schemas — and sugar that
84
+ * re-enters the same function cannot drift from what it claims to wrap.
85
+ */
86
+ export const runSchemaCreate = async (command, name, opts) => {
87
+ const { api, workflowId } = requireContext(command);
88
+ assertSchemaName(name);
89
+ if (isSystemSchema(name)) {
90
+ warn(`"${name}" uses the custom.__ prefix reserved for engine-derived integration schemas. ` +
91
+ 'The data store rejects custom.__* types, so no collection will be created for it.');
92
+ }
93
+ const definition = buildDefinition(name, opts);
94
+ const existing = await api.tool(workflowId, 'get_schemas', {});
95
+ if (existing?.[name]) {
96
+ warn(`Schema "${name}" already exists — create_data_types overwrites it wholesale. ` +
97
+ 'Use `cai schema update` if you meant to change it deliberately.');
98
+ }
99
+ const result = await api.mutate(workflowId, () => api.tool(workflowId, 'create_data_types', { schemas: { [name]: definition } }));
100
+ emit({ name, schema: definition, result }, () => {
101
+ printKeyValues([
102
+ ['created', name],
103
+ ['display', definition.display],
104
+ ]);
105
+ process.stdout.write('\nfields\n');
106
+ printTable(['id', 'display', 'type'], fieldRows(definition));
107
+ process.stdout.write('\nA data collection for this type now exists — see `cai data collections`.\n');
108
+ });
109
+ };
110
+ export const registerSchema = (program) => {
111
+ const schema = program
112
+ .command('schema')
113
+ .description('Per-workflow custom data types (`custom.*`) — the data store’s schemas');
114
+ schema
115
+ .command('list')
116
+ .option('--all', 'include the engine-derived custom.__* integration schemas', false)
117
+ .description('Every data type defined in this workflow')
118
+ .action(async (opts, command) => {
119
+ const { api, workflowId } = requireContext(command);
120
+ const schemas = await api.tool(workflowId, 'get_schemas', {});
121
+ const entries = Object.entries(schemas ?? {}).filter(([name]) => opts.all || !isSystemSchema(name));
122
+ const hidden = Object.keys(schemas ?? {}).length - entries.length;
123
+ emit({
124
+ items: entries.map(([name, definition]) => ({ name, ...definition })),
125
+ schemas: Object.fromEntries(entries),
126
+ hiddenSystemSchemas: hidden,
127
+ }, () => {
128
+ printTable(['name', 'display', 'fields', 'source'], entries.map(([name, definition]) => [
129
+ name,
130
+ definition.display,
131
+ (definition.fields ?? []).length,
132
+ definition.nodeSlug ? `derived (${definition.nodeSlug})` : 'workflow',
133
+ ]));
134
+ if (hidden > 0) {
135
+ process.stdout.write(`\n${hidden} custom.__* integration schema(s) hidden — --all shows them\n`);
136
+ }
137
+ });
138
+ });
139
+ schema
140
+ .command('get')
141
+ .argument('<name>', 'schema name, e.g. custom.customer')
142
+ .description('One data type with its field ids, displays and types')
143
+ .action(async (name, _opts, command) => {
144
+ const { api, workflowId } = requireContext(command);
145
+ const schemas = await api.tool(workflowId, 'get_schemas', {});
146
+ const definition = schemas?.[name];
147
+ if (!definition) {
148
+ throw userError(`No schema "${name}" in this workflow. Known: ` +
149
+ `${Object.keys(schemas ?? {})
150
+ .filter(n => !isSystemSchema(n))
151
+ .join(', ') || '(none)'}.`, 'UNKNOWN_SCHEMA');
152
+ }
153
+ emit({ name, ...definition }, () => {
154
+ printKeyValues([
155
+ ['name', name],
156
+ ['display', definition.display],
157
+ ['source', definition.nodeSlug ? `derived (${definition.nodeSlug})` : 'workflow'],
158
+ ]);
159
+ process.stdout.write('\nfields\n');
160
+ printTable(['id', 'display', 'type'], fieldRows(definition));
161
+ });
162
+ });
163
+ schema
164
+ .command('resolve')
165
+ .argument('<typeId>', 'e.g. text, custom.customer, list.custom.customer, node.<nodeId>')
166
+ .description('Resolve a type id to its display name, fields and list-ness')
167
+ .action(async (typeId, _opts, command) => {
168
+ const { api, workflowId } = requireContext(command);
169
+ const data = await api.tool(workflowId, 'resolve_type', { typeId });
170
+ emit(data, () => {
171
+ printKeyValues([
172
+ ['typeId', typeId],
173
+ ['display', data?.display ?? data?.displayName ?? '-'],
174
+ ['isList', data?.isList ? 'yes' : 'no'],
175
+ ['unknown', data?.isUnknown ? 'yes' : 'no'],
176
+ ]);
177
+ const fields = data?.fields ?? [];
178
+ if (fields.length) {
179
+ process.stdout.write('\nfields\n');
180
+ printTable(['id', 'display', 'type'], fields.map((f) => [f.id, f.display, f.type]));
181
+ }
182
+ });
183
+ });
184
+ schema
185
+ .command('create')
186
+ .argument('<name>', 'schema name — must start with "custom."')
187
+ .option('--display <label>', 'human label (defaults to the name without the prefix)')
188
+ .option('--field <id:type[:display]>', 'field spec; repeatable', (value, previous = []) => [...previous, value])
189
+ .option('--from-json <file|->', 'full {display, fields} definition instead of --field')
190
+ .description('Create a custom data type (this is also what creates a data collection)')
191
+ .action(async (name, opts, command) => {
192
+ await runSchemaCreate(command, name, opts);
193
+ });
194
+ schema
195
+ .command('update')
196
+ .argument('<name>', 'schema name, e.g. custom.customer')
197
+ .option('--display <label>', 'new human label')
198
+ .option('--field <id:type[:display]>', 'field spec; repeatable. THE FIELD LIST IS REPLACED WHOLESALE', (value, previous = []) => [...previous, value])
199
+ .option('--from-json <file|->', 'full {display, fields} definition instead of --field')
200
+ .description('Replace a data type definition (not a patch — the whole schema is rewritten)')
201
+ .action(async (name, opts, command) => {
202
+ const { api, workflowId } = requireContext(command);
203
+ assertSchemaName(name);
204
+ const schemas = await api.tool(workflowId, 'get_schemas', {});
205
+ const current = schemas?.[name];
206
+ if (!current) {
207
+ throw userError(`No schema "${name}" to update. Create it with \`cai schema create ${name}\`.`, 'UNKNOWN_SCHEMA');
208
+ }
209
+ if (current.nodeSlug) {
210
+ warn(`"${name}" is derived from the ${current.nodeSlug} integration. Editing it by hand ` +
211
+ 'diverges from what the node produces and the engine may regenerate it.');
212
+ }
213
+ if (!opts.fromJson && !opts.field?.length && opts.display === undefined) {
214
+ throw userError('Nothing to update. Pass --display, --field (repeatable) or --from-json.', 'NOTHING_TO_DO');
215
+ }
216
+ // `update_data_type` replaces the whole schema, so anything the caller did
217
+ // not restate has to be carried over from the current definition — an
218
+ // omitted --display must NOT silently fall back to the name-derived
219
+ // default and rewrite the label.
220
+ const definition = opts.fromJson || opts.field?.length
221
+ ? buildDefinition(name, { ...opts, display: opts.display ?? current.display })
222
+ : { display: opts.display ?? current.display, fields: current.fields };
223
+ if (opts.display !== undefined)
224
+ definition.display = opts.display;
225
+ const dropped = (current.fields ?? [])
226
+ .map(f => f.id)
227
+ .filter(id => !definition.fields.some(f => f.id === id));
228
+ if (dropped.length) {
229
+ warn(`Field(s) ${dropped.join(', ')} are being removed from "${name}". --field replaces the ` +
230
+ 'whole list rather than adding to it; existing records keep the data but it is no ' +
231
+ 'longer addressable.');
232
+ }
233
+ const result = await api.mutate(workflowId, () => api.tool(workflowId, 'update_data_type', { schemaName: name, schema: definition }));
234
+ // `update_data_type` replaces the whole definition. Echo the shape the
235
+ // backend now stores — not the shape we sent — so an unintended field
236
+ // drop is visible in the same response that caused it.
237
+ const afterSchemas = await api.tool(workflowId, 'get_schemas', {});
238
+ const persisted = afterSchemas?.[name] ?? null;
239
+ if (!persisted) {
240
+ warn(`Could not re-read "${name}" after the update — verify with \`cai schema get ${name}\`.`);
241
+ }
242
+ emit({ name, schema: definition, persistedSchema: persisted, droppedFields: dropped, result }, () => {
243
+ printKeyValues([
244
+ ['updated', name],
245
+ ['display', (persisted ?? definition).display],
246
+ ]);
247
+ process.stdout.write('\nfields (complete stored shape after this update)\n');
248
+ printTable(['id', 'display', 'type'], fieldRows(persisted ?? definition));
249
+ });
250
+ });
251
+ schema
252
+ .command('delete')
253
+ .argument('<name>', 'schema name, e.g. custom.customer')
254
+ .requiredOption('--yes', 'confirm deleting the type and records, and removing fields that reference it')
255
+ .description('Delete a custom data type')
256
+ .action(async (name, _opts, command) => {
257
+ const { api, workflowId } = requireContext(command);
258
+ assertSchemaName(name);
259
+ const result = await api.mutate(workflowId, () => api.tool(workflowId, 'delete_data_type', { schemaName: name }));
260
+ warn(`Deleted the "${name}" type and its data collection, and removed fields that referenced ` +
261
+ 'the type. Verified: after this call the collection no longer appears in ' +
262
+ '`cai data collections` and querying the type ' +
263
+ 'fails with "not available in the dev store" — any records it held become unreachable ' +
264
+ 'through every surface the CLI has. Re-creating the schema does not bring them back. ' +
265
+ 'Expressions bound to the type resolve to an unknown type.');
266
+ emit({ name, result }, () => printKeyValues([['deleted', name]]));
267
+ });
268
+ };
269
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"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"}