@su-record/vibe 2.6.50 → 2.6.52

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 (132) hide show
  1. package/.env +14 -24
  2. package/agents/review/git-history-reviewer.md +1 -1
  3. package/commands/vibe.analyze.md +5 -5
  4. package/commands/vibe.reason.md +4 -4
  5. package/commands/vibe.review.md +7 -8
  6. package/commands/vibe.run.md +11 -14
  7. package/commands/vibe.spec.md +7 -12
  8. package/commands/vibe.spec.review.md +2 -5
  9. package/commands/vibe.trace.md +2 -2
  10. package/commands/vibe.utils.md +2 -5
  11. package/commands/vibe.verify.md +4 -4
  12. package/commands/vibe.voice.md +2 -5
  13. package/dist/cli/auth.d.ts +5 -1
  14. package/dist/cli/auth.d.ts.map +1 -1
  15. package/dist/cli/auth.js +26 -24
  16. package/dist/cli/auth.js.map +1 -1
  17. package/dist/cli/commands/info.d.ts.map +1 -1
  18. package/dist/cli/commands/info.js +9 -11
  19. package/dist/cli/commands/info.js.map +1 -1
  20. package/dist/cli/index.d.ts.map +1 -1
  21. package/dist/cli/index.js +71 -34
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/cli/llm/config.d.ts +1 -4
  24. package/dist/cli/llm/config.d.ts.map +1 -1
  25. package/dist/cli/llm/config.js +3 -9
  26. package/dist/cli/llm/config.js.map +1 -1
  27. package/dist/cli/llm/gemini-commands.d.ts.map +1 -1
  28. package/dist/cli/llm/gemini-commands.js +5 -4
  29. package/dist/cli/llm/gemini-commands.js.map +1 -1
  30. package/dist/cli/llm/gpt-commands.d.ts.map +1 -1
  31. package/dist/cli/llm/gpt-commands.js +3 -0
  32. package/dist/cli/llm/gpt-commands.js.map +1 -1
  33. package/dist/cli/postinstall/constants.js +1 -1
  34. package/dist/cli/postinstall/constants.js.map +1 -1
  35. package/dist/cli/postinstall/fs-utils.d.ts +3 -2
  36. package/dist/cli/postinstall/fs-utils.d.ts.map +1 -1
  37. package/dist/cli/postinstall/fs-utils.js +3 -8
  38. package/dist/cli/postinstall/fs-utils.js.map +1 -1
  39. package/dist/cli/postinstall/inline-skills.js +1 -1
  40. package/dist/cli/postinstall/main.js +3 -3
  41. package/dist/cli/postinstall/main.js.map +1 -1
  42. package/dist/cli/setup/GlobalInstaller.d.ts +3 -4
  43. package/dist/cli/setup/GlobalInstaller.d.ts.map +1 -1
  44. package/dist/cli/setup/GlobalInstaller.js +7 -13
  45. package/dist/cli/setup/GlobalInstaller.js.map +1 -1
  46. package/dist/cli/setup/ProjectSetup.js +3 -3
  47. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  48. package/dist/cli/setup/index.d.ts.map +1 -1
  49. package/dist/cli/setup/index.js +0 -1
  50. package/dist/cli/setup/index.js.map +1 -1
  51. package/dist/cli/setup.d.ts.map +1 -1
  52. package/dist/cli/setup.js +0 -1
  53. package/dist/cli/setup.js.map +1 -1
  54. package/dist/infra/lib/MemoryManager.d.ts.map +1 -1
  55. package/dist/infra/lib/MemoryManager.js +0 -2
  56. package/dist/infra/lib/MemoryManager.js.map +1 -1
  57. package/dist/infra/lib/claude/storage.d.ts.map +1 -1
  58. package/dist/infra/lib/claude/storage.js +3 -8
  59. package/dist/infra/lib/claude/storage.js.map +1 -1
  60. package/dist/infra/lib/gemini/auth.d.ts +0 -4
  61. package/dist/infra/lib/gemini/auth.d.ts.map +1 -1
  62. package/dist/infra/lib/gemini/auth.js +1 -8
  63. package/dist/infra/lib/gemini/auth.js.map +1 -1
  64. package/dist/infra/lib/gemini/index.d.ts +2 -1
  65. package/dist/infra/lib/gemini/index.d.ts.map +1 -1
  66. package/dist/infra/lib/gemini/index.js +2 -1
  67. package/dist/infra/lib/gemini/index.js.map +1 -1
  68. package/dist/infra/lib/gpt/auth.d.ts +0 -1
  69. package/dist/infra/lib/gpt/auth.d.ts.map +1 -1
  70. package/dist/infra/lib/gpt/auth.js +1 -7
  71. package/dist/infra/lib/gpt/auth.js.map +1 -1
  72. package/dist/infra/lib/gpt/chat.js +1 -1
  73. package/dist/infra/lib/llm/auth/ConfigManager.d.ts.map +1 -1
  74. package/dist/infra/lib/llm/auth/ConfigManager.js +2 -3
  75. package/dist/infra/lib/llm/auth/ConfigManager.js.map +1 -1
  76. package/dist/infra/types/tool.js +1 -1
  77. package/dist/infra/types/tool.js.map +1 -1
  78. package/dist/tools/evolution/dashboardTools.js +1 -1
  79. package/dist/tools/evolution/dashboardTools.js.map +1 -1
  80. package/dist/tools/evolution/index.js +2 -2
  81. package/dist/tools/evolution/index.js.map +1 -1
  82. package/dist/tools/evolution/insightTools.js +1 -1
  83. package/dist/tools/evolution/insightTools.js.map +1 -1
  84. package/dist/tools/index.js +1 -1
  85. package/dist/tools/index.js.map +1 -1
  86. package/dist/tools/interaction/askUser.d.ts +0 -2
  87. package/dist/tools/interaction/askUser.d.ts.map +1 -1
  88. package/dist/tools/interaction/askUser.js +0 -2
  89. package/dist/tools/interaction/askUser.js.map +1 -1
  90. package/dist/tools/interaction/index.d.ts +0 -2
  91. package/dist/tools/interaction/index.d.ts.map +1 -1
  92. package/dist/tools/interaction/index.js +0 -2
  93. package/dist/tools/interaction/index.js.map +1 -1
  94. package/dist/tools/memory/autoSaveContext.js +1 -1
  95. package/dist/tools/memory/autoSaveContext.js.map +1 -1
  96. package/dist/tools/memory/createMemoryTimeline.js +1 -1
  97. package/dist/tools/memory/createMemoryTimeline.js.map +1 -1
  98. package/dist/tools/memory/getMemoryGraph.js +1 -1
  99. package/dist/tools/memory/getMemoryGraph.js.map +1 -1
  100. package/dist/tools/memory/getSessionContext.js +1 -1
  101. package/dist/tools/memory/getSessionContext.js.map +1 -1
  102. package/dist/tools/memory/index.js +1 -1
  103. package/dist/tools/memory/index.js.map +1 -1
  104. package/dist/tools/memory/linkMemories.js +1 -1
  105. package/dist/tools/memory/linkMemories.js.map +1 -1
  106. package/dist/tools/memory/saveMemory.js +1 -1
  107. package/dist/tools/memory/saveMemory.js.map +1 -1
  108. package/dist/tools/memory/searchMemoriesAdvanced.js +1 -1
  109. package/dist/tools/memory/searchMemoriesAdvanced.js.map +1 -1
  110. package/dist/tools/memory/startSession.d.ts.map +1 -1
  111. package/dist/tools/memory/startSession.js +1 -2
  112. package/dist/tools/memory/startSession.js.map +1 -1
  113. package/dist/tools/semantic/analyzeDependencyGraph.js +1 -1
  114. package/dist/tools/semantic/analyzeDependencyGraph.js.map +1 -1
  115. package/dist/tools/semantic/findReferences.d.ts.map +1 -1
  116. package/dist/tools/semantic/findReferences.js +1 -2
  117. package/dist/tools/semantic/findReferences.js.map +1 -1
  118. package/dist/tools/semantic/findSymbol.d.ts.map +1 -1
  119. package/dist/tools/semantic/findSymbol.js +1 -2
  120. package/dist/tools/semantic/findSymbol.js.map +1 -1
  121. package/hooks/hooks.json +14 -14
  122. package/hooks/scripts/keyword-detector.js +1 -1
  123. package/hooks/scripts/post-tool-verify.js +1 -1
  124. package/hooks/scripts/pre-tool-guard.js +1 -1
  125. package/hooks/scripts/skill-injector.js +1 -1
  126. package/hooks/scripts/stop-notify.js +1 -1
  127. package/hooks/scripts/utils.js +6 -6
  128. package/languages/python-fastapi.md +1 -1
  129. package/package.json +1 -1
  130. package/skills/brand-assets/SKILL.md +1 -1
  131. package/skills/core-capabilities/SKILL.md +3 -3
  132. package/skills/parallel-research/SKILL.md +1 -1
