@su-record/vibe 2.7.13 → 2.7.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +37 -37
- package/CLAUDE.md +134 -126
- package/LICENSE +21 -21
- package/README.md +449 -449
- package/agents/architect-low.md +41 -41
- package/agents/architect-medium.md +59 -59
- package/agents/architect.md +80 -80
- package/agents/build-error-resolver.md +115 -115
- package/agents/compounder.md +261 -261
- package/agents/diagrammer.md +178 -178
- package/agents/docs/api-documenter.md +99 -99
- package/agents/docs/changelog-writer.md +93 -93
- package/agents/e2e-tester.md +294 -294
- package/agents/explorer-low.md +42 -42
- package/agents/explorer-medium.md +59 -59
- package/agents/explorer.md +48 -48
- package/agents/implementer-low.md +43 -43
- package/agents/implementer-medium.md +52 -52
- package/agents/implementer.md +54 -54
- package/agents/junior-mentor.md +141 -141
- package/agents/planning/requirements-analyst.md +84 -84
- package/agents/planning/ux-advisor.md +83 -83
- package/agents/qa/acceptance-tester.md +86 -86
- package/agents/qa/edge-case-finder.md +93 -93
- package/agents/refactor-cleaner.md +143 -143
- package/agents/research/best-practices-agent.md +199 -199
- package/agents/research/codebase-patterns-agent.md +157 -157
- package/agents/research/framework-docs-agent.md +188 -188
- package/agents/research/security-advisory-agent.md +213 -213
- package/agents/review/architecture-reviewer.md +107 -107
- package/agents/review/complexity-reviewer.md +116 -116
- package/agents/review/data-integrity-reviewer.md +88 -88
- package/agents/review/git-history-reviewer.md +103 -103
- package/agents/review/performance-reviewer.md +86 -86
- package/agents/review/python-reviewer.md +150 -150
- package/agents/review/rails-reviewer.md +139 -139
- package/agents/review/react-reviewer.md +144 -144
- package/agents/review/security-reviewer.md +80 -80
- package/agents/review/simplicity-reviewer.md +140 -140
- package/agents/review/test-coverage-reviewer.md +116 -116
- package/agents/review/typescript-reviewer.md +127 -127
- package/agents/searcher.md +54 -54
- package/agents/simplifier.md +120 -120
- package/agents/tester.md +49 -49
- package/agents/ui/ui-a11y-auditor.md +93 -93
- package/agents/ui/ui-antipattern-detector.md +94 -94
- package/agents/ui/ui-dataviz-advisor.md +69 -69
- package/agents/ui/ui-design-system-gen.md +57 -57
- package/agents/ui/ui-industry-analyzer.md +49 -49
- package/agents/ui/ui-layout-architect.md +65 -65
- package/agents/ui/ui-stack-implementer.md +68 -68
- package/agents/ui/ux-compliance-reviewer.md +81 -81
- package/agents/ui-previewer.md +258 -260
- package/commands/vibe.analyze.md +11 -13
- package/commands/vibe.review.md +43 -1
- package/commands/vibe.run.md +2124 -2078
- package/commands/vibe.spec.md +9 -4
- package/commands/vibe.spec.review.md +569 -565
- package/commands/vibe.utils.md +413 -413
- package/commands/vibe.verify.md +33 -8
- package/dist/cli/collaborator.js +52 -52
- package/dist/cli/commands/evolution.js +12 -12
- package/dist/cli/commands/info.js +54 -54
- package/dist/cli/commands/init.js +5 -5
- package/dist/cli/commands/remove.js +14 -14
- package/dist/cli/commands/sentinel.js +27 -27
- package/dist/cli/commands/skills.js +5 -5
- package/dist/cli/commands/slack.js +10 -10
- package/dist/cli/commands/telegram.js +12 -12
- package/dist/cli/detect.js +32 -32
- package/dist/cli/index.js +51 -51
- package/dist/cli/llm/claude-commands.js +16 -16
- package/dist/cli/llm/config.js +19 -19
- package/dist/cli/llm/config.js.map +1 -1
- package/dist/cli/llm/gemini-commands.js +16 -16
- package/dist/cli/llm/gpt-commands.js +19 -19
- package/dist/cli/llm/help.js +21 -21
- package/dist/cli/postinstall/cursor-agents.js +32 -32
- package/dist/cli/postinstall/cursor-rules.js +83 -83
- package/dist/cli/postinstall/cursor-skills.js +743 -743
- package/dist/cli/setup/Provisioner.js +42 -42
- package/dist/cli/types.d.ts +0 -2
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/infra/lib/DeepInit.js +24 -24
- package/dist/infra/lib/IterationTracker.js +11 -11
- package/dist/infra/lib/PythonParser.js +108 -108
- package/dist/infra/lib/ReviewRace.js +96 -96
- package/dist/infra/lib/SkillFrontmatter.js +28 -28
- package/dist/infra/lib/SkillQualityGate.js +9 -9
- package/dist/infra/lib/SkillRepository.js +159 -159
- package/dist/infra/lib/UltraQA.js +99 -99
- package/dist/infra/lib/autonomy/AuditStore.js +41 -41
- package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
- package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
- package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
- package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
- package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
- package/dist/infra/lib/embedding/VectorStore.js +22 -22
- package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
- package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
- package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
- package/dist/infra/lib/evolution/InsightStore.js +90 -90
- package/dist/infra/lib/evolution/RollbackManager.js +5 -5
- package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
- package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
- package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
- package/dist/infra/lib/evolution/UsageTracker.js +28 -28
- package/dist/infra/lib/gemini/orchestration.js +5 -5
- package/dist/infra/lib/gpt/orchestration.js +4 -4
- package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
- package/dist/infra/lib/memory/MemorySearch.js +57 -57
- package/dist/infra/lib/memory/MemoryStorage.js +181 -181
- package/dist/infra/lib/memory/ObservationStore.js +28 -28
- package/dist/infra/lib/memory/ReflectionStore.js +30 -30
- package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
- package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
- package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
- package/dist/infra/orchestrator/AgentManager.js +12 -12
- package/dist/infra/orchestrator/AgentRegistry.js +65 -65
- package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
- package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
- package/dist/infra/orchestrator/parallelResearch.js +24 -24
- package/dist/tools/convention/analyzeComplexity.test.js +115 -115
- package/dist/tools/convention/validateCodeQuality.test.js +104 -104
- package/dist/tools/memory/createMemoryTimeline.js +10 -10
- package/dist/tools/memory/getMemoryGraph.js +12 -12
- package/dist/tools/memory/getSessionContext.js +9 -9
- package/dist/tools/memory/linkMemories.js +14 -14
- package/dist/tools/memory/listMemories.js +4 -4
- package/dist/tools/memory/recallMemory.js +4 -4
- package/dist/tools/memory/saveMemory.js +4 -4
- package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
- package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
- package/dist/tools/semantic/astGrep.test.js +6 -6
- package/dist/tools/spec/prdParser.test.js +171 -171
- package/dist/tools/spec/specGenerator.js +169 -169
- package/dist/tools/spec/traceabilityMatrix.js +64 -64
- package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
- package/hooks/gemini-hooks.json +73 -73
- package/hooks/hooks.json +137 -137
- package/hooks/scripts/code-check.js +77 -70
- package/hooks/scripts/context-save.js +212 -212
- package/hooks/scripts/hud-status.js +291 -291
- package/hooks/scripts/keyword-detector.js +214 -214
- package/hooks/scripts/llm-orchestrate.js +475 -475
- package/hooks/scripts/post-edit.js +32 -32
- package/hooks/scripts/pre-tool-guard.js +125 -125
- package/hooks/scripts/prompt-dispatcher.js +185 -185
- package/hooks/scripts/sentinel-guard.js +104 -104
- package/hooks/scripts/session-start.js +106 -106
- package/hooks/scripts/stop-notify.js +209 -209
- package/hooks/scripts/utils.js +100 -100
- package/languages/csharp-unity.md +515 -515
- package/languages/gdscript-godot.md +470 -470
- package/languages/ruby-rails.md +489 -489
- package/languages/typescript-angular.md +433 -433
- package/languages/typescript-astro.md +416 -416
- package/languages/typescript-electron.md +406 -406
- package/languages/typescript-nestjs.md +524 -524
- package/languages/typescript-svelte.md +407 -407
- package/languages/typescript-tauri.md +365 -365
- package/package.json +121 -121
- package/skills/agents-md/SKILL.md +120 -120
- package/skills/arch-guard/SKILL.md +180 -180
- package/skills/brand-assets/SKILL.md +146 -146
- package/skills/capability-loop/SKILL.md +167 -167
- package/skills/characterization-test/SKILL.md +206 -206
- package/skills/commerce-patterns/SKILL.md +59 -59
- package/skills/commit-push-pr/SKILL.md +75 -75
- package/skills/context7-usage/SKILL.md +105 -105
- package/skills/core-capabilities/SKILL.md +48 -48
- package/skills/e2e-commerce/SKILL.md +57 -57
- package/skills/exec-plan/SKILL.md +147 -147
- package/skills/frontend-design/SKILL.md +73 -73
- package/skills/git-worktree/SKILL.md +72 -72
- package/skills/handoff/SKILL.md +109 -109
- package/skills/parallel-research/SKILL.md +87 -87
- package/skills/priority-todos/SKILL.md +63 -63
- package/skills/seo-checklist/SKILL.md +57 -57
- package/skills/techdebt/SKILL.md +122 -122
- package/skills/tool-fallback/SKILL.md +103 -103
- package/skills/typescript-advanced-types/SKILL.md +66 -65
- package/skills/ui-ux-pro-max/SKILL.md +206 -206
- package/skills/vercel-react-best-practices/SKILL.md +59 -59
- package/skills/video-production/SKILL.md +51 -51
- package/vibe/config.json +29 -29
- package/vibe/constitution.md +227 -227
- package/vibe/rules/principles/communication-guide.md +98 -98
- package/vibe/rules/principles/development-philosophy.md +52 -52
- package/vibe/rules/principles/quick-start.md +102 -102
- package/vibe/rules/quality/bdd-contract-testing.md +393 -393
- package/vibe/rules/quality/checklist.md +276 -276
- package/vibe/rules/quality/performance.md +236 -236
- package/vibe/rules/quality/testing-strategy.md +440 -440
- package/vibe/rules/standards/anti-patterns.md +541 -541
- package/vibe/rules/standards/code-structure.md +291 -291
- package/vibe/rules/standards/complexity-metrics.md +313 -313
- package/vibe/rules/standards/git-workflow.md +237 -237
- package/vibe/rules/standards/naming-conventions.md +198 -198
- package/vibe/rules/standards/security.md +305 -305
- package/vibe/rules/writing/document-style.md +74 -74
- package/vibe/setup.sh +31 -31
- package/vibe/templates/constitution-template.md +252 -252
- package/vibe/templates/contract-backend-template.md +526 -526
- package/vibe/templates/contract-frontend-template.md +599 -599
- package/vibe/templates/feature-template.md +96 -96
- package/vibe/templates/spec-template.md +221 -221
- package/vibe/ui-ux-data/charts.csv +26 -26
- package/vibe/ui-ux-data/colors.csv +97 -97
- package/vibe/ui-ux-data/icons.csv +101 -101
- package/vibe/ui-ux-data/landing.csv +31 -31
- package/vibe/ui-ux-data/products.csv +96 -96
- package/vibe/ui-ux-data/react-performance.csv +45 -45
- package/vibe/ui-ux-data/stacks/astro.csv +54 -54
- package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
- package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
- package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
- package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
- package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
- package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
- package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
- package/vibe/ui-ux-data/stacks/react.csv +54 -54
- package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
- package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
- package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
- package/vibe/ui-ux-data/stacks/vue.csv +50 -50
- package/vibe/ui-ux-data/styles.csv +68 -68
- package/vibe/ui-ux-data/typography.csv +57 -57
- package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
- package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
- package/vibe/ui-ux-data/version.json +31 -31
- package/vibe/ui-ux-data/web-interface.csv +31 -31
package/dist/cli/index.js
CHANGED
|
@@ -95,13 +95,13 @@ switch (command) {
|
|
|
95
95
|
claudeStatus();
|
|
96
96
|
break;
|
|
97
97
|
default:
|
|
98
|
-
console.log(`
|
|
99
|
-
Claude Commands:
|
|
100
|
-
vibe claude key <key> Set Anthropic API key
|
|
101
|
-
vibe claude status Check status
|
|
102
|
-
vibe claude logout Remove key
|
|
103
|
-
|
|
104
|
-
Get key: https://console.anthropic.com/settings/keys
|
|
98
|
+
console.log(`
|
|
99
|
+
Claude Commands:
|
|
100
|
+
vibe claude key <key> Set Anthropic API key
|
|
101
|
+
vibe claude status Check status
|
|
102
|
+
vibe claude logout Remove key
|
|
103
|
+
|
|
104
|
+
Get key: https://console.anthropic.com/settings/keys
|
|
105
105
|
`);
|
|
106
106
|
}
|
|
107
107
|
break;
|
|
@@ -128,15 +128,15 @@ Get key: https://console.anthropic.com/settings/keys
|
|
|
128
128
|
gptStatus();
|
|
129
129
|
break;
|
|
130
130
|
default:
|
|
131
|
-
console.log(`
|
|
132
|
-
GPT Commands:
|
|
133
|
-
vibe gpt key <key> Set OpenAI API key (for embeddings)
|
|
134
|
-
vibe gpt status Check status (Codex CLI + API key)
|
|
135
|
-
vibe gpt logout Remove API key
|
|
136
|
-
|
|
137
|
-
Text generation: codex exec (via Codex CLI)
|
|
138
|
-
Embeddings: OpenAI API (requires API key)
|
|
139
|
-
Codex auth: codex auth
|
|
131
|
+
console.log(`
|
|
132
|
+
GPT Commands:
|
|
133
|
+
vibe gpt key <key> Set OpenAI API key (for embeddings)
|
|
134
|
+
vibe gpt status Check status (Codex CLI + API key)
|
|
135
|
+
vibe gpt logout Remove API key
|
|
136
|
+
|
|
137
|
+
Text generation: codex exec (via Codex CLI)
|
|
138
|
+
Embeddings: OpenAI API (requires API key)
|
|
139
|
+
Codex auth: codex auth
|
|
140
140
|
`);
|
|
141
141
|
}
|
|
142
142
|
break;
|
|
@@ -168,16 +168,16 @@ Codex auth: codex auth
|
|
|
168
168
|
geminiStatus();
|
|
169
169
|
break;
|
|
170
170
|
default:
|
|
171
|
-
console.log(`
|
|
172
|
-
Gemini Commands:
|
|
173
|
-
vibe gemini auth Detect Gemini CLI credentials
|
|
174
|
-
vibe gemini key <key> Set API key
|
|
175
|
-
vibe gemini status Check status
|
|
176
|
-
vibe gemini logout Clear config
|
|
177
|
-
vibe gemini remove Remove config
|
|
178
|
-
|
|
179
|
-
Auth order: gemini-cli → apikey
|
|
180
|
-
Requires: npm i -g @google/gemini-cli && gemini
|
|
171
|
+
console.log(`
|
|
172
|
+
Gemini Commands:
|
|
173
|
+
vibe gemini auth Detect Gemini CLI credentials
|
|
174
|
+
vibe gemini key <key> Set API key
|
|
175
|
+
vibe gemini status Check status
|
|
176
|
+
vibe gemini logout Clear config
|
|
177
|
+
vibe gemini remove Remove config
|
|
178
|
+
|
|
179
|
+
Auth order: gemini-cli → apikey
|
|
180
|
+
Requires: npm i -g @google/gemini-cli && gemini
|
|
181
181
|
`);
|
|
182
182
|
}
|
|
183
183
|
break;
|
|
@@ -190,11 +190,11 @@ Requires: npm i -g @google/gemini-cli && gemini
|
|
|
190
190
|
skillsAdd(positionalArgs[2]);
|
|
191
191
|
break;
|
|
192
192
|
default:
|
|
193
|
-
console.log(`
|
|
194
|
-
Skills Commands:
|
|
195
|
-
vibe skills add <owner/repo> Install skill from skills.sh
|
|
196
|
-
|
|
197
|
-
Example: vibe skills add vercel-labs/skills
|
|
193
|
+
console.log(`
|
|
194
|
+
Skills Commands:
|
|
195
|
+
vibe skills add <owner/repo> Install skill from skills.sh
|
|
196
|
+
|
|
197
|
+
Example: vibe skills add vercel-labs/skills
|
|
198
198
|
`);
|
|
199
199
|
}
|
|
200
200
|
break;
|
|
@@ -316,10 +316,10 @@ Example: vibe skills add vercel-labs/skills
|
|
|
316
316
|
console.log('');
|
|
317
317
|
}
|
|
318
318
|
else {
|
|
319
|
-
console.log(`
|
|
320
|
-
Env Commands:
|
|
321
|
-
vibe env import [path] .env 파일을 ~/.vibe/config.json으로 가져오기
|
|
322
|
-
path 생략 시 현재 디렉토리의 .env 사용
|
|
319
|
+
console.log(`
|
|
320
|
+
Env Commands:
|
|
321
|
+
vibe env import [path] .env 파일을 ~/.vibe/config.json으로 가져오기
|
|
322
|
+
path 생략 시 현재 디렉토리의 .env 사용
|
|
323
323
|
`);
|
|
324
324
|
}
|
|
325
325
|
break;
|
|
@@ -336,22 +336,22 @@ Env Commands:
|
|
|
336
336
|
showHelp();
|
|
337
337
|
break;
|
|
338
338
|
default:
|
|
339
|
-
console.log(`
|
|
340
|
-
❌ Unknown command: ${command}
|
|
341
|
-
|
|
342
|
-
Available commands:
|
|
343
|
-
vibe setup 셋업 위자드
|
|
344
|
-
vibe upgrade 최신 버전으로 업그레이드
|
|
345
|
-
vibe update 프로젝트 설정 업데이트
|
|
346
|
-
vibe status 전체 상태 확인
|
|
347
|
-
vibe claude <cmd> Claude (key, status, logout)
|
|
348
|
-
vibe gpt <cmd> GPT (auth, key, status, logout)
|
|
349
|
-
vibe gemini <cmd> Gemini (auth, key, status, logout)
|
|
350
|
-
|
|
351
|
-
vibe telegram <cmd> Telegram (setup, status) - notification only
|
|
352
|
-
vibe slack <cmd> Slack (setup, status) - notification only
|
|
353
|
-
|
|
354
|
-
Usage: vibe help
|
|
339
|
+
console.log(`
|
|
340
|
+
❌ Unknown command: ${command}
|
|
341
|
+
|
|
342
|
+
Available commands:
|
|
343
|
+
vibe setup 셋업 위자드
|
|
344
|
+
vibe upgrade 최신 버전으로 업그레이드
|
|
345
|
+
vibe update 프로젝트 설정 업데이트
|
|
346
|
+
vibe status 전체 상태 확인
|
|
347
|
+
vibe claude <cmd> Claude (key, status, logout)
|
|
348
|
+
vibe gpt <cmd> GPT (auth, key, status, logout)
|
|
349
|
+
vibe gemini <cmd> Gemini (auth, key, status, logout)
|
|
350
|
+
|
|
351
|
+
vibe telegram <cmd> Telegram (setup, status) - notification only
|
|
352
|
+
vibe slack <cmd> Slack (setup, status) - notification only
|
|
353
|
+
|
|
354
|
+
Usage: vibe help
|
|
355
355
|
`);
|
|
356
356
|
process.exit(1);
|
|
357
357
|
}
|
|
@@ -25,14 +25,14 @@ export function claudeStatus() {
|
|
|
25
25
|
catch { /* ignore */ }
|
|
26
26
|
const hasEnvKey = !!process.env.ANTHROPIC_API_KEY;
|
|
27
27
|
if (!hasFileKey && !hasEnvKey) {
|
|
28
|
-
console.log(`
|
|
29
|
-
Claude API: ✗ Not configured
|
|
30
|
-
|
|
31
|
-
Setup:
|
|
32
|
-
vibe claude key <ANTHROPIC_API_KEY>
|
|
33
|
-
vibe setup
|
|
34
|
-
|
|
35
|
-
Get key: https://console.anthropic.com/settings/keys
|
|
28
|
+
console.log(`
|
|
29
|
+
Claude API: ✗ Not configured
|
|
30
|
+
|
|
31
|
+
Setup:
|
|
32
|
+
vibe claude key <ANTHROPIC_API_KEY>
|
|
33
|
+
vibe setup
|
|
34
|
+
|
|
35
|
+
Get key: https://console.anthropic.com/settings/keys
|
|
36
36
|
`);
|
|
37
37
|
return;
|
|
38
38
|
}
|
|
@@ -41,14 +41,14 @@ Get key: https://console.anthropic.com/settings/keys
|
|
|
41
41
|
methods.push(`✓ API Key (${maskedKey})`);
|
|
42
42
|
if (hasEnvKey)
|
|
43
43
|
methods.push('✓ ANTHROPIC_API_KEY env');
|
|
44
|
-
console.log(`
|
|
45
|
-
Claude API: ${methods.join(', ')}
|
|
46
|
-
|
|
47
|
-
Models: Claude Opus 4.5, Sonnet 4.5, Haiku 4.5
|
|
48
|
-
Role: Fallback / Direct API
|
|
49
|
-
|
|
50
|
-
Manage:
|
|
51
|
-
vibe claude logout Remove key
|
|
44
|
+
console.log(`
|
|
45
|
+
Claude API: ${methods.join(', ')}
|
|
46
|
+
|
|
47
|
+
Models: Claude Opus 4.5, Sonnet 4.5, Haiku 4.5
|
|
48
|
+
Role: Fallback / Direct API
|
|
49
|
+
|
|
50
|
+
Manage:
|
|
51
|
+
vibe claude logout Remove key
|
|
52
52
|
`);
|
|
53
53
|
}
|
|
54
54
|
/**
|
package/dist/cli/llm/config.js
CHANGED
|
@@ -28,7 +28,7 @@ export const EXTERNAL_LLMS = {
|
|
|
28
28
|
gemini: {
|
|
29
29
|
name: 'core-gemini',
|
|
30
30
|
role: 'ui-ux',
|
|
31
|
-
description: 'UI/UX Design (Gemini
|
|
31
|
+
description: 'UI/UX Design (Gemini)',
|
|
32
32
|
package: '@anthropics/gemini-mcp',
|
|
33
33
|
envKey: 'GOOGLE_API_KEY'
|
|
34
34
|
},
|
|
@@ -38,13 +38,13 @@ export const EXTERNAL_LLMS = {
|
|
|
38
38
|
*/
|
|
39
39
|
export function setupExternalLLM(llmType, apiKey) {
|
|
40
40
|
if (!apiKey) {
|
|
41
|
-
console.log(`
|
|
42
|
-
API key required.
|
|
43
|
-
|
|
44
|
-
Usage:
|
|
45
|
-
vibe ${llmType} key <api-key>
|
|
46
|
-
|
|
47
|
-
${llmType === 'gpt' ? 'OpenAI API key: https://platform.openai.com/api-keys' : 'Google API key: https://aistudio.google.com/apikey'}
|
|
41
|
+
console.log(`
|
|
42
|
+
API key required.
|
|
43
|
+
|
|
44
|
+
Usage:
|
|
45
|
+
vibe ${llmType} key <api-key>
|
|
46
|
+
|
|
47
|
+
${llmType === 'gpt' ? 'OpenAI API key: https://platform.openai.com/api-keys' : 'Google API key: https://aistudio.google.com/apikey'}
|
|
48
48
|
`);
|
|
49
49
|
return;
|
|
50
50
|
}
|
|
@@ -79,17 +79,17 @@ ${llmType === 'gpt' ? 'OpenAI API key: https://platform.openai.com/api-keys' : '
|
|
|
79
79
|
catch { /* ignore: optional operation */ }
|
|
80
80
|
}
|
|
81
81
|
const configJsonPath = path.join(getVibeDir(), 'config.json');
|
|
82
|
-
console.log(`
|
|
83
|
-
${llmType.toUpperCase()} API key configured!
|
|
84
|
-
|
|
85
|
-
Role: ${llmConfig.description}
|
|
86
|
-
Stored: ${configJsonPath}
|
|
87
|
-
|
|
88
|
-
${llmType.toUpperCase()} is called directly via Hooks:
|
|
89
|
-
- Auto-called with "${llmType}. query" prefix
|
|
90
|
-
- Direct use: import('@su-record/vibe/lib/${llmType}')
|
|
91
|
-
|
|
92
|
-
Disable: vibe ${llmType} remove
|
|
82
|
+
console.log(`
|
|
83
|
+
${llmType.toUpperCase()} API key configured!
|
|
84
|
+
|
|
85
|
+
Role: ${llmConfig.description}
|
|
86
|
+
Stored: ${configJsonPath}
|
|
87
|
+
|
|
88
|
+
${llmType.toUpperCase()} is called directly via Hooks:
|
|
89
|
+
- Auto-called with "${llmType}. query" prefix
|
|
90
|
+
- Direct use: import('@su-record/vibe/lib/${llmType}')
|
|
91
|
+
|
|
92
|
+
Disable: vibe ${llmType} remove
|
|
93
93
|
`);
|
|
94
94
|
}
|
|
95
95
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/llm/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAEnI,oBAAoB;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAsC;IAC9D,MAAM,EAAE;QACN,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,+BAA+B;QAC5C,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,mBAAmB;KAC5B;IACD,GAAG,EAAE;QACH,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,kDAAkD;QAC/D,OAAO,EAAE,wBAAwB;QACjC,MAAM,EAAE,gBAAgB;KACzB;IACD,MAAM,EAAE;QACN,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/llm/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,14 +27,14 @@ export function geminiAuthCore() {
|
|
|
27
27
|
* Gemini 인증 (CLI 명령어용)
|
|
28
28
|
*/
|
|
29
29
|
export async function geminiAuth() {
|
|
30
|
-
console.log(`
|
|
31
|
-
Gemini Authentication
|
|
32
|
-
|
|
33
|
-
API Key (Google AI Studio):
|
|
34
|
-
vibe gemini key <your-api-key>
|
|
35
|
-
|
|
36
|
-
Get your API key from:
|
|
37
|
-
https://aistudio.google.com/apikey
|
|
30
|
+
console.log(`
|
|
31
|
+
Gemini Authentication
|
|
32
|
+
|
|
33
|
+
API Key (Google AI Studio):
|
|
34
|
+
vibe gemini key <your-api-key>
|
|
35
|
+
|
|
36
|
+
Get your API key from:
|
|
37
|
+
https://aistudio.google.com/apikey
|
|
38
38
|
`);
|
|
39
39
|
const config = readGlobalConfig();
|
|
40
40
|
const apiKey = config.credentials?.gemini?.apiKey;
|
|
@@ -69,14 +69,14 @@ export function geminiStatus() {
|
|
|
69
69
|
console.log(lines.join('\n'));
|
|
70
70
|
return;
|
|
71
71
|
}
|
|
72
|
-
console.log(`
|
|
73
|
-
Gemini Status
|
|
74
|
-
|
|
75
|
-
No credentials found.
|
|
76
|
-
|
|
77
|
-
Set up:
|
|
78
|
-
vibe gemini key <your-api-key>
|
|
79
|
-
or set GEMINI_API_KEY env var
|
|
72
|
+
console.log(`
|
|
73
|
+
Gemini Status
|
|
74
|
+
|
|
75
|
+
No credentials found.
|
|
76
|
+
|
|
77
|
+
Set up:
|
|
78
|
+
vibe gemini key <your-api-key>
|
|
79
|
+
or set GEMINI_API_KEY env var
|
|
80
80
|
`);
|
|
81
81
|
}
|
|
82
82
|
catch (error) {
|
|
@@ -36,25 +36,25 @@ export function gptStatus() {
|
|
|
36
36
|
}
|
|
37
37
|
const modelGpt = config.models?.gpt || 'gpt-5.4 (default)';
|
|
38
38
|
const modelCodex = config.models?.gptCodex || 'gpt-5.3-codex (default)';
|
|
39
|
-
console.log(`
|
|
40
|
-
GPT Status
|
|
41
|
-
|
|
42
|
-
Codex CLI: ${codexVersion}
|
|
43
|
-
Codex Auth: ${codexAuthStatus}
|
|
44
|
-
API Key: ${hasApiKey ? 'configured (for embeddings)' : 'not set'}
|
|
45
|
-
|
|
46
|
-
Models:
|
|
47
|
-
gpt (review): ${modelGpt}
|
|
48
|
-
gpt-codex (code review & analysis): ${modelCodex}
|
|
49
|
-
|
|
50
|
-
Auth priority: codex-cli (~/.codex/auth.json) > apikey
|
|
51
|
-
Stored: ~/.vibe/config.json
|
|
52
|
-
|
|
53
|
-
Commands:
|
|
54
|
-
vibe gpt key <key> Set OpenAI API key (for embeddings)
|
|
55
|
-
vibe gpt status This status
|
|
56
|
-
vibe gpt logout Remove API key
|
|
57
|
-
codex auth Codex CLI authentication
|
|
39
|
+
console.log(`
|
|
40
|
+
GPT Status
|
|
41
|
+
|
|
42
|
+
Codex CLI: ${codexVersion}
|
|
43
|
+
Codex Auth: ${codexAuthStatus}
|
|
44
|
+
API Key: ${hasApiKey ? 'configured (for embeddings)' : 'not set'}
|
|
45
|
+
|
|
46
|
+
Models:
|
|
47
|
+
gpt (review): ${modelGpt}
|
|
48
|
+
gpt-codex (code review & analysis): ${modelCodex}
|
|
49
|
+
|
|
50
|
+
Auth priority: codex-cli (~/.codex/auth.json) > apikey
|
|
51
|
+
Stored: ~/.vibe/config.json
|
|
52
|
+
|
|
53
|
+
Commands:
|
|
54
|
+
vibe gpt key <key> Set OpenAI API key (for embeddings)
|
|
55
|
+
vibe gpt status This status
|
|
56
|
+
vibe gpt logout Remove API key
|
|
57
|
+
codex auth Codex CLI authentication
|
|
58
58
|
`);
|
|
59
59
|
}
|
|
60
60
|
/**
|
package/dist/cli/llm/help.js
CHANGED
|
@@ -5,33 +5,33 @@
|
|
|
5
5
|
* Auth help (legacy - now shows new format)
|
|
6
6
|
*/
|
|
7
7
|
export function showAuthHelp() {
|
|
8
|
-
console.log(`
|
|
9
|
-
🔐 LLM Authentication
|
|
10
|
-
|
|
11
|
-
GPT Commands:
|
|
12
|
-
vibe gpt key <KEY> API key
|
|
13
|
-
vibe gpt status Check status
|
|
14
|
-
codex auth Codex CLI authentication
|
|
15
|
-
|
|
16
|
-
Gemini Commands:
|
|
17
|
-
vibe gemini key <KEY> API key
|
|
18
|
-
vibe gemini status Check status
|
|
19
|
-
|
|
20
|
-
Examples:
|
|
21
|
-
codex auth Codex CLI login
|
|
22
|
-
vibe gpt key sk-xxx API key setup
|
|
8
|
+
console.log(`
|
|
9
|
+
🔐 LLM Authentication
|
|
10
|
+
|
|
11
|
+
GPT Commands:
|
|
12
|
+
vibe gpt key <KEY> API key
|
|
13
|
+
vibe gpt status Check status
|
|
14
|
+
codex auth Codex CLI authentication
|
|
15
|
+
|
|
16
|
+
Gemini Commands:
|
|
17
|
+
vibe gemini key <KEY> API key
|
|
18
|
+
vibe gemini status Check status
|
|
19
|
+
|
|
20
|
+
Examples:
|
|
21
|
+
codex auth Codex CLI login
|
|
22
|
+
vibe gpt key sk-xxx API key setup
|
|
23
23
|
`);
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
26
|
* Logout help (legacy - now shows new format)
|
|
27
27
|
*/
|
|
28
28
|
export function showLogoutHelp() {
|
|
29
|
-
console.log(`
|
|
30
|
-
🚪 LLM Logout
|
|
31
|
-
|
|
32
|
-
Usage:
|
|
33
|
-
vibe gpt logout GPT logout
|
|
34
|
-
vibe gemini logout Gemini logout
|
|
29
|
+
console.log(`
|
|
30
|
+
🚪 LLM Logout
|
|
31
|
+
|
|
32
|
+
Usage:
|
|
33
|
+
vibe gpt logout GPT logout
|
|
34
|
+
vibe gemini logout Gemini logout
|
|
35
35
|
`);
|
|
36
36
|
}
|
|
37
37
|
//# sourceMappingURL=help.js.map
|
|
@@ -67,38 +67,38 @@ function convertAgentToCursor(content, filename) {
|
|
|
67
67
|
const nextStepsSection = nextAgents
|
|
68
68
|
.map((a) => `- For ${a.replace('-reviewer', '')} review: "Use ${a}"`)
|
|
69
69
|
.join('\n');
|
|
70
|
-
return `---
|
|
71
|
-
name: ${name}
|
|
72
|
-
model: ${model}
|
|
73
|
-
description: ${description}
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
# ${title}
|
|
77
|
-
|
|
78
|
-
## When Invoked
|
|
79
|
-
|
|
80
|
-
1. Run \`git diff\` to see recent changes
|
|
81
|
-
2. Focus on modified files relevant to this review type
|
|
82
|
-
3. Begin review immediately without asking questions
|
|
83
|
-
|
|
84
|
-
## Role
|
|
85
|
-
|
|
86
|
-
${roleLines.map((r) => `- ${r}`).join('\n')}
|
|
87
|
-
|
|
88
|
-
## Checklist
|
|
89
|
-
|
|
90
|
-
${checklist}
|
|
91
|
-
|
|
92
|
-
## Output Format
|
|
93
|
-
|
|
94
|
-
${outputFormat}
|
|
95
|
-
|
|
96
|
-
## Next Steps
|
|
97
|
-
|
|
98
|
-
Review complete. Consider these follow-up actions:
|
|
99
|
-
|
|
100
|
-
${nextStepsSection}
|
|
101
|
-
- All reviews done: Ready to commit
|
|
70
|
+
return `---
|
|
71
|
+
name: ${name}
|
|
72
|
+
model: ${model}
|
|
73
|
+
description: ${description}
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
# ${title}
|
|
77
|
+
|
|
78
|
+
## When Invoked
|
|
79
|
+
|
|
80
|
+
1. Run \`git diff\` to see recent changes
|
|
81
|
+
2. Focus on modified files relevant to this review type
|
|
82
|
+
3. Begin review immediately without asking questions
|
|
83
|
+
|
|
84
|
+
## Role
|
|
85
|
+
|
|
86
|
+
${roleLines.map((r) => `- ${r}`).join('\n')}
|
|
87
|
+
|
|
88
|
+
## Checklist
|
|
89
|
+
|
|
90
|
+
${checklist}
|
|
91
|
+
|
|
92
|
+
## Output Format
|
|
93
|
+
|
|
94
|
+
${outputFormat}
|
|
95
|
+
|
|
96
|
+
## Next Steps
|
|
97
|
+
|
|
98
|
+
Review complete. Consider these follow-up actions:
|
|
99
|
+
|
|
100
|
+
${nextStepsSection}
|
|
101
|
+
- All reviews done: Ready to commit
|
|
102
102
|
`;
|
|
103
103
|
}
|
|
104
104
|
/**
|
|
@@ -21,13 +21,13 @@ function convertLanguageRuleToCursor(content, filename) {
|
|
|
21
21
|
// glob 패턴 가져오기
|
|
22
22
|
const globs = LANGUAGE_GLOBS[filename] || '**/*';
|
|
23
23
|
// .mdc frontmatter + 본문
|
|
24
|
-
return `---
|
|
25
|
-
description: ${description} - complexity limits, type safety, error handling
|
|
26
|
-
globs: "${globs}"
|
|
27
|
-
alwaysApply: false
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
${normalizedContent}
|
|
24
|
+
return `---
|
|
25
|
+
description: ${description} - complexity limits, type safety, error handling
|
|
26
|
+
globs: "${globs}"
|
|
27
|
+
alwaysApply: false
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
${normalizedContent}
|
|
31
31
|
`;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
@@ -104,86 +104,86 @@ export function generateCursorRules(cursorRulesDir, detectedStacks = [], languag
|
|
|
104
104
|
const commonRules = [
|
|
105
105
|
{
|
|
106
106
|
filename: 'code-quality.mdc',
|
|
107
|
-
content: `---
|
|
108
|
-
description: General code quality rules for all files
|
|
109
|
-
alwaysApply: true
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
# Code Quality Rules
|
|
113
|
-
|
|
114
|
-
## Core Principles
|
|
115
|
-
- **Modify only requested scope** - Don't touch unrelated code
|
|
116
|
-
- **Preserve existing style** - Follow project conventions
|
|
117
|
-
- **Keep working code** - No unnecessary refactoring
|
|
118
|
-
|
|
119
|
-
## Forbidden Patterns
|
|
120
|
-
- No \`console.log\` in production code (remove after debugging)
|
|
121
|
-
- No hardcoded strings/numbers → Extract to constants
|
|
122
|
-
- No commented-out code in commits
|
|
123
|
-
- No incomplete code without TODO marker
|
|
124
|
-
|
|
125
|
-
## Naming Conventions
|
|
126
|
-
- Variables/functions: camelCase
|
|
127
|
-
- Classes/types: PascalCase
|
|
128
|
-
- Constants: UPPER_SNAKE_CASE
|
|
129
|
-
- Files: kebab-case or PascalCase (match project style)
|
|
130
|
-
|
|
131
|
-
## Function Design
|
|
132
|
-
- Single responsibility per function
|
|
133
|
-
- Max 5 parameters (use object for more)
|
|
134
|
-
- Descriptive names (verb + noun)
|
|
135
|
-
- Document non-obvious behavior
|
|
136
|
-
|
|
137
|
-
## Complexity Limits
|
|
138
|
-
| Metric | Limit |
|
|
139
|
-
|--------|-------|
|
|
140
|
-
| Function length | ≤30 lines (recommended), ≤50 lines (max) |
|
|
141
|
-
| Nesting depth | ≤3 levels |
|
|
142
|
-
| Parameters | ≤5 |
|
|
143
|
-
| Cyclomatic complexity | ≤10 |
|
|
144
|
-
|
|
145
|
-
## Dependency Management
|
|
146
|
-
- Avoid circular dependencies
|
|
147
|
-
- Keep loose coupling (depend on interfaces)
|
|
148
|
-
- High cohesion (group related functions)
|
|
107
|
+
content: `---
|
|
108
|
+
description: General code quality rules for all files
|
|
109
|
+
alwaysApply: true
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
# Code Quality Rules
|
|
113
|
+
|
|
114
|
+
## Core Principles
|
|
115
|
+
- **Modify only requested scope** - Don't touch unrelated code
|
|
116
|
+
- **Preserve existing style** - Follow project conventions
|
|
117
|
+
- **Keep working code** - No unnecessary refactoring
|
|
118
|
+
|
|
119
|
+
## Forbidden Patterns
|
|
120
|
+
- No \`console.log\` in production code (remove after debugging)
|
|
121
|
+
- No hardcoded strings/numbers → Extract to constants
|
|
122
|
+
- No commented-out code in commits
|
|
123
|
+
- No incomplete code without TODO marker
|
|
124
|
+
|
|
125
|
+
## Naming Conventions
|
|
126
|
+
- Variables/functions: camelCase
|
|
127
|
+
- Classes/types: PascalCase
|
|
128
|
+
- Constants: UPPER_SNAKE_CASE
|
|
129
|
+
- Files: kebab-case or PascalCase (match project style)
|
|
130
|
+
|
|
131
|
+
## Function Design
|
|
132
|
+
- Single responsibility per function
|
|
133
|
+
- Max 5 parameters (use object for more)
|
|
134
|
+
- Descriptive names (verb + noun)
|
|
135
|
+
- Document non-obvious behavior
|
|
136
|
+
|
|
137
|
+
## Complexity Limits
|
|
138
|
+
| Metric | Limit |
|
|
139
|
+
|--------|-------|
|
|
140
|
+
| Function length | ≤30 lines (recommended), ≤50 lines (max) |
|
|
141
|
+
| Nesting depth | ≤3 levels |
|
|
142
|
+
| Parameters | ≤5 |
|
|
143
|
+
| Cyclomatic complexity | ≤10 |
|
|
144
|
+
|
|
145
|
+
## Dependency Management
|
|
146
|
+
- Avoid circular dependencies
|
|
147
|
+
- Keep loose coupling (depend on interfaces)
|
|
148
|
+
- High cohesion (group related functions)
|
|
149
149
|
`,
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
filename: 'security-checklist.mdc',
|
|
153
|
-
content: `---
|
|
154
|
-
description: Security checklist for code changes
|
|
155
|
-
globs: "**/*.ts,**/*.tsx,**/*.js,**/*.jsx,**/*.py,**/*.go,**/*.rs,**/*.java,**/*.kt,**/*.swift"
|
|
156
|
-
alwaysApply: false
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
# Security Checklist
|
|
160
|
-
|
|
161
|
-
## Input Validation
|
|
162
|
-
- [ ] Validate all user inputs
|
|
163
|
-
- [ ] Sanitize data before database queries
|
|
164
|
-
- [ ] Use parameterized queries (prevent SQL injection)
|
|
165
|
-
|
|
166
|
-
## Authentication
|
|
167
|
-
- [ ] Secure password handling (never store plain text)
|
|
168
|
-
- [ ] Session management is secure
|
|
169
|
-
- [ ] Tokens have appropriate expiry
|
|
170
|
-
|
|
171
|
-
## Data Protection
|
|
172
|
-
- [ ] Sensitive data is encrypted
|
|
173
|
-
- [ ] API keys not committed to code
|
|
174
|
-
- [ ] Error messages don't leak sensitive info
|
|
175
|
-
|
|
176
|
-
## OWASP Top 10 Awareness
|
|
177
|
-
- Injection (SQL, XSS, Command)
|
|
178
|
-
- Broken authentication
|
|
179
|
-
- Sensitive data exposure
|
|
180
|
-
- XML external entities (XXE)
|
|
181
|
-
- Broken access control
|
|
182
|
-
- Security misconfiguration
|
|
183
|
-
- Cross-site scripting (XSS)
|
|
184
|
-
- Insecure deserialization
|
|
185
|
-
- Using components with known vulnerabilities
|
|
186
|
-
- Insufficient logging & monitoring
|
|
153
|
+
content: `---
|
|
154
|
+
description: Security checklist for code changes
|
|
155
|
+
globs: "**/*.ts,**/*.tsx,**/*.js,**/*.jsx,**/*.py,**/*.go,**/*.rs,**/*.java,**/*.kt,**/*.swift"
|
|
156
|
+
alwaysApply: false
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
# Security Checklist
|
|
160
|
+
|
|
161
|
+
## Input Validation
|
|
162
|
+
- [ ] Validate all user inputs
|
|
163
|
+
- [ ] Sanitize data before database queries
|
|
164
|
+
- [ ] Use parameterized queries (prevent SQL injection)
|
|
165
|
+
|
|
166
|
+
## Authentication
|
|
167
|
+
- [ ] Secure password handling (never store plain text)
|
|
168
|
+
- [ ] Session management is secure
|
|
169
|
+
- [ ] Tokens have appropriate expiry
|
|
170
|
+
|
|
171
|
+
## Data Protection
|
|
172
|
+
- [ ] Sensitive data is encrypted
|
|
173
|
+
- [ ] API keys not committed to code
|
|
174
|
+
- [ ] Error messages don't leak sensitive info
|
|
175
|
+
|
|
176
|
+
## OWASP Top 10 Awareness
|
|
177
|
+
- Injection (SQL, XSS, Command)
|
|
178
|
+
- Broken authentication
|
|
179
|
+
- Sensitive data exposure
|
|
180
|
+
- XML external entities (XXE)
|
|
181
|
+
- Broken access control
|
|
182
|
+
- Security misconfiguration
|
|
183
|
+
- Cross-site scripting (XSS)
|
|
184
|
+
- Insecure deserialization
|
|
185
|
+
- Using components with known vulnerabilities
|
|
186
|
+
- Insufficient logging & monitoring
|
|
187
187
|
`,
|
|
188
188
|
},
|
|
189
189
|
];
|