@agentled/cli 0.4.3 → 0.5.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/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 +2 -0
- package/dist/index.js.map +1 -1
- 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 +6 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builtin tools catalog for `aiActionWithTools` steps.
|
|
3
|
+
*
|
|
4
|
+
* Canonical source: the `Tool.builtinType` union in
|
|
5
|
+
* `shared/types/pipeline/PipelineTypes.ts`. This file is the
|
|
6
|
+
* CLI-distributable mirror — drift is guarded by
|
|
7
|
+
* `agentled-mcp-server/__tests__/builtin-tools-catalog.test.ts`.
|
|
8
|
+
*
|
|
9
|
+
* When a new builtin is added to the runtime:
|
|
10
|
+
* 1. Extend the `Tool.builtinType` union in PipelineTypes.ts
|
|
11
|
+
* 2. Append the same value to this catalog with a description + config
|
|
12
|
+
* 3. The drift test enforces (1) ⊆ (2) and vice versa
|
|
13
|
+
*/
|
|
14
|
+
export interface BuiltinToolDoc {
|
|
15
|
+
/** Wire value — goes into `tools[].builtinType`. */
|
|
16
|
+
value: string;
|
|
17
|
+
/** One-line description of what the tool does at runtime. */
|
|
18
|
+
description: string;
|
|
19
|
+
/** Extra config keys the tool reads beyond `builtinType`. */
|
|
20
|
+
extraKeys?: string[];
|
|
21
|
+
/**
|
|
22
|
+
* Providers that surface this tool. `all` means any AI provider we support
|
|
23
|
+
* (via a shim if needed). `anthropic` / `openai` means the tool is a native
|
|
24
|
+
* tool for that provider and may be a no-op elsewhere.
|
|
25
|
+
*/
|
|
26
|
+
providers: Array<'all' | 'anthropic' | 'openai' | 'moonshot'>;
|
|
27
|
+
/** Typical credit cost per invocation (best-effort; see live registry for exact). */
|
|
28
|
+
typicalCreditsPerCall?: number;
|
|
29
|
+
/** Minimal JSON fragment for the `tools[]` array. */
|
|
30
|
+
example: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
export declare const BUILTIN_TOOLS_CATALOG: BuiltinToolDoc[];
|
|
33
|
+
export declare const VALID_BUILTIN_TOOL_VALUES: Set<string>;
|
|
34
|
+
/**
|
|
35
|
+
* Heuristic "did you mean" for the most common invented / typo'd builtinType values.
|
|
36
|
+
*/
|
|
37
|
+
export declare function suggestBuiltinToolFix(invalid: string): string | undefined;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builtin tools catalog for `aiActionWithTools` steps.
|
|
3
|
+
*
|
|
4
|
+
* Canonical source: the `Tool.builtinType` union in
|
|
5
|
+
* `shared/types/pipeline/PipelineTypes.ts`. This file is the
|
|
6
|
+
* CLI-distributable mirror — drift is guarded by
|
|
7
|
+
* `agentled-mcp-server/__tests__/builtin-tools-catalog.test.ts`.
|
|
8
|
+
*
|
|
9
|
+
* When a new builtin is added to the runtime:
|
|
10
|
+
* 1. Extend the `Tool.builtinType` union in PipelineTypes.ts
|
|
11
|
+
* 2. Append the same value to this catalog with a description + config
|
|
12
|
+
* 3. The drift test enforces (1) ⊆ (2) and vice versa
|
|
13
|
+
*/
|
|
14
|
+
export const BUILTIN_TOOLS_CATALOG = [
|
|
15
|
+
{
|
|
16
|
+
value: 'web_search',
|
|
17
|
+
description: 'Search the web for fresh information. Returns ranked snippets with URLs.',
|
|
18
|
+
providers: ['all'],
|
|
19
|
+
typicalCreditsPerCall: 2,
|
|
20
|
+
example: { type: 'builtin', name: 'web_search', builtinType: 'web_search' },
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
value: 'fetch_website_content',
|
|
24
|
+
description: 'Fetch and extract readable content from a specific URL (companion to web_search).',
|
|
25
|
+
providers: ['all'],
|
|
26
|
+
typicalCreditsPerCall: 1,
|
|
27
|
+
example: { type: 'builtin', name: 'fetch_website_content', builtinType: 'fetch_website_content' },
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
value: 'file_search',
|
|
31
|
+
description: 'Search across files attached to the workspace / conversation.',
|
|
32
|
+
providers: ['openai'],
|
|
33
|
+
example: { type: 'builtin', name: 'file_search', builtinType: 'file_search' },
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
value: 'code_interpreter',
|
|
37
|
+
description: 'Run Python code in a sandbox. Useful for ad-hoc data crunching inside an AI step.',
|
|
38
|
+
providers: ['openai', 'anthropic'],
|
|
39
|
+
typicalCreditsPerCall: 3,
|
|
40
|
+
example: { type: 'builtin', name: 'code_interpreter', builtinType: 'code_interpreter' },
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
value: 'workspace_memory',
|
|
44
|
+
description: 'Recall/search/store persistent memories scoped to workspace or workflow. Memories ≥70 confidence auto-sync to the KG.',
|
|
45
|
+
providers: ['all'],
|
|
46
|
+
extraKeys: ['memoryConfig'],
|
|
47
|
+
example: { type: 'builtin', name: 'workspace_memory', builtinType: 'workspace_memory' },
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
value: 'kg_search',
|
|
51
|
+
description: 'Vector search over Knowledge Graph text entries. Returns ranked rows with snippets.',
|
|
52
|
+
providers: ['all'],
|
|
53
|
+
example: { type: 'builtin', name: 'kg_search', builtinType: 'kg_search' },
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
value: 'kg_traverse',
|
|
57
|
+
description: 'Traverse KG edges from a node. Returns related entities and relationship types.',
|
|
58
|
+
providers: ['all'],
|
|
59
|
+
example: { type: 'builtin', name: 'kg_traverse', builtinType: 'kg_traverse' },
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
value: 'kg_nodes',
|
|
63
|
+
description: 'Fetch specific KG nodes by ID or by list key (structured row lookup).',
|
|
64
|
+
providers: ['all'],
|
|
65
|
+
example: { type: 'builtin', name: 'kg_nodes', builtinType: 'kg_nodes' },
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
value: 'kg_write',
|
|
69
|
+
description: 'Write rows, edges, or insights to the Knowledge Graph (bounded, not for large bulk — use `knowledgeSync` step for that).',
|
|
70
|
+
providers: ['all'],
|
|
71
|
+
example: { type: 'builtin', name: 'kg_write', builtinType: 'kg_write' },
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
export const VALID_BUILTIN_TOOL_VALUES = new Set(BUILTIN_TOOLS_CATALOG.map(t => t.value));
|
|
75
|
+
/**
|
|
76
|
+
* Heuristic "did you mean" for the most common invented / typo'd builtinType values.
|
|
77
|
+
*/
|
|
78
|
+
export function suggestBuiltinToolFix(invalid) {
|
|
79
|
+
const v = invalid.toLowerCase();
|
|
80
|
+
const map = {
|
|
81
|
+
'web-search': 'Use `web_search` (underscore).',
|
|
82
|
+
'websearch': 'Use `web_search` (with underscore).',
|
|
83
|
+
'search': 'Use `web_search` for the web or `kg_search` for the Knowledge Graph — `search` alone is not a builtin.',
|
|
84
|
+
'google_search': 'Use `web_search` — we abstract the provider so it works across Anthropic/OpenAI/Moonshot.',
|
|
85
|
+
'memory': 'Use `workspace_memory` — the canonical name.',
|
|
86
|
+
'workspace-memory': 'Use `workspace_memory` (underscore).',
|
|
87
|
+
'knowledge_graph': 'Pick one of `kg_search` / `kg_traverse` / `kg_nodes` / `kg_write` — `knowledge_graph` is not itself a builtin.',
|
|
88
|
+
'kg': 'Pick one of `kg_search` / `kg_traverse` / `kg_nodes` / `kg_write`.',
|
|
89
|
+
'code': 'Use `code_interpreter` (the canonical builtin) or switch to a `code` step for JS/Python without an LLM.',
|
|
90
|
+
'scrape': 'Use `fetch_website_content` — `scrape` is a `web-scraping` app action, not a builtin.',
|
|
91
|
+
'fetch': 'Use `fetch_website_content`.',
|
|
92
|
+
'fetch_url': 'Use `fetch_website_content`.',
|
|
93
|
+
};
|
|
94
|
+
return map[v];
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=builtin-tools-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-tools-catalog.js","sourceRoot":"","sources":["../src/builtin-tools-catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/auth.js
CHANGED
|
@@ -54,9 +54,9 @@ function printSavedWorkspaceSummary() {
|
|
|
54
54
|
* login. Silently no-op'd by --skip-skills. Never blocks login on failure —
|
|
55
55
|
* skills are a convenience, not a hard requirement.
|
|
56
56
|
*
|
|
57
|
-
* This is what closes
|
|
58
|
-
*
|
|
59
|
-
*
|
|
57
|
+
* This is what closes silent-strip-class bugs: without the skill auto-loaded,
|
|
58
|
+
* agents invent step types (`type: "ai"`, `knowledge_graph_query`) that the
|
|
59
|
+
* API silently strips.
|
|
60
60
|
*/
|
|
61
61
|
function installSkillsAfterLogin(skipSkills) {
|
|
62
62
|
if (skipSkills)
|
package/dist/commands/schema.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint-disable no-console */
|
|
2
2
|
import { AgentledClient } from '../client.js';
|
|
3
3
|
import { printOutput, printError } from '../utils/output.js';
|
|
4
|
+
import { BASE_FIELD_KEYS, CONTEXT_FIELD_TYPES, CONTEXT_FIELD_TYPE_ALIASES, } from '../context-schema.js';
|
|
4
5
|
function filterByStepType(schema, stepType) {
|
|
5
6
|
const groups = schema.groups
|
|
6
7
|
.map(g => ({
|
|
@@ -31,18 +32,66 @@ function renderTable(schema) {
|
|
|
31
32
|
}
|
|
32
33
|
return lines.join('\n');
|
|
33
34
|
}
|
|
35
|
+
function buildContextSchema() {
|
|
36
|
+
return {
|
|
37
|
+
description: 'Valid field types for pipeline.context input pages (`executionInputConfig.fields[]`, ' +
|
|
38
|
+
'`inputPages[].configuration.fields[]`). Unknown `type` values fall back to a plain text ' +
|
|
39
|
+
'input at render time but lose type-aware validation and pickers.',
|
|
40
|
+
scope: 'context',
|
|
41
|
+
baseKeys: [...BASE_FIELD_KEYS],
|
|
42
|
+
fieldTypes: CONTEXT_FIELD_TYPES,
|
|
43
|
+
aliases: { ...CONTEXT_FIELD_TYPE_ALIASES },
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function renderContextTable(schema) {
|
|
47
|
+
const lines = [];
|
|
48
|
+
lines.push(schema.description);
|
|
49
|
+
lines.push(`(${schema.fieldTypes.length} valid field types)`);
|
|
50
|
+
lines.push('');
|
|
51
|
+
lines.push(`Base keys (every field): ${schema.baseKeys.join(', ')}`);
|
|
52
|
+
lines.push('');
|
|
53
|
+
lines.push('Field types:');
|
|
54
|
+
for (const t of schema.fieldTypes) {
|
|
55
|
+
const extras = t.extraKeys?.length ? ` [+ ${t.extraKeys.join(', ')}]` : '';
|
|
56
|
+
lines.push(` - ${t.value}${extras}`);
|
|
57
|
+
lines.push(` ${t.description}`);
|
|
58
|
+
if (t.example) {
|
|
59
|
+
lines.push(` example: ${JSON.stringify(t.example)}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const aliasEntries = Object.entries(schema.aliases);
|
|
63
|
+
if (aliasEntries.length > 0) {
|
|
64
|
+
lines.push('');
|
|
65
|
+
lines.push('Legacy aliases (accepted but prefer the canonical name):');
|
|
66
|
+
for (const [alias, canonical] of aliasEntries) {
|
|
67
|
+
lines.push(` - ${alias} → ${canonical}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return lines.join('\n');
|
|
71
|
+
}
|
|
34
72
|
export function registerSchemaCommand(program) {
|
|
35
73
|
program
|
|
36
74
|
.command('schema')
|
|
37
|
-
.description('Show the canonical PipelineStep field schema
|
|
75
|
+
.description('Show the canonical PipelineStep field schema, or the context/input-page field schema with --context.')
|
|
38
76
|
.option('--step-type <type>', 'Filter fields applicable to this step type (trigger, appAction, aiAction, code, …)')
|
|
77
|
+
.option('--context', 'Show the context / input-page field schema (pipeline.context.*.fields[].type) instead of the step schema')
|
|
39
78
|
.option('--format <format>', 'Output format: json (default), table, minimal', 'json')
|
|
40
79
|
.action(async (opts) => {
|
|
41
80
|
try {
|
|
81
|
+
const format = opts.format;
|
|
82
|
+
if (opts.context) {
|
|
83
|
+
const ctx = buildContextSchema();
|
|
84
|
+
if (format === 'table' || format === 'minimal') {
|
|
85
|
+
console.log(renderContextTable(ctx));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
printOutput(ctx, format);
|
|
89
|
+
}
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
42
92
|
const client = new AgentledClient();
|
|
43
93
|
const schema = await client.getStepSchema();
|
|
44
94
|
const filtered = opts.stepType ? filterByStepType(schema, opts.stepType) : schema;
|
|
45
|
-
const format = opts.format;
|
|
46
95
|
if (format === 'table' || format === 'minimal') {
|
|
47
96
|
console.log(renderTable(filtered));
|
|
48
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAY/B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAgB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentled tools builtins` — list the builtin tools accepted by
|
|
3
|
+
* `aiActionWithTools` steps (`tools[].builtinType` values).
|
|
4
|
+
*
|
|
5
|
+
* The canonical source is the `Tool.builtinType` union in
|
|
6
|
+
* `shared/types/pipeline/PipelineTypes.ts`; the CLI ships a mirror at
|
|
7
|
+
* `src/builtin-tools-catalog.ts` (drift-tested).
|
|
8
|
+
*/
|
|
9
|
+
import { Command } from 'commander';
|
|
10
|
+
export declare function registerToolsCommands(program: Command): void;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import { BUILTIN_TOOLS_CATALOG } from '../builtin-tools-catalog.js';
|
|
3
|
+
import { printOutput } from '../utils/output.js';
|
|
4
|
+
function renderTable() {
|
|
5
|
+
const lines = [];
|
|
6
|
+
lines.push(`Builtin tools for \`aiActionWithTools\` steps (${BUILTIN_TOOLS_CATALOG.length} total):`);
|
|
7
|
+
lines.push('');
|
|
8
|
+
for (const t of BUILTIN_TOOLS_CATALOG) {
|
|
9
|
+
const providers = t.providers.join(', ');
|
|
10
|
+
const credits = t.typicalCreditsPerCall ? ` (~${t.typicalCreditsPerCall} credits/call)` : '';
|
|
11
|
+
lines.push(` - ${t.value} [providers: ${providers}]${credits}`);
|
|
12
|
+
lines.push(` ${t.description}`);
|
|
13
|
+
if (t.extraKeys?.length) {
|
|
14
|
+
lines.push(` extra keys: ${t.extraKeys.join(', ')}`);
|
|
15
|
+
}
|
|
16
|
+
lines.push(` example: ${JSON.stringify(t.example)}`);
|
|
17
|
+
}
|
|
18
|
+
lines.push('');
|
|
19
|
+
lines.push('Usage on a step:');
|
|
20
|
+
lines.push(' {');
|
|
21
|
+
lines.push(' "id": "analyze",');
|
|
22
|
+
lines.push(' "type": "aiActionWithTools",');
|
|
23
|
+
lines.push(' "name": "Analyze with tools",');
|
|
24
|
+
lines.push(' "tools": [');
|
|
25
|
+
lines.push(' { "type": "builtin", "name": "web_search", "builtinType": "web_search" },');
|
|
26
|
+
lines.push(' { "type": "builtin", "name": "workspace_memory", "builtinType": "workspace_memory" }');
|
|
27
|
+
lines.push(' ],');
|
|
28
|
+
lines.push(' "pipelineStepPrompt": { "template": "…", "responseStructure": { … } },');
|
|
29
|
+
lines.push(' "creditCost": 10,');
|
|
30
|
+
lines.push(' "next": { "stepId": "…" }');
|
|
31
|
+
lines.push(' }');
|
|
32
|
+
lines.push('');
|
|
33
|
+
lines.push('Scaffold: `agentled workflows scaffold ai-with-tools`');
|
|
34
|
+
return lines.join('\n');
|
|
35
|
+
}
|
|
36
|
+
export function registerToolsCommands(program) {
|
|
37
|
+
const tools = program
|
|
38
|
+
.command('tools')
|
|
39
|
+
.description('Discover runtime tools (e.g. builtin tools for aiActionWithTools).');
|
|
40
|
+
tools
|
|
41
|
+
.command('builtins')
|
|
42
|
+
.description('List builtin tools (`tools[].builtinType`) accepted by aiActionWithTools steps.')
|
|
43
|
+
.option('--format <format>', 'Output format: table (default), json', 'table')
|
|
44
|
+
.action((opts) => {
|
|
45
|
+
const format = opts.format;
|
|
46
|
+
if (format === 'json' || format === 'minimal') {
|
|
47
|
+
printOutput({ builtinTools: BUILTIN_TOOLS_CATALOG }, format);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
console.log(renderTable());
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAY/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAgB,MAAM,oBAAoB,CAAC;AAE/D,SAAS,WAAW;IAChB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,kDAAkD,qBAAqB,CAAC,MAAM,UAAU,CAAC,CAAC;IACrG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,qBAAqB,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,qBAAqB,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,gBAAgB,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;IACzG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,KAAK,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IACzF,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACpE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IAClD,MAAM,KAAK,GAAG,OAAO;SAChB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,oEAAoE,CAAC,CAAC;IAEvF,KAAK;SACA,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,iFAAiF,CAAC;SAC9F,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,EAAE,OAAO,CAAC;SAC5E,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,MAAsB,CAAC;QAC3C,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,WAAW,CAAC,EAAE,YAAY,EAAE,qBAAqB,EAAE,EAAE,MAAM,CAAC,CAAC;YAC7D,OAAO;QACX,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context / input-page field schema catalog.
|
|
3
|
+
*
|
|
4
|
+
* Canonical source: `ExecutionInputFieldType` enum + `ExecutionInputField`
|
|
5
|
+
* interface in `shared/types/pipeline/PipelineTypes.ts`. This file is the
|
|
6
|
+
* CLI-distributable mirror — drift is guarded by
|
|
7
|
+
* `agentled-mcp-server/__tests__/context-field-types.test.ts`.
|
|
8
|
+
*
|
|
9
|
+
* Why a mirror and not an import: the CLI is published to npm and can't
|
|
10
|
+
* pull in the whole frontend build graph at install time. The drift test
|
|
11
|
+
* fails CI if this file disagrees with the enum, so it cannot rot silently.
|
|
12
|
+
*/
|
|
13
|
+
export interface ContextFieldTypeDoc {
|
|
14
|
+
/** Wire value — what an agent writes into `field.type`. */
|
|
15
|
+
value: string;
|
|
16
|
+
/** One-line description of what the UI renders. */
|
|
17
|
+
description: string;
|
|
18
|
+
/** Extra config keys the type reads beyond the base set. */
|
|
19
|
+
extraKeys?: string[];
|
|
20
|
+
/** Tiny example fragment for the quick-start. */
|
|
21
|
+
example?: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Base keys every field supports regardless of `type`.
|
|
25
|
+
*/
|
|
26
|
+
export declare const BASE_FIELD_KEYS: readonly ["name", "label", "type", "description", "placeholder", "required", "defaultValue", "suggestions", "addSeparatorAfter"];
|
|
27
|
+
export declare const CONTEXT_FIELD_TYPES: ContextFieldTypeDoc[];
|
|
28
|
+
export declare const VALID_CONTEXT_FIELD_TYPE_VALUES: Set<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Aliases the runtime accepts but the canonical name should be used going forward.
|
|
31
|
+
* Keyed by the alias, value is the canonical name.
|
|
32
|
+
*/
|
|
33
|
+
export declare const CONTEXT_FIELD_TYPE_ALIASES: Record<string, string>;
|
|
34
|
+
/**
|
|
35
|
+
* Heuristic "did you mean" for the most common invented / typo'd field types.
|
|
36
|
+
*/
|
|
37
|
+
export declare function suggestContextFieldTypeFix(invalid: string): string | undefined;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context / input-page field schema catalog.
|
|
3
|
+
*
|
|
4
|
+
* Canonical source: `ExecutionInputFieldType` enum + `ExecutionInputField`
|
|
5
|
+
* interface in `shared/types/pipeline/PipelineTypes.ts`. This file is the
|
|
6
|
+
* CLI-distributable mirror — drift is guarded by
|
|
7
|
+
* `agentled-mcp-server/__tests__/context-field-types.test.ts`.
|
|
8
|
+
*
|
|
9
|
+
* Why a mirror and not an import: the CLI is published to npm and can't
|
|
10
|
+
* pull in the whole frontend build graph at install time. The drift test
|
|
11
|
+
* fails CI if this file disagrees with the enum, so it cannot rot silently.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Base keys every field supports regardless of `type`.
|
|
15
|
+
*/
|
|
16
|
+
export const BASE_FIELD_KEYS = [
|
|
17
|
+
'name',
|
|
18
|
+
'label',
|
|
19
|
+
'type',
|
|
20
|
+
'description',
|
|
21
|
+
'placeholder',
|
|
22
|
+
'required',
|
|
23
|
+
'defaultValue',
|
|
24
|
+
'suggestions',
|
|
25
|
+
'addSeparatorAfter',
|
|
26
|
+
];
|
|
27
|
+
export const CONTEXT_FIELD_TYPES = [
|
|
28
|
+
{ value: 'text', description: 'Single-line text input.' },
|
|
29
|
+
{ value: 'textarea', description: 'Multi-line plain-text input.' },
|
|
30
|
+
{ value: 'html', description: 'Rich-text / HTML editor.' },
|
|
31
|
+
{ value: 'email', description: 'Email-formatted text input (validation on blur).' },
|
|
32
|
+
{ value: 'url', description: 'URL-formatted text input.' },
|
|
33
|
+
{ value: 'Numeric', description: 'Numeric field — text input that coerces to number on blur.' },
|
|
34
|
+
{ value: 'boolean', description: 'Checkbox / toggle.' },
|
|
35
|
+
{ value: 'date', description: 'Date picker.' },
|
|
36
|
+
{ value: 'datetime', description: 'Date + time picker.' },
|
|
37
|
+
{ value: 'time', description: 'Time-of-day picker.' },
|
|
38
|
+
{ value: 'color_picker', description: 'Color picker (hex/rgb).' },
|
|
39
|
+
{
|
|
40
|
+
value: 'select',
|
|
41
|
+
description: 'Single-choice dropdown.',
|
|
42
|
+
extraKeys: ['options', 'allowCustomValues'],
|
|
43
|
+
example: { options: [{ label: 'Hot', value: 'hot' }, { label: 'Cold', value: 'cold' }] },
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
value: 'multiselect',
|
|
47
|
+
description: 'Multi-choice dropdown.',
|
|
48
|
+
extraKeys: ['options', 'allowCustomValues'],
|
|
49
|
+
example: { options: [{ label: 'US', value: 'us' }, { label: 'EU', value: 'eu' }] },
|
|
50
|
+
},
|
|
51
|
+
{ value: 'company_offering_select', description: 'Picker populated from the workspace\'s configured offerings.' },
|
|
52
|
+
{ value: 'country_select', description: 'Country picker (ISO codes).' },
|
|
53
|
+
{ value: 'single_file_upload', description: 'Single file upload. Legacy `file` is also accepted as an alias.' },
|
|
54
|
+
{ value: 'multiple_file_upload', description: 'Multi-file upload.' },
|
|
55
|
+
{
|
|
56
|
+
value: 'list',
|
|
57
|
+
description: 'Repeatable sub-form — user adds/removes rows of sub-fields.',
|
|
58
|
+
extraKeys: ['itemFields'],
|
|
59
|
+
example: { itemFields: [{ name: 'email', label: 'Email', type: 'email' }] },
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
value: 'connected_emails_selector_single',
|
|
63
|
+
description: 'Picker of one email account the user has connected (Gmail / Outlook / …).',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
value: 'connected_emails_selector_multiple',
|
|
67
|
+
description: 'Picker of multiple connected email accounts — used in `outreachProfile` input pages.',
|
|
68
|
+
},
|
|
69
|
+
{ value: 'json', description: 'JSON data (object/array or JSON string). Use instead of legacy `object` type.' },
|
|
70
|
+
];
|
|
71
|
+
export const VALID_CONTEXT_FIELD_TYPE_VALUES = new Set(CONTEXT_FIELD_TYPES.map(t => t.value));
|
|
72
|
+
/**
|
|
73
|
+
* Aliases the runtime accepts but the canonical name should be used going forward.
|
|
74
|
+
* Keyed by the alias, value is the canonical name.
|
|
75
|
+
*/
|
|
76
|
+
export const CONTEXT_FIELD_TYPE_ALIASES = {
|
|
77
|
+
file: 'single_file_upload',
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Heuristic "did you mean" for the most common invented / typo'd field types.
|
|
81
|
+
*/
|
|
82
|
+
export function suggestContextFieldTypeFix(invalid) {
|
|
83
|
+
const v = invalid.toLowerCase();
|
|
84
|
+
const exactAlias = CONTEXT_FIELD_TYPE_ALIASES[v];
|
|
85
|
+
if (exactAlias)
|
|
86
|
+
return `Use \`${exactAlias}\` (the canonical name — \`${invalid}\` is a legacy alias and won't receive new features).`;
|
|
87
|
+
const heuristics = {
|
|
88
|
+
'multi-select': 'Use `multiselect` (no hyphen).',
|
|
89
|
+
'multi_select': 'Use `multiselect` (no underscore).',
|
|
90
|
+
'dropdown': 'Use `select` (single choice) or `multiselect` (multiple choices).',
|
|
91
|
+
'number': 'Use `Numeric` — capital N, legacy quirk.',
|
|
92
|
+
'numeric': 'Use `Numeric` — the type value is capitalised.',
|
|
93
|
+
'emails': 'Use `connected_emails_selector_multiple` (if picking from connected accounts) or `list` with `itemFields: [{ type: "email" }]`.',
|
|
94
|
+
'email_list': 'Use `connected_emails_selector_multiple` or `list` with `itemFields: [{ type: "email" }]`.',
|
|
95
|
+
'checkbox': 'Use `boolean`.',
|
|
96
|
+
'toggle': 'Use `boolean`.',
|
|
97
|
+
'rich_text': 'Use `html`.',
|
|
98
|
+
'rich-text': 'Use `html`.',
|
|
99
|
+
'long_text': 'Use `textarea`.',
|
|
100
|
+
'long-text': 'Use `textarea`.',
|
|
101
|
+
'country': 'Use `country_select`.',
|
|
102
|
+
'color': 'Use `color_picker`.',
|
|
103
|
+
'files': 'Use `multiple_file_upload`.',
|
|
104
|
+
'object': 'Use `json` (preferred) — legacy `object` type is being phased out.',
|
|
105
|
+
};
|
|
106
|
+
return heuristics[v];
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=context-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-schema.js","sourceRoot":"","sources":["../src/context-schema.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -27,6 +27,7 @@ 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';
|
|
30
31
|
const require = createRequire(import.meta.url);
|
|
31
32
|
const { version } = require('../package.json');
|
|
32
33
|
const program = new Command();
|
|
@@ -55,5 +56,6 @@ registerOnboardingCommands(program);
|
|
|
55
56
|
registerSkillsCommands(program);
|
|
56
57
|
registerSchemaCommand(program);
|
|
57
58
|
registerExamplesCommand(program);
|
|
59
|
+
registerToolsCommands(program);
|
|
58
60
|
program.parse();
|
|
59
61
|
//# 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":";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;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,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;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAE/B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -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 |
|