@team-semicolon/semo-cli 3.0.12 → 3.0.13
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 +36 -12
- 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.
|
|
62
|
+
const VERSION = "3.0.13";
|
|
63
63
|
const PACKAGE_NAME = "@team-semicolon/semo-cli";
|
|
64
64
|
// === 버전 비교 유틸리티 ===
|
|
65
65
|
/**
|
|
@@ -1723,13 +1723,19 @@ program
|
|
|
1723
1723
|
.option("--self", "CLI만 업데이트")
|
|
1724
1724
|
.option("--system", "semo-system만 업데이트")
|
|
1725
1725
|
.option("--skip-cli", "CLI 업데이트 건너뛰기")
|
|
1726
|
+
.option("--only <packages>", "특정 패키지만 업데이트 (쉼표 구분: semo-core,semo-skills,biz/management)")
|
|
1726
1727
|
.action(async (options) => {
|
|
1727
1728
|
console.log(chalk_1.default.cyan.bold("\n🔄 SEMO 업데이트\n"));
|
|
1728
1729
|
const cwd = process.cwd();
|
|
1729
1730
|
const semoSystemDir = path.join(cwd, "semo-system");
|
|
1730
1731
|
const claudeDir = path.join(cwd, ".claude");
|
|
1732
|
+
// --only 옵션 파싱
|
|
1733
|
+
const onlyPackages = options.only
|
|
1734
|
+
? options.only.split(",").map((p) => p.trim())
|
|
1735
|
+
: [];
|
|
1736
|
+
const isSelectiveUpdate = onlyPackages.length > 0;
|
|
1731
1737
|
// === 1. CLI 자체 업데이트 ===
|
|
1732
|
-
if (options.self || (!options.system && !options.skipCli)) {
|
|
1738
|
+
if (options.self || (!options.system && !options.skipCli && !isSelectiveUpdate)) {
|
|
1733
1739
|
console.log(chalk_1.default.cyan("📦 CLI 업데이트"));
|
|
1734
1740
|
const cliSpinner = (0, ora_1.default)(" @team-semicolon/semo-cli 업데이트 중...").start();
|
|
1735
1741
|
try {
|
|
@@ -1765,25 +1771,43 @@ program
|
|
|
1765
1771
|
installedExtensions.push(key);
|
|
1766
1772
|
}
|
|
1767
1773
|
}
|
|
1774
|
+
// 업데이트 대상 결정
|
|
1775
|
+
const updateSemoCore = !isSelectiveUpdate || onlyPackages.includes("semo-core");
|
|
1776
|
+
const updateSemoSkills = !isSelectiveUpdate || onlyPackages.includes("semo-skills");
|
|
1777
|
+
const extensionsToUpdate = isSelectiveUpdate
|
|
1778
|
+
? installedExtensions.filter(ext => onlyPackages.includes(ext))
|
|
1779
|
+
: installedExtensions;
|
|
1768
1780
|
console.log(chalk_1.default.cyan("\n📚 semo-system 업데이트"));
|
|
1769
1781
|
console.log(chalk_1.default.gray(" 대상:"));
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1782
|
+
if (updateSemoCore)
|
|
1783
|
+
console.log(chalk_1.default.gray(" - semo-core"));
|
|
1784
|
+
if (updateSemoSkills)
|
|
1785
|
+
console.log(chalk_1.default.gray(" - semo-skills"));
|
|
1786
|
+
extensionsToUpdate.forEach(pkg => {
|
|
1773
1787
|
console.log(chalk_1.default.gray(` - ${pkg}`));
|
|
1774
1788
|
});
|
|
1789
|
+
if (!updateSemoCore && !updateSemoSkills && extensionsToUpdate.length === 0) {
|
|
1790
|
+
console.log(chalk_1.default.yellow("\n ⚠️ 업데이트할 패키지가 없습니다."));
|
|
1791
|
+
console.log(chalk_1.default.gray(" 설치된 패키지: semo-core, semo-skills" +
|
|
1792
|
+
(installedExtensions.length > 0 ? ", " + installedExtensions.join(", ") : "")));
|
|
1793
|
+
return;
|
|
1794
|
+
}
|
|
1775
1795
|
const spinner = (0, ora_1.default)("\n 최신 버전 다운로드 중...").start();
|
|
1776
1796
|
try {
|
|
1777
1797
|
const tempDir = path.join(cwd, ".semo-temp");
|
|
1778
1798
|
removeRecursive(tempDir);
|
|
1779
1799
|
(0, child_process_1.execSync)(`git clone --depth 1 ${SEMO_REPO} "${tempDir}"`, { stdio: "pipe" });
|
|
1780
|
-
// Standard 업데이트
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1800
|
+
// Standard 업데이트 (선택적)
|
|
1801
|
+
if (updateSemoCore) {
|
|
1802
|
+
removeRecursive(path.join(semoSystemDir, "semo-core"));
|
|
1803
|
+
copyRecursive(path.join(tempDir, "semo-core"), path.join(semoSystemDir, "semo-core"));
|
|
1804
|
+
}
|
|
1805
|
+
if (updateSemoSkills) {
|
|
1806
|
+
removeRecursive(path.join(semoSystemDir, "semo-skills"));
|
|
1807
|
+
copyRecursive(path.join(tempDir, "semo-skills"), path.join(semoSystemDir, "semo-skills"));
|
|
1808
|
+
}
|
|
1809
|
+
// Extensions 업데이트 (선택적)
|
|
1810
|
+
for (const pkg of extensionsToUpdate) {
|
|
1787
1811
|
const srcPath = path.join(tempDir, "packages", pkg);
|
|
1788
1812
|
const destPath = path.join(semoSystemDir, pkg);
|
|
1789
1813
|
if (fs.existsSync(srcPath)) {
|