@team-semicolon/semo-cli 2.0.5 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +45 -28
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -470,25 +470,17 @@ const BASE_MCP_SERVERS = [
|
|
|
470
470
|
// === Claude MCP 등록 함수 ===
|
|
471
471
|
function registerMCPServer(server) {
|
|
472
472
|
try {
|
|
473
|
-
//
|
|
474
|
-
|
|
473
|
+
// claude mcp add 명령어 구성
|
|
474
|
+
// 형식: claude mcp add <name> [-e KEY=value...] -- <command> [args...]
|
|
475
|
+
const args = ["mcp", "add", server.name];
|
|
476
|
+
// 환경변수가 있는 경우 -e 옵션 추가
|
|
475
477
|
if (server.env) {
|
|
476
478
|
for (const [key, value] of Object.entries(server.env)) {
|
|
477
|
-
|
|
479
|
+
args.push("-e", `${key}=${value}`);
|
|
478
480
|
}
|
|
479
481
|
}
|
|
480
|
-
//
|
|
481
|
-
|
|
482
|
-
"mcp", "add",
|
|
483
|
-
server.name,
|
|
484
|
-
"--",
|
|
485
|
-
server.command,
|
|
486
|
-
...server.args,
|
|
487
|
-
];
|
|
488
|
-
// 환경변수가 있으면 명령어 앞에 추가
|
|
489
|
-
if (envArgs.length > 0) {
|
|
490
|
-
args.splice(2, 0, ...envArgs);
|
|
491
|
-
}
|
|
482
|
+
// -- 구분자 후 명령어와 인자 추가
|
|
483
|
+
args.push("--", server.command, ...server.args);
|
|
492
484
|
(0, child_process_1.execSync)(`claude ${args.join(" ")}`, { stdio: "pipe" });
|
|
493
485
|
return { success: true };
|
|
494
486
|
}
|
|
@@ -978,11 +970,19 @@ program
|
|
|
978
970
|
console.log(chalk_1.default.red("\nSEMO가 설치되어 있지 않습니다. 'semo init'을 먼저 실행하세요.\n"));
|
|
979
971
|
process.exit(1);
|
|
980
972
|
}
|
|
981
|
-
|
|
973
|
+
// 레거시 패키지 이름 → 새 이름 변환
|
|
974
|
+
let resolvedPackage = packageName;
|
|
975
|
+
if (packageName in LEGACY_MAPPING) {
|
|
976
|
+
resolvedPackage = LEGACY_MAPPING[packageName];
|
|
977
|
+
console.log(chalk_1.default.yellow(`\n💡 '${packageName}' → '${resolvedPackage}' (v3.0 구조)`));
|
|
978
|
+
}
|
|
979
|
+
if (!(resolvedPackage in EXTENSION_PACKAGES)) {
|
|
982
980
|
console.log(chalk_1.default.red(`\n알 수 없는 패키지: ${packageName}`));
|
|
983
|
-
console.log(chalk_1.default.gray(`사용 가능한 패키지: ${Object.keys(EXTENSION_PACKAGES).join(", ")}
|
|
981
|
+
console.log(chalk_1.default.gray(`사용 가능한 패키지: ${Object.keys(EXTENSION_PACKAGES).join(", ")}`));
|
|
982
|
+
console.log(chalk_1.default.gray(`레거시 별칭: ${Object.keys(LEGACY_MAPPING).join(", ")}\n`));
|
|
984
983
|
process.exit(1);
|
|
985
984
|
}
|
|
985
|
+
packageName = resolvedPackage;
|
|
986
986
|
const pkgPath = path.join(semoSystemDir, packageName);
|
|
987
987
|
if (fs.existsSync(pkgPath) && !options.force) {
|
|
988
988
|
console.log(chalk_1.default.yellow(`\n${EXTENSION_PACKAGES[packageName].name} 패키지가 이미 설치되어 있습니다.`));
|
|
@@ -1006,24 +1006,41 @@ program
|
|
|
1006
1006
|
.action(() => {
|
|
1007
1007
|
const cwd = process.cwd();
|
|
1008
1008
|
const semoSystemDir = path.join(cwd, "semo-system");
|
|
1009
|
-
console.log(chalk_1.default.cyan.bold("\n📦 SEMO 패키지
|
|
1009
|
+
console.log(chalk_1.default.cyan.bold("\n📦 SEMO 패키지 목록 (v3.0)\n"));
|
|
1010
1010
|
// Standard
|
|
1011
1011
|
console.log(chalk_1.default.white.bold("Standard (필수)"));
|
|
1012
1012
|
const coreInstalled = fs.existsSync(path.join(semoSystemDir, "semo-core"));
|
|
1013
1013
|
const skillsInstalled = fs.existsSync(path.join(semoSystemDir, "semo-skills"));
|
|
1014
1014
|
console.log(` ${coreInstalled ? chalk_1.default.green("✓") : chalk_1.default.gray("○")} semo-core - 원칙, 오케스트레이터`);
|
|
1015
|
-
console.log(` ${skillsInstalled ? chalk_1.default.green("✓") : chalk_1.default.gray("○")} semo-skills -
|
|
1015
|
+
console.log(` ${skillsInstalled ? chalk_1.default.green("✓") : chalk_1.default.gray("○")} semo-skills - 통합 스킬`);
|
|
1016
1016
|
console.log();
|
|
1017
|
-
// Extensions
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1017
|
+
// Extensions - 레이어별 그룹화
|
|
1018
|
+
const layers = {
|
|
1019
|
+
biz: { title: "Business Layer", emoji: "💼" },
|
|
1020
|
+
eng: { title: "Engineering Layer", emoji: "⚙️" },
|
|
1021
|
+
ops: { title: "Operations Layer", emoji: "📊" },
|
|
1022
|
+
meta: { title: "Meta", emoji: "🔧" },
|
|
1023
|
+
};
|
|
1024
|
+
for (const [layerKey, layerInfo] of Object.entries(layers)) {
|
|
1025
|
+
const layerPackages = Object.entries(EXTENSION_PACKAGES).filter(([, pkg]) => pkg.layer === layerKey);
|
|
1026
|
+
if (layerPackages.length === 0)
|
|
1027
|
+
continue;
|
|
1028
|
+
console.log(chalk_1.default.white.bold(`${layerInfo.emoji} ${layerInfo.title}`));
|
|
1029
|
+
for (const [key, pkg] of layerPackages) {
|
|
1030
|
+
const isInstalled = fs.existsSync(path.join(semoSystemDir, key));
|
|
1031
|
+
const status = isInstalled ? chalk_1.default.green("✓") : chalk_1.default.gray("○");
|
|
1032
|
+
const displayKey = key.includes("/") ? key.split("/")[1] : key;
|
|
1033
|
+
console.log(` ${status} ${chalk_1.default.cyan(displayKey)} - ${pkg.desc}`);
|
|
1034
|
+
console.log(chalk_1.default.gray(` semo add ${key}`));
|
|
1035
|
+
}
|
|
1036
|
+
console.log();
|
|
1023
1037
|
}
|
|
1024
|
-
|
|
1025
|
-
console.log(chalk_1.default.gray("
|
|
1026
|
-
console.log(chalk_1.default.gray("
|
|
1038
|
+
// 레거시 호환성 안내
|
|
1039
|
+
console.log(chalk_1.default.gray("─".repeat(50)));
|
|
1040
|
+
console.log(chalk_1.default.gray("레거시 명령어도 지원됩니다:"));
|
|
1041
|
+
console.log(chalk_1.default.gray(" semo add next → eng/nextjs"));
|
|
1042
|
+
console.log(chalk_1.default.gray(" semo add backend → eng/spring"));
|
|
1043
|
+
console.log(chalk_1.default.gray(" semo add mvp → biz/poc\n"));
|
|
1027
1044
|
});
|
|
1028
1045
|
// === status 명령어 ===
|
|
1029
1046
|
program
|