@agentled/cli 0.6.5 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/commands/auth.js +18 -0
  2. package/dist/commands/auth.js.map +1 -1
  3. package/dist/commands/dryrun.d.ts +23 -0
  4. package/dist/commands/dryrun.js +641 -0
  5. package/dist/commands/dryrun.js.map +1 -0
  6. package/dist/commands/fixture.d.ts +10 -0
  7. package/dist/commands/fixture.js +155 -0
  8. package/dist/commands/fixture.js.map +1 -0
  9. package/dist/commands/group-manifest.d.ts +15 -0
  10. package/dist/commands/group-manifest.js +488 -0
  11. package/dist/commands/group-manifest.js.map +1 -0
  12. package/dist/commands/init.d.ts +17 -0
  13. package/dist/commands/init.js +83 -0
  14. package/dist/commands/init.js.map +1 -0
  15. package/dist/commands/onboarding.js +70 -3
  16. package/dist/commands/onboarding.js.map +1 -1
  17. package/dist/commands/test.d.ts +15 -0
  18. package/dist/commands/test.js +98 -0
  19. package/dist/commands/test.js.map +1 -0
  20. package/dist/commands/workflows.js +104 -0
  21. package/dist/commands/workflows.js.map +1 -1
  22. package/dist/commands/workspace.js +65 -0
  23. package/dist/commands/workspace.js.map +1 -1
  24. package/dist/context-schema.js +3 -4
  25. package/dist/context-schema.js.map +1 -1
  26. package/dist/index.js +10 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/utils/browser-auth.js +6 -2
  29. package/dist/utils/browser-auth.js.map +1 -1
  30. package/dist/utils/pipeline-lint.d.ts +20 -0
  31. package/dist/utils/pipeline-lint.js +348 -0
  32. package/dist/utils/pipeline-lint.js.map +1 -0
  33. package/dist/utils/preflight.js +1 -1
  34. package/dist/utils/test-runner.d.ts +85 -0
  35. package/dist/utils/test-runner.js +283 -0
  36. package/dist/utils/test-runner.js.map +1 -0
  37. package/dist/utils/workspace-folder.d.ts +46 -0
  38. package/dist/utils/workspace-folder.js +340 -0
  39. package/dist/utils/workspace-folder.js.map +1 -0
  40. package/package.json +1 -1
  41. package/patterns/v1/12-event-driven-workflow-groups.md +288 -0
  42. package/scaffolds/extract-threshold-alert.json +3 -3
  43. package/skills/agentled/SKILL.md +101 -25
  44. package/skills/agentled/WHY-AGENTLED.md +15 -0
