@agentled/cli 0.4.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -27,8 +27,22 @@ import { registerOnboardingCommands } from './commands/onboarding.js';
27
27
  import { registerSkillsCommands } from './commands/skills.js';
28
28
  import { registerSchemaCommand } from './commands/schema.js';
29
29
  import { registerExamplesCommand } from './commands/examples.js';
30
+ import { registerToolsCommands } from './commands/tools.js';
31
+ import { checkForUpdate, printUpdateNotice } from './update-check.js';
30
32
  const require = createRequire(import.meta.url);
31
33
  const { version } = require('../package.json');
34
+ const PKG_NAME = '@agentled/cli';
35
+ // Kick off the update check so its latency overlaps with command work.
36
+ // Cache-first (free on hit); hard-capped at 1.2s on miss. Print notice
37
+ // on `exit` so every code path is covered without plumbing each command.
38
+ let latestVersion = null;
39
+ const updatePromise = checkForUpdate(PKG_NAME, version).then((v) => {
40
+ latestVersion = v;
41
+ });
42
+ process.on('exit', () => {
43
+ if (latestVersion)
44
+ printUpdateNotice(PKG_NAME, version, latestVersion);
45
+ });
32
46
  const program = new Command();
33
47
  program
34
48
  .name('agentled')
@@ -55,5 +69,7 @@ registerOnboardingCommands(program);
55
69
  registerSkillsCommands(program);
56
70
  registerSchemaCommand(program);
57
71
  registerExamplesCommand(program);
