@su-record/vibe 2.7.12 → 2.7.14

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 (331) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +126 -126
  3. package/LICENSE +21 -21
  4. package/README.md +449 -580
  5. package/agents/architect-low.md +41 -41
  6. package/agents/architect-medium.md +59 -59
  7. package/agents/architect.md +80 -80
  8. package/agents/build-error-resolver.md +115 -115
  9. package/agents/compounder.md +261 -261
  10. package/agents/diagrammer.md +178 -178
  11. package/agents/docs/api-documenter.md +99 -99
  12. package/agents/docs/changelog-writer.md +93 -93
  13. package/agents/e2e-tester.md +294 -266
  14. package/agents/explorer-low.md +42 -42
  15. package/agents/explorer-medium.md +59 -59
  16. package/agents/explorer.md +48 -48
  17. package/agents/implementer-low.md +43 -43
  18. package/agents/implementer-medium.md +52 -52
  19. package/agents/implementer.md +54 -54
  20. package/agents/junior-mentor.md +141 -141
  21. package/agents/planning/requirements-analyst.md +84 -84
  22. package/agents/planning/ux-advisor.md +83 -83
  23. package/agents/qa/acceptance-tester.md +86 -86
  24. package/agents/qa/edge-case-finder.md +93 -93
  25. package/agents/refactor-cleaner.md +143 -143
  26. package/agents/research/best-practices-agent.md +199 -199
  27. package/agents/research/codebase-patterns-agent.md +157 -157
  28. package/agents/research/framework-docs-agent.md +188 -188
  29. package/agents/research/security-advisory-agent.md +213 -213
  30. package/agents/review/architecture-reviewer.md +107 -107
  31. package/agents/review/complexity-reviewer.md +116 -116
  32. package/agents/review/data-integrity-reviewer.md +88 -88
  33. package/agents/review/git-history-reviewer.md +103 -103
  34. package/agents/review/performance-reviewer.md +86 -86
  35. package/agents/review/python-reviewer.md +150 -150
  36. package/agents/review/rails-reviewer.md +139 -139
  37. package/agents/review/react-reviewer.md +144 -144
  38. package/agents/review/security-reviewer.md +80 -80
  39. package/agents/review/simplicity-reviewer.md +140 -140
  40. package/agents/review/test-coverage-reviewer.md +116 -116
  41. package/agents/review/typescript-reviewer.md +127 -127
  42. package/agents/searcher.md +54 -54
  43. package/agents/simplifier.md +120 -120
  44. package/agents/tester.md +49 -49
  45. package/agents/ui/ui-a11y-auditor.md +93 -93
  46. package/agents/ui/ui-antipattern-detector.md +94 -94
  47. package/agents/ui/ui-dataviz-advisor.md +69 -69
  48. package/agents/ui/ui-design-system-gen.md +57 -57
  49. package/agents/ui/ui-industry-analyzer.md +49 -49
  50. package/agents/ui/ui-layout-architect.md +65 -65
  51. package/agents/ui/ui-stack-implementer.md +68 -68
  52. package/agents/ui/ux-compliance-reviewer.md +81 -81
  53. package/agents/ui-previewer.md +258 -260
  54. package/commands/vibe.analyze.md +8 -0
  55. package/commands/vibe.review.md +10 -3
  56. package/commands/vibe.run.md +2078 -2022
  57. package/commands/vibe.spec.md +10 -10
  58. package/commands/vibe.spec.review.md +565 -558
  59. package/commands/vibe.utils.md +413 -413
  60. package/commands/vibe.verify.md +45 -0
  61. package/dist/cli/auth.d.ts.map +1 -1
  62. package/dist/cli/auth.js +1 -7
  63. package/dist/cli/auth.js.map +1 -1
  64. package/dist/cli/collaborator.js +52 -52
  65. package/dist/cli/commands/evolution.js +12 -12
  66. package/dist/cli/commands/info.d.ts.map +1 -1
  67. package/dist/cli/commands/info.js +55 -70
  68. package/dist/cli/commands/info.js.map +1 -1
  69. package/dist/cli/commands/init.d.ts.map +1 -1
  70. package/dist/cli/commands/init.js +6 -7
  71. package/dist/cli/commands/init.js.map +1 -1
  72. package/dist/cli/commands/remove.js +14 -14
  73. package/dist/cli/commands/sentinel.js +27 -27
  74. package/dist/cli/commands/setup.js +1 -1
  75. package/dist/cli/commands/setup.js.map +1 -1
  76. package/dist/cli/commands/skills.js +5 -5
  77. package/dist/cli/commands/slack.js +10 -10
  78. package/dist/cli/commands/telegram.js +12 -12
  79. package/dist/cli/commands/update.d.ts.map +1 -1
  80. package/dist/cli/commands/update.js +3 -4
  81. package/dist/cli/commands/update.js.map +1 -1
  82. package/dist/cli/detect.js +32 -32
  83. package/dist/cli/index.js +51 -55
  84. package/dist/cli/index.js.map +1 -1
  85. package/dist/cli/llm/claude-commands.js +16 -16
  86. package/dist/cli/llm/config.js +20 -20
  87. package/dist/cli/llm/config.js.map +1 -1
  88. package/dist/cli/llm/gemini-commands.d.ts +4 -6
  89. package/dist/cli/llm/gemini-commands.d.ts.map +1 -1
  90. package/dist/cli/llm/gemini-commands.js +52 -322
  91. package/dist/cli/llm/gemini-commands.js.map +1 -1
  92. package/dist/cli/llm/gpt-commands.js +21 -21
  93. package/dist/cli/llm/gpt-commands.js.map +1 -1
  94. package/dist/cli/llm/help.js +21 -21
  95. package/dist/cli/postinstall/constants.js +1 -1
  96. package/dist/cli/postinstall/constants.js.map +1 -1
  97. package/dist/cli/postinstall/cursor-agents.js +32 -32
  98. package/dist/cli/postinstall/cursor-rules.js +83 -83
  99. package/dist/cli/postinstall/cursor-skills.js +743 -743
  100. package/dist/cli/postinstall/inline-skills.js +1 -1
  101. package/dist/cli/postinstall/inline-skills.js.map +1 -1
  102. package/dist/cli/setup/Provisioner.js +42 -42
  103. package/dist/cli/types.d.ts +2 -18
  104. package/dist/cli/types.d.ts.map +1 -1
  105. package/dist/cli/utils.d.ts +0 -9
  106. package/dist/cli/utils.d.ts.map +1 -1
  107. package/dist/cli/utils.js +0 -28
  108. package/dist/cli/utils.js.map +1 -1
  109. package/dist/infra/lib/DeepInit.js +24 -24
  110. package/dist/infra/lib/IterationTracker.js +11 -11
  111. package/dist/infra/lib/PythonParser.js +108 -108
  112. package/dist/infra/lib/ReviewRace.js +96 -96
  113. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  114. package/dist/infra/lib/SkillQualityGate.js +9 -9
  115. package/dist/infra/lib/SkillRepository.js +159 -159
  116. package/dist/infra/lib/UltraQA.js +99 -99
  117. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  118. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  119. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  120. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  121. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  122. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  123. package/dist/infra/lib/config/GlobalConfigManager.d.ts +0 -2
  124. package/dist/infra/lib/config/GlobalConfigManager.d.ts.map +1 -1
  125. package/dist/infra/lib/config/GlobalConfigManager.js +0 -27
  126. package/dist/infra/lib/config/GlobalConfigManager.js.map +1 -1
  127. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  128. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  129. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  130. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  131. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  132. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  133. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  134. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  135. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  136. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  137. package/dist/infra/lib/gemini/auth.d.ts +4 -16
  138. package/dist/infra/lib/gemini/auth.d.ts.map +1 -1
  139. package/dist/infra/lib/gemini/auth.js +10 -405
  140. package/dist/infra/lib/gemini/auth.js.map +1 -1
  141. package/dist/infra/lib/gemini/capabilities.d.ts +4 -8
  142. package/dist/infra/lib/gemini/capabilities.d.ts.map +1 -1
  143. package/dist/infra/lib/gemini/capabilities.js +8 -166
  144. package/dist/infra/lib/gemini/capabilities.js.map +1 -1
  145. package/dist/infra/lib/gemini/chat.d.ts +4 -13
  146. package/dist/infra/lib/gemini/chat.d.ts.map +1 -1
  147. package/dist/infra/lib/gemini/chat.js +10 -323
  148. package/dist/infra/lib/gemini/chat.js.map +1 -1
  149. package/dist/infra/lib/gemini/completion.d.ts +5 -15
  150. package/dist/infra/lib/gemini/completion.d.ts.map +1 -1
  151. package/dist/infra/lib/gemini/completion.js +6 -97
  152. package/dist/infra/lib/gemini/completion.js.map +1 -1
  153. package/dist/infra/lib/gemini/constants.d.ts +2 -31
  154. package/dist/infra/lib/gemini/constants.d.ts.map +1 -1
  155. package/dist/infra/lib/gemini/constants.js +2 -77
  156. package/dist/infra/lib/gemini/constants.js.map +1 -1
  157. package/dist/infra/lib/gemini/index.d.ts +5 -8
  158. package/dist/infra/lib/gemini/index.d.ts.map +1 -1
  159. package/dist/infra/lib/gemini/index.js +4 -7
  160. package/dist/infra/lib/gemini/index.js.map +1 -1
  161. package/dist/infra/lib/gemini/models.d.ts +3 -4
  162. package/dist/infra/lib/gemini/models.d.ts.map +1 -1
  163. package/dist/infra/lib/gemini/models.js +8 -84
  164. package/dist/infra/lib/gemini/models.js.map +1 -1
  165. package/dist/infra/lib/gemini/orchestration.js +5 -5
  166. package/dist/infra/lib/gemini/types.d.ts +16 -44
  167. package/dist/infra/lib/gemini/types.d.ts.map +1 -1
  168. package/dist/infra/lib/gemini/types.js +1 -1
  169. package/dist/infra/lib/gpt/auth.d.ts +2 -5
  170. package/dist/infra/lib/gpt/auth.d.ts.map +1 -1
  171. package/dist/infra/lib/gpt/auth.js +8 -38
  172. package/dist/infra/lib/gpt/auth.js.map +1 -1
  173. package/dist/infra/lib/gpt/chat.d.ts +3 -3
  174. package/dist/infra/lib/gpt/chat.d.ts.map +1 -1
  175. package/dist/infra/lib/gpt/chat.js +37 -53
  176. package/dist/infra/lib/gpt/chat.js.map +1 -1
  177. package/dist/infra/lib/gpt/constants.d.ts +2 -5
  178. package/dist/infra/lib/gpt/constants.d.ts.map +1 -1
  179. package/dist/infra/lib/gpt/constants.js +4 -9
  180. package/dist/infra/lib/gpt/constants.js.map +1 -1
  181. package/dist/infra/lib/gpt/embedding.d.ts +1 -1
  182. package/dist/infra/lib/gpt/embedding.js +3 -3
  183. package/dist/infra/lib/gpt/embedding.js.map +1 -1
  184. package/dist/infra/lib/gpt/oauth.d.ts +6 -39
  185. package/dist/infra/lib/gpt/oauth.d.ts.map +1 -1
  186. package/dist/infra/lib/gpt/oauth.js +8 -340
  187. package/dist/infra/lib/gpt/oauth.js.map +1 -1
  188. package/dist/infra/lib/gpt/orchestration.js +5 -5
  189. package/dist/infra/lib/gpt/orchestration.js.map +1 -1
  190. package/dist/infra/lib/gpt/specializations.d.ts +2 -2
  191. package/dist/infra/lib/gpt/specializations.js +3 -3
  192. package/dist/infra/lib/gpt/specializations.js.map +1 -1
  193. package/dist/infra/lib/gpt/types.d.ts +1 -1
  194. package/dist/infra/lib/gpt/types.d.ts.map +1 -1
  195. package/dist/infra/lib/llm/auth/AuthProfileManager.d.ts +2 -2
  196. package/dist/infra/lib/llm/auth/AuthProfileManager.d.ts.map +1 -1
  197. package/dist/infra/lib/llm/auth/AuthProfileManager.js.map +1 -1
  198. package/dist/infra/lib/llm/auth/AuthProfileManager.test.js +1 -1
  199. package/dist/infra/lib/llm/auth/AuthProfileManager.test.js.map +1 -1
  200. package/dist/infra/lib/llm/auth/TokenRefresher.d.ts +1 -1
  201. package/dist/infra/lib/llm/auth/TokenRefresher.js +1 -1
  202. package/dist/infra/lib/llm/auth/index.d.ts +2 -12
  203. package/dist/infra/lib/llm/auth/index.d.ts.map +1 -1
  204. package/dist/infra/lib/llm/auth/index.js +5 -63
  205. package/dist/infra/lib/llm/auth/index.js.map +1 -1
  206. package/dist/infra/lib/llm/types.d.ts +1 -1
  207. package/dist/infra/lib/llm/types.d.ts.map +1 -1
  208. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  209. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  210. package/dist/infra/lib/memory/MemoryStorage.js +181 -181
  211. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  212. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  213. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  214. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  215. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  216. package/dist/infra/orchestrator/AgentManager.js +12 -12
  217. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  218. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  219. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  220. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  221. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  222. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  223. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  224. package/dist/tools/memory/getMemoryGraph.js +12 -12
  225. package/dist/tools/memory/getSessionContext.js +9 -9
  226. package/dist/tools/memory/linkMemories.js +14 -14
  227. package/dist/tools/memory/listMemories.js +4 -4
  228. package/dist/tools/memory/recallMemory.js +4 -4
  229. package/dist/tools/memory/saveMemory.js +4 -4
  230. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  231. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  232. package/dist/tools/semantic/astGrep.test.js +6 -6
  233. package/dist/tools/spec/prdParser.test.js +171 -171
  234. package/dist/tools/spec/specGenerator.js +169 -169
  235. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  236. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  237. package/hooks/gemini-hooks.json +73 -73
  238. package/hooks/hooks.json +137 -137
  239. package/hooks/scripts/code-check.js +70 -70
  240. package/hooks/scripts/context-save.js +212 -212
  241. package/hooks/scripts/hud-status.js +291 -291
  242. package/hooks/scripts/keyword-detector.js +214 -214
  243. package/hooks/scripts/llm-orchestrate.js +475 -646
  244. package/hooks/scripts/post-edit.js +32 -32
  245. package/hooks/scripts/pre-tool-guard.js +125 -125
  246. package/hooks/scripts/prompt-dispatcher.js +185 -185
  247. package/hooks/scripts/sentinel-guard.js +104 -104
  248. package/hooks/scripts/session-start.js +106 -106
  249. package/hooks/scripts/stop-notify.js +209 -209
  250. package/hooks/scripts/utils.js +100 -100
  251. package/languages/csharp-unity.md +515 -515
  252. package/languages/gdscript-godot.md +470 -470
  253. package/languages/ruby-rails.md +489 -489
  254. package/languages/typescript-angular.md +433 -433
  255. package/languages/typescript-astro.md +416 -416
  256. package/languages/typescript-electron.md +406 -406
  257. package/languages/typescript-nestjs.md +524 -524
  258. package/languages/typescript-svelte.md +407 -407
  259. package/languages/typescript-tauri.md +365 -365
  260. package/package.json +121 -121
  261. package/skills/agents-md/SKILL.md +120 -120
  262. package/skills/arch-guard/SKILL.md +180 -180
  263. package/skills/brand-assets/SKILL.md +146 -146
  264. package/skills/capability-loop/SKILL.md +167 -167
  265. package/skills/characterization-test/SKILL.md +206 -206
  266. package/skills/commerce-patterns/SKILL.md +59 -59
  267. package/skills/commit-push-pr/SKILL.md +75 -75
  268. package/skills/context7-usage/SKILL.md +105 -105
  269. package/skills/core-capabilities/SKILL.md +48 -48
  270. package/skills/e2e-commerce/SKILL.md +57 -57
  271. package/skills/exec-plan/SKILL.md +147 -147
  272. package/skills/frontend-design/SKILL.md +73 -73
  273. package/skills/git-worktree/SKILL.md +72 -72
  274. package/skills/handoff/SKILL.md +109 -109
  275. package/skills/parallel-research/SKILL.md +87 -87
  276. package/skills/priority-todos/SKILL.md +63 -63
  277. package/skills/seo-checklist/SKILL.md +57 -57
  278. package/skills/techdebt/SKILL.md +122 -122
  279. package/skills/tool-fallback/SKILL.md +103 -103
  280. package/skills/typescript-advanced-types/SKILL.md +66 -65
  281. package/skills/ui-ux-pro-max/SKILL.md +206 -206
  282. package/skills/vercel-react-best-practices/SKILL.md +59 -59
  283. package/skills/video-production/SKILL.md +51 -51
  284. package/vibe/config.json +29 -29
  285. package/vibe/constitution.md +227 -227
  286. package/vibe/rules/principles/communication-guide.md +98 -98
  287. package/vibe/rules/principles/development-philosophy.md +52 -52
  288. package/vibe/rules/principles/quick-start.md +102 -102
  289. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  290. package/vibe/rules/quality/checklist.md +276 -276
  291. package/vibe/rules/quality/performance.md +236 -236
  292. package/vibe/rules/quality/testing-strategy.md +440 -440
  293. package/vibe/rules/standards/anti-patterns.md +541 -541
  294. package/vibe/rules/standards/code-structure.md +291 -291
  295. package/vibe/rules/standards/complexity-metrics.md +313 -313
  296. package/vibe/rules/standards/git-workflow.md +237 -237
  297. package/vibe/rules/standards/naming-conventions.md +198 -198
  298. package/vibe/rules/standards/security.md +305 -305
  299. package/vibe/rules/writing/document-style.md +74 -74
  300. package/vibe/setup.sh +31 -31
  301. package/vibe/templates/constitution-template.md +252 -252
  302. package/vibe/templates/contract-backend-template.md +526 -526
  303. package/vibe/templates/contract-frontend-template.md +599 -599
  304. package/vibe/templates/feature-template.md +96 -96
  305. package/vibe/templates/spec-template.md +221 -221
  306. package/vibe/ui-ux-data/charts.csv +26 -26
  307. package/vibe/ui-ux-data/colors.csv +97 -97
  308. package/vibe/ui-ux-data/icons.csv +101 -101
  309. package/vibe/ui-ux-data/landing.csv +31 -31
  310. package/vibe/ui-ux-data/products.csv +96 -96
  311. package/vibe/ui-ux-data/react-performance.csv +45 -45
  312. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  313. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  314. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  315. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  316. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  317. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  318. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  319. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  320. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  321. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  322. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  323. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  324. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  325. package/vibe/ui-ux-data/styles.csv +68 -68
  326. package/vibe/ui-ux-data/typography.csv +57 -57
  327. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  328. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  329. package/vibe/ui-ux-data/version.json +31 -31
  330. package/vibe/ui-ux-data/web-interface.csv +31 -31
  331. package/commands/vibe.voice.md +0 -79