package/.env CHANGED
@@ -17,35 +17,25 @@ SLACK_ALLOWED_CHANNELS=
17
17
  GEMINI_API_KEY=AIzaSyA6Xo4uTG-tqAs07CocKhEzs7LLixL1P9o
18
18
 
19
19
  # ─── OpenAI ──────────────────────────────────────────────────────────
20
- OPENAI_API_KEY=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
21
-
22
- # ─── GPT OAuth (OpenAI Codex CLI PKCE) ──────────────────────────────
23
- # client_id: app_EMoamEEZ73f0CkXaXp7hrann
24
- # authorize: https://auth.openai.com/oauth/authorize
25
- # token: https://auth.openai.com/oauth/token
26
- # redirect: http://localhost:1455/auth/callback
27
- # scope: openid profile email offline_access
28
- GPT_OAUTH_REFRESH_TOKEN=rt_RW_twFiROvrUP612RH9nL68pZyOZH_Vyz3x4qLEesRE.gX6Hswde_zcubOF1jJpvROSmSr-pmXkL5ef-wg9pihE
29
-
30
- # ─── Gemini OAuth (via Gemini CLI — @google/gemini-cli) ──────────────
31
- # credentials: ~/.gemini/oauth_creds.json (auto-detected)
32
- # client_id: 681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com
33
- # auth order: gemini-cli → apikey
20
+ OPENAI_API_KEY=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
21
+
22
+ # ─── GPT OAuth ──────────────────────────────────────────────────────
23
+ GPT_OAUTH_REFRESH_TOKEN=rt_T4NTlgJtgqUpw5qpx2xvGwJ7_niAYQBEChutVs2-Vb0.zfksqi5wjRv-8Ww6QtUOCJGabA0aviDS2ggyRVAnKmI
24
+
25
+ # ─── Gemini OAuth ────────────────────────────────────────────────────
34
26
  GEMINI_OAUTH_REFRESH_TOKEN=1//0eTG9YDGVchVOCgYIARAAGA4SNwF-L9IryFIeIUvne7lpgRK8QFUgRXuvL55MBHMzDnxsXDbltWwy4H38TMY6zVKcQM-3qgILcb4
