gatekpr-opencode 0.2.3

OpenCode CLI integration for RAG-powered validation enrichment
Documentation
//! OpenCode CLI integration for RAG-powered validation enrichment
//!
//! This crate provides a client that invokes the OpenCode CLI to enrich
//! validation findings with context from the RAG system. It implements
//! a two-stage validation flow:
//!
//! - Stage 1: Local pipeline produces RawFinding
//! - Stage 2: OpenCode CLI enriches to EnrichedFinding with RAG context
//!
//! ## Architecture
//!
//! The client executes `opencode run` with structured prompts, instructing
//! the LLM to use MCP tools (`search_docs_for_rule`, `get_fix_hint`) to
//! fetch relevant Shopify documentation and provide detailed analysis.
//!
//! Each finding is processed in a fresh OpenCode session to avoid context
//! window accumulation. This prioritizes accuracy over speed.
//!
//! ## Usage
//!
//! ```rust,ignore
//! use gatekpr_opencode::{OpenCodeClient, RawFinding, Severity};
//!
//! // Create client (auto-detects CLI path)
//! let client = OpenCodeClient::auto()?;
//!
//! // Enrich findings from local pipeline
//! let raw_findings = vec![
//!     RawFinding::new("WH001", Severity::Critical, "webhooks", "src/app.ts", "Missing GDPR webhook")
//!         .with_line(42)
//! ];
//!
//! let enriched = client.enrich_findings(raw_findings, Path::new("./my-app")).await?;
//!
//! // Enriched findings include:
//! // - Detailed issue description and impact
//! // - Fix recommendations with code snippets
//! // - Documentation references from RAG
//! ```
//!
//! ## Configuration
//!
//! The client can be configured via environment variables:
//!
//! - `OPENCODE_CLI_PATH`: Path to opencode binary (default: auto-detect)
//! - `OPENCODE_MODEL`: Model to use (default: zai-coding-plan/glm-4.7)
//! - `OPENCODE_TIMEOUT`: Timeout in seconds (default: 120)
//! - `MCP_SERVER_PATH`: Path to gatekpr-mcp-server binary

pub mod client;
pub mod config;
pub mod error;
pub mod models;

pub use client::OpenCodeClient;
pub use config::OpenCodeConfig;
pub use error::{OpenCodeError, Result};
pub use models::*;