@@ -1,61 +1,12 @@
1
1
  /**
2
- * Gemini / Antigravity 인증 관리
2
+ * Gemini 인증 관리
3
3
  *
4
- * 인증 순서: antigravity gemini-cli apikey
4
+ * Auth: API Key 전용 (gemini-cli / codex-cli 는 hooks에서 직접 호출)
5
5
  *
6
- * 환경변수 우선:
7
- * - ANTIGRAVITY_REFRESH_TOKEN → antigravity OAuth (자동 credential resolve)
8
- * - GEMINI_OAUTH_REFRESH_TOKEN → gemini-cli OAuth (자동 credential resolve)
6
+ * 환경변수:
9
7
  * - GEMINI_API_KEY → API Key
10
- *
11
- * Fallback:
12
- * - ~/.gemini/oauth_creds.json 파일 기반 인증 (기존 호환)
13
- *
14
- * 갱신된 토큰은 {configDir}/oauth/gemini-{source}.json 에 캐시
15
8
  */
16
- import path from 'path';
17
- import fs from 'fs';
18
- import os from 'os';
19
- import { warnLog } from '../utils.js';
20
- import { getAuthProfileManager } from '../llm/auth/AuthProfileManager.js';
21
- import { getGlobalConfigDir } from '../llm/auth/ConfigManager.js';
22
- import { getGeminiApiKey as getGeminiApiKeyFromConfig, getGeminiOAuthRefreshToken, readGlobalConfig, } from '../config/GlobalConfigManager.js';
23
- import { ANTIGRAVITY_CLIENT_ID, ANTIGRAVITY_CLIENT_SECRET, GEMINI_CLI_CLIENT_ID, GEMINI_CLI_CLIENT_SECRET, GOOGLE_TOKEN_URL, LOAD_ENDPOINTS, API_VERSION, ANTIGRAVITY_HEADERS, ANTIGRAVITY_METADATA, DEFAULT_PROJECT_ID, } from './constants.js';
24
- // 인증 순서: antigravity → gemini-cli → apikey
25
- const AUTH_ORDER = ['antigravity', 'gemini-cli', 'apikey'];
26
- // 환경변수 키 매핑
27
- const ENV_REFRESH_TOKEN_KEYS = {
28
- 'antigravity': 'ANTIGRAVITY_REFRESH_TOKEN',
29
- 'gemini-cli': 'GEMINI_OAUTH_REFRESH_TOKEN',
30
- };
31
- function getOAuthCacheDir() {
32
- return path.join(getGlobalConfigDir(), 'oauth');
33
- }
34
- function getOAuthCachePath(source) {
35
- return path.join(getOAuthCacheDir(), `gemini-${source}.json`);
36
- }
37
- function loadCachedTokens(source) {
38
- try {
39
- const cachePath = getOAuthCachePath(source);
40
- if (!fs.existsSync(cachePath))
41
- return null;
42
- return JSON.parse(fs.readFileSync(cachePath, 'utf-8'));
43
- }
44
- catch {
45
- return null;
46
- }
47
- }
48
- function saveCachedTokens(source, tokens) {
49
- try {
50
- const dir = getOAuthCacheDir();
51
- if (!fs.existsSync(dir))
52
- fs.mkdirSync(dir, { recursive: true });
53
- fs.writeFileSync(getOAuthCachePath(source), JSON.stringify(tokens, null, 2), { mode: 0o600 });
54
- }
55
- catch {
56
- warnLog('Failed to cache Gemini OAuth tokens', { source });
57
- }
58
- }
9
+ import { getGeminiApiKey as getGeminiApiKeyFromConfig, } from '../config/GlobalConfigManager.js';
59
10
  /**
60
11
  * API Key 가져오기 (config.json 우선 → 환경변수 fallback)
61
12
  */
