@su-record/vibe 2.4.6 → 2.4.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.
Files changed (109) hide show
  1. package/.claude/settings.local.json +28 -24
  2. package/README.md +32 -15
  3. package/dist/cli/auth.d.ts +13 -0
  4. package/dist/cli/auth.d.ts.map +1 -0
  5. package/dist/cli/auth.js +118 -0
  6. package/dist/cli/auth.js.map +1 -0
  7. package/dist/cli/collaborator.d.ts +8 -0
  8. package/dist/cli/collaborator.d.ts.map +1 -0
  9. package/dist/cli/collaborator.js +136 -0
  10. package/dist/cli/collaborator.js.map +1 -0
  11. package/dist/cli/detect.d.ts +35 -0
  12. package/dist/cli/detect.d.ts.map +1 -0
  13. package/dist/cli/detect.js +376 -0
  14. package/dist/cli/detect.js.map +1 -0
  15. package/dist/cli/index.d.ts.map +1 -1
  16. package/dist/cli/index.js +201 -2001
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/llm.d.ts +49 -0
  19. package/dist/cli/llm.d.ts.map +1 -0
  20. package/dist/cli/llm.js +464 -0
  21. package/dist/cli/llm.js.map +1 -0
  22. package/dist/cli/mcp.d.ts +49 -0
  23. package/dist/cli/mcp.d.ts.map +1 -0
  24. package/dist/cli/mcp.js +169 -0
  25. package/dist/cli/mcp.js.map +1 -0
  26. package/dist/cli/setup.d.ts +53 -0
  27. package/dist/cli/setup.d.ts.map +1 -0
  28. package/dist/cli/setup.js +455 -0
  29. package/dist/cli/setup.js.map +1 -0
  30. package/dist/cli/types.d.ts +83 -0
  31. package/dist/cli/types.d.ts.map +1 -0
  32. package/dist/cli/types.js +5 -0
  33. package/dist/cli/types.js.map +1 -0
  34. package/dist/cli/utils.d.ts +40 -0
  35. package/dist/cli/utils.d.ts.map +1 -0
  36. package/dist/cli/utils.js +112 -0
  37. package/dist/cli/utils.js.map +1 -0
  38. package/dist/lib/MemoryManager.js +93 -93
  39. package/dist/lib/MemoryManager.js.map +1 -1
  40. package/dist/lib/ProjectCache.d.ts.map +1 -1
  41. package/dist/lib/ProjectCache.js +2 -1
  42. package/dist/lib/ProjectCache.js.map +1 -1
  43. package/dist/lib/PythonParser.js +109 -109
  44. package/dist/lib/PythonParser.js.map +1 -1
  45. package/dist/lib/constants.d.ts +31 -0
  46. package/dist/lib/constants.d.ts.map +1 -0
  47. package/dist/lib/constants.js +36 -0
  48. package/dist/lib/constants.js.map +1 -0
  49. package/dist/lib/gemini-api.d.ts.map +1 -1
  50. package/dist/lib/gemini-api.js +1 -6
  51. package/dist/lib/gemini-api.js.map +1 -1
  52. package/dist/lib/gemini-mcp.js +15 -15
  53. package/dist/lib/gemini-oauth.js +36 -36
  54. package/dist/lib/gemini-oauth.js.map +1 -1
  55. package/dist/lib/gpt-api.d.ts.map +1 -1
  56. package/dist/lib/gpt-api.js +6 -11
  57. package/dist/lib/gpt-api.js.map +1 -1
  58. package/dist/lib/gpt-mcp.js +17 -17
  59. package/dist/lib/gpt-oauth.js +45 -45
  60. package/dist/lib/gpt-oauth.js.map +1 -1
  61. package/dist/lib/utils.d.ts +21 -0
  62. package/dist/lib/utils.d.ts.map +1 -0
  63. package/dist/lib/utils.js +51 -0
  64. package/dist/lib/utils.js.map +1 -0
  65. package/dist/orchestrator/agentDiscovery.d.ts.map +1 -1
  66. package/dist/orchestrator/agentDiscovery.js +3 -2
  67. package/dist/orchestrator/agentDiscovery.js.map +1 -1
  68. package/dist/orchestrator/backgroundAgent.d.ts.map +1 -1
  69. package/dist/orchestrator/backgroundAgent.js +4 -16
  70. package/dist/orchestrator/backgroundAgent.js.map +1 -1
  71. package/dist/orchestrator/orchestrator.d.ts.map +1 -1
  72. package/dist/orchestrator/orchestrator.js +17 -15
  73. package/dist/orchestrator/orchestrator.js.map +1 -1
  74. package/dist/orchestrator/parallelResearch.d.ts.map +1 -1
  75. package/dist/orchestrator/parallelResearch.js +30 -44
  76. package/dist/orchestrator/parallelResearch.js.map +1 -1
  77. package/dist/orchestrator/types.d.ts +3 -2
  78. package/dist/orchestrator/types.d.ts.map +1 -1
  79. package/dist/tools/analytics/getUsageAnalytics.js +13 -13
  80. package/dist/tools/analytics/getUsageAnalytics.js.map +1 -1
  81. package/dist/tools/convention/getCodingGuide.js +2 -2
  82. package/dist/tools/convention/getCodingGuide.js.map +1 -1
  83. package/dist/tools/memory/createMemoryTimeline.js +11 -11
  84. package/dist/tools/memory/createMemoryTimeline.js.map +1 -1
  85. package/dist/tools/memory/getMemoryGraph.js +12 -12
  86. package/dist/tools/memory/getSessionContext.js +10 -10
  87. package/dist/tools/memory/getSessionContext.js.map +1 -1
  88. package/dist/tools/memory/linkMemories.js +14 -14
  89. package/dist/tools/memory/listMemories.js +4 -4
  90. package/dist/tools/memory/recallMemory.js +4 -4
  91. package/dist/tools/memory/restoreSessionContext.js +2 -2
  92. package/dist/tools/memory/restoreSessionContext.js.map +1 -1
  93. package/dist/tools/memory/saveMemory.js +4 -4
  94. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  95. package/dist/tools/memory/searchMemoriesAdvanced.js.map +1 -1
  96. package/dist/tools/memory/startSession.js +3 -3
  97. package/dist/tools/memory/startSession.js.map +1 -1
  98. package/dist/tools/planning/generatePrd.js +46 -46
  99. package/dist/tools/prompt/enhancePromptGemini.js +160 -160
  100. package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
  101. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  102. package/dist/tools/semantic/findReferences.d.ts.map +1 -1
  103. package/dist/tools/semantic/findReferences.js +2 -1
  104. package/dist/tools/semantic/findReferences.js.map +1 -1
  105. package/dist/tools/semantic/findSymbol.d.ts.map +1 -1
  106. package/dist/tools/semantic/findSymbol.js +2 -1
  107. package/dist/tools/semantic/findSymbol.js.map +1 -1
  108. package/hooks/hooks.json +10 -8
  109. 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
