@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/builtin-tools-catalog.d.ts +37 -0
- package/dist/builtin-tools-catalog.js +96 -0
- package/dist/builtin-tools-catalog.js.map +1 -0
- package/dist/commands/auth.js +3 -3
- package/dist/commands/schema.js +51 -2
- package/dist/commands/schema.js.map +1 -1
- package/dist/commands/tools.d.ts +10 -0
- package/dist/commands/tools.js +53 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/workflows.js +2 -2
- package/dist/commands/workflows.js.map +1 -1
- package/dist/context-schema.d.ts +37 -0
- package/dist/context-schema.js +108 -0
- package/dist/context-schema.js.map +1 -0
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/update-check.d.ts +34 -0
- package/dist/update-check.js +162 -0
- package/dist/update-check.js.map +1 -0
- package/dist/utils/preflight.d.ts +1 -1
- package/dist/utils/preflight.js +112 -4
- package/dist/utils/preflight.js.map +1 -1
- package/package.json +1 -1
- package/scaffolds/README.md +1 -0
- package/scaffolds/ai-with-tools.json +49 -0
- package/scaffolds/extract-threshold-alert.json +3 -3
- package/skills/agentled/SKILL.md +60 -8
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
|
|
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;
|
|
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
|
|
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
|
*
|
package/dist/utils/preflight.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
package/scaffolds/README.md
CHANGED
|
@@ -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": "
|
|
37
|
-
{ "name": "metric_b_max", "label": "Metric B ceiling", "type": "
|
|
38
|
-
{ "name": "metric_c_min", "label": "Metric C minimum", "type": "
|
|
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
|
}
|
package/skills/agentled/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agentled
|
|
3
|
-
version: 0.
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
|