{
  "name": "forge-coder",
  "language": "rust",
  "version": "0.2.0",
  "description": "Production-grade coding agent runtime \u2014 repo understanding, code search, dependency awareness, plan/implement/review cycles, and test verification loops",
  "manifest": "forge-rs/crates/forge-coder/Cargo.toml",
  "manifestSha256": "b7e17d33170c9cba96cbed90b65eb3e89a189e340d518f6fe04c89fa4338d3dc",
  "status": "source-reference",
  "registryPublicationVerified": false,
  "route": "/libraries/rust/forge-coder",
  "features": {},
  "files": [
    {
      "path": "forge-rs/crates/forge-coder/src/code_search.rs",
      "sha256": "4de8512214fab2ea5d87de8d2d1e82db7055c53036c6a05d0349f2c680447c6e",
      "artifactSha256": "24e02021808dfb044a5398be5311e60f61890fd4a5860b7ab6ee07c01116760c",
      "url": "/reference/source/forge-rs/crates/forge-coder/src/code_search.rs.txt",
      "declarations": [
        {
          "name": "::SearchScope",
          "line": 48,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub enum SearchScope {\n    /// Search all files in the repository.\n    AllFiles,\n    /// Search only files with the given extensions.\n    Extensions(Vec<String>),\n    /// Search only within specific directories.\n    Directories(Vec<PathBuf>),\n    /// Search a specific file.\n    SingleFile(PathBuf),\n}",
          "documentation": "The scope of a code search operation."
        },
        {
          "name": "::SearchQuery",
          "line": 61,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SearchQuery {\n/// The search pattern (literal string or regex).\n\npub pattern: String,\n/// The scope to search within.\n\npub scope: SearchScope,\n/// Maximum number of results to return.\n\npub max_results: usize,\n/// Whether the search is case-sensitive.\n\npub case_sensitive: bool\n}",
          "documentation": "A search query specification."
        },
        {
          "name": "::SearchResult",
          "line": 74,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SearchResult {\n/// The file path where the match was found.\n\npub path: PathBuf,\n/// The 1-indexed line number of the match.\n\npub line_number: usize,\n/// The content of the matching line.\n\npub line_content: String,\n/// Optional column offset of the match within the line.\n\npub column: Option<usize>\n}",
          "documentation": "A single search result."
        },
        {
          "name": "::SymbolDefinition",
          "line": 87,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SymbolDefinition {\n/// The symbol name.\n\npub name: String,\n/// The kind of symbol (function, struct, enum, trait, etc.).\n\npub kind: SymbolKind,\n/// The file where the symbol is defined.\n\npub file: PathBuf,\n/// The line number of the definition.\n\npub line: usize,\n/// The full line of the definition.\n\npub definition_line: String\n}",
          "documentation": "A symbol definition found in the codebase."
        },
        {
          "name": "::SymbolKind",
          "line": 102,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\npub enum SymbolKind {\n    /// A function or method.\n    Function,\n    /// A struct or class.\n    Struct,\n    /// An enum or enum variant.\n    Enum,\n    /// A trait or interface.\n    Trait,\n    /// A type alias.\n    TypeAlias,\n    /// A constant.\n    Constant,\n    /// A module or namespace.\n    Module,\n    /// A macro.\n    Macro,\n    /// An import or use statement.\n    Import,\n    /// Unknown symbol kind.\n    Unknown,\n}",
          "documentation": "The kind of a code symbol."
        },
        {
          "name": "::CodeSearchEngine",
          "line": 146,
          "signature": "pub struct CodeSearchEngine {\n\n}",
          "documentation": "Engine for searching code within a repository.\n\nThe engine uses `grep`/`rg` for fast text search when available, falling\nback to a pure-Rust line-by-line scan for portability."
        },
        {
          "name": "::CodeSearchEngine::new",
          "line": 156,
          "signature": "pub fn new(root: &Path) -> Self;",
          "documentation": "Creates a new code search engine rooted at the given directory.\n\n# Arguments\n\n* `root` - The root directory to search within."
        },
        {
          "name": "::CodeSearchEngine::search",
          "line": 175,
          "signature": "pub async fn search(&self, query: SearchQuery) -> ForgeCoderResult<Vec<SearchResult>>;",
          "documentation": "Performs a text search across the repository.\n\n# Arguments\n\n* `query` - The search query specification.\n\n# Returns\n\nA vector of search results, limited to `query.max_results`.\n\n# Errors\n\nReturns [`ForgeCoderError::CodeSearchFailed`] if the search operation fails."
        },
        {
          "name": "::CodeSearchEngine::find_symbol",
          "line": 200,
          "signature": "pub async fn find_symbol(&self, symbol_name: &str) -> ForgeCoderResult<Vec<SymbolDefinition>>;",
          "documentation": "Finds symbol definitions matching the given name.\n\nUses language-aware patterns to identify function, struct, enum, trait,\nand other definitions.\n\n# Arguments\n\n* `symbol_name` - The name of the symbol to find.\n\n# Returns\n\nA vector of symbol definitions found."
        },
        {
          "name": "::CodeSearchEngine::read_lines",
          "line": 244,
          "signature": "pub async fn read_lines(\n        &self,\n        path: &Path,\n        start_line: usize,\n        end_line: usize,\n    ) -> ForgeCoderResult<Vec<(usize, String)>>;",
          "documentation": "Reads a file and returns its contents with line numbers.\n\n# Arguments\n\n* `path` - The file to read.\n* `start_line` - The 1-indexed start line (inclusive).\n* `end_line` - The 1-indexed end line (inclusive).\n\n# Returns\n\nA vector of (line_number, line_content) pairs."
        }
      ]
    },
    {
      "path": "forge-rs/crates/forge-coder/src/cycle.rs",
      "sha256": "7ace6849536e03e3ee7c5880c59fac32ae1717c35d765b80739296efc4bde58e",
      "artifactSha256": "459f713a1aa597f5df116b0ba49b119d7cb2ef30ad762e25a292bb5c503ae2e9",
      "url": "/reference/source/forge-rs/crates/forge-coder/src/cycle.rs.txt",
      "declarations": [
        {
          "name": "::CodingTask",
          "line": 52,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CodingTask {\n/// Unique identifier for the task.\n\npub id: String,\n/// Short title of the task.\n\npub title: String,\n/// Detailed description of what needs to be done.\n\npub description: String,\n/// Files that are expected to be modified.\n\npub target_files: Vec<PathBuf>,\n/// Acceptance criteria that must be met.\n\npub acceptance_criteria: Vec<String>\n}",
          "documentation": "A coding task to be implemented."
        },
        {
          "name": "::CyclePhase",
          "line": 67,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\npub enum CyclePhase {\n    /// Planning phase: understanding the task and creating an implementation plan.\n    Planning,\n    /// Implementation phase: writing the code.\n    Implementing,\n    /// Review phase: reviewing the changes for correctness and quality.\n    Reviewing,\n    /// Testing phase: running tests to verify the changes.\n    Testing,\n    /// The cycle completed successfully.\n    Completed,\n    /// The cycle failed and cannot proceed.\n    Failed,\n}",
          "documentation": "The current phase of a coding cycle."
        },
        {
          "name": "::ReviewResult",
          "line": 97,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ReviewResult {\n/// Whether the review approved the changes.\n\npub approved: bool,\n/// The reviewer's DID.\n\npub reviewer_did: String,\n/// Comments from the reviewer.\n\npub comments: Vec<String>,\n/// Specific files flagged for revision.\n\npub flagged_files: Vec<PathBuf>\n}",
          "documentation": "The result of a review."
        },
        {
          "name": "::TestRunResult",
          "line": 110,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct TestRunResult {\n/// Whether all tests passed.\n\npub all_passed: bool,\n/// Total number of tests run.\n\npub total_tests: usize,\n/// Number of tests that passed.\n\npub passed: usize,\n/// Number of tests that failed.\n\npub failed: usize,\n/// Number of tests that were skipped.\n\npub skipped: usize,\n/// Failure messages for failed tests.\n\npub failure_messages: Vec<String>,\n/// The test command that was run.\n\npub command: String,\n/// The exit code of the test command.\n\npub exit_code: i32\n}",
          "documentation": "The result of a test run."
        },
        {
          "name": "::PhaseArtifact",
          "line": 131,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct PhaseArtifact {\n/// The phase that produced this artifact.\n\npub phase: CyclePhase,\n/// Description of the artifact.\n\npub description: String,\n/// The content of the artifact.\n\npub content: String,\n/// When the artifact was produced.\n\npub produced_at: DateTime<Utc>\n}",
          "documentation": "An artifact produced during a coding cycle phase."
        },
        {
          "name": "::CodingCycle",
          "line": 147,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CodingCycle {\n\n}",
          "documentation": "A coding cycle managing the plan/implement/review/test workflow.\n\nThe cycle tracks the current phase, history of transitions, artifacts\nproduced, and retry counts for handling failures."
        },
        {
          "name": "::CodingCycle::new",
          "line": 185,
          "signature": "pub fn new(agent_did: impl Into<String>, task: CodingTask) -> Self;",
          "documentation": "Creates a new coding cycle for the given agent and task.\n\nThe cycle starts in the [`CyclePhase::Planning`] phase.\n\n# Arguments\n\n* `agent_did` - The DID of the agent running the cycle.\n* `task` - The coding task to implement."
        },
        {
          "name": "::CodingCycle::with_max_revisions",
          "line": 205,
          "signature": "pub fn with_max_revisions(mut self, max: u32) -> Self;",
          "documentation": "Sets the maximum number of review revisions before failure."
        },
        {
          "name": "::CodingCycle::with_max_fixes",
          "line": 211,
          "signature": "pub fn with_max_fixes(mut self, max: u32) -> Self;",
          "documentation": "Sets the maximum number of test fix iterations before failure."
        },
        {
          "name": "::CodingCycle::id",
          "line": 217,
          "signature": "pub fn id(&self) -> &str;",
          "documentation": "Returns the cycle ID."
        },
        {
          "name": "::CodingCycle::agent_did",
          "line": 222,
          "signature": "pub fn agent_did(&self) -> &str;",
          "documentation": "Returns the agent DID running the cycle."
        },
        {
          "name": "::CodingCycle::task",
          "line": 227,
          "signature": "pub fn task(&self) -> &CodingTask;",
          "documentation": "Returns the task being implemented."
        },
        {
          "name": "::CodingCycle::phase",
          "line": 232,
          "signature": "pub fn phase(&self) -> CyclePhase;",
          "documentation": "Returns the current phase."
        },
        {
          "name": "::CodingCycle::artifacts",
          "line": 237,
          "signature": "pub fn artifacts(&self) -> &[PhaseArtifact];",
          "documentation": "Returns the artifacts produced so far."
        },
        {
          "name": "::CodingCycle::revision_count",
          "line": 242,
          "signature": "pub fn revision_count(&self) -> u32;",
          "documentation": "Returns the revision count."
        },
        {
          "name": "::CodingCycle::fix_count",
          "line": 247,
          "signature": "pub fn fix_count(&self) -> u32;",
          "documentation": "Returns the fix count."
        },
        {
          "name": "::CodingCycle::review_result",
          "line": 252,
          "signature": "pub fn review_result(&self) -> Option<&ReviewResult>;",
          "documentation": "Returns the review result, if available."
        },
        {
          "name": "::CodingCycle::test_result",
          "line": 257,
          "signature": "pub fn test_result(&self) -> Option<&TestRunResult>;",
          "documentation": "Returns the test result, if available."
        },
        {
          "name": "::CodingCycle::advance_to_implementing",
          "line": 270,
          "signature": "pub fn advance_to_implementing(&mut self, plan: String) -> Result<(), String>;",
          "documentation": "Advances from Planning to Implementing.\n\n# Arguments\n\n* `plan` - The implementation plan produced during planning.\n\n# Returns\n\n`Ok(())` if the transition is valid, or an error message if not."
        },
        {
          "name": "::CodingCycle::advance_to_reviewing",
          "line": 295,
          "signature": "pub fn advance_to_reviewing(&mut self, change_summary: String) -> Result<(), String>;",
          "documentation": "Advances from Implementing to Reviewing.\n\n# Arguments\n\n* `change_summary` - Summary of the changes made during implementation."
        },
        {
          "name": "::CodingCycle::record_review",
          "line": 320,
          "signature": "pub fn record_review(&mut self, result: ReviewResult) -> Result<(), String>;",
          "documentation": "Records the review result and advances to testing or back to implementing.\n\nIf the review is approved, advances to Testing.\nIf rejected and under the revision limit, goes back to Implementing.\nIf rejected and over the limit, advances to Failed."
        },
        {
          "name": "::CodingCycle::record_test_result",
          "line": 348,
          "signature": "pub fn record_test_result(&mut self, result: TestRunResult) -> Result<(), String>;",
          "documentation": "Records the test result and advances to completed or back to implementing.\n\nIf all tests pass, advances to Completed.\nIf tests fail and under the fix limit, goes back to Implementing.\nIf tests fail and over the limit, advances to Failed."
        },
        {
          "name": "::CodingCycle::mark_failed",
          "line": 375,
          "signature": "pub fn mark_failed(&mut self, reason: &str);",
          "documentation": "Marks the cycle as failed with a reason."
        },
        {
          "name": "::CodingCycle::is_terminal",
          "line": 387,
          "signature": "pub fn is_terminal(&self) -> bool;",
          "documentation": "Returns true if the cycle is in a terminal state (completed or failed)."
        }
      ]
    },
    {
      "path": "forge-rs/crates/forge-coder/src/dependency.rs",
      "sha256": "1df274a4491d4792386d8664bdd8f936c8a670814864b4dabc297a376b4e4f0b",
      "artifactSha256": "ec9e09d38d30755147ecae29c983925833dee4905749c19d97940f631eab6249",
      "url": "/reference/source/forge-rs/crates/forge-coder/src/dependency.rs.txt",
      "declarations": [
        {
          "name": "::PackageNode",
          "line": 44,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct PackageNode {\n/// The package name.\n\npub name: String,\n/// The path to the package directory.\n\npub path: PathBuf,\n/// The path to the manifest file.\n\npub manifest_path: PathBuf,\n/// The version string.\n\npub version: Option<String>\n}",
          "documentation": "A node in the dependency graph representing a package."
        },
        {
          "name": "::DependencyEdge",
          "line": 57,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct DependencyEdge {\n/// The package that depends on another (the \"from\" side).\n\npub from: String,\n/// The package being depended on (the \"to\" side).\n\npub to: String,\n/// Whether this is a dev-dependency.\n\npub is_dev: bool,\n/// Whether this is a build-dependency.\n\npub is_build: bool\n}",
          "documentation": "A directed edge in the dependency graph."
        },
        {
          "name": "::DependencyGraph",
          "line": 73,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct DependencyGraph {\n\n}",
          "documentation": "A graph of package dependencies within a workspace or repository.\n\nThe graph supports forward lookups (what does X depend on?), reverse\nlookups (what depends on X?), and transitive impact analysis."
        },
        {
          "name": "::DependencyGraph::new",
          "line": 84,
          "signature": "pub fn new() -> Self;",
          "documentation": "Creates a new empty dependency graph."
        },
        {
          "name": "::DependencyGraph::add_package",
          "line": 93,
          "signature": "pub fn add_package(&mut self, node: PackageNode);",
          "documentation": "Adds a package node to the graph."
        },
        {
          "name": "::DependencyGraph::add_edge",
          "line": 98,
          "signature": "pub fn add_edge(&mut self, edge: DependencyEdge);",
          "documentation": "Adds a dependency edge to the graph."
        },
        {
          "name": "::DependencyGraph::dependencies",
          "line": 107,
          "signature": "pub fn dependencies(&self, package: &str) -> Vec<&DependencyEdge>;",
          "documentation": "Returns the direct dependencies of a package."
        },
        {
          "name": "::DependencyGraph::reverse_dependencies",
          "line": 115,
          "signature": "pub fn reverse_dependencies(&self, package: &str) -> Vec<&DependencyEdge>;",
          "documentation": "Returns the packages that directly depend on the given package."
        },
        {
          "name": "::DependencyGraph::change_impact",
          "line": 127,
          "signature": "pub fn change_impact(&self, package: &str) -> Vec<String>;",
          "documentation": "Computes the transitive impact of changing a package.\n\nReturns all packages that would be affected (directly or transitively)\nby a change to the given package. Uses breadth-first traversal of\nreverse dependency edges."
        },
        {
          "name": "::DependencyGraph::packages",
          "line": 150,
          "signature": "pub fn packages(&self) -> Vec<&PackageNode>;",
          "documentation": "Returns all packages in the graph."
        },
        {
          "name": "::DependencyGraph::get_package",
          "line": 155,
          "signature": "pub fn get_package(&self, name: &str) -> Option<&PackageNode>;",
          "documentation": "Returns the package node for the given name."
        },
        {
          "name": "::DependencyGraph::package_count",
          "line": 160,
          "signature": "pub fn package_count(&self) -> usize;",
          "documentation": "Returns the total number of packages."
        },
        {
          "name": "::DependencyGraph::edge_count",
          "line": 165,
          "signature": "pub fn edge_count(&self) -> usize;",
          "documentation": "Returns the total number of dependency edges."
        },
        {
          "name": "::DependencyGraph::from_cargo_workspace",
          "line": 182,
          "signature": "pub async fn from_cargo_workspace(workspace_root: &Path) -> ForgeCoderResult<Self>;",
          "documentation": "Builds a dependency graph from a Cargo workspace.\n\nParses the workspace-level `Cargo.toml` and each member crate's\n`Cargo.toml` to construct the graph.\n\n# Arguments\n\n* `workspace_root` - The root of the Cargo workspace.\n\n# Errors\n\nReturns [`ForgeCoderError::DependencyResolutionFailed`] if manifest\nfiles cannot be parsed."
        }
      ]
    },
    {
      "path": "forge-rs/crates/forge-coder/src/error.rs",
      "sha256": "592c2db9ee99e9244e9561b8f7977538d7eb1515c305114d4687d047d5bbd77f",
      "artifactSha256": "f216d170660f8d5204b9093b289f2ecf13a8d7c82c423da5c4330bc98ab2d21c",
      "url": "/reference/source/forge-rs/crates/forge-coder/src/error.rs.txt",
      "declarations": [
        {
          "name": "::ForgeCoderError",
          "line": 31,
          "signature": "#[derive(Debug, Error)]\npub enum ForgeCoderError {\n    /// Repository scanning failed.\n    #[error(\"repo scan failed for '{repo_path}': {reason}\")]\n    RepoScanFailed {\n        /// The repo path that was being scanned.\n        repo_path: PathBuf,\n        /// What went wrong.\n        reason: String,\n    },\n\n    /// A code search operation failed.\n    #[error(\"code search failed in '{repo_path}' for query '{query}': {reason}\")]\n    CodeSearchFailed {\n        /// The repo path that was being searched.\n        repo_path: PathBuf,\n        /// The search query.\n        query: String,\n        /// What went wrong.\n        reason: String,\n    },\n\n    /// Symbol lookup failed.\n    #[error(\"symbol '{symbol_name}' not found in '{repo_path}': searched {files_searched} files across {languages_searched} languages\")]\n    SymbolNotFound {\n        /// The symbol being looked up.\n        symbol_name: String,\n        /// The repo path that was searched.\n        repo_path: PathBuf,\n        /// Number of files searched.\n        files_searched: usize,\n        /// Number of languages searched.\n        languages_searched: usize,\n    },\n\n    /// Dependency resolution failed.\n    #[error(\"dependency resolution failed for '{package_name}' in '{manifest_path}': {reason}\")]\n    DependencyResolutionFailed {\n        /// The package that could not be resolved.\n        package_name: String,\n        /// The manifest file path.\n        manifest_path: PathBuf,\n        /// What went wrong.\n        reason: String,\n    },\n\n    /// The plan/implement/review cycle failed.\n    #[error(\n        \"coding cycle '{cycle_id}' failed at phase '{phase}' for agent '{agent_did}': {reason}\"\n    )]\n    CodingCycleFailed {\n        /// The cycle identifier.\n        cycle_id: String,\n        /// The phase that failed (plan, implement, review, test).\n        phase: String,\n        /// The DID of the agent running the cycle.\n        agent_did: String,\n        /// What went wrong.\n        reason: String,\n    },\n\n    /// Test execution failed.\n    #[error(\"test execution failed in '{test_path}': exit_code={exit_code}, {reason}\")]\n    TestExecutionFailed {\n        /// The path to the test file or test target.\n        test_path: PathBuf,\n        /// The exit code of the test process.\n        exit_code: i32,\n        /// Description of what failed.\n        reason: String,\n    },\n\n    /// The context budget was exceeded.\n    #[error(\"context budget exceeded for agent '{agent_did}': used {tokens_used} of {budget} tokens; reduce scope or split across multiple cycles\")]\n    ContextBudgetExceeded {\n        /// The DID of the agent that exceeded the budget.\n        agent_did: String,\n        /// Tokens consumed.\n        tokens_used: u64,\n        /// The budget that was set.\n        budget: u64,\n    },\n\n    /// The coder runtime failed to initialize.\n    #[error(\"coder runtime initialization failed for repo '{repo_path}': {reason}\")]\n    InitializationFailed {\n        /// The repo where initialization was attempted.\n        repo_path: PathBuf,\n        /// What went wrong.\n        reason: String,\n    },\n\n    /// A crate/package skill pack could not be loaded.\n    #[error(\"skill pack '{skill_name}' could not be loaded for '{target_crate}': {reason}\")]\n    SkillLoadFailed {\n        /// The skill pack that failed to load.\n        skill_name: String,\n        /// The target crate the skill was for.\n        target_crate: String,\n        /// What went wrong.\n        reason: String,\n    },\n\n    /// Provider routing for a coding task failed.\n    #[error(\"provider routing failed for coding task '{task_type}': {reason}\")]\n    ProviderRoutingFailed {\n        /// The type of coding task.\n        task_type: String,\n        /// What went wrong.\n        reason: String,\n    },\n\n    /// Safety layer error (wraps forge-code-safety).\n    #[error(\"safety error: {0}\")]\n    Safety(#[from] forge_code_safety::error::CodeSafetyError),\n\n    /// Core Forge error.\n    #[error(\"core error: {0}\")]\n    Core(#[from] forge_core::error::ForgeError),\n\n    /// Agent runtime error.\n    #[error(\"agent error: {0}\")]\n    Agent(#[from] forge_agent::error::ForgeAgentError),\n\n    /// Tool execution error.\n    #[error(\"tool error: {0}\")]\n    Tool(#[from] forge_tool::error::ForgeToolError),\n}",
          "documentation": "Error type for coding agent runtime operations.\n\nEvery variant includes actionable context: what failed, why, and what the\ndeveloper should check. No generic \"something went wrong\" messages.\n\n# Examples\n\n```\nuse forge_coder::error::ForgeCoderError;\nuse std::path::PathBuf;\n\nlet err = ForgeCoderError::RepoScanFailed {\n    repo_path: PathBuf::from(\"/repo\"),\n    reason: \"not a git repository\".to_string(),\n};\nlet msg = err.to_string();\nassert!(msg.contains(\"/repo\"));\nassert!(msg.contains(\"git repository\"));\n```"
        },
        {
          "name": "::ForgeCoderResult",
          "line": 160,
          "signature": "pub type ForgeCoderResult<T> = Result<T, ForgeCoderError>;",
          "documentation": "A specialized `Result` type for `forge-coder` operations."
        }
      ]
    },
    {
      "path": "forge-rs/crates/forge-coder/src/lib.rs",
      "sha256": "6f148525432173c22c110cf69767b555d96cbaed07b55e0919142525d956bcac",
      "artifactSha256": "c1e4a9fe6f4adcfeced77ed2715c1bfa9ca7cf0b49a2a75a5907fc39169d5fc8",
      "url": "/reference/source/forge-rs/crates/forge-coder/src/lib.rs.txt",
      "declarations": [
        {
          "name": "code_search",
          "line": 135,
          "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod code_search;",
          "documentation": ""
        },
        {
          "name": "cycle",
          "line": 137,
          "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod cycle;",
          "documentation": ""
        },
        {
          "name": "dependency",
          "line": 139,
          "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod dependency;",
          "documentation": ""
        },
        {
          "name": "error",
          "line": 140,
          "signature": "pub mod error;",
          "documentation": ""
        },
        {
          "name": "repo",
          "line": 142,
          "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod repo;",
          "documentation": ""
        },
        {
          "name": "prelude",
          "line": 145,
          "signature": "pub mod prelude;",
          "documentation": "Re-exports of the most commonly used types."
        },
        {
          "name": "pub use crate::code_search::{\n        CodeSearchEngine, SearchQuery, SearchResult, SearchScope, SymbolDefinition, SymbolKind,\n    };",
          "line": 147,
          "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::code_search::{\n        CodeSearchEngine, SearchQuery, SearchResult, SearchScope, SymbolDefinition, SymbolKind,\n    };",
          "documentation": ""
        },
        {
          "name": "pub use crate::cycle::{\n        CodingCycle, CodingTask, CyclePhase, PhaseArtifact, ReviewResult, TestRunResult,\n    };",
          "line": 151,
          "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::cycle::{\n        CodingCycle, CodingTask, CyclePhase, PhaseArtifact, ReviewResult, TestRunResult,\n    };",
          "documentation": ""
        },
        {
          "name": "pub use crate::dependency::{DependencyEdge, DependencyGraph, PackageNode};",
          "line": 155,
          "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::dependency::{DependencyEdge, DependencyGraph, PackageNode};",
          "documentation": ""
        },
        {
          "name": "pub use crate::error::{ForgeCoderError, ForgeCoderResult};",
          "line": 156,
          "signature": "pub use crate::error::{ForgeCoderError, ForgeCoderResult};",
          "documentation": ""
        },
        {
          "name": "pub use crate::repo::{\n        DetectedBuildSystem, DetectedFramework, DetectedLanguage, RepoLayout, RepoProfile,\n        RepoScanner,\n    };",
          "line": 158,
          "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::repo::{\n        DetectedBuildSystem, DetectedFramework, DetectedLanguage, RepoLayout, RepoProfile,\n        RepoScanner,\n    };",
          "documentation": ""
        }
      ]
    },
    {
      "path": "forge-rs/crates/forge-coder/src/repo.rs",
      "sha256": "e0e07399da1479a8417766ea4f440dcf9cc30f16030324ac63426998a8511b73",
      "artifactSha256": "5212a38dcaff0f7ad43f370b5a7acc48196f828cbe9f815aea9d0027b3c99f35",
      "url": "/reference/source/forge-rs/crates/forge-coder/src/repo.rs.txt",
      "declarations": [
        {
          "name": "::DetectedLanguage",
          "line": 43,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct DetectedLanguage {\n/// The language name (e.g., \"Rust\", \"TypeScript\", \"Python\").\n\npub name: String,\n/// The file extensions associated with this language.\n\npub extensions: Vec<String>,\n/// The number of files detected for this language.\n\npub file_count: usize\n}",
          "documentation": "A detected programming language in the repository."
        },
        {
          "name": "::DetectedBuildSystem",
          "line": 54,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct DetectedBuildSystem {\n/// The build system name (e.g., \"cargo\", \"npm\", \"go\", \"pip\").\n\npub name: String,\n/// The manifest file that identified this build system.\n\npub manifest_path: PathBuf,\n/// Whether this is a workspace/monorepo manifest.\n\npub is_workspace: bool\n}",
          "documentation": "A detected build system or package manager."
        },
        {
          "name": "::DetectedFramework",
          "line": 65,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct DetectedFramework {\n/// The framework name (e.g., \"tokio\", \"actix-web\", \"React\", \"FastAPI\").\n\npub name: String,\n/// The language this framework is associated with.\n\npub language: String,\n/// How the framework was detected (manifest dependency, import, config file).\n\npub detection_method: String\n}",
          "documentation": "A detected framework or significant library."
        },
        {
          "name": "::RepoLayout",
          "line": 76,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\npub enum RepoLayout {\n    /// A single-package repository.\n    SinglePackage,\n    /// A multi-package workspace (e.g., Cargo workspace, npm workspaces).\n    Workspace,\n    /// A monorepo with multiple independent packages.\n    Monorepo,\n    /// The layout could not be determined.\n    Unknown,\n}",
          "documentation": "The layout pattern of the repository."
        },
        {
          "name": "::RepoProfile",
          "line": 103,
          "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct RepoProfile {\n\n}",
          "documentation": "A complete structural profile of a repository.\n\nThis profile is built by the [`RepoScanner`] and provides a high-level\nunderstanding of the project for coding agents."
        },
        {
          "name": "::RepoProfile::repo_root",
          "line": 124,
          "signature": "pub fn repo_root(&self) -> &Path;",
          "documentation": "Returns the root path of the repository."
        },
        {
          "name": "::RepoProfile::languages",
          "line": 129,
          "signature": "pub fn languages(&self) -> &[DetectedLanguage];",
          "documentation": "Returns the detected programming languages."
        },
        {
          "name": "::RepoProfile::build_systems",
          "line": 134,
          "signature": "pub fn build_systems(&self) -> &[DetectedBuildSystem];",
          "documentation": "Returns the detected build systems."
        },
        {
          "name": "::RepoProfile::frameworks",
          "line": 139,
          "signature": "pub fn frameworks(&self) -> &[DetectedFramework];",
          "documentation": "Returns the detected frameworks."
        },
        {
          "name": "::RepoProfile::layout",
          "line": 144,
          "signature": "pub fn layout(&self) -> RepoLayout;",
          "documentation": "Returns the detected layout pattern."
        },
        {
          "name": "::RepoProfile::total_files",
          "line": 149,
          "signature": "pub fn total_files(&self) -> usize;",
          "documentation": "Returns the total number of files scanned."
        },
        {
          "name": "::RepoProfile::total_directories",
          "line": 154,
          "signature": "pub fn total_directories(&self) -> usize;",
          "documentation": "Returns the total number of directories scanned."
        },
        {
          "name": "::RepoProfile::key_directories",
          "line": 159,
          "signature": "pub fn key_directories(&self) -> &[PathBuf];",
          "documentation": "Returns key directories in the project."
        },
        {
          "name": "::RepoProfile::primary_language",
          "line": 164,
          "signature": "pub fn primary_language(&self) -> Option<&DetectedLanguage>;",
          "documentation": "Returns the primary language (most files)."
        },
        {
          "name": "::RepoProfile::uses_language",
          "line": 169,
          "signature": "pub fn uses_language(&self, name: &str) -> bool;",
          "documentation": "Returns true if the repo uses the given language."
        },
        {
          "name": "::RepoProfile::uses_build_system",
          "line": 177,
          "signature": "pub fn uses_build_system(&self, name: &str) -> bool;",
          "documentation": "Returns true if the repo uses the given build system."
        },
        {
          "name": "::RepoScanner",
          "line": 213,
          "signature": "pub struct RepoScanner {\n\n}",
          "documentation": "Scans a repository and builds a structural profile."
        },
        {
          "name": "::RepoScanner::new",
          "line": 227,
          "signature": "pub fn new(root: &Path) -> Self;",
          "documentation": "Creates a new scanner for the given repository root.\n\n# Arguments\n\n* `root` - The root path of the repository to scan."
        },
        {
          "name": "::RepoScanner::with_max_depth",
          "line": 247,
          "signature": "pub fn with_max_depth(mut self, depth: usize) -> Self;",
          "documentation": "Sets the maximum scan depth."
        },
        {
          "name": "::RepoScanner::skip_directory",
          "line": 253,
          "signature": "pub fn skip_directory(mut self, name: impl Into<String>) -> Self;",
          "documentation": "Adds a directory name to skip during scanning."
        },
        {
          "name": "::RepoScanner::scan",
          "line": 264,
          "signature": "pub async fn scan(&self) -> ForgeCoderResult<RepoProfile>;",
          "documentation": "Performs the repository scan and returns a profile.\n\n# Errors\n\nReturns [`ForgeCoderError::RepoScanFailed`] if the root path does not\nexist or is not readable."
        }
      ]
    }
  ]
}