35
27
 
36
28
  # ─── Model Overrides (optional - uses hardcoded defaults if not set) ─
37
- # Claude (역할별 — Claude Code 네이티브)
38
- CLAUDE_ARCHITECTURE_MODEL=claude-opus-4-6 # 아키텍처, 복잡한 추론
39
- CLAUDE_RESEARCH_MODEL=claude-haiku-4-5 # 리서치, 탐색 (빠름)
40
- CLAUDE_REVIEW_MODEL=claude-haiku-4-5 # 리뷰 (빠름)
41
- CLAUDE_BACKGROUND_MODEL=claude-sonnet-4-5 # 구현, 백그라운드 작업
29
+ # Claude
30
+ CLAUDE_ARCHITECTURE_MODEL=claude-opus-4-6
31
+ CLAUDE_RESEARCH_MODEL=claude-haiku-4-5
32
+ CLAUDE_REVIEW_MODEL=claude-haiku-4-5
33
+ CLAUDE_BACKGROUND_MODEL=claude-sonnet-4-5
42
34
 
43
- # GPT (Chat/Reasoning — OAuth: gpt-5.3-codex, OAuth Pro: codex-spark)
35
+ # GPT
44
36
  GPT_MODEL=gpt-5.2
45
- # Plus Plan Use: gpt-5.3-codex
46
- # Pro Plan Use: gpt-5.3-codex-spark
47
37
 
48
- # Gemini (API Key + Gemini CLI 공용)
38
+ # Gemini
49
39
  GEMINI_MODEL=gemini-3-pro-preview
50
40
  GEMINI_FLASH_MODEL=gemini-3-flash-preview
51
41
  GEMINI_SEARCH_MODEL=gemini-3-flash-preview
@@ -53,7 +43,7 @@ GEMINI_SEARCH_MODEL=gemini-3-flash-preview
53
43
  GEMINI_OAUTH_MODEL=gemini-3-pro-high
54
44
  GEMINI_OAUTH_FLASH_MODEL=gemini-3-flash
55
45
 
56
- # Embedding (API Key 전용 — OAuth 미지원)
46
+ # Embedding
57
47
  EMBEDDING_MODEL=text-embedding-3-large
58
48
  GEMINI_EMBEDDING_MODEL=text-embedding-004
59
49
 
@@ -71,7 +71,7 @@ git log --grep="revert" --oneline
71
71
 
72
72
  ### 🟡 P2 Important
73
73
  2. **Single Owner Risk**
74
- - 📍 File: src/core/billing.py
74
+ - 📍 File: src/vibe/billing.py
75
75
  - 📊 95% commits by one developer
76
76
  - 💡 Knowledge transfer needed
77
77
 
@@ -233,7 +233,7 @@ Which approach would you like to use?
233
233
  All tools are called via:
234
234
 
235
235
  ```bash
236
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
236
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
237
237
  ```
238
238
 
239
239
  ### Recommended Tools for Analysis
@@ -251,25 +251,25 @@ node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index
251
251
  **1. Find function definition:**
252
252
 
253
253
  ```bash
254
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.findSymbol({symbolName: 'login', searchPath: 'src/'}).then(r => console.log(r.content[0].text)))"
254
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.findSymbol({symbolName: 'login', searchPath: 'src/'}).then(r => console.log(r.content[0].text)))"
255
255
  ```
256
256
 
257
257
  **2. Analyze complexity:**
258
258
 
259
259
  ```bash
260
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.analyzeComplexity({targetPath: 'src/services/', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
260
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.analyzeComplexity({targetPath: 'src/services/', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
261
261
  ```
262
262
 
263
263
  **3. Validate code quality:**
264
264
 
265
265
  ```bash
266
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.validateCodeQuality({targetPath: 'src/', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
266
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.validateCodeQuality({targetPath: 'src/', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
267
267
  ```
268
268
 
269
269
  **4. Save analysis results:**
270
270
 
271
271
  ```bash
272
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.saveMemory({key: 'analysis-login-module', value: 'Found 5 related files, complexity avg 6.2', category: 'analysis', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
272
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.saveMemory({key: 'analysis-login-module', value: 'Found 5 related files, complexity avg 6.2', category: 'analysis', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
273
273
  ```
274
274
 
275
275
  ---
@@ -189,7 +189,7 @@ AI: Analyzing with 9-step reasoning framework...
189
189
  All tools are called via:
190
190
 
191
191
  ```bash
192
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
192
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
193
193
  ```
194
194
 
195
195
  ### Recommended Tools for Reasoning
@@ -207,19 +207,19 @@ node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index
207
207
  **1. Find potential problem source:**
208
208
 
209
209
  ```bash
210
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.findSymbol({symbolName: 'getProfile', searchPath: 'src/'}).then(r => console.log(r.content[0].text)))"
210
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.findSymbol({symbolName: 'getProfile', searchPath: 'src/'}).then(r => console.log(r.content[0].text)))"
211
211
  ```