@@ -67,361 +18,15 @@ export function getApiKeyFromConfig() {
67
18
  return process.env.GEMINI_API_KEY;
68
19
  return null;
69
20
  }
70
- // =============================================
71
- // OAuth 크레덴셜 탐색
72
- // =============================================
73
- /** 크레덴셜 검색 경로 */
74
- const CREDENTIAL_PATHS = [
75
- path.join(os.homedir(), '.gemini', 'oauth_creds.json'),
76
- path.join(os.homedir(), '.config', 'gemini-cli', 'oauth_creds.json'),
77
- ];
78
- function isOAuthCredentials(data) {
79
- if (typeof data !== 'object' || data === null)
80
- return false;
81
- const obj = data;
82
- return (typeof obj.access_token === 'string' &&
83
- typeof obj.refresh_token === 'string' &&
84
- typeof obj.expiry_date === 'number');
85
- }
86
- /**
87
- * OAuth 크레덴셜 탐색 (read-only)
88
- * Symlink 거부, 소유자 확인 (macOS/Linux)
89
- */
90
- function findOAuthCredentials() {
91
- for (const credPath of CREDENTIAL_PATHS) {
92
- try {
93
- const stat = fs.lstatSync(credPath);
94
- if (stat.isSymbolicLink() || !stat.isFile())
95
- continue;
96
- // 소유자 확인 (macOS/Linux)
97
- if (process.platform !== 'win32') {
98
- const uid = process.getuid?.();
99
- if (uid !== undefined && stat.uid !== uid)
100
- continue;
101
- const mode = stat.mode & 0o777;
102
- if ((mode & 0o077) !== 0)
103
- continue;
104
- }
105
- const content = fs.readFileSync(credPath, 'utf-8');
106
- const data = JSON.parse(content);
107
- if (!isOAuthCredentials(data))
108
- continue;
109
- return data;
110
- }
111
- catch {
112
- continue;
113
- }
114
- }
115
- return null;
116
- }
117
- /**
118
- * 어떤 OAuth client로 발급된 토큰인지 판별
119
- * scope에 cclog/experimentsandconfigs가 있으면 Antigravity
120
- */
121
- function detectOAuthSource(creds) {
122
- const scope = creds.scope || '';
123
- if (scope.includes('cclog') || scope.includes('experimentsandconfigs')) {
124
- return 'antigravity';
125
- }
126
- return 'gemini-cli';
127
- }
128
- // =============================================
129
- // 토큰 갱신
130
- // =============================================
131
- async function refreshOAuthToken(creds, clientId, clientSecret) {
132
- try {
133
- const tokenUri = creds.token_uri || GOOGLE_TOKEN_URL;
134
- const response = await fetch(tokenUri, {
135
- method: 'POST',
136
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
137
- body: new URLSearchParams({
138
- grant_type: 'refresh_token',
139
- refresh_token: creds.refresh_token,
140
- client_id: clientId,
141
- client_secret: clientSecret,
142
- }),
143
- });
144
- if (!response.ok)
145
- return null;
146
- const data = await response.json();
147
- if (!data || typeof data !== 'object')
148
- return null;
149
- const result = data;
150
- const newAccessToken = result.access_token;
151
- if (typeof newAccessToken !== 'string')
152
- return null;
153
- const expiresIn = typeof result.expires_in === 'number' ? result.expires_in : 3600;
154
- const newCreds = {
155
- access_token: newAccessToken,
156
- refresh_token: creds.refresh_token,
157
- expiry_date: Date.now() + expiresIn * 1000,
158
- token_uri: tokenUri,
159
- scope: creds.scope,
160
- };
161
- // 갱신된 토큰을 파일에 저장
162
- const credPath = CREDENTIAL_PATHS[0];
163
- const dir = path.dirname(credPath);
164
- if (!fs.existsSync(dir)) {
165
- fs.mkdirSync(dir, { recursive: true });
166
- }
167
- fs.writeFileSync(credPath, JSON.stringify(newCreds, null, 2), { mode: 0o600 });
168
- return newCreds;
169
- }
170
- catch {
171
- return null;
172
- }
173
- }
174
- // =============================================
175
- // loadCodeAssist — projectId 획득
176
- // =============================================
177
- /**
178
- * loadCodeAssist API로 projectId 획득
179
- * Production → Autopush → Daily 순서로 시도
180
- *
181
- * Antigravity IDE 방식:
182
- * 1차 호출 → projectId 획득
183
- * 2차 호출 → cloudaicompanionProject 포함해서 paidTier 확인
184
- */
185
- async function loadCodeAssistProjectId(accessToken) {
186
- for (const endpoint of LOAD_ENDPOINTS) {
187
- try {
188
- const url = `${endpoint}/${API_VERSION}:loadCodeAssist`;
189
- const headers = {
190
- 'Authorization': `Bearer ${accessToken}`,
191
- 'Content-Type': 'application/json',
192
- ...ANTIGRAVITY_HEADERS,
193
- };
194
- // 1차: 기본 projectId로 요청
195
- const firstResponse = await fetch(url, {
196
- method: 'POST',
197
- headers,
198
- body: JSON.stringify({
199
- metadata: ANTIGRAVITY_METADATA,
200
- cloudaicompanionProject: DEFAULT_PROJECT_ID,
201
- }),
202
- });
203
- if (!firstResponse.ok)
204
- continue;
205
- const firstData = await firstResponse.json();
206
- if (!firstData || typeof firstData !== 'object')
207
- continue;
208
- const firstResult = firstData;
209
- const projectId = typeof firstResult.cloudaicompanionProject === 'string'
210
- ? firstResult.cloudaicompanionProject
211
- : null;
212
- if (!projectId)
213
- continue;
214
- // paidTier가 있으면 바로 반환
215
- if (firstResult.paidTier)
216
- return projectId;
217
- // paidTier 없으면 2차 호출 (획득한 projectId 포함)
218
- const secondResponse = await fetch(url, {
219
- method: 'POST',
220
- headers,
221
- body: JSON.stringify({
222
- metadata: ANTIGRAVITY_METADATA,
223
- cloudaicompanionProject: projectId,
224
- }),
225
- });
226
- if (!secondResponse.ok)
227
- return projectId;
228
- const secondData = await secondResponse.json();
229
- if (!secondData || typeof secondData !== 'object')
230
- return projectId;
231
- const secondResult = secondData;
232
- return typeof secondResult.cloudaicompanionProject === 'string'
233
- ? secondResult.cloudaicompanionProject
234
- : projectId;
235
- }
236
- catch {
237
- continue;
238
- }
239
- }
240
- return null;
241
- }
242
- // =============================================
243
- // 환경변수 기반 인증 (sutory 패턴)
244
- // =============================================
245
- /** credential 자동 해석 (source별 clientId/clientSecret) */
246
- function resolveCredentials(source) {
247
- if (source === 'antigravity') {
248
- return { clientId: ANTIGRAVITY_CLIENT_ID, clientSecret: ANTIGRAVITY_CLIENT_SECRET };
249
- }
250
- // gemini-cli: 환경변수 → oauth_client.json → 하드코딩 fallback
251
- const envId = process.env['GEMINI_CLI_OAUTH_CLIENT_ID'];
252
- const envSecret = process.env['GEMINI_CLI_OAUTH_CLIENT_SECRET'];
253
- if (envId)
254
- return { clientId: envId, clientSecret: envSecret ?? '' };
255
- try {
256
- const clientCredsPath = path.join(os.homedir(), '.gemini', 'oauth_client.json');
257
- if (fs.existsSync(clientCredsPath)) {
258
- const data = JSON.parse(fs.readFileSync(clientCredsPath, 'utf-8'));
259
- if (typeof data.client_id === 'string') {
260
- return { clientId: data.client_id, clientSecret: data.client_secret ?? '' };
261
- }
262
- }
263
- }
264
- catch { /* fallback */ }
265
- return { clientId: GEMINI_CLI_CLIENT_ID, clientSecret: GEMINI_CLI_CLIENT_SECRET };
266
- }
267
- /** 환경변수 refresh token → 토큰 갱신 → 캐시 → AuthInfo 반환 */
268
- async function tryAuthWithEnvToken(refreshToken, source) {
269
- const { clientId, clientSecret } = resolveCredentials(source);
270
- // 캐시 확인: 같은 refresh token이고 아직 유효하면 캐시 사용
271
- const cached = loadCachedTokens(source);
272
- if (cached && cached.refreshToken === refreshToken && cached.expires > Date.now() + 5 * 60 * 1000) {
273
- return {
274
- type: source,
275
- accessToken: cached.accessToken,
276
- projectId: cached.projectId,
277
- refreshToken: cached.refreshToken,
278
- expiryDate: cached.expires,
279
- clientId: cached.clientId,
280
- clientSecret: cached.clientSecret,
281
- };
282
- }
283
- // 토큰 갱신
284
- const fakeCreds = {
285
- access_token: '',
286
- refresh_token: refreshToken,
287
- expiry_date: 0,
288
- };
289
- const refreshed = await refreshOAuthToken(fakeCreds, clientId, clientSecret);
290
- if (!refreshed)
291
- return null;
292
- // projectId 탐색
293
- const projectId = cached?.projectId || await loadCodeAssistProjectId(refreshed.access_token);
294
- // 캐시 저장
295
- saveCachedTokens(source, {
296
- accessToken: refreshed.access_token,
297
- refreshToken: refreshed.refresh_token,
298
- expires: refreshed.expiry_date,
299
- projectId: projectId || undefined,
300
- clientId,
301
- clientSecret,
302
- });
303
- return {
304
- type: source,
305
- accessToken: refreshed.access_token,
306
- projectId: projectId || undefined,
307
- refreshToken: refreshed.refresh_token,
308
- expiryDate: refreshed.expiry_date,
309
- clientId,
310
- clientSecret,
311
- };
312
- }
313
- // =============================================
314
- // 개별 인증 방식 시도
315
- // =============================================
316
- async function tryAuthMethod(method) {
317
- switch (method) {
318
- case 'antigravity':
319
- return tryAntigravityAuth();
320
- case 'gemini-cli':
321
- return tryGeminiCliAuth();
322
- case 'apikey': {
323
- const apiKey = getApiKeyFromConfig();
324
- return apiKey ? { type: 'apikey', apiKey } : null;
325
- }
326
- default:
327
- return null;
328
- }
329
- }
330
- /** Antigravity 인증: config.json → 환경변수 → 파일 기반 */
331
- async function tryAntigravityAuth() {
332
- // 0. config.json 우선
333
- const globalCfg = readGlobalConfig();
334
- if (globalCfg.credentials?.gemini?.oauthSource === 'antigravity' && globalCfg.credentials.gemini.oauthRefreshToken) {
335
- return tryAuthWithEnvToken(globalCfg.credentials.gemini.oauthRefreshToken, 'antigravity');
336
- }
337
- // 1. 환경변수 fallback
338
- const envToken = process.env[ENV_REFRESH_TOKEN_KEYS['antigravity']];
339
- if (envToken) {
340
- return tryAuthWithEnvToken(envToken, 'antigravity');
341
- }
342
- // 2. 파일 기반 fallback
343
- const creds = findOAuthCredentials();
344
- if (!creds || detectOAuthSource(creds) !== 'antigravity')
345
- return null;
346
- return tryAuthWithFileCreds(creds, 'antigravity', ANTIGRAVITY_CLIENT_ID, ANTIGRAVITY_CLIENT_SECRET);
347
- }
348
- /** Gemini CLI 인증: config.json → 환경변수 → 파일 기반 */
349
- async function tryGeminiCliAuth() {
350
- // 0. config.json 우선 (oauthSource가 gemini-cli이거나 미지정인 경우)
351
- const cfgToken = getGeminiOAuthRefreshToken();
352
- const cfgSource = readGlobalConfig().credentials?.gemini?.oauthSource;
353
- if (cfgToken && cfgSource !== 'antigravity') {
354
- return tryAuthWithEnvToken(cfgToken, 'gemini-cli');
355
- }
356
- // 1. 환경변수 fallback
357
- const envToken = process.env[ENV_REFRESH_TOKEN_KEYS['gemini-cli']];
358
- if (envToken) {
359
- return tryAuthWithEnvToken(envToken, 'gemini-cli');
360
- }
361
- // 2. 파일 기반 fallback
362
- const creds = findOAuthCredentials();
363
- if (!creds)
364
- return null;
365
- const { clientId, clientSecret } = resolveCredentials('gemini-cli');
366
- return tryAuthWithFileCreds(creds, 'gemini-cli', clientId, clientSecret);
367
- }
368
- /** 파일 기반 크레덴셜로 인증 (기존 호환) */
369
- async function tryAuthWithFileCreds(creds, source, clientId, clientSecret) {
370
- let token = creds.access_token;
371
- if (creds.expiry_date <= Date.now() + 5 * 60 * 1000) {
372
- if (!creds.refresh_token)
373
- return null;
374
- const refreshed = await refreshOAuthToken(creds, clientId, clientSecret);
375
- if (!refreshed)
376
- return null;
377
- token = refreshed.access_token;
378
- }
379
- const projectId = await loadCodeAssistProjectId(token);
380
- return {
381
- type: source,
382
- accessToken: token,
383
- projectId: projectId || undefined,
384
- refreshToken: creds.refresh_token,
385
- tokenUri: creds.token_uri || GOOGLE_TOKEN_URL,
386
- expiryDate: creds.expiry_date,
387
- clientId,
388
- clientSecret,
389
- };
390
- }
391
- // =============================================
392
- // Public API
393
- // =============================================
394
21
  /**
395
- * 인증 방식 확인 (antigravity gemini-cli → apikey)
22
+ * 인증 정보 반환 (API Key 전용)
396
23
  */
