jkpark 2.0.0 → 2.1.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 +49 -41
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -25699,13 +25699,18 @@ class PathManager {
25699
25699
  static getOpenClawRoot() {
25700
25700
  return path2.join(os2.homedir(), ".openclaw");
25701
25701
  }
25702
- static getWorkspaces() {
25703
- const root = this.getOpenClawRoot();
25702
+ static getClaudeRoot() {
25703
+ return path2.join(os2.homedir(), ".claude");
25704
+ }
25705
+ static getGitHubRoot() {
25706
+ return path2.join(os2.homedir(), ".config", "gh");
25707
+ }
25708
+ static getWorkspaces(root) {
25704
25709
  if (!fs.existsSync(root))
25705
25710
  return [];
25706
25711
  return fs.readdirSync(root).filter((f) => {
25707
25712
  const fullPath = path2.join(root, f);
25708
- return f.startsWith("workspace-") && fs.statSync(fullPath).isDirectory();
25713
+ return (f.startsWith("workspace-") || f.startsWith("project-")) && fs.statSync(fullPath).isDirectory();
25709
25714
  });
25710
25715
  }
25711
25716
  static resolveFinalPath(baseDir, relativeOrAbsolute) {
@@ -25760,6 +25765,18 @@ async function runInstallWizard(projectRoot) {
25760
25765
  console.log("❌ 설치 가능한 플러그인이 없습니다. plugins 폴더를 확인해 주세요.");
25761
25766
  return;
25762
25767
  }
25768
+ const { targetType } = await dist_default14.prompt([
25769
+ {
25770
+ type: "list",
25771
+ name: "targetType",
25772
+ message: "설치 타겟 유형을 선택하세요:",
25773
+ choices: [
25774
+ { name: "OpenClaw", value: "openclaw" },
25775
+ { name: "Claude", value: "claude" },
25776
+ { name: "GitHub", value: "github" }
25777
+ ]
25778
+ }
25779
+ ]);
25763
25780
  const { selectedCategory } = await dist_default14.prompt([
25764
25781
  {
25765
25782
  type: "list",
@@ -25783,47 +25800,36 @@ async function runInstallWizard(projectRoot) {
25783
25800
  validate: (answer) => answer.length > 0 ? true : "최소 하나 이상의 스킬을 선택해야 합니다."
25784
25801
  }
25785
25802
  ]);
25786
- const { baseType } = await dist_default14.prompt([
25803
+ let finalTargetDir;
25804
+ let rootPath;
25805
+ if (targetType === "openclaw") {
25806
+ rootPath = PathManager.getOpenClawRoot();
25807
+ } else if (targetType === "claude") {
25808
+ rootPath = PathManager.getClaudeRoot();
25809
+ } else {
25810
+ rootPath = PathManager.getGitHubRoot();
25811
+ }
25812
+ const workspaces = PathManager.getWorkspaces(rootPath);
25813
+ const scopeChoices = [];
25814
+ if (targetType === "openclaw") {
25815
+ scopeChoices.push({ name: `Shared Skills (모든 에이전트 공유: ${path4.join(rootPath, "skills")})`, value: path4.join(rootPath, "skills") });
25816
+ } else if (targetType === "claude") {
25817
+ scopeChoices.push({ name: `Global Skills (~/.claude/skills)`, value: path4.join(rootPath, "skills") });
25818
+ } else if (targetType === "github") {
25819
+ scopeChoices.push({ name: `GitHub Extensions (~/.config/gh/extensions)`, value: path4.join(rootPath, "extensions") });
25820
+ }
25821
+ scopeChoices.push(...workspaces.map((ws) => ({ name: `Workspace: ${ws}`, value: path4.join(rootPath, ws) })));
25822
+ scopeChoices.push({ name: "Current Directory (현재 프로젝트)", value: process.cwd() });
25823
+ scopeChoices.push({ name: "Custom Path (직접 입력)", value: "custom" });
25824
+ const { scope } = await dist_default14.prompt([
25787
25825
  {
25788
25826
  type: "list",
25789
- name: "baseType",
25790
- message: "설치 타겟 유형을 선택하세요:",
25791
- choices: [
25792
- { name: "OpenClaw", value: "openclaw" },
25793
- { name: "Custom Path", value: "custom" }
25794
- ]
25827
+ name: "scope",
25828
+ message: `${targetType} 설치 범위를 선택하세요:`,
25829
+ choices: scopeChoices
25795
25830
  }
25796
25831
  ]);
25797
- let finalTargetDir;
25798
- if (baseType === "openclaw") {
25799
- const openClawRoot = PathManager.getOpenClawRoot();
25800
- const workspaces = PathManager.getWorkspaces();
25801
- const { scope } = await dist_default14.prompt([
25802
- {
25803
- type: "list",
25804
- name: "scope",
25805
- message: "OpenClaw 설치 범위를 선택하세요:",
25806
- choices: [
25807
- { name: "Shared Skills (모든 에이전트 공유: ~/.openclaw/skills)", value: path4.join(openClawRoot, "skills") },
25808
- ...workspaces.map((ws) => ({ name: `Workspace: ${ws}`, value: path4.join(openClawRoot, ws) })),
25809
- { name: "Custom Path inside OpenClaw", value: "custom_inner" }
25810
- ]
25811
- }
25812
- ]);
25813
- if (scope === "custom_inner") {
25814
- const { innerPath } = await dist_default14.prompt([
25815
- {
25816
- type: "input",
25817
- name: "innerPath",
25818
- message: "OpenClaw 내부의 상대 경로를 입력하세요:",
25819
- validate: (input) => input.trim() !== "" ? true : "경로를 입력해야 합니다."
25820
- }
25821
- ]);
25822
- finalTargetDir = path4.join(openClawRoot, innerPath);
25823
- } else {
25824
- finalTargetDir = scope;
25825
- }
25826
- } else {
25832
+ if (scope === "custom") {
25827
25833
  const { customPath } = await dist_default14.prompt([
25828
25834
  {
25829
25835
  type: "input",
@@ -25833,8 +25839,10 @@ async function runInstallWizard(projectRoot) {
25833
25839
  }
25834
25840
  ]);
25835
25841
  finalTargetDir = PathManager.resolveFinalPath(process.cwd(), customPath);
25842
+ } else {
25843
+ finalTargetDir = scope;
25836
25844
  }
25837
- const skillsBaseDir = path4.join(finalTargetDir, "skills");
25845
+ const skillsBaseDir = targetType === "github" && scope.endsWith("extensions") ? finalTargetDir : path4.join(finalTargetDir, "skills");
25838
25846
  console.log(`
25839
25847
  \uD83D\uDCCD Base Target Path: ${finalTargetDir}`);
25840
25848
  console.log(`\uD83D\uDEE0️ Selected Skills: ${selectedSkills.join(", ")}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jkpark",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "JK Park's Personal Package Manager (Bun Powered)",
5
5
  "type": "module",
6
6
  "scripts": {