58
- program.parse();
72
+ registerToolsCommands(program);
73
+ await program.parseAsync();
74
+ await updatePromise;
59
75
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,gFAAgF,CAAC;KAC7F,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,yBAAyB,EAAE,8DAA8D,CAAC,CAAC;AAEvG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,EAAE;IACtD,MAAM,SAAS,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC;IAC5D,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAC/C,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8BAA8B;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAEjC,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Dependency-free update notifier for the agentled CLI.
3
+ *
4
+ * Checks the npm registry for a newer version of the given package and
5
+ * prints a one-line notice to stderr before the process exits. Design
6
+ * constraints:
7
+ * - Zero external dependencies (uses Node 18+ `fetch`).
8
+ * - Silent on failure — a missing network, registry hiccup, or malformed
9
+ * cache must never break the user's command.
10
+ * - Cached: one HTTP round-trip per 24h (cache miss adds ≤1.2s latency),
11
+ * cache hits are free.
12
+ * - Opt-out: honors `AGENTLED_NO_UPDATE_CHECK=1`, `NO_UPDATE_NOTIFIER=1`,
13
+ * and standard CI env vars. Also skips when stderr is not a TTY.
14
+ */
15
+ export declare const DEFAULT_TTL_MS: number;
16
+ export declare const DEFAULT_TIMEOUT_MS = 1200;
17
+ export interface CacheEntry {
18
+ checked: number;
19
+ latest: string;
20
+ }
21
+ export declare function cachePath(pkgName: string): string;
22
+ export declare function readCache(pkgName: string): CacheEntry | null;
23
+ export declare function writeCache(pkgName: string, entry: CacheEntry): void;
24
+ export declare function isDisabled(): boolean;
25
+ export declare function semverCompare(a: string, b: string): number;
26
+ export declare function fetchLatestVersion(pkgName: string, timeoutMs: number): Promise<string | null>;
27
+ export interface CheckOptions {
28
+ ttlMs?: number;
29
+ timeoutMs?: number;
30
+ fetcher?: (pkg: string, timeoutMs: number) => Promise<string | null>;
31
+ }
32
+ export declare function checkForUpdate(pkgName: string, currentVersion: string, opts?: CheckOptions): Promise<string | null>;
33
+ export declare function renderUpdateNotice(pkgName: string, current: string, latest: string): string;
34
+ export declare function printUpdateNotice(pkgName: string, current: string, latest: string): void;
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Dependency-free update notifier for the agentled CLI.
3
+ *
4
+ * Checks the npm registry for a newer version of the given package and
5
+ * prints a one-line notice to stderr before the process exits. Design
6
+ * constraints:
7
+ * - Zero external dependencies (uses Node 18+ `fetch`).
8
+ * - Silent on failure — a missing network, registry hiccup, or malformed
9
+ * cache must never break the user's command.
10
+ * - Cached: one HTTP round-trip per 24h (cache miss adds ≤1.2s latency),
11
+ * cache hits are free.
12
+ * - Opt-out: honors `AGENTLED_NO_UPDATE_CHECK=1`, `NO_UPDATE_NOTIFIER=1`,
13
+ * and standard CI env vars. Also skips when stderr is not a TTY.
14
+ */
15
+ import * as fs from 'node:fs';
16
+ import * as os from 'node:os';
17
+ import * as path from 'node:path';
18
+ export const DEFAULT_TTL_MS = 24 * 60 * 60 * 1000;
19
+ export const DEFAULT_TIMEOUT_MS = 1200;
20
+ // ---------------------------------------------------------------------------
21
+ // Cache file I/O
22
+ // ---------------------------------------------------------------------------
23
+ export function cachePath(pkgName) {
24
+ const base = process.env.XDG_CONFIG_HOME || path.join(os.homedir(), '.config');
25
+ const safe = pkgName.replace(/[\/@]/g, '_');
26
+ return path.join(base, 'agentled', `update-check-${safe}.json`);
27
+ }
28
+ export function readCache(pkgName) {
29
+ try {
30
+ const raw = fs.readFileSync(cachePath(pkgName), 'utf-8');
31
+ const parsed = JSON.parse(raw);
32
+ if (typeof parsed.checked !== 'number' || typeof parsed.latest !== 'string')
33
+ return null;
34
+ return { checked: parsed.checked, latest: parsed.latest };
35
+ }
36
+ catch {
37
+ return null;
38
+ }
39
+ }
40
+ export function writeCache(pkgName, entry) {
41
+ try {
42
+ const file = cachePath(pkgName);
43
+ fs.mkdirSync(path.dirname(file), { recursive: true });
44
+ fs.writeFileSync(file, JSON.stringify(entry));
45
+ }
46
+ catch {
47
+ // Best-effort; update checks must never block the CLI on disk issues.
48
+ }
49
+ }
50
+ // ---------------------------------------------------------------------------
51
+ // Disable logic
52
+ // ---------------------------------------------------------------------------
53
+ export function isDisabled() {
54
+ return Boolean(process.env.AGENTLED_NO_UPDATE_CHECK ||
55
+ process.env.NO_UPDATE_NOTIFIER ||
56
+ process.env.CI ||
57
+ process.env.CONTINUOUS_INTEGRATION ||
58
+ !(process.stderr.isTTY ?? false));
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // Semver comparison (X.Y.Z only — pre-release tags are ignored)
62
+ // ---------------------------------------------------------------------------
63
+ export function semverCompare(a, b) {
64
+ const parse = (v) => v.split('-')[0]
65
+ .split('.')
66
+ .slice(0, 3)
67
+ .map((n) => {
68
+ const parsed = parseInt(n, 10);
69
+ return Number.isFinite(parsed) ? parsed : 0;
70
+ });
71
+ const pa = parse(a);
72
+ const pb = parse(b);
73
+ for (let i = 0; i < 3; i++) {
74
+ const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
75
+ if (diff !== 0)
76
+ return diff;
77
+ }
78
+ return 0;
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // Registry fetch
82
+ // ---------------------------------------------------------------------------
83
+ export async function fetchLatestVersion(pkgName, timeoutMs) {
84
+ const ctrl = new AbortController();
85
+ const timer = setTimeout(() => ctrl.abort(), timeoutMs);
86
+ try {
87
+ const res = await fetch(`https://registry.npmjs.org/${encodeURIComponent(pkgName).replace('%40', '@')}/latest`, {
88
+ headers: { Accept: 'application/vnd.npm.install-v1+json' },
89
+ signal: ctrl.signal,
90
+ });
91
+ if (!res.ok)
92
+ return null;
93
+ const data = (await res.json());
94
+ return typeof data.version === 'string' ? data.version : null;
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ finally {
100
+ clearTimeout(timer);
101
+ }
102
+ }
103
+ export async function checkForUpdate(pkgName, currentVersion, opts = {}) {
104
+ if (isDisabled())
105
+ return null;
106
+ const ttlMs = opts.ttlMs ?? DEFAULT_TTL_MS;
107
+ const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
108
+ const fetcher = opts.fetcher ?? fetchLatestVersion;
109
+ const cached = readCache(pkgName);
110
+ const now = Date.now();
111
+ const hasFreshCache = cached && now - cached.checked < ttlMs;
112
+ let latest = null;
113
+ if (hasFreshCache) {
114
+ latest = cached.latest;
115
+ }
116
+ else {
117
+ latest = await fetcher(pkgName, timeoutMs);
118
+ if (latest) {
119
+ writeCache(pkgName, { checked: now, latest });
120
+ }
121
+ else if (cached) {
122
+ // Fetch failed — fall back to stale cache rather than silently
123
+ // suppressing a known update. Refresh `checked` so we don't
124
+ // retry on every invocation in offline / registry-blocked
125
+ // environments (back off for a full TTL).
126
+ latest = cached.latest;
127
+ writeCache(pkgName, { checked: now, latest: cached.latest });
128
+ }
129
+ else {
130
+ // Fetch failed and no prior cache — record the attempt so the
131
+ // next invocation backs off for a full TTL instead of paying the
132
+ // timeout on every run. Store currentVersion so no false notice
133
+ // is shown (we have no idea what's on npm).
134
+ writeCache(pkgName, { checked: now, latest: currentVersion });
135
+ }
136
+ }
137
+ if (latest && semverCompare(latest, currentVersion) > 0) {
138
+ return latest;
139
+ }
140
+ return null;
141
+ }
142
+ // ---------------------------------------------------------------------------
143
+ // Rendering
144
+ // ---------------------------------------------------------------------------
145
+ const NO_COLOR = Boolean(process.env.NO_COLOR) || !(process.stderr.isTTY ?? false);
146
+ const esc = (code) => (NO_COLOR ? '' : `\x1b[${code}m`);
147
+ const reset = esc('0');
148
+ const cyan = esc('36');
149
+ const yellow = esc('33');
150
+ const gray = esc('90');
151
+ export function renderUpdateNotice(pkgName, current, latest) {
152
+ return [
153
+ '',
154
+ ` ${gray}───${reset} ${yellow}◆${reset} Update available: ${gray}${current}${reset} → ${cyan}${latest}${reset}`,
155
+ ` Run ${cyan}npx ${pkgName}@latest${reset} to update.`,
156
+ '',
157
+ ].join('\n');
158
+ }
159
+ export function printUpdateNotice(pkgName, current, latest) {
160
+ process.stderr.write(renderUpdateNotice(pkgName, current, latest));
161
+ }
162
+ //# sourceMappingURL=update-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Client-side preflight checks for a pipeline JSON before it's sent to the
3
- * server. Catches the "Nick-class" failure mode (invalid step types, missing
3
+ * server. Catches the silent-strip failure mode (invalid step types, missing
4
4
  * required fields, unreachable steps, silently-stripped root fields) without
5
5
  * spending a create + validate + delete round trip.
6
6
  *
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Client-side preflight checks for a pipeline JSON before it's sent to the
3
- * server. Catches the "Nick-class" failure mode (invalid step types, missing
3
+ * server. Catches the silent-strip failure mode (invalid step types, missing
4
4
  * required fields, unreachable steps, silently-stripped root fields) without
5
5
  * spending a create + validate + delete round trip.
6
6
  *
@@ -8,6 +8,8 @@
8
8
  * VALID_STEP_TYPES via the drift test in
9
9
  * agentled-mcp-server/__tests__/skill-step-types.test.ts.
10
10
  */
11
+ import { VALID_CONTEXT_FIELD_TYPE_VALUES, CONTEXT_FIELD_TYPE_ALIASES, suggestContextFieldTypeFix, } from '../context-schema.js';
12
+ import { VALID_BUILTIN_TOOL_VALUES, suggestBuiltinToolFix, } from '../builtin-tools-catalog.js';
11
13
  /**
12
14
  * Canonical valid step types. Must stay in sync with:
13
15
  * shared/services/chat/orchestrator/validators/index.ts (runtime)
@@ -23,7 +25,7 @@ const VALID_STEP_TYPES = new Set([
23
25
  /**
24
26
  * Root-level fields that the API silently strips. Detecting these at the
25
27
  * step root is the single highest-leverage check — it's the exact class of
26
- * bug that produced Nick's 201-created-but-broken workflows.
28
+ * bug that produced the 201-created-but-broken workflows.
27
29
  */
28
30
  const STRIPPED_ROOT_FIELDS = {
29
31
  prompt: 'Move to `pipelineStepPrompt.template`',
@@ -68,7 +70,7 @@ export function preflightPipeline(pipeline) {
68
70
  else {
69
71
  stepIds.add(step.id);
70
72
  }
71
- // type check — the Nick-class bug
73
+ // type check — the silent-strip bug
72
74
  if (typeof step.type !== 'string') {
73
75
  errors.push({ severity: 'error', stepId: step.id, code: 'missing-type', message: 'Step is missing `type`' });
74
76
  }
@@ -105,6 +107,27 @@ export function preflightPipeline(pipeline) {
105
107
  });
106
108
  }
107
109
  }
110
+ // aiActionWithTools — each tool's builtinType must be a known value.
111
+ // Typos are silently ignored at runtime, so the AI step runs but the
112
+ // tool is never registered (same silent-failure class as step types).
113
+ if (step.type === 'aiActionWithTools') {
114
+ const tools = Array.isArray(step.tools) ? step.tools : [];
115
+ for (let i = 0; i < tools.length; i += 1) {
116
+ const tool = tools[i];
117
+ if (!tool || typeof tool !== 'object')
118
+ continue;
119
+ const bt = tool.builtinType;
120
+ if (typeof bt !== 'string')
121
+ continue; // non-builtin (app action, webhook) — not our concern
122
+ if (!VALID_BUILTIN_TOOL_VALUES.has(bt)) {
123
+ errors.push({
124
+ severity: 'error', stepId: step.id, code: 'invalid-builtin-type',
125
+ message: `tools[${i}].builtinType "${bt}" is not a known builtin. Run \`agentled tools builtins\` to list valid values.`,
126
+ suggestedFix: suggestBuiltinToolFix(bt),
127
+ });
128
+ }
129
+ }
130
+ }
108
131
  // appAction must have app.id + app.actionId
109
132
  if (step.type === 'appAction') {
110
133
  if (!step.app || typeof step.app !== 'object') {
@@ -157,10 +180,95 @@ export function preflightPipeline(pipeline) {
157
180
  });
158
181
  }
159
182
  }
183
+ // Context input-page field types — the other half of the silent-strip
184
+ // failure mode. An invalid `type` on an input-page field falls
185
+ // back to a plain text input at render time and type-aware pickers
186
+ // (connected emails, country, multiselect) silently disappear.
187
+ checkContextInputFields(pipeline, errors, warnings);
160
188
  return { valid: errors.length === 0, errors, warnings, stepCount: steps.length };
161
189
  }
190
+ function checkContextInputFields(pipeline, errors, warnings) {
191
+ const ctx = pipeline?.context;
192
+ if (!ctx || typeof ctx !== 'object')
193
+ return;
194
+ const sources = [];
195
+ if (ctx.executionInputConfig?.fields) {
196
+ sources.push({ scope: 'context.executionInputConfig', fields: ctx.executionInputConfig.fields });
197
+ }
198
+ if (Array.isArray(ctx.inputPages)) {
199
+ for (const page of ctx.inputPages) {
200
+ const fields = page?.configuration?.fields;
201
+ if (fields)
202
+ sources.push({ scope: `context.inputPages["${page.pathname ?? page.title ?? '?'}"]`, fields });
203
+ }
204
+ }
205
+ for (const { scope, fields } of sources) {
206
+ if (!Array.isArray(fields))
207
+ continue;
208
+ checkFieldArray(fields, scope, errors, warnings);
209
+ }
210
+ }
211
+ function checkFieldArray(fields, scope, errors, warnings) {
212
+ for (let i = 0; i < fields.length; i += 1) {
213
+ const f = fields[i];
214
+ if (!f || typeof f !== 'object')
215
+ continue;
216
+ const path = `${scope}.fields[${i}]${typeof f.name === 'string' ? ` "${f.name}"` : ''}`;
217
+ // Missing required meta
218
+ if (typeof f.name !== 'string' || f.name.trim() === '') {
219
+ errors.push({
220
+ severity: 'error', code: 'input-field-missing-name',
221
+ message: `${path} is missing \`name\``,
222
+ });
223
+ }
224
+ if (typeof f.type !== 'string' || f.type.trim() === '') {
225
+ errors.push({
226
+ severity: 'error', code: 'input-field-missing-type',
227
+ message: `${path} is missing \`type\`. Run \`agentled schema --context\` to see valid values.`,
228
+ });
229
+ continue;
230
+ }
231
+ // Legacy alias — warn with the canonical name
232
+ if (Object.prototype.hasOwnProperty.call(CONTEXT_FIELD_TYPE_ALIASES, f.type)) {
233
+ warnings.push({
234
+ severity: 'warning', code: 'input-field-legacy-alias',
235
+ message: `${path} uses legacy alias type "${f.type}"`,
236
+ suggestedFix: `Rename to \`${CONTEXT_FIELD_TYPE_ALIASES[f.type]}\` (canonical name).`,
237
+ });
238
+ }
239
+ else if (!VALID_CONTEXT_FIELD_TYPE_VALUES.has(f.type)) {
240
+ errors.push({
241
+ severity: 'error', code: 'invalid-input-field-type',
242
+ message: `${path} has unknown \`type\` "${f.type}". Run \`agentled schema --context\` to list valid values.`,
243
+ suggestedFix: suggestContextFieldTypeFix(f.type) ?? 'Pick one of: text, textarea, select, multiselect, boolean, Numeric, email, url, date, datetime, list, connected_emails_selector_multiple, …',
244
+ });
245
+ }
246
+ // Type-specific extra-key checks
247
+ if (f.type === 'select' || f.type === 'multiselect') {
248
+ if (!Array.isArray(f.options) || f.options.length === 0) {
249
+ warnings.push({
250
+ severity: 'warning', code: 'input-field-missing-options',
251
+ message: `${path} is a \`${f.type}\` but has no \`options\` array`,
252
+ suggestedFix: 'Add `options: [{ label, value }, …]` (or set `allowCustomValues: true` if values are user-entered).',
253
+ });
254
+ }
255
+ }
256
+ if (f.type === 'list') {
257
+ if (!Array.isArray(f.itemFields) || f.itemFields.length === 0) {
258
+ warnings.push({
259
+ severity: 'warning', code: 'input-field-missing-item-fields',
260
+ message: `${path} is a \`list\` but has no \`itemFields\``,
261
+ suggestedFix: 'Add `itemFields: [{ name, label, type }, …]` defining the shape of each row.',
262
+ });
263
+ }
264
+ else {
265
+ checkFieldArray(f.itemFields, `${path}.itemFields`, errors, warnings);
266
+ }
267
+ }
268
+ }
269
+ }
162
270
  /**
163
- * Heuristic fix suggestions for the exact invented types Nick-class agents produce.
271
+ * Heuristic fix suggestions for the exact invented types agents commonly produce.
164
272
  */
165
273
  function suggestTypeFix(invalid) {
166
274
  const map = {
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/utils/preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/utils/preflight.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentled/cli",
3
- "version": "0.4.3",
3
+ "version": "0.6.0",
4
4
  "description": "CLI for Agentled — manage workflows, apps, and knowledge from the command line. Zero context-window cost for AI agents.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -29,6 +29,7 @@ Every bundled scaffold:
29
29
  | `lead-scoring-kg` | 04 + 09 | trigger → kg.read-list → AI scoring loop → knowledgeSync → report |
30
30
  | `list-match-email` | 08 | trigger → kg.read-list → AI match top candidates → composed email (approval gate) → knowledgeSync |
31
31
  | `extract-threshold-alert` | 06 + 09 | trigger → AI extract → threshold check (code) → external update → conditional Slack alert → knowledgeSync |
32
+ | `ai-with-tools` | — | trigger → `aiActionWithTools` (web_search + workspace_memory) → milestone |
32
33
 
33
34
  ## Bring your own scaffolds
34
35
 
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "AI with Runtime Tools",
3
+ "goal": "AI step that can call web_search + workspace_memory at runtime (aiActionWithTools shape).",
4
+ "description": "Starting shape for an AI step that needs to pull fresh web context and recall/store workspace memory. Replace the prompt and response structure for your task.",
5
+ "status": "draft",
6
+ "context": {
7
+ "executionInputConfig": {
8
+ "title": "Research + Recall",
9
+ "description": "Provide a topic or entity to research.",
10
+ "runCTALabel": "Run",
11
+ "fields": [
12
+ { "name": "topic", "label": "Topic or entity", "type": "text", "required": true }
13
+ ]
14
+ }
15
+ },
16
+ "steps": [
17
+ {
18
+ "id": "start",
19
+ "type": "trigger",
20
+ "name": "Manual Start",
21
+ "pipelineStepStartConditions": { "trigger": { "type": "manual" } },
22
+ "next": { "stepId": "analyze" }
23
+ },
24
+ {
25
+ "id": "analyze",
26
+ "type": "aiActionWithTools",
27
+ "name": "Analyze with Tools",
28
+ "tools": [
29
+ { "type": "builtin", "name": "web_search", "builtinType": "web_search" },
30
+ { "type": "builtin", "name": "workspace_memory", "builtinType": "workspace_memory" }
31
+ ],
32
+ "pipelineStepPrompt": {
33
+ "template": "Research the topic: {{input.topic}}.\n\nUse `web_search` for fresh external context. Use `workspace_memory` to recall what we already know about {{input.topic}} (call action \"search\" with a relevant query) and to `store` any durable fact you learn (category=fact, confidence 70-100).\n\nReturn a concise structured summary.",
34
+ "responseStructure": {
35
+ "summary": "string — 3-5 sentences synthesising research + prior memory",
36
+ "sources": "array of strings — URLs cited from web_search",
37
+ "stored_memories": "array of strings — keys of new memories written (if any)"
38
+ }
39
+ },
40
+ "creditCost": 10,
41
+ "next": { "stepId": "done" }
42
+ },
43
+ {
44
+ "id": "done",
45
+ "type": "milestone",
46
+ "name": "Done"
47
+ }
48
+ ]
49
+ }
@@ -33,9 +33,9 @@
33
33
  "configuration": {
34
34
  "contextKey": "thresholds",
35
35
  "fields": [
36
- { "name": "metric_a_min", "label": "Metric A floor", "type": "number" },
37
- { "name": "metric_b_max", "label": "Metric B ceiling", "type": "number" },
38
- { "name": "metric_c_min", "label": "Metric C minimum", "type": "number" }
36
+ { "name": "metric_a_min", "label": "Metric A floor", "type": "Numeric" },
37
+ { "name": "metric_b_max", "label": "Metric B ceiling", "type": "Numeric" },
38
+ { "name": "metric_c_min", "label": "Metric C minimum", "type": "Numeric" }
39
39
  ]
40
40
  }
41
41
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: agentled
3
- version: 0.4.1
3
+ version: 0.5.0
4
4
  description: Build, manage, and execute Agentled AI workflows via MCP tools. Use when the user asks to create workflows, automate tasks, enrich leads, scrape websites, find emails, manage executions, or interact with any Agentled workspace capability.
5
5
  user-invocable: false
6
6
  ---
@@ -49,15 +49,20 @@ Before writing pipeline JSON, pull the canonical field schema and the matching b
49
49
  **Via CLI (shell access):**
50
50
  ```
51
51
  agentled schema --step-type aiAction # fields valid on an aiAction step
52
+ agentled schema --context # valid input-page / context field types (MCP-029)
53
+ agentled tools builtins # valid aiActionWithTools builtinType values (MCP-030)
52
54
  agentled examples # list all patterns
53
55
  agentled examples trigger-design # print the full pattern
54
56
  agentled workflows scaffold --list # list working pipeline skeletons
55
57
  agentled workflows scaffold lead-scoring-kg --out pipeline.json
58
+ agentled workflows scaffold ai-with-tools --out pipeline.json # aiActionWithTools starter
56
59
  agentled workflows validate --file pipeline.json # fast client-side preflight (no API)
57
60
  agentled workflows create --file pipeline.json # full server validation on save
58
61
  agentled best-practices # summary + link to agentic-ops repo
59
62
  ```
60
63
 
64
+ > **Silent-strip failures caught by preflight:** invalid `type` on a context / input-page field (e.g. `"multi-select"`, `"checkbox"`, `"number"`) and invalid `builtinType` on an `aiActionWithTools` tool (e.g. `"web-search"`, `"memory"`) both get silently stripped by the runtime — `workflows validate` now flags them with a "did you mean" fix.
65
+
61
66
  **Which pattern to read, by task:**
62
67
 
63
68
  | You're building… | Read pattern | Scaffold |
@@ -137,15 +142,62 @@ Run these four calls whenever starting a new conversation or switching tasks. Th
137
142
 
138
143
  **Value you unlock for the user:** By checking existing workflows and KG state first, you avoid duplicate work, reuse prior results, and build automations that integrate with what's already running — saving real time and credits.
139
144
 
140
- ## Iterative Building Pattern
145
+ ## Incremental Authoring (recommended)
146
+
147
+ Build workflows **one step at a time**. This catches errors per-step instead of dumping a full JSON blob and getting 10+ errors at once.
148
+
149
+ ### Via MCP tools
150
+
151
+ ```
152
+ create_workflow({ name, goal }) → empty shell, returns workflowId
153
+ add_step({ workflowId, step: { type: "trigger", ... } }) → returns validation per-step
154
+ add_step({ workflowId, step: { type: "aiAction", ... }, insertAfter: "trigger-id" })
155
+ → validates template variables, model IDs, app action inputs immediately
156
+ ... repeat for each step ...
157
+ validate_workflow(workflowId) → full graph-level check (reachability, cycles)
158
+ publish_workflow(workflowId, "live")
159
+ ```
160
+
161
+ ### Via CLI
162
+
163
+ ```bash
164
+ agentled wf create --pipeline '{"name":"My Workflow","goal":"..."}' --skip-validate
165
+ # → returns workflowId (no steps yet)
166
+
167
+ agentled wf add-step <wfId> --step '{"id":"start","type":"trigger","name":"Start",...}'
168
+ # → returns per-step validation
169
+
170
+ agentled wf add-step <wfId> --insert-after start --rewire-next \
171
+ --step '{"id":"extract","type":"aiAction","name":"Extract",...}'
172
+ # → bad variable refs, wrong model ID, or unknown app action caught HERE
173
+
174
+ # ... repeat ...
175
+
176
+ agentled wf validate <wfId> # full graph check
177
+ agentled wf publish <wfId> --status live
178
+ ```
179
+
180
+ ### Why not bulk JSON?
181
+
182
+ The full-pipeline `steps` array on `create_workflow` / `update_workflow` is supported for **imports, templates, and export→edit→re-import round-trips**. Agents authoring from scratch should not use it:
183
+
184
+ - No per-step feedback — a bad `type`, model ID, or variable ref on step 2 cascades into 10+ errors on steps 3-8.
185
+ - No variable discovery — `{{input.X}}` vs `{{steps.trigger-id.X}}` is a common agent mistake that only surfaces after the full blob is submitted.
186
+ - Agents invent step types (`"ai"`, `"integration"`, `"knowledge_graph_query"`) that are silently accepted but never execute.
187
+
188
+ Internal testing: **0 errors with incremental vs 13 errors with bulk JSON** on the same pipeline.
189
+
190
+ ### Editing existing workflows
191
+
192
+ For live workflows, prefer per-step tools over bulk updates:
193
+
194
+ - `update_step(workflowId, stepId, updates)` — change one step (prompt, inputs, next, etc.)
195
+ - `add_step(workflowId, step, insertAfter?)` — insert a new step
196
+ - `remove_step(workflowId, stepId)` — delete a step and re-wire neighbors
197
+ - After edits: `validate_workflow` → `publish_workflow` (or `promote_draft` for live workflows)
141
198
 
142
- Follow this pattern when creating workflows:
199
+ ### Post-authoring
143
200
 
144
- 1. Design the pipeline JSON based on requirements
145
- 2. `create_workflow` to save it
146
- 3. `validate_workflow` to check for errors
147
- 4. If errors: fix the pipeline, `update_workflow`, `validate_workflow` again
148
- 5. When valid: `publish_workflow` with status `"live"`
149
201
  6. Test: `start_workflow` with sample input
150
202
  7. Check results: `get_execution` to see step outputs
151
203