agentblueprint 0.4.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.
Files changed (83) hide show
  1. package/README.md +137 -0
  2. package/dist/__tests__/cli.test.d.ts +1 -0
  3. package/dist/__tests__/cli.test.js +136 -0
  4. package/dist/__tests__/cli.test.js.map +1 -0
  5. package/dist/__tests__/client.test.d.ts +1 -0
  6. package/dist/__tests__/client.test.js +99 -0
  7. package/dist/__tests__/client.test.js.map +1 -0
  8. package/dist/__tests__/config.test.d.ts +1 -0
  9. package/dist/__tests__/config.test.js +37 -0
  10. package/dist/__tests__/config.test.js.map +1 -0
  11. package/dist/__tests__/renderers.test.d.ts +1 -0
  12. package/dist/__tests__/renderers.test.js +471 -0
  13. package/dist/__tests__/renderers.test.js.map +1 -0
  14. package/dist/__tests__/token-store.test.d.ts +1 -0
  15. package/dist/__tests__/token-store.test.js +61 -0
  16. package/dist/__tests__/token-store.test.js.map +1 -0
  17. package/dist/__tests__/tools.test.d.ts +1 -0
  18. package/dist/__tests__/tools.test.js +379 -0
  19. package/dist/__tests__/tools.test.js.map +1 -0
  20. package/dist/cli.d.ts +2 -0
  21. package/dist/cli.js +233 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/client.d.ts +80 -0
  24. package/dist/client.js +56 -0
  25. package/dist/client.js.map +1 -0
  26. package/dist/config.d.ts +5 -0
  27. package/dist/config.js +11 -0
  28. package/dist/config.js.map +1 -0
  29. package/dist/download.d.ts +9 -0
  30. package/dist/download.js +113 -0
  31. package/dist/download.js.map +1 -0
  32. package/dist/errors.d.ts +5 -0
  33. package/dist/errors.js +18 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.js +4 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/renderers.d.ts +16 -0
  39. package/dist/renderers.js +1468 -0
  40. package/dist/renderers.js.map +1 -0
  41. package/dist/resources/blueprint.d.ts +14 -0
  42. package/dist/resources/blueprint.js +46 -0
  43. package/dist/resources/blueprint.js.map +1 -0
  44. package/dist/resources/blueprints.d.ts +14 -0
  45. package/dist/resources/blueprints.js +33 -0
  46. package/dist/resources/blueprints.js.map +1 -0
  47. package/dist/resources/business-profile.d.ts +14 -0
  48. package/dist/resources/business-profile.js +33 -0
  49. package/dist/resources/business-profile.js.map +1 -0
  50. package/dist/resources/spec.d.ts +14 -0
  51. package/dist/resources/spec.js +33 -0
  52. package/dist/resources/spec.js.map +1 -0
  53. package/dist/server.d.ts +3 -0
  54. package/dist/server.js +47 -0
  55. package/dist/server.js.map +1 -0
  56. package/dist/token-store.d.ts +7 -0
  57. package/dist/token-store.js +34 -0
  58. package/dist/token-store.js.map +1 -0
  59. package/dist/tools/download-blueprint.d.ts +17 -0
  60. package/dist/tools/download-blueprint.js +55 -0
  61. package/dist/tools/download-blueprint.js.map +1 -0
  62. package/dist/tools/get-blueprint.d.ts +17 -0
  63. package/dist/tools/get-blueprint.js +65 -0
  64. package/dist/tools/get-blueprint.js.map +1 -0
  65. package/dist/tools/get-business-case.d.ts +17 -0
  66. package/dist/tools/get-business-case.js +66 -0
  67. package/dist/tools/get-business-case.js.map +1 -0
  68. package/dist/tools/get-business-profile.d.ts +14 -0
  69. package/dist/tools/get-business-profile.js +21 -0
  70. package/dist/tools/get-business-profile.js.map +1 -0
  71. package/dist/tools/get-implementation-plan.d.ts +17 -0
  72. package/dist/tools/get-implementation-plan.js +67 -0
  73. package/dist/tools/get-implementation-plan.js.map +1 -0
  74. package/dist/tools/get-implementation-spec.d.ts +31 -0
  75. package/dist/tools/get-implementation-spec.js +35 -0
  76. package/dist/tools/get-implementation-spec.js.map +1 -0
  77. package/dist/tools/get-use-case.d.ts +31 -0
  78. package/dist/tools/get-use-case.js +35 -0
  79. package/dist/tools/get-use-case.js.map +1 -0
  80. package/dist/tools/list-blueprints.d.ts +22 -0
  81. package/dist/tools/list-blueprints.js +29 -0
  82. package/dist/tools/list-blueprints.js.map +1 -0
  83. package/package.json +38 -0