@@ -30,7 +30,7 @@ export const CONTEXT_FIELD_TYPES = [
30
30
  { value: 'html', description: 'Rich-text / HTML editor.' },
31
31
  { value: 'email', description: 'Email-formatted text input (validation on blur).' },
32
32
  { value: 'url', description: 'URL-formatted text input.' },
33
- { value: 'Numeric', description: 'Numeric field — text input that coerces to number on blur.' },
33
+ { value: 'numeric', description: 'Numeric field — text input that coerces to number on blur.' },
34
34
  { value: 'boolean', description: 'Checkbox / toggle.' },
35
35
  { value: 'date', description: 'Date picker.' },
36
36
  { value: 'datetime', description: 'Date + time picker.' },
@@ -48,7 +48,6 @@ export const CONTEXT_FIELD_TYPES = [
48
48
  extraKeys: ['options', 'allowCustomValues'],
49
49
  example: { options: [{ label: 'US', value: 'us' }, { label: 'EU', value: 'eu' }] },
50
50
  },
51
- { value: 'company_offering_select', description: 'Picker populated from the workspace\'s configured offerings.' },
52
51
  { value: 'country_select', description: 'Country picker (ISO codes).' },
53
52
  { value: 'single_file_upload', description: 'Single file upload. Legacy `file` is also accepted as an alias.' },
54
53
  { value: 'multiple_file_upload', description: 'Multi-file upload.' },
@@ -88,8 +87,8 @@ export function suggestContextFieldTypeFix(invalid) {
88
87
  'multi-select': 'Use `multiselect` (no hyphen).',
89
88
  'multi_select': 'Use `multiselect` (no underscore).',
90
89
  '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.',
90
+ 'number': 'Use `numeric`.',
91
+ 'numeric': 'Use `numeric`.',
93
92
  'emails': 'Use `connected_emails_selector_multiple` (if picking from connected accounts) or `list` with `itemFields: [{ type: "email" }]`.',
94
93
  'email_list': 'Use `connected_emails_selector_multiple` or `list` with `itemFields: [{ type: "email" }]`.',
95
94
  'checkbox': 'Use `boolean`.',
@@ -1 +1 @@
1
- {"version":3,"file":"context-schema.js","sourceRoot":"","sources":["../src/context-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-schema.js","sourceRoot":"","sources":["../src/context-schema.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -36,6 +36,11 @@ import { registerIntentCommands } from './commands/intent.js';
36
36
  import { registerProactiveAgentCommands } from './commands/proactive-agents.js';
37
37
  import { registerModelCommands } from './commands/models.js';
38
38
  import { registerRoutineCommands } from './commands/routines.js';
39
+ import { registerGroupManifestCommands } from './commands/group-manifest.js';
40
+ import { registerInitCommand } from './commands/init.js';
41
+ import { registerFixtureCommands } from './commands/fixture.js';
42
+ import { registerTestCommand } from './commands/test.js';
43
+ import { registerDryRunCommand } from './commands/dryrun.js';
39
44
  import { checkForUpdate, printUpdateNotice } from './update-check.js';
40
45
  const require = createRequire(import.meta.url);
41
46
  const { version } = require('../package.json');
@@ -86,6 +91,11 @@ registerIntentCommands(program);
86
91
  registerProactiveAgentCommands(program);
87
92
  registerModelCommands(program);
88
93
  registerRoutineCommands(program);
94
+ registerGroupManifestCommands(program);
95
+ registerInitCommand(program);
96
+ registerFixtureCommands(program);
97
+ registerTestCommand(program);
98
+ registerDryRunCommand(program);
89
99
  await program.parseAsync();
90
100
  await updatePromise;
91
101
  //# 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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -70,8 +70,12 @@ const SUCCESS_HTML = `<!DOCTYPE html>
70
70
  <div style="width: 48px; height: 48px; margin: 0 auto 1rem; background: #d1fae5; border-radius: 50%; display: flex; align-items: center; justify-content: center;">
71
71
  <svg width="24" height="24" fill="none" viewBox="0 0 24 24" stroke="#059669" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"/></svg>
72
72
  </div>
73
- <h1 style="font-size: 1.25rem; font-weight: 600; color: #111827; margin: 0 0 0.5rem;">Authentication Successful</h1>
74
- <p style="color: #6b7280; font-size: 0.875rem;">You can close this tab and return to the CLI.</p>
73
+ <h1 style="font-size: 1.25rem; font-weight: 600; color: #111827; margin: 0 0 0.5rem;">Connected</h1>
74
+ <p style="color: #6b7280; font-size: 0.875rem; margin: 0 0 1rem;">You can close this tab and go back to your terminal — the CLI is connected and ready to use.</p>
75
+ <div style="background: #f3f4f6; border: 1px solid #e5e7eb; border-radius: 6px; padding: 0.75rem; text-align: left; max-width: 360px; margin: 0 auto; font-size: 0.8125rem; color: #374151;">
76
+ <strong style="color: #111827; display: block; margin-bottom: 0.25rem;">Next step</strong>
77
+ Return to your command line — your CLI session is now authenticated. Run <code style="background:#e5e7eb;padding:1px 4px;border-radius:3px;font-family:ui-monospace,Menlo,monospace;">agentled auth status</code> to confirm.<br><br><strong style="color:#111827;">Then restart your MCP client</strong> (Claude Code / Codex / Cursor) so it picks up this workspace — until you do, MCP tools stay on the previous workspace.
78
+ </div>
75
79
  </div>
76
80
  </body>
77
81
  </html>`;
@@ -1 +1 @@
1
- {"version":3,"file":"browser-auth.js","sourceRoot":"","sources":["../../src/utils/browser-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-auth.js","sourceRoot":"","sources":["../../src/utils/browser-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Pipeline lint rules — static gotcha checks for pipeline JSON.
3
+ *
4
+ * Catches documented failure modes that pass JSON syntax validation but
5
+ * silently misbehave at runtime. Run before `workflows validate` to skip
6
+ * the API round-trip for the most common authoring mistakes.
7
+ *
8
+ * See docs/GOTCHAS.md (also embedded in workspace-folder.ts) for the full
9
+ * write-up of each rule.
10
+ */
11
+ export interface LintIssue {
12
+ severity: 'error' | 'warning';
13
+ code: string;
14
+ message: string;
15
+ stepId?: string;
16
+ hint?: string;
17
+ }
18
+ type Pipeline = Record<string, unknown>;
19
+ export declare function lintPipeline(pipeline: Pipeline): LintIssue[];
20
+ export {};
@@ -0,0 +1,348 @@
1
+ /**
2
+ * Pipeline lint rules — static gotcha checks for pipeline JSON.
3
+ *
4
+ * Catches documented failure modes that pass JSON syntax validation but
5
+ * silently misbehave at runtime. Run before `workflows validate` to skip
6
+ * the API round-trip for the most common authoring mistakes.
7
+ *
8
+ * See docs/GOTCHAS.md (also embedded in workspace-folder.ts) for the full
9
+ * write-up of each rule.
10
+ */
11
+ function steps(pipeline) {
12
+ const s = pipeline.steps;
13
+ return Array.isArray(s) ? s : [];
14
+ }
15
+ function str(v) {
16
+ return typeof v === 'string' ? v : JSON.stringify(v ?? '');
17
+ }
18
+ function stepLabel(step) {
19
+ return String(step.id ?? step.name ?? '?');
20
+ }
21
+ // ---------------------------------------------------------------------------
22
+ // Rules
23
+ // ---------------------------------------------------------------------------
24
+ function ruleConditionsVsCriteria(pipeline) {
25
+ const issues = [];
26
+ for (const step of steps(pipeline)) {
27
+ const ec = step.entryConditions;
28
+ if (ec && 'conditions' in ec) {
29
+ issues.push({
30
+ severity: 'error',
31
+ code: 'CRITERIA_NOT_CONDITIONS',
32
+ stepId: stepLabel(step),
33
+ message: 'entryConditions uses "conditions" — must be "criteria".',
34
+ hint: 'Rename. The executor reads entryConditions.criteria; "conditions" is silently ignored.',
35
+ });
36
+ }
37
+ }
38
+ return issues;
39
+ }
40
+ function ruleVariableVsField(pipeline) {
41
+ const issues = [];
42
+ for (const step of steps(pipeline)) {
43
+ const ec = step.entryConditions;
44
+ const criteria = ec?.criteria;
45
+ if (!Array.isArray(criteria))
46
+ continue;
47
+ for (const criterion of criteria) {
48
+ if ('field' in criterion && !('variable' in criterion)) {
49
+ issues.push({
50
+ severity: 'error',
51
+ code: 'VARIABLE_NOT_FIELD',
52
+ stepId: stepLabel(step),
53
+ message: 'entryConditions.criteria item uses "field" — must be "variable".',
54
+ hint: 'Using "field" causes the condition to be silently skipped.',
55
+ });
56
+ break;
57
+ }
58
+ }
59
+ }
60
+ return issues;
61
+ }
62
+ function ruleGmailLabelId(pipeline) {
63
+ const issues = [];
64
+ for (const step of steps(pipeline)) {
65
+ const app = step.app;
66
+ if (!app)
67
+ continue;
68
+ const actionId = String(app.actionId ?? '');
69
+ if (!actionId.toUpperCase().includes('ADD_LABEL'))
70
+ continue;
71
+ const inputs = step.stepInputData;
72
+ const labelId = str(inputs?.label_id ?? '');
73
+ if (!labelId)
74
+ continue;
75
+ const isTemplate = labelId.includes('{{');
76
+ const isInternalId = /^Label_/.test(labelId);
77
+ if (!isTemplate && !isInternalId) {
78
+ issues.push({
79
+ severity: 'error',
80
+ code: 'GMAIL_LABEL_DISPLAY_NAME',
81
+ stepId: stepLabel(step),
82
+ message: `GMAIL_ADD_LABEL.label_id is "${labelId}" — Gmail API requires the internal Label_XXXX ID, not a display name.`,
83
+ hint: 'Use {{steps.ensure-label.id}} resolved from a GMAIL_CREATE_LABEL step.',
84
+ });
85
+ }
86
+ }
87
+ return issues;
88
+ }
89
+ function ruleAiWithToolsNeedsTools(pipeline) {
90
+ const issues = [];
91
+ for (const step of steps(pipeline)) {
92
+ if (step.type !== 'aiActionWithTools')
93
+ continue;
94
+ const stepTools = step.tools;
95
+ const agentTools = step.agent?.tools;
96
+ const hasTools = (Array.isArray(stepTools) && stepTools.length > 0)
97
+ || (Array.isArray(agentTools) && agentTools.length > 0);
98
+ if (!hasTools) {
99
+ issues.push({
100
+ severity: 'error',
101
+ code: 'AI_STEP_TOOLS_REQUIRED',
102
+ stepId: stepLabel(step),
103
+ message: 'aiActionWithTools step has no tools in step.tools or step.agent.tools.',
104
+ hint: 'Add at least one tool, e.g. { type: "builtin", builtinType: "web_search", name: "Web Search" }',
105
+ });
106
+ }
107
+ }
108
+ return issues;
109
+ }
110
+ function ruleEmailStepShape(pipeline) {
111
+ const issues = [];
112
+ for (const step of steps(pipeline)) {
113
+ if (step.type !== 'aiAction')
114
+ continue;
115
+ const prompt = step.pipelineStepPrompt;
116
+ if (!prompt)
117
+ continue;
118
+ const rendererType = step.renderer?.type;
119
+ const promptType = prompt.type;
120
+ const hasEmailInResponse = 'email' in (prompt.responseStructure ?? {});
121
+ const isEmailStep = rendererType === 'Email' || promptType === 'email' || hasEmailInResponse;
122
+ if (!isEmailStep)
123
+ continue;
124
+ if (promptType !== 'email') {
125
+ issues.push({
126
+ severity: 'error',
127
+ code: 'EMAIL_MISSING_PROMPT_TYPE',
128
+ stepId: stepLabel(step),
129
+ message: 'Email aiAction step is missing pipelineStepPrompt.type: "email".',
130
+ hint: 'Add type: "email" — the system needs this to route the step correctly.',
131
+ });
132
+ }
133
+ const onApproval = step.onApproval;
134
+ if (!onApproval || onApproval.action !== 'schedule-email') {
135
+ issues.push({
136
+ severity: 'error',
137
+ code: 'EMAIL_MISSING_SCHEDULE_ACTION',
138
+ stepId: stepLabel(step),
139
+ message: 'Email step is missing onApproval.action: "schedule-email" — email will never actually send.',
140
+ hint: 'Add onApproval: { action: "schedule-email", executedText: "...", failedText: "..." }',
141
+ });
142
+ }
143
+ const inputPages = pipeline.context?.inputPages ?? [];
144
+ const hasOutreachProfile = inputPages.some((page) => {
145
+ const p = page;
146
+ return p.pathname === 'outreach-profile'
147
+ || p.configuration?.contextKey === 'outreachProfile';
148
+ });
149
+ if (!hasOutreachProfile) {
150
+ issues.push({
151
+ severity: 'warning',
152
+ code: 'EMAIL_MISSING_OUTREACH_PROFILE',
153
+ stepId: stepLabel(step),
154
+ message: 'Email step found but no outreachProfile input page in context.inputPages.',
155
+ hint: 'Add an outreachProfile input page so users can configure sender name, from address, etc.',
156
+ });
157
+ }
158
+ }
159
+ return issues;
160
+ }
161
+ function ruleLoopConfigOnlyFirst(pipeline) {
162
+ const issues = [];
163
+ const allSteps = steps(pipeline);
164
+ const nextMap = new Map();
165
+ for (const step of allSteps) {
166
+ const id = String(step.id ?? '');
167
+ const next = step.next?.stepId;
168
+ if (id && typeof next === 'string')
169
+ nextMap.set(id, next);
170
+ }
171
+ const stepById = new Map(allSteps.map((s) => [String(s.id ?? ''), s]));
172
+ const loopStartIds = new Set();
173
+ for (const step of allSteps)
174
+ if (step.loopConfig)
175
+ loopStartIds.add(String(step.id ?? ''));
176
+ for (const loopStartId of loopStartIds) {
177
+ let cursor = nextMap.get(loopStartId);
178
+ let depth = 0;
179
+ while (cursor && depth < 50) {
180
+ const s = stepById.get(cursor);
181
+ if (!s)
182
+ break;
183
+ if (s.loopConfig && String(s.id) !== loopStartId) {
184
+ issues.push({
185
+ severity: 'warning',
186
+ code: 'LOOP_CONFIG_MULTIPLE_STEPS',
187
+ stepId: String(s.id ?? ''),
188
+ message: `Step has loopConfig but a preceding step "${loopStartId}" also has loopConfig.`,
189
+ hint: 'Only the first step in the loop chain should have loopConfig.',
190
+ });
191
+ }
192
+ cursor = nextMap.get(cursor);
193
+ depth++;
194
+ }
195
+ }
196
+ return issues;
197
+ }
198
+ function ruleRawInputToSearch(pipeline) {
199
+ const issues = [];
200
+ const SEARCH_ACTIONS = ['google_search', 'search', 'web_search', 'searchCompanies', 'search-companies'];
201
+ for (const step of steps(pipeline)) {
202
+ if (step.type !== 'appAction')
203
+ continue;
204
+ const app = step.app;
205
+ if (!app)
206
+ continue;
207
+ const actionId = String(app.actionId ?? '');
208
+ const isSearchAction = SEARCH_ACTIONS.some((s) => actionId.toLowerCase().includes(s.toLowerCase()));
209
+ if (!isSearchAction)
210
+ continue;
211
+ const inputs = step.stepInputData;
212
+ if (!inputs)
213
+ continue;
214
+ for (const [key, val] of Object.entries(inputs)) {
215
+ const valStr = str(val);
216
+ if (/^\{\{input\.[^}]+\}\}$/.test(valStr.trim()) && ['query', 'q', 'searchQuery', 'keyword'].includes(key)) {
217
+ issues.push({
218
+ severity: 'warning',
219
+ code: 'RAW_INPUT_TO_SEARCH',
220
+ stepId: stepLabel(step),
221
+ message: `Search action "${actionId}" receives raw ${valStr} as ${key}.`,
222
+ hint: 'Add an aiAction step before to generate optimized search queries.',
223
+ });
224
+ }
225
+ }
226
+ }
227
+ return issues;
228
+ }
229
+ function ruleChildWorkflowMilestone(pipeline) {
230
+ const issues = [];
231
+ const ctx = pipeline.context;
232
+ const cfg = ctx?.executionInputConfig;
233
+ const isInternal = cfg?.internal === true;
234
+ if (!isInternal)
235
+ return issues;
236
+ const hasReturn = steps(pipeline).some((s) => s.type === 'return');
237
+ const hasMilestone = steps(pipeline).some((s) => s.type === 'milestone');
238
+ if (!hasReturn && hasMilestone) {
239
+ issues.push({
240
+ severity: 'warning',
241
+ code: 'CHILD_WORKFLOW_NO_RETURN',
242
+ message: 'Workflow is marked internal:true (child) but uses milestone instead of return as terminal step.',
243
+ hint: 'Replace the milestone step with type: "return" + returnConfig.fields so the parent gets outputs.',
244
+ });
245
+ }
246
+ return issues;
247
+ }
248
+ function ruleModelIdFormat(pipeline) {
249
+ const issues = [];
250
+ const BAD_PATTERNS = [
251
+ { pattern: /claude-sonnet-4-6/, suggest: 'claude-4-6-sonnet' },
252
+ { pattern: /claude-opus-4-7/, suggest: 'claude-4-7-opus' },
253
+ { pattern: /claude-haiku-4-5/, suggest: 'claude-4-5-haiku' },
254
+ ];
255
+ const json = JSON.stringify(pipeline ?? '');
256
+ for (const { pattern, suggest } of BAD_PATTERNS) {
257
+ if (pattern.test(json)) {
258
+ issues.push({
259
+ severity: 'warning',
260
+ code: 'MODEL_ID_FORMAT',
261
+ message: `Found model ID matching "${pattern.source}" — Agentled uses internal IDs, not Anthropic format.`,
262
+ hint: `Run "agentled models list" for valid IDs. Likely correct: "${suggest}".`,
263
+ });
264
+ }
265
+ }
266
+ return issues;
267
+ }
268
+ function ruleActionIdFormat(pipeline) {
269
+ const issues = [];
270
+ for (const step of steps(pipeline)) {
271
+ if (step.type !== 'appAction')
272
+ continue;
273
+ const app = step.app;
274
+ if (!app)
275
+ continue;
276
+ if (String(app.source ?? '') !== 'native')
277
+ continue;
278
+ const appId = String(app.id ?? '');
279
+ const actionId = String(app.actionId ?? '');
280
+ if (!appId || !actionId)
281
+ continue;
282
+ if (!actionId.includes('.')) {
283
+ issues.push({
284
+ severity: 'warning',
285
+ code: 'ACTION_ID_MISSING_PREFIX',
286
+ stepId: stepLabel(step),
287
+ message: `Native app action "${actionId}" should use format "${appId}.${actionId}".`,
288
+ hint: 'Native app actionId must be prefixed with the appId (e.g. "kg.read-list").',
289
+ });
290
+ }
291
+ }
292
+ return issues;
293
+ }
294
+ function ruleLoopCompletionCriteria(pipeline) {
295
+ const issues = [];
296
+ for (const step of steps(pipeline)) {
297
+ const ec = step.entryConditions;
298
+ const criteria = ec?.criteria;
299
+ if (!Array.isArray(criteria))
300
+ continue;
301
+ for (const criterion of criteria) {
302
+ if (criterion.type !== 'loop_completion')
303
+ continue;
304
+ if (!criterion.stepId) {
305
+ issues.push({
306
+ severity: 'error',
307
+ code: 'LOOP_COMPLETION_MISSING_STEP_ID',
308
+ stepId: stepLabel(step),
309
+ message: 'loop_completion criterion is missing required "stepId" (the loop step to wait for).',
310
+ });
311
+ }
312
+ if (ec?.onCriteriaFail !== 'wait') {
313
+ issues.push({
314
+ severity: 'warning',
315
+ code: 'LOOP_COMPLETION_NOT_WAIT',
316
+ stepId: stepLabel(step),
317
+ message: 'loop_completion criterion should use onCriteriaFail: "wait".',
318
+ hint: 'Without "wait", the step skips instead of blocking until the loop finishes.',
319
+ });
320
+ }
321
+ }
322
+ }
323
+ return issues;
324
+ }
325
+ const RULES = [
326
+ ruleConditionsVsCriteria,
327
+ ruleVariableVsField,
328
+ ruleGmailLabelId,
329
+ ruleAiWithToolsNeedsTools,
330
+ ruleEmailStepShape,
331
+ ruleLoopConfigOnlyFirst,
332
+ ruleRawInputToSearch,
333
+ ruleChildWorkflowMilestone,
334
+ ruleModelIdFormat,
335
+ ruleActionIdFormat,
336
+ ruleLoopCompletionCriteria,
337
+ ];
338
+ export function lintPipeline(pipeline) {
339
+ const allIssues = [];
340
+ for (const rule of RULES) {
341
+ try {
342
+ allIssues.push(...rule(pipeline));
343
+ }
344
+ catch { /* rule threw — skip silently */ }
345
+ }
346
+ return allIssues;
347
+ }
348
+ //# sourceMappingURL=pipeline-lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-lint.js","sourceRoot":"","sources":["../../src/utils/pipeline-lint.ts"],"names":[],"mappings":"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"}
@@ -240,7 +240,7 @@ function checkFieldArray(fields, scope, errors, warnings) {
240
240
  errors.push({
241
241
  severity: 'error', code: 'invalid-input-field-type',
242
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, …',
243
+ suggestedFix: suggestContextFieldTypeFix(f.type) ?? 'Pick one of: text, textarea, select, multiselect, boolean, numeric, email, url, date, datetime, list, connected_emails_selector_multiple, …',
244
244
  });
245
245
  }
246
246
  // Type-specific extra-key checks
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Declarative test runner — runs assertions against captured fixture outputs
3
+ * (zero credits) or live API calls (`--live`, costs credits for AI/app steps).
4
+ *
5
+ * Test file format (tests/<workflowId>.test.json):
6
+ * {
7
+ * "workflowId": "wf_abc",
8
+ * "fixtureExecutionId": "exec_xyz",
9
+ * "steps": [
10
+ * {
11
+ * "stepId": "score-lead",
12
+ * "type": "aiAction",
13
+ * "fixtureSource": "exec_xyz/score-lead",
14
+ * "assertions": [
15
+ * { "verb": "hasKey", "path": "score" },
16
+ * { "verb": "isType", "path": "score", "expect": "number" },
17
+ * { "verb": "inRange", "path": "score", "min": 0, "max": 100 },
18
+ * { "verb": "matches", "path": "decision", "pattern": "^(HOT|WARM|COLD)$" }
19
+ * ]
20
+ * }
21
+ * ]
22
+ * }
23
+ *
24
+ * Assertion verbs: hasKey, isType, equals, matches, inRange, hasLength, contains
25
+ */
26
+ export interface Assertion {
27
+ verb: 'hasKey' | 'isType' | 'equals' | 'matches' | 'inRange' | 'hasLength' | 'contains';
28
+ path: string;
29
+ expect?: unknown;
30
+ pattern?: string;
31
+ min?: number;
32
+ max?: number;
33
+ comment?: string;
34
+ }
35
+ export interface StepTest {
36
+ stepId: string;
37
+ type: string;
38
+ description?: string;
39
+ fixtureSource?: string | null;
40
+ skip?: boolean;
41
+ assertions: Assertion[];
42
+ promptTemplate?: string;
43
+ promptVariables?: Record<string, unknown>;
44
+ promptResponseStructure?: Record<string, unknown>;
45
+ codeConfig?: {
46
+ language: string;
47
+ code: string;
48
+ };
49
+ appId?: string;
50
+ actionId?: string;
51
+ appInputs?: Record<string, unknown>;
52
+ liveInputs?: Record<string, unknown>;
53
+ }
54
+ export interface TestFile {
55
+ workflowId: string;
56
+ workflowName?: string;
57
+ description?: string;
58
+ fixtureExecutionId?: string | null;
59
+ steps: StepTest[];
60
+ }
61
+ export interface TestResult {
62
+ stepId: string;
63
+ description?: string;
64
+ mode: 'fixture' | 'live' | 'skipped';
65
+ passed: number;
66
+ failed: number;
67
+ skipped: number;
68
+ errors: string[];
69
+ }
70
+ export declare function getPath(obj: unknown, dotPath: string): unknown;
71
+ export declare function runAssertion(output: unknown, assertion: Assertion): {
72
+ pass: boolean;
73
+ reason: string;
74
+ };
75
+ export declare function loadFixture(wsDir: string | null, fixtureSource: string): Record<string, unknown> | null;
76
+ export declare function runStepFixture(step: StepTest, wsDir: string | null): TestResult;
77
+ interface MinimalClient {
78
+ testAiAction(template: string, variables?: Record<string, unknown>, responseStructure?: Record<string, unknown>): Promise<unknown>;
79
+ testAppAction(appId: string, actionId: string, input?: Record<string, unknown>): Promise<unknown>;
80
+ testCodeAction(code: string, language: string, variables?: Record<string, unknown>): Promise<unknown>;
81
+ }
82
+ export declare function runStepLive(step: StepTest, client: MinimalClient): Promise<TestResult>;
83
+ type Pipeline = Record<string, unknown>;
84
+ export declare function makeTestSkeleton(workflowId: string, pipeline: Pipeline): TestFile;
85
+ export {};