@team-semicolon/semo-cli 3.0.9 → 3.0.11

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 +81 -4
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -59,7 +59,7 @@ const child_process_1 = require("child_process");
59
59
  const fs = __importStar(require("fs"));
60
60
  const path = __importStar(require("path"));
61
61
  const os = __importStar(require("os"));
62
- const VERSION = "3.0.9";
62
+ const VERSION = "3.0.11";
63
63
  const PACKAGE_NAME = "@team-semicolon/semo-cli";
64
64
  // === 버전 비교 유틸리티 ===
65
65
  /**
@@ -313,6 +313,18 @@ function detectProjectType(cwd) {
313
313
  }
314
314
  return detected;
315
315
  }
316
+ // === 설치된 Extension 패키지 스캔 ===
317
+ function getInstalledExtensions(cwd) {
318
+ const semoSystemDir = path.join(cwd, "semo-system");
319
+ const installed = [];
320
+ for (const key of Object.keys(EXTENSION_PACKAGES)) {
321
+ const pkgPath = path.join(semoSystemDir, key);
322
+ if (fs.existsSync(pkgPath)) {
323
+ installed.push(key);
324
+ }
325
+ }
326
+ return installed;
327
+ }
316
328
  function checkRequiredTools() {
317
329
  const tools = [
318
330
  {
@@ -1236,6 +1248,69 @@ _아직 기록된 결정이 없습니다._
1236
1248
  fs.writeFileSync(decisionsPath, decisionsContent);
1237
1249
  console.log(chalk_1.default.green("✓ .claude/memory/decisions.md 생성됨"));
1238
1250
  }
1251
+ // projects.md
1252
+ const projectsPath = path.join(memoryDir, "projects.md");
1253
+ if (!fs.existsSync(projectsPath)) {
1254
+ const projectsContent = `# 프로젝트 별칭 매핑
1255
+
1256
+ > 외부 프로젝트 배포 및 GitHub Projects 상태 관리
1257
+ > SEMO의 deployer, project-status 스킬이 이 파일을 참조합니다.
1258
+
1259
+ ---
1260
+
1261
+ ## GitHub Projects 설정
1262
+
1263
+ > **⚠️ 프로젝트 상태 관리 시 이 설정을 참조합니다.**
1264
+
1265
+ ### 기본 프로젝트
1266
+
1267
+ | 프로젝트 | 번호 | Project ID | 용도 |
1268
+ |---------|------|------------|------|
1269
+ | 이슈관리 | #1 | \`PVT_xxx\` | 메인 태스크 관리 (기본값) |
1270
+
1271
+ ### Status 옵션
1272
+
1273
+ | Status | 설명 |
1274
+ |--------|------|
1275
+ | 백로그 | 초기 상태 |
1276
+ | 작업중 | 개발 진행 중 |
1277
+ | 리뷰요청 | 코드 리뷰 대기 |
1278
+ | 테스트중 | QA 테스트 단계 |
1279
+ | 완료 | 작업 완료 |
1280
+
1281
+ ### 🔴 상태값 Alias (한글 ↔ 영문)
1282
+
1283
+ > **SEMO는 아래 키워드를 자동으로 Status 필드값으로 매핑합니다.**
1284
+
1285
+ | 사용자 입력 | → Status 값 | 비고 |
1286
+ |------------|-------------|------|
1287
+ | 리뷰요청, 리뷰 요청, review | 리뷰요청 | 코드 리뷰 대기 |
1288
+ | 테스트중, 테스트 중, testing, qa | 테스트중 | QA 단계 |
1289
+ | 작업중, 작업 중, 진행중, in progress, wip | 작업중 | 개발 중 |
1290
+ | 완료, done, closed | 완료 | 완료 처리 |
1291
+ | 백로그, 대기, pending, backlog | 백로그 | 초기 상태 |
1292
+
1293
+ **예시:**
1294
+ \`\`\`
1295
+ "리뷰요청 이슈들 테스트중으로 바꿔줘"
1296
+ → Status == "리뷰요청" 인 항목들을 Status = "테스트중" 으로 변경
1297
+ \`\`\`
1298
+
1299
+ ---
1300
+
1301
+ ## 프로젝트 별칭
1302
+
1303
+ | 별칭 | 레포지토리 | 환경 | 배포 방법 |
1304
+ |------|-----------|------|----------|
1305
+ | 예시 | owner/repo | stg | Milestone close |
1306
+
1307
+ ---
1308
+
1309
+ *마지막 업데이트: ${new Date().toISOString().split("T")[0]}*
1310
+ `;
1311
+ fs.writeFileSync(projectsPath, projectsContent);
1312
+ console.log(chalk_1.default.green("✓ .claude/memory/projects.md 생성됨"));
1313
+ }
1239
1314
  // rules 디렉토리
1240
1315
  const rulesDir = path.join(memoryDir, "rules");
1241
1316
  fs.mkdirSync(rulesDir, { recursive: true });
@@ -1488,7 +1563,9 @@ program
1488
1563
  }
1489
1564
  console.log();
1490
1565
  }
1491
- // 이미 설치된 패키지 확인
1566
+ // 기존에 설치된 모든 Extension 패키지 스캔
1567
+ const previouslyInstalled = getInstalledExtensions(cwd);
1568
+ // 요청한 패키지 중 이미 설치된 것과 새로 설치할 것 분류
1492
1569
  const alreadyInstalled = [];
1493
1570
  const toInstall = [];
1494
1571
  for (const pkg of packages) {
@@ -1515,8 +1592,8 @@ program
1515
1592
  await downloadExtensions(cwd, toInstall, options.force);
1516
1593
  // 2. settings.json 병합
1517
1594
  await mergeExtensionSettings(cwd, toInstall);
1518
- // 3. 심볼릭 링크 설정 (모든 설치된 패키지 포함하여 orchestrator 병합)
1519
- const allInstalledPackages = [...new Set([...alreadyInstalled, ...toInstall])];
1595
+ // 3. 심볼릭 링크 설정 (기존 + 새로 설치한 모든 패키지 포함)
1596
+ const allInstalledPackages = [...new Set([...previouslyInstalled, ...toInstall])];
1520
1597
  await setupExtensionSymlinks(cwd, allInstalledPackages);
1521
1598
  // 4. CLAUDE.md 재생성 (모든 설치된 패키지 반영)
1522
1599
  await setupClaudeMd(cwd, allInstalledPackages, options.force);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@team-semicolon/semo-cli",
3
- "version": "3.0.9",
3
+ "version": "3.0.11",
4
4
  "description": "SEMO CLI - AI Agent Orchestration Framework Installer",
5
5
  "main": "dist/index.js",
6
6
  "bin": {