212
212
 
213
213
  **2. Trace references to understand flow:**
214
214
 
215
215
  ```bash
216
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.findReferences({symbolName: 'sessionData', searchPath: 'src/'}).then(r => console.log(r.content[0].text)))"
216
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.findReferences({symbolName: 'sessionData', searchPath: 'src/'}).then(r => console.log(r.content[0].text)))"
217
217
  ```
218
218
 
219
219
  **3. Save hypothesis verification result:**
220
220
 
221
221
  ```bash
222
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.saveMemory({key: 'hypothesis-1-result', value: 'Session save timing issue confirmed - race condition in auth middleware', category: 'reasoning', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
222
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.saveMemory({key: 'hypothesis-1-result', value: 'Session save timing issue confirmed - race condition in auth middleware', category: 'reasoning', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
223
223
  ```
224
224
 
225
225
  ---
@@ -106,8 +106,7 @@ security-review:
106
106
  2. Write JSON input file `[SCRATCHPAD]/review-input.json` (using Write tool):
107
107
  - `{"prompt": "Review this code for [REVIEW_TYPE]. Return JSON: {issues: [{id, title, description, severity, suggestion}]}. Code: [CODE_CONTENT]"}`
108
108
  - Where `[CODE_CONTENT]` is the code text (properly JSON-escaped inside the prompt string)
109
- 3. Resolve script path (once per session): `node -e "console.log(require('path').join(process.env.APPDATA || require('os').homedir() + '/.config', 'vibe/hooks/scripts/llm-orchestrate.js'))"`
110
- - Save output as `[LLM_SCRIPT]`
109
+ 3. Script path: `[LLM_SCRIPT]` = `{{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js`
111
110
  4. Run GPT + Gemini in PARALLEL (two Bash tool calls at once):
112
111
 
113
112
  ```bash
@@ -147,13 +146,13 @@ Read CLAUDE.md -> Explicit tech stack declaration
147
146
 
148
147
  **Execution via Orchestrator (12+ agents in parallel):**
149
148
  ```bash
150
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/infra/orchestrator/index.js').then(o => o.review(['FILE_PATHS'], ['DETECTED_STACKS']).then(r => console.log(r.content[0].text)))"
149
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/infra/orchestrator/index.js').then(o => o.review(['FILE_PATHS'], ['DETECTED_STACKS']).then(r => console.log(r.content[0].text)))"
151
150
  ```
152
151
 
153
152
  **Example:**
154
153
  ```bash
155
154
  # Review changed files with TypeScript + React stack
156
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/infra/orchestrator/index.js').then(o => o.review(['src/api/users.ts', 'src/components/Login.tsx'], ['TypeScript', 'React']).then(r => console.log(r.content[0].text)))"
155
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/infra/orchestrator/index.js').then(o => o.review(['src/api/users.ts', 'src/components/Login.tsx'], ['TypeScript', 'React']).then(r => console.log(r.content[0].text)))"
157
156
  ```
158
157
 
159
158
  **Core Reviewers (Always Run):**
@@ -436,7 +435,7 @@ Which approach would you like to proceed with?
436
435
  All tools are called via:
437
436
 
438
437
  ```bash
439
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
438
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
440
439
  ```
441
440
 
442
441
  ### Recommended Tools for Review
@@ -454,19 +453,19 @@ node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index
454
453
  **1. Validate code quality before review:**
455
454
 
456
455
  ```bash
