@uniswap/ai-toolkit-nx-claude 0.5.30-next.1 → 0.5.30-next.3
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/README.md +28 -27
- package/dist/cli-generator.cjs +4 -10
- package/dist/generators/addons/CLAUDE.md +91 -91
- package/dist/generators/addons/generator.cjs +13 -338
- package/dist/generators/addons/schema.json +1 -32
- package/dist/index.cjs +25 -1180
- package/dist/packages/ai-toolkit-nx-claude/src/cli-generator.d.ts +1 -2
- package/dist/packages/ai-toolkit-nx-claude/src/cli-generator.d.ts.map +1 -1
- 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/aws-log-analyzer-setup.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/index.d.ts +0 -1
- package/dist/packages/ai-toolkit-nx-claude/src/index.d.ts.map +1 -1
- package/generators.json +0 -5
- package/package.json +2 -3
- package/dist/generators/hooks/CLAUDE.md +0 -378
- package/dist/generators/hooks/README.md +0 -220
- package/dist/generators/hooks/generator.cjs +0 -1265
- package/dist/generators/hooks/schema.json +0 -41
- package/dist/packages/ai-toolkit-nx-claude/src/generators/addons/spec-workflow-setup.d.ts +0 -52
- package/dist/packages/ai-toolkit-nx-claude/src/generators/addons/spec-workflow-setup.d.ts.map +0 -1
- package/dist/packages/ai-toolkit-nx-claude/src/generators/hooks/cli-parser.d.ts +0 -2
- package/dist/packages/ai-toolkit-nx-claude/src/generators/hooks/cli-parser.d.ts.map +0 -1
- package/dist/packages/ai-toolkit-nx-claude/src/generators/hooks/dependency-checker.d.ts +0 -46
- package/dist/packages/ai-toolkit-nx-claude/src/generators/hooks/dependency-checker.d.ts.map +0 -1
- package/dist/packages/ai-toolkit-nx-claude/src/generators/hooks/generator.d.ts +0 -9
- package/dist/packages/ai-toolkit-nx-claude/src/generators/hooks/generator.d.ts.map +0 -1
- package/dist/packages/ai-toolkit-nx-claude/src/generators/hooks/install-orchestrator.d.ts +0 -55
- package/dist/packages/ai-toolkit-nx-claude/src/generators/hooks/install-orchestrator.d.ts.map +0 -1
- package/dist/packages/ai-toolkit-nx-claude/src/generators/hooks/repo-manager.d.ts +0 -63
- package/dist/packages/ai-toolkit-nx-claude/src/generators/hooks/repo-manager.d.ts.map +0 -1
|
@@ -131,10 +131,10 @@ async function validateAddonRequirements(addonId) {
|
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
if (addon.requirements?.commands) {
|
|
134
|
-
const { execSync:
|
|
134
|
+
const { execSync: execSync3 } = require("child_process");
|
|
135
135
|
for (const cmd of addon.requirements.commands) {
|
|
136
136
|
try {
|
|
137
|
-
|
|
137
|
+
execSync3(`which ${cmd}`, { stdio: "ignore" });
|
|
138
138
|
} catch {
|
|
139
139
|
errors.push(`Required command '${cmd}' not found`);
|
|
140
140
|
}
|
|
@@ -153,53 +153,6 @@ var init_addon_registry = __esm({
|
|
|
153
153
|
import_path = require("path");
|
|
154
154
|
import_os = require("os");
|
|
155
155
|
ADDON_REGISTRY = [
|
|
156
|
-
{
|
|
157
|
-
id: "spec-workflow-mcp",
|
|
158
|
-
name: "Spec Workflow MCP",
|
|
159
|
-
description: "MCP server for spec-driven development workflow with dashboard support",
|
|
160
|
-
type: "mcp-server",
|
|
161
|
-
packageName: "@uniswap/spec-workflow-mcp",
|
|
162
|
-
mcp: {
|
|
163
|
-
serverName: "spec-workflow",
|
|
164
|
-
command: "npx",
|
|
165
|
-
args: ["@uniswap/spec-workflow-mcp@latest"],
|
|
166
|
-
supportsDashboard: true,
|
|
167
|
-
defaultPort: 50014
|
|
168
|
-
},
|
|
169
|
-
projectSetup: {
|
|
170
|
-
repositoryUrl: "https://github.com/Uniswap/spec-workflow-mcp.git",
|
|
171
|
-
configSourcePath: "configs",
|
|
172
|
-
targetDirectory: ".spec-workflow"
|
|
173
|
-
},
|
|
174
|
-
requirements: {
|
|
175
|
-
node: ">=22.0.0",
|
|
176
|
-
commands: ["git", "npm"]
|
|
177
|
-
}
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
id: "graphite-mcp",
|
|
181
|
-
name: "Graphite MCP",
|
|
182
|
-
description: "MCP server for Graphite stacked pull request workflows",
|
|
183
|
-
type: "mcp-server",
|
|
184
|
-
packageName: "gt",
|
|
185
|
-
mcp: {
|
|
186
|
-
serverName: "graphite",
|
|
187
|
-
command: "gt",
|
|
188
|
-
args: ["mcp"]
|
|
189
|
-
}
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
id: "nx-mcp",
|
|
193
|
-
name: "Nx MCP",
|
|
194
|
-
description: "MCP server for Nx monorepo workspace management",
|
|
195
|
-
type: "mcp-server",
|
|
196
|
-
packageName: "nx-mcp",
|
|
197
|
-
mcp: {
|
|
198
|
-
serverName: "nx-mcp",
|
|
199
|
-
command: "npx",
|
|
200
|
-
args: ["-y", "nx-mcp@latest"]
|
|
201
|
-
}
|
|
202
|
-
},
|
|
203
156
|
{
|
|
204
157
|
id: "slack-mcp",
|
|
205
158
|
name: "Slack MCP",
|
|
@@ -216,30 +169,6 @@ var init_addon_registry = __esm({
|
|
|
216
169
|
}
|
|
217
170
|
}
|
|
218
171
|
},
|
|
219
|
-
{
|
|
220
|
-
id: "notion-mcp",
|
|
221
|
-
name: "Notion MCP",
|
|
222
|
-
description: "MCP server for Notion workspace management (HTTP)",
|
|
223
|
-
type: "mcp-server",
|
|
224
|
-
packageName: "notion",
|
|
225
|
-
mcp: {
|
|
226
|
-
serverName: "notion",
|
|
227
|
-
transport: "http",
|
|
228
|
-
url: "https://mcp.notion.com/mcp"
|
|
229
|
-
}
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
id: "linear-mcp",
|
|
233
|
-
name: "Linear MCP",
|
|
234
|
-
description: "MCP server for Linear issue tracking (HTTP)",
|
|
235
|
-
type: "mcp-server",
|
|
236
|
-
packageName: "linear",
|
|
237
|
-
mcp: {
|
|
238
|
-
serverName: "linear",
|
|
239
|
-
transport: "http",
|
|
240
|
-
url: "https://mcp.linear.app/mcp"
|
|
241
|
-
}
|
|
242
|
-
},
|
|
243
172
|
{
|
|
244
173
|
id: "github-mcp",
|
|
245
174
|
name: "GitHub MCP",
|
|
@@ -267,19 +196,6 @@ var init_addon_registry = __esm({
|
|
|
267
196
|
url: "https://mcp.figma.com/mcp"
|
|
268
197
|
}
|
|
269
198
|
},
|
|
270
|
-
{
|
|
271
|
-
id: "chrome-devtools-mcp",
|
|
272
|
-
name: "Chrome DevTools MCP",
|
|
273
|
-
description: "MCP server for Chrome DevTools Protocol",
|
|
274
|
-
type: "mcp-server",
|
|
275
|
-
packageName: "chrome-devtools-mcp",
|
|
276
|
-
mcp: {
|
|
277
|
-
serverName: "chrome-devtools",
|
|
278
|
-
command: "npx",
|
|
279
|
-
args: ["chrome-devtools-mcp@latest"],
|
|
280
|
-
env: {}
|
|
281
|
-
}
|
|
282
|
-
},
|
|
283
199
|
{
|
|
284
200
|
id: "vercel-mcp",
|
|
285
201
|
name: "Vercel MCP",
|
|
@@ -350,7 +266,7 @@ var require_schema = __commonJS({
|
|
|
350
266
|
items: [
|
|
351
267
|
{
|
|
352
268
|
value: "all",
|
|
353
|
-
label: "All recommended MCP servers (
|
|
269
|
+
label: "All recommended MCP servers (6 servers)"
|
|
354
270
|
},
|
|
355
271
|
{
|
|
356
272
|
value: "specific",
|
|
@@ -365,18 +281,10 @@ var require_schema = __commonJS({
|
|
|
365
281
|
items: {
|
|
366
282
|
type: "string",
|
|
367
283
|
enum: [
|
|
368
|
-
"spec-workflow-mcp",
|
|
369
|
-
"graphite-mcp",
|
|
370
|
-
"nx-mcp",
|
|
371
284
|
"slack-mcp",
|
|
372
|
-
"universe-mcp",
|
|
373
|
-
"linear-mcp",
|
|
374
|
-
"notion-mcp",
|
|
375
285
|
"github-mcp",
|
|
376
286
|
"figma-mcp",
|
|
377
|
-
"chrome-devtools-mcp",
|
|
378
287
|
"vercel-mcp",
|
|
379
|
-
"supabase-mcp",
|
|
380
288
|
"aws-log-analyzer-mcp",
|
|
381
289
|
"pulumi-mcp"
|
|
382
290
|
]
|
|
@@ -385,24 +293,6 @@ var require_schema = __commonJS({
|
|
|
385
293
|
"prompt-type": "multiselect",
|
|
386
294
|
"prompt-message": "\u{1F50C} Select MCP servers to install"
|
|
387
295
|
},
|
|
388
|
-
dashboardMode: {
|
|
389
|
-
type: "string",
|
|
390
|
-
description: "Dashboard startup mode",
|
|
391
|
-
enum: ["always", "manual"],
|
|
392
|
-
default: "always",
|
|
393
|
-
"prompt-message": "\u{1F4CA} When should the spec-workflow dashboard start?",
|
|
394
|
-
"prompt-type": "select",
|
|
395
|
-
"prompt-items": [
|
|
396
|
-
{ value: "always", label: "Always (auto-start on Claude launch)" },
|
|
397
|
-
{ value: "manual", label: "Manual (start via command only)" }
|
|
398
|
-
]
|
|
399
|
-
},
|
|
400
|
-
port: {
|
|
401
|
-
type: "number",
|
|
402
|
-
description: "Dashboard port (default: auto)",
|
|
403
|
-
default: 0,
|
|
404
|
-
"prompt-message": "\u{1F50C} Dashboard port (0 for auto)"
|
|
405
|
-
},
|
|
406
296
|
force: {
|
|
407
297
|
type: "boolean",
|
|
408
298
|
description: "Force installation even if already exists",
|
|
@@ -413,11 +303,6 @@ var require_schema = __commonJS({
|
|
|
413
303
|
description: "Skip installation verification",
|
|
414
304
|
default: false
|
|
415
305
|
},
|
|
416
|
-
projectPath: {
|
|
417
|
-
type: "string",
|
|
418
|
-
description: "Path to the project where spec-workflow should be installed",
|
|
419
|
-
"x-skip-prompt": true
|
|
420
|
-
},
|
|
421
306
|
dry: {
|
|
422
307
|
type: "boolean",
|
|
423
308
|
description: "Dry run mode",
|
|
@@ -966,91 +851,11 @@ async function installMcpServer(options) {
|
|
|
966
851
|
};
|
|
967
852
|
}
|
|
968
853
|
|
|
969
|
-
// packages/ai-toolkit-nx-claude/src/generators/addons/
|
|
854
|
+
// packages/ai-toolkit-nx-claude/src/generators/addons/aws-log-analyzer-setup.ts
|
|
970
855
|
var import_child_process2 = require("child_process");
|
|
971
856
|
var import_fs2 = require("fs");
|
|
972
857
|
var import_path2 = require("path");
|
|
973
858
|
var import_os2 = require("os");
|
|
974
|
-
var import_fs3 = require("fs");
|
|
975
|
-
async function setupSpecWorkflow(projectPath, options) {
|
|
976
|
-
const targetPath = projectPath || process.cwd();
|
|
977
|
-
const targetDir = (0, import_path2.join)(targetPath, ".spec-workflow");
|
|
978
|
-
console.log(`
|
|
979
|
-
\u{1F4C1} Setting up spec-workflow in: ${targetPath}`);
|
|
980
|
-
const isUpdate = (0, import_fs2.existsSync)(targetDir);
|
|
981
|
-
if (options.dryRun) {
|
|
982
|
-
console.log("[DRY-RUN] Would create/update directory: " + targetDir);
|
|
983
|
-
console.log("[DRY-RUN] Would clone repository: @uniswap/spec-workflow-mcp");
|
|
984
|
-
console.log("[DRY-RUN] Would copy/update configuration files");
|
|
985
|
-
console.log("[DRY-RUN] Would add .spec-workflow/ to .gitignore");
|
|
986
|
-
return {
|
|
987
|
-
success: true,
|
|
988
|
-
message: "[DRY-RUN] Spec-workflow setup simulated successfully",
|
|
989
|
-
projectPath: targetPath
|
|
990
|
-
};
|
|
991
|
-
}
|
|
992
|
-
if (isUpdate) {
|
|
993
|
-
if (!options.force) {
|
|
994
|
-
const { confirm } = await require("enquirer").prompt({
|
|
995
|
-
type: "confirm",
|
|
996
|
-
name: "confirm",
|
|
997
|
-
message: `.spec-workflow directory already exists. Update configuration files from repository?`,
|
|
998
|
-
initial: true
|
|
999
|
-
});
|
|
1000
|
-
if (!confirm) {
|
|
1001
|
-
return {
|
|
1002
|
-
success: false,
|
|
1003
|
-
message: "Installation cancelled by user",
|
|
1004
|
-
projectPath: targetPath
|
|
1005
|
-
};
|
|
1006
|
-
}
|
|
1007
|
-
}
|
|
1008
|
-
console.log(
|
|
1009
|
-
"\u{1F4DD} Updating configuration files in existing .spec-workflow directory..."
|
|
1010
|
-
);
|
|
1011
|
-
} else {
|
|
1012
|
-
console.log("\u{1F4C1} Creating .spec-workflow directory...");
|
|
1013
|
-
(0, import_fs2.mkdirSync)(targetDir, { recursive: true });
|
|
1014
|
-
}
|
|
1015
|
-
const tempDir = (0, import_path2.join)((0, import_os2.tmpdir)(), `spec-workflow-${Date.now()}`);
|
|
1016
|
-
console.log("\u{1F504} Cloning spec-workflow repository...");
|
|
1017
|
-
const cloneResult = await cloneRepository(
|
|
1018
|
-
"https://github.com/Uniswap/spec-workflow-mcp.git",
|
|
1019
|
-
tempDir
|
|
1020
|
-
);
|
|
1021
|
-
if (!cloneResult.success) {
|
|
1022
|
-
return {
|
|
1023
|
-
success: false,
|
|
1024
|
-
message: cloneResult.error || "Failed to clone repository",
|
|
1025
|
-
projectPath: targetPath
|
|
1026
|
-
};
|
|
1027
|
-
}
|
|
1028
|
-
console.log("\u{1F4CB} Copying configuration files...");
|
|
1029
|
-
const configSourcePath = (0, import_path2.join)(tempDir, "configs");
|
|
1030
|
-
const copyResult = await copyConfigFiles(configSourcePath, targetDir);
|
|
1031
|
-
console.log("\u{1F9F9} Cleaning up temporary files...");
|
|
1032
|
-
(0, import_fs2.rmSync)(tempDir, { recursive: true, force: true });
|
|
1033
|
-
if (!copyResult.success) {
|
|
1034
|
-
return {
|
|
1035
|
-
success: false,
|
|
1036
|
-
message: copyResult.error || "Failed to copy configuration files",
|
|
1037
|
-
projectPath: targetPath
|
|
1038
|
-
};
|
|
1039
|
-
}
|
|
1040
|
-
console.log("\u{1F4DD} Updating .gitignore...");
|
|
1041
|
-
const gitignoreResult = await updateGitignore(targetPath, ".spec-workflow/");
|
|
1042
|
-
if (!gitignoreResult.success) {
|
|
1043
|
-
console.warn("\u26A0\uFE0F Warning:", gitignoreResult.message);
|
|
1044
|
-
} else {
|
|
1045
|
-
console.log("\u2705", gitignoreResult.message);
|
|
1046
|
-
}
|
|
1047
|
-
return {
|
|
1048
|
-
success: true,
|
|
1049
|
-
message: isUpdate ? "The spec-workflow configuration has been updated with the latest templates and settings" : "The spec-workflow package has been added to the project with automatic agent orchestration enabled",
|
|
1050
|
-
projectPath: targetPath,
|
|
1051
|
-
createdFiles: copyResult.copiedFiles
|
|
1052
|
-
};
|
|
1053
|
-
}
|
|
1054
859
|
async function cloneRepository(repositoryUrl, targetDir) {
|
|
1055
860
|
try {
|
|
1056
861
|
if (!(0, import_fs2.existsSync)(targetDir)) {
|
|
@@ -1093,97 +898,12 @@ async function cloneRepository(repositoryUrl, targetDir) {
|
|
|
1093
898
|
};
|
|
1094
899
|
}
|
|
1095
900
|
}
|
|
1096
|
-
async function updateGitignore(projectPath, pattern) {
|
|
1097
|
-
const gitignorePath = (0, import_path2.join)(projectPath, ".gitignore");
|
|
1098
|
-
try {
|
|
1099
|
-
let gitignoreContent = "";
|
|
1100
|
-
if ((0, import_fs2.existsSync)(gitignorePath)) {
|
|
1101
|
-
gitignoreContent = (0, import_fs2.readFileSync)(gitignorePath, "utf8");
|
|
1102
|
-
}
|
|
1103
|
-
const lines = gitignoreContent.split("\n");
|
|
1104
|
-
const patternExists = lines.some((line) => {
|
|
1105
|
-
const trimmedLine = line.trim();
|
|
1106
|
-
return trimmedLine === pattern || trimmedLine === pattern.replace(/\/$/, "");
|
|
1107
|
-
});
|
|
1108
|
-
if (patternExists) {
|
|
1109
|
-
return {
|
|
1110
|
-
success: true,
|
|
1111
|
-
message: `.gitignore already contains ${pattern}`
|
|
1112
|
-
};
|
|
1113
|
-
}
|
|
1114
|
-
const updatedContent = gitignoreContent.trim() === "" ? pattern : `${gitignoreContent.trim()}
|
|
1115
|
-
|
|
1116
|
-
# Spec workflow configuration
|
|
1117
|
-
${pattern}`;
|
|
1118
|
-
(0, import_fs2.writeFileSync)(gitignorePath, updatedContent + "\n", "utf8");
|
|
1119
|
-
return {
|
|
1120
|
-
success: true,
|
|
1121
|
-
message: `Added ${pattern} to .gitignore`
|
|
1122
|
-
};
|
|
1123
|
-
} catch (error) {
|
|
1124
|
-
console.error("\u274C Failed to update .gitignore:", error.message);
|
|
1125
|
-
return {
|
|
1126
|
-
success: false,
|
|
1127
|
-
message: `Failed to update .gitignore: ${error.message}`
|
|
1128
|
-
};
|
|
1129
|
-
}
|
|
1130
|
-
}
|
|
1131
|
-
async function copyConfigFiles(sourceDir, targetDir) {
|
|
1132
|
-
try {
|
|
1133
|
-
let listFiles2 = function(dir, baseDir = dir, sourceBase = sourceDir) {
|
|
1134
|
-
const files = fs2.readdirSync(dir);
|
|
1135
|
-
for (const file of files) {
|
|
1136
|
-
const filePath = (0, import_path2.join)(dir, file);
|
|
1137
|
-
const stat = fs2.statSync(filePath);
|
|
1138
|
-
if (stat.isDirectory()) {
|
|
1139
|
-
listFiles2(filePath, baseDir, sourceBase);
|
|
1140
|
-
} else {
|
|
1141
|
-
const relativePath = filePath.replace(baseDir + "/", "");
|
|
1142
|
-
const sourceFile = (0, import_path2.join)(sourceBase, relativePath);
|
|
1143
|
-
if ((0, import_fs2.existsSync)(sourceFile)) {
|
|
1144
|
-
copiedFiles.push(relativePath);
|
|
1145
|
-
}
|
|
1146
|
-
}
|
|
1147
|
-
}
|
|
1148
|
-
};
|
|
1149
|
-
var listFiles = listFiles2;
|
|
1150
|
-
if (!(0, import_fs2.existsSync)(sourceDir)) {
|
|
1151
|
-
return {
|
|
1152
|
-
success: false,
|
|
1153
|
-
message: "Source directory not found",
|
|
1154
|
-
error: `The configs directory was not found in the cloned repository`
|
|
1155
|
-
};
|
|
1156
|
-
}
|
|
1157
|
-
(0, import_fs3.cpSync)(sourceDir, targetDir, { recursive: true });
|
|
1158
|
-
const fs2 = require("fs");
|
|
1159
|
-
const copiedFiles = [];
|
|
1160
|
-
listFiles2(targetDir, targetDir, sourceDir);
|
|
1161
|
-
return {
|
|
1162
|
-
success: true,
|
|
1163
|
-
message: "Configuration files copied successfully",
|
|
1164
|
-
copiedFiles
|
|
1165
|
-
};
|
|
1166
|
-
} catch (error) {
|
|
1167
|
-
console.error("\u274C File copy failed:", error.message);
|
|
1168
|
-
return {
|
|
1169
|
-
success: false,
|
|
1170
|
-
message: "Failed to copy configuration files",
|
|
1171
|
-
error: error.message
|
|
1172
|
-
};
|
|
1173
|
-
}
|
|
1174
|
-
}
|
|
1175
|
-
|
|
1176
|
-
// packages/ai-toolkit-nx-claude/src/generators/addons/aws-log-analyzer-setup.ts
|
|
1177
|
-
var import_child_process3 = require("child_process");
|
|
1178
|
-
var import_fs4 = require("fs");
|
|
1179
|
-
var import_path3 = require("path");
|
|
1180
|
-
var import_os3 = require("os");
|
|
1181
901
|
async function setupAwsLogAnalyzer(options) {
|
|
1182
|
-
const targetPath = (0,
|
|
1183
|
-
const serverPath = (0,
|
|
902
|
+
const targetPath = (0, import_path2.join)((0, import_os2.homedir)(), ".aws-log-analyzer-mcp");
|
|
903
|
+
const serverPath = (0, import_path2.join)(targetPath, "src", "cw-mcp-server");
|
|
1184
904
|
console.log(`
|
|
1185
905
|
\u{1F4C1} Setting up AWS Log Analyzer MCP in: ${targetPath}`);
|
|
1186
|
-
const isUpdate = (0,
|
|
906
|
+
const isUpdate = (0, import_fs2.existsSync)(targetPath);
|
|
1187
907
|
if (options.dryRun) {
|
|
1188
908
|
console.log("[DRY-RUN] Would clone repository to: " + targetPath);
|
|
1189
909
|
console.log("[DRY-RUN] MCP server would run from: " + serverPath);
|
|
@@ -1214,10 +934,10 @@ async function setupAwsLogAnalyzer(options) {
|
|
|
1214
934
|
}
|
|
1215
935
|
}
|
|
1216
936
|
console.log("\u{1F504} Updating AWS Log Analyzer repository...");
|
|
1217
|
-
(0,
|
|
937
|
+
(0, import_fs2.rmSync)(targetPath, { recursive: true, force: true });
|
|
1218
938
|
}
|
|
1219
939
|
console.log("\u{1F4C1} Creating installation directory...");
|
|
1220
|
-
(0,
|
|
940
|
+
(0, import_fs2.mkdirSync)(targetPath, { recursive: true });
|
|
1221
941
|
console.log("\u{1F504} Cloning AWS Log Analyzer repository...");
|
|
1222
942
|
const cloneResult = await cloneRepository(
|
|
1223
943
|
"https://github.com/awslabs/Log-Analyzer-with-MCP.git",
|
|
@@ -1232,7 +952,7 @@ async function setupAwsLogAnalyzer(options) {
|
|
|
1232
952
|
}
|
|
1233
953
|
console.log("\u{1F4E6} Installing Python dependencies with uv...");
|
|
1234
954
|
try {
|
|
1235
|
-
(0,
|
|
955
|
+
(0, import_child_process2.execSync)("uv sync", {
|
|
1236
956
|
cwd: targetPath,
|
|
1237
957
|
stdio: "inherit",
|
|
1238
958
|
encoding: "utf8"
|
|
@@ -1251,10 +971,10 @@ async function setupAwsLogAnalyzer(options) {
|
|
|
1251
971
|
};
|
|
1252
972
|
}
|
|
1253
973
|
function getAwsLogAnalyzerPath() {
|
|
1254
|
-
return (0,
|
|
974
|
+
return (0, import_path2.join)((0, import_os2.homedir)(), ".aws-log-analyzer-mcp");
|
|
1255
975
|
}
|
|
1256
976
|
function getAwsLogAnalyzerServerPath() {
|
|
1257
|
-
return (0,
|
|
977
|
+
return (0, import_path2.join)(getAwsLogAnalyzerPath(), "src", "cw-mcp-server");
|
|
1258
978
|
}
|
|
1259
979
|
|
|
1260
980
|
// packages/ai-toolkit-nx-claude/src/generators/addons/generator.ts
|
|
@@ -1282,8 +1002,6 @@ async function generator(tree, schema) {
|
|
|
1282
1002
|
selectionMode: schema.selectionMode || "all",
|
|
1283
1003
|
force: schema.force || false,
|
|
1284
1004
|
skipVerification: schema.skipVerification || false,
|
|
1285
|
-
dashboardMode: schema.dashboardMode || "always",
|
|
1286
|
-
port: schema.port || 0,
|
|
1287
1005
|
dry: schema.dry || false,
|
|
1288
1006
|
installMode: "default",
|
|
1289
1007
|
installationType: schema.installationType || "global",
|
|
@@ -1349,31 +1067,6 @@ async function installSelectedAddons(tree, options) {
|
|
|
1349
1067
|
continue;
|
|
1350
1068
|
}
|
|
1351
1069
|
await installMcpAddon(addon, options);
|
|
1352
|
-
if (addon.id === "spec-workflow-mcp" && addon.projectSetup && i === selectedAddons.length - 1) {
|
|
1353
|
-
const { setupProject } = await require("enquirer").prompt({
|
|
1354
|
-
type: "confirm",
|
|
1355
|
-
name: "setupProject",
|
|
1356
|
-
message: "\u{1F4C1} Would you like to set up spec-workflow configuration for a particular project?",
|
|
1357
|
-
initial: true
|
|
1358
|
-
});
|
|
1359
|
-
if (setupProject) {
|
|
1360
|
-
const { projectPath } = await require("enquirer").prompt({
|
|
1361
|
-
type: "input",
|
|
1362
|
-
name: "projectPath",
|
|
1363
|
-
message: "\u{1F4C1} Enter the project path where spec-workflow config should be added:",
|
|
1364
|
-
initial: process.cwd(),
|
|
1365
|
-
result: (value) => value || process.cwd()
|
|
1366
|
-
});
|
|
1367
|
-
options.projectPath = projectPath;
|
|
1368
|
-
if (options.dryRun) {
|
|
1369
|
-
console.log(`
|
|
1370
|
-
\u{1F4C1} [DRY-RUN] Would set up project configuration at: ${projectPath}`);
|
|
1371
|
-
}
|
|
1372
|
-
await installProjectSetup(addon, options);
|
|
1373
|
-
} else if (options.dryRun) {
|
|
1374
|
-
console.log("\n\u{1F4C1} [DRY-RUN] Skipping project configuration (user chose not to set up)");
|
|
1375
|
-
}
|
|
1376
|
-
}
|
|
1377
1070
|
results.push({ addon, success: true });
|
|
1378
1071
|
} catch (error) {
|
|
1379
1072
|
console.error(` \u274C Failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -1484,14 +1177,6 @@ async function installMcpAddon(addon, options) {
|
|
|
1484
1177
|
console.log("\n\u{1F527} Installing MCP server...");
|
|
1485
1178
|
}
|
|
1486
1179
|
const additionalArgs = [];
|
|
1487
|
-
if (addon.id === "spec-workflow-mcp") {
|
|
1488
|
-
if (options.dashboardMode === "always") {
|
|
1489
|
-
additionalArgs.push("--AutoStartDashboard");
|
|
1490
|
-
}
|
|
1491
|
-
if (options.port && options.port > 0) {
|
|
1492
|
-
additionalArgs.push(`--Port=${options.port}`);
|
|
1493
|
-
}
|
|
1494
|
-
}
|
|
1495
1180
|
const installResult = await installMcpServer({
|
|
1496
1181
|
addon,
|
|
1497
1182
|
additionalArgs,
|
|
@@ -1503,16 +1188,6 @@ async function installMcpAddon(addon, options) {
|
|
|
1503
1188
|
}
|
|
1504
1189
|
console.log(`\u2705 ${installResult.message}`);
|
|
1505
1190
|
}
|
|
1506
|
-
async function installProjectSetup(addon, options) {
|
|
1507
|
-
console.log("\n\u{1F527} Setting up project configuration...");
|
|
1508
|
-
const projectPath = options.projectPath || process.cwd();
|
|
1509
|
-
console.log(`\u{1F4CD} Using project directory: ${projectPath}`);
|
|
1510
|
-
const result = await setupSpecWorkflow(projectPath, options);
|
|
1511
|
-
if (!result.success) {
|
|
1512
|
-
throw new Error(result.message);
|
|
1513
|
-
}
|
|
1514
|
-
console.log(`\u2705 ${result.message}`);
|
|
1515
|
-
}
|
|
1516
1191
|
function showGeneralMcpInstructions(installedAddons) {
|
|
1517
1192
|
console.log("\n\u{1F4DA} Getting Started with Your MCPs");
|
|
1518
1193
|
console.log("==================================\n");
|
|
@@ -1526,7 +1201,7 @@ function showGeneralMcpInstructions(installedAddons) {
|
|
|
1526
1201
|
console.log(" https://linear.app/docs/mcp#claude");
|
|
1527
1202
|
console.log(" (Most MCPs follow a similar authentication flow)\n");
|
|
1528
1203
|
const needsAuth = installedAddons.filter(
|
|
1529
|
-
(addon) => addon.id === "slack-mcp" || addon.id === "github-mcp" || addon.id === "aws-log-analyzer-mcp" || addon.id === "
|
|
1204
|
+
(addon) => addon.id === "slack-mcp" || addon.id === "github-mcp" || addon.id === "aws-log-analyzer-mcp" || addon.id === "pulumi-mcp"
|
|
1530
1205
|
);
|
|
1531
1206
|
if (needsAuth.length > 0) {
|
|
1532
1207
|
console.log("\u{1F510} MCPs requiring authentication:");
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"items": [
|
|
17
17
|
{
|
|
18
18
|
"value": "all",
|
|
19
|
-
"label": "All recommended MCP servers (
|
|
19
|
+
"label": "All recommended MCP servers (6 servers)"
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
"value": "specific",
|
|
@@ -31,18 +31,10 @@
|
|
|
31
31
|
"items": {
|
|
32
32
|
"type": "string",
|
|
33
33
|
"enum": [
|
|
34
|
-
"spec-workflow-mcp",
|
|
35
|
-
"graphite-mcp",
|
|
36
|
-
"nx-mcp",
|
|
37
34
|
"slack-mcp",
|
|
38
|
-
"universe-mcp",
|
|
39
|
-
"linear-mcp",
|
|
40
|
-
"notion-mcp",
|
|
41
35
|
"github-mcp",
|
|
42
36
|
"figma-mcp",
|
|
43
|
-
"chrome-devtools-mcp",
|
|
44
37
|
"vercel-mcp",
|
|
45
|
-
"supabase-mcp",
|
|
46
38
|
"aws-log-analyzer-mcp",
|
|
47
39
|
"pulumi-mcp"
|
|
48
40
|
]
|
|
@@ -51,24 +43,6 @@
|
|
|
51
43
|
"prompt-type": "multiselect",
|
|
52
44
|
"prompt-message": "🔌 Select MCP servers to install"
|
|
53
45
|
},
|
|
54
|
-
"dashboardMode": {
|
|
55
|
-
"type": "string",
|
|
56
|
-
"description": "Dashboard startup mode",
|
|
57
|
-
"enum": ["always", "manual"],
|
|
58
|
-
"default": "always",
|
|
59
|
-
"prompt-message": "📊 When should the spec-workflow dashboard start?",
|
|
60
|
-
"prompt-type": "select",
|
|
61
|
-
"prompt-items": [
|
|
62
|
-
{ "value": "always", "label": "Always (auto-start on Claude launch)" },
|
|
63
|
-
{ "value": "manual", "label": "Manual (start via command only)" }
|
|
64
|
-
]
|
|
65
|
-
},
|
|
66
|
-
"port": {
|
|
67
|
-
"type": "number",
|
|
68
|
-
"description": "Dashboard port (default: auto)",
|
|
69
|
-
"default": 0,
|
|
70
|
-
"prompt-message": "🔌 Dashboard port (0 for auto)"
|
|
71
|
-
},
|
|
72
46
|
"force": {
|
|
73
47
|
"type": "boolean",
|
|
74
48
|
"description": "Force installation even if already exists",
|
|
@@ -79,11 +53,6 @@
|
|
|
79
53
|
"description": "Skip installation verification",
|
|
80
54
|
"default": false
|
|
81
55
|
},
|
|
82
|
-
"projectPath": {
|
|
83
|
-
"type": "string",
|
|
84
|
-
"description": "Path to the project where spec-workflow should be installed",
|
|
85
|
-
"x-skip-prompt": true
|
|
86
|
-
},
|
|
87
56
|
"dry": {
|
|
88
57
|
"type": "boolean",
|
|
89
58
|
"description": "Dry run mode",
|