@su-record/vibe 2.4.6 → 2.4.8
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/.claude/settings.local.json +28 -24
- package/README.md +32 -15
- package/dist/cli/auth.d.ts +13 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +118 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/collaborator.d.ts +8 -0
- package/dist/cli/collaborator.d.ts.map +1 -0
- package/dist/cli/collaborator.js +136 -0
- package/dist/cli/collaborator.js.map +1 -0
- package/dist/cli/detect.d.ts +35 -0
- package/dist/cli/detect.d.ts.map +1 -0
- package/dist/cli/detect.js +376 -0
- package/dist/cli/detect.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +221 -2001
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/llm.d.ts +49 -0
- package/dist/cli/llm.d.ts.map +1 -0
- package/dist/cli/llm.js +464 -0
- package/dist/cli/llm.js.map +1 -0
- package/dist/cli/mcp.d.ts +49 -0
- package/dist/cli/mcp.d.ts.map +1 -0
- package/dist/cli/mcp.js +169 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/setup.d.ts +53 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +455 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/types.d.ts +83 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +5 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/utils.d.ts +40 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +112 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/lib/MemoryManager.js +93 -93
- package/dist/lib/MemoryManager.js.map +1 -1
- package/dist/lib/ProjectCache.d.ts.map +1 -1
- package/dist/lib/ProjectCache.js +2 -1
- package/dist/lib/ProjectCache.js.map +1 -1
- package/dist/lib/PythonParser.js +109 -109
- package/dist/lib/PythonParser.js.map +1 -1
- package/dist/lib/constants.d.ts +31 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +36 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/gemini-api.d.ts.map +1 -1
- package/dist/lib/gemini-api.js +1 -6
- package/dist/lib/gemini-api.js.map +1 -1
- package/dist/lib/gemini-mcp.js +15 -15
- package/dist/lib/gemini-oauth.js +36 -36
- package/dist/lib/gemini-oauth.js.map +1 -1
- package/dist/lib/gpt-api.d.ts.map +1 -1
- package/dist/lib/gpt-api.js +6 -11
- package/dist/lib/gpt-api.js.map +1 -1
- package/dist/lib/gpt-mcp.js +17 -17
- package/dist/lib/gpt-oauth.js +45 -45
- package/dist/lib/gpt-oauth.js.map +1 -1
- package/dist/lib/utils.d.ts +21 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +51 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/orchestrator/agentDiscovery.d.ts.map +1 -1
- package/dist/orchestrator/agentDiscovery.js +3 -2
- package/dist/orchestrator/agentDiscovery.js.map +1 -1
- package/dist/orchestrator/backgroundAgent.d.ts.map +1 -1
- package/dist/orchestrator/backgroundAgent.js +4 -16
- package/dist/orchestrator/backgroundAgent.js.map +1 -1
- package/dist/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.js +17 -15
- package/dist/orchestrator/orchestrator.js.map +1 -1
- package/dist/orchestrator/parallelResearch.d.ts.map +1 -1
- package/dist/orchestrator/parallelResearch.js +30 -44
- package/dist/orchestrator/parallelResearch.js.map +1 -1
- package/dist/orchestrator/types.d.ts +3 -2
- package/dist/orchestrator/types.d.ts.map +1 -1
- package/dist/tools/analytics/getUsageAnalytics.js +13 -13
- package/dist/tools/analytics/getUsageAnalytics.js.map +1 -1
- package/dist/tools/convention/getCodingGuide.js +2 -2
- package/dist/tools/convention/getCodingGuide.js.map +1 -1
- package/dist/tools/memory/createMemoryTimeline.js +11 -11
- package/dist/tools/memory/createMemoryTimeline.js.map +1 -1
- package/dist/tools/memory/getMemoryGraph.js +12 -12
- package/dist/tools/memory/getSessionContext.js +10 -10
- package/dist/tools/memory/getSessionContext.js.map +1 -1
- package/dist/tools/memory/linkMemories.js +14 -14
- package/dist/tools/memory/listMemories.js +4 -4
- package/dist/tools/memory/recallMemory.js +4 -4
- package/dist/tools/memory/restoreSessionContext.js +2 -2
- package/dist/tools/memory/restoreSessionContext.js.map +1 -1
- package/dist/tools/memory/saveMemory.js +4 -4
- package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
- package/dist/tools/memory/searchMemoriesAdvanced.js.map +1 -1
- package/dist/tools/memory/startSession.js +3 -3
- package/dist/tools/memory/startSession.js.map +1 -1
- package/dist/tools/planning/generatePrd.js +46 -46
- package/dist/tools/prompt/enhancePromptGemini.js +160 -160
- package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
- package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
- package/dist/tools/semantic/findReferences.d.ts.map +1 -1
- package/dist/tools/semantic/findReferences.js +2 -1
- package/dist/tools/semantic/findReferences.js.map +1 -1
- package/dist/tools/semantic/findSymbol.d.ts.map +1 -1
- package/dist/tools/semantic/findSymbol.js +2 -1
- package/dist/tools/semantic/findSymbol.js.map +1 -1
- package/hooks/hooks.json +10 -8
- package/package.json +4 -2
|
@@ -1,24 +1,28 @@
|
|
|
1
|
-
{
|
|
2
|
-
"permissions": {
|
|
3
|
-
"allow": [
|
|
4
|
-
"Bash(npx tsc:*)",
|
|
5
|
-
"Bash(npm login:*)",
|
|
6
|
-
"Bash(npm whoami:*)",
|
|
7
|
-
"Bash(git checkout:*)",
|
|
8
|
-
"Bash(where:*)",
|
|
9
|
-
"Bash(npm update:*)",
|
|
10
|
-
"Bash(vibe --version:*)",
|
|
11
|
-
"Bash(vibe upgrade:*)",
|
|
12
|
-
"Bash(npm config:*)",
|
|
13
|
-
"Bash(claude --version)",
|
|
14
|
-
"Bash(claude mcp list:*)",
|
|
15
|
-
"Bash(C:Usersendba.localbinclaude.exe --version)",
|
|
16
|
-
"Bash(\"C:\\\\Users\\\\endba\\\\.local\\\\bin\\\\claude.exe\" --version)",
|
|
17
|
-
"Bash(npm cache clean:*)",
|
|
18
|
-
"Bash(git status:*)",
|
|
19
|
-
"Bash(gh pr create --repo anthropics/claude-plugins-official --title \"feat: add vibe plugin - SPEC-driven AI coding framework\" --body \"$\\(cat <<''EOF''\n## Plugin: vibe\n\nSPEC-driven AI coding framework for Claude Code with parallel agents, BDD verification, and quality assurance.\n\n### Features\n\n- **12 Slash Commands**: `/vibe.spec`, `/vibe.run`, `/vibe.verify`, `/vibe.review`, `/vibe.reason`, `/vibe.diagram`, and more\n- **16 Specialist Agents**: Security, performance, architecture reviewers + language-specific reviewers \\(Python, TypeScript, React, Rails\\)\n- **ULTRAWORK Pipeline**: Parallel execution with ~50% speed improvement through background agents and phase pipelining\n- **BDD Verification**: Behavior-driven development testing against SPEC requirements\n- **Context7 Integration**: Built-in support for up-to-date documentation lookup\n\n### Workflow\n\n```\n/vibe.spec \"feature\" → /vibe.run \"feature\" → /vibe.verify \"feature\"\n```\n\n### Repository\n\nhttps://github.com/su-record/vibe\n\n### License\n\nMIT\nEOF\n\\)\")",
|
|
20
|
-
"Bash(git rev-parse:*)",
|
|
21
|
-
"Bash(claude plugin:*)"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(npx tsc:*)",
|
|
5
|
+
"Bash(npm login:*)",
|
|
6
|
+
"Bash(npm whoami:*)",
|
|
7
|
+
"Bash(git checkout:*)",
|
|
8
|
+
"Bash(where:*)",
|
|
9
|
+
"Bash(npm update:*)",
|
|
10
|
+
"Bash(vibe --version:*)",
|
|
11
|
+
"Bash(vibe upgrade:*)",
|
|
12
|
+
"Bash(npm config:*)",
|
|
13
|
+
"Bash(claude --version)",
|
|
14
|
+
"Bash(claude mcp list:*)",
|
|
15
|
+
"Bash(C:Usersendba.localbinclaude.exe --version)",
|
|
16
|
+
"Bash(\"C:\\\\Users\\\\endba\\\\.local\\\\bin\\\\claude.exe\" --version)",
|
|
17
|
+
"Bash(npm cache clean:*)",
|
|
18
|
+
"Bash(git status:*)",
|
|
19
|
+
"Bash(gh pr create --repo anthropics/claude-plugins-official --title \"feat: add vibe plugin - SPEC-driven AI coding framework\" --body \"$\\(cat <<''EOF''\n## Plugin: vibe\n\nSPEC-driven AI coding framework for Claude Code with parallel agents, BDD verification, and quality assurance.\n\n### Features\n\n- **12 Slash Commands**: `/vibe.spec`, `/vibe.run`, `/vibe.verify`, `/vibe.review`, `/vibe.reason`, `/vibe.diagram`, and more\n- **16 Specialist Agents**: Security, performance, architecture reviewers + language-specific reviewers \\(Python, TypeScript, React, Rails\\)\n- **ULTRAWORK Pipeline**: Parallel execution with ~50% speed improvement through background agents and phase pipelining\n- **BDD Verification**: Behavior-driven development testing against SPEC requirements\n- **Context7 Integration**: Built-in support for up-to-date documentation lookup\n\n### Workflow\n\n```\n/vibe.spec \"feature\" → /vibe.run \"feature\" → /vibe.verify \"feature\"\n```\n\n### Repository\n\nhttps://github.com/su-record/vibe\n\n### License\n\nMIT\nEOF\n\\)\")",
|
|
20
|
+
"Bash(git rev-parse:*)",
|
|
21
|
+
"Bash(claude plugin:*)",
|
|
22
|
+
"Bash(npm unlink:*)",
|
|
23
|
+
"Bash(find:*)",
|
|
24
|
+
"Bash(vibe auth status:*)",
|
|
25
|
+
"Bash(cd:*)"
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
}
|
package/README.md
CHANGED
|
@@ -73,14 +73,21 @@ vibe init
|
|
|
73
73
|
|
|
74
74
|
## 멀티모델 오케스트레이션
|
|
75
75
|
|
|
76
|
-
Claude Code에서 GPT-5.2, Gemini 3 Pro를
|
|
76
|
+
Claude Code에서 GPT-5.2, Gemini 3 Pro를 Hook으로 직접 호출:
|
|
77
77
|
|
|
78
|
-
| 상황 | 추천 모델 |
|
|
78
|
+
| 상황 | 추천 모델 | 호출 방법 |
|
|
79
79
|
|------|----------|----------|
|
|
80
|
-
| 아키텍처 검토 | GPT-5.2 |
|
|
81
|
-
| UI/UX 리뷰 | Gemini 3 Pro |
|
|
82
|
-
| 디버깅 | GPT-5.2 |
|
|
83
|
-
| 코드 분석 | Gemini 3 Pro |
|
|
80
|
+
| 아키텍처 검토 | GPT-5.2 | "gpt한테 물어봐" 또는 직접 import |
|
|
81
|
+
| UI/UX 리뷰 | Gemini 3 Pro | "gemini한테 물어봐" 또는 직접 import |
|
|
82
|
+
| 디버깅 | GPT-5.2 | Hook 자동 트리거 |
|
|
83
|
+
| 코드 분석 | Gemini 3 Pro | Hook 자동 트리거 |
|
|
84
|
+
|
|
85
|
+
**직접 API 호출:**
|
|
86
|
+
|
|
87
|
+
```javascript
|
|
88
|
+
import('@su-record/vibe/lib/gpt').then(g => g.quickAsk('질문'))
|
|
89
|
+
import('@su-record/vibe/lib/gemini').then(g => g.quickAsk('질문'))
|
|
90
|
+
```
|
|
84
91
|
|
|
85
92
|
## 병렬 리뷰 에이전트
|
|
86
93
|
|
|
@@ -113,16 +120,26 @@ Claude Code에서 GPT-5.2, Gemini 3 Pro를 서브에이전트로 활용:
|
|
|
113
120
|
|
|
114
121
|
## 프로젝트 구조
|
|
115
122
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
123
|
+
**전역 설치 (`~/.claude/`):**
|
|
124
|
+
|
|
125
|
+
```text
|
|
126
|
+
~/.claude/
|
|
127
|
+
├── commands/ # 슬래시 커맨드 (7개)
|
|
119
128
|
├── agents/ # 리뷰/리서치 에이전트
|
|
120
|
-
├── skills/ # 자동 활성화 가이드
|
|
121
|
-
└──
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
129
|
+
├── skills/ # 자동 활성화 가이드 (7개)
|
|
130
|
+
└── settings.json # Hooks + MCP 설정
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**프로젝트별 (`프로젝트/.claude/vibe/`):**
|
|
134
|
+
|
|
135
|
+
```text
|
|
136
|
+
.claude/vibe/
|
|
137
|
+
├── specs/ # SPEC 문서
|
|
138
|
+
├── features/ # BDD 시나리오
|
|
139
|
+
├── rules/ # 코딩 규칙 (기술스택별)
|
|
140
|
+
├── solutions/ # 해결책 아카이브
|
|
141
|
+
├── config.json # 프로젝트 설정
|
|
142
|
+
└── constitution.md # 프로젝트 원칙
|
|
126
143
|
```
|
|
127
144
|
|
|
128
145
|
## 코드 품질 기준
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM 인증 관련 함수
|
|
3
|
+
*/
|
|
4
|
+
import { LLMStatusMap } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* LLM 인증 상태 확인
|
|
7
|
+
*/
|
|
8
|
+
export declare function getLLMAuthStatus(): LLMStatusMap;
|
|
9
|
+
/**
|
|
10
|
+
* LLM 상태 포맷팅
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatLLMStatus(): string;
|
|
13
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAiB,YAAY,EAAc,MAAM,YAAY,CAAC;AAMrE;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAoE/C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CA+BxC"}
|
package/dist/cli/auth.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM 인증 관련 함수
|
|
3
|
+
*/
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import os from 'os';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import { createRequire } from 'module';
|
|
9
|
+
const require = createRequire(import.meta.url);
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = path.dirname(__filename);
|
|
12
|
+
/**
|
|
13
|
+
* LLM 인증 상태 확인
|
|
14
|
+
*/
|
|
15
|
+
export function getLLMAuthStatus() {
|
|
16
|
+
const status = { gpt: null, gemini: null };
|
|
17
|
+
// GPT 상태 확인
|
|
18
|
+
try {
|
|
19
|
+
const gptStoragePath = path.join(__dirname, '../lib/gpt-storage.js');
|
|
20
|
+
if (fs.existsSync(gptStoragePath)) {
|
|
21
|
+
const gptStorage = require(gptStoragePath);
|
|
22
|
+
const account = gptStorage.getActiveAccount();
|
|
23
|
+
if (account) {
|
|
24
|
+
const isExpired = gptStorage.isTokenExpired(account);
|
|
25
|
+
status.gpt = {
|
|
26
|
+
type: 'oauth',
|
|
27
|
+
email: account.email,
|
|
28
|
+
valid: !isExpired
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch { /* ignore: optional operation */ }
|
|
34
|
+
// GPT API 키 확인 (프로젝트 config)
|
|
35
|
+
if (!status.gpt) {
|
|
36
|
+
try {
|
|
37
|
+
const configPath = path.join(process.cwd(), '.claude', 'vibe', 'config.json');
|
|
38
|
+
if (fs.existsSync(configPath)) {
|
|
39
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
40
|
+
if (config.models?.gpt?.enabled) {
|
|
41
|
+
status.gpt = { type: 'apikey', valid: true };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch { /* ignore: optional operation */ }
|
|
46
|
+
}
|
|
47
|
+
// Gemini 상태 확인
|
|
48
|
+
try {
|
|
49
|
+
// Windows: %APPDATA%/vibe, macOS/Linux: ~/.config/vibe
|
|
50
|
+
const geminiConfigDir = process.platform === 'win32'
|
|
51
|
+
? path.join(process.env.APPDATA || path.join(os.homedir(), 'AppData', 'Roaming'), 'vibe')
|
|
52
|
+
: path.join(process.env.XDG_CONFIG_HOME || path.join(os.homedir(), '.config'), 'vibe');
|
|
53
|
+
const tokenPath = path.join(geminiConfigDir, 'gemini-auth.json');
|
|
54
|
+
if (fs.existsSync(tokenPath)) {
|
|
55
|
+
const tokenData = JSON.parse(fs.readFileSync(tokenPath, 'utf-8'));
|
|
56
|
+
if (tokenData.accounts && tokenData.accounts.length > 0) {
|
|
57
|
+
const activeAccount = tokenData.accounts.find((a) => a.active) || tokenData.accounts[0];
|
|
58
|
+
const isExpired = activeAccount.expires && Date.now() > activeAccount.expires;
|
|
59
|
+
status.gemini = {
|
|
60
|
+
type: 'oauth',
|
|
61
|
+
email: activeAccount.email || 'default',
|
|
62
|
+
valid: !isExpired || !!activeAccount.refreshToken
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch { /* ignore: optional operation */ }
|
|
68
|
+
// Gemini API 키 확인 (프로젝트 config)
|
|
69
|
+
if (!status.gemini) {
|
|
70
|
+
try {
|
|
71
|
+
const configPath = path.join(process.cwd(), '.claude', 'vibe', 'config.json');
|
|
72
|
+
if (fs.existsSync(configPath)) {
|
|
73
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
74
|
+
if (config.models?.gemini?.enabled) {
|
|
75
|
+
status.gemini = { type: 'apikey', valid: true };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch { /* ignore: optional operation */ }
|
|
80
|
+
}
|
|
81
|
+
return status;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* LLM 상태 포맷팅
|
|
85
|
+
*/
|
|
86
|
+
export function formatLLMStatus() {
|
|
87
|
+
const status = getLLMAuthStatus();
|
|
88
|
+
const lines = [];
|
|
89
|
+
lines.push('외부 LLM:');
|
|
90
|
+
// GPT 상태
|
|
91
|
+
if (status.gpt) {
|
|
92
|
+
if (status.gpt.type === 'oauth') {
|
|
93
|
+
const icon = status.gpt.valid ? '✓' : '⚠';
|
|
94
|
+
lines.push(` GPT: ${icon} OAuth 인증됨 (${status.gpt.email})`);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
lines.push(' GPT: ✓ API 키 설정됨');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
lines.push(' GPT: ✗ 미설정 (vibe gpt --auth 또는 vibe gpt <api-key>)');
|
|
102
|
+
}
|
|
103
|
+
// Gemini 상태
|
|
104
|
+
if (status.gemini) {
|
|
105
|
+
if (status.gemini.type === 'oauth') {
|
|
106
|
+
const icon = status.gemini.valid ? '✓' : '⚠';
|
|
107
|
+
lines.push(` Gemini: ${icon} OAuth 인증됨 (${status.gemini.email})`);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
lines.push(' Gemini: ✓ API 키 설정됨');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
lines.push(' Gemini: ✗ 미설정 (vibe gemini --auth 또는 vibe gemini <api-key>)');
|
|
115
|
+
}
|
|
116
|
+
return lines.join('\n');
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collaborator.d.ts","sourceRoot":"","sources":["../../src/cli/collaborator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAkItE"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 협업자 자동 설치 설정
|
|
3
|
+
*/
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import { log } from './utils.js';
|
|
7
|
+
/**
|
|
8
|
+
* 협업자 자동 설치 설정
|
|
9
|
+
*/
|
|
10
|
+
export function setupCollaboratorAutoInstall(projectRoot) {
|
|
11
|
+
const packageJsonPath = path.join(projectRoot, 'package.json');
|
|
12
|
+
const vibeDir = path.join(projectRoot, '.claude', 'vibe');
|
|
13
|
+
// 1. Node.js 프로젝트: package.json 정리
|
|
14
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
15
|
+
try {
|
|
16
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
17
|
+
let modified = false;
|
|
18
|
+
// 기존 devDependencies에서 @su-record/vibe 제거
|
|
19
|
+
if (pkg.devDependencies?.['@su-record/vibe']) {
|
|
20
|
+
delete pkg.devDependencies['@su-record/vibe'];
|
|
21
|
+
modified = true;
|
|
22
|
+
}
|
|
23
|
+
// 기존 postinstall/prepare에서 vibe update 제거
|
|
24
|
+
if (pkg.scripts) {
|
|
25
|
+
const oldPatterns = [
|
|
26
|
+
/\s*&&\s*npx @su-record\/vibe update[^&|;]*/g,
|
|
27
|
+
/npx @su-record\/vibe update[^&|;]*\s*&&\s*/g,
|
|
28
|
+
/npx @su-record\/vibe update[^&|;]*/g,
|
|
29
|
+
/\s*&&\s*node_modules\/\.bin\/vibe update[^&|;]*/g,
|
|
30
|
+
/node_modules\/\.bin\/vibe update[^&|;]*\s*&&\s*/g,
|
|
31
|
+
/node_modules\/\.bin\/vibe update[^&|;]*/g
|
|
32
|
+
];
|
|
33
|
+
['postinstall', 'prepare'].forEach(script => {
|
|
34
|
+
if (pkg.scripts[script]?.includes('vibe update')) {
|
|
35
|
+
let cleaned = pkg.scripts[script];
|
|
36
|
+
oldPatterns.forEach(p => { cleaned = cleaned.replace(p, ''); });
|
|
37
|
+
cleaned = cleaned.trim();
|
|
38
|
+
if (cleaned) {
|
|
39
|
+
pkg.scripts[script] = cleaned;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
delete pkg.scripts[script];
|
|
43
|
+
}
|
|
44
|
+
modified = true;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
if (modified) {
|
|
49
|
+
fs.writeFileSync(packageJsonPath, JSON.stringify(pkg, null, 2) + '\n');
|
|
50
|
+
log(' ✅ package.json 정리 완료 (레거시 vibe 설정 제거)\n');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
55
|
+
log(' ⚠️ package.json 수정 실패: ' + message + '\n');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// 2. .claude/vibe/setup.sh 생성
|
|
59
|
+
const setupShPath = path.join(vibeDir, 'setup.sh');
|
|
60
|
+
if (!fs.existsSync(vibeDir)) {
|
|
61
|
+
fs.mkdirSync(vibeDir, { recursive: true });
|
|
62
|
+
}
|
|
63
|
+
if (!fs.existsSync(setupShPath)) {
|
|
64
|
+
const setupScript = `#!/bin/bash
|
|
65
|
+
# Vibe 협업자 자동 설치 스크립트
|
|
66
|
+
# 사용법: ./.claude/vibe/setup.sh
|
|
67
|
+
|
|
68
|
+
set -e
|
|
69
|
+
|
|
70
|
+
echo "🔧 Vibe 설치 확인 중..."
|
|
71
|
+
|
|
72
|
+
# npm/npx 확인
|
|
73
|
+
if ! command -v npx &> /dev/null; then
|
|
74
|
+
echo "❌ Node.js/npm이 설치되어 있지 않습니다."
|
|
75
|
+
echo " https://nodejs.org 에서 설치해주세요."
|
|
76
|
+
exit 1
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
# vibe 설치 확인 및 업데이트
|
|
80
|
+
if command -v vibe &> /dev/null; then
|
|
81
|
+
echo "✅ Vibe가 이미 설치되어 있습니다."
|
|
82
|
+
vibe update --silent
|
|
83
|
+
echo "✅ Vibe 업데이트 완료!"
|
|
84
|
+
else
|
|
85
|
+
echo "📦 Vibe 설치 중..."
|
|
86
|
+
npm install -g @su-record/vibe
|
|
87
|
+
vibe update --silent
|
|
88
|
+
echo "✅ Vibe 설치 및 설정 완료!"
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
echo ""
|
|
92
|
+
echo "다음 명령어로 시작하세요:"
|
|
93
|
+
echo " /vibe.spec \\"기능명\\" SPEC 작성"
|
|
94
|
+
echo " /vibe.run \\"기능명\\" 구현 실행"
|
|
95
|
+
`;
|
|
96
|
+
fs.writeFileSync(setupShPath, setupScript);
|
|
97
|
+
fs.chmodSync(setupShPath, '755');
|
|
98
|
+
log(' ✅ 협업자 설치 스크립트 생성 (.claude/vibe/setup.sh)\n');
|
|
99
|
+
}
|
|
100
|
+
// 3. README.md에 협업자 안내 추가
|
|
101
|
+
const readmePath = path.join(projectRoot, 'README.md');
|
|
102
|
+
const vibeSetupSection = `
|
|
103
|
+
## Vibe Setup (AI Coding)
|
|
104
|
+
|
|
105
|
+
이 프로젝트는 [Vibe](https://github.com/su-record/vibe) AI 코딩 프레임워크를 사용합니다.
|
|
106
|
+
|
|
107
|
+
### 협업자 설치
|
|
108
|
+
|
|
109
|
+
\`\`\`bash
|
|
110
|
+
# 전역 설치 (권장)
|
|
111
|
+
npm install -g @su-record/vibe
|
|
112
|
+
vibe update
|
|
113
|
+
|
|
114
|
+
# 또는 setup 스크립트 실행
|
|
115
|
+
./.claude/vibe/setup.sh
|
|
116
|
+
\`\`\`
|
|
117
|
+
|
|
118
|
+
### 사용법
|
|
119
|
+
|
|
120
|
+
Claude Code에서 슬래시 커맨드 사용:
|
|
121
|
+
- \`/vibe.spec "기능명"\` - SPEC 문서 작성
|
|
122
|
+
- \`/vibe.run "기능명"\` - 구현 실행
|
|
123
|
+
`;
|
|
124
|
+
if (fs.existsSync(readmePath)) {
|
|
125
|
+
const readme = fs.readFileSync(readmePath, 'utf-8');
|
|
126
|
+
if (!readme.includes('## Vibe Setup')) {
|
|
127
|
+
fs.appendFileSync(readmePath, vibeSetupSection);
|
|
128
|
+
log(' ✅ README.md에 협업자 안내 추가\n');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
fs.writeFileSync(readmePath, `# Project\n${vibeSetupSection}`);
|
|
133
|
+
log(' ✅ README.md 생성 (협업자 안내 포함)\n');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=collaborator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collaborator.js","sourceRoot":"","sources":["../../src/cli/collaborator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 기술 스택 감지
|
|
3
|
+
*/
|
|
4
|
+
import { DetectionResult } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* 프로젝트 기술 스택 감지
|
|
7
|
+
*/
|
|
8
|
+
export declare function detectTechStacks(projectRoot: string): DetectionResult;
|
|
9
|
+
/**
|
|
10
|
+
* 스택 타입에 대한 이름 매핑
|
|
11
|
+
*/
|
|
12
|
+
export declare const STACK_NAMES: Record<string, {
|
|
13
|
+
name: string;
|
|
14
|
+
lang: string;
|
|
15
|
+
framework: string;
|
|
16
|
+
}>;
|
|
17
|
+
/**
|
|
18
|
+
* 스택에 맞는 언어 규칙 파일 목록 반환
|
|
19
|
+
*/
|
|
20
|
+
export declare function getLanguageRulesForStacks(stacks: Array<{
|
|
21
|
+
type: string;
|
|
22
|
+
path: string;
|
|
23
|
+
}>): string;
|
|
24
|
+
/**
|
|
25
|
+
* 언어별 CLAUDE.md 규칙
|
|
26
|
+
*/
|
|
27
|
+
export declare const LANGUAGE_RULES: Record<string, string>;
|
|
28
|
+
/**
|
|
29
|
+
* 스택에 맞는 언어 규칙 내용 반환
|
|
30
|
+
*/
|
|
31
|
+
export declare function getLanguageRulesContent(stacks: Array<{
|
|
32
|
+
type: string;
|
|
33
|
+
path: string;
|
|
34
|
+
}>): string;
|
|
35
|
+
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/cli/detect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAA+B,eAAe,EAAE,MAAM,YAAY,CAAC;AAE1E;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAmNrE;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAkBzF,CAAC;AAEF;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAU/F;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyCjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAsB7F"}
|