@agentled/cli 0.6.5 → 0.6.7

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 (50) hide show
  1. package/README.md +25 -0
  2. package/dist/commands/agents.js +7 -2
  3. package/dist/commands/agents.js.map +1 -1
  4. package/dist/commands/auth.js +18 -0
  5. package/dist/commands/auth.js.map +1 -1
  6. package/dist/commands/dryrun.d.ts +23 -0
  7. package/dist/commands/dryrun.js +641 -0
  8. package/dist/commands/dryrun.js.map +1 -0
  9. package/dist/commands/executions.js +67 -0
  10. package/dist/commands/executions.js.map +1 -1
  11. package/dist/commands/fixture.d.ts +10 -0
  12. package/dist/commands/fixture.js +155 -0
  13. package/dist/commands/fixture.js.map +1 -0
  14. package/dist/commands/group-manifest.d.ts +15 -0
  15. package/dist/commands/group-manifest.js +488 -0
  16. package/dist/commands/group-manifest.js.map +1 -0
  17. package/dist/commands/init.d.ts +17 -0
  18. package/dist/commands/init.js +83 -0
  19. package/dist/commands/init.js.map +1 -0
  20. package/dist/commands/onboarding.js +70 -3
  21. package/dist/commands/onboarding.js.map +1 -1
  22. package/dist/commands/test.d.ts +15 -0
  23. package/dist/commands/test.js +98 -0
  24. package/dist/commands/test.js.map +1 -0
  25. package/dist/commands/workflows.js +104 -0
  26. package/dist/commands/workflows.js.map +1 -1
  27. package/dist/commands/workspace.js +65 -0
  28. package/dist/commands/workspace.js.map +1 -1
  29. package/dist/context-schema.js +3 -4
  30. package/dist/context-schema.js.map +1 -1
  31. package/dist/index.js +10 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/utils/browser-auth.js +6 -2
  34. package/dist/utils/browser-auth.js.map +1 -1
  35. package/dist/utils/pipeline-lint.d.ts +20 -0
  36. package/dist/utils/pipeline-lint.js +348 -0
  37. package/dist/utils/pipeline-lint.js.map +1 -0
  38. package/dist/utils/preflight.js +1 -1
  39. package/dist/utils/test-runner.d.ts +85 -0
  40. package/dist/utils/test-runner.js +283 -0
  41. package/dist/utils/test-runner.js.map +1 -0
  42. package/dist/utils/workspace-folder.d.ts +46 -0
  43. package/dist/utils/workspace-folder.js +340 -0
  44. package/dist/utils/workspace-folder.js.map +1 -0
  45. package/llms-full.txt +13 -0
  46. package/package.json +1 -1
  47. package/patterns/v1/12-event-driven-workflow-groups.md +288 -0
  48. package/scaffolds/extract-threshold-alert.json +3 -3
  49. package/skills/agentled/SKILL.md +102 -26
  50. package/skills/agentled/WHY-AGENTLED.md +15 -0