@@ -0,0 +1,379 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { AgentBlueprintClient } from '../client.js';
3
+ import { handleListBlueprints } from '../tools/list-blueprints.js';
4
+ import { handleGetBlueprint } from '../tools/get-blueprint.js';
5
+ import { handleGetBusinessCase } from '../tools/get-business-case.js';
6
+ import { handleGetImplementationPlan } from '../tools/get-implementation-plan.js';
7
+ import { handleGetBusinessProfile } from '../tools/get-business-profile.js';
8
+ import { handleDownloadBlueprint } from '../tools/download-blueprint.js';
9
+ const mockConfig = {
10
+ apiKey: 'ab_live_test',
11
+ apiUrl: 'https://test.agentblueprint.ai',
12
+ };
13
+ describe('Tool handlers', () => {
14
+ let client;
15
+ beforeEach(() => {
16
+ client = new AgentBlueprintClient(mockConfig);
17
+ vi.restoreAllMocks();
18
+ });
19
+ it('handleGetBusinessProfile returns formatted JSON', async () => {
20
+ const data = { id: 'prof-1', companyName: 'Acme Corp', industry: 'Technology' };
21
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
22
+ ok: true,
23
+ json: () => Promise.resolve({ success: true, data, timestamp: '' }),
24
+ }));
25
+ const result = await handleGetBusinessProfile(client);
26
+ expect(result.content).toHaveLength(1);
27
+ expect(result.content[0].type).toBe('text');
28
+ expect(JSON.parse(result.content[0].text)).toEqual(data);
29
+ });
30
+ it('handleGetBusinessProfile returns error on failure', async () => {
31
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
32
+ ok: false,
33
+ status: 404,
34
+ statusText: 'Not Found',
35
+ json: () => Promise.resolve({ error: 'No business profile found' }),
36
+ }));
37
+ const result = await handleGetBusinessProfile(client);
38
+ expect(result.isError).toBe(true);
39
+ expect(result.content[0].text).toContain('No business profile found');
40
+ });
41
+ it('handleListBlueprints returns formatted JSON', async () => {
42
+ const data = [{ id: 'bp-1', title: 'Test' }];
43
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
44
+ ok: true,
45
+ json: () => Promise.resolve({ success: true, data, timestamp: '' }),
46
+ }));
47
+ const result = await handleListBlueprints(client);
48
+ expect(result.content).toHaveLength(1);
49
+ expect(result.content[0].type).toBe('text');
50
+ expect(JSON.parse(result.content[0].text)).toEqual(data);
51
+ });
52
+ it('handleListBlueprints returns error on failure', async () => {
53
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
54
+ ok: false,
55
+ status: 500,
56
+ statusText: 'Internal Server Error',
57
+ json: () => Promise.resolve({ error: 'server error' }),
58
+ }));
59
+ const result = await handleListBlueprints(client);
60
+ expect(result.isError).toBe(true);
61
+ expect(result.content[0].text).toContain('server error');
62
+ });
63
+ it('handleGetBlueprint returns summary (not full data)', async () => {
64
+ const blueprintData = {
65
+ id: 'bp-1',
66
+ version: 1,
67
+ lifecycleStatus: 'generated',
68
+ useCaseId: null,
69
+ createdAt: '',
70
+ updatedAt: '',
71
+ data: {
72
+ title: 'Test Blueprint',
73
+ executiveSummary: 'A great blueprint',
74
+ agenticPattern: 'Supervisor',
75
+ enhancedDigitalTeam: [
76
+ {
77
+ name: 'Agent 1',
78
+ role: 'Does things',
79
+ agentRole: 'Worker',
80
+ enhancedTools: [
81
+ { name: 'Tool1', sampleOutput: 'very large data here...' },
82
+ ],
83
+ },
84
+ ],
85
+ platformRecommendation: {
86
+ primaryPlatform: { name: 'ServiceNow' },
87
+ },
88
+ phases: [
89
+ { name: 'Pilot', durationWeeks: 4 },
90
+ ],
91
+ },
92
+ };
93
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
94
+ ok: true,
95
+ json: () => Promise.resolve({ success: true, data: blueprintData, timestamp: '' }),
96
+ }));
97
+ const result = await handleGetBlueprint(client, { blueprintId: 'bp-1' });
98
+ expect(result.content).toHaveLength(1);
99
+ const parsed = JSON.parse(result.content[0].text);
100
+ // Should have summary fields
101
+ expect(parsed.id).toBe('bp-1');
102
+ expect(parsed.title).toBe('Test Blueprint');
103
+ expect(parsed.executiveSummary).toBe('A great blueprint');
104
+ expect(parsed.platform).toBe('ServiceNow');
105
+ expect(parsed.agentCount).toBe(1);
106
+ expect(parsed.agents).toHaveLength(1);
107
+ expect(parsed.agents[0].name).toBe('Agent 1');
108
+ expect(parsed.hint).toContain('download_blueprint');
109
+ // Should NOT have full data blob
110
+ expect(parsed.data).toBeUndefined();
111
+ expect(parsed.enhancedDigitalTeam).toBeUndefined();
112
+ });
113
+ it('handleGetBlueprint falls back to instructions.role when top-level role is missing', async () => {
114
+ const blueprintData = {
115
+ id: 'bp-2',
116
+ version: 1,
117
+ lifecycleStatus: 'generated',
118
+ useCaseId: null,
119
+ createdAt: '',
120
+ updatedAt: '',
121
+ data: {
122
+ title: 'Fallback Test',
123
+ enhancedDigitalTeam: [
124
+ {
125
+ name: 'Orchestrator',
126
+ agentRole: 'Manager',
127
+ instructions: { role: 'Coordinate the pipeline end-to-end' },
128
+ },
129
+ {
130
+ name: 'Scanner',
131
+ agentRole: 'Worker',
132
+ // no role, no instructions — should fall back to ''
133
+ },
134
+ ],
135
+ },
136
+ };
137
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
138
+ ok: true,
139
+ json: () => Promise.resolve({ success: true, data: blueprintData, timestamp: '' }),
140
+ }));
141
+ const result = await handleGetBlueprint(client, { blueprintId: 'bp-2' });
142
+ const parsed = JSON.parse(result.content[0].text);
143
+ expect(parsed.agents[0].role).toBe('Coordinate the pipeline end-to-end');
144
+ expect(parsed.agents[1].role).toBe('');
145
+ });
146
+ it('handleGetBusinessCase returns summary (not full data)', async () => {
147
+ const bcData = {
148
+ id: 'bc-1',
149
+ version: 1,
150
+ blueprintId: 'bp-1',
151
+ createdAt: '',
152
+ updatedAt: '',
153
+ data: {
154
+ executiveSummary: {
155
+ purpose: 'Automate things',
156
+ ask: { investmentAmount: '$200K', timeline: '6 months' },
157
+ },
158
+ benefits: {
159
+ quantifiedROI: {
160
+ roi: '285%',
161
+ npv: '$450K',
162
+ paybackPeriod: '8 months',
163
+ pilotROI: { pilotCost: '$50K', pilotROI: '60%' },
164
+ sensitivity: { conservative: {}, realistic: {}, optimistic: {} },
165
+ fiveYearProjection: [{}, {}, {}, {}, {}],
166
+ },
167
+ },
168
+ recommendation: { summary: 'Proceed with pilot' },
169
+ },
170
+ };
171
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
172
+ ok: true,
173
+ json: () => Promise.resolve({ success: true, data: bcData, timestamp: '' }),
174
+ }));
175
+ const result = await handleGetBusinessCase(client, { blueprintId: 'bp-1' });
176
+ const parsed = JSON.parse(result.content[0].text);
177
+ expect(parsed.id).toBe('bc-1');
178
+ expect(parsed.roi.roi).toBe('285%');
179
+ expect(parsed.pilotEconomics.pilotCost).toBe('$50K');
180
+ expect(parsed.recommendation.summary).toBe('Proceed with pilot');
181
+ expect(parsed.hint).toContain('download_blueprint');
182
+ // Should NOT have raw data blob
183
+ expect(parsed.data).toBeUndefined();
184
+ // Should NOT have full sensitivity/projection
185
+ expect(parsed.sensitivity).toBeUndefined();
186
+ expect(parsed.fiveYearProjection).toBeUndefined();
187
+ });
188
+ it('handleGetImplementationPlan returns summary (not full data)', async () => {
189
+ const planData = {
190
+ id: 'ip-1',
191
+ version: 1,
192
+ blueprintId: 'bp-1',
193
+ createdAt: '',
194
+ updatedAt: '',
195
+ data: {
196
+ projectOverview: {
197
+ projectName: 'Test Project',
198
+ executiveSummary: 'Deploy agents',
199
+ scope: 'All departments',
200
+ },
201
+ epics: [
202
+ {
203
+ name: 'Setup',
204
+ phase: 'Phase 1',
205
+ priority: 'P0',
206
+ estimatedDuration: '2 weeks',
207
+ stories: [{ title: 'S1' }, { title: 'S2' }, { title: 'S3' }],
208
+ },
209
+ {
210
+ name: 'Build',
211
+ phase: 'Phase 2',
212
+ priority: 'P1',
213
+ stories: [{ title: 'S4' }],
214
+ },
215
+ ],
216
+ resources: {
217
+ timeline: { totalDuration: '6 months' },
218
+ },
219
+ agentSpecifications: [{ name: 'Agent1' }, { name: 'Agent2' }],
220
+ },
221
+ };
222
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
223
+ ok: true,
224
+ json: () => Promise.resolve({ success: true, data: planData, timestamp: '' }),
225
+ }));
226
+ const result = await handleGetImplementationPlan(client, { blueprintId: 'bp-1' });
227
+ const parsed = JSON.parse(result.content[0].text);
228
+ expect(parsed.id).toBe('ip-1');
229
+ expect(parsed.projectOverview.projectName).toBe('Test Project');
230
+ expect(parsed.epicCount).toBe(2);
231
+ expect(parsed.epics[0].name).toBe('Setup');
232
+ expect(parsed.epics[0].storyCount).toBe(3);
233
+ expect(parsed.epics[1].storyCount).toBe(1);
234
+ expect(parsed.timeline.totalDuration).toBe('6 months');
235
+ expect(parsed.agentSpecificationCount).toBe(2);
236
+ expect(parsed.hint).toContain('download_blueprint');
237
+ // Should NOT have full stories
238
+ expect(parsed.data).toBeUndefined();
239
+ expect(parsed.epics[0].stories).toBeUndefined();
240
+ });
241
+ });
242
+ describe('handleDownloadBlueprint', () => {
243
+ let client;
244
+ beforeEach(() => {
245
+ client = new AgentBlueprintClient(mockConfig);
246
+ vi.restoreAllMocks();
247
+ });
248
+ it('returns file manifest with all skill files', async () => {
249
+ const fetchMock = vi.fn()
250
+ // getBlueprint
251
+ .mockResolvedValueOnce({
252
+ ok: true,
253
+ json: () => Promise.resolve({
254
+ success: true,
255
+ timestamp: '',
256
+ data: {
257
+ id: 'bp-1',
258
+ version: 1,
259
+ lifecycleStatus: 'generated',
260
+ useCaseId: null,
261
+ createdAt: '',
262
+ updatedAt: '',
263
+ data: {
264
+ title: 'My Test Blueprint',
265
+ executiveSummary: 'Test exec summary',
266
+ enhancedDigitalTeam: [
267
+ { name: 'Agent 1', role: 'Worker' },
268
+ ],
269
+ },
270
+ },
271
+ }),
272
+ })
273
+ // getBusinessCase
274
+ .mockResolvedValueOnce({
275
+ ok: true,
276
+ json: () => Promise.resolve({
277
+ success: true,
278
+ timestamp: '',
279
+ data: { id: 'bc-1', version: 1, blueprintId: 'bp-1', createdAt: '', updatedAt: '', data: {} },
280
+ }),
281
+ })
282
+ // getImplementationPlan
283
+ .mockResolvedValueOnce({
284
+ ok: true,
285
+ json: () => Promise.resolve({
286
+ success: true,
287
+ timestamp: '',
288
+ data: { id: 'ip-1', version: 1, blueprintId: 'bp-1', createdAt: '', updatedAt: '', data: {} },
289
+ }),
290
+ })
291
+ // getUseCase
292
+ .mockResolvedValueOnce({
293
+ ok: true,
294
+ json: () => Promise.resolve({
295
+ success: true,
296
+ timestamp: '',
297
+ data: { title: 'Test Use Case' },
298
+ }),
299
+ });
300
+ vi.stubGlobal('fetch', fetchMock);
301
+ const result = await handleDownloadBlueprint(client, { blueprintId: 'bp-1' });
302
+ expect(result.isError).toBeUndefined();
303
+ expect(result.content).toHaveLength(1);
304
+ const manifest = JSON.parse(result.content[0].text);
305
+ expect(manifest.directory).toBe('my-test-blueprint');
306
+ expect(manifest.installHint).toContain('.agent-blueprint/');
307
+ expect(manifest.files).toHaveLength(10);
308
+ const filePaths = manifest.files.map((f) => f.path);
309
+ expect(filePaths).toContain('SKILL.md');
310
+ expect(filePaths).toContain('references/agent-specifications.md');
311
+ expect(filePaths).toContain('references/financial-case.md');
312
+ expect(filePaths).toContain('scripts/validate-spec.sh');
313
+ // SKILL.md should have frontmatter
314
+ const skillFile = manifest.files.find((f) => f.path === 'SKILL.md');
315
+ expect(skillFile.content).toContain('---');
316
+ expect(skillFile.content).toContain('name: my-test-blueprint');
317
+ });
318
+ it('handles missing artifacts gracefully', async () => {
319
+ const fetchMock = vi.fn()
320
+ // getBlueprint
321
+ .mockResolvedValueOnce({
322
+ ok: true,
323
+ json: () => Promise.resolve({
324
+ success: true,
325
+ timestamp: '',
326
+ data: {
327
+ id: 'bp-1',
328
+ version: 1,
329
+ lifecycleStatus: 'generated',
330
+ useCaseId: null,
331
+ createdAt: '',
332
+ updatedAt: '',
333
+ data: {
334
+ title: 'Minimal Blueprint',
335
+ enhancedDigitalTeam: [{ name: 'Agent 1', role: 'Worker' }],
336
+ },
337
+ },
338
+ }),
339
+ })
340
+ // getBusinessCase - 404
341
+ .mockResolvedValueOnce({
342
+ ok: false,
343
+ status: 404,
344
+ statusText: 'Not Found',
345
+ json: () => Promise.resolve({ error: 'Not found' }),
346
+ })
347
+ // getImplementationPlan - 404
348
+ .mockResolvedValueOnce({
349
+ ok: false,
350
+ status: 404,
351
+ statusText: 'Not Found',
352
+ json: () => Promise.resolve({ error: 'Not found' }),
353
+ })
354
+ // getUseCase - 404
355
+ .mockResolvedValueOnce({
356
+ ok: false,
357
+ status: 404,
358
+ statusText: 'Not Found',
359
+ json: () => Promise.resolve({ error: 'Not found' }),
360
+ });
361
+ vi.stubGlobal('fetch', fetchMock);
362
+ const result = await handleDownloadBlueprint(client, { blueprintId: 'bp-1' });
363
+ expect(result.isError).toBeUndefined();
364
+ const manifest = JSON.parse(result.content[0].text);
365
+ expect(manifest.files).toHaveLength(10);
366
+ });
367
+ it('returns error when blueprint fetch fails', async () => {
368
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
369
+ ok: false,
370
+ status: 404,
371
+ statusText: 'Not Found',
372
+ json: () => Promise.resolve({ error: 'Blueprint not found' }),
373
+ }));
374
+ const result = await handleDownloadBlueprint(client, { blueprintId: 'bad-id' });
375
+ expect(result.isError).toBe(true);
376
+ expect(result.content[0].text).toContain('Blueprint not found');
377
+ });
378
+ });
379
+ //# sourceMappingURL=tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../../src/__tests__/tools.test.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,233 @@
1
+ #!/usr/bin/env node
2
+ import { createInterface } from 'node:readline';
3
+ import { createRequire } from 'node:module';
4
+ import { AgentBlueprintClient } from './client.js';
5
+ import { loadConfig } from './config.js';
6
+ import { formatError } from './errors.js';
7
+ import { parseDownloadArgs, runDownload } from './download.js';
8
+ import { saveToken } from './token-store.js';
9
+ import { handleGetBlueprint } from './tools/get-blueprint.js';
10
+ import { handleGetBusinessCase } from './tools/get-business-case.js';
11
+ import { handleGetBusinessProfile } from './tools/get-business-profile.js';
12
+ import { handleGetImplementationPlan } from './tools/get-implementation-plan.js';
13
+ import { handleGetImplementationSpec } from './tools/get-implementation-spec.js';
14
+ import { handleGetUseCase } from './tools/get-use-case.js';
15
+ const require = createRequire(import.meta.url);
16
+ const pkg = require('../package.json');
17
+ // ─── Arg helpers ──────────────────────────────────────────────────
18
+ function findFlag(args, flag) {
19
+ const idx = args.indexOf(flag);
20
+ if (idx !== -1 && idx + 1 < args.length)
21
+ return args[idx + 1];
22
+ return undefined;
23
+ }
24
+ function hasFlag(args, ...flags) {
25
+ return flags.some(f => args.includes(f));
26
+ }
27
+ // ─── Help text ────────────────────────────────────────────────────
28
+ const HELP = `
29
+ Agent Blueprint CLI v${pkg.version}
30
+
31
+ Usage:
32
+ agentblueprint login [--token <token>] Store API token
33
+ agentblueprint list [--org <id>] List blueprints
34
+ agentblueprint get blueprint <id> [--org <id>] Blueprint summary
35
+ agentblueprint get business-case <id> [--org <id>] Business case summary
36
+ agentblueprint get use-case <id> [--org <id>] Use case analysis
37
+ agentblueprint get implementation-plan <id> [--org <id>] Implementation plan summary
38
+ agentblueprint get implementation-spec <id> [--org <id>] Implementation spec metadata
39
+ agentblueprint get business-profile [--org <id>] Business profile
40
+ agentblueprint download <id> [--org <id>] [--dir <path>] Download as Agent Skills
41
+ agentblueprint --help Show this help
42
+ agentblueprint --version Show version
43
+
44
+ Environment:
45
+ AGENT_BLUEPRINT_API_KEY API token (alternative to login)
46
+ AGENT_BLUEPRINT_API_URL API base URL (default: https://app.agentblueprint.ai)
47
+
48
+ Output goes to stdout (JSON). Status messages go to stderr.
49
+ When stdin is piped (non-interactive), starts the MCP server instead.
50
+ `.trim();
51
+ // ─── Commands ─────────────────────────────────────────────────────
52
+ async function cmdLogin(args) {
53
+ let token = findFlag(args, '--token');
54
+ if (!token) {
55
+ console.error('Get a token at: https://app.agentblueprint.ai/settings/api-tokens\n');
56
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
57
+ token = await new Promise((resolve) => {
58
+ rl.question('API token: ', (answer) => {
59
+ rl.close();
60
+ resolve(answer.trim());
61
+ });
62
+ });
63
+ }
64
+ if (!token) {
65
+ console.error('Error: No token provided.');
66
+ process.exit(1);
67
+ }
68
+ // Validate by making a test call
69
+ console.error('Validating token...');
70
+ try {
71
+ const config = loadConfig(token);
72
+ const client = new AgentBlueprintClient(config);
73
+ await client.listBlueprints();
74
+ }
75
+ catch (err) {
76
+ console.error(`Error: Token validation failed. ${formatError(err)}`);
77
+ process.exit(1);
78
+ }
79
+ const apiUrl = findFlag(args, '--api-url');
80
+ saveToken(token, apiUrl);
81
+ console.error('Token saved. You can now run commands without --token.');
82
+ }
83
+ async function cmdList(args) {
84
+ const config = loadConfig(findFlag(args, '--token'));
85
+ const client = new AgentBlueprintClient(config);
86
+ const customerOrgId = findFlag(args, '--org');
87
+ const blueprints = await client.listBlueprints(customerOrgId);
88
+ process.stdout.write(JSON.stringify(blueprints, null, 2) + '\n');
89
+ }
90
+ async function cmdGet(args) {
91
+ const subtype = args[0];
92
+ if (!subtype) {
93
+ console.error('Error: Missing artifact type. Usage: agentblueprint get <type> [<id>]');
94
+ console.error('Types: blueprint, business-case, use-case, implementation-plan, implementation-spec, business-profile');
95
+ process.exit(1);
96
+ }
97
+ const rest = args.slice(1);
98
+ const token = findFlag(rest, '--token');
99
+ const customerOrgId = findFlag(rest, '--org');
100
+ // Find positional ID: first arg not starting with -- and not a value of a flag
101
+ const flagValues = new Set();
102
+ for (let i = 0; i < rest.length; i++) {
103
+ if (rest[i] === '--token' || rest[i] === '--org')
104
+ flagValues.add(i + 1);
105
+ }
106
+ const positionalId = rest.find((a, i) => !a.startsWith('--') && !flagValues.has(i));
107
+ const config = loadConfig(token);
108
+ const client = new AgentBlueprintClient(config);
109
+ let result;
110
+ switch (subtype) {
111
+ case 'blueprint': {
112
+ if (!positionalId) {
113
+ console.error('Error: Missing blueprint ID. Usage: agentblueprint get blueprint <id>');
114
+ process.exit(1);
115
+ }
116
+ result = await handleGetBlueprint(client, { blueprintId: positionalId, customerOrgId });
117
+ break;
118
+ }
119
+ case 'business-case': {
120
+ if (!positionalId) {
121
+ console.error('Error: Missing blueprint ID. Usage: agentblueprint get business-case <id>');
122
+ process.exit(1);
123
+ }
124
+ result = await handleGetBusinessCase(client, { blueprintId: positionalId, customerOrgId });
125
+ break;
126
+ }
127
+ case 'use-case': {
128
+ if (!positionalId) {
129
+ console.error('Error: Missing blueprint ID. Usage: agentblueprint get use-case <id>');
130
+ process.exit(1);
131
+ }
132
+ result = await handleGetUseCase(client, { blueprintId: positionalId, customerOrgId });
133
+ break;
134
+ }
135
+ case 'implementation-plan': {
136
+ if (!positionalId) {
137
+ console.error('Error: Missing blueprint ID. Usage: agentblueprint get implementation-plan <id>');
138
+ process.exit(1);
139
+ }
140
+ result = await handleGetImplementationPlan(client, { blueprintId: positionalId, customerOrgId });
141
+ break;
142
+ }
143
+ case 'implementation-spec': {
144
+ if (!positionalId) {
145
+ console.error('Error: Missing blueprint ID. Usage: agentblueprint get implementation-spec <id>');
146
+ process.exit(1);
147
+ }
148
+ result = await handleGetImplementationSpec(client, { blueprintId: positionalId, customerOrgId });
149
+ break;
150
+ }
151
+ case 'business-profile': {
152
+ result = await handleGetBusinessProfile(client, customerOrgId);
153
+ break;
154
+ }
155
+ default:
156
+ console.error(`Error: Unknown type "${subtype}". Valid types: blueprint, business-case, use-case, implementation-plan, implementation-spec, business-profile`);
157
+ process.exit(1);
158
+ }
159
+ if (result.isError) {
160
+ console.error(result.content[0].text);
161
+ process.exit(1);
162
+ }
163
+ process.stdout.write(result.content[0].text + '\n');
164
+ }
165
+ async function cmdDownload(args) {
166
+ const token = findFlag(args, '--token');
167
+ const config = loadConfig(token);
168
+ const downloadArgs = parseDownloadArgs(args.filter(a => a !== '--token' && args[args.indexOf(a) - 1] !== '--token'));
169
+ await runDownload(config, downloadArgs);
170
+ }
171
+ async function startMcpServer(args) {
172
+ // Dynamic import so the MCP SDK is only loaded when actually serving
173
+ const { StdioServerTransport } = await import('@modelcontextprotocol/sdk/server/stdio.js');
174
+ const { createServer } = await import('./server.js');
175
+ const token = findFlag(args, '--token');
176
+ const config = loadConfig(token);
177
+ const server = createServer(config);
178
+ const transport = new StdioServerTransport();
179
+ await server.connect(transport);
180
+ }
181
+ // ─── Main ─────────────────────────────────────────────────────────
182
+ async function main() {
183
+ const args = process.argv.slice(2);
184
+ const isTTY = process.stdin.isTTY;
185
+ // No args: show help on TTY, start MCP server on pipe
186
+ if (args.length === 0) {
187
+ if (isTTY) {
188
+ console.error(HELP);
189
+ process.exit(0);
190
+ }
191
+ await startMcpServer(args);
192
+ return;
193
+ }
194
+ if (hasFlag(args, '--help', '-h')) {
195
+ console.error(HELP);
196
+ process.exit(0);
197
+ }
198
+ if (hasFlag(args, '--version', '-v')) {
199
+ console.log(pkg.version);
200
+ process.exit(0);
201
+ }
202
+ const command = args[0];
203
+ const rest = args.slice(1);
204
+ try {
205
+ switch (command) {
206
+ case 'login':
207
+ await cmdLogin(rest);
208
+ break;
209
+ case 'list':
210
+ await cmdList(rest);
211
+ break;
212
+ case 'get':
213
+ await cmdGet(rest);
214
+ break;
215
+ case 'download':
216
+ await cmdDownload(rest);
217
+ break;
218
+ case 'serve':
219
+ await startMcpServer(rest);
220
+ break;
221
+ default:
222
+ console.error(`Unknown command: ${command}\n`);
223
+ console.error(HELP);
224
+ process.exit(1);
225
+ }
226
+ }
227
+ catch (err) {
228
+ console.error(formatError(err));
229
+ process.exit(1);
230
+ }
231
+ }
232
+ main();
233
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,qEAAqE;AAErE,SAAS,QAAQ,CAAC,IAAc,EAAE,IAAY;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,OAAO,CAAC,IAAc,EAAE,GAAG,KAAe;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,qEAAqE;AAErE,MAAM,IAAI,GAAG;uBACU,GAAG,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;CAqBjC,CAAC,IAAI,EAAE,CAAC;AAET,qEAAqE;AAErE,KAAK,UAAU,QAAQ,CAAC,IAAc;IACpC,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACrF,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,KAAK,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YAC5C,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;gBACpC,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,iCAAiC;IACjC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,mCAAmC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC3C,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;AAC1E,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAc;IACnC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC9D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAc;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;QACvF,OAAO,CAAC,KAAK,CAAC,uGAAuG,CAAC,CAAC;QACvH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE9C,+EAA+E;IAC/E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO;YAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpF,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAEhD,IAAI,MAAwE,CAAC;IAE7E,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;gBACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;YACxF,MAAM;QACR,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;gBAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;YAC3F,MAAM;QACR,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;gBACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;YACtF,MAAM;QACR,CAAC;QACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,iFAAiF,CAAC,CAAC;gBACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,GAAG,MAAM,2BAA2B,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;YACjG,MAAM;QACR,CAAC;QACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,iFAAiF,CAAC,CAAC;gBACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,GAAG,MAAM,2BAA2B,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;YACjG,MAAM;QACR,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,GAAG,MAAM,wBAAwB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAC/D,MAAM;QACR,CAAC;QACD;YACE,OAAO,CAAC,KAAK,CAAC,wBAAwB,OAAO,gHAAgH,CAAC,CAAC;YAC/J,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAc;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;IACrH,MAAM,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAc;IAC1C,qEAAqE;IACrE,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC;IAC3F,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,qEAAqE;AAErE,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;IAElC,sDAAsD;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,CAAC;QACH,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,OAAO;gBACV,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACrB,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;gBACpB,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnB,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;gBACxB,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM;YACR;gBACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,IAAI,CAAC,CAAC;gBAC/C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}