@uniswap/ai-toolkit-nx-claude 0.5.24-next.0 → 0.5.24

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.
@@ -23,14 +23,19 @@ npx nx generate @uniswap/ai-toolkit-nx-claude:addons \
23
23
 
24
24
  ### Installation Control
25
25
 
26
- - `installMode` - Installation mode:
26
+ - `selectionMode` - Selection mode for which addons to install:
27
27
  - `all` - Install all available addons
28
28
  - `specific` - Choose specific addons to install
29
- - `addon` - Specific addon to install (when `installMode=specific`)
29
+ - `addons` - Specific addons to install (when `selectionMode=specific`)
30
+ - `installationType` - Installation location for MCP servers:
31
+ - `global` - Install to `~/.claude` (available in all projects)
32
+ - `local` - Install to `./.claude` (project-specific configuration)
30
33
 
31
34
  ### Integration Options
32
35
 
33
- - `installMode` (hidden) - Set to "default" or "custom" when called from init generator to prevent duplicate prompts
36
+ - `installMode` (hidden) - Set to "default" or "custom" when called from init generator to control prompting behavior:
37
+ - When `installMode === 'default'`: Skips all prompts, uses `installationType` from parent or defaults to 'global'
38
+ - When undefined (standalone execution): Shows full interactive prompts including `installationType` selection
34
39
 
35
40
  ## Available Addons
36
41
 
@@ -95,10 +100,10 @@ Registered in `addon-registry.ts`:
95
100
 
96
101
  ## Generator Flow
97
102
 
98
- 1. **Mode Selection** (if not from init):
103
+ 1. **Mode Selection** (if running standalone):
99
104
 
100
- - All addons
101
- - Specific addon
105
+ - Selection mode: All addons vs Specific addons
106
+ - Installation location: Global (`~/.claude`) vs Local (`./.claude`)
102
107
 
103
108
  2. **Addon Selection** (if specific mode):
104
109
 
@@ -110,7 +115,9 @@ Registered in `addon-registry.ts`:
110
115
 
111
116
  - For each selected addon:
112
117
  - Run addon's setup function
113
- - Update Claude configuration
118
+ - Install MCP server using `claude mcp add` with appropriate scope:
119
+ - `--scope user` for global installation
120
+ - `--scope project` for local installation
114
121
  - Create necessary files/directories
115
122
  - Install dependencies if needed
116
123
 
@@ -190,21 +197,35 @@ npx nx generate @uniswap/ai-toolkit-nx-claude:addons \
190
197
 
191
198
  ## Integration with Init Generator
192
199
 
193
- The addons generator supports the `installMode` pattern:
200
+ The addons generator supports the `installMode` pattern for programmatic invocation:
194
201
 
195
202
  ```typescript
196
203
  // From init generator
197
204
  await addonsGenerator(tree, {
198
- installMode: normalizedOptions.installMode, // 'default' or 'custom'
199
- addon: 'spec-mcp-workflow', // Pre-selected addon
205
+ installMode: 'default', // or 'custom'
206
+ selectionMode: 'all', // or 'specific'
207
+ installationType: normalizedOptions.installationType, // 'global' or 'local'
208
+ force: false,
209
+ skipVerification: false,
210
+ dashboardMode: 'always',
211
+ port: 0,
200
212
  });
201
213
  ```
202
214
 
203
- When `installMode === 'default'`:
215
+ **Behavior by installMode**:
204
216
 
205
- - Skips installation mode prompt
206
- - Uses provided addon selection
207
- - No user interaction required
217
+ - `installMode === 'default'`:
218
+
219
+ - Skips all interactive prompts
220
+ - Uses `installationType` from init generator (or defaults to 'global')
221
+ - Uses provided `selectionMode` and other options
222
+ - No user interaction required
223
+
224
+ - `installMode` undefined (standalone execution):
225
+ - Shows `selectionMode` prompt (all vs specific)
226
+ - Shows `installationType` prompt (global vs local)
227
+ - Shows addon selection for 'specific' mode
228
+ - Full interactive experience
208
229
 
209
230
  ## Configuration Updates
210
231
 
