@team-semicolon/semo-cli 3.6.0 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +127 -0
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1058,6 +1058,16 @@ program
1058
1058
  console.log(chalk_1.default.gray(` ✓ ${EXTENSION_PACKAGES[pkg].name}`));
1059
1059
  });
1060
1060
  }
1061
+ // GitHub MCP 토큰 설정 안내
1062
+ if (!isGitHubTokenConfigured()) {
1063
+ console.log(chalk_1.default.yellow("\n⚠️ GitHub MCP 설정 필요"));
1064
+ console.log(chalk_1.default.gray(" GitHub 이슈/PR 생성 기능을 사용하려면 토큰을 설정하세요:"));
1065
+ console.log(chalk_1.default.white("\n export GITHUB_PERSONAL_ACCESS_TOKEN=\"$(gh auth token)\""));
1066
+ console.log(chalk_1.default.gray("\n 영구 설정: ~/.zshrc 또는 ~/.bashrc에 위 명령어 추가"));
1067
+ }
1068
+ else {
1069
+ console.log(chalk_1.default.green("\n✓ GitHub 토큰 감지됨 (MCP 사용 가능)"));
1070
+ }
1061
1071
  console.log(chalk_1.default.cyan("\n다음 단계:"));
1062
1072
  console.log(chalk_1.default.gray(" 1. Claude Code에서 프로젝트 열기"));
1063
1073
  console.log(chalk_1.default.gray(" 2. 자연어로 요청하기 (예: \"댓글 기능 구현해줘\")"));
@@ -1674,8 +1684,29 @@ const BASE_MCP_SERVERS = [
1674
1684
  name: "github",
1675
1685
  command: "npx",
1676
1686
  args: ["-y", "@modelcontextprotocol/server-github"],
1687
+ env: {
1688
+ GITHUB_PERSONAL_ACCESS_TOKEN: "${GITHUB_PERSONAL_ACCESS_TOKEN}",
1689
+ },
1677
1690
  },
1678
1691
  ];
1692
+ // === GitHub 토큰 자동 감지 ===
1693
+ function getGitHubTokenFromCLI() {
1694
+ try {
1695
+ const token = (0, child_process_1.execSync)("gh auth token", { stdio: "pipe", encoding: "utf-8" }).trim();
1696
+ return token || null;
1697
+ }
1698
+ catch {
1699
+ return null;
1700
+ }
1701
+ }
1702
+ function isGitHubTokenConfigured() {
1703
+ // 환경변수 확인
1704
+ if (process.env.GITHUB_PERSONAL_ACCESS_TOKEN) {
1705
+ return true;
1706
+ }
1707
+ // gh CLI 토큰 확인
1708
+ return getGitHubTokenFromCLI() !== null;
1709
+ }
1679
1710
  // === Claude MCP 서버 존재 여부 확인 ===
1680
1711
  function isMCPServerRegistered(serverName) {
1681
1712
  try {
@@ -2647,6 +2678,102 @@ program
2647
2678
  }
2648
2679
  console.log();
2649
2680
  });