@@ -0,0 +1,488 @@
1
+ /* eslint-disable no-console */
2
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
3
+ function validateManifest(obj) {
4
+ const errors = [];
5
+ function err(path, msg) { errors.push({ path, message: msg, severity: 'error' }); }
6
+ function warn(path, msg) { errors.push({ path, message: msg, severity: 'warning' }); }
7
+ if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {
8
+ err('$', 'Manifest must be a JSON object');
9
+ return errors;
10
+ }
11
+ // Required top-level fields
12
+ if (!obj.manifestVersion)
13
+ err('manifestVersion', 'Required. Use semantic version format e.g. "0.1.0"');
14
+ if (obj.manifestVersion && !/^\d+\.\d+\.\d+$/.test(obj.manifestVersion)) {
15
+ err('manifestVersion', 'Must be a semantic version string (e.g. "0.1.0")');
16
+ }
17
+ if (!obj.group) {
18
+ err('group', 'Required. Must include at minimum { id, name }');
19
+ return errors; // can't continue without group
20
+ }
21
+ if (!obj.group.id)
22
+ err('group.id', 'Required. Use a lowercase-slug like "founder-showcase"');
23
+ if (obj.group.id && !/^[a-z0-9-]+$/.test(obj.group.id)) {
24
+ err('group.id', 'Must be lowercase alphanumeric with hyphens (e.g. "founder-showcase")');
25
+ }
26
+ if (!obj.group.name)
27
+ err('group.name', 'Required. Human-readable name for the group');
28
+ if (!obj.group.goal)
29
+ warn('group.goal', 'Missing. Document what business objective this group optimizes for');
30
+ if (!obj.group.description)
31
+ warn('group.description', 'Missing. Add a one-sentence description');
32
+ // Collect declared local IDs for cross-reference checks
33
+ const workflowLocalIds = new Set();
34
+ const existingWorkflowIds = new Set();
35
+ const knowledgeListKeys = new Set();
36
+ const stateMachineKeys = new Set();
37
+ // knowledgeLists
38
+ if (obj.knowledgeLists !== undefined) {
39
+ if (typeof obj.knowledgeLists !== 'object' || Array.isArray(obj.knowledgeLists)) {
40
+ err('knowledgeLists', 'Must be an object (keys = listKeys)');
41
+ }
42
+ else {
43
+ for (const [listKey, listDef] of Object.entries(obj.knowledgeLists)) {
44
+ knowledgeListKeys.add(listKey);
45
+ const ld = listDef;
46
+ if (!ld.description)
47
+ warn(`knowledgeLists.${listKey}.description`, 'Missing. Describe this list\'s purpose');
48
+ if (!ld.userKeyField)
49
+ warn(`knowledgeLists.${listKey}.userKeyField`, 'Missing. Specify the field used as dedup key in kg.upsert-rows');
50
+ if (!ld.producers || ld.producers.length === 0)
51
+ warn(`knowledgeLists.${listKey}.producers`, 'No producers listed. Which workflow(s) write to this list?');
52
+ if (!ld.consumers || ld.consumers.length === 0)
53
+ warn(`knowledgeLists.${listKey}.consumers`, 'No consumers listed. Which workflow(s) read from this list?');
54
+ }
55
+ }
56
+ }
57
+ // stateMachines
58
+ if (obj.stateMachines !== undefined) {
59
+ if (typeof obj.stateMachines !== 'object' || Array.isArray(obj.stateMachines)) {
60
+ err('stateMachines', 'Must be an object (keys = listKeys)');
61
+ }
62
+ else {
63
+ for (const [listKey, sm] of Object.entries(obj.stateMachines)) {
64
+ stateMachineKeys.add(listKey);
65
+ const s = sm;
66
+ const stateSet = new Set(s.states ?? []);
67
+ if (!s.states || s.states.length === 0) {
68
+ err(`stateMachines.${listKey}.states`, 'Required. List all valid status values');
69
+ }
70
+ if (s.initialState && !stateSet.has(s.initialState)) {
71
+ err(`stateMachines.${listKey}.initialState`, `"${s.initialState}" is not in states[]`);
72
+ }
73
+ if (s.transitions) {
74
+ for (let i = 0; i < s.transitions.length; i++) {
75
+ const t = s.transitions[i];
76
+ if (!stateSet.has(t.from))
77
+ err(`stateMachines.${listKey}.transitions[${i}].from`, `"${t.from}" is not in states[]`);
78
+ if (!stateSet.has(t.to))
79
+ err(`stateMachines.${listKey}.transitions[${i}].to`, `"${t.to}" is not in states[]`);
80
+ }
81
+ }
82
+ // State machine references a listKey not declared in knowledgeLists
83
+ if (obj.knowledgeLists && !knowledgeListKeys.has(listKey)) {
84
+ warn(`stateMachines.${listKey}`, `List key "${listKey}" is not declared in knowledgeLists`);
85
+ }
86
+ }
87
+ }
88
+ }
89
+ // workflows
90
+ if (obj.workflows !== undefined) {
91
+ if (!Array.isArray(obj.workflows)) {
92
+ err('workflows', 'Must be an array');
93
+ }
94
+ else {
95
+ for (let i = 0; i < obj.workflows.length; i++) {
96
+ const wf = obj.workflows[i];
97
+ const loc = `workflows[${i}]`;
98
+ if (typeof wf !== 'object' || wf === null || Array.isArray(wf)) {
99
+ err(loc, 'Each workflows[] entry must be an object');
100
+ continue;
101
+ }
102
+ if (!wf.id)
103
+ err(`${loc}.id`, 'Required. Use a local slug for cross-references in this manifest');
104
+ if (wf.id)
105
+ workflowLocalIds.add(wf.id);
106
+ if (!wf.name)
107
+ err(`${loc}.name`, 'Required');
108
+ if (!wf.purpose)
109
+ warn(`${loc}.purpose`, 'Missing. Add a one-sentence purpose statement');
110
+ // Check reads/writes reference declared KG lists
111
+ if (obj.knowledgeLists) {
112
+ for (const listKey of (wf.reads ?? [])) {
113
+ if (!knowledgeListKeys.has(listKey)) {
114
+ err(`${loc}.reads`, `References list "${listKey}" not declared in knowledgeLists`);
115
+ }
116
+ }
117
+ for (const listKey of (wf.writes ?? [])) {
118
+ if (!knowledgeListKeys.has(listKey)) {
119
+ err(`${loc}.writes`, `References list "${listKey}" not declared in knowledgeLists`);
120
+ }
121
+ }
122
+ }
123
+ }
124
+ }
125
+ }
126
+ // existingWorkflows
127
+ if (obj.existingWorkflows !== undefined) {
128
+ if (!Array.isArray(obj.existingWorkflows)) {
129
+ err('existingWorkflows', 'Must be an array');
130
+ }
131
+ else {
132
+ const deprecations = [];
133
+ for (let i = 0; i < obj.existingWorkflows.length; i++) {
134
+ const ew = obj.existingWorkflows[i];
135
+ const loc = `existingWorkflows[${i}]`;
136
+ if (!ew.workflowId)
137
+ err(`${loc}.workflowId`, 'Required');
138
+ if (ew.workflowId)
139
+ existingWorkflowIds.add(ew.workflowId);
140
+ if (!ew.action)
141
+ err(`${loc}.action`, 'Required. One of: reuse, extend, deprecate, replace');
142
+ if (!['reuse', 'extend', 'deprecate', 'replace'].includes(ew.action)) {
143
+ err(`${loc}.action`, `Unknown action "${ew.action}". Must be one of: reuse, extend, deprecate, replace`);
144
+ }
145
+ if (ew.action === 'deprecate' || ew.action === 'replace') {
146
+ deprecations.push(ew.workflowId ?? loc);
147
+ }
148
+ }
149
+ if (deprecations.length > 0) {
150
+ warn('existingWorkflows', `${deprecations.length} workflow(s) marked for deprecation/replace: ${deprecations.join(', ')}. Confirm this is intentional.`);
151
+ }
152
+ }
153
+ }
154
+ // buildOrder
155
+ if (obj.buildOrder !== undefined) {
156
+ if (!Array.isArray(obj.buildOrder)) {
157
+ err('buildOrder', 'Must be an array of workflow IDs/slugs');
158
+ }
159
+ else {
160
+ const declared = new Set([...workflowLocalIds]);
161
+ for (let i = 0; i < obj.buildOrder.length; i++) {
162
+ const ref = obj.buildOrder[i];
163
+ // callsWorkflows references that come before their dependency
164
+ if (!declared.has(ref)) {
165
+ warn(`buildOrder[${i}]`, `"${ref}" is not declared in workflows[].id — verify the slug matches`);
166
+ }
167
+ }
168
+ }
169
+ }
170
+ // integrations
171
+ if (obj.integrations !== undefined) {
172
+ if (typeof obj.integrations !== 'object' || Array.isArray(obj.integrations)) {
173
+ err('integrations', 'Must be an object (keys = app IDs)');
174
+ }
175
+ }
176
+ // Check for customer-facing send steps without approvalGates
177
+ if (Array.isArray(obj.workflows)) {
178
+ for (const wf of obj.workflows) {
179
+ if (!wf.approvalGates || wf.approvalGates.length === 0) {
180
+ const hasOutreach = (wf.purpose ?? '').toLowerCase().match(/email|outreach|message|send|notify/);
181
+ if (hasOutreach) {
182
+ warn(`workflows[${wf.id}].approvalGates`, 'Workflow appears to send messages but has no approvalGates defined. Customer-facing sends should require human approval.');
183
+ }
184
+ }
185
+ }
186
+ }
187
+ // openQuestions
188
+ if (Array.isArray(obj.openQuestions)) {
189
+ const unanswered = obj.openQuestions.filter((q) => q.status !== 'resolved');
190
+ if (unanswered.length > 0) {
191
+ warn('openQuestions', `${unanswered.length} open question(s) unresolved. Answer before building.`);
192
+ }
193
+ }
194
+ return errors;
195
+ }
196
+ const SCAFFOLDS = {
197
+ 'event-driven-funnel': () => ({
198
+ $schema: 'https://schemas.agentled.app/group-manifest/v0.json',
199
+ manifestVersion: '0.1.0',
200
+ group: {
201
+ id: 'my-funnel',
202
+ name: 'My Event-Driven Funnel',
203
+ description: 'Continuous sourcing → KG enrichment → per-entity activation.',
204
+ goal: 'Optimize for conversion, not curation.',
205
+ style: { color: '#6366f1', iconName: 'Sparkles' },
206
+ },
207
+ operatingPrinciples: [
208
+ 'Sourcing is continuous and broad — not batch per theme.',
209
+ 'Processing fires per entity when it enters the KG, not on a fixed schedule.',
210
+ 'Customer-facing messages are approval-gated.',
211
+ ],
212
+ knowledgeLists: {
213
+ entities: {
214
+ description: 'Entities sourced and tracked through the funnel.',
215
+ userKeyField: 'url',
216
+ fields: [
217
+ { name: 'name', type: 'string' },
218
+ { name: 'url', type: 'string' },
219
+ { name: 'score', type: 'number' },
220
+ { name: 'status', type: 'string' },
221
+ ],
222
+ producers: ['source-entities'],
223
+ consumers: ['enrich-and-score'],
224
+ },
225
+ },
226
+ stateMachines: {
227
+ entities: {
228
+ states: ['new', 'enriched', 'scored', 'outreached', 'converted', 'rejected'],
229
+ initialState: 'new',
230
+ transitions: [
231
+ { from: 'new', to: 'enriched', trigger: 'enrich-and-score', description: 'Enrichment completed' },
232
+ { from: 'enriched', to: 'scored', trigger: 'enrich-and-score', description: 'Scoring completed' },
233
+ { from: 'scored', to: 'outreached', trigger: 'send-outreach', description: 'Outreach sent' },
234
+ { from: 'outreached', to: 'converted', trigger: 'process-reply', description: 'Positive reply received' },
235
+ { from: 'scored', to: 'rejected', trigger: 'enrich-and-score', description: 'Score below threshold' },
236
+ ],
237
+ },
238
+ },
239
+ workflows: [
240
+ {
241
+ id: 'source-entities',
242
+ name: 'Source Entities',
243
+ purpose: 'Find entities from external sources and write them to the KG with status: new.',
244
+ trigger: 'schedule',
245
+ schedule: 'daily',
246
+ writes: ['entities'],
247
+ creditEstimate: '5-15',
248
+ status: 'planned',
249
+ },
250
+ {
251
+ id: 'enrich-and-score',
252
+ name: 'Enrich and Score',
253
+ purpose: 'Enrich new entities, score against ICP, and update status in KG.',
254
+ trigger: 'schedule',
255
+ schedule: 'daily',
256
+ reads: ['entities'],
257
+ writes: ['entities'],
258
+ creditEstimate: '10-30',
259
+ status: 'planned',
260
+ },
261
+ {
262
+ id: 'send-outreach',
263
+ name: 'Send Outreach',
264
+ purpose: 'Draft personalized outreach for scored entities and send after approval.',
265
+ trigger: 'schedule',
266
+ schedule: 'weekly',
267
+ reads: ['entities'],
268
+ writes: ['entities'],
269
+ approvalGates: ['draft-outreach-email'],
270
+ creditEstimate: '5-10',
271
+ status: 'planned',
272
+ },
273
+ ],
274
+ existingWorkflows: [],
275
+ integrations: {
276
+ 'agentled': { required: true, purpose: 'LinkedIn enrichment' },
277
+ 'kg': { required: true, purpose: 'KG list reads/writes' },
278
+ 'gmail': { required: true, purpose: 'Outreach email sending' },
279
+ },
280
+ buildOrder: ['source-entities', 'enrich-and-score', 'send-outreach'],
281
+ openQuestions: [
282
+ {
283
+ question: 'What is the primary success metric: conversion rate, entities contacted per week, or operator time saved?',
284
+ impact: 'Determines which step outputs to track in analytics.',
285
+ status: 'open',
286
+ },
287
+ {
288
+ question: 'What is the system of record for conversions — a KG status update, a Stripe webhook, or a manual update?',
289
+ impact: 'Determines whether a separate webhook listener workflow is needed.',
290
+ status: 'open',
291
+ },
292
+ ],
293
+ }),
294
+ 'sourcing-kit': () => ({
295
+ $schema: 'https://schemas.agentled.app/group-manifest/v0.json',
296
+ manifestVersion: '0.1.0',
297
+ group: {
298
+ id: 'my-sourcing-kit',
299
+ name: 'My Sourcing Kit',
300
+ description: 'Multiple source workflows feeding a single canonical KG list.',
301
+ goal: 'Build a deduplicated, always-fresh entity list from multiple sources.',
302
+ },
303
+ knowledgeLists: {
304
+ 'sourced-entities': {
305
+ description: 'Canonical entity list from all sources.',
306
+ userKeyField: 'url',
307
+ fields: [
308
+ { name: 'name', type: 'string' },
309
+ { name: 'url', type: 'string' },
310
+ { name: 'source', type: 'string' },
311
+ { name: 'status', type: 'string' },
312
+ ],
313
+ producers: ['source-a', 'source-b'],
314
+ consumers: ['process-entities'],
315
+ },
316
+ },
317
+ stateMachines: {
318
+ 'sourced-entities': {
319
+ states: ['new', 'processed', 'rejected'],
320
+ initialState: 'new',
321
+ transitions: [
322
+ { from: 'new', to: 'processed', trigger: 'process-entities' },
323
+ { from: 'new', to: 'rejected', trigger: 'process-entities' },
324
+ ],
325
+ },
326
+ },
327
+ workflows: [
328
+ { id: 'source-a', name: 'Source A', purpose: 'Source entities from channel A.', trigger: 'schedule', writes: ['sourced-entities'], status: 'planned' },
329
+ { id: 'source-b', name: 'Source B', purpose: 'Source entities from channel B.', trigger: 'schedule', writes: ['sourced-entities'], status: 'planned' },
330
+ { id: 'process-entities', name: 'Process Entities', purpose: 'Enrich and act on new entities.', trigger: 'schedule', reads: ['sourced-entities'], writes: ['sourced-entities'], status: 'planned' },
331
+ ],
332
+ buildOrder: ['source-a', 'source-b', 'process-entities'],
333
+ openQuestions: [],
334
+ }),
335
+ 'intake-approval': () => ({
336
+ $schema: 'https://schemas.agentled.app/group-manifest/v0.json',
337
+ manifestVersion: '0.1.0',
338
+ group: {
339
+ id: 'my-intake-approval',
340
+ name: 'My Intake + Approval',
341
+ description: 'Inbound intake → triage → human approval → action.',
342
+ goal: 'Process inbound items quickly while keeping humans in the loop for customer-facing actions.',
343
+ },
344
+ knowledgeLists: {
345
+ 'intake-items': {
346
+ description: 'Inbound items awaiting triage and approval.',
347
+ userKeyField: 'id',
348
+ fields: [
349
+ { name: 'id', type: 'string' },
350
+ { name: 'source', type: 'string' },
351
+ { name: 'content', type: 'string' },
352
+ { name: 'priority', type: 'string' },
353
+ { name: 'status', type: 'string' },
354
+ ],
355
+ producers: ['intake'],
356
+ consumers: ['triage', 'respond'],
357
+ },
358
+ },
359
+ stateMachines: {
360
+ 'intake-items': {
361
+ states: ['new', 'triaged', 'approved', 'responded', 'dismissed'],
362
+ initialState: 'new',
363
+ transitions: [
364
+ { from: 'new', to: 'triaged', trigger: 'triage' },
365
+ { from: 'triaged', to: 'approved', trigger: 'respond', description: 'Human approves response' },
366
+ { from: 'triaged', to: 'dismissed', trigger: 'respond', description: 'Human dismisses item' },
367
+ { from: 'approved', to: 'responded', trigger: 'respond', description: 'Response sent' },
368
+ ],
369
+ },
370
+ },
371
+ workflows: [
372
+ { id: 'intake', name: 'Intake', purpose: 'Collect inbound items from email, webhook, or form.', trigger: 'schedule', writes: ['intake-items'], status: 'planned' },
373
+ { id: 'triage', name: 'Triage', purpose: 'Classify priority and draft a response for each new item.', trigger: 'schedule', reads: ['intake-items'], writes: ['intake-items'], status: 'planned' },
374
+ { id: 'respond', name: 'Respond', purpose: 'Present drafted responses for approval, then send.', trigger: 'schedule', reads: ['intake-items'], writes: ['intake-items'], approvalGates: ['send-response'], status: 'planned' },
375
+ ],
376
+ buildOrder: ['intake', 'triage', 'respond'],
377
+ openQuestions: [
378
+ {
379
+ question: 'What is the intake channel: email, webhook, form, or a combination?',
380
+ impact: 'Determines trigger type and intake step app action.',
381
+ status: 'open',
382
+ },
383
+ ],
384
+ }),
385
+ };
386
+ const PATTERN_DESCRIPTIONS = {
387
+ 'event-driven-funnel': 'Continuous sourcing → KG enrichment → per-entity activation (outreach, booking, etc.)',
388
+ 'sourcing-kit': 'Multiple source workflows feeding a single deduplicated canonical KG list',
389
+ 'intake-approval': 'Inbound intake → AI triage → human approval gate → action',
390
+ };
391
+ // ---------------------------------------------------------------------------
392
+ // Command registration
393
+ // ---------------------------------------------------------------------------
394
+ export function registerGroupManifestCommands(program) {
395
+ const gm = program
396
+ .command('group-manifest')
397
+ .alias('gm')
398
+ .description('Local validation and scaffolding for multi-workflow group manifests');
399
+ gm.command('validate <file>')
400
+ .description('Validate a group manifest JSON file against the schema')
401
+ .action((file) => {
402
+ if (!existsSync(file)) {
403
+ console.error(`Error: file not found: ${file}`);
404
+ process.exit(1);
405
+ }
406
+ let raw;
407
+ try {
408
+ raw = readFileSync(file, 'utf-8');
409
+ }
410
+ catch (e) {
411
+ console.error(`Error reading file: ${e.message}`);
412
+ process.exit(1);
413
+ }
414
+ let obj;
415
+ try {
416
+ obj = JSON.parse(raw);
417
+ }
418
+ catch (e) {
419
+ console.error(`Invalid JSON: ${e.message}`);
420
+ process.exit(1);
421
+ }
422
+ const results = validateManifest(obj);
423
+ const errors = results.filter(r => r.severity === 'error');
424
+ const warnings = results.filter(r => r.severity === 'warning');
425
+ if (errors.length === 0 && warnings.length === 0) {
426
+ console.log(`✓ ${file} — valid group manifest`);
427
+ return;
428
+ }
429
+ if (errors.length > 0) {
430
+ console.error(`\n${errors.length} error(s):\n`);
431
+ for (const e of errors) {
432
+ console.error(` [error] ${e.path}: ${e.message}`);
433
+ }
434
+ }
435
+ if (warnings.length > 0) {
436
+ console.warn(`\n${warnings.length} warning(s):\n`);
437
+ for (const w of warnings) {
438
+ console.warn(` [warn] ${w.path}: ${w.message}`);
439
+ }
440
+ }
441
+ if (errors.length > 0) {
442
+ console.error(`\nValidation failed with ${errors.length} error(s).`);
443
+ process.exit(1);
444
+ }
445
+ else {
446
+ console.log(`\nValid with ${warnings.length} warning(s). Review warnings before building.`);
447
+ }
448
+ });
449
+ gm.command('scaffold [pattern]')
450
+ .description('Emit a starter group manifest for a named pattern')
451
+ .option('--out <file>', 'Write output to a file instead of stdout')
452
+ .option('--list', 'List available scaffold patterns')
453
+ .action((pattern, opts) => {
454
+ if (opts.list || !pattern || pattern === 'list') {
455
+ console.log('Available group-manifest scaffold patterns:\n');
456
+ for (const [key, desc] of Object.entries(PATTERN_DESCRIPTIONS)) {
457
+ console.log(` ${key.padEnd(24)} ${desc}`);
458
+ }
459
+ console.log('\nUsage: agentled group-manifest scaffold <pattern> [--out <file>]');
460
+ return;
461
+ }
462
+ const key = pattern;
463
+ if (!SCAFFOLDS[key]) {
464
+ console.error(`Unknown pattern "${pattern}". Run \`agentled group-manifest scaffold --list\` to see available patterns.`);
465
+ process.exit(1);
466
+ }
467
+ const manifest = SCAFFOLDS[key]();
468
+ const json = JSON.stringify(manifest, null, 2);
469
+ if (opts.out) {
470
+ try {
471
+ writeFileSync(opts.out, json + '\n', 'utf-8');
472
+ console.log(`Scaffold written to ${opts.out}`);
473
+ console.log(`\nNext steps:`);
474
+ console.log(` 1. Edit ${opts.out} — fill in workspace IDs, list schemas, and open questions`);
475
+ console.log(` 2. agentled group-manifest validate ${opts.out}`);
476
+ console.log(` 3. Build workflows in the order listed in buildOrder[]`);
477
+ }
478
+ catch (e) {
479
+ console.error(`Error writing file: ${e.message}`);
480
+ process.exit(1);
481
+ }
482
+ }
483
+ else {
484
+ console.log(json);
485
+ }
486
+ });
487
+ }
488
+ //# sourceMappingURL=group-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-manifest.js","sourceRoot":"","sources":["../../src/commands/group-manifest.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAiB/B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAelE,SAAS,gBAAgB,CAAC,GAAQ;IAC9B,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,SAAS,GAAG,CAAC,IAAY,EAAE,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACnG,SAAS,IAAI,CAAC,IAAY,EAAE,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IAEtG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,GAAG,CAAC,eAAe;QAAE,GAAG,CAAC,iBAAiB,EAAE,oDAAoD,CAAC,CAAC;IACvG,IAAI,GAAG,CAAC,eAAe,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,iBAAiB,EAAE,kDAAkD,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACb,GAAG,CAAC,OAAO,EAAE,gDAAgD,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC,CAAC,+BAA+B;IAClD,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAAE,GAAG,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAC;IAC7F,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,UAAU,EAAE,uEAAuE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI;QAAE,GAAG,CAAC,YAAY,EAAE,6CAA6C,CAAC,CAAC;IACtF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI;QAAE,IAAI,CAAC,YAAY,EAAE,oEAAoE,CAAC,CAAC;IAC9G,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW;QAAE,IAAI,CAAC,mBAAmB,EAAE,yCAAyC,CAAC,CAAC;IAEjG,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9C,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE3C,iBAAiB;IACjB,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YAC9E,GAAG,CAAC,gBAAgB,EAAE,qCAAqC,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACJ,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClE,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC/B,MAAM,EAAE,GAAG,OAAc,CAAC;gBAC1B,IAAI,CAAC,EAAE,CAAC,WAAW;oBAAE,IAAI,CAAC,kBAAkB,OAAO,cAAc,EAAE,wCAAwC,CAAC,CAAC;gBAC7G,IAAI,CAAC,EAAE,CAAC,YAAY;oBAAE,IAAI,CAAC,kBAAkB,OAAO,eAAe,EAAE,gEAAgE,CAAC,CAAC;gBACvI,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;oBAAE,IAAI,CAAC,kBAAkB,OAAO,YAAY,EAAE,4DAA4D,CAAC,CAAC;gBAC1J,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;oBAAE,IAAI,CAAC,kBAAkB,OAAO,YAAY,EAAE,6DAA6D,CAAC,CAAC;YAC/J,CAAC;QACL,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAC5E,GAAG,CAAC,eAAe,EAAE,qCAAqC,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACJ,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC5D,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC9B,MAAM,CAAC,GAAG,EAAS,CAAC;gBACpB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACrC,GAAG,CAAC,iBAAiB,OAAO,SAAS,EAAE,wCAAwC,CAAC,CAAC;gBACrF,CAAC;gBACD,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;oBAClD,GAAG,CAAC,iBAAiB,OAAO,eAAe,EAAE,IAAI,CAAC,CAAC,YAAY,sBAAsB,CAAC,CAAC;gBAC3F,CAAC;gBACD,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;wBAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;4BAAE,GAAG,CAAC,iBAAiB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAC;wBACpH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;4BAAE,GAAG,CAAC,iBAAiB,OAAO,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;oBAClH,CAAC;gBACL,CAAC;gBACD,oEAAoE;gBACpE,IAAI,GAAG,CAAC,cAAc,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxD,IAAI,CAAC,iBAAiB,OAAO,EAAE,EAAE,aAAa,OAAO,qCAAqC,CAAC,CAAC;gBAChG,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,YAAY;IACZ,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;gBAC9B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC7D,GAAG,CAAC,GAAG,EAAE,0CAA0C,CAAC,CAAC;oBACrD,SAAS;gBACb,CAAC;gBACD,IAAI,CAAC,EAAE,CAAC,EAAE;oBAAE,GAAG,CAAC,GAAG,GAAG,KAAK,EAAE,kEAAkE,CAAC,CAAC;gBACjG,IAAI,EAAE,CAAC,EAAE;oBAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACvC,IAAI,CAAC,EAAE,CAAC,IAAI;oBAAE,GAAG,CAAC,GAAG,GAAG,OAAO,EAAE,UAAU,CAAC,CAAC;gBAC7C,IAAI,CAAC,EAAE,CAAC,OAAO;oBAAE,IAAI,CAAC,GAAG,GAAG,UAAU,EAAE,+CAA+C,CAAC,CAAC;gBAEzF,iDAAiD;gBACjD,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;oBACrB,KAAK,MAAM,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;wBACrC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;4BAClC,GAAG,CAAC,GAAG,GAAG,QAAQ,EAAE,oBAAoB,OAAO,kCAAkC,CAAC,CAAC;wBACvF,CAAC;oBACL,CAAC;oBACD,KAAK,MAAM,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;wBACtC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;4BAClC,GAAG,CAAC,GAAG,GAAG,SAAS,EAAE,oBAAoB,OAAO,kCAAkC,CAAC,CAAC;wBACxF,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,oBAAoB;IACpB,IAAI,GAAG,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACxC,GAAG,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACJ,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpD,MAAM,EAAE,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC;gBACtC,IAAI,CAAC,EAAE,CAAC,UAAU;oBAAE,GAAG,CAAC,GAAG,GAAG,aAAa,EAAE,UAAU,CAAC,CAAC;gBACzD,IAAI,EAAE,CAAC,UAAU;oBAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;gBAC1D,IAAI,CAAC,EAAE,CAAC,MAAM;oBAAE,GAAG,CAAC,GAAG,GAAG,SAAS,EAAE,qDAAqD,CAAC,CAAC;gBAC5F,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnE,GAAG,CAAC,GAAG,GAAG,SAAS,EAAE,mBAAmB,EAAE,CAAC,MAAM,sDAAsD,CAAC,CAAC;gBAC7G,CAAC;gBACD,IAAI,EAAE,CAAC,MAAM,KAAK,WAAW,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACvD,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;gBAC5C,CAAC;YACL,CAAC;YACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,mBAAmB,EAAE,GAAG,YAAY,CAAC,MAAM,gDAAgD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC7J,CAAC;QACL,CAAC;IACL,CAAC;IAED,aAAa;IACb,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,GAAG,CAAC,YAAY,EAAE,wCAAwC,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACJ,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;YAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC9B,8DAA8D;gBAC9D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrB,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,GAAG,+DAA+D,CAAC,CAAC;gBACrG,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,eAAe;IACf,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,cAAc,EAAE,oCAAoC,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAED,6DAA6D;IAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrD,MAAM,WAAW,GAAG,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACjG,IAAI,WAAW,EAAE,CAAC;oBACd,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,iBAAiB,EAAE,0HAA0H,CAAC,CAAC;gBAC1K,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;QACjF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,eAAe,EAAE,GAAG,UAAU,CAAC,MAAM,uDAAuD,CAAC,CAAC;QACvG,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAQD,MAAM,SAAS,GAAqC;IAChD,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1B,OAAO,EAAE,qDAAqD;QAC9D,eAAe,EAAE,OAAO;QACxB,KAAK,EAAE;YACH,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EAAE,8DAA8D;YAC3E,IAAI,EAAE,wCAAwC;YAC9C,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE;SACpD;QACD,mBAAmB,EAAE;YACjB,yDAAyD;YACzD,6EAA6E;YAC7E,8CAA8C;SACjD;QACD,cAAc,EAAE;YACZ,QAAQ,EAAE;gBACN,WAAW,EAAE,kDAAkD;gBAC/D,YAAY,EAAE,KAAK;gBACnB,MAAM,EAAE;oBACJ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAChC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC/B,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACjC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACrC;gBACD,SAAS,EAAE,CAAC,iBAAiB,CAAC;gBAC9B,SAAS,EAAE,CAAC,kBAAkB,CAAC;aAClC;SACJ;QACD,aAAa,EAAE;YACX,QAAQ,EAAE;gBACN,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,CAAC;gBAC5E,YAAY,EAAE,KAAK;gBACnB,WAAW,EAAE;oBACT,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,sBAAsB,EAAE;oBACjG,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,EAAE;oBACjG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE;oBAC5F,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,yBAAyB,EAAE;oBACzG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,uBAAuB,EAAE;iBACxG;aACJ;SACJ;QACD,SAAS,EAAE;YACP;gBACI,EAAE,EAAE,iBAAiB;gBACrB,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,gFAAgF;gBACzF,OAAO,EAAE,UAAU;gBACnB,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,CAAC,UAAU,CAAC;gBACpB,cAAc,EAAE,MAAM;gBACtB,MAAM,EAAE,SAAS;aACpB;YACD;gBACI,EAAE,EAAE,kBAAkB;gBACtB,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,kEAAkE;gBAC3E,OAAO,EAAE,UAAU;gBACnB,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,CAAC,UAAU,CAAC;gBACnB,MAAM,EAAE,CAAC,UAAU,CAAC;gBACpB,cAAc,EAAE,OAAO;gBACvB,MAAM,EAAE,SAAS;aACpB;YACD;gBACI,EAAE,EAAE,eAAe;gBACnB,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,0EAA0E;gBACnF,OAAO,EAAE,UAAU;gBACnB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,CAAC,UAAU,CAAC;gBACnB,MAAM,EAAE,CAAC,UAAU,CAAC;gBACpB,aAAa,EAAE,CAAC,sBAAsB,CAAC;gBACvC,cAAc,EAAE,MAAM;gBACtB,MAAM,EAAE,SAAS;aACpB;SACJ;QACD,iBAAiB,EAAE,EAAE;QACrB,YAAY,EAAE;YACV,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE;YAC9D,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,sBAAsB,EAAE;YACzD,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,wBAAwB,EAAE;SACjE;QACD,UAAU,EAAE,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,CAAC;QACpE,aAAa,EAAE;YACX;gBACI,QAAQ,EAAE,2GAA2G;gBACrH,MAAM,EAAE,sDAAsD;gBAC9D,MAAM,EAAE,MAAM;aACjB;YACD;gBACI,QAAQ,EAAE,0GAA0G;gBACpH,MAAM,EAAE,oEAAoE;gBAC5E,MAAM,EAAE,MAAM;aACjB;SACJ;KACJ,CAAC;IACF,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;QACnB,OAAO,EAAE,qDAAqD;QAC9D,eAAe,EAAE,OAAO;QACxB,KAAK,EAAE;YACH,EAAE,EAAE,iBAAiB;YACrB,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,+DAA+D;YAC5E,IAAI,EAAE,uEAAuE;SAChF;QACD,cAAc,EAAE;YACZ,kBAAkB,EAAE;gBAChB,WAAW,EAAE,yCAAyC;gBACtD,YAAY,EAAE,KAAK;gBACnB,MAAM,EAAE;oBACJ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAChC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC/B,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAClC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACrC;gBACD,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;gBACnC,SAAS,EAAE,CAAC,kBAAkB,CAAC;aAClC;SACJ;QACD,aAAa,EAAE;YACX,kBAAkB,EAAE;gBAChB,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC;gBACxC,YAAY,EAAE,KAAK;gBACnB,WAAW,EAAE;oBACT,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE;oBAC7D,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE;iBAC/D;aACJ;SACJ;QACD,SAAS,EAAE;YACP,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iCAAiC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;YACtJ,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iCAAiC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;YACtJ,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,iCAAiC,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;SACtM;QACD,UAAU,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC;QACxD,aAAa,EAAE,EAAE;KACpB,CAAC;IACF,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;QACtB,OAAO,EAAE,qDAAqD;QAC9D,eAAe,EAAE,OAAO;QACxB,KAAK,EAAE;YACH,EAAE,EAAE,oBAAoB;YACxB,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,oDAAoD;YACjE,IAAI,EAAE,6FAA6F;SACtG;QACD,cAAc,EAAE;YACZ,cAAc,EAAE;gBACZ,WAAW,EAAE,6CAA6C;gBAC1D,YAAY,EAAE,IAAI;gBAClB,MAAM,EAAE;oBACJ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC9B,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACnC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACpC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACrC;gBACD,SAAS,EAAE,CAAC,QAAQ,CAAC;gBACrB,SAAS,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;aACnC;SACJ;QACD,aAAa,EAAE;YACX,cAAc,EAAE;gBACZ,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC;gBAChE,YAAY,EAAE,KAAK;gBACnB,WAAW,EAAE;oBACT,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE;oBACjD,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,yBAAyB,EAAE;oBAC/F,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,sBAAsB,EAAE;oBAC7F,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE;iBAC1F;aACJ;SACJ;QACD,SAAS,EAAE;YACP,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,qDAAqD,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;YAClK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,2DAA2D,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;YACjM,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,oDAAoD,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;SACjO;QACD,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;QAC3C,aAAa,EAAE;YACX;gBACI,QAAQ,EAAE,qEAAqE;gBAC/E,MAAM,EAAE,qDAAqD;gBAC7D,MAAM,EAAE,MAAM;aACjB;SACJ;KACJ,CAAC;CACL,CAAC;AAEF,MAAM,oBAAoB,GAA+B;IACrD,qBAAqB,EAAE,uFAAuF;IAC9G,cAAc,EAAE,2EAA2E;IAC3F,iBAAiB,EAAE,2DAA2D;CACjF,CAAC;AAEF,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,MAAM,UAAU,6BAA6B,CAAC,OAAgB;IAC1D,MAAM,EAAE,GAAG,OAAO;SACb,OAAO,CAAC,gBAAgB,CAAC;SACzB,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,qEAAqE,CAAC,CAAC;IAExF,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC;SACxB,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACD,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,IAAI,GAAQ,CAAC;QACb,IAAI,CAAC;YACD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;QAE/D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,yBAAyB,CAAC,CAAC;YAChD,OAAO;QACX,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,MAAM,cAAc,CAAC,CAAC;YAChD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACvD,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,gBAAgB,CAAC,CAAC;YACnD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACtD,CAAC;QACL,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,4BAA4B,MAAM,CAAC,MAAM,YAAY,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,MAAM,+CAA+C,CAAC,CAAC;QAChG,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC;SAC3B,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,cAAc,EAAE,0CAA0C,CAAC;SAClE,MAAM,CAAC,QAAQ,EAAE,kCAAkC,CAAC;SACpD,MAAM,CAAC,CAAC,OAA2B,EAAE,IAAI,EAAE,EAAE;QAC1C,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;YAClF,OAAO;QACX,CAAC;QAED,MAAM,GAAG,GAAG,OAAqB,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,+EAA+E,CAAC,CAAC;YAC1H,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAE/C,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,IAAI,CAAC;gBACD,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,GAAG,4DAA4D,CAAC,CAAC;gBAC/F,OAAO,CAAC,GAAG,CAAC,yCAAyC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACjE,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YAC5E,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `agentled init [slug]` — bootstrap a local workspace folder for building,
3
+ * testing, and iterating on workflows without per-iteration credit cost.
4
+ *
5
+ * Creates agentled_<slug>/ in cwd with:
6
+ * - .agentled/workspace.json + cache/ (apps + models)
7
+ * - docs/ (SKILL.md + GOTCHAS.md)
8
+ * - examples/scaffolds/ (bundled JSON skeletons)
9
+ * - examples/live/, fixtures/, tests/, drafts/ (empty, agent fills these)
10
+ *
11
+ * See `agentled workspace sync` to refresh cached data.
12
+ * See `agentled workflows pull <id>` to import a live workflow.
13
+ * See `agentled fixture capture` + `agentled test` for the zero-credit
14
+ * iteration loop.
15
+ */
16
+ import { Command } from 'commander';
17
+ export declare function registerInitCommand(program: Command): void;
@@ -0,0 +1,83 @@
1
+ /**
2
+ * `agentled init [slug]` — bootstrap a local workspace folder for building,
3
+ * testing, and iterating on workflows without per-iteration credit cost.
4
+ *
5
+ * Creates agentled_<slug>/ in cwd with:
6
+ * - .agentled/workspace.json + cache/ (apps + models)
7
+ * - docs/ (SKILL.md + GOTCHAS.md)
8
+ * - examples/scaffolds/ (bundled JSON skeletons)
9
+ * - examples/live/, fixtures/, tests/, drafts/ (empty, agent fills these)
10
+ *
11
+ * See `agentled workspace sync` to refresh cached data.
12
+ * See `agentled workflows pull <id>` to import a live workflow.
13
+ * See `agentled fixture capture` + `agentled test` for the zero-credit
14
+ * iteration loop.
15
+ */
16
+ import { existsSync } from 'node:fs';
17
+ import { resolve } from 'node:path';
18
+ import { AgentledClient } from '../client.js';
19
+ import { printOutput, printError } from '../utils/output.js';
20
+ import { createWorkspaceFolder } from '../utils/workspace-folder.js';
21
+ export function registerInitCommand(program) {
22
+ program
23
+ .command('init')
24
+ .description('Scaffold a local agentled_<slug>/ workspace folder with docs, scaffolds, and cache. Foundation for the test/fixture iteration loop.')
25
+ .argument('[slug]', 'Override the workspace slug used for the folder name (defaults to remote workspace slug)')
26
+ .option('--force', 'Overwrite an existing folder', false)
27
+ .option('--format <fmt>', 'Output format', 'json')
28
+ .action(async (slugArg, opts) => {
29
+ try {
30
+ const client = new AgentledClient();
31
+ const [workspace, appsList, modelsList] = await Promise.allSettled([
32
+ client.getWorkspace(),
33
+ client.listApps(),
34
+ client.listModels(),
35
+ ]);
36
+ if (workspace.status !== 'fulfilled') {
37
+ printError(`Failed to load workspace: ${workspace.reason?.message ?? 'unknown error'}`);
38
+ return;
39
+ }
40
+ const ws = workspace.value;
41
+ const workspaceId = String(ws.id ?? ws.workspaceId ?? '');
42
+ const workspaceName = String(ws.name ?? ws.company?.name ?? ws.slug ?? 'workspace');
43
+ const slug = slugArg ?? String(ws.slug ?? workspaceId.replace(/^ws_/, '') ?? 'workspace');
44
+ const apiBase = process.env.AGENTLED_URL ?? 'https://www.agentled.app';
45
+ const folderName = `agentled_${slug}`;
46
+ const folderPath = resolve(process.cwd(), folderName);
47
+ if (existsSync(folderPath) && !opts.force) {
48
+ printError(`Folder already exists: ${folderPath}. Use --force to reinitialize, or "agentled workspace sync" to refresh the cache.`);
49
+ return;
50
+ }
51
+ const meta = {
52
+ workspaceId,
53
+ slug,
54
+ name: workspaceName,
55
+ apiBase,
56
+ syncedAt: new Date().toISOString(),
57
+ };
58
+ createWorkspaceFolder(folderPath, meta, {
59
+ appsList: appsList.status === 'fulfilled' ? appsList.value : undefined,
60
+ modelsList: modelsList.status === 'fulfilled' ? modelsList.value : undefined,
61
+ });
62
+ printOutput({
63
+ folderPath,
64
+ folderName,
65
+ meta,
66
+ cached: {
67
+ apps: appsList.status === 'fulfilled',
68
+ models: modelsList.status === 'fulfilled',
69
+ },
70
+ nextSteps: [
71
+ `cd ${folderName}`,
72
+ 'agentled workflows pull <workflowId> # import a workflow',
73
+ 'agentled workflows lint examples/scaffolds/lead-scoring-kg.json',
74
+ 'cat docs/GOTCHAS.md # read before building',
75
+ ],
76
+ }, (opts.format ?? 'json'));
77
+ }
78
+ catch (e) {
79
+ printError(e instanceof Error ? e.message : String(e));
80
+ }
81
+ });
82
+ }
83
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}