397
24
  export async function getAuthInfo() {
398
- for (const method of AUTH_ORDER) {
399
- const auth = await tryAuthMethod(method);
400
- if (auth)
401
- return auth;
402
- }
403
- throw new Error('Gemini credentials not found. Tried: antigravity, gemini-cli, apikey. ' +
404
- 'Run: gemini (OAuth) or vibe gemini key <key> (API Key)');
405
- }
406
- /**
407
- * Auth Profile 기반 성공/실패 마킹 (optional)
408
- */
409
- export async function markAuthSuccess(profileId) {
410
- try {
411
- const manager = getAuthProfileManager();
412
- await manager.markSuccess(profileId);
413
- }
414
- catch {
415
- // Profile rotation is optional
416
- }
417
- }
418
- export async function markAuthFailure(profileId, errorMsg) {
419
- try {
420
- const manager = getAuthProfileManager();
421
- await manager.markFailure(profileId, errorMsg);
422
- }
423
- catch {
424
- // Profile rotation is optional
25
+ const apiKey = getApiKeyFromConfig();
26
+ if (apiKey) {
27
+ return { type: 'apikey', apiKey };
425
28
  }
29
+ throw new Error('Gemini API key not found. ' +
30
+ 'Run: vibe gemini key <key> or set GEMINI_API_KEY env var.');
426
31
  }
427
32
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/infra/lib/gemini/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/infra/lib/gemini/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,eAAe,IAAI,yBAAyB,GAC7C,MAAM,kCAAkC,CAAC;AAG1C;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,SAAS,GAAG,yBAAyB,EAAE,CAAC;IAC9C,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAClE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,IAAI,KAAK,CACb,4BAA4B;QAC5B,2DAA2D,CAC5D,CAAC;AACJ,CAAC"}
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Gemini / Antigravity 확장 기능
2
+ * Gemini 확장 기능
3
3
  *
4
- * - 웹 검색, UI 분석, 이미지 생성, 이미지 분석, 오디오 전사
5
- * - Endpoint: Production 우선 (Pro 계정 429 방지)
4
+ * - 웹 검색, UI 분석, 이미지 생성, 이미지 분석
5
+ * - API Key Google AI Studio
6
6
  */
7
- import type { ImageGenerationOptions, ImageGenerationResult, ImageAnalysisOptions, AudioTranscriptionOptions, AudioTranscriptionResult } from './types.js';
7
+ import type { ImageGenerationOptions, ImageGenerationResult, ImageAnalysisOptions } from './types.js';
8
8
  /**
9
9
  * 웹서치로 최신 정보 검색 (Gemini Pro + Google Search)
10
10
  */
@@ -25,8 +25,4 @@ export declare function generateImage(prompt: string, options?: ImageGenerationO
25
25
  * Gemini 이미지 분석 (Multimodal)
26
26
  */
27
27
  export declare function analyzeImage(imagePath: string, prompt: string, options?: ImageAnalysisOptions): Promise<string>;
28
- /**
29
- * Gemini 오디오 전사 (STT)
30
- */
31
- export declare function transcribeAudio(audioPath: string, options?: AudioTranscriptionOptions): Promise<AudioTranscriptionResult>;
32
28
  //# sourceMappingURL=capabilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/gemini/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EAKzB,MAAM,YAAY,CAAC;AAsBpB;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ/D;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOpE;AAMD;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO/D;AAWD;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC,CA8DhC;AA4HD;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAqBD;;GAEG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAuEnC"}
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/gemini/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EAGrB,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ/D;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOpE;AAMD;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO/D;AAWD;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC,CA8DhC;AAyDD;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CA+BjB"}