diff --git a/README.ko.md b/README.ko.md index bda248b..4eb6fb3 100644 --- a/README.ko.md +++ b/README.ko.md @@ -317,7 +317,10 @@ Syntax Highlighting, Autocomplete, Refactoring, Navigation, Analysis, 그리고 - Use PascalCase for interface names - Use camelCase for function names ``` -- **Online**: 프로젝트 규칙이 전부는 아니겠죠. exa, context7 mcp 를 내장하여 검색 기능을 제공합니다. +- **Online**: 프로젝트 규칙이 전부는 아니겠죠. 확장 기능을 위한 내장 MCP를 제공합니다: + - **context7**: 공식 문서 조회 + - **websearch_exa**: 실시간 웹 검색 + - **grep_app**: 공개 GitHub 저장소에서 초고속 코드 검색 (구현 예제 찾기에 최적) #### 멀티모달을 다 활용하면서, 토큰은 덜 쓰도록. @@ -488,13 +491,17 @@ Google Gemini 모델을 위한 내장 Antigravity OAuth를 활성화합니다: ### MCPs -기본적으로 Context7, Exa MCP 를 지원합니다. +기본적으로 Context7, Exa, grep.app MCP 를 지원합니다. + +- **context7**: 라이브러리의 최신 공식 문서를 가져옵니다 +- **websearch_exa**: Exa AI 기반 실시간 웹 검색 +- **grep_app**: [grep.app](https://grep.app)을 통해 수백만 개의 공개 GitHub 저장소에서 초고속 코드 검색 이것이 마음에 들지 않는다면, ~/.config/opencode/oh-my-opencode.json 혹은 .opencode/oh-my-opencode.json 의 `disabled_mcps` 를 사용하여 비활성화할 수 있습니다: ```json { - "disabled_mcps": ["context7", "websearch_exa"] + "disabled_mcps": ["context7", "websearch_exa", "grep_app"] } ``` diff --git a/README.md b/README.md index c503d60..1ce95a6 100644 --- a/README.md +++ b/README.md @@ -314,7 +314,10 @@ Hand your best tools to your best colleagues. Now they can properly refactor, na - Use PascalCase for interface names - Use camelCase for function names ``` -- **Online**: Project rules aren't everything. Built-in exa and context7 MCP for web search. +- **Online**: Project rules aren't everything. Built-in MCPs for extended capabilities: + - **context7**: Official documentation lookup + - **websearch_exa**: Real-time web search + - **grep_app**: Ultra-fast code search across public GitHub repos (great for finding implementation examples) #### Be Multimodal. Save Tokens. @@ -485,13 +488,17 @@ Available agents: `oracle`, `librarian`, `explore`, `frontend-ui-ux-engineer`, ` ### MCPs -Context7 and Exa MCP enabled by default. +Context7, Exa, and grep.app MCP enabled by default. + +- **context7**: Fetches up-to-date official documentation for libraries +- **websearch_exa**: Real-time web search powered by Exa AI +- **grep_app**: Ultra-fast code search across millions of public GitHub repositories via [grep.app](https://grep.app) Don't want them? Disable via `disabled_mcps` in `~/.config/opencode/oh-my-opencode.json` or `.opencode/oh-my-opencode.json`: ```json { - "disabled_mcps": ["context7", "websearch_exa"] + "disabled_mcps": ["context7", "websearch_exa", "grep_app"] } ``` diff --git a/src/agents/explore.ts b/src/agents/explore.ts index f480612..247133d 100644 --- a/src/agents/explore.ts +++ b/src/agents/explore.ts @@ -73,6 +73,46 @@ Your response has FAILED if: - **Using Git CLI extensively for repository insights** - **Using LSP tools for semantic code analysis** - **Using AST-grep for structural code pattern matching** +- **Using grep_app (grep.app MCP) for ultra-fast initial code discovery** + +## grep_app - FAST STARTING POINT (USE FIRST!) + +**grep_app is your fastest weapon for initial code discovery.** It searches millions of public GitHub repositories instantly. + +### When to Use grep_app: +- **ALWAYS start with grep_app** when searching for code patterns, library usage, or implementation examples +- Use it to quickly find how others implement similar features +- Great for discovering common patterns and best practices + +### CRITICAL WARNING: +grep_app results may be **OUTDATED** or from **different library versions**. You MUST: +1. Use grep_app results as a **starting point only** +2. **Always launch 5+ grep_app calls in parallel** with different query variations +3. **Always add 2+ other search tools** (Grep, ast_grep, context7, LSP, Git) for verification +4. Never blindly trust grep_app results for API signatures or implementation details + +### MANDATORY: 5+ grep_app Calls + 2+ Other Tools in Parallel + +**grep_app is ultra-fast but potentially inaccurate.** To compensate, you MUST: +- Launch **at least 5 grep_app calls** with different query variations (synonyms, different phrasings, related terms) +- Launch **at least 2 other search tools** (local Grep, ast_grep, context7, LSP, Git) for cross-validation + +\`\`\` +// REQUIRED parallel search pattern: +// 5+ grep_app calls with query variations: +- Tool 1: grep_app_searchGitHub(query: "useEffect cleanup", language: ["TypeScript"]) +- Tool 2: grep_app_searchGitHub(query: "useEffect return cleanup", language: ["TypeScript"]) +- Tool 3: grep_app_searchGitHub(query: "useEffect unmount", language: ["TSX"]) +- Tool 4: grep_app_searchGitHub(query: "cleanup function useEffect", language: ["TypeScript"]) +- Tool 5: grep_app_searchGitHub(query: "useEffect addEventListener removeEventListener", language: ["TypeScript"]) + +// 2+ other tools for verification: +- Tool 6: Grep("useEffect.*return") - Local codebase ground truth +- Tool 7: context7_get-library-docs(libraryID: "/facebook/react", topic: "useEffect cleanup") - Official docs +- Tool 8 (optional): ast_grep_search(pattern: "useEffect($$$)", lang: "tsx") - Structural search +\`\`\` + +**Pattern**: Flood grep_app with query variations (5+) → verify with local/official sources (2+) → trust only cross-validated results. ## Git CLI - USE EXTENSIVELY diff --git a/src/mcp/grep-app.ts b/src/mcp/grep-app.ts new file mode 100644 index 0000000..2c5db6d --- /dev/null +++ b/src/mcp/grep-app.ts @@ -0,0 +1,5 @@ +export const grep_app = { + type: "remote" as const, + url: "https://mcp.grep.app", + enabled: true, +} diff --git a/src/mcp/index.ts b/src/mcp/index.ts index 02f5004..7a38ca3 100644 --- a/src/mcp/index.ts +++ b/src/mcp/index.ts @@ -1,5 +1,6 @@ import { websearch_exa } from "./websearch-exa" import { context7 } from "./context7" +import { grep_app } from "./grep-app" import type { McpName } from "./types" export { McpNameSchema, type McpName } from "./types" @@ -7,6 +8,7 @@ export { McpNameSchema, type McpName } from "./types" const allBuiltinMcps: Record = { websearch_exa, context7, + grep_app, } export function createBuiltinMcps(disabledMcps: McpName[] = []) { diff --git a/src/mcp/types.ts b/src/mcp/types.ts index ea7dfb9..4139ab2 100644 --- a/src/mcp/types.ts +++ b/src/mcp/types.ts @@ -1,5 +1,5 @@ import { z } from "zod" -export const McpNameSchema = z.enum(["websearch_exa", "context7"]) +export const McpNameSchema = z.enum(["websearch_exa", "context7", "grep_app"]) export type McpName = z.infer