457
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.validateCodeQuality({targetPath: 'src/', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
456
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.validateCodeQuality({targetPath: 'src/', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
458
457
  ```
459
458
 
460
459
  **2. Analyze complexity of changed files:**
461
460
 
462
461
  ```bash
463
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.analyzeComplexity({targetPath: 'src/api/users.ts', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
462
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.analyzeComplexity({targetPath: 'src/api/users.ts', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
464
463
  ```
465
464
 
466
465
  **3. Save critical finding for reference:**
467
466
 
468
467
  ```bash
469
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.saveMemory({key: 'review-pr123-critical', value: 'SQL injection in users.py:42', category: 'review', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
468
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.saveMemory({key: 'review-pr123-critical', value: 'SQL injection in users.py:42', category: 'review', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
470
469
  ```
471
470
 
472
471
  ---
@@ -215,7 +215,7 @@ Like Sisyphus rolling the boulder, ULTRAWORK **keeps going until done**:
215
215
 
216
216
  ```bash
217
217
  # Generate RTM for coverage verification
218
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.generateTraceabilityMatrix('{feature-name}', {projectPath: process.cwd()}).then(r => console.log(JSON.stringify(r, null, 2))))"
218
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.generateTraceabilityMatrix('{feature-name}', {projectPath: process.cwd()}).then(r => console.log(JSON.stringify(r, null, 2))))"
219
219
  ```
220
220
 
221
221
  **RTM provides automated metrics:**
@@ -573,9 +573,7 @@ When external LLMs are enabled in `.claude/vibe/config.json`:
573
573
  # - If systemPrompt omitted, uses default
574
574
  # - If systemPrompt is "-", uses default and treats next argument as prompt
575
575
 
576
- # Step 1: Resolve script path (once per session)
577
- node -e "console.log(require('path').join(process.env.APPDATA || require('os').homedir() + '/.config', 'vibe/hooks/scripts/llm-orchestrate.js'))"
578
- # Save output as [LLM_SCRIPT]
576
+ # [LLM_SCRIPT] = {{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js
579
577
 
580
578
  # GPT call (short prompt - CLI arg)
581
579
  node "[LLM_SCRIPT]" gpt orchestrate-json "[question content]"
@@ -609,7 +607,7 @@ Use core tools for accurate codebase understanding and session continuity.
609
607
 
610
608
  All tools are called via:
611
609
  ```bash
612
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
610
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
613
611
  ```
614
612
 
615
613
  ### Semantic Analysis Tools
@@ -623,7 +621,7 @@ node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index
623
621
 
624
622
  **Example - Find symbol:**
625
623
  ```bash
626
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.findSymbol({symbolName: 'login', searchPath: '.'}).then(r => console.log(r.content[0].text)))"
624
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.findSymbol({symbolName: 'login', searchPath: '.'}).then(r => console.log(r.content[0].text)))"
627
625
  ```
628
626
 
629
627
  ### Memory Tools
@@ -636,7 +634,7 @@ node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index
636
634
 
637
635
  **Example - Save important decision:**
638
636
  ```bash
639
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.saveMemory({key: 'auth-pattern', value: 'Using JWT with refresh tokens', category: 'project'}).then(r => console.log(r.content[0].text)))"
637
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.saveMemory({key: 'auth-pattern', value: 'Using JWT with refresh tokens', category: 'project'}).then(r => console.log(r.content[0].text)))"
640
638
  ```
641
639
 
642
640
  ### Session Management (Auto via Hooks)
@@ -853,10 +851,10 @@ Then: Login success + JWT token returned
853
851
  **Launch background agents for next phase via Orchestrator:**
854
852
  ```bash
855
853
  # Start background agent (doesn't block)
856
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/infra/orchestrator/index.js').then(o => o.runAgent('Phase 2 prep: Analyze auth API endpoints', 'phase2-prep').then(r => console.log(r.content[0].text)))"
854
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/infra/orchestrator/index.js').then(o => o.runAgent('Phase 2 prep: Analyze auth API endpoints', 'phase2-prep').then(r => console.log(r.content[0].text)))"
857
855
 
858
856
  # Multiple backgrounds in parallel
859
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/infra/orchestrator/index.js').then(async o => {
857
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/infra/orchestrator/index.js').then(async o => {
860
858
  await Promise.all([
861
859
  o.runAgent('Phase 2 prep: Analyze auth API endpoints', 'phase2-prep'),
862
860
  o.runAgent('Pre-generate test cases for login form', 'test-prep'),
@@ -868,12 +866,12 @@ node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/infra/orche
868
866
 
869
867
  **Check background agent status:**
870
868
  ```bash
871
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/infra/orchestrator/index.js').then(o => console.log(o.status().content[0].text))"
869
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/infra/orchestrator/index.js').then(o => console.log(o.status().content[0].text))"
872
870
  ```
873
871
 
874
872
  **Get result when ready:**
875
873
  ```bash
876
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/infra/orchestrator/index.js').then(o => o.getResult('SESSION_ID').then(r => console.log(r.content[0].text)))"
874
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/infra/orchestrator/index.js').then(o => o.getResult('SESSION_ID').then(r => console.log(r.content[0].text)))"
877
875
  ```
878
876
 
879
877
  **Why Background Agents Matter:**
@@ -1481,7 +1479,7 @@ Brand:
1481
1479
 
1482
1480
  **Manual Generation:**
1483
1481
  ```bash
1484
- # [LLM_SCRIPT] = resolved path from: node -e "console.log(require('path').join(process.env.APPDATA || require('os').homedir() + '/.config', 'vibe/hooks/scripts/llm-orchestrate.js'))"
1482
+ # [LLM_SCRIPT] = {{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js
1485
1483
  node "[LLM_SCRIPT]" gemini image "App icon for MyApp, primary color #2F6BFF, square format 1:1, simple recognizable design, works well at small sizes, no text or letters, solid or gradient background, modern minimalist" --output "./public/app-icon.png"
1486
1484
  ```
1487
1485
 
@@ -1535,8 +1533,7 @@ After all scenarios are implemented, **GPT and Gemini review in parallel with cr
1535
1533
  2. Write JSON input file `[SCRATCHPAD]/review-input.json` (using Write tool):
1536
1534
  - `{"prompt": "Review this code for security, performance, and best practices. Return JSON: {issues: [{id, title, description, severity, suggestion}]}. Code: [CODE_CONTENT]"}`
1537
1535
  - Where `[CODE_CONTENT]` is the code text (properly JSON-escaped inside the prompt string)
1538
- 3. Resolve script path (once per session): `node -e "console.log(require('path').join(process.env.APPDATA || require('os').homedir() + '/.config', 'vibe/hooks/scripts/llm-orchestrate.js'))"`
1539
- - Save output as `[LLM_SCRIPT]`
1536
+ 3. Script path: `[LLM_SCRIPT]` = `{{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js`
1540
1537
  4. Run GPT + Gemini in PARALLEL (two Bash tool calls at once):
1541
1538
 
1542
1539
  ```bash
@@ -102,7 +102,7 @@ When image files (`.png`, `.jpg`, `.jpeg`, `.webp`) are provided as input, analy
102
102
  **Gemini enabled - analyze via llm-orchestrate.js:**
103
103
 
104
104
  ```bash
105
- # [LLM_SCRIPT] = resolved path from: node -e "console.log(require('path').join(process.env.APPDATA || require('os').homedir() + '/.config', 'vibe/hooks/scripts/llm-orchestrate.js'))"
105
+ # [LLM_SCRIPT] = {{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js
106
106
  node "[LLM_SCRIPT]" gemini analyze-image "./designs/login-wireframe.png" "Analyze this UI design image. Identify all UI elements, layout structure, colors, typography, and component hierarchy. Output a structured breakdown."
107
107
  ```
108
108
 
@@ -405,13 +405,8 @@ Read ~/.claude/vibe/languages/typescript-react.md
405
405
 
406
406
  **→ IMMEDIATELY run these 6 Bash commands IN PARALLEL (all at once):**
407
407
 
408
- **🚨 MANDATORY: Copy the EXACT path below. DO NOT modify or use alternative paths.**
409
-
410
- **Step 0: Resolve script path (once per session, using Bash tool):**
411
- ```bash
412
- node -e "console.log(require('path').join(process.env.APPDATA || require('os').homedir() + '/.config', 'vibe/hooks/scripts/llm-orchestrate.js'))"
413
- ```
414
- Save the output as `[LLM_SCRIPT]` for use in all subsequent calls.
408
+ **Step 0: Script path:**
409
+ - `[LLM_SCRIPT]` = `{{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js`
415
410
 
416
411
  **Run all 4 in PARALLEL (each as separate Bash tool call):**
417
412
  ```bash
@@ -1154,7 +1149,7 @@ Claude: Thank you. SPEC has been refined.
1154
1149
  ### Tool Invocation
1155
1150
  All tools are called via:
1156
1151
  ```bash
1157
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
1152
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
1158
1153
  ```
1159
1154
 
1160
1155
  ### Recommended Tools for SPEC Creation
@@ -1171,17 +1166,17 @@ node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index
1171
1166
 
1172
1167
  **1. Find existing auth implementation:**
1173
1168
  ```bash
1174
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.findSymbol({symbolName: 'login', searchPath: 'src/'}).then(r => console.log(r.content[0].text)))"
1169
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.findSymbol({symbolName: 'login', searchPath: 'src/'}).then(r => console.log(r.content[0].text)))"
1175
1170
  ```
1176
1171
 
1177
1172
  **2. Save confirmed requirements:**
1178
1173
  ```bash
1179
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.saveMemory({key: 'brick-game-requirements', value: 'Platform: Web, Stack: Phaser.js, Style: Neon', category: 'spec', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
1174
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.saveMemory({key: 'brick-game-requirements', value: 'Platform: Web, Stack: Phaser.js, Style: Neon', category: 'spec', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
1180
1175
  ```
1181
1176
 
1182
1177
  **3. Recall previous decisions:**
1183
1178
  ```bash
1184
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.recallMemory({key: 'brick-game-requirements', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
1179
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.recallMemory({key: 'brick-game-requirements', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
1185
1180
  ```
1186
1181
 
1187
1182
  ## Next Step
@@ -200,11 +200,8 @@ Score: 96/100 ✅ PASSED
200
200
  ```
201
201
  - Where `[SPEC_CONTENT]` is the full SPEC text (properly JSON-escaped inside the prompt string)
202
202
 
203
- **Step B: Resolve script path (one-time per session, using Bash tool):**
204
- ```bash
205
- node -e "console.log(require('path').join(process.env.APPDATA || require('os').homedir() + '/.config', 'vibe/hooks/scripts/llm-orchestrate.js'))"
206
- ```
207
- - Save the output as `[LLM_SCRIPT]` for use in all subsequent calls.
203
+ **Step B: Script path:**
204
+ - `[LLM_SCRIPT]` = `{{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js`
208
205
 
209
206
  **Step C: Run GPT + Gemini in PARALLEL (two separate Bash tool calls at once):**
210
207
 
@@ -181,10 +181,10 @@ The RTM generation uses core tools:
181
181
 
182
182
  ```bash
183
183
  # Generate RTM
184
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.generateTraceabilityMatrix('login').then(m => console.log(t.formatMatrixAsMarkdown(m))))"
184
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.generateTraceabilityMatrix('login').then(m => console.log(t.formatMatrixAsMarkdown(m))))"
185
185
 
186
186
  # Generate HTML
187
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.generateTraceabilityMatrix('login').then(m => console.log(t.formatMatrixAsHtml(m))))"
187
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.generateTraceabilityMatrix('login').then(m => console.log(t.formatMatrixAsHtml(m))))"
188
188
  ```
189
189
 
190
190
  ## Options
@@ -93,11 +93,8 @@ Generate images using Gemini Image API.
93
93
 
94
94
  **CRITICAL: You MUST use the following command to generate images. Do NOT search for scripts, do NOT use gcloud, do NOT use any other method.**
95
95
 
96
- **Step 0: Resolve script path (once per session):**
97
- ```bash
98
- node -e "console.log(require('path').join(process.env.APPDATA || require('os').homedir() + '/.config', 'vibe/hooks/scripts/llm-orchestrate.js'))"
99
- ```
100
- Save the output as `[LLM_SCRIPT]` for use in all subsequent calls.
96
+ **Step 0: Script path:**
97
+ - `[LLM_SCRIPT]` = `{{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js`
101
98
 
102
99
  **General image generation (Nano Banana):**
103
100
  ```bash
@@ -270,7 +270,7 @@ Claude:
270
270
  All tools are called via:
271
271
 
272
272
  ```bash
273
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
273
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
274
274
  ```
275
275
 
276
276
  ### Recommended Tools for Verification
@@ -287,19 +287,19 @@ node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index
287
287
  **1. Validate code quality:**
288
288
 
289
289
  ```bash
290
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.validateCodeQuality({targetPath: 'src/auth/', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
290
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.validateCodeQuality({targetPath: 'src/auth/', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
291
291
  ```
292
292
 
293
293
  **2. Analyze complexity of implementation:**
294
294
 
295
295
  ```bash
296
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.analyzeComplexity({targetPath: 'src/auth/login.ts', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
296
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.analyzeComplexity({targetPath: 'src/auth/login.ts', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
297
297
  ```
298
298
 
299
299
  **3. Find implemented feature:**
300
300
 
301
301
  ```bash
302
- node -e "import('{{CORE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.findSymbol({symbolName: 'handleLogin', searchPath: 'src/'}).then(r => console.log(r.content[0].text)))"
302
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.findSymbol({symbolName: 'handleLogin', searchPath: 'src/'}).then(r => console.log(r.content[0].text)))"
303
303
  ```
304
304
 
305
305
  ## Next Step
@@ -31,11 +31,8 @@ argument-hint: "--pro for high accuracy, --lang ko for Korean"
31
31
 
32
32
  ### Step 2: 음성 녹음 및 변환
33
33
 
34
- **스크립트 경로 해석 (세션당 1회):**
35
- ```bash
36
- node -e "console.log(require('path').join(process.env.APPDATA || require('os').homedir() + '/.config', 'vibe/hooks/scripts/llm-orchestrate.js'))"
37
- ```
38
- 출력값을 `[LLM_SCRIPT]`로 저장.
34
+ **스크립트 경로:**
35
+ - `[LLM_SCRIPT]` = `{{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js`
39
36
 
40
37
  ```bash
41
38
  node "[LLM_SCRIPT]" gemini voice $ARGUMENTS
@@ -3,7 +3,11 @@
3
3
  */
4
4
  import { LLMAuthStatus, LLMStatusMap, ClaudeCodeStatus } from './types.js';
5
5
  /**
6
- * LLM 인증 상태 확인 (환경변수 기반)
6
+ * ~/.vibe/.env 환경변수 저장 (upsert)
7
+ */
8
+ export declare function saveToGlobalEnv(key: string, value: string): void;
9
+ /**
10
+ * LLM 인증 상태 확인 (환경변수 전용)
7
11
  */
8
12
  export declare function getLLMAuthStatus(): LLMStatusMap;
9
13
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE3E;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAuC/C;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,UAAQ,GAAG,gBAAgB,CAsCvE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAWvE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,CAOhE;AAED,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAYvE"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE3E;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAsBhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAoB/C;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,UAAQ,GAAG,gBAAgB,CAsCvE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAWvE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,CAOhE;AAED,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAYvE"}
package/dist/cli/auth.js CHANGED
@@ -6,7 +6,30 @@ import path from 'path';
6
6
  import fs from 'fs';
7
7
  import { execSync } from 'child_process';
8
8
  /**
9
- * LLM 인증 상태 확인 (환경변수 기반)
9
+ * ~/.vibe/.env 환경변수 저장 (upsert)
10
+ */
11
+ export function saveToGlobalEnv(key, value) {
12
+ const envDir = path.join(os.homedir(), '.vibe');
13
+ const envPath = path.join(envDir, '.env');
14
+ if (!fs.existsSync(envDir)) {
15
+ fs.mkdirSync(envDir, { recursive: true });
16
+ }
17
+ let content = '';
18
+ if (fs.existsSync(envPath)) {
19
+ content = fs.readFileSync(envPath, 'utf-8');
20
+ }
21
+ const regex = new RegExp(`^${key}=.*$`, 'm');
22
+ if (regex.test(content)) {
23
+ content = content.replace(regex, `${key}=${value}`);
24
+ }
25
+ else {
26
+ content = content.trimEnd() + (content ? '\n' : '') + `${key}=${value}\n`;
27
+ }
28
+ fs.writeFileSync(envPath, content, { mode: 0o600 });
29
+ process.env[key] = value;
30
+ }
31
+ /**
32
+ * LLM 인증 상태 확인 (환경변수 전용)
10
33
  */
11
34
  export function getLLMAuthStatus() {
12
35
  const status = { claude: [], gpt: [], gemini: [] };
@@ -17,31 +40,10 @@ export function getLLMAuthStatus() {
17
40
  if (process.env.OPENAI_API_KEY) {
18
41
  status.gpt.push({ type: 'apikey', valid: true });
19
42
  }
20
- // Gemini: 환경변수 우선 → 파일 기반 fallback
21
- if (process.env.ANTIGRAVITY_REFRESH_TOKEN) {
22
- status.gemini.push({ type: 'oauth', valid: true });
23
- }
24
- else if (process.env.GEMINI_OAUTH_REFRESH_TOKEN) {
43
+ // Gemini (환경변수 전용)
44
+ if (process.env.ANTIGRAVITY_REFRESH_TOKEN || process.env.GEMINI_OAUTH_REFRESH_TOKEN) {
25
45
  status.gemini.push({ type: 'oauth', valid: true });
26
46
  }
27
- else {
28
- try {
29
- const geminiCliPaths = [
30
- path.join(os.homedir(), '.gemini', 'oauth_creds.json'),
31
- path.join(os.homedir(), '.config', 'gemini-cli', 'oauth_creds.json'),
32
- ];
33
- for (const credPath of geminiCliPaths) {
34
- if (fs.existsSync(credPath)) {
35
- const data = JSON.parse(fs.readFileSync(credPath, 'utf-8'));
36
- if (data.access_token && data.refresh_token) {
37
- status.gemini.push({ type: 'oauth', valid: true });
38
- break;
39
- }
40
- }
41
- }
42
- }
43
- catch { /* ignore */ }
44
- }
45
47
  if (process.env.GEMINI_API_KEY) {
46
48
  status.gemini.push({ type: 'apikey', valid: true });
47
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAqC/B;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CA0FjC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAmC/B;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CA0FjC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}
@@ -13,25 +13,23 @@ export function showHelp() {
13
13
  console.log(`
14
14
  VIBE - Personalized AI Agent (Claude Code exclusive)
15
15
 
16
- Lifecycle:
17
- vibe setup 셋업 위자드 (인증, 채널, 설정 한번에)
18
- vibe start 데몬 시작 + 인터페이스 활성화
19
- vibe stop 데몬 중지
20
- vibe restart 데몬 재시작
21
- vibe status 전체 상태 확인
22
-
23
16
  Commands:
17
+ vibe setup 셋업 위자드 (인증, 채널, 설정 한번에)
24
18
  vibe init [project] 프로젝트 초기화
25
19
  vibe update 설정 업데이트
26
- Channels:
27
- vibe telegram <cmd> Telegram (setup, chat, status)
28
- vibe slack <cmd> Slack (setup, channel, status)
20
+ vibe upgrade 최신 버전으로 업그레이드
21
+ vibe remove 프로젝트에서 제거
22
+ vibe status 전체 상태 확인
29
23
 
30
24
  LLM:
31
25
  vibe claude <cmd> Claude (key, status, logout)
32
26
  vibe gpt <cmd> GPT (auth, key, status, logout)
33
27
  vibe gemini <cmd> Gemini (auth, key, status, logout)
34
- vibe config <cmd> Provider config (show)
28
+ vibe env import [path] .env → ~/.vibe/.env 복사
29
+
30
+ Channels:
31
+ vibe telegram <cmd> Telegram (setup, chat, status)
32
+ vibe slack <cmd> Slack (setup, channel, status)
35
33
 
36
34
  Slash Commands (Claude Code):
37
35
  /vibe.spec "feature" SPEC 작성 + 리서치
@@ -1 +1 @@
1
- {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCX,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAErD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,MAAM,GAAyC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAClF,IAAI,aAAa,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IAEtC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAE9D,iCAAiC;IACjC,IAAI,eAAe,GAAG,8BAA8B,CAAC;IACrD,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,IAAI,cAAc,EAAE,EAAE,CAAC;YACrB,eAAe,GAAG,SAAS,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAkB;gBAC/D,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,iBAAiB,CAAC;YAC3E,eAAe,GAAG,0BAA0B,MAAM,GAAG,CAAC;QACxD,CAAC;IACH,CAAC;IAED,UAAU;IACV,MAAM,aAAa,GAAG,aAAa;QACjC,CAAC,CAAC,KAAK,WAAW,EAAE;QACpB,CAAC,CAAC,uCAAuC,CAAC;IAE5C,4CAA4C;IAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,QAA+C,CAAC;IAC3E,MAAM,WAAW,GAAG,MAAM,CAAC,QAA+C,CAAC;IAC3E,MAAM,YAAY,GAAI,WAAW,EAAE,IAAe,IAAI,SAAS,CAAC;IAChE,MAAM,UAAU,GAAG,WAAW,EAAE,OAAO,KAAK,KAAK,CAAC;IAClD,MAAM,YAAY,GAAG,WAAW,EAAE,SAAgD,CAAC;IACnF,MAAM,WAAW,GAAG,YAAY,EAAE,OAAO,KAAK,KAAK,CAAC;IAEpD,eAAe;IACf,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,iEAAiE;YACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC3C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;YAEhE,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,cAAc,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC;gBACH,YAAY,GAAI,EAAE,CAAC,OAAO,CAAC,6DAA6D,CAAC,CAAC,GAAG,CAAC,OAAO,CAAmB,EAAE,CAAC,IAAI,CAAC,CAAC;gBACjI,cAAc,GAAI,EAAE,CAAC,OAAO,CAAC,qFAAqF,CAAC,CAAC,GAAG,CAAC,OAAO,CAAmB,EAAE,CAAC,IAAI,CAAC,CAAC;YAC7J,CAAC;YAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;YAErC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,GAAG,eAAe,YAAY,aAAa,cAAc,aAAa,CAAC;YAChF,CAAC;YACD,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC;gBACE,WAAW,CAAC,OAAO;;WAExB,aAAa;EACtB,aAAa,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;;;oBAGzC,gBAAgB;oBAChB,aAAa;oBACb,gBAAgB;;;oBAGhB,YAAY;oBACZ,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;oBACzB,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;EAC5C,OAAO;;qBAEY,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,4DAA4D,CAAC,CAAC,CAAC,mCAAmC;;;sBAGxK,eAAe;GAClC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"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"}