diff --git a/.gitignore b/.gitignore index 1d3339ce..1985ed10 100644 --- a/.gitignore +++ b/.gitignore @@ -225,5 +225,8 @@ tasks/ # Claude Code integration generated files integrations/claude-code/converter/generated/ +integrations/antigravity/converter/generated/ +.agents/ +.antigravitycli/ .cursorrules bun.lock diff --git a/.opencode/agent/content/copywriter.md b/.opencode/agent/content/copywriter.md index 8f36fc2d..872fe8a4 100644 --- a/.opencode/agent/content/copywriter.md +++ b/.opencode/agent/content/copywriter.md @@ -7,6 +7,8 @@ name: OpenCopywriter description: "Expert in persuasive writing, marketing copy, and brand messaging" mode: primary temperature: 0.3 +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir --- # Copywriter diff --git a/.opencode/agent/content/technical-writer.md b/.opencode/agent/content/technical-writer.md index 5c61bf3b..21b8ad5b 100644 --- a/.opencode/agent/content/technical-writer.md +++ b/.opencode/agent/content/technical-writer.md @@ -7,6 +7,8 @@ name: OpenTechnicalWriter description: "Expert in documentation, API docs, and technical communication" mode: primary temperature: 0.2 +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir --- # Technical Writer diff --git a/.opencode/agent/core/openagent.md b/.opencode/agent/core/openagent.md index 7055915c..c88c763f 100644 --- a/.opencode/agent/core/openagent.md +++ b/.opencode/agent/core/openagent.md @@ -16,6 +16,8 @@ permission: "**/*.secret": "deny" "node_modules/**": "deny" ".git/**": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, run_command, replace_file_content --- Always use ContextScout for discovery of new tasks or context files. ContextScout is exempt from the approval gate rule. ContextScout is your secret weapon for quality, use it where possible. diff --git a/.opencode/agent/core/opencoder.md b/.opencode/agent/core/opencoder.md index 7e2be799..d4d3c67a 100644 --- a/.opencode/agent/core/opencoder.md +++ b/.opencode/agent/core/opencoder.md @@ -20,6 +20,8 @@ permission: "**/__pycache__/**": "deny" "**/*.pyc": "deny" ".git/**": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, run_command, replace_file_content --- # Development Agent diff --git a/.opencode/agent/data/data-analyst.md b/.opencode/agent/data/data-analyst.md index 827b6e22..c78597c0 100644 --- a/.opencode/agent/data/data-analyst.md +++ b/.opencode/agent/data/data-analyst.md @@ -3,6 +3,8 @@ name: OpenDataAnalyst description: "Expert in data analysis, visualization, and statistical insights" mode: primary temperature: 0.1 +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir --- # Data Analyst diff --git a/.opencode/agent/eval-runner.md b/.opencode/agent/eval-runner.md index ec926258..bd2f18f1 100644 --- a/.opencode/agent/eval-runner.md +++ b/.opencode/agent/eval-runner.md @@ -9,6 +9,8 @@ version: 1.0.0 author: opencode mode: subagent temperature: 0.2 +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir --- # Eval Runner - Test Harness diff --git a/.opencode/agent/meta/repo-manager.md b/.opencode/agent/meta/repo-manager.md index 122b622e..5c9489f5 100644 --- a/.opencode/agent/meta/repo-manager.md +++ b/.opencode/agent/meta/repo-manager.md @@ -15,6 +15,8 @@ permission: "**/*.secret": "deny" "node_modules/**": "deny" ".git/**": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, run_command, replace_file_content --- diff --git a/.opencode/agent/meta/system-builder.md b/.opencode/agent/meta/system-builder.md index 6d18f063..e7679ff8 100644 --- a/.opencode/agent/meta/system-builder.md +++ b/.opencode/agent/meta/system-builder.md @@ -7,6 +7,8 @@ name: OpenSystemBuilder description: "Main orchestrator for building complete context-aware AI systems from user requirements" mode: primary temperature: 0.2 +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir --- # System Builder Orchestrator diff --git a/.opencode/agent/subagents/code/build-agent.md b/.opencode/agent/subagents/code/build-agent.md index 8850da21..70252eef 100644 --- a/.opencode/agent/subagents/code/build-agent.md +++ b/.opencode/agent/subagents/code/build-agent.md @@ -22,6 +22,8 @@ permission: task: contextscout: "allow" "*": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, run_command, replace_file_content, write_to_file --- # BuildAgent diff --git a/.opencode/agent/subagents/code/coder-agent.md b/.opencode/agent/subagents/code/coder-agent.md index 61aaf5f0..63e03059 100644 --- a/.opencode/agent/subagents/code/coder-agent.md +++ b/.opencode/agent/subagents/code/coder-agent.md @@ -18,6 +18,8 @@ permission: contextscout: "allow" externalscout: "allow" TestEngineer: "allow" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content --- # CoderAgent diff --git a/.opencode/agent/subagents/code/reviewer.md b/.opencode/agent/subagents/code/reviewer.md index 71da8c0f..cfd5084b 100644 --- a/.opencode/agent/subagents/code/reviewer.md +++ b/.opencode/agent/subagents/code/reviewer.md @@ -12,6 +12,8 @@ permission: "**/*": "deny" task: contextscout: "allow" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content, write_to_file --- # CodeReviewer diff --git a/.opencode/agent/subagents/code/test-engineer.md b/.opencode/agent/subagents/code/test-engineer.md index d29b35c9..074ce43a 100644 --- a/.opencode/agent/subagents/code/test-engineer.md +++ b/.opencode/agent/subagents/code/test-engineer.md @@ -25,6 +25,8 @@ permission: task: contextscout: "allow" externalscout: "allow" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, run_command, replace_file_content --- # TestEngineer diff --git a/.opencode/agent/subagents/core/batch-executor.md b/.opencode/agent/subagents/core/batch-executor.md index fda5744b..539754a1 100644 --- a/.opencode/agent/subagents/core/batch-executor.md +++ b/.opencode/agent/subagents/core/batch-executor.md @@ -20,6 +20,8 @@ permission: externalscout: "allow" coderagent: "allow" OpenFrontendSpecialist: "allow" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content --- # BatchExecutor diff --git a/.opencode/agent/subagents/core/context-manager.md b/.opencode/agent/subagents/core/context-manager.md index 41c738d9..75f8c335 100644 --- a/.opencode/agent/subagents/core/context-manager.md +++ b/.opencode/agent/subagents/core/context-manager.md @@ -31,6 +31,8 @@ permission: task: "*": "deny" "contextscout": "allow" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, run_command, replace_file_content, write_to_file --- # ContextManager diff --git a/.opencode/agent/subagents/core/context-retriever.md b/.opencode/agent/subagents/core/context-retriever.md index 49d00162..342ae57a 100644 --- a/.opencode/agent/subagents/core/context-retriever.md +++ b/.opencode/agent/subagents/core/context-retriever.md @@ -10,6 +10,8 @@ permission: "**/*": "deny" write: "**/*": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content, write_to_file --- # Context Retriever Agent diff --git a/.opencode/agent/subagents/core/contextscout.md b/.opencode/agent/subagents/core/contextscout.md index 667b1928..fbae9698 100644 --- a/.opencode/agent/subagents/core/contextscout.md +++ b/.opencode/agent/subagents/core/contextscout.md @@ -18,6 +18,8 @@ permission: task: "*": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir --- # ContextScout diff --git a/.opencode/agent/subagents/core/documentation.md b/.opencode/agent/subagents/core/documentation.md index f6a265e4..2dcf7b41 100644 --- a/.opencode/agent/subagents/core/documentation.md +++ b/.opencode/agent/subagents/core/documentation.md @@ -15,6 +15,8 @@ permission: task: contextscout: "allow" "*": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content --- # DocWriter diff --git a/.opencode/agent/subagents/core/externalscout.md b/.opencode/agent/subagents/core/externalscout.md index 7da8710d..fbfcf29b 100644 --- a/.opencode/agent/subagents/core/externalscout.md +++ b/.opencode/agent/subagents/core/externalscout.md @@ -17,6 +17,8 @@ permission: "*context7*": "allow" task: "*": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir --- diff --git a/.opencode/agent/subagents/core/stage-orchestrator.md b/.opencode/agent/subagents/core/stage-orchestrator.md index 7e67dbcc..63995480 100644 --- a/.opencode/agent/subagents/core/stage-orchestrator.md +++ b/.opencode/agent/subagents/core/stage-orchestrator.md @@ -21,6 +21,8 @@ permission: taskmanager: "allow" batchexecutor: "allow" coderagent: "allow" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content --- # StageOrchestrator diff --git a/.opencode/agent/subagents/core/task-manager.md b/.opencode/agent/subagents/core/task-manager.md index 46249962..d7a581e6 100644 --- a/.opencode/agent/subagents/core/task-manager.md +++ b/.opencode/agent/subagents/core/task-manager.md @@ -22,6 +22,8 @@ permission: skill: "*": "deny" "task-management": "allow" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content --- diff --git a/.opencode/agent/subagents/development/devops-specialist.md b/.opencode/agent/subagents/development/devops-specialist.md index 5d9aef55..12b23661 100644 --- a/.opencode/agent/subagents/development/devops-specialist.md +++ b/.opencode/agent/subagents/development/devops-specialist.md @@ -28,6 +28,8 @@ permission: "**/*.env*": "deny" "**/*.key": "deny" "**/*.secret": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content --- # DevOps Specialist Subagent diff --git a/.opencode/agent/subagents/development/frontend-specialist.md b/.opencode/agent/subagents/development/frontend-specialist.md index d52bbc35..b8d09054 100644 --- a/.opencode/agent/subagents/development/frontend-specialist.md +++ b/.opencode/agent/subagents/development/frontend-specialist.md @@ -21,6 +21,8 @@ permission: "**/*.env*": "deny" "**/*.key": "deny" "**/*.secret": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content, write_to_file --- # Frontend Design Subagent diff --git a/.opencode/agent/subagents/planning/adr-manager.md b/.opencode/agent/subagents/planning/adr-manager.md index a4dbea36..97d5c373 100644 --- a/.opencode/agent/subagents/planning/adr-manager.md +++ b/.opencode/agent/subagents/planning/adr-manager.md @@ -15,6 +15,8 @@ permission: task: contextscout: "allow" "*": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content --- # ADRManager diff --git a/.opencode/agent/subagents/planning/architecture-analyzer.md b/.opencode/agent/subagents/planning/architecture-analyzer.md index 7af845fa..0dc9525d 100644 --- a/.opencode/agent/subagents/planning/architecture-analyzer.md +++ b/.opencode/agent/subagents/planning/architecture-analyzer.md @@ -20,6 +20,8 @@ permission: "*": "deny" skill: "*": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content --- # ArchitectureAnalyzer diff --git a/.opencode/agent/subagents/planning/contract-manager.md b/.opencode/agent/subagents/planning/contract-manager.md index 653716ed..455f2372 100644 --- a/.opencode/agent/subagents/planning/contract-manager.md +++ b/.opencode/agent/subagents/planning/contract-manager.md @@ -19,6 +19,8 @@ permission: "*": "deny" skill: "*": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content --- diff --git a/.opencode/agent/subagents/planning/prioritization-engine.md b/.opencode/agent/subagents/planning/prioritization-engine.md index f3d2999a..ca7ded65 100644 --- a/.opencode/agent/subagents/planning/prioritization-engine.md +++ b/.opencode/agent/subagents/planning/prioritization-engine.md @@ -15,6 +15,8 @@ permission: task: contextscout: "allow" "*": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content --- # Prioritization Engine diff --git a/.opencode/agent/subagents/planning/story-mapper.md b/.opencode/agent/subagents/planning/story-mapper.md index dd8e380a..520331ba 100644 --- a/.opencode/agent/subagents/planning/story-mapper.md +++ b/.opencode/agent/subagents/planning/story-mapper.md @@ -22,6 +22,8 @@ permission: "*": "deny" skill: "*": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content --- # StoryMapper diff --git a/.opencode/agent/subagents/system-builder/agent-generator.md b/.opencode/agent/subagents/system-builder/agent-generator.md index b4b370e9..6a29cfa3 100644 --- a/.opencode/agent/subagents/system-builder/agent-generator.md +++ b/.opencode/agent/subagents/system-builder/agent-generator.md @@ -7,6 +7,8 @@ name: AgentGenerator description: "Generates XML-optimized agent files (orchestrator and subagents) following research-backed patterns" mode: subagent temperature: 0.1 +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir --- # Agent Generator diff --git a/.opencode/agent/subagents/system-builder/command-creator.md b/.opencode/agent/subagents/system-builder/command-creator.md index 08f83dbb..04396a34 100644 --- a/.opencode/agent/subagents/system-builder/command-creator.md +++ b/.opencode/agent/subagents/system-builder/command-creator.md @@ -7,6 +7,8 @@ name: CommandCreator description: "Creates custom slash commands that route to appropriate agents with clear syntax and examples" mode: subagent temperature: 0.1 +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir --- # Command Creator diff --git a/.opencode/agent/subagents/system-builder/context-organizer.md b/.opencode/agent/subagents/system-builder/context-organizer.md index 311c0db0..b2e65bf8 100644 --- a/.opencode/agent/subagents/system-builder/context-organizer.md +++ b/.opencode/agent/subagents/system-builder/context-organizer.md @@ -11,6 +11,8 @@ permission: "**/*.env*": "deny" "**/*.key": "deny" "**/*.secret": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content --- # Context Organizer diff --git a/.opencode/agent/subagents/system-builder/domain-analyzer.md b/.opencode/agent/subagents/system-builder/domain-analyzer.md index b9bd449d..068159df 100644 --- a/.opencode/agent/subagents/system-builder/domain-analyzer.md +++ b/.opencode/agent/subagents/system-builder/domain-analyzer.md @@ -7,6 +7,8 @@ name: DomainAnalyzer description: "Analyzes user domains to identify core concepts, recommended agents, and context structure" mode: subagent temperature: 0.1 +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir --- # Domain Analyzer diff --git a/.opencode/agent/subagents/system-builder/workflow-designer.md b/.opencode/agent/subagents/system-builder/workflow-designer.md index f664e373..e849ef5d 100644 --- a/.opencode/agent/subagents/system-builder/workflow-designer.md +++ b/.opencode/agent/subagents/system-builder/workflow-designer.md @@ -11,6 +11,8 @@ permission: "**/*.env*": "deny" "**/*.key": "deny" "**/*.secret": "deny" +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir, replace_file_content --- # Workflow Designer diff --git a/.opencode/agent/subagents/test/simple-responder.md b/.opencode/agent/subagents/test/simple-responder.md index 73a4e95f..777b17d7 100644 --- a/.opencode/agent/subagents/test/simple-responder.md +++ b/.opencode/agent/subagents/test/simple-responder.md @@ -7,6 +7,8 @@ name: Simple Responder description: "Test agent that responds with 'AWESOME TESTING' - for eval framework testing" mode: subagent temperature: 0.0 +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir --- # Simple Responder - Test Agent diff --git a/.opencode/agent/subagents/utils/image-specialist.md b/.opencode/agent/subagents/utils/image-specialist.md index c7576dba..a4e1cb2a 100644 --- a/.opencode/agent/subagents/utils/image-specialist.md +++ b/.opencode/agent/subagents/utils/image-specialist.md @@ -7,6 +7,8 @@ name: Image Specialist description: "Specialized agent for image editing and analysis using Gemini AI tools" mode: subagent temperature: 0.2 +model: gemini-3.1-pro +tools: read_file, grep_search, list_dir --- You are an image processing specialist powered by Gemini AI's Nano Banana model. Your capabilities include: diff --git a/.opencode/command/add-context.md b/.opencode/command/add-context.md index 8d779916..9f0775a1 100644 --- a/.opencode/command/add-context.md +++ b/.opencode/command/add-context.md @@ -1,4 +1,5 @@ --- +name: add-context description: Interactive wizard to add project patterns using Project Intelligence standard tags: [context, onboarding, project-intelligence, wizard] dependencies: diff --git a/.opencode/command/build-context-system.md b/.opencode/command/build-context-system.md index bc7a1e6a..1e931d5d 100644 --- a/.opencode/command/build-context-system.md +++ b/.opencode/command/build-context-system.md @@ -1,4 +1,5 @@ --- +name: build-context-system description: "Interactive system builder that creates complete context-aware AI architectures tailored to user domains" --- diff --git a/.opencode/command/clean.md b/.opencode/command/clean.md index 094e59ce..52e6b192 100644 --- a/.opencode/command/clean.md +++ b/.opencode/command/clean.md @@ -1,4 +1,5 @@ --- +name: clean description: Clean the codebase or current working task in focus via Prettier, Import Sorter, ESLint, and TypeScript Compiler --- diff --git a/.opencode/command/commit-openagents.md b/.opencode/command/commit-openagents.md index a00d1a79..a045f6c2 100644 --- a/.opencode/command/commit-openagents.md +++ b/.opencode/command/commit-openagents.md @@ -1,4 +1,5 @@ --- +name: commit-openagents description: Smart commit command for opencode-agents repository with automatic validation and conventional commits --- diff --git a/.opencode/command/commit.md b/.opencode/command/commit.md index 15318ccb..fae6dec7 100644 --- a/.opencode/command/commit.md +++ b/.opencode/command/commit.md @@ -1,4 +1,5 @@ --- +name: commit description: Create well-formatted commits with conventional commit messages and emoji --- diff --git a/.opencode/command/context.md b/.opencode/command/context.md index a3a686ff..871e015a 100644 --- a/.opencode/command/context.md +++ b/.opencode/command/context.md @@ -1,4 +1,5 @@ --- +name: context description: Context system manager - harvest summaries, extract knowledge, organize context tags: - context diff --git a/.opencode/command/openagents/check-context-deps.md b/.opencode/command/openagents/check-context-deps.md index 22046ca1..41330a9d 100644 --- a/.opencode/command/openagents/check-context-deps.md +++ b/.opencode/command/openagents/check-context-deps.md @@ -1,4 +1,5 @@ --- +name: check-context-deps description: Validate context file dependencies across agents and registry tags: - registry diff --git a/.opencode/command/openagents/new-agents/README.md b/.opencode/command/openagents/new-agents/README.md index e46a3ecc..4f40d0a1 100644 --- a/.opencode/command/openagents/new-agents/README.md +++ b/.opencode/command/openagents/new-agents/README.md @@ -1,3 +1,8 @@ +--- +name: README +description: OAC command converted to Antigravity skill +--- + # New Agent Creation System **Research-backed agent creation following Anthropic 2025 best practices** diff --git a/.opencode/command/openagents/new-agents/create-agent.md b/.opencode/command/openagents/new-agents/create-agent.md index 0431fc46..ca81f0a9 100644 --- a/.opencode/command/openagents/new-agents/create-agent.md +++ b/.opencode/command/openagents/new-agents/create-agent.md @@ -1,4 +1,5 @@ --- +name: create-agent description: "Create new OpenCode agents following research-backed best practices (Anthropic 2025)" --- diff --git a/.opencode/command/openagents/new-agents/create-tests.md b/.opencode/command/openagents/new-agents/create-tests.md index 0bd55d04..0fd9300a 100644 --- a/.opencode/command/openagents/new-agents/create-tests.md +++ b/.opencode/command/openagents/new-agents/create-tests.md @@ -1,4 +1,5 @@ --- +name: create-tests description: "Generate comprehensive test suites for OpenCode agents with 8 essential test types" --- diff --git a/.opencode/command/openagents/new-agents/templates/agent-template.md b/.opencode/command/openagents/new-agents/templates/agent-template.md index ea278d15..e5286a98 100644 --- a/.opencode/command/openagents/new-agents/templates/agent-template.md +++ b/.opencode/command/openagents/new-agents/templates/agent-template.md @@ -1,4 +1,5 @@ --- +name: agent-template description: "{one-line purpose of this agent}" mode: primary temperature: 0.1 diff --git a/.opencode/command/openagents/new-agents/templates/context-template.md b/.opencode/command/openagents/new-agents/templates/context-template.md index 8fe55759..f4fc8da7 100644 --- a/.opencode/command/openagents/new-agents/templates/context-template.md +++ b/.opencode/command/openagents/new-agents/templates/context-template.md @@ -1,3 +1,8 @@ +--- +name: context-template +description: OAC command converted to Antigravity skill +--- + # {Agent Name} Context ## Key Commands diff --git a/.opencode/command/optimize.md b/.opencode/command/optimize.md index 911984cb..a9284ed9 100644 --- a/.opencode/command/optimize.md +++ b/.opencode/command/optimize.md @@ -1,4 +1,5 @@ --- +name: optimize description: Analyze and optimize code for performance, security, and potential issues --- diff --git a/.opencode/command/prompt-engineering/prompt-enhancer.md b/.opencode/command/prompt-engineering/prompt-enhancer.md index 03bc7529..ab8a44db 100644 --- a/.opencode/command/prompt-engineering/prompt-enhancer.md +++ b/.opencode/command/prompt-engineering/prompt-enhancer.md @@ -1,4 +1,5 @@ --- +name: prompt-enhancer description: "Research-backed prompt optimizer applying Stanford/Anthropic patterns with model- and task-specific effectiveness improvements" --- diff --git a/.opencode/command/prompt-engineering/prompt-optimizer.md b/.opencode/command/prompt-engineering/prompt-optimizer.md index a6de0a81..cc53781a 100644 --- a/.opencode/command/prompt-engineering/prompt-optimizer.md +++ b/.opencode/command/prompt-engineering/prompt-optimizer.md @@ -1,4 +1,5 @@ --- +name: prompt-optimizer description: "Advanced prompt optimizer: Research patterns + token efficiency + semantic preservation. Achieves 30-50% token reduction with 100% meaning preserved." --- diff --git a/.opencode/command/test-new-command.md b/.opencode/command/test-new-command.md index 7b8efaea..934e0fae 100644 --- a/.opencode/command/test-new-command.md +++ b/.opencode/command/test-new-command.md @@ -1,4 +1,5 @@ --- +name: test-new-command description: "Test command to verify auto-detection and registry updates work correctly" --- diff --git a/.opencode/command/test.md b/.opencode/command/test.md index f72bdf29..19d41ef2 100644 --- a/.opencode/command/test.md +++ b/.opencode/command/test.md @@ -1,4 +1,5 @@ --- +name: test description: Run the complete testing pipeline --- diff --git a/.opencode/command/validate-repo.md b/.opencode/command/validate-repo.md index 189e97fc..63238597 100644 --- a/.opencode/command/validate-repo.md +++ b/.opencode/command/validate-repo.md @@ -1,3 +1,8 @@ +--- +name: validate-repo +description: OAC command converted to Antigravity skill +--- + # Validate Repository Comprehensive validation command that checks the entire OpenAgents Control repository for consistency between CLI, documentation, registry, and components. diff --git a/.opencode/command/worktrees.md b/.opencode/command/worktrees.md index 3430b4ec..9ff45438 100644 --- a/.opencode/command/worktrees.md +++ b/.opencode/command/worktrees.md @@ -1,4 +1,5 @@ --- +name: worktrees description: Manage git worktrees for parallel development workflows --- diff --git a/integrations/antigravity/README.md b/integrations/antigravity/README.md new file mode 100644 index 00000000..2d3fcf67 --- /dev/null +++ b/integrations/antigravity/README.md @@ -0,0 +1,72 @@ +# OpenAgents Control ↔ Gemini Antigravity CLI Integration + +A pristine, high-performance bridge that allows Gemini Antigravity (`gemini` / `agy`) to seamlessly execute OpenAgents Control (OAC) commands, skills, and subagents. + +--- + +## ⚡ Overview + +This integration provides a seamless bridge between OpenAgents Control and Google Antigravity: + +1. **Zero Redundancy**: Utilizes Git-portable **relative symbolic links** rather than copying files, ensuring that updates to `.opencode/` are instantly and automatically active in Antigravity. +2. **Pristine Backwards-Compatibility**: Automatically injects mandatory Antigravity YAML properties (e.g. `name`, `model`, `tools`) into your original `.opencode/` command and agent markdown files in-place, keeping the repository 100% compatible with both native OpenCode and Antigravity environments. +3. **Dual Global & Local Mapping**: Configures local workspace paths (.agents/) and deploys global plugins to `~/.gemini/` home directory paths simultaneously. + +--- + +## 📂 Directory Structure + +``` +integrations/antigravity/ +├── README.md # This guide +└── install-antigravity.sh # Bridge installer script (Local & Global) +``` + +--- + +## 🚀 Quick Start + +### 1. Run the Installer + +To establish the bridge mappings, run: + +```bash +cd integrations/antigravity +./install-antigravity.sh +``` + +This will automatically: +1. Scan your native OAC skills, commands, and subagents. +2. Translate and inject YAML properties into original `.opencode/` markdown files in-place (safely and backwards-compatibly). +3. Establish relative symlinks under `.agents/skills/` and `.agents/agents/`. +4. Deploy the unified OAC bridge plugin globally under `~/.gemini/config/plugins/` and `~/.gemini/antigravity-cli/plugins/` to enable OAC support across *all* project workspaces. + +### 2. Verify in Antigravity + +Start an Antigravity session and verify that the plugin has loaded correctly: + +```bash +# Start your CLI session +agy + +# Inspect active subagents and skills +/agents +/skills +``` + +You should see `openagents-control-standards` and `context-scout` registered and active. + +--- + +## 🔮 How It Works + +### Context Discovery & Pre-loading +1. **Skill Triggers**: The `openagents-control-standards` skill triggers automatically before any development or architectural task. +2. **Subagent Invocation**: The skill delegates to `context-scout` to search `.opencode/context/` for relevant conventions, naming standards, and workflows. +3. **Upfront Loading**: Discovered files are read and pre-loaded into the prompt context to keep subsequent task execution fast, consistent, and highly token-efficient. + +### In-Place Agent Frontmatter Mapping +The setup utility dynamically translates OAC agent specifications to Antigravity configurations: +- **`name`**: Map names directly. +- **`model`**: Defaults to `gemini-3.1-pro` for high-performance agentic coding. +- **`tools`**: Intelligently infers necessary tools (e.g., `run_command`, `replace_file_content`, `write_to_file`, `read_file`, `grep_search`, `list_dir`) by parsing the OAC permission structures in-place. diff --git a/integrations/antigravity/install-antigravity.sh b/integrations/antigravity/install-antigravity.sh new file mode 100755 index 00000000..113c5c42 --- /dev/null +++ b/integrations/antigravity/install-antigravity.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash +# +# install-antigravity.sh +# Installs OpenAgents Control to Gemini Antigravity CLI with automatic relative symlink mapping +# + +set -euo pipefail + +# Colors +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +# Determine paths +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +NODE_BIN="${NODE_BIN:-node}" + +echo -e "${GREEN}🚀 OpenAgents Control → Gemini Antigravity CLI Installer${NC}" +echo -e " Workspace Root: $REPO_ROOT" +echo "" + +# Check prerequisites +if ! command -v "$NODE_BIN" >/dev/null 2>&1; then + echo -e "${RED}✗ Missing required command: node${NC}" >&2 + echo -e " Please install Node.js: https://nodejs.org/" >&2 + exit 1 +fi + +# 1. Run local bridge setup +echo -e "${YELLOW}🔄 Configuring local Antigravity Bridge...${NC}" +if ! "$NODE_BIN" "$REPO_ROOT/scripts/setup-gemini-bridge.js"; then + echo -e "${RED}✗ Bridge configuration failed${NC}" >&2 + exit 1 +fi + +# Define global plugin locations +GLOBAL_CLI_DEST="$HOME/.gemini/antigravity-cli/plugins/openagents-control-bridge" +GLOBAL_CONFIG_DEST="$HOME/.gemini/config/plugins/openagents-control-bridge" +LOCAL_PLUGIN_SRC="$REPO_ROOT/.agents/plugins/openagents-control-bridge" + +# 2. Install global plugins (optional fallback/global access) +echo -e "\n${YELLOW}📦 Installing global plugins...${NC}" + +# Global CLI Destination +mkdir -p "$HOME/.gemini/antigravity-cli/plugins" +if [ -d "$GLOBAL_CLI_DEST" ] || [ -L "$GLOBAL_CLI_DEST" ]; then + rm -rf "$GLOBAL_CLI_DEST" +fi +cp -R "$LOCAL_PLUGIN_SRC" "$GLOBAL_CLI_DEST" +echo -e " ✓ Installed global CLI plugin ──► $GLOBAL_CLI_DEST" + +# Global Config Destination +mkdir -p "$HOME/.gemini/config/plugins" +if [ -d "$GLOBAL_CONFIG_DEST" ] || [ -L "$GLOBAL_CONFIG_DEST" ]; then + rm -rf "$GLOBAL_CONFIG_DEST" +fi +cp -R "$LOCAL_PLUGIN_SRC" "$GLOBAL_CONFIG_DEST" +echo -e " ✓ Installed global config plugin ──► $GLOBAL_CONFIG_DEST" + +echo -e "\n${GREEN}✨ Antigravity Integration Successful!${NC}" +echo -e "✓ The original .opencode/ folder structure remains pristine." +echo -e "✓ All local workspace mappings use portable, relative symlinks." +echo -e "✓ Ready for both OpenCode and Google Antigravity!" diff --git a/scripts/setup-gemini-bridge.js b/scripts/setup-gemini-bridge.js new file mode 100644 index 00000000..a4359299 --- /dev/null +++ b/scripts/setup-gemini-bridge.js @@ -0,0 +1,287 @@ +#!/usr/bin/env node +'use strict'; + +const fs = require('fs'); +const path = require('path'); + +// Dynamically resolve the project root relative to the script location (scripts/setup-gemini-bridge.js) +const projectRoot = path.join(__dirname, '..'); +const opencodeDir = path.join(projectRoot, '.opencode'); + +if (!fs.existsSync(opencodeDir)) { + console.error('❌ Error: This does not appear to be an OpenCode project (no .opencode directory found).'); + process.exit(1); +} + +const agentsDir = path.join(projectRoot, '.agents'); +const agentsSkillsDir = path.join(agentsDir, 'skills'); +const agentsAgentsDir = path.join(agentsDir, 'agents'); +const pluginDir = path.join(agentsDir, 'plugins', 'openagents-control-bridge'); + +console.log('🔗 Setting up OpenAgents Control (OAC) to Antigravity Bridge...'); + +// Helper: Ensure directory exists +function ensureDir(dir) { + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } +} + +// Helper: Remove directory/file/symlink recursively +function cleanTarget(targetPath) { + if (fs.existsSync(targetPath)) { + const stat = fs.lstatSync(targetPath); + if (stat.isSymbolicLink()) { + fs.unlinkSync(targetPath); + } else if (stat.isDirectory()) { + fs.rmSync(targetPath, { recursive: true, force: true }); + } else { + fs.unlinkSync(targetPath); + } + } else { + // If it is a broken symlink, fs.existsSync returns false but we still need to delete it + try { + const stat = fs.lstatSync(targetPath); + if (stat.isSymbolicLink()) { + fs.unlinkSync(targetPath); + } + } catch (e) { + // Ignore errors for non-existent targets + } + } +} + +// Clean and recreate main directories +cleanTarget(agentsSkillsDir); +cleanTarget(agentsAgentsDir); +cleanTarget(path.join(agentsDir, 'plugins')); + +ensureDir(agentsSkillsDir); +ensureDir(agentsAgentsDir); +ensureDir(pluginDir); + +// ============================================================================ +// 1. Bridge Skills (.opencode/skills/ and .opencode/skill/ -> .agents/skills/) +// ============================================================================ +console.log('\n🔮 Bridging OAC Skills...'); +const opencodeSkillsDirs = [ + path.join(opencodeDir, 'skills'), + path.join(opencodeDir, 'skill') +]; + +opencodeSkillsDirs.forEach(srcSkillsDir => { + if (!fs.existsSync(srcSkillsDir)) return; + + const skills = fs.readdirSync(srcSkillsDir); + skills.forEach(skillName => { + const srcPath = path.join(srcSkillsDir, skillName); + const stat = fs.statSync(srcPath); + if (!stat.isDirectory()) return; + + const destPath = path.join(agentsSkillsDir, skillName); + + // Clean old bridge entry if it exists + cleanTarget(destPath); + + // Create relative symlink for clean git-sharing + const relPath = path.relative(path.dirname(destPath), srcPath); + fs.symlinkSync(relPath, destPath, 'dir'); + console.log(` ✓ Skill: ${skillName} ──► .agents/skills/${skillName}`); + }); +}); + +// ============================================================================ +// 2. Bridge Commands (.opencode/command/ -> .agents/skills/) +// ============================================================================ +console.log('\n⚡ Bridging OAC Commands (as Antigravity Skills)...'); +const srcCommandsDir = path.join(opencodeDir, 'command'); + +if (fs.existsSync(srcCommandsDir)) { + function scanCommands(dir) { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + for (const entry of entries) { + const resPath = path.join(dir, entry.name); + if (entry.isDirectory()) { + scanCommands(resPath); + } else if (entry.isFile() && entry.name.endsWith('.md')) { + const commandName = path.basename(entry.name, '.md'); + const destSkillDir = path.join(agentsSkillsDir, commandName); + const destSkillFile = path.join(destSkillDir, 'SKILL.md'); + + cleanTarget(destSkillDir); + ensureDir(destSkillDir); + + // Read the command file to check/inject YAML name parameter + let content = fs.readFileSync(resPath, 'utf8'); + const frontmatterRegex = /^---\r?\n([\s\S]*?)\r?\n---/; + const match = content.match(frontmatterRegex); + + if (match) { + const yamlBlock = match[1]; + if (!yamlBlock.includes('name:')) { + const updatedYaml = `name: ${commandName}\n${yamlBlock}`; + content = content.replace(frontmatterRegex, `---\n${updatedYaml}\n---`); + fs.writeFileSync(resPath, content, 'utf8'); + console.log(` ✓ Added 'name: ${commandName}' frontmatter to original command ${entry.name}`); + } + } else { + content = `---\nname: ${commandName}\ndescription: OAC command converted to Antigravity skill\n---\n\n${content}`; + fs.writeFileSync(resPath, content, 'utf8'); + console.log(` ✓ Added default frontmatter to original command ${entry.name}`); + } + + // Create symlink from command markdown file to SKILL.md + const relPath = path.relative(path.dirname(destSkillFile), resPath); + fs.symlinkSync(relPath, destSkillFile, 'file'); + console.log(` ✓ Command: ${commandName} ──► .agents/skills/${commandName}/SKILL.md`); + } + } + } + + scanCommands(srcCommandsDir); +} + +// ============================================================================ +// 3. Bridge Agents (.opencode/agent/ -> .agents/agents/) +// ============================================================================ +console.log('\n🤖 Bridging OAC Custom Agents...'); +const srcAgentsDir = path.join(opencodeDir, 'agent'); + +if (fs.existsSync(srcAgentsDir)) { + function scanAgents(dir) { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + for (const entry of entries) { + const resPath = path.join(dir, entry.name); + if (entry.isDirectory()) { + scanAgents(resPath); + } else if (entry.isFile() && entry.name.endsWith('.md')) { + const agentName = path.basename(entry.name, '.md'); + const destAgentFile = path.join(agentsAgentsDir, entry.name); + + // Read file and parse/update frontmatter in-place + let content = fs.readFileSync(resPath, 'utf8'); + const frontmatterRegex = /^---\r?\n([\s\S]*?)\r?\n---/; + const match = content.match(frontmatterRegex); + + if (match) { + const yamlBlock = match[1]; + let updatedYaml = yamlBlock; + + if (!yamlBlock.includes('name:')) { + updatedYaml = `name: ${agentName}\n${updatedYaml}`; + } + if (!yamlBlock.includes('model:')) { + updatedYaml = `${updatedYaml}\nmodel: gemini-3.1-pro`; + } + if (!yamlBlock.includes('tools:')) { + const tools = ['read_file', 'grep_search', 'list_dir']; + const hasBash = yamlBlock.includes('bash:') && !yamlBlock.includes('bash:\n "*": "deny"') && !yamlBlock.includes('bash:\r\n "*": "deny"'); + const hasEdit = yamlBlock.includes('edit:') && !yamlBlock.includes('edit:\n "*": "deny"') && !yamlBlock.includes('edit:\r\n "*": "deny"'); + const hasWrite = yamlBlock.includes('write:') && !yamlBlock.includes('write:\n "*": "deny"') && !yamlBlock.includes('write:\r\n "*": "deny"'); + + if (hasBash) tools.push('run_command'); + if (hasEdit) tools.push('replace_file_content'); + if (hasWrite) tools.push('write_to_file'); + + updatedYaml = `${updatedYaml}\ntools: ${tools.join(', ')}`; + } + + if (updatedYaml !== yamlBlock) { + content = content.replace(frontmatterRegex, `---\n${updatedYaml}\n---`); + fs.writeFileSync(resPath, content, 'utf8'); + console.log(` ✓ Updated frontmatter in original agent ${entry.name}`); + } + } + + // Clean old bridge entry + cleanTarget(destAgentFile); + + // Create symlink + const relPath = path.relative(path.dirname(destAgentFile), resPath); + fs.symlinkSync(relPath, destAgentFile, 'file'); + console.log(` ✓ Agent: ${entry.name} ──► .agents/agents/${entry.name}`); + } + } + } + + scanAgents(srcAgentsDir); +} + +// ============================================================================ +// 4. Inject Custom Antigravity Skills & Agents +// ============================================================================ +console.log('\n🌟 Creating Antigravity-specific Helpers...'); + +// 4a. context-scout subagent +const contextScoutPath = path.join(agentsAgentsDir, 'context-scout.md'); +const contextScoutContent = `--- +name: context-scout +description: Discovers and recommends OpenAgents Control context files using list_dir, read_file, and grep_search tools. Use when you need to find OpenAgents Control standards, guides, or domain knowledge in the .opencode/context directory. +tools: read_file, grep_search, list_dir +model: gemini-3.5-flash +permissionMode: plan +--- + +# ContextScout + +You discover and recommend relevant OpenAgents Control context files from \`.opencode/context/\` based on the user's request. + +## Your Process + +1. Use \`list_dir\` or custom glob tools to find files in \`.opencode/context/\`. +2. Use \`read_file\` or \`grep_search\` to verify relevance. +3. Return file paths with brief descriptions. +`; +fs.writeFileSync(contextScoutPath, contextScoutContent, 'utf8'); +console.log(` ✓ Created context-scout subagent ──► .agents/agents/context-scout.md`); + +// 4b. openagents-control-standards skill +const stdSkillDir = path.join(agentsSkillsDir, 'openagents-control-standards'); +ensureDir(stdSkillDir); +const stdSkillPath = path.join(stdSkillDir, 'SKILL.md'); +const stdSkillContent = `--- +name: openagents-control-standards +description: Automatically triggers before any task to ensure OpenAgents Control standards and context are loaded. Use when the user asks to create, modify, or analyze anything in this repository. +--- + +# OpenAgents Control Standards Loader + +Before proceeding with the user's request: + +1. Call the \`context-scout\` subagent with the user's request to find relevant OpenAgents Control context files. +2. Read the returned "Critical" and "High" priority files using \`read_file\`. +3. Apply the OpenAgents Control standards found to your work. +`; +fs.writeFileSync(stdSkillPath, stdSkillContent, 'utf8'); +console.log(` ✓ Created openagents-control-standards skill ──► .agents/skills/openagents-control-standards/SKILL.md`); + +// ============================================================================ +// 5. Structure the Plugin using Relative Symlinks +// ============================================================================ +console.log('\n🔌 Configuring the Workspace Plugin...'); + +// plugin.json +const pluginJsonPath = path.join(pluginDir, 'plugin.json'); +fs.writeFileSync( + pluginJsonPath, + JSON.stringify({ name: 'openagents-control-bridge' }, null, 2), + 'utf8' +); +console.log(` ✓ Created plugin.json manifest`); + +// Symlink skills +const pluginSkillsLink = path.join(pluginDir, 'skills'); +cleanTarget(pluginSkillsLink); +fs.symlinkSync(path.relative(path.dirname(pluginSkillsLink), agentsSkillsDir), pluginSkillsLink, 'dir'); +console.log(` ✓ Symlinked plugin skills ──► .agents/plugins/openagents-control-bridge/skills`); + +// Symlink agents +const pluginAgentsLink = path.join(pluginDir, 'agents'); +cleanTarget(pluginAgentsLink); +fs.symlinkSync(path.relative(path.dirname(pluginAgentsLink), agentsAgentsDir), pluginAgentsLink, 'dir'); +console.log(` ✓ Symlinked plugin agents ──► .agents/plugins/openagents-control-bridge/agents`); + +console.log('\n🎉 OAC-to-Antigravity Bridge created successfully!'); +console.log('✓ All changes are reference-based (via relative symlinks).'); +console.log('✓ The original .opencode/ folder structure remains pristine.'); +console.log('✓ Ready for both OpenCode and Google Antigravity!');