@su-record/vibe 2.11.0 → 2.12.2
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/README.en.md +23 -28
- package/README.md +10 -9
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +12 -12
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/commands/codex-proxy.d.ts +1 -1
- package/dist/cli/commands/codex-proxy.js +11 -11
- package/dist/cli/commands/codex-proxy.js.map +1 -1
- package/dist/cli/commands/config.d.ts +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +22 -21
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +9 -7
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/info.test.d.ts +2 -0
- package/dist/cli/commands/info.test.d.ts.map +1 -0
- package/dist/cli/commands/info.test.js +41 -0
- package/dist/cli/commands/info.test.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -2
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +20 -16
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/setup.d.ts +1 -1
- package/dist/cli/commands/setup.js +24 -24
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +8 -7
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +28 -16
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/upgrade.d.ts +7 -0
- package/dist/cli/commands/upgrade.d.ts.map +1 -1
- package/dist/cli/commands/upgrade.js +30 -3
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/upgrade.test.d.ts +2 -0
- package/dist/cli/commands/upgrade.test.d.ts.map +1 -0
- package/dist/cli/commands/upgrade.test.js +15 -0
- package/dist/cli/commands/upgrade.test.js.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +23 -24
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/llm/antigravity-commands.d.ts +25 -0
- package/dist/cli/llm/antigravity-commands.d.ts.map +1 -0
- package/dist/cli/llm/antigravity-commands.js +142 -0
- package/dist/cli/llm/antigravity-commands.js.map +1 -0
- package/dist/cli/llm/claude-commands.d.ts.map +1 -1
- package/dist/cli/llm/claude-commands.js +3 -1
- package/dist/cli/llm/claude-commands.js.map +1 -1
- package/dist/cli/llm/config.js +7 -7
- package/dist/cli/llm/config.js.map +1 -1
- package/dist/cli/llm/gemini-commands.d.ts.map +1 -1
- package/dist/cli/llm/gemini-commands.js +7 -4
- package/dist/cli/llm/gemini-commands.js.map +1 -1
- package/dist/cli/llm/gpt-commands.d.ts.map +1 -1
- package/dist/cli/llm/gpt-commands.js +3 -3
- package/dist/cli/llm/gpt-commands.js.map +1 -1
- package/dist/cli/llm/help.js +4 -4
- package/dist/cli/llm/index.d.ts +1 -1
- package/dist/cli/llm/index.d.ts.map +1 -1
- package/dist/cli/llm/index.js +1 -1
- package/dist/cli/llm/index.js.map +1 -1
- package/dist/cli/llm.d.ts +2 -2
- package/dist/cli/llm.js +2 -2
- package/dist/cli/postinstall/constants.js +6 -6
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/postinstall/inline-skills.js +5 -5
- package/dist/cli/postinstall/inline-skills.js.map +1 -1
- package/dist/cli/postinstall/main.d.ts.map +1 -1
- package/dist/cli/postinstall/main.js +14 -9
- package/dist/cli/postinstall/main.js.map +1 -1
- package/dist/cli/setup/CodexHooks.d.ts +20 -0
- package/dist/cli/setup/CodexHooks.d.ts.map +1 -0
- package/dist/cli/setup/CodexHooks.js +50 -0
- package/dist/cli/setup/CodexHooks.js.map +1 -0
- package/dist/cli/setup/CodexHooks.test.d.ts +2 -0
- package/dist/cli/setup/CodexHooks.test.d.ts.map +1 -0
- package/dist/cli/setup/CodexHooks.test.js +23 -0
- package/dist/cli/setup/CodexHooks.test.js.map +1 -0
- package/dist/cli/setup/LegacyMigration.js +2 -2
- package/dist/cli/setup/ProjectSetup.d.ts +4 -4
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +21 -19
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/dist/cli/setup/index.d.ts +1 -0
- package/dist/cli/setup/index.d.ts.map +1 -1
- package/dist/cli/setup/index.js +1 -0
- package/dist/cli/setup/index.js.map +1 -1
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +2 -1
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/types.d.ts +7 -9
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/utils/cli-detector.d.ts +5 -5
- package/dist/cli/utils/cli-detector.d.ts.map +1 -1
- package/dist/cli/utils/cli-detector.js +18 -14
- package/dist/cli/utils/cli-detector.js.map +1 -1
- package/dist/cli/utils/cli-detector.test.d.ts +2 -0
- package/dist/cli/utils/cli-detector.test.d.ts.map +1 -0
- package/dist/cli/utils/cli-detector.test.js +51 -0
- package/dist/cli/utils/cli-detector.test.js.map +1 -0
- package/dist/infra/lib/ReviewRace.d.ts +4 -4
- package/dist/infra/lib/ReviewRace.d.ts.map +1 -1
- package/dist/infra/lib/ReviewRace.js +16 -16
- package/dist/infra/lib/ReviewRace.js.map +1 -1
- package/dist/infra/lib/SkillRepository.js +7 -7
- package/dist/infra/lib/antigravity/auth.d.ts +18 -0
- package/dist/infra/lib/antigravity/auth.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/auth.js +32 -0
- package/dist/infra/lib/antigravity/auth.js.map +1 -0
- package/dist/infra/lib/antigravity/capabilities.d.ts +28 -0
- package/dist/infra/lib/antigravity/capabilities.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/capabilities.js +178 -0
- package/dist/infra/lib/antigravity/capabilities.js.map +1 -0
- package/dist/infra/lib/antigravity/chat.d.ts +34 -0
- package/dist/infra/lib/antigravity/chat.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/chat.js +160 -0
- package/dist/infra/lib/antigravity/chat.js.map +1 -0
- package/dist/infra/lib/antigravity/completion.d.ts +12 -0
- package/dist/infra/lib/antigravity/completion.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/completion.js +13 -0
- package/dist/infra/lib/antigravity/completion.js.map +1 -0
- package/dist/infra/lib/antigravity/constants.d.ts +8 -0
- package/dist/infra/lib/antigravity/constants.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/constants.js +11 -0
- package/dist/infra/lib/antigravity/constants.js.map +1 -0
- package/dist/infra/lib/antigravity/index.d.ts +13 -0
- package/dist/infra/lib/antigravity/index.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/index.js +12 -0
- package/dist/infra/lib/antigravity/index.js.map +1 -0
- package/dist/infra/lib/antigravity/models.d.ts +11 -0
- package/dist/infra/lib/antigravity/models.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/models.js +38 -0
- package/dist/infra/lib/antigravity/models.js.map +1 -0
- package/dist/infra/lib/antigravity/orchestration.d.ts +33 -0
- package/dist/infra/lib/antigravity/orchestration.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/orchestration.js +62 -0
- package/dist/infra/lib/antigravity/orchestration.js.map +1 -0
- package/dist/infra/lib/antigravity/types.d.ts +115 -0
- package/dist/infra/lib/antigravity/types.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/types.js +5 -0
- package/dist/infra/lib/antigravity/types.js.map +1 -0
- package/dist/infra/lib/codex-proxy.d.ts +1 -1
- package/dist/infra/lib/codex-proxy.js +9 -9
- package/dist/infra/lib/codex-proxy.js.map +1 -1
- package/dist/infra/lib/config/GlobalConfigManager.d.ts +6 -3
- package/dist/infra/lib/config/GlobalConfigManager.d.ts.map +1 -1
- package/dist/infra/lib/config/GlobalConfigManager.js +47 -37
- package/dist/infra/lib/config/GlobalConfigManager.js.map +1 -1
- package/dist/infra/lib/config/GlobalConfigManager.test.d.ts +2 -0
- package/dist/infra/lib/config/GlobalConfigManager.test.d.ts.map +1 -0
- package/dist/infra/lib/config/GlobalConfigManager.test.js +9 -0
- package/dist/infra/lib/config/GlobalConfigManager.test.js.map +1 -0
- package/dist/infra/lib/constants.js +1 -1
- package/dist/infra/lib/constants.js.map +1 -1
- package/dist/infra/lib/gemini/auth.d.ts +3 -3
- package/dist/infra/lib/gemini/auth.js +9 -9
- package/dist/infra/lib/gemini/auth.js.map +1 -1
- package/dist/infra/lib/llm/auth/AuthProfileManager.d.ts +3 -3
- package/dist/infra/lib/llm/auth/AuthProfileManager.d.ts.map +1 -1
- package/dist/infra/lib/llm/auth/AuthProfileManager.js.map +1 -1
- package/dist/infra/lib/llm/auth/AuthProfileManager.test.js +8 -8
- package/dist/infra/lib/llm/auth/AuthProfileManager.test.js.map +1 -1
- package/dist/infra/lib/llm/auth/ConfigManager.js +2 -2
- package/dist/infra/lib/llm/auth/ConfigManager.js.map +1 -1
- package/dist/infra/lib/llm/auth/TokenRefresher.d.ts +1 -1
- package/dist/infra/lib/llm/auth/TokenRefresher.js +1 -1
- package/dist/infra/lib/llm/auth/index.js +1 -1
- package/dist/infra/lib/llm/auth/index.js.map +1 -1
- package/dist/infra/lib/llm/index.d.ts +1 -1
- package/dist/infra/lib/llm/index.js +1 -1
- package/dist/infra/lib/llm/types.d.ts +3 -3
- package/dist/infra/lib/llm/types.d.ts.map +1 -1
- package/dist/infra/lib/llm/types.js +1 -1
- package/dist/infra/lib/llm/utils/stream.js +1 -1
- package/dist/infra/lib/llm/utils/stream.js.map +1 -1
- package/dist/infra/lib/llm-availability.d.ts +5 -5
- package/dist/infra/lib/llm-availability.d.ts.map +1 -1
- package/dist/infra/lib/llm-availability.js +13 -10
- package/dist/infra/lib/llm-availability.js.map +1 -1
- package/dist/infra/lib/llm-availability.test.d.ts +2 -0
- package/dist/infra/lib/llm-availability.test.d.ts.map +1 -0
- package/dist/infra/lib/llm-availability.test.js +36 -0
- package/dist/infra/lib/llm-availability.test.js.map +1 -0
- package/dist/infra/lib/ui-ux/UiUxWorkflow.d.ts.map +1 -1
- package/dist/infra/lib/ui-ux/UiUxWorkflow.js +23 -5
- package/dist/infra/lib/ui-ux/UiUxWorkflow.js.map +1 -1
- package/dist/infra/orchestrator/AgentExecutor.d.ts.map +1 -1
- package/dist/infra/orchestrator/AgentExecutor.js +30 -1
- package/dist/infra/orchestrator/AgentExecutor.js.map +1 -1
- package/dist/infra/orchestrator/AgentManifestCache.js +1 -1
- package/dist/infra/orchestrator/AgentManifestCache.js.map +1 -1
- package/dist/infra/orchestrator/BackgroundManager.js +2 -2
- package/dist/infra/orchestrator/BackgroundManager.js.map +1 -1
- package/dist/infra/orchestrator/CodexAgentRuntime.d.ts +12 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.d.ts.map +1 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.js +94 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.js.map +1 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.test.d.ts +2 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.test.d.ts.map +1 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.test.js +37 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.test.js.map +1 -0
- package/dist/infra/orchestrator/LLMCluster.d.ts +11 -11
- package/dist/infra/orchestrator/LLMCluster.d.ts.map +1 -1
- package/dist/infra/orchestrator/LLMCluster.js +22 -22
- package/dist/infra/orchestrator/LLMCluster.js.map +1 -1
- package/dist/infra/orchestrator/MultiLlmResearch.d.ts +3 -3
- package/dist/infra/orchestrator/MultiLlmResearch.d.ts.map +1 -1
- package/dist/infra/orchestrator/MultiLlmResearch.js +17 -17
- package/dist/infra/orchestrator/MultiLlmResearch.js.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.d.ts +2 -2
- package/dist/infra/orchestrator/SmartRouter.js +7 -7
- package/dist/infra/orchestrator/SmartRouter.js.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.test.js +74 -74
- package/dist/infra/orchestrator/SmartRouter.test.js.map +1 -1
- package/dist/infra/orchestrator/agentDiscovery.d.ts +1 -1
- package/dist/infra/orchestrator/agentDiscovery.js +4 -4
- package/dist/infra/orchestrator/agentDiscovery.js.map +1 -1
- package/dist/infra/orchestrator/index.d.ts +17 -17
- package/dist/infra/orchestrator/index.d.ts.map +1 -1
- package/dist/infra/orchestrator/index.js +30 -30
- package/dist/infra/orchestrator/index.js.map +1 -1
- package/dist/infra/orchestrator/orchestrator.d.ts +4 -4
- package/dist/infra/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/infra/orchestrator/orchestrator.js +5 -5
- package/dist/infra/orchestrator/orchestrator.js.map +1 -1
- package/dist/infra/orchestrator/parallelResearch.d.ts.map +1 -1
- package/dist/infra/orchestrator/parallelResearch.js +11 -0
- package/dist/infra/orchestrator/parallelResearch.js.map +1 -1
- package/dist/infra/orchestrator/types.d.ts +7 -8
- package/dist/infra/orchestrator/types.d.ts.map +1 -1
- package/dist/infra/orchestrator/types.js +17 -18
- package/dist/infra/orchestrator/types.js.map +1 -1
- package/dist/tools/spec/specGenerator.d.ts +1 -1
- package/dist/tools/spec/specGenerator.js +1 -1
- package/hooks/antigravity-hooks.json +73 -0
- package/hooks/scripts/__tests__/codex-hook-adapter.test.js +31 -0
- package/hooks/scripts/__tests__/hook-payload.test.js +29 -0
- package/hooks/scripts/__tests__/llm-orchestrate-antigravity.test.js +63 -0
- package/hooks/scripts/codex-hook-adapter.js +124 -0
- package/hooks/scripts/codex-review-gate.js +7 -3
- package/hooks/scripts/devlog-gen.js +1 -1
- package/hooks/scripts/hook-payload.js +64 -0
- package/hooks/scripts/lib/dispatcher.js +20 -0
- package/hooks/scripts/llm-orchestrate.js +40 -44
- package/hooks/scripts/prompt-dispatcher.js +9 -9
- package/hooks/scripts/stop-notify.js +1 -1
- package/hooks/scripts/utils.js +1 -1
- package/package.json +1 -1
- package/skills/brand-assets/SKILL.md +11 -11
- package/skills/docs/SKILL.md +10 -5
- package/skills/event-comms/SKILL.md +1 -1
- package/skills/event-ops/SKILL.md +4 -4
- package/skills/spec/SKILL.md +29 -29
- package/skills/spec-review/SKILL.md +23 -23
- package/skills/tool-fallback/SKILL.md +2 -2
- package/skills/tool-fallback/rubrics/fallback-chain.md +2 -2
- package/skills/vibe.event/SKILL.md +1 -1
- package/skills/vibe.review/SKILL.md +13 -13
- package/skills/vibe.run/SKILL.md +30 -30
- package/skills/vibe.spec/SKILL.md +4 -4
- package/skills/vibe.utils/SKILL.md +17 -17
- package/hooks/gemini-hooks.json +0 -73
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* UserPromptSubmit Hook - LLM 오케스트레이션 (GPT/
|
|
2
|
+
* UserPromptSubmit Hook - LLM 오케스트레이션 (GPT/Antigravity/Claude)
|
|
3
3
|
*
|
|
4
4
|
* Usage:
|
|
5
5
|
* node llm-orchestrate.js <provider> <mode> "prompt"
|
|
6
6
|
* node llm-orchestrate.js <provider> <mode> "systemPrompt" "prompt"
|
|
7
7
|
*
|
|
8
|
-
* provider: gpt |
|
|
8
|
+
* provider: gpt | antigravity | claude
|
|
9
9
|
* mode: orchestrate | orchestrate-json | image | analyze-image
|
|
10
10
|
*
|
|
11
11
|
* Image Mode:
|
|
12
|
-
* node llm-orchestrate.js
|
|
13
|
-
* node llm-orchestrate.js
|
|
12
|
+
* node llm-orchestrate.js antigravity image "prompt" --output "./image.png"
|
|
13
|
+
* node llm-orchestrate.js antigravity image "prompt" --output "./image.png" --size "1920x1080"
|
|
14
14
|
*
|
|
15
15
|
* Features:
|
|
16
|
-
* - CLI-based: GPT → codex exec,
|
|
16
|
+
* - CLI-based: GPT → codex exec, Antigravity → agy -p, Claude → claude --print
|
|
17
17
|
* - Exponential backoff retry (3 attempts)
|
|
18
|
-
* - Auto fallback: gpt ↔
|
|
18
|
+
* - Auto fallback: gpt ↔ antigravity
|
|
19
19
|
* - Overload/rate-limit detection
|
|
20
|
-
* - Image generation (
|
|
21
|
-
* - Image analysis (
|
|
20
|
+
* - Image generation (Google image model)
|
|
21
|
+
* - Image analysis (Google multimodal model)
|
|
22
22
|
*
|
|
23
23
|
* Analyze-Image Mode:
|
|
24
|
-
* node llm-orchestrate.js
|
|
25
|
-
* node llm-orchestrate.js
|
|
24
|
+
* node llm-orchestrate.js antigravity analyze-image "./image.png" "Analyze this UI"
|
|
25
|
+
* node llm-orchestrate.js antigravity analyze-image "./image.png" "prompt" --system "system prompt"
|
|
26
26
|
*
|
|
27
27
|
* Input: JSON from stdin with { prompt: string } (when no CLI args)
|
|
28
28
|
*/
|
|
@@ -36,7 +36,7 @@ import { execSync, spawn } from 'child_process';
|
|
|
36
36
|
const LIB_URL = getLibBaseUrl();
|
|
37
37
|
const DEFAULT_SYSTEM_PROMPT = 'You are a helpful assistant.';
|
|
38
38
|
|
|
39
|
-
const provider = process.argv[2] || '
|
|
39
|
+
const provider = process.argv[2] || 'antigravity';
|
|
40
40
|
const mode = process.argv[3] || 'orchestrate';
|
|
41
41
|
|
|
42
42
|
// WHY 3 retries: Enough to ride out brief 503/overload blips (typically 1-2
|
|
@@ -102,7 +102,7 @@ function resolveModel(providerName, config) {
|
|
|
102
102
|
if (providerName === 'gpt-spark') return config.models?.gptCodexSpark || 'gpt-5.3-codex-spark';
|
|
103
103
|
if (providerName === 'gpt-codex') return config.models?.gptCodex || 'gpt-5.3-codex';
|
|
104
104
|
if (providerName === 'gpt') return config.models?.gpt || 'gpt-5.5';
|
|
105
|
-
if (providerName === '
|
|
105
|
+
if (providerName === 'antigravity') return config.models?.antigravity || 'antigravity';
|
|
106
106
|
if (providerName === 'claude') return 'claude';
|
|
107
107
|
return providerName;
|
|
108
108
|
}
|
|
@@ -160,7 +160,7 @@ function sleep(ms) {
|
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
// ============================================
|
|
163
|
-
// Image Generation (delegates to
|
|
163
|
+
// Image Generation (delegates to Google image API)
|
|
164
164
|
// ============================================
|
|
165
165
|
|
|
166
166
|
function parseImageArgs(args) {
|
|
@@ -180,7 +180,7 @@ function parseImageArgs(args) {
|
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
// ============================================
|
|
183
|
-
// Image Analysis (delegates to
|
|
183
|
+
// Image Analysis (delegates to Google image API)
|
|
184
184
|
// ============================================
|
|
185
185
|
|
|
186
186
|
function parseAnalyzeImageArgs(args) {
|
|
@@ -267,19 +267,16 @@ function callCodexCli(prompt, sysPrompt, jsonMode, model, timeoutMs) {
|
|
|
267
267
|
});
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
-
function
|
|
270
|
+
function callAntigravityCli(prompt, sysPrompt, jsonMode, timeoutMs) {
|
|
271
271
|
const fullPrompt = buildCliPrompt(prompt, sysPrompt, jsonMode);
|
|
272
|
-
|
|
273
|
-
const args = ['-p', '.', '-o', 'text'];
|
|
274
|
-
if (model) args.push('-m', model);
|
|
272
|
+
const args = ['-p', fullPrompt];
|
|
275
273
|
const effectiveTimeout = timeoutMs || CLI_TIMEOUT_MS;
|
|
276
274
|
|
|
277
275
|
return new Promise((resolve, reject) => {
|
|
278
|
-
const proc = spawnCli('
|
|
279
|
-
stdio: ['
|
|
276
|
+
const proc = spawnCli('agy', args, {
|
|
277
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
280
278
|
timeout: effectiveTimeout,
|
|
281
279
|
});
|
|
282
|
-
proc.stdin.end(fullPrompt);
|
|
283
280
|
|
|
284
281
|
let stdout = '';
|
|
285
282
|
let stderr = '';
|
|
@@ -290,12 +287,12 @@ function callGeminiCli(prompt, sysPrompt, jsonMode, model, timeoutMs) {
|
|
|
290
287
|
if (code === 0 && stdout.trim()) {
|
|
291
288
|
resolve(stdout.trim());
|
|
292
289
|
} else {
|
|
293
|
-
reject(new Error(`
|
|
290
|
+
reject(new Error(`antigravity cli failed (code ${code}): ${(stderr || stdout).slice(0, 500)}`));
|
|
294
291
|
}
|
|
295
292
|
});
|
|
296
293
|
|
|
297
294
|
proc.on('error', (err) => {
|
|
298
|
-
reject(new Error(`
|
|
295
|
+
reject(new Error(`antigravity cli spawn error: ${err.message}`));
|
|
299
296
|
});
|
|
300
297
|
});
|
|
301
298
|
}
|
|
@@ -352,9 +349,8 @@ async function callProvider(providerName, prompt, sysPrompt, jsonMode, timeoutMs
|
|
|
352
349
|
return await callCodexCli(prompt, sysPrompt, jsonMode, model, timeoutMs);
|
|
353
350
|
}
|
|
354
351
|
|
|
355
|
-
if (providerName === '
|
|
356
|
-
|
|
357
|
-
return await callGeminiCli(prompt, sysPrompt, jsonMode, model, timeoutMs);
|
|
352
|
+
if (providerName === 'antigravity') {
|
|
353
|
+
return await callAntigravityCli(prompt, sysPrompt, jsonMode, timeoutMs);
|
|
358
354
|
}
|
|
359
355
|
|
|
360
356
|
if (providerName === 'claude') {
|
|
@@ -398,8 +394,8 @@ async function callWithRetry(providerName, prompt, sysPrompt, jsonMode, timeoutM
|
|
|
398
394
|
async function main() {
|
|
399
395
|
// Image mode handling
|
|
400
396
|
if (mode === 'image') {
|
|
401
|
-
if (provider !== '
|
|
402
|
-
console.log('[IMAGE] Error: Image generation only supports
|
|
397
|
+
if (provider !== 'antigravity') {
|
|
398
|
+
console.log('[IMAGE] Error: Image generation only supports antigravity provider');
|
|
403
399
|
return;
|
|
404
400
|
}
|
|
405
401
|
|
|
@@ -415,7 +411,7 @@ async function main() {
|
|
|
415
411
|
fs.mkdirSync(outputDir, { recursive: true });
|
|
416
412
|
}
|
|
417
413
|
|
|
418
|
-
const modelLabel = imageArgs.model === 'nano-banana-pro' ? '
|
|
414
|
+
const modelLabel = imageArgs.model === 'nano-banana-pro' ? 'Google Pro Image' : 'Google Flash Image';
|
|
419
415
|
console.error(`[IMAGE] Generating with ${modelLabel}...`);
|
|
420
416
|
console.error(` Prompt: ${imageArgs.prompt}`);
|
|
421
417
|
console.error(` Size: ${imageArgs.size}`);
|
|
@@ -423,8 +419,8 @@ async function main() {
|
|
|
423
419
|
console.error(` Output: ${imageArgs.output}`);
|
|
424
420
|
|
|
425
421
|
try {
|
|
426
|
-
const
|
|
427
|
-
const image = await
|
|
422
|
+
const googleApi = await import(`${LIB_URL}gemini-api.js`);
|
|
423
|
+
const image = await googleApi.generateImage(imageArgs.prompt, { size: imageArgs.size, model: imageArgs.model });
|
|
428
424
|
fs.writeFileSync(imageArgs.output, image.data);
|
|
429
425
|
const stats = fs.statSync(imageArgs.output);
|
|
430
426
|
const sizeKB = (stats.size / 1024).toFixed(1);
|
|
@@ -448,8 +444,8 @@ async function main() {
|
|
|
448
444
|
|
|
449
445
|
// Analyze-image mode handling
|
|
450
446
|
if (mode === 'analyze-image') {
|
|
451
|
-
if (provider !== '
|
|
452
|
-
console.log('[ANALYZE-IMAGE] Error: Image analysis only supports
|
|
447
|
+
if (provider !== 'antigravity') {
|
|
448
|
+
console.log('[ANALYZE-IMAGE] Error: Image analysis only supports antigravity provider');
|
|
453
449
|
return;
|
|
454
450
|
}
|
|
455
451
|
|
|
@@ -473,17 +469,17 @@ async function main() {
|
|
|
473
469
|
return;
|
|
474
470
|
}
|
|
475
471
|
|
|
476
|
-
console.error(`[ANALYZE-IMAGE] Analyzing image with
|
|
472
|
+
console.error(`[ANALYZE-IMAGE] Analyzing image with Google multimodal model...`);
|
|
477
473
|
console.error(` Image: ${absolutePath}`);
|
|
478
474
|
console.error(` Prompt: ${analyzeArgs.prompt}`);
|
|
479
475
|
|
|
480
476
|
try {
|
|
481
|
-
const
|
|
477
|
+
const googleApi = await import(`${LIB_URL}gemini-api.js`);
|
|
482
478
|
const options = {};
|
|
483
479
|
if (analyzeArgs.systemPrompt) {
|
|
484
480
|
options.systemPrompt = analyzeArgs.systemPrompt;
|
|
485
481
|
}
|
|
486
|
-
const analysis = await
|
|
482
|
+
const analysis = await googleApi.analyzeImage(absolutePath, analyzeArgs.prompt, options);
|
|
487
483
|
|
|
488
484
|
console.log(JSON.stringify({
|
|
489
485
|
success: true,
|
|
@@ -564,7 +560,7 @@ async function main() {
|
|
|
564
560
|
const prefixPatterns = {
|
|
565
561
|
gpt: /^(gpt[-.\s]|지피티-|vibe-gpt-)\s*/i,
|
|
566
562
|
'gpt-codex': /^(gpt[-.\s]|지피티-|vibe-gpt-)\s*/i,
|
|
567
|
-
|
|
563
|
+
antigravity: /^(antigravity[-.\s]|agy[-.\s]|안티그래비티-|vibe-antigravity-)\s*/i,
|
|
568
564
|
};
|
|
569
565
|
const cleanPrompt = prompt.replace(prefixPatterns[provider] || /^/, '').trim();
|
|
570
566
|
const jsonMode = mode === 'orchestrate-json';
|
|
@@ -585,8 +581,8 @@ async function main() {
|
|
|
585
581
|
|
|
586
582
|
// Provider chain: primary → cross fallback
|
|
587
583
|
// 프록시 모드 (주관=GPT): 보조로 Claude CLI 사용
|
|
588
|
-
// 직접 모드 (주관=Claude): 보조로 GPT/
|
|
589
|
-
const providerLabels = { gpt: 'GPT', 'gpt-codex': 'GPT Codex',
|
|
584
|
+
// 직접 모드 (주관=Claude): 보조로 GPT/Antigravity 사용
|
|
585
|
+
const providerLabels = { gpt: 'GPT', 'gpt-codex': 'GPT Codex', antigravity: 'Antigravity', claude: 'Claude' };
|
|
590
586
|
const isGpt = provider === 'gpt' || provider === 'gpt-codex' || provider === 'gpt-spark';
|
|
591
587
|
const isClaude = provider === 'claude';
|
|
592
588
|
const claudeSecondary = useClaudeAsSecondary();
|
|
@@ -594,13 +590,13 @@ async function main() {
|
|
|
594
590
|
let providerChain;
|
|
595
591
|
if (isClaude) {
|
|
596
592
|
// 명시적 claude 호출
|
|
597
|
-
providerChain = ['claude', '
|
|
593
|
+
providerChain = ['claude', 'antigravity'];
|
|
598
594
|
} else if (isGpt) {
|
|
599
|
-
// GPT 주관 → claude fallback (vibe-codex),
|
|
600
|
-
providerChain = claudeSecondary ? [provider, 'claude'] : [provider, '
|
|
595
|
+
// GPT 주관 → claude fallback (vibe-codex), antigravity fallback (직접 모드)
|
|
596
|
+
providerChain = claudeSecondary ? [provider, 'claude'] : [provider, 'antigravity'];
|
|
601
597
|
} else {
|
|
602
|
-
//
|
|
603
|
-
providerChain = claudeSecondary ? ['
|
|
598
|
+
// Antigravity 주관 → claude fallback (vibe-codex), gpt fallback (직접 모드)
|
|
599
|
+
providerChain = claudeSecondary ? ['antigravity', 'claude'] : ['antigravity', 'gpt'];
|
|
604
600
|
}
|
|
605
601
|
|
|
606
602
|
const vibeConfig = readVibeConfig();
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 이 디스패처가 stdin에서 prompt를 읽고, 패턴 매칭 후 해당 스크립트만 실행.
|
|
7
7
|
*
|
|
8
8
|
* 이점:
|
|
9
|
-
* - 외부 LLM 호출(GPT/
|
|
9
|
+
* - 외부 LLM 호출(GPT/Antigravity)이 패턴 매칭 없이 발동하지 않음
|
|
10
10
|
* - context window에 불필요한 응답이 주입되지 않음
|
|
11
11
|
* - 단일 프로세스에서 매칭 후 필요한 스크립트만 fork
|
|
12
12
|
*/
|
|
@@ -82,7 +82,7 @@ const DISPATCH_RULES = [
|
|
|
82
82
|
label: 'e2e-echo',
|
|
83
83
|
},
|
|
84
84
|
|
|
85
|
-
// 외부 LLM 호출 (GPT/
|
|
85
|
+
// 외부 LLM 호출 (GPT/Antigravity) - 패턴 매칭 필수
|
|
86
86
|
{
|
|
87
87
|
pattern: /아키텍처.*(검토|리뷰|분석)|architecture.*(review|analyz)|설계.*검토|구조.*분석.*해/i,
|
|
88
88
|
script: 'llm-orchestrate.js',
|
|
@@ -92,8 +92,8 @@ const DISPATCH_RULES = [
|
|
|
92
92
|
{
|
|
93
93
|
pattern: /(UI|UX).*(리뷰|검토|피드백|개선)|사용자.*경험.*검토|디자인.*리뷰|design.*feedback/i,
|
|
94
94
|
script: 'llm-orchestrate.js',
|
|
95
|
-
args: ['
|
|
96
|
-
label: '
|
|
95
|
+
args: ['antigravity', 'orchestrate', 'You are a UI/UX expert. Analyze and provide feedback.'],
|
|
96
|
+
label: 'antigravity-uiux',
|
|
97
97
|
},
|
|
98
98
|
{
|
|
99
99
|
pattern: /디버깅.*해|버그.*찾아|find.*bug|debug.*this.*code/i,
|
|
@@ -104,8 +104,8 @@ const DISPATCH_RULES = [
|
|
|
104
104
|
{
|
|
105
105
|
pattern: /코드.*정적.*분석|코드.*분석.*해줘|analyze.*code.*quality/i,
|
|
106
106
|
script: 'llm-orchestrate.js',
|
|
107
|
-
args: ['
|
|
108
|
-
label: '
|
|
107
|
+
args: ['antigravity', 'orchestrate', 'You are a code analysis expert. Review and analyze the code.'],
|
|
108
|
+
label: 'antigravity-analysis',
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
111
|
pattern: /코드.*리뷰|code.*review|PR.*리뷰|리뷰.*해줘.*코드/i,
|
|
@@ -128,10 +128,10 @@ const DISPATCH_RULES = [
|
|
|
128
128
|
label: 'test-gpt',
|
|
129
129
|
},
|
|
130
130
|
{
|
|
131
|
-
pattern: /^test-
|
|
131
|
+
pattern: /^test-(antigravity|agy)/i,
|
|
132
132
|
script: 'llm-orchestrate.js',
|
|
133
|
-
args: ['
|
|
134
|
-
label: 'test-
|
|
133
|
+
args: ['antigravity', 'orchestrate', 'You are a helpful assistant. Answer the user\'s question clearly and concisely.'],
|
|
134
|
+
label: 'test-antigravity',
|
|
135
135
|
},
|
|
136
136
|
];
|
|
137
137
|
|
package/hooks/scripts/utils.js
CHANGED
|
@@ -274,7 +274,7 @@ const DEFAULT_COST = { input: 0.003, output: 0.010 };
|
|
|
274
274
|
/**
|
|
275
275
|
* LLM 호출 비용을 JSONL로 로깅
|
|
276
276
|
*
|
|
277
|
-
* @param {string} provider - 프로바이더 (gpt,
|
|
277
|
+
* @param {string} provider - 프로바이더 (gpt, antigravity)
|
|
278
278
|
* @param {string} model - 모델명
|
|
279
279
|
* @param {number} inputLen - 입력 문자 수
|
|
280
280
|
* @param {number} outputLen - 출력 문자 수
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: brand-assets
|
|
3
3
|
invocation: [auto]
|
|
4
4
|
tier: standard
|
|
5
|
-
description: "Auto-generate app icons (iOS/Android/PWA), favicons, and OG images from SPEC brand information using
|
|
5
|
+
description: "Auto-generate app icons (iOS/Android/PWA), favicons, and OG images from SPEC brand information using the Antigravity image backend. Use when the project needs visual brand assets, when user mentions 'icon', 'favicon', 'logo', or 'brand assets', or when a SPEC defines brand colors/identity but no assets exist yet. Outputs multiple sizes and formats ready for deployment. Not for complex illustration or marketing graphics — focused on app identity assets."
|
|
6
6
|
triggers: [icon, favicon, brand, logo, app icon, branding, assets]
|
|
7
7
|
priority: 65
|
|
8
8
|
---
|
|
@@ -14,11 +14,11 @@ Auto-generate app icons and favicons based on SPEC brand information.
|
|
|
14
14
|
|
|
15
15
|
- First-time project setup with `/vibe.run`
|
|
16
16
|
- When SPEC contains brand/design information
|
|
17
|
-
- When
|
|
17
|
+
- When Antigravity API key is configured
|
|
18
18
|
|
|
19
19
|
## Prerequisites
|
|
20
20
|
|
|
21
|
-
-
|
|
21
|
+
- Antigravity API key configured (`vibe antigravity key <key>`)
|
|
22
22
|
- SPEC with brand context (app name, colors, style)
|
|
23
23
|
|
|
24
24
|
## Generated Assets
|
|
@@ -61,7 +61,7 @@ Extract: name, colors, style keywords
|
|
|
61
61
|
Generate Prompt: "App icon for [name], [style], [colors]..."
|
|
62
62
|
|
|
|
63
63
|
v
|
|
64
|
-
|
|
64
|
+
Antigravity image backend
|
|
65
65
|
|
|
|
66
66
|
v
|
|
67
67
|
Resize & Convert: All platform sizes
|
|
@@ -74,14 +74,14 @@ Save to: public/ or assets/
|
|
|
74
74
|
|
|
75
75
|
1. First `/vibe.run` execution (no existing icons)
|
|
76
76
|
2. SPEC contains brand/design context
|
|
77
|
-
3.
|
|
77
|
+
3. Antigravity API key is available
|
|
78
78
|
4. `--generate-icons` flag passed
|
|
79
79
|
|
|
80
80
|
## Skip Conditions
|
|
81
81
|
|
|
82
82
|
- Icons already exist (unless `--regenerate-icons`)
|
|
83
83
|
- No brand info in SPEC
|
|
84
|
-
-
|
|
84
|
+
- Antigravity API not configured
|
|
85
85
|
|
|
86
86
|
## Prompt Template
|
|
87
87
|
|
|
@@ -105,8 +105,8 @@ Requirements:
|
|
|
105
105
|
|
|
106
106
|
```bash
|
|
107
107
|
# [LLM_SCRIPT] = {{CORE_PATH}}/hooks/scripts/llm-orchestrate.js
|
|
108
|
-
# Generate via llm-orchestrate (when
|
|
109
|
-
node "[LLM_SCRIPT]"
|
|
108
|
+
# Generate via llm-orchestrate (when Antigravity configured)
|
|
109
|
+
node "[LLM_SCRIPT]" antigravity 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"
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
## Integration with /vibe.run
|
|
@@ -114,14 +114,14 @@ node "[LLM_SCRIPT]" gemini image "App icon for MyApp, primary color #2F6BFF, squ
|
|
|
114
114
|
During Phase 1 (Setup), if brand assets don't exist:
|
|
115
115
|
|
|
116
116
|
1. Parse SPEC for brand context
|
|
117
|
-
2. Generate icon via
|
|
117
|
+
2. Generate icon via Antigravity image backend
|
|
118
118
|
3. Create all size variants
|
|
119
119
|
4. Place in appropriate directories
|
|
120
120
|
5. Update manifest files if needed
|
|
121
121
|
|
|
122
122
|
## Fallback Strategy
|
|
123
123
|
|
|
124
|
-
If
|
|
124
|
+
If Antigravity image generation fails:
|
|
125
125
|
1. Generate text-based monogram icon (first letter)
|
|
126
126
|
2. Use project primary color as background
|
|
127
127
|
3. Create simple geometric placeholder
|
|
@@ -145,4 +145,4 @@ public/
|
|
|
145
145
|
- [ ] Icons work at small sizes (recognizable at 16x16)
|
|
146
146
|
- [ ] No text/letters in icon (illegible at small sizes)
|
|
147
147
|
- [ ] `site.webmanifest` updated with icon paths
|
|
148
|
-
- [ ] Fallback generated if
|
|
148
|
+
- [ ] Fallback generated if Antigravity API unavailable
|
package/skills/docs/SKILL.md
CHANGED
|
@@ -107,8 +107,9 @@ graph TD
|
|
|
107
107
|
|---|---|---|
|
|
108
108
|
| Claude Code | `CLAUDE.md` | 100% (Primary) |
|
|
109
109
|
| Codex | `AGENTS.md` | 100% (Primary) |
|
|
110
|
+
| Antigravity CLI | `GEMINI.md` | 100% |
|
|
110
111
|
|
|
111
|
-
|
|
112
|
+
Cursor is not supported — do not generate or check Cursor-specific context files.
|
|
112
113
|
|
|
113
114
|
**Source of truth:**
|
|
114
115
|
- **`CLAUDE.md` is the content SSOT.** Always edit it first; `AGENTS.md` is a regenerated derivative.
|
|
@@ -116,13 +117,17 @@ Gemini CLI / Cursor are not supported — do not generate or check `GEMINI.md`.
|
|
|
116
117
|
|
|
117
118
|
**Procedure (applies to both creation and modification):**
|
|
118
119
|
|
|
119
|
-
1. **Detect state** — check which of `CLAUDE.md` / `AGENTS.md` exist in project root. **`CLAUDE.md` is always the SSOT**; if missing, create it first (never derive from AGENTS.md).
|
|
120
|
+
1. **Detect state** — check which of `CLAUDE.md` / `AGENTS.md` / `GEMINI.md` exist in project root. **`CLAUDE.md` is always the SSOT**; if missing, create it first (never derive from AGENTS.md).
|
|
120
121
|
2. **For `AGENTS.md`**:
|
|
121
122
|
- **If missing** → create by cloning `CLAUDE.md` + applying CLI substitution (below).
|
|
122
123
|
- **If exists** → regenerate from current `CLAUDE.md` + substitution, preserving user-specific additions outside the VIBE block.
|
|
123
|
-
3. **
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
3. **For `GEMINI.md`**:
|
|
125
|
+
- **If missing** → create by cloning `CLAUDE.md` + applying Antigravity substitution.
|
|
126
|
+
- **If exists** → regenerate from current `CLAUDE.md` + substitution, preserving user-specific additions outside the VIBE block.
|
|
127
|
+
4. **CLI substitution for `AGENTS.md`** (Codex): `Claude Code` → `Codex` · `~/.claude/` → `~/.codex/` · `.claude/` → `.codex/` · `CLAUDE.md` → `AGENTS.md`. `CLAUDE.md` itself gets no substitution.
|
|
128
|
+
5. **CLI substitution for `GEMINI.md`** (Antigravity): `Claude Code` → `Antigravity CLI` · `~/.claude/` → `~/.gemini/` · `.claude/` → `.gemini/` · `CLAUDE.md` → `GEMINI.md`.
|
|
129
|
+
6. **Validate every touched file (whether newly created or modified)** via the `claude-md-guide` → `agents-md` skill chain — see validation block below. **Never write or save without running this step.**
|
|
130
|
+
7. Report per file: created / updated / skipped / validation warnings.
|
|
126
131
|
|
|
127
132
|
**Idempotent:** Re-running re-syncs the behavioral block and re-applies substitutions without duplication.
|
|
128
133
|
|
|
@@ -159,7 +159,7 @@ This session's topic: {topic}
|
|
|
159
159
|
|---------|----------|
|
|
160
160
|
| Aligo API timeout/error | Retry once after 5s. If still failing, output the SMS text as plain text for manual sending |
|
|
161
161
|
| Aligo auth error | Prompt user to verify API key in `~/.vibe/config.json` |
|
|
162
|
-
| Gmail auth expired | Prompt user to
|
|
162
|
+
| Gmail auth expired | Prompt user to refresh the Gmail OAuth token |
|
|
163
163
|
| Gmail quota exceeded | Save email as `.eml` file for manual sending later |
|
|
164
164
|
| SNS post generation fails | Output post text as markdown for manual copy-paste |
|
|
165
165
|
|
|
@@ -138,7 +138,7 @@ API is read-only → Claude outputs plan → user manually configures.
|
|
|
138
138
|
## Image Generation
|
|
139
139
|
|
|
140
140
|
### Model
|
|
141
|
-
|
|
141
|
+
Antigravity image backend
|
|
142
142
|
|
|
143
143
|
### Specs by Community
|
|
144
144
|
|
|
@@ -162,7 +162,7 @@ Gemini (`gemini-3-pro-image-preview`)
|
|
|
162
162
|
|
|
163
163
|
### Smart Resizing
|
|
164
164
|
- Same ratio → Pillow scale only (no API call)
|
|
165
|
-
- Different ratio →
|
|
165
|
+
- Different ratio → Antigravity re-generate (pass original as reference, no white margins)
|
|
166
166
|
|
|
167
167
|
## Settlement
|
|
168
168
|
|
|
@@ -202,7 +202,7 @@ Free — no settlement needed
|
|
|
202
202
|
|
|
203
203
|
| Failure | Recovery |
|
|
204
204
|
|---------|----------|
|
|
205
|
-
|
|
|
206
|
-
|
|
|
205
|
+
| Antigravity image API unavailable | Skip image generation, use text-only placeholder slide with community colors |
|
|
206
|
+
| Antigravity image quality too low | Retry with simplified prompt (remove detail, keep core subject) |
|
|
207
207
|
| PPTX generation error | Output slide content as markdown with speaker notes for manual assembly |
|
|
208
208
|
| Nametag HTML render issue | Simplify to basic table layout, remove custom fonts |
|
package/skills/spec/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spec
|
|
3
|
-
description: PTCF 구조 SPEC 한 문서 작성 — parallel research (GPT/
|
|
3
|
+
description: PTCF 구조 SPEC 한 문서 작성 — parallel research (GPT/Antigravity/Claude agents), ambiguity scan, 100-point quality gate. plan 파일 입력 → .vibe/specs/{feature}.md + .vibe/features/{feature}.feature 생성.
|
|
4
4
|
when_to_use: vibe.spec orchestrator의 Phase 3에서 호출. 직접 호출 금지 — /vibe.spec 사용.
|
|
5
5
|
user-invocable: false
|
|
6
6
|
tier: core
|
|
@@ -100,21 +100,21 @@ User: 1 hour, disallow, confirm
|
|
|
100
100
|
|
|
101
101
|
When image files (`.png`, `.jpg`, `.jpeg`, `.webp`) are provided as input, analyze them using the best available method:
|
|
102
102
|
|
|
103
|
-
- **
|
|
104
|
-
- **
|
|
103
|
+
- **Antigravity Enabled**: `llm-orchestrate.js antigravity analyze-image` (Antigravity Flash - best image recognition)
|
|
104
|
+
- **Antigravity Disabled**: Claude Opus Read tool (built-in multimodal, existing behavior)
|
|
105
105
|
|
|
106
|
-
**
|
|
106
|
+
**Antigravity enabled - analyze via llm-orchestrate.js:**
|
|
107
107
|
|
|
108
108
|
```bash
|
|
109
109
|
# [LLM_SCRIPT] = {{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js
|
|
110
|
-
node "[LLM_SCRIPT]"
|
|
110
|
+
node "[LLM_SCRIPT]" antigravity 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."
|
|
111
111
|
```
|
|
112
112
|
|
|
113
113
|
Parse the JSON result: `{ success: true, analysis: "..." }` → use `analysis` field content.
|
|
114
114
|
|
|
115
115
|
If `success: false`, fall back to Claude Read tool.
|
|
116
116
|
|
|
117
|
-
**
|
|
117
|
+
**Antigravity disabled - analyze via Claude Read tool:**
|
|
118
118
|
|
|
119
119
|
Use the Read tool directly on the image file. Claude can read images natively.
|
|
120
120
|
|
|
@@ -123,7 +123,7 @@ Use the Read tool directly on the image file. Claude can read images natively.
|
|
|
123
123
|
/vibe.spec "designs/login-wireframe.png"
|
|
124
124
|
|
|
125
125
|
🖼️ Image analysis: designs/login-wireframe.png
|
|
126
|
-
(via
|
|
126
|
+
(via Antigravity Flash / Claude Opus)
|
|
127
127
|
|
|
128
128
|
📋 Detected UI elements:
|
|
129
129
|
- Email input field
|
|
@@ -150,20 +150,20 @@ Use the Read tool directly on the image file. Claude can read images natively.
|
|
|
150
150
|
|
|
151
151
|
Collect requirements through conversation with the user and create an **AI-executable PTCF structured SPEC document**.
|
|
152
152
|
|
|
153
|
-
> **PTCF**: Persona, Task, Context, Format - Google
|
|
153
|
+
> **PTCF**: Persona, Task, Context, Format - Google Antigravity prompt optimization framework
|
|
154
154
|
|
|
155
|
-
## External LLM Integration (GPT/
|
|
155
|
+
## External LLM Integration (GPT/Antigravity)
|
|
156
156
|
|
|
157
|
-
When GPT/
|
|
157
|
+
When GPT/Antigravity are enabled, they are automatically utilized during SPEC creation:
|
|
158
158
|
|
|
159
159
|
```
|
|
160
160
|
/vibe.spec "feature"
|
|
161
161
|
↓
|
|
162
162
|
[Claude] Draft SPEC
|
|
163
163
|
↓
|
|
164
|
-
[Parallel Research] GPT +
|
|
164
|
+
[Parallel Research] GPT + Antigravity + Claude agents (8 parallel)
|
|
165
165
|
↓
|
|
166
|
-
[SPEC Review] GPT +
|
|
166
|
+
[SPEC Review] GPT + Antigravity parallel review
|
|
167
167
|
↓
|
|
168
168
|
[Claude] Finalize SPEC
|
|
169
169
|
```
|
|
@@ -171,7 +171,7 @@ When GPT/Gemini are enabled, they are automatically utilized during SPEC creatio
|
|
|
171
171
|
**Setup:**
|
|
172
172
|
```bash
|
|
173
173
|
vibe gpt key <key> # Enable GPT
|
|
174
|
-
vibe
|
|
174
|
+
vibe antigravity key <key> # Enable Antigravity
|
|
175
175
|
vibe status # Check current settings
|
|
176
176
|
```
|
|
177
177
|
|
|
@@ -408,7 +408,7 @@ ls .vibe/research/<slug>/paper.md 2>/dev/null
|
|
|
408
408
|
1. Read `.vibe/research/<slug>/paper.md`
|
|
409
409
|
2. Read `.vibe/research/<slug>/awesome-list.md` (if present)
|
|
410
410
|
3. Inject the **Findings**, **Recommendation**, and **Security considerations** sections verbatim into SPEC Context, prefixed with `> Source: .vibe/research/<slug>/paper.md (cached {{FILE_MTIME}})`
|
|
411
|
-
4. **Skip step 3** (parallel research) entirely — do not re-run GPT/
|
|
411
|
+
4. **Skip step 3** (parallel research) entirely — do not re-run GPT/Antigravity/Claude agents
|
|
412
412
|
5. Print: `✅ Research cache hit: <slug> (saved ~30s of LLM calls)`
|
|
413
413
|
|
|
414
414
|
**Cache invalidation:**
|
|
@@ -457,11 +457,11 @@ node "[LLM_SCRIPT]" gpt-codex orchestrate-json "Best practices for [FEATURE] wit
|
|
|
457
457
|
# 2. GPT: Security (codex — code review & analysis)
|
|
458
458
|
node "[LLM_SCRIPT]" gpt-codex orchestrate-json "Security vulnerabilities for [FEATURE] with [STACK]. Focus: CVE database, known exploits. Return JSON: {vulnerabilities: [], mitigations: [], checklist: []}"
|
|
459
459
|
|
|
460
|
-
# 3.
|
|
461
|
-
node "[LLM_SCRIPT]"
|
|
460
|
+
# 3. Antigravity: Best practices
|
|
461
|
+
node "[LLM_SCRIPT]" antigravity orchestrate-json "Best practices for [FEATURE] with [STACK]. Focus: latest trends, framework updates. Return JSON: {patterns: [], antiPatterns: [], libraries: []}"
|
|
462
462
|
|
|
463
|
-
# 4.
|
|
464
|
-
node "[LLM_SCRIPT]"
|
|
463
|
+
# 4. Antigravity: Security
|
|
464
|
+
node "[LLM_SCRIPT]" antigravity orchestrate-json "Security advisories for [FEATURE] with [STACK]. Focus: latest patches, recent incidents. Return JSON: {advisories: [], patches: [], incidents: []}"
|
|
465
465
|
```
|
|
466
466
|
|
|
467
467
|
**Concrete example - run all 4 in parallel:**
|
|
@@ -472,11 +472,11 @@ node "[LLM_SCRIPT]" gpt-codex orchestrate-json "Best practices for passkey authe
|
|
|
472
472
|
# GPT security (codex — code review & analysis)
|
|
473
473
|
node "[LLM_SCRIPT]" gpt-codex orchestrate-json "Security vulnerabilities for passkey authentication with React, Supabase. Focus: CVE database, known exploits. Return JSON: {vulnerabilities: [], mitigations: [], checklist: []}"
|
|
474
474
|
|
|
475
|
-
#
|
|
476
|
-
node "[LLM_SCRIPT]"
|
|
475
|
+
# Antigravity best practices
|
|
476
|
+
node "[LLM_SCRIPT]" antigravity orchestrate-json "Best practices for passkey authentication with React, Supabase. Focus: latest trends, framework updates. Return JSON: {patterns: [], antiPatterns: [], libraries: []}"
|
|
477
477
|
|
|
478
|
-
#
|
|
479
|
-
node "[LLM_SCRIPT]"
|
|
478
|
+
# Antigravity security
|
|
479
|
+
node "[LLM_SCRIPT]" antigravity orchestrate-json "Security advisories for passkey authentication with React, Supabase. Focus: latest patches, recent incidents. Return JSON: {advisories: [], patches: [], incidents: []}"
|
|
480
480
|
```
|
|
481
481
|
|
|
482
482
|
**ALSO run Claude research agents in parallel using Task tool:**
|
|
@@ -488,9 +488,9 @@ node "[LLM_SCRIPT]" gemini orchestrate-json "Security advisories for passkey aut
|
|
|
488
488
|
| `codebase-patterns` | Similar patterns in existing codebase | Glob, Grep |
|
|
489
489
|
| `security-advisory` | Security advisories for [feature] | WebSearch |
|
|
490
490
|
|
|
491
|
-
**Total: 4 GPT/
|
|
491
|
+
**Total: 4 GPT/Antigravity calls (Bash) + 4 Claude agents (Task) = 8 parallel research tasks**
|
|
492
492
|
|
|
493
|
-
**🚨 GPT/
|
|
493
|
+
**🚨 GPT/Antigravity MUST be called via Bash with llm-orchestrate.js! 🚨**
|
|
494
494
|
|
|
495
495
|
#### 3.0.1 Agent Teams — Research Collaboration
|
|
496
496
|
|
|
@@ -511,7 +511,7 @@ node "[LLM_SCRIPT]" gemini orchestrate-json "Security advisories for passkey aut
|
|
|
511
511
|
- ❌ DO NOT skip research step
|
|
512
512
|
- ❌ DO NOT ask user "should I run research?"
|
|
513
513
|
- ✅ ALWAYS run after requirements confirmed
|
|
514
|
-
- ✅ Show "Running parallel research (Claude + GPT +
|
|
514
|
+
- ✅ Show "Running parallel research (Claude + GPT + Antigravity)..." message
|
|
515
515
|
- ✅ Include all agent + LLM results in SPEC Context
|
|
516
516
|
- ✅ Run all 4 Bash LLM calls in parallel + 4 Task agents in parallel
|
|
517
517
|
|
|
@@ -525,7 +525,7 @@ node "[LLM_SCRIPT]" gemini orchestrate-json "Security advisories for passkey aut
|
|
|
525
525
|
**When UI/UX keywords are detected, run 3 agents sequentially in parallel with research:**
|
|
526
526
|
|
|
527
527
|
```
|
|
528
|
-
[Parallel Research] GPT +
|
|
528
|
+
[Parallel Research] GPT + Antigravity + Claude agents
|
|
529
529
|
↓ (concurrent execution)
|
|
530
530
|
[UI/UX Intelligence]
|
|
531
531
|
① ui-industry-analyzer (Haiku) → industry analysis + design strategy
|
|
@@ -970,7 +970,7 @@ If score is below 100, attempt automatic fixes:
|
|
|
970
970
|
|
|
971
971
|
### 8. SPEC Draft Complete - Handoff to Review
|
|
972
972
|
|
|
973
|
-
**🚨 IMPORTANT: GPT/
|
|
973
|
+
**🚨 IMPORTANT: GPT/Antigravity review is now a SEPARATE command**
|
|
974
974
|
|
|
975
975
|
After SPEC draft is complete (score ≥ 95):
|
|
976
976
|
|
|
@@ -1129,11 +1129,11 @@ Claude: Thank you. SPEC has been refined.
|
|
|
1129
1129
|
📊 Quality score: 92/100 (A)
|
|
1130
1130
|
|
|
1131
1131
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1132
|
-
🔍 SPEC REVIEW (
|
|
1132
|
+
🔍 SPEC REVIEW (Antigravity)
|
|
1133
1133
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1134
1134
|
|
|
1135
1135
|
📤 Sending SPEC...
|
|
1136
|
-
📝
|
|
1136
|
+
📝 Antigravity feedback:
|
|
1137
1137
|
1. [Edge] Ball speed increase logic undefined
|
|
1138
1138
|
2. [Security] Need score manipulation prevention
|
|
1139
1139
|
|