2681
+ // === doctor 명령어 ===
2682
+ program
2683
+ .command("doctor")
2684
+ .description("SEMO 및 MCP 설정 문제를 진단합니다")
2685
+ .action(() => {
2686
+ console.log(chalk_1.default.cyan.bold("\n🩺 SEMO 진단\n"));
2687
+ const cwd = process.cwd();
2688
+ let hasIssues = false;
2689
+ // 1. gh CLI 확인
2690
+ console.log(chalk_1.default.white.bold("GitHub CLI:"));
2691
+ try {
2692
+ const ghVersion = (0, child_process_1.execSync)("gh --version", { stdio: "pipe", encoding: "utf-8" }).split("\n")[0];
2693
+ console.log(chalk_1.default.green(` ✓ 설치됨 (${ghVersion.replace("gh version ", "")})`));
2694
+ // gh 인증 상태
2695
+ try {
2696
+ (0, child_process_1.execSync)("gh auth status", { stdio: "pipe" });
2697
+ console.log(chalk_1.default.green(" ✓ 인증됨"));
2698
+ }
2699
+ catch {
2700
+ console.log(chalk_1.default.red(" ✗ 인증 필요: gh auth login"));
2701
+ hasIssues = true;
2702
+ }
2703
+ }
2704
+ catch {
2705
+ console.log(chalk_1.default.red(" ✗ 미설치: brew install gh"));
2706
+ hasIssues = true;
2707
+ }
2708
+ // 2. GitHub 토큰 확인
2709
+ console.log(chalk_1.default.white.bold("\nGitHub MCP 토큰:"));
2710
+ const ghToken = getGitHubTokenFromCLI();
2711
+ const envToken = process.env.GITHUB_PERSONAL_ACCESS_TOKEN;
2712
+ if (envToken) {
2713
+ console.log(chalk_1.default.green(" ✓ 환경변수 설정됨 (GITHUB_PERSONAL_ACCESS_TOKEN)"));
2714
+ }
2715
+ else if (ghToken) {
2716
+ console.log(chalk_1.default.yellow(" ⚠ gh CLI 토큰 있음 (환경변수 미설정)"));
2717
+ console.log(chalk_1.default.gray(" GitHub MCP 사용하려면:"));
2718
+ console.log(chalk_1.default.white(' export GITHUB_PERSONAL_ACCESS_TOKEN="$(gh auth token)"'));
2719
+ hasIssues = true;
2720
+ }
2721
+ else {
2722
+ console.log(chalk_1.default.red(" ✗ 토큰 없음"));
2723
+ console.log(chalk_1.default.gray(" 1. gh auth login 실행"));
2724
+ console.log(chalk_1.default.white(' 2. export GITHUB_PERSONAL_ACCESS_TOKEN="$(gh auth token)"'));
2725
+ hasIssues = true;
2726
+ }
2727
+ // 3. MCP 서버 등록 상태
2728
+ console.log(chalk_1.default.white.bold("\nMCP 서버:"));
2729
+ const requiredServers = ["semo-integrations", "github", "context7"];
2730
+ for (const server of requiredServers) {
2731
+ if (isMCPServerRegistered(server)) {
2732
+ console.log(chalk_1.default.green(` ✓ ${server}`));
2733
+ }
2734
+ else {
2735
+ console.log(chalk_1.default.yellow(` ⚠ ${server} 미등록`));
2736
+ hasIssues = true;
2737
+ }
2738
+ }
2739
+ // 4. settings.json 확인
2740
+ console.log(chalk_1.default.white.bold("\n설정 파일:"));
2741
+ const settingsPath = path.join(cwd, ".claude", "settings.json");
2742
+ if (fs.existsSync(settingsPath)) {
2743
+ console.log(chalk_1.default.green(" ✓ .claude/settings.json"));
2744
+ try {
2745
+ const settings = JSON.parse(fs.readFileSync(settingsPath, "utf-8"));
2746
+ if (settings.mcpServers?.github?.env?.GITHUB_PERSONAL_ACCESS_TOKEN) {
2747
+ console.log(chalk_1.default.green(" ✓ GitHub MCP 환경변수 설정됨"));
2748
+ }
2749
+ else {
2750
+ console.log(chalk_1.default.yellow(" ⚠ GitHub MCP 환경변수 누락"));
2751
+ hasIssues = true;
2752
+ }
2753
+ }
2754
+ catch {
2755
+ console.log(chalk_1.default.yellow(" ⚠ settings.json 파싱 실패"));
2756
+ hasIssues = true;
2757
+ }
2758
+ }
2759
+ else {
2760
+ console.log(chalk_1.default.red(" ✗ .claude/settings.json 없음"));
2761
+ hasIssues = true;
2762
+ }
2763
+ // 결과
2764
+ console.log();
2765
+ if (hasIssues) {
2766
+ console.log(chalk_1.default.yellow.bold("⚠️ 일부 문제가 발견되었습니다."));
2767
+ console.log(chalk_1.default.gray("\nGitHub MCP 빠른 설정:"));
2768
+ console.log(chalk_1.default.white(' export GITHUB_PERSONAL_ACCESS_TOKEN="$(gh auth token)"'));
2769
+ console.log(chalk_1.default.gray("\n영구 설정 (셸 재시작 후 적용):"));
2770
+ console.log(chalk_1.default.white(' echo \'export GITHUB_PERSONAL_ACCESS_TOKEN="$(gh auth token)"\' >> ~/.zshrc'));
2771
+ }
2772
+ else {
2773
+ console.log(chalk_1.default.green.bold("✅ 모든 설정이 정상입니다."));
2774
+ }
2775
+ console.log();
2776
+ });
2650
2777
  // === update 명령어 ===
2651
2778
  program
2652
2779
  .command("update")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@team-semicolon/semo-cli",
3
- "version": "3.6.0",
3
+ "version": "3.7.0",
4
4
  "description": "SEMO CLI - AI Agent Orchestration Framework Installer",
5
5
  "main": "dist/index.js",
6
6
  "bin": {