@actnova-inc/setup 0.0.7

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.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,181 @@
1
+ #!/usr/bin/env node
2
+ import { execFileSync } from "node:child_process";
3
+ import { readFileSync, writeFileSync, appendFileSync, existsSync, mkdirSync } from "node:fs";
4
+ import { homedir } from "node:os";
5
+ import { join, dirname } from "node:path";
6
+ const NPMRC = join(homedir(), ".npmrc");
7
+ function log(msg) {
8
+ console.log(`\n ✓ ${msg}`);
9
+ }
10
+ function warn(msg) {
11
+ console.log(`\n ⚠ ${msg}`);
12
+ }
13
+ function err(msg) {
14
+ console.error(`\n ✗ ${msg}`);
15
+ }
16
+ /** 커맨드 실행 후 stdout 반환 (실패 시 null) */
17
+ function run(cmd, args) {
18
+ try {
19
+ return execFileSync(cmd, args, { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }).trim();
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ function reset() {
26
+ console.log("\n🧹 Actnova Context 설정 초기화\n");
27
+ // 1. ~/.npmrc에서 @actnova-inc/context 관련 줄 제거
28
+ console.log("1. ~/.npmrc 정리");
29
+ if (existsSync(NPMRC)) {
30
+ const lines = readFileSync(NPMRC, "utf-8").split("\n");
31
+ const filtered = lines.filter((l) => !l.includes("# @actnova-inc/context"));
32
+ if (filtered.length < lines.length) {
33
+ writeFileSync(NPMRC, filtered.join("\n"));
34
+ log("@actnova-inc/context 관련 항목 제거 완료");
35
+ }
36
+ else {
37
+ log("@actnova-inc/context 항목 없음, 스킵");
38
+ }
39
+ }
40
+ else {
41
+ log(".npmrc 파일 없음, 스킵");
42
+ }
43
+ // 2. git config HTTPS rewrite 제거
44
+ console.log("\n2. Git HTTPS rewrite 정리");
45
+ run("git", ["config", "--global", "--unset", "url.https://github.com/.insteadOf"]);
46
+ log("HTTPS rewrite 제거 완료");
47
+ // 3. ~/.cursor/mcp.json에서 actnova-context 제거
48
+ console.log("\n3. Cursor MCP 정리");
49
+ const cursorMcpPath = join(homedir(), ".cursor", "mcp.json");
50
+ if (existsSync(cursorMcpPath)) {
51
+ try {
52
+ const existing = JSON.parse(readFileSync(cursorMcpPath, "utf-8"));
53
+ if (existing.mcpServers?.["actnova-context"]) {
54
+ delete existing.mcpServers["actnova-context"];
55
+ writeFileSync(cursorMcpPath, JSON.stringify(existing, null, 2) + "\n");
56
+ log("Cursor MCP에서 actnova-context 제거 완료");
57
+ }
58
+ else {
59
+ log("Cursor MCP에 actnova-context 없음, 스킵");
60
+ }
61
+ }
62
+ catch {
63
+ warn("Cursor mcp.json 파싱 실패. 수동으로 확인하세요: " + cursorMcpPath);
64
+ }
65
+ }
66
+ else {
67
+ log("Cursor mcp.json 없음, 스킵");
68
+ }
69
+ console.log("\n✅ 초기화 완료. 다시 설정하려면 npx @actnova-inc/setup 을 실행하세요.\n");
70
+ }
71
+ async function main() {
72
+ if (process.argv.includes("--reset")) {
73
+ reset();
74
+ return;
75
+ }
76
+ console.log("\n🔧 Actnova Context 환경 셋업\n");
77
+ // 1. gh CLI 확인
78
+ console.log("1. GitHub CLI 확인");
79
+ const ghVersion = run("gh", ["--version"]);
80
+ if (!ghVersion) {
81
+ err("gh CLI가 설치되어 있지 않습니다. https://cli.github.com 에서 설치하세요.");
82
+ process.exit(1);
83
+ }
84
+ // gh 로그인 확인
85
+ const ghStatus = run("gh", ["auth", "status"]);
86
+ if (!ghStatus) {
87
+ warn("GitHub에 로그인되어 있지 않습니다. 로그인을 시작합니다...");
88
+ try {
89
+ execFileSync("gh", ["auth", "login"], { stdio: "inherit" });
90
+ }
91
+ catch {
92
+ err("GitHub 로그인에 실패했습니다.");
93
+ process.exit(1);
94
+ }
95
+ }
96
+ log("GitHub CLI 인증 확인 완료");
97
+ // 2. Git HTTPS 인증 설정
98
+ console.log("\n2. Git HTTPS 인증 설정");
99
+ run("gh", ["auth", "setup-git"]);
100
+ run("git", ["config", "--global", "url.https://github.com/.insteadOf", "git@github.com:"]);
101
+ log("Git HTTPS 인증을 gh에 위임 완료");
102
+ // 3. .npmrc 설정
103
+ console.log("\n3. npm 레지스트리 설정");
104
+ const npmrcContent = existsSync(NPMRC) ? readFileSync(NPMRC, "utf-8") : "";
105
+ if (npmrcContent.includes("# @actnova-inc/context")) {
106
+ log(".npmrc에 @actnova-inc 레지스트리 이미 설정됨");
107
+ }
108
+ else {
109
+ const token = run("gh", ["auth", "token"]);
110
+ if (!token) {
111
+ err("GitHub 토큰을 가져올 수 없습니다.");
112
+ process.exit(1);
113
+ }
114
+ const npmrcEntry = `\n//npm.pkg.github.com/:_authToken=${token} # @actnova-inc/context\n@actnova-inc:registry=https://npm.pkg.github.com # @actnova-inc/context\n`;
115
+ appendFileSync(NPMRC, npmrcEntry);
116
+ log(".npmrc에 @actnova-inc 레지스트리 + 토큰 추가");
117
+ }
118
+ // 4. 검증
119
+ console.log("\n4. 검증");
120
+ const verifyResult = run("npm", ["view", "@actnova-inc/context", "version"]);
121
+ if (verifyResult) {
122
+ log(`@actnova-inc/context 접근 확인 (v${verifyResult})`);
123
+ }
124
+ else {
125
+ warn("@actnova-inc/context에 접근할 수 없습니다. 패키지가 아직 publish되지 않았을 수 있습니다.");
126
+ }
127
+ // 5. Cursor MCP 설정
128
+ console.log("\n5. Cursor MCP 설정");
129
+ const cursorMcpPath = join(homedir(), ".cursor", "mcp.json");
130
+ const mcpEntry = {
131
+ "actnova-context": {
132
+ type: "stdio",
133
+ command: "npx",
134
+ args: ["-y", "@actnova-inc/context@latest", "serve", "--stdio"],
135
+ },
136
+ };
137
+ if (existsSync(cursorMcpPath)) {
138
+ try {
139
+ const existing = JSON.parse(readFileSync(cursorMcpPath, "utf-8"));
140
+ if (existing.mcpServers?.["actnova-context"]) {
141
+ log("Cursor MCP에 actnova-context 이미 설정됨");
142
+ }
143
+ else {
144
+ existing.mcpServers = { ...(existing.mcpServers ?? {}), ...mcpEntry };
145
+ writeFileSync(cursorMcpPath, JSON.stringify(existing, null, 2) + "\n");
146
+ log("Cursor MCP에 actnova-context 추가 완료");
147
+ }
148
+ }
149
+ catch {
150
+ warn("Cursor mcp.json 파싱 실패. 수동으로 설정하세요: " + cursorMcpPath);
151
+ }
152
+ }
153
+ else {
154
+ mkdirSync(dirname(cursorMcpPath), { recursive: true });
155
+ writeFileSync(cursorMcpPath, JSON.stringify({ mcpServers: mcpEntry }, null, 2) + "\n");
156
+ log("Cursor MCP 설정 파일 생성 완료");
157
+ }
158
+ // 6. 다음 단계 안내
159
+ console.log(`
160
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
161
+ ✅ 환경 셋업 완료!
162
+
163
+ 다음 단계: IDE에서 플러그인을 설치하세요.
164
+
165
+ Claude Code:
166
+ /plugin marketplace add actnova-inc/actnova-context
167
+ /plugin install actnova-context@actnova-context
168
+
169
+ Cursor:
170
+ MCP 서버가 ~/.cursor/mcp.json에 설정됨.
171
+ Cursor를 재시작하면 자동으로 연결됩니다.
172
+
173
+ 설치 후 "나 누구야?" 라고 물어보면 작동을 확인할 수 있습니다.
174
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
175
+ `);
176
+ }
177
+ main().catch((e) => {
178
+ err(e.message);
179
+ process.exit(1);
180
+ });
181
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAExC,SAAS,GAAG,CAAC,GAAW;IACtB,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,IAAI,CAAC,GAAW;IACvB,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,GAAG,CAAC,GAAW;IACtB,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,qCAAqC;AACrC,SAAS,GAAG,CAAC,GAAW,EAAE,IAAc;IACtC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,KAAK;IACZ,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAE7C,6CAA6C;IAC7C,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAC5E,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACnC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,gCAAgC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC1B,CAAC;IAED,iCAAiC;IACjC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,mCAAmC,CAAC,CAAC,CAAC;IACnF,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAE3B,6CAA6C;IAC7C,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;YAClE,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC7C,OAAO,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;gBAC9C,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACvE,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,qCAAqC,GAAG,aAAa,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,KAAK,EAAE,CAAC;QACR,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAE5C,eAAe;IACf,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,wDAAwD,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,YAAY;IACZ,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,qBAAqB,CAAC,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAE3B,qBAAqB;IACrB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IACjC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,mCAAmC,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC3F,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAE/B,eAAe;IACf,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3E,IAAI,YAAY,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,wBAAwB,CAAC,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,sCAAsC,KAAK,oGAAoG,CAAC;QACnK,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAClC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ;IACR,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7E,IAAI,YAAY,EAAE,CAAC;QACjB,GAAG,CAAC,gCAAgC,YAAY,GAAG,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,iEAAiE,CAAC,CAAC;IAC1E,CAAC;IAED,mBAAmB;IACnB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAE7D,MAAM,QAAQ,GAAG;QACf,iBAAiB,EAAE;YACjB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,SAAS,CAAC;SAChE;KACF,CAAC;IAEF,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;YAClE,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,UAAU,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;gBACtE,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACvE,GAAG,CAAC,mCAAmC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,qCAAqC,GAAG,aAAa,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACvF,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAChC,CAAC;IAED,cAAc;IACd,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;CAgBb,CAAC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACjB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@actnova-inc/setup",
3
+ "version": "0.0.7",
4
+ "description": "Actnova Context 환경 셋업 CLI",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/actnova-inc/actnova-context.git"
8
+ },
9
+ "type": "module",
10
+ "bin": {
11
+ "actnova-setup": "dist/index.js"
12
+ },
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsc --watch"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "license": "UNLICENSED",
21
+ "publishConfig": {
22
+ "access": "public",
23
+ "registry": "https://registry.npmjs.org"
24
+ },
25
+ "engines": {
26
+ "node": ">=20"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^22.0.0",
30
+ "typescript": "^5.7.0"
31
+ }
32
+ }