@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.
- package/dist/generators/addons/CLAUDE.md +35 -14
- package/dist/generators/addons/generator.cjs +45 -52
- package/dist/generators/addons/schema.json +19 -1
- package/dist/generators/init/generator.cjs +47 -53
- package/dist/index.cjs +45 -52
- package/dist/packages/ai-toolkit-nx-claude/src/generators/addons/addon-registry.d.ts.map +1 -1
- package/dist/packages/ai-toolkit-nx-claude/src/generators/addons/claude-mcp-installer.d.ts +2 -0
- package/dist/packages/ai-toolkit-nx-claude/src/generators/addons/claude-mcp-installer.d.ts.map +1 -1
- package/dist/packages/ai-toolkit-nx-claude/src/generators/addons/generator.d.ts.map +1 -1
- package/dist/packages/ai-toolkit-nx-claude/src/generators/init/generator.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -23,14 +23,19 @@ npx nx generate @uniswap/ai-toolkit-nx-claude:addons \
|
|
|
23
23
|
|
|
24
24
|
### Installation Control
|
|
25
25
|
|
|
26
|
-
- `
|
|
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
|
-
- `
|
|
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
|
|
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
|
|
103
|
+
1. **Mode Selection** (if running standalone):
|
|
99
104
|
|
|
100
|
-
- All addons
|
|
101
|
-
-
|
|
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
|
-
-
|
|
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:
|
|
199
|
-
|
|
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
|
-
|
|
215
|
+
**Behavior by installMode**:
|
|
204
216
|
|
|
205
|
-
-
|
|
206
|
-
|
|
207
|
-
-
|
|
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 (
|
|
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
|
-
|
|
242
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
242
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
242
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
package/dist/packages/ai-toolkit-nx-claude/src/generators/addons/claude-mcp-installer.d.ts.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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,
|
|
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"}
|