- | 상황 | 추천 모델 | MCP 도구 |
78
+ | 상황 | 추천 모델 | 호출 방법 |
79
79
  |------|----------|----------|
80
- | 아키텍처 검토 | GPT-5.2 | `gpt_analyze_architecture` |
81
- | UI/UX 리뷰 | Gemini 3 Pro | `gemini_review_ui` |
82
- | 디버깅 | GPT-5.2 | `gpt_debug` |
83
- | 코드 분석 | Gemini 3 Pro | `gemini_analyze_code` |
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
- .claude/
118
- ├── commands/ # 슬래시 커맨드
123
+ **전역 설치 (`~/.claude/`):**
124
+
125
+ ```text
126
+ ~/.claude/
127
+ ├── commands/ # 슬래시 커맨드 (7개)
119
128
  ├── agents/ # 리뷰/리서치 에이전트
120
- ├── skills/ # 자동 활성화 가이드
121
- └── vibe/
122
- ├── specs/ # SPEC 문서
123
- ├── features/ # BDD 시나리오
124
- ├── rules/ # 코딩 규칙
125
- └── solutions/ # 해결책 아카이브
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"}
@@ -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,8 @@
1
+ /**
2
+ * 협업자 자동 설치 설정
3
+ */
4
+ /**
5
+ * 협업자 자동 설치 설정
6
+ */
7
+ export declare function setupCollaboratorAutoInstall(projectRoot: string): void;
8
+ //# sourceMappingURL=collaborator.d.ts.map
@@ -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"}