The folder implements the grep tool that powers ripgrep/grep-based searches for the OpenCode ecosystem. It exposes shared helpers for resolving/running the CLI, parsing output, downloading a bundled ripgrep when missing, and wiring the tool definition that the plugin host uses.
Serve as the authoritative implementation of the fast content-search tool. It discovers which binary to run (rg vs fallback grep), enforces safety defaults (timeouts, max files/size/depth), parses the child-process output, formats readable responses, and exposes the ready-to-use tool definition consumed by the CLI/plugin layer.
The module is structured around a few focused responsibilities: constants.ts holds the configuration (safety flags, defaults) and a cached resolveGrepCli/resolveGrepCliWithAutoInstall that looks for bundled/system binaries before installing ripgrep from downloader.ts (platform aware fetch + extract). cli.ts encapsulates backend-agnostic argument builders (buildRgArgs/buildGrepArgs), output parsers, and the top-level runRg/runRgCount functions that spawn the tool via Bun, apply timeouts, and convert stdout/stderr into typed results. tools.ts wraps runRg with formatGrepResult (which groups matches by file) into a @opencode-ai/plugin/tool definition. index.ts re-exports the key APIs so other systems can import the grep functionality without knowing internal layout.
GrepOptions to runRg (or runRgCount); the CLI module first resolves the best backend via resolveGrepCli, which itself may probe bundled paths, the system rg, a cached install under ~/.cache/oh-my-opencode-slim/bin, or finally grep. 2. buildArgs chooses rg versus grep flag sets, adds safety arguments, globs, excludes, and finally the search pattern and paths. 3. Bun spawns the selected executable with the assembled arguments and a timeout promise; stdout is read, truncated if necessary, and converted into GrepMatch objects via parseOutput/parseCountOutput. 4. The parsed matches are returned as a GrepResult, which tools.ts later formats (formatGrepResult) with grouped file sections before presenting to the user.constants.ts imports downloader.ts to provide a self-installing ripgrep bundle when the preferred CLI is missing. runRg/runRgCount are the primary exports consumed elsewhere via src/tools/grep/index.ts, which also re-exports the resolver helpers and downloader entry points for reuse. This folder feeds the plugin registry in tools.ts so that the grep tool appears in the OpenCode tool suite, and other modules (e.g., higher-level CLI handlers) can orchestrate searches without dealing with binaries or parsing. The downloader taps ../../utils for extractZip, and all exports are typed through types.ts so other callers can rely on GrepResult/CountResult contracts.