@@ -127,9 +127,7 @@ async function validateAddonRequirements(addonId) {
127
127
  if (addon.requirements?.node) {
128
128
  const nodeVersion = process.version;
129
129
  if (!nodeVersion.match(/v1[89]\.\d+\.\d+/) && !nodeVersion.match(/v2\d+\.\d+\.\d+/)) {
130
- errors.push(
131
- `Node.js ${addon.requirements.node} required, found ${nodeVersion}`
132
- );
130
+ errors.push(`Node.js ${addon.requirements.node} required, found ${nodeVersion}`);
133
131
  }
134
132
  }
135
133
  if (addon.requirements?.commands) {
@@ -233,13 +231,13 @@ var init_addon_registry = __esm({
233
231
  {
234
232
  id: "linear-mcp",
235
233
  name: "Linear MCP",
236
- description: "MCP server for Linear issue tracking (SSE)",
234
+ description: "MCP server for Linear issue tracking (HTTP)",
237
235
  type: "mcp-server",
238
236
  packageName: "linear",
239
237
  mcp: {
240
238
  serverName: "linear",
241
- command: "npx",
242
- args: ["-y", "mcp-remote", "https://mcp.linear.app/sse"]
239
+ transport: "http",
240
+ url: "https://mcp.linear.app/mcp"
243
241
  }
244
242
  },
245
243
  {
@@ -429,7 +427,25 @@ var require_schema = __commonJS({
429
427
  type: "string",
430
428
  description: "Installation mode from parent generator (default or custom)",
431
429
  enum: ["default", "custom"],
432
- hidden: true
430
+ hidden: true,
431
+ "x-skip-prompt": true
432
+ },
433
+ installationType: {
434
+ type: "string",
435
+ description: "Installation location for MCP servers",
436
+ enum: ["global", "local"],
437
+ "prompt-message": "\u{1F4CD} Where should MCP servers be installed?",
438
+ "prompt-type": "list",
439
+ "prompt-items": [
440
+ {
441
+ value: "global",
442
+ label: "Global (~/.claude) - Available in all projects"
443
+ },
444
+ {
445
+ value: "local",
446
+ label: "Local (./.claude) - Project-specific configuration"
447
+ }
448
+ ]
433
449
  }
434
450
  },
435
451
  required: []
@@ -838,7 +854,7 @@ init_addon_registry();
838
854
  var import_child_process = require("child_process");
839
855
  init_addon_registry();
840
856
  async function installMcpServer(options) {
841
- const { addon, additionalArgs = [], dryRun = false } = options;
857
+ const { addon, additionalArgs = [], dryRun = false, installationType = "global" } = options;
842
858
  try {
843
859
  (0, import_child_process.execSync)("claude --version", { stdio: "ignore" });
844
860
  } catch {
@@ -849,7 +865,8 @@ async function installMcpServer(options) {
849
865
  };
850
866
  }
851
867
  const serverName = addon.mcp?.serverName;
852
- let command = `claude mcp add ${serverName} --scope user`;
868
+ const scope = installationType === "local" ? "project" : "user";
869
+ let command = `claude mcp add ${serverName} --scope ${scope}`;
853
870
  if (addon.mcp?.env && Object.keys(addon.mcp.env).length > 0) {
854
871
  for (const [key, value] of Object.entries(addon.mcp.env)) {
855
872
  command += ` --env ${key}=${value}`;
@@ -892,10 +909,8 @@ async function installMcpServer(options) {
892
909
  while (attempts < maxAttempts) {
893
910
  attempts++;
894
911
  try {
895
- console.log(
896
- `
897
- \u{1F527} Installing MCP server (attempt ${attempts}/${maxAttempts})...`
898
- );
912
+ console.log(`
913
+ \u{1F527} Installing MCP server (attempt ${attempts}/${maxAttempts})...`);
899
914
  const output = (0, import_child_process.execSync)(command, {
900
915
  encoding: "utf-8",
901
916
  stdio: "pipe"
@@ -1260,6 +1275,7 @@ async function generator(tree, schema) {
1260
1275
  port: schema.port || 0,
1261
1276
  dry: schema.dry || false,
1262
1277
  installMode: "default",
1278
+ installationType: schema.installationType || "global",
1263
1279
  dryRun: isDryRun
1264
1280
  };
1265
1281
  } else {
@@ -1297,10 +1313,8 @@ async function installSelectedAddons(tree, options) {
1297
1313
  const results = [];
1298
1314
  for (let i = 0; i < selectedAddons.length; i++) {
1299
1315
  const addon = selectedAddons[i];
1300
- console.log(
1301
- `
1302
- [${i + 1}/${selectedAddons.length}] Installing: ${addon.name}`
1303
- );
1316
+ console.log(`
1317
+ [${i + 1}/${selectedAddons.length}] Installing: ${addon.name}`);
1304
1318
  console.log(` ${addon.description}`);
1305
1319
  try {
1306
1320
  if (!options.force && !options.dryRun) {
@@ -1341,23 +1355,17 @@ async function installSelectedAddons(tree, options) {
1341
1355
  });
1342
1356
  options.projectPath = projectPath;
1343
1357
  if (options.dryRun) {
1344
- console.log(
1345
- `
1346
- \u{1F4C1} [DRY-RUN] Would set up project configuration at: ${projectPath}`
1347
- );
1358
+ console.log(`
1359
+ \u{1F4C1} [DRY-RUN] Would set up project configuration at: ${projectPath}`);
1348
1360
  }
1349
1361
  await installProjectSetup(addon, options);
1350
1362
  } else if (options.dryRun) {
1351
- console.log(
1352
- "\n\u{1F4C1} [DRY-RUN] Skipping project configuration (user chose not to set up)"
1353
- );
1363
+ console.log("\n\u{1F4C1} [DRY-RUN] Skipping project configuration (user chose not to set up)");
1354
1364
  }
1355
1365
  }
1356
1366
  results.push({ addon, success: true });
1357
1367
  } catch (error) {
1358
- console.error(
1359
- ` \u274C Failed: ${error instanceof Error ? error.message : String(error)}`
1360
- );
1368
+ console.error(` \u274C Failed: ${error instanceof Error ? error.message : String(error)}`);
1361
1369
  results.push({
1362
1370
  addon,
1363
1371
  success: false,
@@ -1374,9 +1382,7 @@ async function installSelectedAddons(tree, options) {
1374
1382
  if (failed.length > 0) {
1375
1383
  console.log(`
1376
1384
  \u274C Failed to install: ${failed.length}`);
1377
- failed.forEach(
1378
- (r) => console.log(` \u2022 ${r.addon.name} - ${r.error || "Unknown error"}`)
1379
- );
1385
+ failed.forEach((r) => console.log(` \u2022 ${r.addon.name} - ${r.error || "Unknown error"}`));
1380
1386
  }
1381
1387
  if (options.dryRun) {
1382
1388
  console.log("\n\u2728 Dry-run complete! No changes were made.\n");
@@ -1422,9 +1428,7 @@ async function installAllAddons(tree, options) {
1422
1428
  await installMcpAddon(addon, options);
1423
1429
  results.push({ addon, success: true });
1424
1430
  } catch (error) {
1425
- console.error(
1426
- ` \u274C Failed: ${error instanceof Error ? error.message : String(error)}`
1427
- );
1431
+ console.error(` \u274C Failed: ${error instanceof Error ? error.message : String(error)}`);
1428
1432
  results.push({
1429
1433
  addon,
1430
1434
  success: false,
@@ -1441,9 +1445,7 @@ async function installAllAddons(tree, options) {
1441
1445
  if (failed.length > 0) {
1442
1446
  console.log(`
1443
1447
  \u274C Failed to install: ${failed.length}`);
1444
- failed.forEach(
1445
- (r) => console.log(` \u2022 ${r.addon.name} - ${r.error || "Unknown error"}`)
1446
- );
1448
+ failed.forEach((r) => console.log(` \u2022 ${r.addon.name} - ${r.error || "Unknown error"}`));
1447
1449
  }
1448
1450
  if (options.dryRun) {
1449
1451
  console.log("\n\u2728 Dry-run complete! No changes were made.\n");
@@ -1482,7 +1484,8 @@ async function installMcpAddon(addon, options) {
1482
1484
  const installResult = await installMcpServer({
1483
1485
  addon,
1484
1486
  additionalArgs,
1485
- dryRun: options.dryRun
1487
+ dryRun: options.dryRun,
1488
+ installationType: options.installationType || "global"
1486
1489
  });
1487
1490
  if (!installResult.success) {
1488
1491
  throw new Error(installResult.error || installResult.message);
@@ -1524,9 +1527,7 @@ function showGeneralMcpInstructions(installedAddons) {
1524
1527
  const hasSlack = installedAddons.some((addon) => addon.id === "slack-mcp");
1525
1528
  const hasGithub = installedAddons.some((addon) => addon.id === "github-mcp");
1526
1529
  const hasPulumi = installedAddons.some((addon) => addon.id === "pulumi-mcp");
1527
- const hasAws = installedAddons.some(
1528
- (addon) => addon.id === "aws-log-analyzer-mcp"
1529
- );
1530
+ const hasAws = installedAddons.some((addon) => addon.id === "aws-log-analyzer-mcp");
1530
1531
  if (hasSlack || hasGithub || hasAws || hasPulumi) {
1531
1532
  console.log("\u{1F4CB} Specific Authentication Instructions:\n");
1532
1533
  if (hasSlack) {
@@ -1542,18 +1543,12 @@ function showGeneralMcpInstructions(installedAddons) {
1542
1543
  console.log("\u{1F510} GitHub MCP:");
1543
1544
  console.log(" You can obtain your GitHub Personal Access Token using:");
1544
1545
  console.log(" $ gh auth token");
1545
- console.log(
1546
- " (Requires GitHub CLI to be installed and authenticated)\n"
1547
- );
1546
+ console.log(" (Requires GitHub CLI to be installed and authenticated)\n");
1548
1547
  }
1549
1548
  if (hasAws) {
1550
1549
  console.log("\u{1F510} AWS Log Analyzer MCP:");
1551
- console.log(
1552
- " Requires AWS credentials with CloudWatchLogsReadOnlyAccess"
1553
- );
1554
- console.log(
1555
- " \u{1F4D6} Documentation: https://github.com/awslabs/Log-Analyzer-with-MCP\n"
1556
- );
1550
+ console.log(" Requires AWS credentials with CloudWatchLogsReadOnlyAccess");
1551
+ console.log(" \u{1F4D6} Documentation: https://github.com/awslabs/Log-Analyzer-with-MCP\n");
1557
1552
  }
1558
1553
  if (hasPulumi) {
1559
1554
  console.log("\u{1F510} Pulumi MCP:");
@@ -1563,9 +1558,7 @@ function showGeneralMcpInstructions(installedAddons) {
1563
1558
  console.log(
1564
1559
  " \u{1F4D6} Documentation: https://www.pulumi.com/docs/iac/guides/ai-integration/mcp-server/"
1565
1560
  );
1566
- console.log(
1567
- " Create your PAT at: https://app.pulumi.com/account/tokens\n"
1568
- );
1561
+ console.log(" Create your PAT at: https://app.pulumi.com/account/tokens\n");
1569
1562
  }
1570
1563
  }
1571
1564
  }
@@ -93,7 +93,25 @@
93
93
  "type": "string",
94
94
  "description": "Installation mode from parent generator (default or custom)",
95
95
  "enum": ["default", "custom"],
96
- "hidden": true
96
+ "hidden": true,
97
+ "x-skip-prompt": true
98
+ },
99
+ "installationType": {
100
+ "type": "string",
101
+ "description": "Installation location for MCP servers",
102
+ "enum": ["global", "local"],
103
+ "prompt-message": "📍 Where should MCP servers be installed?",
104
+ "prompt-type": "list",
105
+ "prompt-items": [
106
+ {
107
+ "value": "global",
108
+ "label": "Global (~/.claude) - Available in all projects"
109
+ },
110
+ {
111
+ "value": "local",
112
+ "label": "Local (./.claude) - Project-specific configuration"
113
+ }
114
+ ]
97
115
  }
98
116
  },
99
117
  "required": []
@@ -127,9 +127,7 @@ async function validateAddonRequirements(addonId) {
127
127
  if (addon.requirements?.node) {
128
128
  const nodeVersion = process.version;
129
129
  if (!nodeVersion.match(/v1[89]\.\d+\.\d+/) && !nodeVersion.match(/v2\d+\.\d+\.\d+/)) {
130
- errors.push(
131
- `Node.js ${addon.requirements.node} required, found ${nodeVersion}`
132
- );
130
+ errors.push(`Node.js ${addon.requirements.node} required, found ${nodeVersion}`);
133
131
  }
134
132
  }
135
133
  if (addon.requirements?.commands) {
@@ -233,13 +231,13 @@ var init_addon_registry = __esm({
233
231
  {
234
232
  id: "linear-mcp",
235
233
  name: "Linear MCP",
236
- description: "MCP server for Linear issue tracking (SSE)",
234
+ description: "MCP server for Linear issue tracking (HTTP)",
237
235
  type: "mcp-server",
238
236
  packageName: "linear",
239
237
  mcp: {
240
238
  serverName: "linear",
241
- command: "npx",
242
- args: ["-y", "mcp-remote", "https://mcp.linear.app/sse"]
239
+ transport: "http",
240
+ url: "https://mcp.linear.app/mcp"
243
241
  }
244
242
  },
245
243
  {
@@ -429,7 +427,25 @@ var require_schema = __commonJS({
429
427
  type: "string",
430
428
  description: "Installation mode from parent generator (default or custom)",
431
429
  enum: ["default", "custom"],
432
- hidden: true
430
+ hidden: true,
431
+ "x-skip-prompt": true
432
+ },
433
+ installationType: {
434
+ type: "string",
435
+ description: "Installation location for MCP servers",
436
+ enum: ["global", "local"],
437
+ "prompt-message": "\u{1F4CD} Where should MCP servers be installed?",
438
+ "prompt-type": "list",
439
+ "prompt-items": [
440
+ {
441
+ value: "global",
442
+ label: "Global (~/.claude) - Available in all projects"
443
+ },
444
+ {
445
+ value: "local",
446
+ label: "Local (./.claude) - Project-specific configuration"
447
+ }
448
+ ]
433
449
  }
434
450
  },
435
451
  required: []
@@ -2072,7 +2088,7 @@ init_addon_registry();
2072
2088
  var import_child_process4 = require("child_process");
2073
2089
  init_addon_registry();
2074
2090
  async function installMcpServer(options) {
2075
- const { addon, additionalArgs = [], dryRun = false } = options;
2091
+ const { addon, additionalArgs = [], dryRun = false, installationType = "global" } = options;
2076
2092
  try {
2077
2093
  (0, import_child_process4.execSync)("claude --version", { stdio: "ignore" });
2078
2094
  } catch {
@@ -2083,7 +2099,8 @@ async function installMcpServer(options) {
2083
2099
  };
2084
2100
  }
2085
2101
  const serverName = addon.mcp?.serverName;
2086
- let command = `claude mcp add ${serverName} --scope user`;
2102
+ const scope = installationType === "local" ? "project" : "user";
2103
+ let command = `claude mcp add ${serverName} --scope ${scope}`;
2087
2104
  if (addon.mcp?.env && Object.keys(addon.mcp.env).length > 0) {
2088
2105
  for (const [key, value] of Object.entries(addon.mcp.env)) {
2089
2106
  command += ` --env ${key}=${value}`;
@@ -2126,10 +2143,8 @@ async function installMcpServer(options) {
2126
2143
  while (attempts < maxAttempts) {
2127
2144
  attempts++;
2128
2145
  try {
2129
- console.log(
2130
- `
2131
- \u{1F527} Installing MCP server (attempt ${attempts}/${maxAttempts})...`
2132
- );
2146
+ console.log(`
2147
+ \u{1F527} Installing MCP server (attempt ${attempts}/${maxAttempts})...`);
2133
2148
  const output = (0, import_child_process4.execSync)(command, {
2134
2149
  encoding: "utf-8",
2135
2150
  stdio: "pipe"
@@ -2494,6 +2509,7 @@ async function generator(tree, schema) {
2494
2509
  port: schema.port || 0,
2495
2510
  dry: schema.dry || false,
2496
2511
  installMode: "default",
2512
+ installationType: schema.installationType || "global",
2497
2513
  dryRun: isDryRun
2498
2514
  };
2499
2515
  } else {
@@ -2531,10 +2547,8 @@ async function installSelectedAddons(tree, options) {
2531
2547
  const results = [];
2532
2548
  for (let i = 0; i < selectedAddons.length; i++) {
2533
2549
  const addon = selectedAddons[i];
2534
- console.log(
2535
- `
2536
- [${i + 1}/${selectedAddons.length}] Installing: ${addon.name}`
2537
- );
2550
+ console.log(`
2551
+ [${i + 1}/${selectedAddons.length}] Installing: ${addon.name}`);
2538
2552
  console.log(` ${addon.description}`);
2539
2553
  try {
2540
2554
  if (!options.force && !options.dryRun) {
@@ -2575,23 +2589,17 @@ async function installSelectedAddons(tree, options) {
2575
2589
  });
2576
2590
  options.projectPath = projectPath;
2577
2591
  if (options.dryRun) {
2578
- console.log(
2579
- `
2580
- \u{1F4C1} [DRY-RUN] Would set up project configuration at: ${projectPath}`
2581
- );
2592
+ console.log(`
2593
+ \u{1F4C1} [DRY-RUN] Would set up project configuration at: ${projectPath}`);
2582
2594
  }
2583
2595
  await installProjectSetup(addon, options);
2584
2596
  } else if (options.dryRun) {
2585
- console.log(
2586
- "\n\u{1F4C1} [DRY-RUN] Skipping project configuration (user chose not to set up)"
2587
- );
2597
+ console.log("\n\u{1F4C1} [DRY-RUN] Skipping project configuration (user chose not to set up)");
2588
2598
  }
2589
2599
  }
2590
2600
  results.push({ addon, success: true });
2591
2601
  } catch (error) {
2592
- console.error(
2593
- ` \u274C Failed: ${error instanceof Error ? error.message : String(error)}`
2594
- );
2602
+ console.error(` \u274C Failed: ${error instanceof Error ? error.message : String(error)}`);
2595
2603
  results.push({
2596
2604
  addon,
2597
2605
  success: false,
@@ -2608,9 +2616,7 @@ async function installSelectedAddons(tree, options) {
2608
2616
  if (failed.length > 0) {
2609
2617
  console.log(`
2610
2618
  \u274C Failed to install: ${failed.length}`);
2611
- failed.forEach(
2612
- (r) => console.log(` \u2022 ${r.addon.name} - ${r.error || "Unknown error"}`)
2613
- );
2619
+ failed.forEach((r) => console.log(` \u2022 ${r.addon.name} - ${r.error || "Unknown error"}`));
2614
2620
  }
2615
2621
  if (options.dryRun) {
2616
2622
  console.log("\n\u2728 Dry-run complete! No changes were made.\n");
@@ -2656,9 +2662,7 @@ async function installAllAddons(tree, options) {
2656
2662
  await installMcpAddon(addon, options);
2657
2663
  results.push({ addon, success: true });
2658
2664
  } catch (error) {
2659
- console.error(
2660
- ` \u274C Failed: ${error instanceof Error ? error.message : String(error)}`
2661
- );
2665
+ console.error(` \u274C Failed: ${error instanceof Error ? error.message : String(error)}`);
2662
2666
  results.push({
2663
2667
  addon,
2664
2668
  success: false,
@@ -2675,9 +2679,7 @@ async function installAllAddons(tree, options) {
2675
2679
  if (failed.length > 0) {
2676
2680
  console.log(`
2677
2681
  \u274C Failed to install: ${failed.length}`);
2678
- failed.forEach(
2679
- (r) => console.log(` \u2022 ${r.addon.name} - ${r.error || "Unknown error"}`)
2680
- );
2682
+ failed.forEach((r) => console.log(` \u2022 ${r.addon.name} - ${r.error || "Unknown error"}`));
2681
2683
  }
2682
2684
  if (options.dryRun) {
2683
2685
  console.log("\n\u2728 Dry-run complete! No changes were made.\n");
@@ -2716,7 +2718,8 @@ async function installMcpAddon(addon, options) {
2716
2718
  const installResult = await installMcpServer({
2717
2719
  addon,
2718
2720
  additionalArgs,
2719
- dryRun: options.dryRun
2721
+ dryRun: options.dryRun,
2722
+ installationType: options.installationType || "global"
2720
2723
  });
2721
2724
  if (!installResult.success) {
2722
2725
  throw new Error(installResult.error || installResult.message);
@@ -2758,9 +2761,7 @@ function showGeneralMcpInstructions(installedAddons) {
2758
2761
  const hasSlack = installedAddons.some((addon) => addon.id === "slack-mcp");
2759
2762
  const hasGithub = installedAddons.some((addon) => addon.id === "github-mcp");
2760
2763
  const hasPulumi = installedAddons.some((addon) => addon.id === "pulumi-mcp");
2761
- const hasAws = installedAddons.some(
2762
- (addon) => addon.id === "aws-log-analyzer-mcp"
2763
- );
2764
+ const hasAws = installedAddons.some((addon) => addon.id === "aws-log-analyzer-mcp");
2764
2765
  if (hasSlack || hasGithub || hasAws || hasPulumi) {
2765
2766
  console.log("\u{1F4CB} Specific Authentication Instructions:\n");
2766
2767
  if (hasSlack) {
@@ -2776,18 +2777,12 @@ function showGeneralMcpInstructions(installedAddons) {
2776
2777
  console.log("\u{1F510} GitHub MCP:");
2777
2778
  console.log(" You can obtain your GitHub Personal Access Token using:");
2778
2779
  console.log(" $ gh auth token");
2779
- console.log(
2780
- " (Requires GitHub CLI to be installed and authenticated)\n"
2781
- );
2780
+ console.log(" (Requires GitHub CLI to be installed and authenticated)\n");
2782
2781
  }
2783
2782
  if (hasAws) {
2784
2783
  console.log("\u{1F510} AWS Log Analyzer MCP:");
2785
- console.log(
2786
- " Requires AWS credentials with CloudWatchLogsReadOnlyAccess"
2787
- );
2788
- console.log(
2789
- " \u{1F4D6} Documentation: https://github.com/awslabs/Log-Analyzer-with-MCP\n"
2790
- );
2784
+ console.log(" Requires AWS credentials with CloudWatchLogsReadOnlyAccess");
2785
+ console.log(" \u{1F4D6} Documentation: https://github.com/awslabs/Log-Analyzer-with-MCP\n");
2791
2786
  }
2792
2787
  if (hasPulumi) {
2793
2788
  console.log("\u{1F510} Pulumi MCP:");
@@ -2797,9 +2792,7 @@ function showGeneralMcpInstructions(installedAddons) {
2797
2792
  console.log(
2798
2793
  " \u{1F4D6} Documentation: https://www.pulumi.com/docs/iac/guides/ai-integration/mcp-server/"
2799
2794
  );
2800
- console.log(
2801
- " Create your PAT at: https://app.pulumi.com/account/tokens\n"
2802
- );
2795
+ console.log(" Create your PAT at: https://app.pulumi.com/account/tokens\n");
2803
2796
  }
2804
2797
  }
2805
2798
  }
@@ -3158,7 +3151,8 @@ async function initGenerator(tree, options) {
3158
3151
  skipVerification: false,
3159
3152
  dashboardMode: "always",
3160
3153
  port: 0,
3161
- installMode: normalizedOptions.addonSelectionMode === "specific" ? "custom" : "default"
3154
+ installMode: normalizedOptions.addonSelectionMode === "specific" ? "custom" : "default",
3155
+ installationType: normalizedOptions.installationType || "global"
3162
3156
  });
3163
3157
  import_devkit7.logger.info("\u2705 Addons installed successfully");
3164
3158
  addonsInstalled = true;
package/dist/index.cjs CHANGED
@@ -127,9 +127,7 @@ async function validateAddonRequirements(addonId) {
127
127
  if (addon.requirements?.node) {
128
128
  const nodeVersion = process.version;
129
129
  if (!nodeVersion.match(/v1[89]\.\d+\.\d+/) && !nodeVersion.match(/v2\d+\.\d+\.\d+/)) {
130
- errors.push(
131
- `Node.js ${addon.requirements.node} required, found ${nodeVersion}`
132
- );
130
+ errors.push(`Node.js ${addon.requirements.node} required, found ${nodeVersion}`);
133
131
  }
134
132
  }
135
133
  if (addon.requirements?.commands) {
@@ -233,13 +231,13 @@ var init_addon_registry = __esm({
233
231
  {
234
232
  id: "linear-mcp",
235
233
  name: "Linear MCP",
236
- description: "MCP server for Linear issue tracking (SSE)",
234
+ description: "MCP server for Linear issue tracking (HTTP)",
237
235
  type: "mcp-server",
238
236
  packageName: "linear",
239
237
  mcp: {
240
238
  serverName: "linear",
241
- command: "npx",
242
- args: ["-y", "mcp-remote", "https://mcp.linear.app/sse"]
239
+ transport: "http",
240
+ url: "https://mcp.linear.app/mcp"
243
241
  }
244
242
  },
245
243
  {
@@ -429,7 +427,25 @@ var require_schema = __commonJS({
429
427
  type: "string",
430
428
  description: "Installation mode from parent generator (default or custom)",
431
429
  enum: ["default", "custom"],
432
- hidden: true
430
+ hidden: true,
431
+ "x-skip-prompt": true
432
+ },
433
+ installationType: {
434
+ type: "string",
435
+ description: "Installation location for MCP servers",
436
+ enum: ["global", "local"],
437
+ "prompt-message": "\u{1F4CD} Where should MCP servers be installed?",
438
+ "prompt-type": "list",
439
+ "prompt-items": [
440
+ {
441
+ value: "global",
442
+ label: "Global (~/.claude) - Available in all projects"
443
+ },
444
+ {
445
+ value: "local",
446
+ label: "Local (./.claude) - Project-specific configuration"
447
+ }
448
+ ]
433
449
  }
434
450
  },
435
451
  required: []
@@ -1669,7 +1685,7 @@ init_addon_registry();
1669
1685
  var import_child_process4 = require("child_process");
1670
1686
  init_addon_registry();
1671
1687
  async function installMcpServer(options) {
1672
- const { addon, additionalArgs = [], dryRun = false } = options;
1688
+ const { addon, additionalArgs = [], dryRun = false, installationType = "global" } = options;
1673
1689
  try {
1674
1690
  (0, import_child_process4.execSync)("claude --version", { stdio: "ignore" });
1675
1691
  } catch {
@@ -1680,7 +1696,8 @@ async function installMcpServer(options) {
1680
1696
  };
1681
1697
  }
1682
1698
  const serverName = addon.mcp?.serverName;
1683
- let command = `claude mcp add ${serverName} --scope user`;
1699
+ const scope = installationType === "local" ? "project" : "user";
1700
+ let command = `claude mcp add ${serverName} --scope ${scope}`;
1684
1701
  if (addon.mcp?.env && Object.keys(addon.mcp.env).length > 0) {
1685
1702
  for (const [key, value] of Object.entries(addon.mcp.env)) {
1686
1703
  command += ` --env ${key}=${value}`;
@@ -1723,10 +1740,8 @@ async function installMcpServer(options) {
1723
1740
  while (attempts < maxAttempts) {
1724
1741
  attempts++;
1725
1742
  try {
1726
- console.log(
1727
- `
1728
- \u{1F527} Installing MCP server (attempt ${attempts}/${maxAttempts})...`
1729
- );
1743
+ console.log(`
1744
+ \u{1F527} Installing MCP server (attempt ${attempts}/${maxAttempts})...`);
1730
1745
  const output = (0, import_child_process4.execSync)(command, {
1731
1746
  encoding: "utf-8",
1732
1747
  stdio: "pipe"
@@ -2091,6 +2106,7 @@ async function generator(tree, schema) {
2091
2106
  port: schema.port || 0,
2092
2107
  dry: schema.dry || false,
2093
2108
  installMode: "default",
2109
+ installationType: schema.installationType || "global",
2094
2110
  dryRun: isDryRun
2095
2111
  };
2096
2112
  } else {
@@ -2128,10 +2144,8 @@ async function installSelectedAddons(tree, options) {
2128
2144
  const results = [];
2129
2145
  for (let i = 0; i < selectedAddons.length; i++) {
2130
2146
  const addon = selectedAddons[i];
2131
- console.log(
2132
- `
2133
- [${i + 1}/${selectedAddons.length}] Installing: ${addon.name}`
2134
- );
2147
+ console.log(`
2148
+ [${i + 1}/${selectedAddons.length}] Installing: ${addon.name}`);
2135
2149
  console.log(` ${addon.description}`);
2136
2150
  try {
2137
2151
  if (!options.force && !options.dryRun) {
@@ -2172,23 +2186,17 @@ async function installSelectedAddons(tree, options) {
2172
2186
  });
2173
2187
  options.projectPath = projectPath;
2174
2188
  if (options.dryRun) {
2175
- console.log(
2176
- `
2177
- \u{1F4C1} [DRY-RUN] Would set up project configuration at: ${projectPath}`
2178
- );
2189
+ console.log(`
2190
+ \u{1F4C1} [DRY-RUN] Would set up project configuration at: ${projectPath}`);
2179
2191
  }
2180
2192
  await installProjectSetup(addon, options);
2181
2193
  } else if (options.dryRun) {
2182
- console.log(
2183
- "\n\u{1F4C1} [DRY-RUN] Skipping project configuration (user chose not to set up)"
2184
- );
2194
+ console.log("\n\u{1F4C1} [DRY-RUN] Skipping project configuration (user chose not to set up)");
2185
2195
  }
2186
2196
  }
2187
2197
  results.push({ addon, success: true });
2188
2198
  } catch (error) {
2189
- console.error(
2190
- ` \u274C Failed: ${error instanceof Error ? error.message : String(error)}`
2191
- );
2199
+ console.error(` \u274C Failed: ${error instanceof Error ? error.message : String(error)}`);
2192
2200
  results.push({
2193
2201
  addon,
2194
2202
  success: false,
@@ -2205,9 +2213,7 @@ async function installSelectedAddons(tree, options) {
2205
2213
  if (failed.length > 0) {
2206
2214
  console.log(`
2207
2215
  \u274C Failed to install: ${failed.length}`);
2208
- failed.forEach(
2209
- (r) => console.log(` \u2022 ${r.addon.name} - ${r.error || "Unknown error"}`)
2210
- );
2216
+ failed.forEach((r) => console.log(` \u2022 ${r.addon.name} - ${r.error || "Unknown error"}`));
2211
2217
  }
2212
2218
  if (options.dryRun) {
2213
2219
  console.log("\n\u2728 Dry-run complete! No changes were made.\n");
@@ -2253,9 +2259,7 @@ async function installAllAddons(tree, options) {
2253
2259
  await installMcpAddon(addon, options);
2254
2260
  results.push({ addon, success: true });
2255
2261
  } catch (error) {
2256
- console.error(
2257
- ` \u274C Failed: ${error instanceof Error ? error.message : String(error)}`
2258
- );
2262
+ console.error(` \u274C Failed: ${error instanceof Error ? error.message : String(error)}`);
2259
2263
  results.push({
2260
2264
  addon,
2261
2265
  success: false,
@@ -2272,9 +2276,7 @@ async function installAllAddons(tree, options) {
2272
2276
  if (failed.length > 0) {
2273
2277
  console.log(`
2274
2278
  \u274C Failed to install: ${failed.length}`);
2275
- failed.forEach(
2276
- (r) => console.log(` \u2022 ${r.addon.name} - ${r.error || "Unknown error"}`)
2277
- );
2279
+ failed.forEach((r) => console.log(` \u2022 ${r.addon.name} - ${r.error || "Unknown error"}`));
2278
2280
  }
2279
2281
  if (options.dryRun) {
2280
2282
  console.log("\n\u2728 Dry-run complete! No changes were made.\n");
@@ -2313,7 +2315,8 @@ async function installMcpAddon(addon, options) {
2313
2315
  const installResult = await installMcpServer({
2314
2316
  addon,
2315
2317
  additionalArgs,
2316
- dryRun: options.dryRun
2318
+ dryRun: options.dryRun,
2319
+ installationType: options.installationType || "global"
2317
2320
  });
2318
2321
  if (!installResult.success) {
2319
2322
  throw new Error(installResult.error || installResult.message);
@@ -2355,9 +2358,7 @@ function showGeneralMcpInstructions(installedAddons) {
2355
2358
  const hasSlack = installedAddons.some((addon) => addon.id === "slack-mcp");
2356
2359
  const hasGithub = installedAddons.some((addon) => addon.id === "github-mcp");
2357
2360
  const hasPulumi = installedAddons.some((addon) => addon.id === "pulumi-mcp");
2358
- const hasAws = installedAddons.some(
2359
- (addon) => addon.id === "aws-log-analyzer-mcp"
2360
- );
2361
+ const hasAws = installedAddons.some((addon) => addon.id === "aws-log-analyzer-mcp");
2361
2362
  if (hasSlack || hasGithub || hasAws || hasPulumi) {
2362
2363
  console.log("\u{1F4CB} Specific Authentication Instructions:\n");
2363
2364
  if (hasSlack) {
@@ -2373,18 +2374,12 @@ function showGeneralMcpInstructions(installedAddons) {
2373
2374
  console.log("\u{1F510} GitHub MCP:");
2374
2375
  console.log(" You can obtain your GitHub Personal Access Token using:");
2375
2376
  console.log(" $ gh auth token");
2376
- console.log(
2377
- " (Requires GitHub CLI to be installed and authenticated)\n"
2378
- );
2377
+ console.log(" (Requires GitHub CLI to be installed and authenticated)\n");
2379
2378
  }
2380
2379
  if (hasAws) {
2381
2380
  console.log("\u{1F510} AWS Log Analyzer MCP:");
2382
- console.log(
2383
- " Requires AWS credentials with CloudWatchLogsReadOnlyAccess"
2384
- );
2385
- console.log(
2386
- " \u{1F4D6} Documentation: https://github.com/awslabs/Log-Analyzer-with-MCP\n"
2387
- );
2381
+ console.log(" Requires AWS credentials with CloudWatchLogsReadOnlyAccess");
2382
+ console.log(" \u{1F4D6} Documentation: https://github.com/awslabs/Log-Analyzer-with-MCP\n");
2388
2383
  }
2389
2384
  if (hasPulumi) {
2390
2385
  console.log("\u{1F510} Pulumi MCP:");
@@ -2394,9 +2389,7 @@ function showGeneralMcpInstructions(installedAddons) {
2394
2389
  console.log(
2395
2390
  " \u{1F4D6} Documentation: https://www.pulumi.com/docs/iac/guides/ai-integration/mcp-server/"
2396
2391
  );
2397
- console.log(
2398
- " Create your PAT at: https://app.pulumi.com/account/tokens\n"
2399
- );
2392
+ console.log(" Create your PAT at: https://app.pulumi.com/account/tokens\n");
2400
2393
  }
2401
2394
  }
2402
2395
  }
@@ -1 +1 @@
1
- {"version":3,"file":"addon-registry.d.ts","sourceRoot":"","sources":["../../../../../../src/generators/addons/addon-registry.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,uBAAuB,GACvB,4BAA4B,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,MAAM,GAAG,eAAe,CAAC;IAC5D,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,GAAG,EAAE,gBAAgB,CAAC;IACtB,gCAAgC;IAChC,YAAY,CAAC,EAAE;QACb,+BAA+B;QAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,+BAA+B;QAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,kCAAkC;IAClC,YAAY,CAAC,EAAE;QACb,8BAA8B;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,oCAAoC;QACpC,gBAAgB,EAAE,MAAM,CAAC;QACzB,0CAA0C;QAC1C,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAwLD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAEjE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,EAAE,CAEpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgDxE;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,CA4C1C;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAsC/C"}
1
+ {"version":3,"file":"addon-registry.d.ts","sourceRoot":"","sources":["../../../../../../src/generators/addons/addon-registry.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,uBAAuB,GAAG,4BAA4B,CAAC;AAEtF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,MAAM,GAAG,eAAe,CAAC;IAC5D,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,GAAG,EAAE,gBAAgB,CAAC;IACtB,gCAAgC;IAChC,YAAY,CAAC,EAAE;QACb,+BAA+B;QAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,+BAA+B;QAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,kCAAkC;IAClC,YAAY,CAAC,EAAE;QACb,8BAA8B;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,oCAAoC;QACpC,gBAAgB,EAAE,MAAM,CAAC;QACzB,0CAA0C;QAC1C,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAoLD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAEjE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,EAAE,CAEpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA4CxE;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,CAwC1C;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAiC/C"}
@@ -9,6 +9,8 @@ export interface MCPInstallOptions {
9
9
  additionalArgs?: string[];
10
10
  /** Whether to use dry-run mode */
11
11
  dryRun?: boolean;
12
+ /** Installation location: global (~/.claude) or local (./.claude) */
13
+ installationType?: 'global' | 'local';
12
14
  }
13
15
  /**
14
16
  * Install an MCP server using Claude CLI
@@ -1 +1 @@
1
- {"version":3,"file":"claude-mcp-installer.d.ts","sourceRoot":"","sources":["../../../../../../src/generators/addons/claude-mcp-installer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,kBAAkB,CAAC;AAG1B;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kCAAkC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CA6ID;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACvE,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB,CAAC,CAgCD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE;IACV,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB,GACA,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAkDhD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACjE,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAiCD"}
1
+ {"version":3,"file":"claude-mcp-installer.d.ts","sourceRoot":"","sources":["../../../../../../src/generators/addons/claude-mcp-installer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,kBAAkB,CAAC;AAG1B;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kCAAkC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACvC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAyID;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACvE,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB,CAAC,CAgCD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE;IACV,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB,GACA,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA8ChD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACjE,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAiCD"}
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../../../src/generators/addons/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAuBtD;;GAEG;AACH,wBAA8B,SAAS,CACrC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAqEf"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../../../src/generators/addons/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAiBtD;;GAEG;AACH,wBAA8B,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqEhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../../../src/generators/init/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAyDpD,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,mBAAmB,iBAif3E;AA4ID,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../../../src/generators/init/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAyDpD,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,mBAAmB,iBAkf3E;AA4ID,eAAe,aAAa,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniswap/ai-toolkit-nx-claude",
3
- "version": "0.5.24-next.0",
3
+ "version": "0.5.24",
4
4
  "private": false,
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.cjs",